|
26 | 26 | #include <soc/rockchip/rockchip_grf.h>
|
27 | 27 | #include <soc/rockchip/rk3399_grf.h>
|
28 | 28 | #include <soc/rockchip/rk3568_grf.h>
|
| 29 | +#include <soc/rockchip/rk3588_grf.h> |
29 | 30 |
|
30 |
| -#define DMC_MAX_CHANNELS 2 |
| 31 | +#define DMC_MAX_CHANNELS 4 |
31 | 32 |
|
32 | 33 | #define HIWORD_UPDATE(val, mask) ((val) | (mask) << 16)
|
33 | 34 |
|
@@ -723,9 +724,42 @@ static int rk3568_dfi_init(struct rockchip_dfi *dfi)
|
723 | 724 | return 0;
|
724 | 725 | };
|
725 | 726 |
|
| 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, ®2); |
| 733 | + regmap_read(regmap_pmu, RK3588_PMUGRF_OS_REG3, ®3); |
| 734 | + regmap_read(regmap_pmu, RK3588_PMUGRF_OS_REG4, ®4); |
| 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 | + |
726 | 759 | static const struct of_device_id rockchip_dfi_id_match[] = {
|
727 | 760 | { .compatible = "rockchip,rk3399-dfi", .data = rk3399_dfi_init },
|
728 | 761 | { .compatible = "rockchip,rk3568-dfi", .data = rk3568_dfi_init },
|
| 762 | + { .compatible = "rockchip,rk3588-dfi", .data = rk3588_dfi_init }, |
729 | 763 | { },
|
730 | 764 | };
|
731 | 765 |
|
|
0 commit comments