forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/drivers/soc/rockchip/rockchip-cpuinfo.c
....@@ -57,12 +57,9 @@
5757 }
5858
5959 cell = nvmem_cell_get(dev, "id");
60
- if (IS_ERR(cell)) {
61
- dev_err(dev, "failed to get id cell: %ld\n", PTR_ERR(cell));
62
- if (PTR_ERR(cell) == -EPROBE_DEFER)
63
- return PTR_ERR(cell);
64
- return PTR_ERR(cell);
65
- }
60
+ if (IS_ERR(cell))
61
+ return dev_err_probe(dev, PTR_ERR(cell), "failed to get id cell\n");
62
+
6663 efuse_buf = nvmem_cell_read(cell, &len);
6764 nvmem_cell_put(cell);
6865 if (IS_ERR(efuse_buf))
....@@ -81,12 +78,15 @@
8178
8279 kfree(efuse_buf);
8380
81
+ dev_info(dev, "SoC\t\t: %lx\n", rockchip_soc_id);
82
+
83
+#ifdef CONFIG_NO_GKI
8484 system_serial_low = crc32(0, buf, 8);
8585 system_serial_high = crc32(system_serial_low, buf + 8, 8);
8686
87
- dev_info(dev, "SoC\t\t: %lx\n", rockchip_soc_id);
8887 dev_info(dev, "Serial\t\t: %08x%08x\n",
8988 system_serial_high, system_serial_low);
89
+#endif
9090
9191 return 0;
9292 }
....@@ -105,6 +105,16 @@
105105 },
106106 };
107107
108
+static void rockchip_set_cpu_version_from_os_reg(u32 reg)
109
+{
110
+ void __iomem *r = ioremap(reg, 0x4);
111
+
112
+ if (r) {
113
+ rockchip_set_cpu_version(readl_relaxed(r) & GENMASK(2, 0));
114
+ iounmap(r);
115
+ }
116
+}
117
+
108118 static void px30_init(void)
109119 {
110120 void __iomem *base;
....@@ -120,6 +130,19 @@
120130 rockchip_soc_id = ROCKCHIP_SOC_PX30S;
121131 iounmap(base);
122132 }
133
+}
134
+
135
+#define RV1106_OS_REG1 0xff020204
136
+static void rv1103_init(void)
137
+{
138
+ rockchip_soc_id = ROCKCHIP_SOC_RV1103;
139
+ rockchip_set_cpu_version_from_os_reg(RV1106_OS_REG1);
140
+}
141
+
142
+static void rv1106_init(void)
143
+{
144
+ rockchip_soc_id = ROCKCHIP_SOC_RV1106;
145
+ rockchip_set_cpu_version_from_os_reg(RV1106_OS_REG1);
123146 }
124147
125148 static void rv1109_init(void)
....@@ -176,10 +199,22 @@
176199 #define RK3308_GRF_CHIP_ID 0x800
177200 base = ioremap(RK3308_GRF_PHYS, SZ_4K);
178201 if (base) {
179
- if (readl_relaxed(base + RK3308_GRF_CHIP_ID) == 0x3308)
202
+ u32 v = readl_relaxed(base + RK3308_GRF_CHIP_ID);
203
+
204
+ if (v == 0x3308)
180205 rockchip_soc_id = ROCKCHIP_SOC_RK3308B;
206
+ if (v == 0x3308c)
207
+ rockchip_soc_id = ROCKCHIP_SOC_RK3308BS;
181208 iounmap(base);
182209 }
210
+}
211
+
212
+static void rk3528_init(void)
213
+{
214
+ if (of_machine_is_compatible("rockchip,rk3528"))
215
+ rockchip_soc_id = ROCKCHIP_SOC_RK3528;
216
+ else if (of_machine_is_compatible("rockchip,rk3528a"))
217
+ rockchip_soc_id = ROCKCHIP_SOC_RK3528A;
183218 }
184219
185220 #define RK356X_PMU_GRF_PHYS 0xfdc20000
....@@ -203,13 +238,19 @@
203238 rk356x_set_cpu_version();
204239 }
205240
241
+static void rk3567_init(void)
242
+{
243
+ rockchip_soc_id = ROCKCHIP_SOC_RK3567;
244
+ rk356x_set_cpu_version();
245
+}
246
+
206247 static void rk3568_init(void)
207248 {
208249 rockchip_soc_id = ROCKCHIP_SOC_RK3568;
209250 rk356x_set_cpu_version();
210251 }
211252
212
-int __init rockchip_soc_id_init(void)
253
+int rockchip_soc_id_init(void)
213254 {
214255 if (rockchip_soc_id)
215256 return 0;
....@@ -223,12 +264,20 @@
223264 rk3126_init();
224265 } else if (cpu_is_rk3308()) {
225266 rk3308_init();
267
+ } else if (cpu_is_rv1103()) {
268
+ rv1103_init();
269
+ } else if (cpu_is_rv1106()) {
270
+ rv1106_init();
226271 } else if (cpu_is_rv1109()) {
227272 rv1109_init();
228273 } else if (cpu_is_rv1126()) {
229274 rv1126_init();
230
- } else if (cpu_is_rk3566()) {
275
+ } else if (cpu_is_rk3528()) {
276
+ rk3528_init();
277
+ } else if (cpu_is_rk3566()) {
231278 rk3566_init();
279
+ } else if (cpu_is_rk3567()) {
280
+ rk3567_init();
232281 } else if (cpu_is_rk3568()) {
233282 rk3568_init();
234283 } else if (cpu_is_px30()) {
....@@ -237,6 +286,7 @@
237286
238287 return 0;
239288 }
289
+EXPORT_SYMBOL(rockchip_soc_id_init);
240290 #ifndef MODULE
241291 pure_initcall(rockchip_soc_id_init);
242292 #endif