mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
nvdla: kmd: implement dvfs_statdump & set_mcu_freq
[1] connected dvfs_statdump and clk_mcu_freq
from debugfs to FW interface end to end.
Jira DLA-7799
Change-Id: Ic4871b3acafcd9acf1901a72f5ba3465fb7c252b
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3306119
Signed-off-by: Amit Sharma <amisharma@nvidia.com>
(cherry picked from commit 8417d0c3c1f68760f4c6427863aba75b9586d86c)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3337345
Reviewed-by: Ayush Kumar <ayushk@nvidia.com>
Reviewed-by: Vishal Thoke <vthoke@nvidia.com>
Reviewed-by: Mitch Harwell <mharwell@nvidia.com>
Reviewed-by: Arvind M <am@nvidia.com>
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: svcacv <svcacv@nvidia.com>
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/* SPDX-FileCopyrightText: Copyright (c) 2016-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||||
* Copyright (c) 2016-2023, NVIDIA Corporation. All rights reserved.
|
|
||||||
*
|
*
|
||||||
* NVDLA OS Interface
|
* NVDLA OS Interface
|
||||||
*/
|
*/
|
||||||
@@ -171,6 +170,22 @@ enum dla_commands {
|
|||||||
* Gets stat window size
|
* Gets stat window size
|
||||||
*/
|
*/
|
||||||
DLA_CMD_GET_STAT_WINDOW_SIZE = 16U,
|
DLA_CMD_GET_STAT_WINDOW_SIZE = 16U,
|
||||||
|
/**
|
||||||
|
* Sets init config
|
||||||
|
*/
|
||||||
|
DLA_CMD_SET_INIT_CONFIG = 17U,
|
||||||
|
/**
|
||||||
|
* Preeempts a task
|
||||||
|
*/
|
||||||
|
DLA_CMD_PREEMPT = 18U,
|
||||||
|
/**
|
||||||
|
* Sets clock freq
|
||||||
|
*/
|
||||||
|
DLA_CMD_SET_CLOCK_FREQ = 19U,
|
||||||
|
/**
|
||||||
|
* Gets dvfs statdump
|
||||||
|
*/
|
||||||
|
DLA_CMD_GET_STATISTICS2 = 20U,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -487,7 +487,7 @@ static int debug_dla_fw_dvfs_mode_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
@@ -501,7 +501,7 @@ static int debug_dla_fw_dvfs_enable_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -514,7 +514,7 @@ static int debug_dla_fw_dvfs_freqlist_khz_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -527,7 +527,7 @@ static int debug_dla_fw_dvfs_periodicity_ms_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -536,17 +536,78 @@ static int debug_dla_fw_dvfs_periodicity_ms_show(struct seq_file *s, void *data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nvdla_get_dvfs_statdump(struct nvdla_device *nvdla_dev)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
struct nvdla_cmd_data cmd_data;
|
||||||
|
struct platform_device *pdev;
|
||||||
|
|
||||||
|
/* prepare command data */
|
||||||
|
cmd_data.method_id = DLA_CMD_GET_STATISTICS2;
|
||||||
|
/* method data is not used for this command, passing 0U */
|
||||||
|
cmd_data.method_data = ALIGNED_DMA(0U);
|
||||||
|
cmd_data.wait = true;
|
||||||
|
|
||||||
|
pdev = nvdla_dev->pdev;
|
||||||
|
if (pdev == NULL) {
|
||||||
|
err = -EFAULT;
|
||||||
|
goto fail_no_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* make sure that device is powered on */
|
||||||
|
err = nvdla_module_busy(pdev);
|
||||||
|
if (err != 0) {
|
||||||
|
nvdla_dbg_err(pdev, "failed to power on\n");
|
||||||
|
err = -ENODEV;
|
||||||
|
goto fail_no_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pass set debug command to falcon */
|
||||||
|
err = nvdla_fw_send_cmd(pdev, &cmd_data);
|
||||||
|
if (err != 0) {
|
||||||
|
nvdla_dbg_err(pdev, "failed to send get dvfs statdump command");
|
||||||
|
goto fail_to_send_cmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
fail_to_send_cmd:
|
||||||
|
nvdla_module_idle(pdev);
|
||||||
|
fail_no_dev:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static int debug_dla_fw_dvfs_statdump_show(struct seq_file *s, void *data)
|
static int debug_dla_fw_dvfs_statdump_show(struct seq_file *s, void *data)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
struct nvdla_device *nvdla_dev;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
if (s == NULL) {
|
||||||
if (err < 0)
|
err = -EFAULT;
|
||||||
return -1;
|
goto fail;
|
||||||
nvdla_dbg_info(pdev, "[DVFS] statdump show");
|
}
|
||||||
|
|
||||||
|
nvdla_dev = (struct nvdla_device *) s->private;
|
||||||
|
if (nvdla_dev == NULL) {
|
||||||
|
err = -EFAULT;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
pdev = nvdla_dev->pdev;
|
||||||
|
if (pdev == NULL) {
|
||||||
|
err = -EFAULT;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = nvdla_get_dvfs_statdump(nvdla_dev);
|
||||||
|
if (err != 0) {
|
||||||
|
nvdla_dbg_err(pdev, "Failed to get dvfs statdump");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ctrl clk show functions
|
// ctrl clk show functions
|
||||||
@@ -554,7 +615,7 @@ static int debug_dla_ctrl_clk_activetime_us_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -567,7 +628,7 @@ static int debug_dla_ctrl_clk_enable_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -580,7 +641,7 @@ static int debug_dla_ctrl_clk_core_khz_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -593,7 +654,7 @@ static int debug_dla_ctrl_clk_mcu_khz_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -606,7 +667,7 @@ static int debug_dla_ctrl_clk_idlecount_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -619,7 +680,7 @@ static int debug_dla_ctrl_clk_idledelay_us_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -632,7 +693,7 @@ static int debug_dla_ctrl_clk_idletime_us_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -645,7 +706,7 @@ static int debug_dla_ctrl_clk_statdump_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -659,7 +720,7 @@ static int debug_dla_ctrl_power_activetime_us_show(struct seq_file *s, void *dat
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -672,7 +733,7 @@ static int debug_dla_ctrl_power_enable_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -685,7 +746,7 @@ static int debug_dla_ctrl_power_idlecount_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -698,7 +759,7 @@ static int debug_dla_ctrl_power_idledelay_us_show(struct seq_file *s, void *data
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -711,7 +772,7 @@ static int debug_dla_ctrl_power_idletime_us_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -724,7 +785,7 @@ static int debug_dla_ctrl_power_mode_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -737,7 +798,7 @@ static int debug_dla_ctrl_power_statdump_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -750,7 +811,7 @@ static int debug_dla_ctrl_power_vftable_mv_khz_show(struct seq_file *s, void *da
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -763,7 +824,7 @@ static int debug_dla_ctrl_power_voltage_mv_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -777,7 +838,7 @@ static int debug_dla_ctrl_rail_activetime_us_show(struct seq_file *s, void *data
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -790,7 +851,7 @@ static int debug_dla_ctrl_rail_enable_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -803,7 +864,7 @@ static int debug_dla_ctrl_rail_idlecount_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -816,7 +877,7 @@ static int debug_dla_ctrl_rail_idledelay_us_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -829,7 +890,7 @@ static int debug_dla_ctrl_rail_idletime_us_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -842,7 +903,7 @@ static int debug_dla_ctrl_rail_statdump_show(struct seq_file *s, void *data)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
(void) data;;
|
(void) data;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
err = s_nvdla_get_pdev_from_seq(s, &pdev);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@@ -1126,10 +1187,50 @@ fail:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nvdla_set_mcu_freq_khz(struct nvdla_device *nvdla_dev, uint32_t mcu_freq_khz)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
struct nvdla_cmd_data cmd_data;
|
||||||
|
struct platform_device *pdev;
|
||||||
|
|
||||||
|
/* prepare command data */
|
||||||
|
cmd_data.method_id = DLA_CMD_SET_CLOCK_FREQ;
|
||||||
|
cmd_data.method_data = mcu_freq_khz;
|
||||||
|
cmd_data.wait = true;
|
||||||
|
|
||||||
|
pdev = nvdla_dev->pdev;
|
||||||
|
if (pdev == NULL) {
|
||||||
|
err = -EFAULT;
|
||||||
|
goto fail_no_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* make sure that device is powered on */
|
||||||
|
err = nvdla_module_busy(pdev);
|
||||||
|
if (err != 0) {
|
||||||
|
nvdla_dbg_err(pdev, "failed to power on\n");
|
||||||
|
err = -ENODEV;
|
||||||
|
goto fail_no_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* pass set debug command to falcon */
|
||||||
|
err = nvdla_fw_send_cmd(pdev, &cmd_data);
|
||||||
|
if (err != 0) {
|
||||||
|
nvdla_dbg_err(pdev, "failed to send set mcu freq command");
|
||||||
|
goto fail_to_send_cmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
fail_to_send_cmd:
|
||||||
|
nvdla_module_idle(pdev);
|
||||||
|
fail_no_dev:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t debug_dla_ctrl_clk_mcu_khz_write(struct file *file,
|
static ssize_t debug_dla_ctrl_clk_mcu_khz_write(struct file *file,
|
||||||
const char __user *buffer, size_t count, loff_t *off)
|
const char __user *buffer, size_t count, loff_t *off)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
struct seq_file *priv_data;
|
||||||
|
struct nvdla_device *nvdla_dev;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
long write_value;
|
long write_value;
|
||||||
|
|
||||||
@@ -1138,11 +1239,26 @@ static ssize_t debug_dla_ctrl_clk_mcu_khz_write(struct file *file,
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
err = s_nvdla_get_pdev_from_file(file, &pdev);
|
priv_data = file->private_data;
|
||||||
if (err < 0)
|
if (priv_data == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
nvdla_dbg_info(pdev, "[CTRL/CLK] mcu_khz = %u\n", (unsigned int) write_value);
|
nvdla_dev = (struct nvdla_device *) priv_data->private;
|
||||||
|
if (nvdla_dev == NULL)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
pdev = nvdla_dev->pdev;
|
||||||
|
if (pdev == NULL)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (write_value > UINT_MAX)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
err = nvdla_set_mcu_freq_khz(nvdla_dev, write_value);
|
||||||
|
if (err != 0) {
|
||||||
|
nvdla_dbg_err(pdev, "Failed to send set mcu freq command");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user