Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'v6.12-rockchip-drivers-1' of https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into soc/drivers

rk3308 io-domains, and some default settings for bits in the general
register files for rk3128 and the new rk3576 soc.

* tag 'v6.12-rockchip-drivers-1' of https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
soc: rockchip: grf: Add rk3576 default GRF values
dt-bindings: soc: rockchip: Add rk3576 syscon compatibles
soc: rockchip: grf: Set RK3128's vpu main clock
soc: rockchip: io-domain: Add RK3308 IO voltage domains
dt-bindings: power: rockchip: Document RK3308 IO voltage domains

Link: https://lore.kernel.org/r/23316481.ssLaC8jLEa@diego
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

+111 -1
+24
Documentation/devicetree/bindings/power/rockchip-io-domain.yaml
··· 50 50 - rockchip,rk3188-io-voltage-domain 51 51 - rockchip,rk3228-io-voltage-domain 52 52 - rockchip,rk3288-io-voltage-domain 53 + - rockchip,rk3308-io-voltage-domain 53 54 - rockchip,rk3328-io-voltage-domain 54 55 - rockchip,rk3368-io-voltage-domain 55 56 - rockchip,rk3368-pmu-io-voltage-domain ··· 72 71 - $ref: "#/$defs/rk3188" 73 72 - $ref: "#/$defs/rk3228" 74 73 - $ref: "#/$defs/rk3288" 74 + - $ref: "#/$defs/rk3308" 75 75 - $ref: "#/$defs/rk3328" 76 76 - $ref: "#/$defs/rk3368" 77 77 - $ref: "#/$defs/rk3368-pmu" ··· 195 193 description: The supply connected to SDMMC0_VDD. 196 194 wifi-supply: 197 195 description: The supply connected to APIO3_VDD. Also known as SDIO0. 196 + 197 + rk3308: 198 + if: 199 + properties: 200 + compatible: 201 + contains: 202 + const: rockchip,rk3308-io-voltage-domain 203 + 204 + then: 205 + properties: 206 + vccio0-supply: 207 + description: The supply connected to VCCIO0. 208 + vccio1-supply: 209 + description: The supply connected to VCCIO1. 210 + vccio2-supply: 211 + description: The supply connected to VCCIO2. 212 + vccio3-supply: 213 + description: The supply connected to VCCIO3. 214 + vccio4-supply: 215 + description: The supply connected to VCCIO4. 216 + vccio5-supply: 217 + description: The supply connected to VCCIO5. 198 218 199 219 rk3328: 200 220 if:
+16
Documentation/devicetree/bindings/soc/rockchip/grf.yaml
··· 20 20 - rockchip,rk3568-pipe-grf 21 21 - rockchip,rk3568-pipe-phy-grf 22 22 - rockchip,rk3568-usb2phy-grf 23 + - rockchip,rk3576-bigcore-grf 24 + - rockchip,rk3576-cci-grf 25 + - rockchip,rk3576-gpu-grf 26 + - rockchip,rk3576-litcore-grf 27 + - rockchip,rk3576-npu-grf 28 + - rockchip,rk3576-php-grf 29 + - rockchip,rk3576-pipe-phy-grf 30 + - rockchip,rk3576-pmu1-grf 31 + - rockchip,rk3576-sdgmac-grf 32 + - rockchip,rk3576-sys-grf 33 + - rockchip,rk3576-usb-grf 34 + - rockchip,rk3576-usbdpphy-grf 35 + - rockchip,rk3576-vo0-grf 36 + - rockchip,rk3576-vop-grf 23 37 - rockchip,rk3588-bigcore0-grf 24 38 - rockchip,rk3588-bigcore1-grf 25 39 - rockchip,rk3588-hdptxphy-grf ··· 72 58 - rockchip,rk3399-pmugrf 73 59 - rockchip,rk3568-grf 74 60 - rockchip,rk3568-pmugrf 61 + - rockchip,rk3576-ioc-grf 62 + - rockchip,rk3576-pmu0-grf 75 63 - rockchip,rk3588-usb2phy-grf 76 64 - rockchip,rv1108-grf 77 65 - rockchip,rv1108-pmugrf
+31 -1
drivers/soc/rockchip/grf.c
··· 41 41 }; 42 42 43 43 #define RK3128_GRF_SOC_CON0 0x140 44 + #define RK3128_GRF_SOC_CON1 0x144 44 45 45 46 static const struct rockchip_grf_value rk3128_defaults[] __initconst = { 46 47 { "jtag switching", RK3128_GRF_SOC_CON0, HIWORD_UPDATE(0, 1, 8) }, 48 + { "vpu main clock", RK3128_GRF_SOC_CON1, HIWORD_UPDATE(0, 1, 10) }, 47 49 }; 48 50 49 51 static const struct rockchip_grf_info rk3128_grf __initconst = { ··· 123 121 .num_values = ARRAY_SIZE(rk3566_defaults), 124 122 }; 125 123 124 + #define RK3576_SYSGRF_SOC_CON1 0x0004 125 + 126 + static const struct rockchip_grf_value rk3576_defaults_sys_grf[] __initconst = { 127 + { "i3c0 weakpull", RK3576_SYSGRF_SOC_CON1, HIWORD_UPDATE(3, 3, 6) }, 128 + { "i3c1 weakpull", RK3576_SYSGRF_SOC_CON1, HIWORD_UPDATE(3, 3, 8) }, 129 + }; 130 + 131 + static const struct rockchip_grf_info rk3576_sysgrf __initconst = { 132 + .values = rk3576_defaults_sys_grf, 133 + .num_values = ARRAY_SIZE(rk3576_defaults_sys_grf), 134 + }; 135 + 136 + #define RK3576_IOCGRF_MISC_CON 0x04F0 137 + 138 + static const struct rockchip_grf_value rk3576_defaults_ioc_grf[] __initconst = { 139 + { "jtag switching", RK3576_IOCGRF_MISC_CON, HIWORD_UPDATE(0, 1, 1) }, 140 + }; 141 + 142 + static const struct rockchip_grf_info rk3576_iocgrf __initconst = { 143 + .values = rk3576_defaults_ioc_grf, 144 + .num_values = ARRAY_SIZE(rk3576_defaults_ioc_grf), 145 + }; 146 + 126 147 #define RK3588_GRF_SOC_CON6 0x0318 127 148 128 149 static const struct rockchip_grf_value rk3588_defaults[] __initconst = { ··· 156 131 .values = rk3588_defaults, 157 132 .num_values = ARRAY_SIZE(rk3588_defaults), 158 133 }; 159 - 160 134 161 135 static const struct of_device_id rockchip_grf_dt_match[] __initconst = { 162 136 { ··· 182 158 }, { 183 159 .compatible = "rockchip,rk3566-pipe-grf", 184 160 .data = (void *)&rk3566_pipegrf, 161 + }, { 162 + .compatible = "rockchip,rk3576-sys-grf", 163 + .data = (void *)&rk3576_sysgrf, 164 + }, { 165 + .compatible = "rockchip,rk3576-ioc-grf", 166 + .data = (void *)&rk3576_iocgrf, 185 167 }, { 186 168 .compatible = "rockchip,rk3588-sys-grf", 187 169 .data = (void *)&rk3588_sysgrf,
+40
drivers/soc/rockchip/io-domain.c
··· 39 39 #define RK3288_SOC_CON2_FLASH0 BIT(7) 40 40 #define RK3288_SOC_FLASH_SUPPLY_NUM 2 41 41 42 + #define RK3308_SOC_CON0 0x300 43 + #define RK3308_SOC_CON0_VCCIO3 BIT(8) 44 + #define RK3308_SOC_VCCIO3_SUPPLY_NUM 3 45 + 42 46 #define RK3328_SOC_CON4 0x410 43 47 #define RK3328_SOC_CON4_VCCIO2 BIT(7) 44 48 #define RK3328_SOC_VCCIO2_SUPPLY_NUM 1 ··· 233 229 dev_warn(iod->dev, "couldn't update flash0 ctrl\n"); 234 230 } 235 231 232 + static void rk3308_iodomain_init(struct rockchip_iodomain *iod) 233 + { 234 + int ret; 235 + u32 val; 236 + 237 + /* if no vccio3 supply we should leave things alone */ 238 + if (!iod->supplies[RK3308_SOC_VCCIO3_SUPPLY_NUM].reg) 239 + return; 240 + 241 + /* 242 + * set vccio3 iodomain to also use this framework 243 + * instead of a special gpio. 244 + */ 245 + val = RK3308_SOC_CON0_VCCIO3 | (RK3308_SOC_CON0_VCCIO3 << 16); 246 + ret = regmap_write(iod->grf, RK3308_SOC_CON0, val); 247 + if (ret < 0) 248 + dev_warn(iod->dev, "couldn't update vccio3 vsel ctrl\n"); 249 + } 250 + 236 251 static void rk3328_iodomain_init(struct rockchip_iodomain *iod) 237 252 { 238 253 int ret; ··· 397 374 "gpio1830", /* APIO2_VDD */ 398 375 }, 399 376 .init = rk3288_iodomain_init, 377 + }; 378 + 379 + static const struct rockchip_iodomain_soc_data soc_data_rk3308 = { 380 + .grf_offset = 0x300, 381 + .supply_names = { 382 + "vccio0", 383 + "vccio1", 384 + "vccio2", 385 + "vccio3", 386 + "vccio4", 387 + "vccio5", 388 + }, 389 + .init = rk3308_iodomain_init, 400 390 }; 401 391 402 392 static const struct rockchip_iodomain_soc_data soc_data_rk3328 = { ··· 563 527 { 564 528 .compatible = "rockchip,rk3288-io-voltage-domain", 565 529 .data = &soc_data_rk3288 530 + }, 531 + { 532 + .compatible = "rockchip,rk3308-io-voltage-domain", 533 + .data = &soc_data_rk3308 566 534 }, 567 535 { 568 536 .compatible = "rockchip,rk3328-io-voltage-domain",