diff --git a/drivers/soc/rockchip/rockchip-cpuinfo.c b/drivers/soc/rockchip/rockchip-cpuinfo.c index d34bf5153131..eae9cb55b3db 100644 --- a/drivers/soc/rockchip/rockchip-cpuinfo.c +++ b/drivers/soc/rockchip/rockchip-cpuinfo.c @@ -105,6 +105,23 @@ static struct platform_driver rockchip_cpuinfo_driver = { }, }; +static void px30_init(void) +{ + void __iomem *base; + + rockchip_soc_id = ROCKCHIP_SOC_PX30; +#define PX30_DDR_GRF_BASE 0xFF630000 +#define PX30_DDR_GRF_CON1 0x04 + base = ioremap(PX30_DDR_GRF_BASE, SZ_4K); + if (base) { + unsigned int val = readl_relaxed(base + PX30_DDR_GRF_CON1); + + if (((val >> 14) & 0x03) == 0x03) + rockchip_soc_id = ROCKCHIP_SOC_PX30S; + iounmap(base); + } +} + static void rv1109_init(void) { rockchip_soc_id = ROCKCHIP_SOC_RV1109; @@ -214,6 +231,8 @@ int __init rockchip_soc_id_init(void) rk3566_init(); } else if (cpu_is_rk3568()) { rk3568_init(); + } else if (cpu_is_px30()) { + px30_init(); } return 0; diff --git a/include/linux/rockchip/cpu.h b/include/linux/rockchip/cpu.h index 33a1db1f8e5f..eef266c9413e 100644 --- a/include/linux/rockchip/cpu.h +++ b/include/linux/rockchip/cpu.h @@ -18,6 +18,7 @@ #define ROCKCHIP_CPU_MASK 0xffff0000 #define ROCKCHIP_CPU_SHIFT 16 +#define ROCKCHIP_CPU_PX30 0x33260000 #define ROCKCHIP_CPU_RV1109 0x11090000 #define ROCKCHIP_CPU_RV1126 0x11260000 #define ROCKCHIP_CPU_RK312X 0x31260000 @@ -81,6 +82,20 @@ static inline int rockchip_soc_id_init(void) #endif +#ifdef CONFIG_CPU_PX30 +static inline bool cpu_is_px30(void) +{ + if (rockchip_soc_id) + return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_PX30; + return of_machine_is_compatible("rockchip,px30") || + of_machine_is_compatible("rockchip,px30s") || + of_machine_is_compatible("rockchip,rk3326") || + of_machine_is_compatible("rockchip,rk3326s"); +} +#else +static inline bool cpu_is_px30(void) { return false; } +#endif + #if defined(CONFIG_CPU_RV1126) || defined(CONFIG_CPU_RV1109) static inline bool cpu_is_rv1109(void) { @@ -158,6 +173,8 @@ static inline bool cpu_is_rk3568(void) { return false; } #endif #define ROCKCHIP_SOC_MASK (ROCKCHIP_CPU_MASK | 0xff) +#define ROCKCHIP_SOC_PX30 (ROCKCHIP_CPU_PX30 | 0x00) +#define ROCKCHIP_SOC_PX30S (ROCKCHIP_CPU_PX30 | 0x01) #define ROCKCHIP_SOC_RV1109 (ROCKCHIP_CPU_RV1109 | 0x00) #define ROCKCHIP_SOC_RV1126 (ROCKCHIP_CPU_RV1126 | 0x00) #define ROCKCHIP_SOC_RK3126 (ROCKCHIP_CPU_RK312X | 0x00) @@ -179,6 +196,8 @@ static inline bool soc_is_##id(void) \ return of_machine_is_compatible("rockchip,"#id); \ } +ROCKCHIP_SOC(px30, PX30) +ROCKCHIP_SOC(px30s, PX30S) ROCKCHIP_SOC(rv1109, RV1109) ROCKCHIP_SOC(rv1126, RV1126) ROCKCHIP_SOC(rk3126, RK3126)