[PATCH V9 03/12] soc: mediatek: add driver for dvfsrc support
Georgi Djakov
georgi.djakov at linaro.org
Thu Mar 18 09:14:22 GMT 2021
Hi Henry,
On 3/2/21 05:47, Henry Chen wrote:
> Add dvfsrc driver for MT6873/MT8183/MT8192
>
> Signed-off-by: Henry Chen <henryc.chen at mediatek.com>
> ---
> drivers/soc/mediatek/Kconfig | 11 +
> drivers/soc/mediatek/Makefile | 1 +
> drivers/soc/mediatek/mtk-dvfsrc.c | 421 ++++++++++++++++++++++++++++++++
> include/linux/soc/mediatek/mtk_dvfsrc.h | 35 +++
> 4 files changed, 468 insertions(+)
> create mode 100644 drivers/soc/mediatek/mtk-dvfsrc.c
> create mode 100644 include/linux/soc/mediatek/mtk_dvfsrc.h
>
> diff --git a/drivers/soc/mediatek/Kconfig b/drivers/soc/mediatek/Kconfig
> index fdd8bc0..2dcf023 100644
> --- a/drivers/soc/mediatek/Kconfig
> +++ b/drivers/soc/mediatek/Kconfig
> @@ -26,6 +26,17 @@ config MTK_DEVAPC
> The violation information is logged for further analysis or
> countermeasures.
>
> +config MTK_DVFSRC
> + tristate "MediaTek DVFSRC Support"
> + depends on ARCH_MEDIATEK
I'm wondering whether adding COMPILE_TEST would make sense here, but it's
also fine as is.
> + help
> + Say yes here to add support for the MediaTek DVFSRC (dynamic voltage
> + and frequency scaling resource collector) found
> + on different MediaTek SoCs. The DVFSRC is a proprietary
> + hardware which is used to collect all the requests from
> + system and turn into the decision of minimum Vcore voltage
> + and minimum DRAM frequency to fulfill those requests.
> +
> config MTK_INFRACFG
> bool "MediaTek INFRACFG Support"
> select REGMAP
> diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile
> index b6908db..4ead103 100644
> --- a/drivers/soc/mediatek/Makefile
> +++ b/drivers/soc/mediatek/Makefile
[..]
> +void mtk_dvfsrc_send_request(const struct device *dev, u32 cmd, u64 data)
> +{
> + int ret, state;
> + struct mtk_dvfsrc *dvfsrc = dev_get_drvdata(dev);
> +
> + dev_dbg(dvfsrc->dev, "cmd: %d, data: %llu\n", cmd, data);
> +
> + switch (cmd) {
> + case MTK_DVFSRC_CMD_BW_REQUEST:
> + dvfsrc->dvd->set_dram_bw(dvfsrc, data);
> + return;
> + case MTK_DVFSRC_CMD_PEAK_BW_REQUEST:
> + if (dvfsrc->dvd->set_dram_peak_bw)
> + dvfsrc->dvd->set_dram_peak_bw(dvfsrc, data);
> + return;
> + case MTK_DVFSRC_CMD_OPP_REQUEST:
> + if (dvfsrc->dvd->set_opp_level)
> + dvfsrc->dvd->set_opp_level(dvfsrc, data);
> + break;
> + case MTK_DVFSRC_CMD_VCORE_REQUEST:
> + dvfsrc->dvd->set_vcore_level(dvfsrc, data);
> + break;
> + case MTK_DVFSRC_CMD_HRTBW_REQUEST:
> + if (dvfsrc->dvd->set_dram_hrtbw)
> + dvfsrc->dvd->set_dram_hrtbw(dvfsrc, data);
> + else
> + return;
> + break;
> + case MTK_DVFSRC_CMD_VSCP_REQUEST:
> + dvfsrc->dvd->set_vscp_level(dvfsrc, data);
> + break;
> + default:
> + dev_err(dvfsrc->dev, "unknown command: %d\n", cmd);
> + return;
> + }
> +
> + /* DVFSRC need to wait at least 2T(~196ns) to handle request
> + * after recieving command
Nit: s/recieving/receiving/
Thanks,
Georgi
More information about the linux-arm-kernel
mailing list