Skip to content

Commit 481d97b

Browse files
saschahauerchanwoochoi
authored andcommitted
PM / devfreq: rockchip-dfi: add support for RK3588
Add support for the RK3588 to the driver. The RK3588 has four DDR channels with a register stride of 0x4000 between the channel registers, also it has a DDRMON_CTRL register per channel. Link: https://lore.kernel.org/all/[email protected]/ Reviewed-by: Jonathan Cameron <[email protected]> Reviewed-by: Sebastian Reichel <[email protected]> Acked-by: Chanwoo Choi <[email protected]> Acked-by: Heiko Stuebner <[email protected]> Signed-off-by: Sascha Hauer <[email protected]> Signed-off-by: Chanwoo Choi <[email protected]>
1 parent bbe7cbd commit 481d97b

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

drivers/devfreq/event/rockchip-dfi.c

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626
#include <soc/rockchip/rockchip_grf.h>
2727
#include <soc/rockchip/rk3399_grf.h>
2828
#include <soc/rockchip/rk3568_grf.h>
29+
#include <soc/rockchip/rk3588_grf.h>
2930

30-
#define DMC_MAX_CHANNELS 2
31+
#define DMC_MAX_CHANNELS 4
3132

3233
#define HIWORD_UPDATE(val, mask) ((val) | (mask) << 16)
3334

@@ -723,9 +724,42 @@ static int rk3568_dfi_init(struct rockchip_dfi *dfi)
723724
return 0;
724725
};
725726

727+
static int rk3588_dfi_init(struct rockchip_dfi *dfi)
728+
{
729+
struct regmap *regmap_pmu = dfi->regmap_pmu;
730+
u32 reg2, reg3, reg4;
731+
732+
regmap_read(regmap_pmu, RK3588_PMUGRF_OS_REG2, &reg2);
733+
regmap_read(regmap_pmu, RK3588_PMUGRF_OS_REG3, &reg3);
734+
regmap_read(regmap_pmu, RK3588_PMUGRF_OS_REG4, &reg4);
735+
736+
/* lower 3 bits of the DDR type */
737+
dfi->ddr_type = FIELD_GET(RK3588_PMUGRF_OS_REG2_DRAMTYPE_INFO, reg2);
738+
739+
/*
740+
* For version three and higher the upper two bits of the DDR type are
741+
* in RK3588_PMUGRF_OS_REG3
742+
*/
743+
if (FIELD_GET(RK3588_PMUGRF_OS_REG3_SYSREG_VERSION, reg3) >= 0x3)
744+
dfi->ddr_type |= FIELD_GET(RK3588_PMUGRF_OS_REG3_DRAMTYPE_INFO_V3, reg3) << 3;
745+
746+
dfi->buswidth[0] = FIELD_GET(RK3588_PMUGRF_OS_REG2_BW_CH0, reg2) == 0 ? 4 : 2;
747+
dfi->buswidth[1] = FIELD_GET(RK3588_PMUGRF_OS_REG2_BW_CH1, reg2) == 0 ? 4 : 2;
748+
dfi->buswidth[2] = FIELD_GET(RK3568_PMUGRF_OS_REG2_BW_CH0, reg4) == 0 ? 4 : 2;
749+
dfi->buswidth[3] = FIELD_GET(RK3588_PMUGRF_OS_REG2_BW_CH1, reg4) == 0 ? 4 : 2;
750+
dfi->channel_mask = FIELD_GET(RK3588_PMUGRF_OS_REG2_CH_INFO, reg2) |
751+
FIELD_GET(RK3588_PMUGRF_OS_REG2_CH_INFO, reg4) << 2;
752+
dfi->max_channels = 4;
753+
754+
dfi->ddrmon_stride = 0x4000;
755+
756+
return 0;
757+
};
758+
726759
static const struct of_device_id rockchip_dfi_id_match[] = {
727760
{ .compatible = "rockchip,rk3399-dfi", .data = rk3399_dfi_init },
728761
{ .compatible = "rockchip,rk3568-dfi", .data = rk3568_dfi_init },
762+
{ .compatible = "rockchip,rk3588-dfi", .data = rk3588_dfi_init },
729763
{ },
730764
};
731765

include/soc/rockchip/rk3588_grf.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* SPDX-License-Identifier: GPL-2.0+ */
2+
#ifndef __SOC_RK3588_GRF_H
3+
#define __SOC_RK3588_GRF_H
4+
5+
#define RK3588_PMUGRF_OS_REG2 0x208
6+
#define RK3588_PMUGRF_OS_REG2_DRAMTYPE_INFO GENMASK(15, 13)
7+
#define RK3588_PMUGRF_OS_REG2_BW_CH0 GENMASK(3, 2)
8+
#define RK3588_PMUGRF_OS_REG2_BW_CH1 GENMASK(19, 18)
9+
#define RK3588_PMUGRF_OS_REG2_CH_INFO GENMASK(29, 28)
10+
11+
#define RK3588_PMUGRF_OS_REG3 0x20c
12+
#define RK3588_PMUGRF_OS_REG3_DRAMTYPE_INFO_V3 GENMASK(13, 12)
13+
#define RK3588_PMUGRF_OS_REG3_SYSREG_VERSION GENMASK(31, 28)
14+
15+
#define RK3588_PMUGRF_OS_REG4 0x210
16+
#define RK3588_PMUGRF_OS_REG5 0x214
17+
18+
#endif /* __SOC_RK3588_GRF_H */

0 commit comments

Comments
 (0)