]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soc: mediatek: mtk-dvfsrc: Add a new callback for calc_dram_bw
authorAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Mon, 24 Nov 2025 11:06:55 +0000 (12:06 +0100)
committerAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Thu, 8 Jan 2026 09:27:49 +0000 (10:27 +0100)
In preparation for adding support for DVFSRC Version 4, add a new
callback for calculating the dram bandwidth, assign the current
calculation algo to all of the currently supported SoCs, and use
this in __dvfsrc_set_dram_bw_v1().

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
drivers/soc/mediatek/mtk-dvfsrc.c

index a684e405daf750f3c96f90ec46253e10dd2fe248..3cbccbb7469adbc22bd50f0cdbd5eb3590096312 100644 (file)
@@ -73,6 +73,7 @@ struct mtk_dvfsrc {
 struct dvfsrc_soc_data {
        const int *regs;
        const struct dvfsrc_opp_desc *opps_desc;
+       u32 (*calc_dram_bw)(struct mtk_dvfsrc *dvfsrc, int type, u64 bw);
        u32 (*get_target_level)(struct mtk_dvfsrc *dvfsrc);
        u32 (*get_current_level)(struct mtk_dvfsrc *dvfsrc);
        u32 (*get_vcore_level)(struct mtk_dvfsrc *dvfsrc);
@@ -274,10 +275,15 @@ static void dvfsrc_set_vscp_level_v2(struct mtk_dvfsrc *dvfsrc, u32 level)
        dvfsrc_writel(dvfsrc, DVFSRC_VCORE, val);
 }
 
+static u32 dvfsrc_calc_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, int type, u64 bw)
+{
+       return (u32)div_u64(bw, 100 * 1000);
+}
+
 static void __dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, u32 reg,
                                    int type, u16 max_bw, u16 min_bw, u64 bw)
 {
-       u32 new_bw = (u32)div_u64(bw, 100 * 1000);
+       u32 new_bw = dvfsrc->dvd->calc_dram_bw(dvfsrc, type, bw);
 
        /* If bw constraints (in mbps) are defined make sure to respect them */
        if (max_bw)
@@ -519,6 +525,7 @@ static const struct dvfsrc_opp_desc dvfsrc_opp_mt8183_desc[] = {
 static const struct dvfsrc_soc_data mt8183_data = {
        .opps_desc = dvfsrc_opp_mt8183_desc,
        .regs = dvfsrc_mt8183_regs,
+       .calc_dram_bw = dvfsrc_calc_dram_bw_v1,
        .get_target_level = dvfsrc_get_target_level_v1,
        .get_current_level = dvfsrc_get_current_level_v1,
        .get_vcore_level = dvfsrc_get_vcore_level_v1,
@@ -549,6 +556,7 @@ static const struct dvfsrc_opp_desc dvfsrc_opp_mt8195_desc[] = {
 static const struct dvfsrc_soc_data mt8195_data = {
        .opps_desc = dvfsrc_opp_mt8195_desc,
        .regs = dvfsrc_mt8195_regs,
+       .calc_dram_bw = dvfsrc_calc_dram_bw_v1,
        .get_target_level = dvfsrc_get_target_level_v2,
        .get_current_level = dvfsrc_get_current_level_v2,
        .get_vcore_level = dvfsrc_get_vcore_level_v2,