"Das U-Boot" Source Tree

Merge tag 'u-boot-imx-next-20240919' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx into next

CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/22363

- Several updates to i.MX9 SOC and i.MX93 EVK.
- Power domain fixes.
- TRDC cleanup and update.
- MAC address layout update.
- Add support for the i.MX9301/9302 variants.
- Add runtime detection of voltage mode.
- Generalize some code for i.MX8M and i.MX9.
- Add support for Comvetia imx6q-lxr board.

Tom Rini 146be6f0 2ac0a302

+3749 -1936
+1
arch/arm/dts/Makefile
··· 812 812 imx6q-icore-rqs.dtb \ 813 813 imx6q-kp.dtb \ 814 814 imx6q-logicpd.dtb \ 815 + imx6q-lxr.dtb \ 815 816 imx6q-marsboard.dtb \ 816 817 imx6q-mccmon6.dtb\ 817 818 imx6q-nitrogen6x.dtb \
+87
arch/arm/dts/imx6q-lxr.dts
··· 1 + // SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2 + // 3 + // Copyright 2024 Comvetia AG 4 + 5 + /dts-v1/; 6 + #include "imx6q-phytec-pfla02.dtsi" 7 + 8 + / { 9 + model = "COMVETIA QSoIP LXR-2"; 10 + compatible = "comvetia,imx6q-lxr", "phytec,imx6q-pfla02", "fsl,imx6q"; 11 + 12 + chosen { 13 + stdout-path = &uart4; 14 + }; 15 + 16 + spi { 17 + compatible = "spi-gpio"; 18 + pinctrl-names = "default"; 19 + pinctrl-0 = <&pinctrl_spi_gpio>; 20 + sck-gpios = <&gpio5 8 GPIO_ACTIVE_HIGH>; 21 + mosi-gpios = <&gpio5 7 GPIO_ACTIVE_HIGH>; 22 + num-chipselects = <0>; 23 + #address-cells = <1>; 24 + #size-cells = <0>; 25 + 26 + fpga@0 { 27 + compatible = "altr,fpga-passive-serial"; 28 + reg = <0>; 29 + pinctrl-names = "default"; 30 + pinctrl-0 = <&pinctrl_fpga>; 31 + nconfig-gpios = <&gpio4 18 GPIO_ACTIVE_LOW>; 32 + nstat-gpios = <&gpio4 19 GPIO_ACTIVE_LOW>; 33 + confd-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>; 34 + }; 35 + }; 36 + }; 37 + 38 + &ecspi3 { 39 + pinctrl-names = "default"; 40 + pinctrl-0 = <&pinctrl_ecspi3>; 41 + cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>; 42 + status = "okay"; 43 + 44 + flash@0 { 45 + compatible = "jedec,spi-nor"; 46 + reg = <0>; 47 + spi-max-frequency = <20000000>; 48 + }; 49 + }; 50 + 51 + &fec { 52 + status = "okay"; 53 + }; 54 + 55 + &i2c3 { 56 + status = "okay"; 57 + }; 58 + 59 + &uart3 { 60 + status = "okay"; 61 + }; 62 + 63 + &uart4 { 64 + status = "okay"; 65 + }; 66 + 67 + &usdhc3 { 68 + no-1-8-v; 69 + status = "okay"; 70 + }; 71 + 72 + &iomuxc { 73 + pinctrl_fpga: fpgagrp { 74 + fsl,pins = < 75 + MX6QDL_PAD_GPIO_6__GPIO1_IO06 0x1b0b0 76 + MX6QDL_PAD_DI0_PIN2__GPIO4_IO18 0x1b0b0 77 + MX6QDL_PAD_DI0_PIN3__GPIO4_IO19 0x1b0b0 78 + >; 79 + }; 80 + 81 + pinctrl_spi_gpio: spigpiogrp { 82 + fsl,pins = < 83 + MX6QDL_PAD_DISP0_DAT14__GPIO5_IO08 0x1b0b0 84 + MX6QDL_PAD_DISP0_DAT13__GPIO5_IO07 0x1b0b0 85 + >; 86 + }; 87 + };
+17
arch/arm/dts/imx6q-phytec-pfla02.dtsi
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * Copyright 2013 Christian Hemp, Phytec Messtechnik GmbH 4 + */ 5 + 6 + #include "imx6q.dtsi" 7 + #include "imx6qdl-phytec-pfla02.dtsi" 8 + 9 + / { 10 + model = "Phytec phyFLEX-i.MX6 Quad"; 11 + compatible = "phytec,imx6q-pfla02", "fsl,imx6q"; 12 + 13 + memory@10000000 { 14 + device_type = "memory"; 15 + reg = <0x10000000 0x80000000>; 16 + }; 17 + };
+467
arch/arm/dts/imx6qdl-phytec-pfla02.dtsi
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * Copyright 2013 Christian Hemp, Phytec Messtechnik GmbH 4 + */ 5 + 6 + #include <dt-bindings/gpio/gpio.h> 7 + 8 + / { 9 + model = "Phytec phyFLEX-i.MX6 Quad"; 10 + compatible = "phytec,imx6q-pfla02", "fsl,imx6q"; 11 + 12 + memory@10000000 { 13 + device_type = "memory"; 14 + reg = <0x10000000 0x80000000>; 15 + }; 16 + 17 + reg_usb_otg_vbus: regulator-usb-otg-vbus { 18 + compatible = "regulator-fixed"; 19 + regulator-name = "usb_otg_vbus"; 20 + regulator-min-microvolt = <5000000>; 21 + regulator-max-microvolt = <5000000>; 22 + gpio = <&gpio4 15 0>; 23 + enable-active-high; 24 + }; 25 + 26 + reg_usb_h1_vbus: regulator-usb-h1-vbus { 27 + compatible = "regulator-fixed"; 28 + pinctrl-names = "default"; 29 + pinctrl-0 = <&pinctrl_usbh1_vbus>; 30 + regulator-name = "usb_h1_vbus"; 31 + regulator-min-microvolt = <5000000>; 32 + regulator-max-microvolt = <5000000>; 33 + gpio = <&gpio1 0 0>; 34 + enable-active-high; 35 + }; 36 + 37 + gpio_leds: leds { 38 + pinctrl-names = "default"; 39 + pinctrl-0 = <&pinctrl_leds>; 40 + compatible = "gpio-leds"; 41 + 42 + led_green: led-green { 43 + label = "phyflex:green"; 44 + gpios = <&gpio1 30 0>; 45 + }; 46 + 47 + led_red: led-red { 48 + label = "phyflex:red"; 49 + gpios = <&gpio2 31 0>; 50 + }; 51 + }; 52 + }; 53 + 54 + &audmux { 55 + pinctrl-names = "default"; 56 + pinctrl-0 = <&pinctrl_audmux>; 57 + status = "disabled"; 58 + }; 59 + 60 + &can1 { 61 + pinctrl-names = "default"; 62 + pinctrl-0 = <&pinctrl_flexcan1>; 63 + status = "disabled"; 64 + }; 65 + 66 + &ecspi3 { 67 + pinctrl-names = "default"; 68 + pinctrl-0 = <&pinctrl_ecspi3>; 69 + status = "okay"; 70 + cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>; 71 + 72 + som_flash: flash@0 { 73 + compatible = "m25p80", "jedec,spi-nor"; 74 + spi-max-frequency = <20000000>; 75 + reg = <0>; 76 + }; 77 + }; 78 + 79 + &fec { 80 + pinctrl-names = "default"; 81 + pinctrl-0 = <&pinctrl_enet>; 82 + phy-handle = <&ethphy>; 83 + phy-mode = "rgmii"; 84 + phy-reset-duration = <10>; /* in msecs */ 85 + phy-reset-gpios = <&gpio3 23 GPIO_ACTIVE_LOW>; 86 + phy-supply = <&vdd_eth_io_reg>; 87 + status = "disabled"; 88 + 89 + fec_mdio: mdio { 90 + #address-cells = <1>; 91 + #size-cells = <0>; 92 + 93 + ethphy: ethernet-phy@0 { 94 + compatible = "ethernet-phy-ieee802.3-c22"; 95 + reg = <0>; 96 + txc-skew-ps = <1680>; 97 + rxc-skew-ps = <1860>; 98 + }; 99 + }; 100 + }; 101 + 102 + &gpmi { 103 + pinctrl-names = "default"; 104 + pinctrl-0 = <&pinctrl_gpmi_nand>; 105 + nand-on-flash-bbt; 106 + status = "okay"; 107 + }; 108 + 109 + &i2c1 { 110 + pinctrl-names = "default"; 111 + pinctrl-0 = <&pinctrl_i2c1>; 112 + status = "okay"; 113 + 114 + som_eeprom: eeprom@50 { 115 + compatible = "catalyst,24c32", "atmel,24c32"; 116 + pagesize = <32>; 117 + reg = <0x50>; 118 + }; 119 + 120 + pmic@58 { 121 + pinctrl-names = "default"; 122 + pinctrl-0 = <&pinctrl_pmic>; 123 + compatible = "dlg,da9063"; 124 + reg = <0x58>; 125 + interrupt-parent = <&gpio2>; 126 + interrupts = <9 IRQ_TYPE_LEVEL_LOW>; /* active-low GPIO2_9 */ 127 + #interrupt-cells = <2>; 128 + interrupt-controller; 129 + 130 + regulators { 131 + vddcore_reg: bcore1 { 132 + regulator-min-microvolt = <730000>; 133 + regulator-max-microvolt = <1380000>; 134 + regulator-always-on; 135 + }; 136 + 137 + vddsoc_reg: bcore2 { 138 + regulator-min-microvolt = <730000>; 139 + regulator-max-microvolt = <1380000>; 140 + regulator-always-on; 141 + }; 142 + 143 + vdd_ddr3_reg: bpro { 144 + regulator-min-microvolt = <1500000>; 145 + regulator-max-microvolt = <1500000>; 146 + regulator-always-on; 147 + }; 148 + 149 + vdd_3v3_reg: bperi { 150 + regulator-min-microvolt = <3300000>; 151 + regulator-max-microvolt = <3300000>; 152 + regulator-always-on; 153 + }; 154 + 155 + vdd_buckmem_reg: bmem { 156 + regulator-min-microvolt = <3300000>; 157 + regulator-max-microvolt = <3300000>; 158 + regulator-always-on; 159 + }; 160 + 161 + vdd_eth_reg: bio { 162 + regulator-min-microvolt = <1200000>; 163 + regulator-max-microvolt = <1200000>; 164 + regulator-always-on; 165 + }; 166 + 167 + vdd_eth_io_reg: ldo4 { 168 + regulator-min-microvolt = <2500000>; 169 + regulator-max-microvolt = <2500000>; 170 + regulator-always-on; 171 + }; 172 + 173 + vdd_mx6_snvs_reg: ldo5 { 174 + regulator-min-microvolt = <3000000>; 175 + regulator-max-microvolt = <3000000>; 176 + regulator-always-on; 177 + }; 178 + 179 + vdd_3v3_pmic_io_reg: ldo6 { 180 + regulator-min-microvolt = <3300000>; 181 + regulator-max-microvolt = <3300000>; 182 + regulator-always-on; 183 + }; 184 + 185 + vdd_sd0_reg: ldo9 { 186 + regulator-min-microvolt = <3300000>; 187 + regulator-max-microvolt = <3300000>; 188 + }; 189 + 190 + vdd_sd1_reg: ldo10 { 191 + regulator-min-microvolt = <3300000>; 192 + regulator-max-microvolt = <3300000>; 193 + }; 194 + 195 + vdd_mx6_high_reg: ldo11 { 196 + regulator-min-microvolt = <3000000>; 197 + regulator-max-microvolt = <3000000>; 198 + regulator-always-on; 199 + }; 200 + }; 201 + 202 + da9063_rtc: rtc { 203 + compatible = "dlg,da9063-rtc"; 204 + }; 205 + 206 + da9063_wdog: watchdog { 207 + compatible = "dlg,da9063-watchdog"; 208 + }; 209 + 210 + onkey { 211 + compatible = "dlg,da9063-onkey"; 212 + status = "disabled"; 213 + }; 214 + }; 215 + }; 216 + 217 + &i2c2 { 218 + pinctrl-names = "default"; 219 + pinctrl-0 = <&pinctrl_i2c2>; 220 + clock-frequency = <100000>; 221 + }; 222 + 223 + &i2c3 { 224 + pinctrl-names = "default"; 225 + pinctrl-0 = <&pinctrl_i2c3>; 226 + clock-frequency = <100000>; 227 + }; 228 + 229 + &iomuxc { 230 + imx6q-phytec-pfla02 { 231 + pinctrl_ecspi3: ecspi3grp { 232 + fsl,pins = < 233 + MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1 234 + MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1 235 + MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1 236 + MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x80000000 /* CS0 */ 237 + >; 238 + }; 239 + 240 + pinctrl_enet: enetgrp { 241 + fsl,pins = < 242 + MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0 243 + MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0 244 + MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b030 245 + MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b030 246 + MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b030 247 + MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b030 248 + MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b030 249 + MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b030 250 + MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0 251 + MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b030 252 + MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b030 253 + MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b030 254 + MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b030 255 + MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b030 256 + MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b030 257 + MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0 258 + MX6QDL_PAD_EIM_D23__GPIO3_IO23 0x80000000 /* Reset GPIO */ 259 + >; 260 + }; 261 + 262 + pinctrl_flexcan1: flexcan1grp { 263 + fsl,pins = < 264 + MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x1b0b0 265 + MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x1b0b0 266 + >; 267 + }; 268 + 269 + pinctrl_gpmi_nand: gpminandgrp { 270 + fsl,pins = < 271 + MX6QDL_PAD_NANDF_CLE__NAND_CLE 0xb0b1 272 + MX6QDL_PAD_NANDF_ALE__NAND_ALE 0xb0b1 273 + MX6QDL_PAD_NANDF_WP_B__NAND_WP_B 0xb0b1 274 + MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000 275 + MX6QDL_PAD_NANDF_CS0__NAND_CE0_B 0xb0b1 276 + MX6QDL_PAD_NANDF_CS1__NAND_CE1_B 0xb0b1 277 + MX6QDL_PAD_SD4_CMD__NAND_RE_B 0xb0b1 278 + MX6QDL_PAD_SD4_CLK__NAND_WE_B 0xb0b1 279 + MX6QDL_PAD_NANDF_D0__NAND_DATA00 0xb0b1 280 + MX6QDL_PAD_NANDF_D1__NAND_DATA01 0xb0b1 281 + MX6QDL_PAD_NANDF_D2__NAND_DATA02 0xb0b1 282 + MX6QDL_PAD_NANDF_D3__NAND_DATA03 0xb0b1 283 + MX6QDL_PAD_NANDF_D4__NAND_DATA04 0xb0b1 284 + MX6QDL_PAD_NANDF_D5__NAND_DATA05 0xb0b1 285 + MX6QDL_PAD_NANDF_D6__NAND_DATA06 0xb0b1 286 + MX6QDL_PAD_NANDF_D7__NAND_DATA07 0xb0b1 287 + MX6QDL_PAD_SD4_DAT0__NAND_DQS 0x00b1 288 + >; 289 + }; 290 + 291 + pinctrl_i2c1: i2c1grp { 292 + fsl,pins = < 293 + MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 294 + MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 295 + >; 296 + }; 297 + 298 + pinctrl_i2c2: i2c2grp { 299 + fsl,pins = < 300 + MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1 301 + MX6QDL_PAD_EIM_D16__I2C2_SDA 0x4001b8b1 302 + >; 303 + }; 304 + 305 + pinctrl_i2c3: i2c3grp { 306 + fsl,pins = < 307 + MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1 308 + MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1 309 + >; 310 + }; 311 + 312 + pinctrl_leds: ledsgrp { 313 + fsl,pins = < 314 + MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* Green LED */ 315 + MX6QDL_PAD_EIM_EB3__GPIO2_IO31 0x80000000 /* Red LED */ 316 + >; 317 + }; 318 + 319 + pinctrl_pcie: pciegrp { 320 + fsl,pins = <MX6QDL_PAD_DI0_PIN15__GPIO4_IO17 0x80000000>; 321 + }; 322 + 323 + pinctrl_pmic: pmicgrp { 324 + fsl,pins = <MX6QDL_PAD_SD4_DAT1__GPIO2_IO09 0x80000000>; /* PMIC interrupt */ 325 + }; 326 + 327 + pinctrl_uart3: uart3grp { 328 + fsl,pins = < 329 + MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1 330 + MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1 331 + MX6QDL_PAD_EIM_D31__UART3_RTS_B 0x1b0b1 332 + MX6QDL_PAD_EIM_D30__UART3_CTS_B 0x1b0b1 333 + >; 334 + }; 335 + 336 + pinctrl_uart4: uart4grp { 337 + fsl,pins = < 338 + MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1 339 + MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1 340 + >; 341 + }; 342 + 343 + pinctrl_usbh1_vbus: usbh1vbusgrp { 344 + fsl,pins = < 345 + MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0 346 + >; 347 + }; 348 + 349 + pinctrl_usbotg: usbotggrp { 350 + fsl,pins = < 351 + MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059 352 + MX6QDL_PAD_KEY_COL4__USB_OTG_OC 0x1b0b0 353 + MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000 354 + >; 355 + }; 356 + 357 + pinctrl_usdhc2: usdhc2grp { 358 + fsl,pins = < 359 + MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059 360 + MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059 361 + MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059 362 + MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059 363 + MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059 364 + MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059 365 + >; 366 + }; 367 + 368 + pinctrl_usdhc3: usdhc3grp { 369 + fsl,pins = < 370 + MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059 371 + MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059 372 + MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059 373 + MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059 374 + MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059 375 + MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059 376 + >; 377 + }; 378 + 379 + pinctrl_usdhc3_cdwp: usdhc3cdwp { 380 + fsl,pins = < 381 + MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000 382 + MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 383 + >; 384 + }; 385 + 386 + pinctrl_audmux: audmuxgrp { 387 + fsl,pins = < 388 + MX6QDL_PAD_DISP0_DAT16__AUD5_TXC 0x130b0 389 + MX6QDL_PAD_DISP0_DAT17__AUD5_TXD 0x110b0 390 + MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS 0x130b0 391 + MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x130b0 392 + >; 393 + }; 394 + }; 395 + }; 396 + 397 + &pcie { 398 + pinctrl-names = "default"; 399 + pinctrl-0 = <&pinctrl_pcie>; 400 + reset-gpio = <&gpio4 17 GPIO_ACTIVE_LOW>; 401 + status = "disabled"; 402 + }; 403 + 404 + &reg_arm { 405 + vin-supply = <&vddcore_reg>; 406 + }; 407 + 408 + &reg_pu { 409 + vin-supply = <&vddsoc_reg>; 410 + }; 411 + 412 + &reg_soc { 413 + vin-supply = <&vddsoc_reg>; 414 + }; 415 + 416 + &uart3 { 417 + pinctrl-names = "default"; 418 + pinctrl-0 = <&pinctrl_uart3>; 419 + uart-has-rtscts; 420 + status = "disabled"; 421 + }; 422 + 423 + &uart4 { 424 + pinctrl-names = "default"; 425 + pinctrl-0 = <&pinctrl_uart4>; 426 + status = "disabled"; 427 + }; 428 + 429 + &usbh1 { 430 + vbus-supply = <&reg_usb_h1_vbus>; 431 + status = "disabled"; 432 + }; 433 + 434 + &usbotg { 435 + vbus-supply = <&reg_usb_otg_vbus>; 436 + pinctrl-names = "default"; 437 + pinctrl-0 = <&pinctrl_usbotg>; 438 + disable-over-current; 439 + status = "disabled"; 440 + }; 441 + 442 + &usdhc2 { 443 + pinctrl-names = "default"; 444 + pinctrl-0 = <&pinctrl_usdhc2>; 445 + cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; 446 + wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; 447 + vmmc-supply = <&vdd_sd1_reg>; 448 + status = "disabled"; 449 + }; 450 + 451 + &usdhc3 { 452 + pinctrl-names = "default"; 453 + pinctrl-0 = <&pinctrl_usdhc3 454 + &pinctrl_usdhc3_cdwp>; 455 + cd-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; 456 + wp-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; 457 + vmmc-supply = <&vdd_sd0_reg>; 458 + status = "disabled"; 459 + }; 460 + 461 + &wdog1 { 462 + /* 463 + * Rely on PMIC reboot handler. Internal i.MX6 watchdog, that is also 464 + * used for reboot, does not reset all external PMIC voltages on reset. 465 + */ 466 + status = "disabled"; 467 + };
+2
arch/arm/include/asm/arch-imx/cpu.h
··· 68 68 #define MXC_CPU_IMX9321 0xC6 /* dummy ID */ 69 69 #define MXC_CPU_IMX9312 0xC7 /* dummy ID */ 70 70 #define MXC_CPU_IMX9311 0xC8 /* dummy ID */ 71 + #define MXC_CPU_IMX9302 0xC9 /* dummy ID */ 72 + #define MXC_CPU_IMX9301 0xCA /* dummy ID */ 71 73 72 74 #define MXC_SOC_MX6 0x60 73 75 #define MXC_SOC_MX7 0x70
+2 -1
arch/arm/include/asm/arch-imx9/clock.h
··· 211 211 u32 div; 212 212 }; 213 213 214 - int clock_init(void); 214 + int clock_init_early(void); 215 + int clock_init_late(void); 215 216 u32 get_clk_src_rate(enum ccm_clk_src source); 216 217 u32 get_lpuart_clk(void); 217 218 void init_uart_clk(u32 index);
+10
arch/arm/include/asm/arch-imx9/imx-regs.h
··· 25 25 #define ANATOP_BASE_ADDR 0x44480000UL 26 26 27 27 #define BLK_CTRL_WAKEUPMIX_BASE_ADDR 0x42420000 28 + #define BLK_CTRL_NS_ANOMIX_BASE_ADDR 0x44210000 28 29 #define BLK_CTRL_S_ANOMIX_BASE_ADDR 0x444f0000 29 30 30 31 #define SRC_IPS_BASE_ADDR (0x44460000) ··· 38 39 #define SRC_MIX_SLICE_FUNC_STAT_PSW_STAT BIT(0) 39 40 #define SRC_MIX_SLICE_FUNC_STAT_RST_STAT BIT(2) 40 41 #define SRC_MIX_SLICE_FUNC_STAT_ISO_STAT BIT(4) 42 + #define SRC_MIX_SLICE_FUNC_STAT_SSAR_STAT BIT(8) 41 43 #define SRC_MIX_SLICE_FUNC_STAT_MEM_STAT BIT(12) 42 44 43 45 #define IMG_CONTAINER_BASE (0x80000000UL) ··· 48 50 #define BCTRL_GPR_ENET_QOS_INTF_SEL_RGMII (0x1 << 1) 49 51 #define BCTRL_GPR_ENET_QOS_CLK_GEN_EN (0x1 << 0) 50 52 53 + #define TRDC_AON_BASE (0x44270000UL) 54 + #define TRDC_WAKEUP_BASE (0x42460000UL) 55 + #define TRDC_MEGA_BASE (0x42810000UL) 56 + #define TRDC_NIC_BASE (0x49010000UL) 57 + 51 58 #define MARKETING_GRADING_MASK GENMASK(5, 4) 52 59 #define SPEED_GRADING_MASK GENMASK(11, 6) 60 + #define NUM_WORDS_PER_BANK 8 61 + #define HW_CFG1 19 62 + #define HW_CFG2 20 53 63 54 64 #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) 55 65 #include <asm/types.h>
+11
arch/arm/include/asm/arch-imx9/sys_proto.h
··· 8 8 9 9 #include <asm/mach-imx/sys_proto.h> 10 10 11 + enum imx9_soc_voltage_mode { 12 + VOLT_LOW_DRIVE = 0, 13 + VOLT_NOMINAL_DRIVE, 14 + VOLT_OVER_DRIVE, 15 + }; 16 + 11 17 void soc_power_init(void); 12 18 bool m33_is_rom_kicked(void); 13 19 int m33_prepare(void); 20 + 21 + enum imx9_soc_voltage_mode soc_target_voltage_mode(void); 22 + 23 + #define is_voltage_mode(mode) (soc_target_voltage_mode() == (mode)) 24 + 14 25 #endif
+7 -1
arch/arm/include/asm/mach-imx/sys_proto.h
··· 85 85 #define is_imx93() (is_cpu_type(MXC_CPU_IMX93) || is_cpu_type(MXC_CPU_IMX9331) || \ 86 86 is_cpu_type(MXC_CPU_IMX9332) || is_cpu_type(MXC_CPU_IMX9351) || \ 87 87 is_cpu_type(MXC_CPU_IMX9322) || is_cpu_type(MXC_CPU_IMX9321) || \ 88 - is_cpu_type(MXC_CPU_IMX9312) || is_cpu_type(MXC_CPU_IMX9311)) 88 + is_cpu_type(MXC_CPU_IMX9312) || is_cpu_type(MXC_CPU_IMX9311) || \ 89 + is_cpu_type(MXC_CPU_IMX9302) || is_cpu_type(MXC_CPU_IMX9301)) 89 90 #define is_imx9351() (is_cpu_type(MXC_CPU_IMX9351)) 90 91 #define is_imx9332() (is_cpu_type(MXC_CPU_IMX9332)) 91 92 #define is_imx9331() (is_cpu_type(MXC_CPU_IMX9331)) ··· 93 94 #define is_imx9321() (is_cpu_type(MXC_CPU_IMX9321)) 94 95 #define is_imx9312() (is_cpu_type(MXC_CPU_IMX9312)) 95 96 #define is_imx9311() (is_cpu_type(MXC_CPU_IMX9311)) 97 + #define is_imx9302() (is_cpu_type(MXC_CPU_IMX9302)) 98 + #define is_imx9301() (is_cpu_type(MXC_CPU_IMX9301)) 96 99 97 100 #define is_imxrt1020() (is_cpu_type(MXC_CPU_IMXRT1020)) 98 101 #define is_imxrt1050() (is_cpu_type(MXC_CPU_IMXRT1050)) ··· 275 278 276 279 enum boot_device get_boot_device(void); 277 280 281 + int disable_cpu_nodes(void *blob, const char * const *nodes_path, 282 + u32 num_disabled_cores, u32 max_cores); 283 + int fixup_thermal_trips(void *blob, const char *name); 278 284 #endif
+6
arch/arm/mach-imx/Makefile
··· 21 21 obj-y += cpu.o 22 22 endif 23 23 24 + ifeq ($(SOC),$(filter $(SOC),imx8m imx9)) 25 + ifneq ($(CONFIG_SPL_BUILD),y) 26 + obj-y += fdt.o 27 + endif 28 + endif 29 + 24 30 ifeq ($(SOC),$(filter $(SOC),mx5 mx6)) 25 31 obj-y += cpu.o speed.o 26 32 ifneq ($(CONFIG_MX51),y)
+129
arch/arm/mach-imx/fdt.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /* 3 + * Copyright 2024 NXP 4 + */ 5 + 6 + #include <errno.h> 7 + #include <fdtdec.h> 8 + #include <malloc.h> 9 + #include <asm/arch/sys_proto.h> 10 + 11 + static void disable_thermal_cpu_nodes(void *blob, u32 num_disabled_cores, u32 max_cores) 12 + { 13 + static const char * const thermal_path[] = { 14 + "/thermal-zones/cpu-thermal/cooling-maps/map0" 15 + }; 16 + 17 + int nodeoff, cnt, i, ret, j; 18 + u32 num_le32 = max_cores * 3; 19 + u32 *cooling_dev = (u32 *)malloc(num_le32 * sizeof(__le32)); 20 + 21 + if (!cooling_dev) { 22 + printf("failed to alloc cooling dev\n"); 23 + return; 24 + } 25 + 26 + for (i = 0; i < ARRAY_SIZE(thermal_path); i++) { 27 + nodeoff = fdt_path_offset(blob, thermal_path[i]); 28 + if (nodeoff < 0) 29 + continue; /* Not found, skip it */ 30 + 31 + cnt = fdtdec_get_int_array_count(blob, nodeoff, "cooling-device", 32 + cooling_dev, num_le32); 33 + if (cnt < 0) 34 + continue; 35 + 36 + if (cnt != num_le32) 37 + printf("Warning: %s, cooling-device count %d\n", thermal_path[i], cnt); 38 + 39 + for (j = 0; j < cnt; j++) 40 + cooling_dev[j] = cpu_to_fdt32(cooling_dev[j]); 41 + 42 + ret = fdt_setprop(blob, nodeoff, "cooling-device", &cooling_dev, 43 + sizeof(__le32) * (num_le32 - num_disabled_cores * 3)); 44 + if (ret < 0) { 45 + printf("Warning: %s, cooling-device setprop failed %d\n", 46 + thermal_path[i], ret); 47 + continue; 48 + } 49 + 50 + printf("Update node %s, cooling-device prop\n", thermal_path[i]); 51 + } 52 + 53 + free(cooling_dev); 54 + } 55 + 56 + int disable_cpu_nodes(void *blob, const char * const *nodes_path, u32 num_disabled_cores, 57 + u32 max_cores) 58 + { 59 + u32 i = 0; 60 + int rc; 61 + int nodeoff; 62 + 63 + if (max_cores == 0 || (num_disabled_cores > (max_cores - 1))) 64 + return -EINVAL; 65 + 66 + i = max_cores - num_disabled_cores; 67 + 68 + for (; i < max_cores; i++) { 69 + nodeoff = fdt_path_offset(blob, nodes_path[i]); 70 + if (nodeoff < 0) 71 + continue; /* Not found, skip it */ 72 + 73 + debug("Found %s node\n", nodes_path[i]); 74 + 75 + rc = fdt_del_node(blob, nodeoff); 76 + if (rc < 0) { 77 + printf("Unable to delete node %s, err=%s\n", 78 + nodes_path[i], fdt_strerror(rc)); 79 + } else { 80 + printf("Delete node %s\n", nodes_path[i]); 81 + } 82 + } 83 + 84 + disable_thermal_cpu_nodes(blob, num_disabled_cores, max_cores); 85 + 86 + return 0; 87 + } 88 + 89 + int fixup_thermal_trips(void *blob, const char *name) 90 + { 91 + int minc, maxc; 92 + int node, trip; 93 + 94 + node = fdt_path_offset(blob, "/thermal-zones"); 95 + if (node < 0) 96 + return node; 97 + 98 + node = fdt_subnode_offset(blob, node, name); 99 + if (node < 0) 100 + return node; 101 + 102 + node = fdt_subnode_offset(blob, node, "trips"); 103 + if (node < 0) 104 + return node; 105 + 106 + get_cpu_temp_grade(&minc, &maxc); 107 + 108 + fdt_for_each_subnode(trip, blob, node) { 109 + const char *type; 110 + int temp, ret; 111 + 112 + type = fdt_getprop(blob, trip, "type", NULL); 113 + if (!type) 114 + continue; 115 + 116 + temp = 0; 117 + if (!strcmp(type, "critical")) 118 + temp = 1000 * (maxc - 5); 119 + else if (!strcmp(type, "passive")) 120 + temp = 1000 * (maxc - 10); 121 + if (temp) { 122 + ret = fdt_setprop_u32(blob, trip, "temperature", temp); 123 + if (ret) 124 + return ret; 125 + } 126 + } 127 + 128 + return 0; 129 + }
+13 -166
arch/arm/mach-imx/imx8m/soc.c
··· 1184 1184 return disable_fdt_nodes(blob, nodes_path_8mp, ARRAY_SIZE(nodes_path_8mp)); 1185 1185 } 1186 1186 1187 - static void disable_thermal_cpu_nodes(void *blob, u32 disabled_cores) 1188 - { 1189 - static const char * const thermal_path[] = { 1190 - "/thermal-zones/cpu-thermal/cooling-maps/map0" 1191 - }; 1192 - 1193 - int nodeoff, cnt, i, ret, j; 1194 - u32 cooling_dev[12]; 1195 - 1196 - for (i = 0; i < ARRAY_SIZE(thermal_path); i++) { 1197 - nodeoff = fdt_path_offset(blob, thermal_path[i]); 1198 - if (nodeoff < 0) 1199 - continue; /* Not found, skip it */ 1200 - 1201 - cnt = fdtdec_get_int_array_count(blob, nodeoff, "cooling-device", cooling_dev, 12); 1202 - if (cnt < 0) 1203 - continue; 1204 - 1205 - if (cnt != 12) 1206 - printf("Warning: %s, cooling-device count %d\n", thermal_path[i], cnt); 1207 - 1208 - for (j = 0; j < cnt; j++) 1209 - cooling_dev[j] = cpu_to_fdt32(cooling_dev[j]); 1210 - 1211 - ret = fdt_setprop(blob, nodeoff, "cooling-device", &cooling_dev, 1212 - sizeof(u32) * (12 - disabled_cores * 3)); 1213 - if (ret < 0) { 1214 - printf("Warning: %s, cooling-device setprop failed %d\n", 1215 - thermal_path[i], ret); 1216 - continue; 1217 - } 1218 - 1219 - printf("Update node %s, cooling-device prop\n", thermal_path[i]); 1220 - } 1221 - } 1222 - 1223 - static void disable_pmu_cpu_nodes(void *blob, u32 disabled_cores) 1224 - { 1225 - static const char * const pmu_path[] = { 1226 - "/pmu" 1227 - }; 1228 - 1229 - int nodeoff, cnt, i, ret, j; 1230 - u32 irq_affinity[4]; 1231 - 1232 - for (i = 0; i < ARRAY_SIZE(pmu_path); i++) { 1233 - nodeoff = fdt_path_offset(blob, pmu_path[i]); 1234 - if (nodeoff < 0) 1235 - continue; /* Not found, skip it */ 1236 - 1237 - cnt = fdtdec_get_int_array_count(blob, nodeoff, "interrupt-affinity", 1238 - irq_affinity, 4); 1239 - if (cnt < 0) 1240 - continue; 1241 - 1242 - if (cnt != 4) 1243 - printf("Warning: %s, interrupt-affinity count %d\n", pmu_path[i], cnt); 1244 - 1245 - for (j = 0; j < cnt; j++) 1246 - irq_affinity[j] = cpu_to_fdt32(irq_affinity[j]); 1247 - 1248 - ret = fdt_setprop(blob, nodeoff, "interrupt-affinity", &irq_affinity, 1249 - sizeof(u32) * (4 - disabled_cores)); 1250 - if (ret < 0) { 1251 - printf("Warning: %s, interrupt-affinity setprop failed %d\n", 1252 - pmu_path[i], ret); 1253 - continue; 1254 - } 1255 - 1256 - printf("Update node %s, interrupt-affinity prop\n", pmu_path[i]); 1257 - } 1258 - } 1259 - 1260 - static int disable_cpu_nodes(void *blob, u32 disabled_cores) 1261 - { 1262 - static const char * const nodes_path[] = { 1263 - "/cpus/cpu@1", 1264 - "/cpus/cpu@2", 1265 - "/cpus/cpu@3", 1266 - }; 1267 - u32 i = 0; 1268 - int rc; 1269 - int nodeoff; 1270 - 1271 - if (disabled_cores > 3) 1272 - return -EINVAL; 1273 - 1274 - i = 3 - disabled_cores; 1275 - 1276 - for (; i < 3; i++) { 1277 - nodeoff = fdt_path_offset(blob, nodes_path[i]); 1278 - if (nodeoff < 0) 1279 - continue; /* Not found, skip it */ 1280 - 1281 - debug("Found %s node\n", nodes_path[i]); 1282 - 1283 - rc = fdt_del_node(blob, nodeoff); 1284 - if (rc < 0) { 1285 - printf("Unable to delete node %s, err=%s\n", 1286 - nodes_path[i], fdt_strerror(rc)); 1287 - } else { 1288 - printf("Delete node %s\n", nodes_path[i]); 1289 - } 1290 - } 1291 - 1292 - disable_thermal_cpu_nodes(blob, disabled_cores); 1293 - disable_pmu_cpu_nodes(blob, disabled_cores); 1294 - 1295 - return 0; 1296 - } 1297 - 1298 1187 static int cleanup_nodes_for_efi(void *blob) 1299 1188 { 1300 1189 static const char * const path[][2] = { ··· 1326 1215 return 0; 1327 1216 } 1328 1217 1329 - static int fixup_thermal_trips(void *blob, const char *name) 1330 - { 1331 - int minc, maxc; 1332 - int node, trip; 1333 - 1334 - node = fdt_path_offset(blob, "/thermal-zones"); 1335 - if (node < 0) 1336 - return node; 1337 - 1338 - node = fdt_subnode_offset(blob, node, name); 1339 - if (node < 0) 1340 - return node; 1341 - 1342 - node = fdt_subnode_offset(blob, node, "trips"); 1343 - if (node < 0) 1344 - return node; 1345 - 1346 - get_cpu_temp_grade(&minc, &maxc); 1347 - 1348 - fdt_for_each_subnode(trip, blob, node) { 1349 - const char *type; 1350 - int temp, ret; 1351 - 1352 - type = fdt_getprop(blob, trip, "type", NULL); 1353 - if (!type) 1354 - continue; 1355 - 1356 - temp = 0; 1357 - if (!strcmp(type, "critical")) 1358 - temp = 1000 * maxc; 1359 - else if (!strcmp(type, "passive")) 1360 - temp = 1000 * (maxc - 10); 1361 - if (temp) { 1362 - ret = fdt_setprop_u32(blob, trip, "temperature", temp); 1363 - if (ret) 1364 - return ret; 1365 - } 1366 - } 1367 - 1368 - return 0; 1369 - } 1370 - 1371 1218 #define OPTEE_SHM_SIZE 0x00400000 1372 1219 static int ft_add_optee_node(void *fdt, struct bd_info *bd) 1373 1220 { ··· 1446 1293 1447 1294 int ft_system_setup(void *blob, struct bd_info *bd) 1448 1295 { 1296 + static const char * const nodes_path[] = { 1297 + "/cpus/cpu@0", 1298 + "/cpus/cpu@1", 1299 + "/cpus/cpu@2", 1300 + "/cpus/cpu@3", 1301 + }; 1302 + 1449 1303 #ifdef CONFIG_IMX8MQ 1450 1304 int i = 0; 1451 1305 int rc; ··· 1489 1343 1490 1344 /* Disable the CPU idle for A0 chip since the HW does not support it */ 1491 1345 if (is_soc_rev(CHIP_REV_1_0)) { 1492 - static const char * const nodes_path[] = { 1493 - "/cpus/cpu@0", 1494 - "/cpus/cpu@1", 1495 - "/cpus/cpu@2", 1496 - "/cpus/cpu@3", 1497 - }; 1498 - 1499 1346 for (i = 0; i < ARRAY_SIZE(nodes_path); i++) { 1500 1347 nodeoff = fdt_path_offset(blob, nodes_path[i]); 1501 1348 if (nodeoff < 0) ··· 1527 1374 } 1528 1375 1529 1376 if (is_imx8md()) 1530 - disable_cpu_nodes(blob, 2); 1377 + disable_cpu_nodes(blob, nodes_path, 2, 4); 1531 1378 1532 1379 #elif defined(CONFIG_IMX8MM) 1533 1380 if (is_imx8mml() || is_imx8mmdl() || is_imx8mmsl()) 1534 1381 disable_vpu_nodes(blob); 1535 1382 1536 1383 if (is_imx8mmd() || is_imx8mmdl()) 1537 - disable_cpu_nodes(blob, 2); 1384 + disable_cpu_nodes(blob, nodes_path, 2, 4); 1538 1385 else if (is_imx8mms() || is_imx8mmsl()) 1539 - disable_cpu_nodes(blob, 3); 1386 + disable_cpu_nodes(blob, nodes_path, 3, 4); 1540 1387 1541 1388 #elif defined(CONFIG_IMX8MN) 1542 1389 if (is_imx8mnl() || is_imx8mndl() || is_imx8mnsl()) ··· 1553 1400 #endif 1554 1401 1555 1402 if (is_imx8mnd() || is_imx8mndl() || is_imx8mnud()) 1556 - disable_cpu_nodes(blob, 2); 1403 + disable_cpu_nodes(blob, nodes_path, 2, 4); 1557 1404 else if (is_imx8mns() || is_imx8mnsl() || is_imx8mnus()) 1558 - disable_cpu_nodes(blob, 3); 1405 + disable_cpu_nodes(blob, nodes_path, 3, 4); 1559 1406 1560 1407 #elif defined(CONFIG_IMX8MP) 1561 1408 if (is_imx8mpul()) { ··· 1582 1429 disable_dsp_nodes(blob); 1583 1430 1584 1431 if (is_imx8mpd()) 1585 - disable_cpu_nodes(blob, 2); 1432 + disable_cpu_nodes(blob, nodes_path, 2, 4); 1586 1433 #endif 1587 1434 1588 1435 cleanup_nodes_for_efi(blob);
+1 -5
arch/arm/mach-imx/imx9/Kconfig
··· 5 5 help 6 6 This option enables the support for AHAB secure boot. 7 7 8 - config IMX9_LOW_DRIVE_MODE 9 - bool "Configure to i.MX9 low drive mode" 10 - help 11 - This option enables the settings for iMX9 low drive mode. 12 - 13 8 config IMX9 14 9 bool 15 10 select BINMAN ··· 30 25 31 26 config TARGET_IMX93_11X11_EVK 32 27 bool "imx93_11x11_evk" 28 + select OF_BOARD_FIXUP 33 29 select IMX93 34 30 imply OF_UPSTREAM 35 31
+32 -8
arch/arm/mach-imx/imx9/clock.c
··· 41 41 FRAC_PLL_RATE(466000000U, 1, 155, 8, 1, 3), /* 466Mhz */ 42 42 FRAC_PLL_RATE(400000000U, 1, 200, 12, 0, 1), /* 400Mhz */ 43 43 FRAC_PLL_RATE(300000000U, 1, 150, 12, 0, 1), 44 + FRAC_PLL_RATE(233000000U, 1, 174, 18, 3, 4), /* 233Mhz */ 44 45 }; 45 46 46 47 /* return in khz */ ··· 603 604 { 604 605 u32 div; 605 606 606 - if (IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE)) 607 + if (is_voltage_mode(VOLT_LOW_DRIVE)) 607 608 div = 3; /* 266.67 Mhz */ 608 609 else 609 610 div = 2; /* 400 Mhz */ ··· 700 701 701 702 #endif 702 703 703 - #if IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE) 704 - struct imx_clk_setting imx_clk_settings[] = { 704 + struct imx_clk_setting imx_clk_ld_settings[] = { 705 705 /* Set A55 clk to 500M */ 706 706 {ARM_A55_CLK_ROOT, SYS_PLL_PFD0, 2}, 707 707 /* Set A55 periphal to 200M */ ··· 728 728 /* NIC_APB to 133M */ 729 729 {NIC_APB_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3} 730 730 }; 731 - #else 731 + 732 732 struct imx_clk_setting imx_clk_settings[] = { 733 733 /* 734 734 * Set A55 clk to 500M. This clock root is normally used as intermediate ··· 762 762 /* NIC_APB to 133M */ 763 763 {NIC_APB_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3} 764 764 }; 765 - #endif 766 765 767 - int clock_init(void) 766 + void bus_clock_init_low_drive(void) 767 + { 768 + int i; 769 + 770 + for (i = 0; i < ARRAY_SIZE(imx_clk_ld_settings); i++) { 771 + ccm_clk_root_cfg(imx_clk_ld_settings[i].clk_root, 772 + imx_clk_ld_settings[i].src, imx_clk_ld_settings[i].div); 773 + } 774 + } 775 + 776 + void bus_clock_init(void) 768 777 { 769 778 int i; 770 779 ··· 772 781 ccm_clk_root_cfg(imx_clk_settings[i].clk_root, 773 782 imx_clk_settings[i].src, imx_clk_settings[i].div); 774 783 } 784 + } 775 785 776 - if (IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE)) 777 - set_arm_clk(MHZ(900)); 786 + int clock_init_early(void) 787 + { 788 + int i; 778 789 779 790 /* allow for non-secure access */ 780 791 for (i = 0; i < OSCPLL_END; i++) ··· 788 799 789 800 for (i = 0; i < SHARED_GPR_NUM; i++) 790 801 ccm_shared_gpr_tz_access(i, true, false, false); 802 + 803 + return 0; 804 + } 805 + 806 + /* Set bus and A55 core clock per voltage mode */ 807 + int clock_init_late(void) 808 + { 809 + if (is_voltage_mode(VOLT_LOW_DRIVE)) { 810 + bus_clock_init_low_drive(); 811 + set_arm_core_max_clk(); 812 + } else { 813 + bus_clock_init(); 814 + } 791 815 792 816 return 0; 793 817 }
+204 -54
arch/arm/mach-imx/imx9/soc.c
··· 96 96 */ 97 97 u32 get_cpu_speed_grade_hz(void) 98 98 { 99 - u32 speed, max_speed; 99 + int ret; 100 + u32 bank, word, speed, max_speed; 100 101 u32 val; 101 102 102 - fuse_read(2, 3, &val); 103 + bank = HW_CFG1 / NUM_WORDS_PER_BANK; 104 + word = HW_CFG1 % NUM_WORDS_PER_BANK; 105 + ret = fuse_read(bank, word, &val); 106 + if (ret) 107 + val = 0; /* If read fuse failed, return as blank fuse */ 108 + 103 109 val = FIELD_GET(SPEED_GRADING_MASK, val) & 0xF; 104 110 105 111 speed = MHZ(2300) - val * MHZ(100); ··· 122 128 */ 123 129 u32 get_cpu_temp_grade(int *minc, int *maxc) 124 130 { 125 - u32 val; 131 + int ret; 132 + u32 bank, word, val; 126 133 127 - fuse_read(2, 3, &val); 134 + bank = HW_CFG1 / NUM_WORDS_PER_BANK; 135 + word = HW_CFG1 % NUM_WORDS_PER_BANK; 136 + ret = fuse_read(bank, word, &val); 137 + if (ret) 138 + val = 0; /* If read fuse failed, return as blank fuse */ 139 + 128 140 val = FIELD_GET(MARKETING_GRADING_MASK, val); 129 141 130 142 if (minc && maxc) { ··· 160 172 161 173 static u32 get_cpu_variant_type(u32 type) 162 174 { 163 - /* word 19 */ 164 - u32 val = readl((ulong)FSB_BASE_ADDR + 0x8000 + (19 << 2)); 165 - u32 val2 = readl((ulong)FSB_BASE_ADDR + 0x8000 + (20 << 2)); 175 + u32 bank, word, val, val2; 176 + int ret; 177 + 178 + bank = HW_CFG1 / NUM_WORDS_PER_BANK; 179 + word = HW_CFG1 % NUM_WORDS_PER_BANK; 180 + ret = fuse_read(bank, word, &val); 181 + if (ret) 182 + val = 0; /* If read fuse failed, return as blank fuse */ 183 + 184 + bank = HW_CFG2 / NUM_WORDS_PER_BANK; 185 + word = HW_CFG2 % NUM_WORDS_PER_BANK; 186 + ret = fuse_read(bank, word, &val2); 187 + if (ret) 188 + val2 = 0; /* If read fuse failed, return as blank fuse */ 189 + 166 190 bool npu_disable = !!(val & BIT(13)); 167 191 bool core1_disable = !!(val & BIT(15)); 168 192 u32 pack_9x9_fused = BIT(4) | BIT(17) | BIT(19) | BIT(24); 193 + 194 + /* Low performance 93 part */ 195 + if (((val >> 6) & 0x3F) == 0xE && npu_disable) 196 + return core1_disable ? MXC_CPU_IMX9301 : MXC_CPU_IMX9302; 169 197 170 198 if ((val2 & pack_9x9_fused) == pack_9x9_fused) 171 199 type = MXC_CPU_IMX9322; ··· 216 244 217 245 void init_wdog(void) 218 246 { 219 - u32 src_val; 220 - 221 247 disable_wdog((void __iomem *)WDG3_BASE_ADDR); 222 248 disable_wdog((void __iomem *)WDG4_BASE_ADDR); 223 249 disable_wdog((void __iomem *)WDG5_BASE_ADDR); 224 - 225 - src_val = readl(0x54460018); /* reset mask */ 226 - src_val &= ~0x1c; 227 - writel(src_val, 0x54460018); 228 250 } 229 251 230 252 static struct mm_region imx93_mem_map[] = { ··· 480 502 if (ret) 481 503 goto err; 482 504 483 - mac[0] = val[1] >> 24; 484 - mac[1] = val[1] >> 16; 485 - mac[2] = val[0] >> 24; 486 - mac[3] = val[0] >> 16; 487 - mac[4] = val[0] >> 8; 488 - mac[5] = val[0]; 505 + if (is_imx93() && is_soc_rev(CHIP_REV_1_0)) { 506 + mac[0] = val[1] >> 24; 507 + mac[1] = val[1] >> 16; 508 + mac[2] = val[0] >> 24; 509 + mac[3] = val[0] >> 16; 510 + mac[4] = val[0] >> 8; 511 + mac[5] = val[0]; 512 + } else { 513 + mac[0] = val[0] >> 24; 514 + mac[1] = val[0] >> 16; 515 + mac[2] = val[0] >> 8; 516 + mac[3] = val[0]; 517 + mac[4] = val[1] >> 24; 518 + mac[5] = val[1] >> 16; 519 + } 489 520 } 490 521 491 522 debug("%s: MAC%d: %02x.%02x.%02x.%02x.%02x.%02x\n", ··· 507 538 return 0; 508 539 } 509 540 510 - static int fixup_thermal_trips(void *blob, const char *name) 541 + void build_info(void) 511 542 { 512 - int minc, maxc; 513 - int node, trip; 543 + u32 fw_version, sha1, res, status; 544 + int ret; 514 545 515 - node = fdt_path_offset(blob, "/thermal-zones"); 516 - if (node < 0) 517 - return node; 546 + printf("\nBuildInfo:\n"); 518 547 519 - node = fdt_subnode_offset(blob, node, name); 520 - if (node < 0) 521 - return node; 548 + ret = ele_get_fw_status(&status, &res); 549 + if (ret) { 550 + printf(" - ELE firmware status failed %d, 0x%x\n", ret, res); 551 + } else if ((status & 0xff) == 1) { 552 + ret = ele_get_fw_version(&fw_version, &sha1, &res); 553 + if (ret) { 554 + printf(" - ELE firmware version failed %d, 0x%x\n", ret, res); 555 + } else { 556 + printf(" - ELE firmware version %u.%u.%u-%x", 557 + (fw_version & (0x00ff0000)) >> 16, 558 + (fw_version & (0x0000fff0)) >> 4, 559 + (fw_version & (0x0000000f)), sha1); 560 + ((fw_version & (0x80000000)) >> 31) == 1 ? puts("-dirty\n") : puts("\n"); 561 + } 562 + } else { 563 + printf(" - ELE firmware not included\n"); 564 + } 565 + puts("\n"); 566 + } 522 567 523 - node = fdt_subnode_offset(blob, node, "trips"); 524 - if (node < 0) 525 - return node; 568 + int arch_misc_init(void) 569 + { 570 + build_info(); 571 + return 0; 572 + } 526 573 527 - get_cpu_temp_grade(&minc, &maxc); 574 + struct low_drive_freq_entry { 575 + const char *node_path; 576 + u32 clk; 577 + u32 new_rate; 578 + }; 528 579 529 - fdt_for_each_subnode(trip, blob, node) { 530 - const char *type; 531 - int temp, ret; 580 + static int low_drive_fdt_fix_clock(void *fdt, int node_off, u32 clk_index, u32 new_rate) 581 + { 582 + #define MAX_ASSIGNED_CLKS 8 583 + int cnt, j; 584 + u32 assignedclks[MAX_ASSIGNED_CLKS]; /* max 8 clocks*/ 532 585 533 - type = fdt_getprop(blob, trip, "type", NULL); 534 - if (!type) 535 - continue; 586 + cnt = fdtdec_get_int_array_count(fdt, node_off, "assigned-clock-rates", 587 + assignedclks, MAX_ASSIGNED_CLKS); 588 + if (cnt > 0) { 589 + if (cnt <= clk_index) 590 + return -ENOENT; 536 591 537 - temp = 0; 538 - if (!strcmp(type, "critical")) 539 - temp = 1000 * maxc; 540 - else if (!strcmp(type, "passive")) 541 - temp = 1000 * (maxc - 10); 542 - if (temp) { 543 - ret = fdt_setprop_u32(blob, trip, "temperature", temp); 544 - if (ret) 545 - return ret; 592 + if (assignedclks[clk_index] <= new_rate) 593 + return 0; 594 + 595 + assignedclks[clk_index] = new_rate; 596 + for (j = 0; j < cnt; j++) 597 + assignedclks[j] = cpu_to_fdt32(assignedclks[j]); 598 + 599 + return fdt_setprop(fdt, node_off, "assigned-clock-rates", &assignedclks, 600 + cnt * sizeof(u32)); 601 + } 602 + 603 + return -ENOENT; 604 + } 605 + 606 + static int low_drive_freq_update(void *blob) 607 + { 608 + int nodeoff, ret; 609 + int i; 610 + 611 + /* Update kernel dtb clocks for low drive mode */ 612 + struct low_drive_freq_entry table[] = { 613 + {"/soc@0/bus@42800000/mmc@42850000", 0, 266666667}, 614 + {"/soc@0/bus@42800000/mmc@42860000", 0, 266666667}, 615 + {"/soc@0/bus@42800000/mmc@428b0000", 0, 266666667}, 616 + }; 617 + 618 + for (i = 0; i < ARRAY_SIZE(table); i++) { 619 + nodeoff = fdt_path_offset(blob, table[i].node_path); 620 + if (nodeoff >= 0) { 621 + ret = low_drive_fdt_fix_clock(blob, nodeoff, table[i].clk, 622 + table[i].new_rate); 623 + if (!ret) 624 + printf("%s freq updated\n", table[i].node_path); 625 + } 626 + } 627 + 628 + return 0; 629 + } 630 + 631 + #ifdef CONFIG_OF_BOARD_FIXUP 632 + #ifndef CONFIG_SPL_BUILD 633 + int board_fix_fdt(void *fdt) 634 + { 635 + /* Update dtb clocks for low drive mode */ 636 + if (is_voltage_mode(VOLT_LOW_DRIVE)) { 637 + int nodeoff; 638 + int i; 639 + 640 + struct low_drive_freq_entry table[] = { 641 + {"/soc@0/bus@42800000/mmc@42850000", 0, 266666667}, 642 + {"/soc@0/bus@42800000/mmc@42860000", 0, 266666667}, 643 + {"/soc@0/bus@42800000/mmc@428b0000", 0, 266666667}, 644 + }; 645 + 646 + for (i = 0; i < ARRAY_SIZE(table); i++) { 647 + nodeoff = fdt_path_offset(fdt, table[i].node_path); 648 + if (nodeoff >= 0) 649 + low_drive_fdt_fix_clock(fdt, nodeoff, table[i].clk, 650 + table[i].new_rate); 546 651 } 547 652 } 548 653 549 654 return 0; 550 655 } 656 + #endif 657 + #endif 551 658 552 659 int ft_system_setup(void *blob, struct bd_info *bd) 553 660 { 661 + static const char * const nodes_path[] = { 662 + "/cpus/cpu@0", 663 + "/cpus/cpu@100", 664 + }; 665 + 554 666 if (fixup_thermal_trips(blob, "cpu-thermal")) 555 667 printf("Failed to update cpu-thermal trip(s)"); 556 668 669 + if (is_imx9351() || is_imx9331() || is_imx9321() || is_imx9311() || is_imx9301()) 670 + disable_cpu_nodes(blob, nodes_path, 1, 2); 671 + 672 + if (is_voltage_mode(VOLT_LOW_DRIVE)) 673 + low_drive_freq_update(blob); 674 + 557 675 return 0; 558 676 } 559 677 560 678 #if defined(CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG) 561 679 void get_board_serial(struct tag_serialnr *serialnr) 562 680 { 563 - printf("UID: 0x%x 0x%x 0x%x 0x%x\n", 564 - gd->arch.uid[0], gd->arch.uid[1], gd->arch.uid[2], gd->arch.uid[3]); 681 + printf("UID: %08x%08x%08x%08x\n", __be32_to_cpu(gd->arch.uid[0]), 682 + __be32_to_cpu(gd->arch.uid[1]), __be32_to_cpu(gd->arch.uid[2]), 683 + __be32_to_cpu(gd->arch.uid[3])); 565 684 566 - serialnr->low = gd->arch.uid[0]; 567 - serialnr->high = gd->arch.uid[3]; 685 + serialnr->low = __be32_to_cpu(gd->arch.uid[1]); 686 + serialnr->high = __be32_to_cpu(gd->arch.uid[0]); 568 687 } 569 688 #endif 570 689 ··· 586 705 /* Disable wdog */ 587 706 init_wdog(); 588 707 589 - clock_init(); 708 + clock_init_early(); 590 709 591 710 trdc_early_init(); 592 711 ··· 752 871 /* power on */ 753 872 clrbits_le32(&mix_regs->slice_sw_ctrl, BIT(31)); 754 873 val = readl(&mix_regs->func_stat); 755 - while (val & SRC_MIX_SLICE_FUNC_STAT_ISO_STAT) 874 + while (val & SRC_MIX_SLICE_FUNC_STAT_SSAR_STAT) 756 875 val = readl(&mix_regs->func_stat); 757 876 758 877 return 0; ··· 792 911 (struct src_general_regs *)(ulong)SRC_GLOBAL_RBASE; 793 912 struct blk_ctrl_s_aonmix_regs *s_regs = 794 913 (struct blk_ctrl_s_aonmix_regs *)BLK_CTRL_S_ANOMIX_BASE_ADDR; 795 - u32 val; 914 + u32 val, i; 796 915 797 916 if (m33_is_rom_kicked()) 798 917 return -EPERM; ··· 816 935 817 936 /* Set ELE LP handshake for M33 reset */ 818 937 setbits_le32(&s_regs->lp_handshake[0], BIT(6)); 938 + 939 + /* OSCCA enabled, reconfigure TRDC for TCM access, otherwise ECC init will raise error */ 940 + val = readl(BLK_CTRL_NS_ANOMIX_BASE_ADDR + 0x28); 941 + if (val & BIT(0)) { 942 + trdc_mbc_set_control(0x44270000, 1, 0, 0x6600); 943 + 944 + for (i = 0; i < 32; i++) 945 + trdc_mbc_blk_config(0x44270000, 1, 3, 0, i, true, 0); 946 + 947 + for (i = 0; i < 32; i++) 948 + trdc_mbc_blk_config(0x44270000, 1, 3, 1, i, true, 0); 949 + } 819 950 820 951 /* Clear M33 TCM for ECC */ 821 952 memset((void *)(ulong)0x201e0000, 0, 0x40000); ··· 864 995 865 996 return 0; 866 997 } 998 + 999 + enum imx9_soc_voltage_mode soc_target_voltage_mode(void) 1000 + { 1001 + u32 speed = get_cpu_speed_grade_hz(); 1002 + enum imx9_soc_voltage_mode voltage = VOLT_OVER_DRIVE; 1003 + 1004 + if (is_imx93()) { 1005 + if (speed == 1700000000) 1006 + voltage = VOLT_OVER_DRIVE; 1007 + else if (speed == 1400000000) 1008 + voltage = VOLT_NOMINAL_DRIVE; 1009 + else if (speed == 900000000 || speed == 800000000) 1010 + voltage = VOLT_LOW_DRIVE; 1011 + else 1012 + printf("Unexpected A55 freq %u, default to OD\n", speed); 1013 + } 1014 + 1015 + return voltage; 1016 + }
+115 -60
arch/arm/mach-imx/imx9/trdc.c
··· 4 4 */ 5 5 6 6 #include <log.h> 7 + #include <div64.h> 8 + #include <hang.h> 7 9 #include <linux/errno.h> 8 10 #include <asm/io.h> 9 11 #include <asm/types.h> 10 12 #include <asm/arch/imx-regs.h> 11 13 #include <asm/arch/sys_proto.h> 12 - #include <div64.h> 13 14 #include <asm/mach-imx/ele_api.h> 14 15 #include <asm/mach-imx/mu_hal.h> 15 16 ··· 18 19 #define MRC_MAX_NUM 2 19 20 #define MBC_NUM(HWCFG) (((HWCFG) >> 16) & 0xF) 20 21 #define MRC_NUM(HWCFG) (((HWCFG) >> 24) & 0x1F) 22 + #define MBC_BLK_NUM(GLBCFG) ((GLBCFG) & 0x3FF) 23 + 24 + enum { 25 + /* Order following ELE API Spec, not change */ 26 + TRDC_A, 27 + TRDC_W, 28 + TRDC_M, 29 + TRDC_N, 30 + }; 31 + 32 + /* Just make it easier to know what the parameter is */ 33 + #define MBC(X) (X) 34 + #define MRC(X) (X) 35 + #define GLOBAL_ID(X) (X) 36 + #define MEM(X) (X) 37 + #define DOM(X) (X) 38 + /* 39 + *0|SPR|SPW|SPX,0|SUR|SUW|SWX, 0|NPR|NPW|NPX, 0|NUR|NUW|NUX 40 + */ 41 + #define PERM(X) (X) 21 42 22 43 struct mbc_mem_dom { 23 44 u32 mem_glbcfg[4]; ··· 132 153 return 0; 133 154 134 155 return trdc_reg + 0x10000 + 0x2000 * mbc_num + 0x1000 * mrc_x; 156 + } 157 + 158 + static u32 trdc_mbc_blk_num(ulong trdc_reg, u32 mbc_x, u32 mem_x) 159 + { 160 + struct trdc_mbc *mbc_base = (struct trdc_mbc *)trdc_get_mbc_base(trdc_reg, mbc_x); 161 + struct mbc_mem_dom *mbc_dom; 162 + u32 glbcfg; 163 + 164 + if (mbc_base == 0) 165 + return 0; 166 + 167 + /* only first dom has the glbcfg */ 168 + mbc_dom = &mbc_base->mem_dom[0]; 169 + glbcfg = readl((uintptr_t)&mbc_dom->mem_glbcfg[mem_x]); 170 + 171 + return MBC_BLK_NUM(glbcfg); 135 172 } 136 173 137 174 int trdc_mbc_set_control(ulong trdc_reg, u32 mbc_x, u32 glbac_id, u32 glbac_val) ··· 363 400 void trdc_early_init(void) 364 401 { 365 402 int ret = 0, i; 403 + u32 blks; 366 404 367 - ret |= release_rdc(0); 368 - ret |= release_rdc(2); 369 - ret |= release_rdc(1); 370 - ret |= release_rdc(3); 405 + ret |= release_rdc(TRDC_A); 406 + ret |= release_rdc(TRDC_M); 407 + ret |= release_rdc(TRDC_W); 408 + ret |= release_rdc(TRDC_N); 409 + 410 + if (ret) { 411 + hang(); 412 + return; 413 + } 371 414 372 - if (!ret) { 373 - /* Set OCRAM to RWX for secure, when OEM_CLOSE, the image is RX only */ 374 - trdc_mbc_set_control(0x49010000, 3, 0, 0x7700); 415 + /* Set OCRAM to RWX for secure, when OEM_CLOSE, the image is RX only */ 416 + trdc_mbc_set_control(TRDC_NIC_BASE, MBC(3), GLOBAL_ID(0), PERM(0x7700)); 375 417 376 - for (i = 0; i < 40; i++) 377 - trdc_mbc_blk_config(0x49010000, 3, 3, 0, i, true, 0); 418 + blks = trdc_mbc_blk_num(TRDC_NIC_BASE, MBC(3), MEM(0)); 419 + for (i = 0; i < blks; i++) { 420 + trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(0), i, 421 + true, GLOBAL_ID(0)); 378 422 379 - for (i = 0; i < 40; i++) 380 - trdc_mbc_blk_config(0x49010000, 3, 3, 1, i, true, 0); 423 + trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(1), i, 424 + true, GLOBAL_ID(0)); 381 425 382 - for (i = 0; i < 40; i++) 383 - trdc_mbc_blk_config(0x49010000, 3, 0, 0, i, true, 0); 426 + trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(0), MEM(0), i, 427 + true, GLOBAL_ID(0)); 384 428 385 - for (i = 0; i < 40; i++) 386 - trdc_mbc_blk_config(0x49010000, 3, 0, 1, i, true, 0); 429 + trdc_mbc_blk_config(TRDC_NIC_BASE, MBC(3), DOM(0), MEM(1), i, 430 + true, GLOBAL_ID(0)); 387 431 } 388 432 } 389 433 390 434 void trdc_init(void) 391 435 { 392 436 /* TRDC mega */ 393 - if (trdc_mrc_enabled(0x49010000)) { 437 + if (trdc_mrc_enabled(TRDC_NIC_BASE)) { 394 438 /* DDR */ 395 - trdc_mrc_set_control(0x49010000, 0, 0, 0x7777); 439 + trdc_mrc_set_control(TRDC_NIC_BASE, MRC(0), GLOBAL_ID(0), PERM(0x7777)); 396 440 397 441 /* ELE */ 398 - trdc_mrc_region_config(0x49010000, 0, 0, 0x80000000, 0xFFFFFFFF, false, 0); 442 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(0), 0x80000000, 443 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 399 444 400 445 /* MTR */ 401 - trdc_mrc_region_config(0x49010000, 0, 1, 0x80000000, 0xFFFFFFFF, false, 0); 446 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(1), 0x80000000, 447 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 402 448 403 449 /* M33 */ 404 - trdc_mrc_region_config(0x49010000, 0, 2, 0x80000000, 0xFFFFFFFF, false, 0); 450 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(2), 0x80000000, 451 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 405 452 406 453 /* A55*/ 407 - trdc_mrc_region_config(0x49010000, 0, 3, 0x80000000, 0xFFFFFFFF, false, 0); 454 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(3), 0x80000000, 455 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 408 456 409 457 /* For USDHC1 to DDR, USDHC1 is default force to non-secure */ 410 - trdc_mrc_region_config(0x49010000, 0, 5, 0x80000000, 0xFFFFFFFF, false, 0); 458 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(5), 0x80000000, 459 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 411 460 412 461 /* For USDHC2 to DDR, USDHC2 is default force to non-secure */ 413 - trdc_mrc_region_config(0x49010000, 0, 6, 0x80000000, 0xFFFFFFFF, false, 0); 462 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(6), 0x80000000, 463 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 414 464 415 465 /* eDMA */ 416 - trdc_mrc_region_config(0x49010000, 0, 7, 0x80000000, 0xFFFFFFFF, false, 0); 466 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(7), 0x80000000, 467 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 417 468 418 469 /*CoreSight, TestPort*/ 419 - trdc_mrc_region_config(0x49010000, 0, 8, 0x80000000, 0xFFFFFFFF, false, 0); 470 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(8), 0x80000000, 471 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 420 472 421 473 /* DAP */ 422 - trdc_mrc_region_config(0x49010000, 0, 9, 0x80000000, 0xFFFFFFFF, false, 0); 474 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(9), 0x80000000, 475 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 423 476 424 477 /*SoC masters */ 425 - trdc_mrc_region_config(0x49010000, 0, 10, 0x80000000, 0xFFFFFFFF, false, 0); 478 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(10), 0x80000000, 479 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 426 480 427 481 /*USB*/ 428 - trdc_mrc_region_config(0x49010000, 0, 11, 0x80000000, 0xFFFFFFFF, false, 0); 482 + trdc_mrc_region_config(TRDC_NIC_BASE, MRC(0), DOM(11), 0x80000000, 483 + 0xFFFFFFFF, false, GLOBAL_ID(0)); 429 484 } 430 485 } 431 486 ··· 504 559 505 560 printf("TRDC AONMIX MBC\n"); 506 561 507 - trdc_mbc_control_dump(0x44270000, 0, 0); 508 - trdc_mbc_control_dump(0x44270000, 1, 0); 562 + trdc_mbc_control_dump(TRDC_AON_BASE, MBC(0), GLOBAL_ID(0)); 563 + trdc_mbc_control_dump(TRDC_AON_BASE, MBC(1), GLOBAL_ID(0)); 509 564 510 565 for (i = 0; i < 11; i++) 511 - trdc_mbc_mem_dump(0x44270000, 0, 3, 0, i); 566 + trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(0), DOM(3), MEM(0), i); 512 567 for (i = 0; i < 1; i++) 513 - trdc_mbc_mem_dump(0x44270000, 0, 3, 1, i); 568 + trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(0), DOM(3), MEM(1), i); 514 569 515 570 for (i = 0; i < 4; i++) 516 - trdc_mbc_mem_dump(0x44270000, 1, 3, 0, i); 571 + trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(1), DOM(3), MEM(0), i); 517 572 for (i = 0; i < 4; i++) 518 - trdc_mbc_mem_dump(0x44270000, 1, 3, 1, i); 573 + trdc_mbc_mem_dump(TRDC_AON_BASE, MBC(1), DOM(3), MEM(1), i); 519 574 520 575 printf("TRDC WAKEUP MBC\n"); 521 576 522 - trdc_mbc_control_dump(0x42460000, 0, 0); 523 - trdc_mbc_control_dump(0x42460000, 1, 0); 577 + trdc_mbc_control_dump(TRDC_WAKEUP_BASE, MBC(0), GLOBAL_ID(0)); 578 + trdc_mbc_control_dump(TRDC_WAKEUP_BASE, MBC(1), GLOBAL_ID(0)); 524 579 525 580 for (i = 0; i < 15; i++) 526 - trdc_mbc_mem_dump(0x42460000, 0, 3, 0, i); 581 + trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(0), DOM(3), MEM(0), i); 527 582 528 - trdc_mbc_mem_dump(0x42460000, 0, 3, 1, 0); 529 - trdc_mbc_mem_dump(0x42460000, 0, 3, 2, 0); 583 + trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(0), DOM(3), MEM(1), 0); 584 + trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, 0, 3, 2, 0); 530 585 531 586 for (i = 0; i < 2; i++) 532 - trdc_mbc_mem_dump(0x42460000, 1, 3, 0, i); 587 + trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(1), DOM(3), MEM(0), i); 533 588 534 - trdc_mbc_mem_dump(0x42460000, 1, 3, 1, 0); 535 - trdc_mbc_mem_dump(0x42460000, 1, 3, 2, 0); 536 - trdc_mbc_mem_dump(0x42460000, 1, 3, 3, 0); 589 + trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(1), DOM(3), MEM(1), 0); 590 + trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, 1, 3, 2, 0); 591 + trdc_mbc_mem_dump(TRDC_WAKEUP_BASE, MBC(1), DOM(3), MEM(3), 0); 537 592 538 593 printf("TRDC NICMIX MBC\n"); 539 594 540 - trdc_mbc_control_dump(0x49010000, 0, 0); 541 - trdc_mbc_control_dump(0x49010000, 1, 0); 542 - trdc_mbc_control_dump(0x49010000, 2, 0); 543 - trdc_mbc_control_dump(0x49010000, 3, 0); 595 + trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(0), GLOBAL_ID(0)); 596 + trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(1), GLOBAL_ID(0)); 597 + trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(2), GLOBAL_ID(0)); 598 + trdc_mbc_control_dump(TRDC_NIC_BASE, MBC(3), GLOBAL_ID(0)); 544 599 545 600 for (i = 0; i < 7; i++) 546 - trdc_mbc_mem_dump(0x49010000, 0, 3, 0, i); 601 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(0), i); 547 602 548 603 for (i = 0; i < 2; i++) 549 - trdc_mbc_mem_dump(0x49010000, 0, 3, 1, i); 604 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(1), i); 550 605 551 606 for (i = 0; i < 5; i++) 552 - trdc_mbc_mem_dump(0x49010000, 0, 3, 2, i); 607 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(2), i); 553 608 554 609 for (i = 0; i < 6; i++) 555 - trdc_mbc_mem_dump(0x49010000, 0, 3, 3, i); 610 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(0), DOM(3), MEM(3), i); 556 611 557 612 for (i = 0; i < 1; i++) 558 - trdc_mbc_mem_dump(0x49010000, 1, 3, 0, i); 613 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(0), i); 559 614 560 615 for (i = 0; i < 1; i++) 561 - trdc_mbc_mem_dump(0x49010000, 1, 3, 1, i); 616 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(1), i); 562 617 563 618 for (i = 0; i < 3; i++) 564 - trdc_mbc_mem_dump(0x49010000, 1, 3, 2, i); 619 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(2), i); 565 620 566 621 for (i = 0; i < 3; i++) 567 - trdc_mbc_mem_dump(0x49010000, 1, 3, 3, i); 622 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(1), DOM(3), MEM(3), i); 568 623 569 624 for (i = 0; i < 2; i++) 570 - trdc_mbc_mem_dump(0x49010000, 2, 3, 0, i); 625 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(2), DOM(3), MEM(0), i); 571 626 572 627 for (i = 0; i < 2; i++) 573 - trdc_mbc_mem_dump(0x49010000, 2, 3, 1, i); 628 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(2), DOM(3), MEM(1), i); 574 629 575 630 for (i = 0; i < 5; i++) 576 - trdc_mbc_mem_dump(0x49010000, 3, 3, 0, i); 631 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(0), i); 577 632 578 633 for (i = 0; i < 5; i++) 579 - trdc_mbc_mem_dump(0x49010000, 3, 3, 1, i); 634 + trdc_mbc_mem_dump(TRDC_NIC_BASE, MBC(3), DOM(3), MEM(1), i); 580 635 } 581 636 #endif
+11
arch/arm/mach-imx/mx6/Kconfig
··· 541 541 select BOARD_LATE_INIT 542 542 select MX6UL_LITESOM 543 543 544 + config TARGET_LXR2 545 + bool "Comvetia i.MX6Q LXR2" 546 + depends on MX6Q 547 + select BOARD_EARLY_INIT_F 548 + select BOARD_LATE_INIT 549 + select DM 550 + select DM_THERMAL 551 + select SUPPORT_SPL 552 + imply CMD_DM 553 + 544 554 config TARGET_PCM058 545 555 bool "Phytec PCM058 i.MX6 Quad" 546 556 depends on MX6Q ··· 696 706 source "board/bsh/imx6ulz_smm_m2/Kconfig" 697 707 source "board/bticino/mamoj/Kconfig" 698 708 source "board/compulab/cm_fx6/Kconfig" 709 + source "board/comvetia/lxr2/Kconfig" 699 710 source "board/dhelectronics/dh_imx6/Kconfig" 700 711 source "board/embest/mx6boards/Kconfig" 701 712 source "board/engicam/imx6q/Kconfig"
+12
board/comvetia/lxr2/Kconfig
··· 1 + if TARGET_LXR2 2 + 3 + config SYS_BOARD 4 + default "lxr2" 5 + 6 + config SYS_VENDOR 7 + default "comvetia" 8 + 9 + config SYS_CONFIG_NAME 10 + default "lxr2" 11 + 12 + endif
+6
board/comvetia/lxr2/MAINTAINERS
··· 1 + COMVETIA LXR2 2 + M: Fabio Estevam <festevam@denx.de> 3 + S: Maintained 4 + F: board/comvetia/lxr2/ 5 + F: include/configs/lxr2.h 6 + F: configs/lxr2_defconfig
+3
board/comvetia/lxr2/Makefile
··· 1 + # SPDX-License-Identifier: GPL-2.0+ 2 + 3 + obj-y := lxr2.o
+388
board/comvetia/lxr2/lxr2.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + // 3 + // Copyright (C) 2017 Stefano Babic <sbabic@denx.de> 4 + // Copyright (C) 2024 Fabio Estevam <festevam@denx.de> 5 + 6 + #include <asm/io.h> 7 + #include <asm/arch/clock.h> 8 + #include <asm/arch/imx-regs.h> 9 + #include <asm/arch/crm_regs.h> 10 + #include <asm/arch/mx6-ddr.h> 11 + #include <asm/arch/iomux.h> 12 + #include <asm/arch/mx6-pins.h> 13 + #include <asm/mach-imx/iomux-v3.h> 14 + #include <asm/mach-imx/boot_mode.h> 15 + 16 + #include <asm/mach-imx/spi.h> 17 + #include <linux/errno.h> 18 + #include <asm/gpio.h> 19 + #include <nand.h> 20 + #include <miiphy.h> 21 + #include <netdev.h> 22 + #include <asm/arch/sys_proto.h> 23 + #include <asm/sections.h> 24 + #include <linux/delay.h> 25 + 26 + #include <image.h> 27 + #include <init.h> 28 + #include <serial.h> 29 + #include <spl.h> 30 + #include <linux/sizes.h> 31 + #include <mmc.h> 32 + #include <fsl_esdhc_imx.h> 33 + 34 + DECLARE_GLOBAL_DATA_PTR; 35 + 36 + #define UART_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ 37 + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \ 38 + PAD_CTL_SRE_FAST | PAD_CTL_HYS) 39 + 40 + #define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED | \ 41 + PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) 42 + 43 + #define NAND_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ 44 + PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) 45 + 46 + int dram_init(void) 47 + { 48 + gd->ram_size = imx_ddr_size(); 49 + return 0; 50 + } 51 + 52 + static const iomux_v3_cfg_t uart4_pads[] = { 53 + MX6_PAD_KEY_COL0__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 54 + MX6_PAD_KEY_ROW0__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), 55 + }; 56 + 57 + static void setup_iomux_uart(void) 58 + { 59 + imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads)); 60 + } 61 + 62 + static void setup_gpmi_nand(void) 63 + { 64 + struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; 65 + 66 + /* gate ENFC_CLK_ROOT clock first,before clk source switch */ 67 + clrbits_le32(&mxc_ccm->CCGR2, MXC_CCM_CCGR2_IOMUX_IPT_CLK_IO_MASK); 68 + 69 + /* config gpmi and bch clock to 100 MHz */ 70 + clrsetbits_le32(&mxc_ccm->cs2cdr, 71 + MXC_CCM_CS2CDR_ENFC_CLK_PODF_MASK | 72 + MXC_CCM_CS2CDR_ENFC_CLK_PRED_MASK | 73 + MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK, 74 + MXC_CCM_CS2CDR_ENFC_CLK_PODF(0) | 75 + MXC_CCM_CS2CDR_ENFC_CLK_PRED(3) | 76 + MXC_CCM_CS2CDR_ENFC_CLK_SEL(3)); 77 + 78 + /* enable ENFC_CLK_ROOT clock */ 79 + setbits_le32(&mxc_ccm->CCGR2, MXC_CCM_CCGR2_IOMUX_IPT_CLK_IO_MASK); 80 + 81 + /* enable gpmi and bch clock gating */ 82 + setbits_le32(&mxc_ccm->CCGR4, 83 + MXC_CCM_CCGR4_RAWNAND_U_BCH_INPUT_APB_MASK | 84 + MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_BCH_MASK | 85 + MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_MASK | 86 + MXC_CCM_CCGR4_RAWNAND_U_GPMI_INPUT_APB_MASK | 87 + MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_OFFSET); 88 + 89 + /* enable apbh clock gating */ 90 + setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK); 91 + } 92 + 93 + int board_spi_cs_gpio(unsigned int bus, unsigned int cs) 94 + { 95 + return IMX_GPIO_NR(4, 24); 96 + } 97 + 98 + int board_early_init_f(void) 99 + { 100 + setup_iomux_uart(); 101 + 102 + return 0; 103 + } 104 + 105 + int board_init(void) 106 + { 107 + /* address of boot parameters */ 108 + gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; 109 + 110 + setup_gpmi_nand(); 111 + 112 + return 0; 113 + } 114 + 115 + /* 116 + * BOOT_CFG1, BOOT_CFG2, BOOT_CFG3, BOOT_CFG4 117 + * see Table 8-11 and Table 5-9 118 + * BOOT_CFG1[7] = 1 (boot from NAND) 119 + * BOOT_CFG1[5] = 0 - raw NAND 120 + * BOOT_CFG1[4] = 0 - default pad settings 121 + * BOOT_CFG1[3:2] = 00 - devices = 1 122 + * BOOT_CFG1[1:0] = 00 - Row Address Cycles = 3 123 + * BOOT_CFG2[4:3] = 00 - Boot Search Count = 2 124 + * BOOT_CFG2[2:1] = 01 - Pages In Block = 64 125 + * BOOT_CFG2[0] = 0 - Reset time 12ms 126 + */ 127 + static const struct boot_mode board_boot_modes[] = { 128 + /* NAND: 64pages per block, 3 row addr cycles, 2 copies of FCB/DBBT */ 129 + {"nand", MAKE_CFGVAL(0x80, 0x02, 0x00, 0x00)}, 130 + {"mmc0", MAKE_CFGVAL(0x40, 0x20, 0x00, 0x00)}, 131 + {NULL, 0}, 132 + }; 133 + 134 + int board_late_init(void) 135 + { 136 + add_board_boot_modes(board_boot_modes); 137 + 138 + return 0; 139 + } 140 + 141 + #ifdef CONFIG_SPL_BUILD 142 + #include <spl.h> 143 + 144 + #define MX6_PHYFLEX_ERR006282 IMX_GPIO_NR(2, 11) 145 + static void phyflex_err006282_workaround(void) 146 + { 147 + /* 148 + * Boards beginning with 1362.2 have the SD4_DAT3 pin connected 149 + * to the CMIC. If this pin isn't toggled within 10s the boards 150 + * reset. The pin is unconnected on older boards, so we do not 151 + * need a check for older boards before applying this fixup. 152 + */ 153 + 154 + gpio_request(MX6_PHYFLEX_ERR006282, "errata_gpio"); 155 + gpio_direction_output(MX6_PHYFLEX_ERR006282, 0); 156 + mdelay(2); 157 + gpio_direction_output(MX6_PHYFLEX_ERR006282, 1); 158 + mdelay(2); 159 + gpio_set_value(MX6_PHYFLEX_ERR006282, 0); 160 + 161 + imx_iomux_v3_setup_pad(MX6_PAD_SD4_DAT3__GPIO2_IO11); 162 + 163 + gpio_direction_input(MX6_PHYFLEX_ERR006282); 164 + } 165 + 166 + static const iomux_v3_cfg_t gpios_pads[] = { 167 + MX6_PAD_SD4_DAT3__GPIO2_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL), 168 + MX6_PAD_SD4_DAT4__GPIO2_IO12 | MUX_PAD_CTRL(NO_PAD_CTRL), 169 + MX6_PAD_SD4_DAT5__GPIO2_IO13 | MUX_PAD_CTRL(NO_PAD_CTRL), 170 + MX6_PAD_SD4_DAT6__GPIO2_IO14 | MUX_PAD_CTRL(NO_PAD_CTRL), 171 + MX6_PAD_SD4_DAT7__GPIO2_IO15 | MUX_PAD_CTRL(NO_PAD_CTRL), 172 + MX6_PAD_EIM_EB3__GPIO2_IO31 | MUX_PAD_CTRL(NO_PAD_CTRL), 173 + MX6_PAD_ENET_TXD0__GPIO1_IO30 | MUX_PAD_CTRL(NO_PAD_CTRL), 174 + }; 175 + 176 + static void setup_gpios(void) 177 + { 178 + imx_iomux_v3_setup_multiple_pads(gpios_pads, ARRAY_SIZE(gpios_pads)); 179 + } 180 + 181 + static const struct mx6dq_iomux_ddr_regs mx6_ddr_ioregs = { 182 + .dram_sdclk_0 = 0x00000030, 183 + .dram_sdclk_1 = 0x00000030, 184 + .dram_cas = 0x00000030, 185 + .dram_ras = 0x00000030, 186 + .dram_reset = 0x00000030, 187 + .dram_sdcke0 = 0x00003000, 188 + .dram_sdcke1 = 0x00003000, 189 + .dram_sdba2 = 0x00000030, 190 + .dram_sdodt0 = 0x00000030, 191 + .dram_sdodt1 = 0x00000030, 192 + 193 + .dram_sdqs0 = 0x00000028, 194 + .dram_sdqs1 = 0x00000028, 195 + .dram_sdqs2 = 0x00000028, 196 + .dram_sdqs3 = 0x00000028, 197 + .dram_sdqs4 = 0x00000028, 198 + .dram_sdqs5 = 0x00000028, 199 + .dram_sdqs6 = 0x00000028, 200 + .dram_sdqs7 = 0x00000028, 201 + .dram_dqm0 = 0x00000028, 202 + .dram_dqm1 = 0x00000028, 203 + .dram_dqm2 = 0x00000028, 204 + .dram_dqm3 = 0x00000028, 205 + .dram_dqm4 = 0x00000028, 206 + .dram_dqm5 = 0x00000028, 207 + .dram_dqm6 = 0x00000028, 208 + .dram_dqm7 = 0x00000028, 209 + }; 210 + 211 + static const struct mx6dq_iomux_grp_regs mx6_grp_ioregs = { 212 + .grp_ddr_type = 0x000C0000, 213 + .grp_ddrmode_ctl = 0x00020000, 214 + .grp_ddrpke = 0x00000000, 215 + .grp_addds = 0x30, 216 + .grp_ctlds = 0x30, 217 + .grp_ddrmode = 0x00020000, 218 + .grp_b0ds = 0x00000028, 219 + .grp_b1ds = 0x00000028, 220 + .grp_b2ds = 0x00000028, 221 + .grp_b3ds = 0x00000028, 222 + .grp_b4ds = 0x00000028, 223 + .grp_b5ds = 0x00000028, 224 + .grp_b6ds = 0x00000028, 225 + .grp_b7ds = 0x00000028, 226 + }; 227 + 228 + static const struct mx6_mmdc_calibration mx6_mmcd_calib = { 229 + .p0_mpwldectrl0 = 0x00170018, 230 + .p0_mpwldectrl1 = 0x003B0039, 231 + .p1_mpwldectrl0 = 0x00350048, 232 + .p1_mpwldectrl1 = 0x00410052, 233 + .p0_mpdgctrl0 = 0x03600374, 234 + .p0_mpdgctrl1 = 0x03680360, 235 + .p1_mpdgctrl0 = 0x0370037C, 236 + .p1_mpdgctrl1 = 0x03700350, 237 + .p0_mprddlctl = 0x3A363234, 238 + .p1_mprddlctl = 0x3634363C, 239 + .p0_mpwrdlctl = 0x38383E3C, 240 + .p1_mpwrdlctl = 0x422A483C, 241 + }; 242 + 243 + /* MT41K64M16JT-125 (1Gb density) */ 244 + static struct mx6_ddr3_cfg mem_ddr = { 245 + .mem_speed = 1600, 246 + .density = 1, 247 + .width = 16, 248 + .banks = 8, 249 + .rowaddr = 13, 250 + .coladdr = 10, 251 + .pagesz = 2, 252 + .trcd = 1375, 253 + .trcmin = 4875, 254 + .trasmin = 3500, 255 + .SRT = 1, 256 + }; 257 + 258 + static void ccgr_init(void) 259 + { 260 + struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; 261 + 262 + writel(0x00C03F3F, &ccm->CCGR0); 263 + writel(0x0030FC03, &ccm->CCGR1); 264 + writel(0x0FFFC000, &ccm->CCGR2); 265 + writel(0x3FF00000, &ccm->CCGR3); 266 + writel(0x00FFF300, &ccm->CCGR4); 267 + writel(0x0F0000C3, &ccm->CCGR5); 268 + writel(0x000003FF, &ccm->CCGR6); 269 + } 270 + 271 + static void spl_dram_init(void) 272 + { 273 + struct mx6_ddr_sysinfo sysinfo = { 274 + .dsize = 2, 275 + .cs_density = 6, 276 + .ncs = 2, 277 + .cs1_mirror = 1, 278 + .rtt_wr = 1, 279 + .rtt_nom = 1, 280 + .walat = 1, 281 + .ralat = 5, 282 + .mif3_mode = 3, 283 + .bi_on = 1, 284 + .sde_to_rst = 0x10, 285 + .rst_to_cke = 0x23, 286 + .ddr_type = DDR_TYPE_DDR3, 287 + .refsel = 1, 288 + .refr = 7, 289 + }; 290 + 291 + mx6dq_dram_iocfg(64, &mx6_ddr_ioregs, &mx6_grp_ioregs); 292 + mx6_dram_cfg(&sysinfo, &mx6_mmcd_calib, &mem_ddr); 293 + } 294 + 295 + #define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \ 296 + PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm | \ 297 + PAD_CTL_SRE_FAST | PAD_CTL_HYS) 298 + 299 + struct fsl_esdhc_cfg usdhc_cfg[1] = { 300 + {USDHC3_BASE_ADDR}, 301 + }; 302 + 303 + static const iomux_v3_cfg_t usdhc3_pads[] = { 304 + MX6_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), 305 + MX6_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), 306 + MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 307 + MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 308 + MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 309 + MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), 310 + }; 311 + 312 + int board_mmc_init(struct bd_info *bis) 313 + { 314 + imx_iomux_v3_setup_multiple_pads(usdhc3_pads, ARRAY_SIZE(usdhc3_pads)); 315 + usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; 316 + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 317 + usdhc_cfg[0].max_bus_width = 4; 318 + gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk; 319 + 320 + return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); 321 + } 322 + 323 + void board_boot_order(u32 *spl_boot_list) 324 + { 325 + spl_boot_list[0] = spl_boot_device(); 326 + 327 + switch (spl_boot_list[0]) { 328 + case BOOT_DEVICE_SPI: 329 + spl_boot_list[1] = BOOT_DEVICE_UART; 330 + break; 331 + case BOOT_DEVICE_MMC1: 332 + spl_boot_list[1] = BOOT_DEVICE_SPI; 333 + spl_boot_list[2] = BOOT_DEVICE_UART; 334 + break; 335 + default: 336 + printf("Boot device %x\n", spl_boot_list[0]); 337 + } 338 + } 339 + 340 + static const iomux_v3_cfg_t ecspi3_pads[] = { 341 + MX6_PAD_DISP0_DAT0__ECSPI3_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL), 342 + MX6_PAD_DISP0_DAT1__ECSPI3_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL), 343 + MX6_PAD_DISP0_DAT2__ECSPI3_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL), 344 + MX6_PAD_DISP0_DAT3__GPIO4_IO24 | MUX_PAD_CTRL(NO_PAD_CTRL), 345 + }; 346 + 347 + static void setup_spi(void) 348 + { 349 + imx_iomux_v3_setup_multiple_pads(ecspi3_pads, ARRAY_SIZE(ecspi3_pads)); 350 + 351 + enable_spi_clk(true, 2); 352 + } 353 + 354 + void board_init_f(ulong dummy) 355 + { 356 + /* setup clock gating */ 357 + ccgr_init(); 358 + 359 + /* setup AIPS and disable watchdog */ 360 + arch_cpu_init(); 361 + 362 + /* setup AXI */ 363 + gpr_init(); 364 + 365 + board_early_init_f(); 366 + 367 + /* setup GP timer */ 368 + timer_init(); 369 + 370 + /* UART clocks enabled and gd valid - init serial console */ 371 + preloader_console_init(); 372 + 373 + setup_spi(); 374 + 375 + setup_gpios(); 376 + 377 + /* DDR initialization */ 378 + spl_dram_init(); 379 + 380 + /* Clear the BSS. */ 381 + memset(__bss_start, 0, __bss_end - __bss_start); 382 + 383 + phyflex_err006282_workaround(); 384 + 385 + /* load/boot image from boot device */ 386 + board_init_r(NULL, 0); 387 + } 388 + #endif
+34
board/comvetia/lxr2/lxr2.env
··· 1 + addcons=setenv bootargs ${bootargs} console=${console},${baudrate} 2 + addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:${netdev}:off 3 + addmisc=setenv bootargs ${bootargs} ${miscargs} 4 + addmtd=run mtdnand;run mtdspi;setenv bootargs ${bootargs} ${mtdparts} 5 + altbootcmd=run swupdate 6 + bootcmd=run nandboot;run swupdate 7 + bootcount=2 8 + bootlimit=3 9 + console=ttymxc3 10 + cpu=armv7 11 + ethprime=FEC 12 + fdt_addr_r=0x18000000 13 + fitfile=fitImage 14 + flash-all-from-sd-card=env default -f -a;load mmc 0:1 10000000 u-boot.scr;source 10000000;saveenv 15 + initrd_high=0xffffffff 16 + kernel_addr_r=0x12000000 17 + loadaddr=0x12000000 18 + miscargs=panic=1 19 + mmcargs=setenv bootargs root=${mmcroot} rw rootwait 20 + mmcboot=if run mmcload;then run mmcargs addcons addmisc;bootm;fi 21 + mmcload=mmc rescan;load mmc 0:${mmcpart} ${kernel_addr_r} boot/fitImage 22 + mmcpart=1 23 + mmcroot=/dev/mmcblk0p1 24 + mtdnand=setenv mtdparts mtdparts=gpmi-nand:40m(Kernels),860m(root),-(nand) 25 + mtdspi=setenv mtdparts ${mtdparts}';spi2.0:1024k(bootloader),64k(env1),64k(env2),-(rescue)' 26 + nanboot_fit=tftp ${kernel_addr_r} ${board_name}/${fitfile};run nandargs addip addcons addmtd addmisc;bootm 27 + nandargs=setenv bootargs ubi.mtd=1 root=ubi0:rootfs${ubiroot} rootfstype=ubifs 28 + nandboot=run mtdnand;ubi part Kernels;ubi readvol ${kernel_addr_r} kernel${ubiroot};run nandargs addip addcons addmtd addmisc;bootm ${kernel_addr_r} 29 + net_nfs=tftp ${kernel_addr_r} ${board_name}/${bootfile};tftp ${fdt_addr_r} ${board_name}/${fdt_file};run nfsargs addip addcons addmtd addmisc;bootm ${kernel_addr_r} - ${fdt_addr_r} 30 + net_nfs_fit=tftp ${kernel_addr_r} ${board_name}/${fitfile};run nfsargs addip addcons addmtd addmisc;bootm ${kernel_addr_r} 31 + netmask=255.255.255.0 32 + nfsargs=setenv bootargs root=/dev/nfs nfsroot=${serverip}:${nfsroot},v3 panic=1 33 + swupdate=setenv bootargs root=/dev/ram;run addip addcons addmtd addmisc;sf probe;sf read ${kernel_addr_r} 120000 600000;sf read 14000000 730000 800000;bootm ${kernel_addr_r} 14000000 34 + ubiroot=1
+1 -5
board/freescale/imx93_evk/Makefile
··· 8 8 9 9 ifdef CONFIG_SPL_BUILD 10 10 obj-y += spl.o 11 - ifdef CONFIG_IMX9_LOW_DRIVE_MODE 12 - obj-$(CONFIG_IMX93_EVK_LPDDR4X) += lpddr4x_timing_ld.o 13 - else 14 - obj-$(CONFIG_IMX93_EVK_LPDDR4X) += lpddr4x_timing.o 15 - endif 11 + obj-$(CONFIG_IMX93_EVK_LPDDR4X) += lpddr4x_timing.o lpddr4x_timing_1866mts.o 16 12 endif
+1995
board/freescale/imx93_evk/lpddr4x_timing_1866mts.c
··· 1 + // SPDX-License-Identifier: BSD-3-Clause 2 + /* 3 + * Copyright 2024 NXP 4 + * 5 + * Code generated with DDR Tool v3.4.0_8.3-4e2b550a. 6 + * DDR PHY FW2022.01 7 + */ 8 + 9 + #include <linux/kernel.h> 10 + #include <asm/arch/ddr.h> 11 + 12 + /* Initialize DDRC registers */ 13 + static struct dram_cfg_param ddr_ddrc_cfg[] = { 14 + {0x4e300110, 0x44100001}, 15 + {0x4e300000, 0x8000ff}, 16 + {0x4e300008, 0x0}, 17 + {0x4e300080, 0x80000512}, 18 + {0x4e300084, 0x0}, 19 + {0x4e300114, 0x1002}, 20 + {0x4e300260, 0x80}, 21 + {0x4e300f04, 0x80}, 22 + {0x4e300800, 0x43b30002}, 23 + {0x4e300804, 0x1f1f1f1f}, 24 + {0x4e301000, 0x0}, 25 + {0x4e301240, 0x0}, 26 + {0x4e301244, 0x0}, 27 + {0x4e301248, 0x0}, 28 + {0x4e30124c, 0x0}, 29 + {0x4e301250, 0x0}, 30 + {0x4e301254, 0x0}, 31 + {0x4e301258, 0x0}, 32 + {0x4e30125c, 0x0}, 33 + }; 34 + 35 + /* dram fsp cfg */ 36 + static struct dram_fsp_cfg ddr_dram_fsp_cfg[] = { 37 + { 38 + { 39 + {0x4e300100, 0x12552100}, 40 + {0x4e300104, 0xF877000E}, 41 + {0x4e300108, 0x1816B4AA}, 42 + {0x4e30010C, 0x0051E1E6}, 43 + {0x4e300124, 0x0E3A0000}, 44 + {0x4e300160, 0x00009101}, 45 + {0x4e30016C, 0x30900000}, 46 + {0x4e300170, 0x8A0A0508}, 47 + {0x4e300250, 0x00000014}, 48 + {0x4e300254, 0x00AA00AA}, 49 + {0x4e300258, 0x00000008}, 50 + {0x4e30025C, 0x00000400}, 51 + {0x4e300300, 0x11281109}, 52 + {0x4e300304, 0x00AA140A}, 53 + {0x4e300308, 0x063C071E}, 54 + }, 55 + { 56 + {0x01, 0xB4}, 57 + {0x02, 0x1B}, 58 + {0x03, 0x32}, 59 + {0x0b, 0x46}, 60 + {0x0c, 0x11}, 61 + {0x0e, 0x11}, 62 + {0x16, 0x04}, 63 + }, 64 + 0, 65 + }, 66 + { 67 + { 68 + {0x4e300100, 0x010A1000}, 69 + {0x4e300104, 0xF855000A}, 70 + {0x4e300108, 0x9492AA58}, 71 + {0x4e30010C, 0x00310113}, 72 + {0x4e300124, 0x071E0000}, 73 + {0x4e300160, 0x00009100}, 74 + {0x4e30016C, 0x30200000}, 75 + {0x4e300170, 0x89090408}, 76 + {0x4e300250, 0x0000000A}, 77 + {0x4e300254, 0x00510051}, 78 + {0x4e300258, 0x00000008}, 79 + {0x4e30025C, 0x00000400}, 80 + }, 81 + { 82 + {0x01, 0x94}, 83 + {0x02, 0x9}, 84 + {0x03, 0x32}, 85 + {0x0b, 0x46}, 86 + {0x0c, 0x11}, 87 + {0x0e, 0x11}, 88 + {0x16, 0x04}, 89 + }, 90 + 0, 91 + }, 92 + { 93 + { 94 + {0x4e300100, 0x00061000}, 95 + {0x4e300104, 0xF855000A}, 96 + {0x4e300108, 0x6E62FA48}, 97 + {0x4e30010C, 0x0031010D}, 98 + {0x4e300124, 0x04C50000}, 99 + {0x4e300160, 0x00009100}, 100 + {0x4e30016C, 0x30000000}, 101 + {0x4e300170, 0x89090408}, 102 + {0x4e300250, 0x00000007}, 103 + {0x4e300254, 0x00340034}, 104 + {0x4e300258, 0x00000008}, 105 + {0x4e30025C, 0x00000400}, 106 + }, 107 + { 108 + {0x01, 0x94}, 109 + {0x02, 0x9}, 110 + {0x03, 0x32}, 111 + {0x0b, 0x46}, 112 + {0x0c, 0x11}, 113 + {0x0e, 0x11}, 114 + {0x16, 0x04}, 115 + }, 116 + 1, 117 + }, 118 + }; 119 + 120 + /* PHY Initialize Configuration */ 121 + static struct dram_cfg_param ddr_ddrphy_cfg[] = { 122 + {0x100a0, 0x4}, 123 + {0x100a1, 0x5}, 124 + {0x100a2, 0x6}, 125 + {0x100a3, 0x7}, 126 + {0x100a4, 0x0}, 127 + {0x100a5, 0x1}, 128 + {0x100a6, 0x2}, 129 + {0x100a7, 0x3}, 130 + {0x110a0, 0x3}, 131 + {0x110a1, 0x2}, 132 + {0x110a2, 0x0}, 133 + {0x110a3, 0x1}, 134 + {0x110a4, 0x7}, 135 + {0x110a5, 0x6}, 136 + {0x110a6, 0x4}, 137 + {0x110a7, 0x5}, 138 + {0x1005f, 0x5ff}, 139 + {0x1015f, 0x5ff}, 140 + {0x1105f, 0x5ff}, 141 + {0x1115f, 0x5ff}, 142 + {0x11005f, 0x5ff}, 143 + {0x11015f, 0x5ff}, 144 + {0x11105f, 0x5ff}, 145 + {0x11115f, 0x5ff}, 146 + {0x21005f, 0x5ff}, 147 + {0x21015f, 0x5ff}, 148 + {0x21105f, 0x5ff}, 149 + {0x21115f, 0x5ff}, 150 + {0x55, 0x1ff}, 151 + {0x1055, 0x1ff}, 152 + {0x2055, 0x1ff}, 153 + {0x200c5, 0xb}, 154 + {0x1200c5, 0x3}, 155 + {0x2200c5, 0x7}, 156 + {0x2002e, 0x2}, 157 + {0x12002e, 0x1}, 158 + {0x22002e, 0x2}, 159 + {0x90204, 0x0}, 160 + {0x190204, 0x0}, 161 + {0x290204, 0x0}, 162 + {0x20024, 0x1e3}, 163 + {0x2003a, 0x2}, 164 + {0x2007d, 0x212}, 165 + {0x2007c, 0x61}, 166 + {0x120024, 0x1e3}, 167 + {0x2003a, 0x2}, 168 + {0x12007d, 0x212}, 169 + {0x12007c, 0x61}, 170 + {0x220024, 0x1e3}, 171 + {0x2003a, 0x2}, 172 + {0x22007d, 0x212}, 173 + {0x22007c, 0x61}, 174 + {0x20056, 0x3}, 175 + {0x120056, 0x3}, 176 + {0x220056, 0x3}, 177 + {0x1004d, 0x600}, 178 + {0x1014d, 0x600}, 179 + {0x1104d, 0x600}, 180 + {0x1114d, 0x600}, 181 + {0x11004d, 0x600}, 182 + {0x11014d, 0x600}, 183 + {0x11104d, 0x600}, 184 + {0x11114d, 0x600}, 185 + {0x21004d, 0x600}, 186 + {0x21014d, 0x600}, 187 + {0x21104d, 0x600}, 188 + {0x21114d, 0x600}, 189 + {0x10049, 0xe00}, 190 + {0x10149, 0xe00}, 191 + {0x11049, 0xe00}, 192 + {0x11149, 0xe00}, 193 + {0x110049, 0xe00}, 194 + {0x110149, 0xe00}, 195 + {0x111049, 0xe00}, 196 + {0x111149, 0xe00}, 197 + {0x210049, 0xe00}, 198 + {0x210149, 0xe00}, 199 + {0x211049, 0xe00}, 200 + {0x211149, 0xe00}, 201 + {0x43, 0x60}, 202 + {0x1043, 0x60}, 203 + {0x2043, 0x60}, 204 + {0x20018, 0x1}, 205 + {0x20075, 0x4}, 206 + {0x20050, 0x0}, 207 + {0x2009b, 0x2}, 208 + {0x20008, 0x1d3}, 209 + {0x120008, 0xe9}, 210 + {0x220008, 0x9c}, 211 + {0x20088, 0x9}, 212 + {0x200b2, 0x10c}, 213 + {0x10043, 0x5a1}, 214 + {0x10143, 0x5a1}, 215 + {0x11043, 0x5a1}, 216 + {0x11143, 0x5a1}, 217 + {0x1200b2, 0x10c}, 218 + {0x110043, 0x5a1}, 219 + {0x110143, 0x5a1}, 220 + {0x111043, 0x5a1}, 221 + {0x111143, 0x5a1}, 222 + {0x2200b2, 0x10c}, 223 + {0x210043, 0x5a1}, 224 + {0x210143, 0x5a1}, 225 + {0x211043, 0x5a1}, 226 + {0x211143, 0x5a1}, 227 + {0x200fa, 0x2}, 228 + {0x1200fa, 0x2}, 229 + {0x2200fa, 0x2}, 230 + {0x20019, 0x1}, 231 + {0x120019, 0x1}, 232 + {0x220019, 0x1}, 233 + {0x200f0, 0x600}, 234 + {0x200f1, 0x0}, 235 + {0x200f2, 0x4444}, 236 + {0x200f3, 0x8888}, 237 + {0x200f4, 0x5655}, 238 + {0x200f5, 0x0}, 239 + {0x200f6, 0x0}, 240 + {0x200f7, 0xf000}, 241 + {0x1004a, 0x500}, 242 + {0x1104a, 0x500}, 243 + {0x20025, 0x0}, 244 + {0x2002d, 0x0}, 245 + {0x12002d, 0x0}, 246 + {0x22002d, 0x0}, 247 + {0x2002c, 0x0}, 248 + {0x20021, 0x0}, 249 + {0x200c7, 0x21}, 250 + {0x1200c7, 0x41}, 251 + {0x200ca, 0x24}, 252 + {0x1200ca, 0x24}, 253 + }; 254 + 255 + /* PHY trained csr */ 256 + static struct dram_cfg_param ddr_ddrphy_trained_csr[] = { 257 + {0x1005f, 0x0}, 258 + {0x1015f, 0x0}, 259 + {0x1105f, 0x0}, 260 + {0x1115f, 0x0}, 261 + {0x11005f, 0x0}, 262 + {0x11015f, 0x0}, 263 + {0x11105f, 0x0}, 264 + {0x11115f, 0x0}, 265 + {0x21005f, 0x0}, 266 + {0x21015f, 0x0}, 267 + {0x21105f, 0x0}, 268 + {0x21115f, 0x0}, 269 + {0x55, 0x0}, 270 + {0x1055, 0x0}, 271 + {0x2055, 0x0}, 272 + {0x200c5, 0x0}, 273 + {0x1200c5, 0x0}, 274 + {0x2200c5, 0x0}, 275 + {0x2002e, 0x0}, 276 + {0x12002e, 0x0}, 277 + {0x22002e, 0x0}, 278 + {0x90204, 0x0}, 279 + {0x190204, 0x0}, 280 + {0x290204, 0x0}, 281 + {0x20024, 0x0}, 282 + {0x2003a, 0x0}, 283 + {0x2007d, 0x0}, 284 + {0x2007c, 0x0}, 285 + {0x120024, 0x0}, 286 + {0x12007d, 0x0}, 287 + {0x12007c, 0x0}, 288 + {0x220024, 0x0}, 289 + {0x22007d, 0x0}, 290 + {0x22007c, 0x0}, 291 + {0x20056, 0x0}, 292 + {0x120056, 0x0}, 293 + {0x220056, 0x0}, 294 + {0x1004d, 0x0}, 295 + {0x1014d, 0x0}, 296 + {0x1104d, 0x0}, 297 + {0x1114d, 0x0}, 298 + {0x11004d, 0x0}, 299 + {0x11014d, 0x0}, 300 + {0x11104d, 0x0}, 301 + {0x11114d, 0x0}, 302 + {0x21004d, 0x0}, 303 + {0x21014d, 0x0}, 304 + {0x21104d, 0x0}, 305 + {0x21114d, 0x0}, 306 + {0x10049, 0x0}, 307 + {0x10149, 0x0}, 308 + {0x11049, 0x0}, 309 + {0x11149, 0x0}, 310 + {0x110049, 0x0}, 311 + {0x110149, 0x0}, 312 + {0x111049, 0x0}, 313 + {0x111149, 0x0}, 314 + {0x210049, 0x0}, 315 + {0x210149, 0x0}, 316 + {0x211049, 0x0}, 317 + {0x211149, 0x0}, 318 + {0x43, 0x0}, 319 + {0x1043, 0x0}, 320 + {0x2043, 0x0}, 321 + {0x20018, 0x0}, 322 + {0x20075, 0x0}, 323 + {0x20050, 0x0}, 324 + {0x2009b, 0x0}, 325 + {0x20008, 0x0}, 326 + {0x120008, 0x0}, 327 + {0x220008, 0x0}, 328 + {0x20088, 0x0}, 329 + {0x200b2, 0x0}, 330 + {0x10043, 0x0}, 331 + {0x10143, 0x0}, 332 + {0x11043, 0x0}, 333 + {0x11143, 0x0}, 334 + {0x1200b2, 0x0}, 335 + {0x110043, 0x0}, 336 + {0x110143, 0x0}, 337 + {0x111043, 0x0}, 338 + {0x111143, 0x0}, 339 + {0x2200b2, 0x0}, 340 + {0x210043, 0x0}, 341 + {0x210143, 0x0}, 342 + {0x211043, 0x0}, 343 + {0x211143, 0x0}, 344 + {0x200fa, 0x0}, 345 + {0x1200fa, 0x0}, 346 + {0x2200fa, 0x0}, 347 + {0x20019, 0x0}, 348 + {0x120019, 0x0}, 349 + {0x220019, 0x0}, 350 + {0x200f0, 0x0}, 351 + {0x200f1, 0x0}, 352 + {0x200f2, 0x0}, 353 + {0x200f3, 0x0}, 354 + {0x200f4, 0x0}, 355 + {0x200f5, 0x0}, 356 + {0x200f6, 0x0}, 357 + {0x200f7, 0x0}, 358 + {0x1004a, 0x0}, 359 + {0x1104a, 0x0}, 360 + {0x20025, 0x0}, 361 + {0x2002d, 0x0}, 362 + {0x12002d, 0x0}, 363 + {0x22002d, 0x0}, 364 + {0x2002c, 0x0}, 365 + {0xd0000, 0x0}, 366 + {0x90000, 0x0}, 367 + {0x90001, 0x0}, 368 + {0x90002, 0x0}, 369 + {0x90003, 0x0}, 370 + {0x90004, 0x0}, 371 + {0x90005, 0x0}, 372 + {0x90029, 0x0}, 373 + {0x9002a, 0x0}, 374 + {0x9002b, 0x0}, 375 + {0x9002c, 0x0}, 376 + {0x9002d, 0x0}, 377 + {0x9002e, 0x0}, 378 + {0x9002f, 0x0}, 379 + {0x90030, 0x0}, 380 + {0x90031, 0x0}, 381 + {0x90032, 0x0}, 382 + {0x90033, 0x0}, 383 + {0x90034, 0x0}, 384 + {0x90035, 0x0}, 385 + {0x90036, 0x0}, 386 + {0x90037, 0x0}, 387 + {0x90038, 0x0}, 388 + {0x90039, 0x0}, 389 + {0x9003a, 0x0}, 390 + {0x9003b, 0x0}, 391 + {0x9003c, 0x0}, 392 + {0x9003d, 0x0}, 393 + {0x9003e, 0x0}, 394 + {0x9003f, 0x0}, 395 + {0x90040, 0x0}, 396 + {0x90041, 0x0}, 397 + {0x90042, 0x0}, 398 + {0x90043, 0x0}, 399 + {0x90044, 0x0}, 400 + {0x90045, 0x0}, 401 + {0x90046, 0x0}, 402 + {0x90047, 0x0}, 403 + {0x90048, 0x0}, 404 + {0x90049, 0x0}, 405 + {0x9004a, 0x0}, 406 + {0x9004b, 0x0}, 407 + {0x9004c, 0x0}, 408 + {0x9004d, 0x0}, 409 + {0x9004e, 0x0}, 410 + {0x9004f, 0x0}, 411 + {0x90050, 0x0}, 412 + {0x90051, 0x0}, 413 + {0x90052, 0x0}, 414 + {0x90053, 0x0}, 415 + {0x90054, 0x0}, 416 + {0x90055, 0x0}, 417 + {0x90056, 0x0}, 418 + {0x90057, 0x0}, 419 + {0x90058, 0x0}, 420 + {0x90059, 0x0}, 421 + {0x9005a, 0x0}, 422 + {0x9005b, 0x0}, 423 + {0x9005c, 0x0}, 424 + {0x9005d, 0x0}, 425 + {0x9005e, 0x0}, 426 + {0x9005f, 0x0}, 427 + {0x90060, 0x0}, 428 + {0x90061, 0x0}, 429 + {0x90062, 0x0}, 430 + {0x90063, 0x0}, 431 + {0x90064, 0x0}, 432 + {0x90065, 0x0}, 433 + {0x90066, 0x0}, 434 + {0x90067, 0x0}, 435 + {0x90068, 0x0}, 436 + {0x90069, 0x0}, 437 + {0x9006a, 0x0}, 438 + {0x9006b, 0x0}, 439 + {0x9006c, 0x0}, 440 + {0x9006d, 0x0}, 441 + {0x9006e, 0x0}, 442 + {0x9006f, 0x0}, 443 + {0x90070, 0x0}, 444 + {0x90071, 0x0}, 445 + {0x90072, 0x0}, 446 + {0x90073, 0x0}, 447 + {0x90074, 0x0}, 448 + {0x90075, 0x0}, 449 + {0x90076, 0x0}, 450 + {0x90077, 0x0}, 451 + {0x90078, 0x0}, 452 + {0x90079, 0x0}, 453 + {0x9007a, 0x0}, 454 + {0x9007b, 0x0}, 455 + {0x9007c, 0x0}, 456 + {0x9007d, 0x0}, 457 + {0x9007e, 0x0}, 458 + {0x9007f, 0x0}, 459 + {0x90080, 0x0}, 460 + {0x90081, 0x0}, 461 + {0x90082, 0x0}, 462 + {0x90083, 0x0}, 463 + {0x90084, 0x0}, 464 + {0x90085, 0x0}, 465 + {0x90086, 0x0}, 466 + {0x90087, 0x0}, 467 + {0x90088, 0x0}, 468 + {0x90089, 0x0}, 469 + {0x9008a, 0x0}, 470 + {0x9008b, 0x0}, 471 + {0x9008c, 0x0}, 472 + {0x9008d, 0x0}, 473 + {0x9008e, 0x0}, 474 + {0x9008f, 0x0}, 475 + {0x90090, 0x0}, 476 + {0x90091, 0x0}, 477 + {0x90092, 0x0}, 478 + {0x90093, 0x0}, 479 + {0x90094, 0x0}, 480 + {0x90095, 0x0}, 481 + {0x90096, 0x0}, 482 + {0x90097, 0x0}, 483 + {0x90098, 0x0}, 484 + {0x90099, 0x0}, 485 + {0x9009a, 0x0}, 486 + {0x9009b, 0x0}, 487 + {0x9009c, 0x0}, 488 + {0x9009d, 0x0}, 489 + {0x9009e, 0x0}, 490 + {0x9009f, 0x0}, 491 + {0x900a0, 0x0}, 492 + {0x900a1, 0x0}, 493 + {0x900a2, 0x0}, 494 + {0x900a3, 0x0}, 495 + {0x900a4, 0x0}, 496 + {0x900a5, 0x0}, 497 + {0x900a6, 0x0}, 498 + {0x900a7, 0x0}, 499 + {0x900a8, 0x0}, 500 + {0x900a9, 0x0}, 501 + {0x40000, 0x0}, 502 + {0x40020, 0x0}, 503 + {0x40040, 0x0}, 504 + {0x40060, 0x0}, 505 + {0x40001, 0x0}, 506 + {0x40021, 0x0}, 507 + {0x40041, 0x0}, 508 + {0x40061, 0x0}, 509 + {0x40002, 0x0}, 510 + {0x40022, 0x0}, 511 + {0x40042, 0x0}, 512 + {0x40062, 0x0}, 513 + {0x40003, 0x0}, 514 + {0x40023, 0x0}, 515 + {0x40043, 0x0}, 516 + {0x40063, 0x0}, 517 + {0x40004, 0x0}, 518 + {0x40024, 0x0}, 519 + {0x40044, 0x0}, 520 + {0x40064, 0x0}, 521 + {0x40005, 0x0}, 522 + {0x40025, 0x0}, 523 + {0x40045, 0x0}, 524 + {0x40065, 0x0}, 525 + {0x40006, 0x0}, 526 + {0x40026, 0x0}, 527 + {0x40046, 0x0}, 528 + {0x40066, 0x0}, 529 + {0x40007, 0x0}, 530 + {0x40027, 0x0}, 531 + {0x40047, 0x0}, 532 + {0x40067, 0x0}, 533 + {0x40008, 0x0}, 534 + {0x40028, 0x0}, 535 + {0x40048, 0x0}, 536 + {0x40068, 0x0}, 537 + {0x40009, 0x0}, 538 + {0x40029, 0x0}, 539 + {0x40049, 0x0}, 540 + {0x40069, 0x0}, 541 + {0x4000a, 0x0}, 542 + {0x4002a, 0x0}, 543 + {0x4004a, 0x0}, 544 + {0x4006a, 0x0}, 545 + {0x4000b, 0x0}, 546 + {0x4002b, 0x0}, 547 + {0x4004b, 0x0}, 548 + {0x4006b, 0x0}, 549 + {0x4000c, 0x0}, 550 + {0x4002c, 0x0}, 551 + {0x4004c, 0x0}, 552 + {0x4006c, 0x0}, 553 + {0x4000d, 0x0}, 554 + {0x4002d, 0x0}, 555 + {0x4004d, 0x0}, 556 + {0x4006d, 0x0}, 557 + {0x4000e, 0x0}, 558 + {0x4002e, 0x0}, 559 + {0x4004e, 0x0}, 560 + {0x4006e, 0x0}, 561 + {0x4000f, 0x0}, 562 + {0x4002f, 0x0}, 563 + {0x4004f, 0x0}, 564 + {0x4006f, 0x0}, 565 + {0x40010, 0x0}, 566 + {0x40030, 0x0}, 567 + {0x40050, 0x0}, 568 + {0x40070, 0x0}, 569 + {0x40011, 0x0}, 570 + {0x40031, 0x0}, 571 + {0x40051, 0x0}, 572 + {0x40071, 0x0}, 573 + {0x40012, 0x0}, 574 + {0x40032, 0x0}, 575 + {0x40052, 0x0}, 576 + {0x40072, 0x0}, 577 + {0x40013, 0x0}, 578 + {0x40033, 0x0}, 579 + {0x40053, 0x0}, 580 + {0x40073, 0x0}, 581 + {0x40014, 0x0}, 582 + {0x40034, 0x0}, 583 + {0x40054, 0x0}, 584 + {0x40074, 0x0}, 585 + {0x40015, 0x0}, 586 + {0x40035, 0x0}, 587 + {0x40055, 0x0}, 588 + {0x40075, 0x0}, 589 + {0x40016, 0x0}, 590 + {0x40036, 0x0}, 591 + {0x40056, 0x0}, 592 + {0x40076, 0x0}, 593 + {0x40017, 0x0}, 594 + {0x40037, 0x0}, 595 + {0x40057, 0x0}, 596 + {0x40077, 0x0}, 597 + {0x40018, 0x0}, 598 + {0x40038, 0x0}, 599 + {0x40058, 0x0}, 600 + {0x40078, 0x0}, 601 + {0x40019, 0x0}, 602 + {0x40039, 0x0}, 603 + {0x40059, 0x0}, 604 + {0x40079, 0x0}, 605 + {0x4001a, 0x0}, 606 + {0x4003a, 0x0}, 607 + {0x4005a, 0x0}, 608 + {0x4007a, 0x0}, 609 + {0x900aa, 0x0}, 610 + {0x900ab, 0x0}, 611 + {0x900ac, 0x0}, 612 + {0x900ad, 0x0}, 613 + {0x900ae, 0x0}, 614 + {0x900af, 0x0}, 615 + {0x900b0, 0x0}, 616 + {0x900b1, 0x0}, 617 + {0x900b2, 0x0}, 618 + {0x900b3, 0x0}, 619 + {0x900b4, 0x0}, 620 + {0x900b5, 0x0}, 621 + {0x900b6, 0x0}, 622 + {0x900b7, 0x0}, 623 + {0x900b8, 0x0}, 624 + {0x900b9, 0x0}, 625 + {0x900ba, 0x0}, 626 + {0x900bb, 0x0}, 627 + {0x900bc, 0x0}, 628 + {0x900bd, 0x0}, 629 + {0x900be, 0x0}, 630 + {0x900bf, 0x0}, 631 + {0x900c0, 0x0}, 632 + {0x900c1, 0x0}, 633 + {0x900c2, 0x0}, 634 + {0x900c3, 0x0}, 635 + {0x900c4, 0x0}, 636 + {0x900c5, 0x0}, 637 + {0x900c6, 0x0}, 638 + {0x900c7, 0x0}, 639 + {0x900c8, 0x0}, 640 + {0x900c9, 0x0}, 641 + {0x900ca, 0x0}, 642 + {0x900cb, 0x0}, 643 + {0x900cc, 0x0}, 644 + {0x900cd, 0x0}, 645 + {0x900ce, 0x0}, 646 + {0x900cf, 0x0}, 647 + {0x900d0, 0x0}, 648 + {0x900d1, 0x0}, 649 + {0x900d2, 0x0}, 650 + {0x900d3, 0x0}, 651 + {0x900d4, 0x0}, 652 + {0x900d5, 0x0}, 653 + {0x900d6, 0x0}, 654 + {0x900d7, 0x0}, 655 + {0x900d8, 0x0}, 656 + {0x900d9, 0x0}, 657 + {0x900da, 0x0}, 658 + {0x900db, 0x0}, 659 + {0x900dc, 0x0}, 660 + {0x900dd, 0x0}, 661 + {0x900de, 0x0}, 662 + {0x900df, 0x0}, 663 + {0x900e0, 0x0}, 664 + {0x900e1, 0x0}, 665 + {0x900e2, 0x0}, 666 + {0x900e3, 0x0}, 667 + {0x900e4, 0x0}, 668 + {0x900e5, 0x0}, 669 + {0x900e6, 0x0}, 670 + {0x900e7, 0x0}, 671 + {0x900e8, 0x0}, 672 + {0x900e9, 0x0}, 673 + {0x900ea, 0x0}, 674 + {0x900eb, 0x0}, 675 + {0x900ec, 0x0}, 676 + {0x900ed, 0x0}, 677 + {0x900ee, 0x0}, 678 + {0x900ef, 0x0}, 679 + {0x900f0, 0x0}, 680 + {0x900f1, 0x0}, 681 + {0x900f2, 0x0}, 682 + {0x900f3, 0x0}, 683 + {0x900f4, 0x0}, 684 + {0x900f5, 0x0}, 685 + {0x900f6, 0x0}, 686 + {0x900f7, 0x0}, 687 + {0x900f8, 0x0}, 688 + {0x900f9, 0x0}, 689 + {0x900fa, 0x0}, 690 + {0x900fb, 0x0}, 691 + {0x900fc, 0x0}, 692 + {0x900fd, 0x0}, 693 + {0x900fe, 0x0}, 694 + {0x900ff, 0x0}, 695 + {0x90100, 0x0}, 696 + {0x90101, 0x0}, 697 + {0x90102, 0x0}, 698 + {0x90103, 0x0}, 699 + {0x90104, 0x0}, 700 + {0x90105, 0x0}, 701 + {0x90106, 0x0}, 702 + {0x90107, 0x0}, 703 + {0x90108, 0x0}, 704 + {0x90109, 0x0}, 705 + {0x9010a, 0x0}, 706 + {0x9010b, 0x0}, 707 + {0x9010c, 0x0}, 708 + {0x9010d, 0x0}, 709 + {0x9010e, 0x0}, 710 + {0x9010f, 0x0}, 711 + {0x90110, 0x0}, 712 + {0x90111, 0x0}, 713 + {0x90112, 0x0}, 714 + {0x90113, 0x0}, 715 + {0x90114, 0x0}, 716 + {0x90115, 0x0}, 717 + {0x90116, 0x0}, 718 + {0x90117, 0x0}, 719 + {0x90118, 0x0}, 720 + {0x90119, 0x0}, 721 + {0x9011a, 0x0}, 722 + {0x9011b, 0x0}, 723 + {0x9011c, 0x0}, 724 + {0x9011d, 0x0}, 725 + {0x9011e, 0x0}, 726 + {0x9011f, 0x0}, 727 + {0x90120, 0x0}, 728 + {0x90121, 0x0}, 729 + {0x90122, 0x0}, 730 + {0x90123, 0x0}, 731 + {0x90124, 0x0}, 732 + {0x90125, 0x0}, 733 + {0x90126, 0x0}, 734 + {0x90127, 0x0}, 735 + {0x90128, 0x0}, 736 + {0x90129, 0x0}, 737 + {0x9012a, 0x0}, 738 + {0x9012b, 0x0}, 739 + {0x9012c, 0x0}, 740 + {0x9012d, 0x0}, 741 + {0x9012e, 0x0}, 742 + {0x9012f, 0x0}, 743 + {0x90130, 0x0}, 744 + {0x90131, 0x0}, 745 + {0x90132, 0x0}, 746 + {0x90133, 0x0}, 747 + {0x90134, 0x0}, 748 + {0x90135, 0x0}, 749 + {0x90136, 0x0}, 750 + {0x90137, 0x0}, 751 + {0x90138, 0x0}, 752 + {0x90139, 0x0}, 753 + {0x9013a, 0x0}, 754 + {0x9013b, 0x0}, 755 + {0x9013c, 0x0}, 756 + {0x9013d, 0x0}, 757 + {0x9013e, 0x0}, 758 + {0x9013f, 0x0}, 759 + {0x90140, 0x0}, 760 + {0x90141, 0x0}, 761 + {0x90142, 0x0}, 762 + {0x90143, 0x0}, 763 + {0x90144, 0x0}, 764 + {0x90145, 0x0}, 765 + {0x90146, 0x0}, 766 + {0x90147, 0x0}, 767 + {0x90148, 0x0}, 768 + {0x90149, 0x0}, 769 + {0x9014a, 0x0}, 770 + {0x9014b, 0x0}, 771 + {0x9014c, 0x0}, 772 + {0x9014d, 0x0}, 773 + {0x9014e, 0x0}, 774 + {0x9014f, 0x0}, 775 + {0x90150, 0x0}, 776 + {0x90151, 0x0}, 777 + {0x90152, 0x0}, 778 + {0x90153, 0x0}, 779 + {0x90154, 0x0}, 780 + {0x90155, 0x0}, 781 + {0x90156, 0x0}, 782 + {0x90157, 0x0}, 783 + {0x90158, 0x0}, 784 + {0x90159, 0x0}, 785 + {0x9015a, 0x0}, 786 + {0x9015b, 0x0}, 787 + {0x9015c, 0x0}, 788 + {0x9015d, 0x0}, 789 + {0x9015e, 0x0}, 790 + {0x9015f, 0x0}, 791 + {0x90160, 0x0}, 792 + {0x90161, 0x0}, 793 + {0x90162, 0x0}, 794 + {0x90163, 0x0}, 795 + {0x90164, 0x0}, 796 + {0x90165, 0x0}, 797 + {0x90166, 0x0}, 798 + {0x90167, 0x0}, 799 + {0x90168, 0x0}, 800 + {0x90169, 0x0}, 801 + {0x9016a, 0x0}, 802 + {0x9016b, 0x0}, 803 + {0x9016c, 0x0}, 804 + {0x9016d, 0x0}, 805 + {0x9016e, 0x0}, 806 + {0x9016f, 0x0}, 807 + {0x90170, 0x0}, 808 + {0x90171, 0x0}, 809 + {0x90172, 0x0}, 810 + {0x90173, 0x0}, 811 + {0x90174, 0x0}, 812 + {0x90175, 0x0}, 813 + {0x90176, 0x0}, 814 + {0x90177, 0x0}, 815 + {0x90178, 0x0}, 816 + {0x90179, 0x0}, 817 + {0x9017a, 0x0}, 818 + {0x9017b, 0x0}, 819 + {0x9017c, 0x0}, 820 + {0x9017d, 0x0}, 821 + {0x9017e, 0x0}, 822 + {0x9017f, 0x0}, 823 + {0x90180, 0x0}, 824 + {0x90181, 0x0}, 825 + {0x90182, 0x0}, 826 + {0x90183, 0x0}, 827 + {0x90184, 0x0}, 828 + {0x90006, 0x0}, 829 + {0x90007, 0x0}, 830 + {0x90008, 0x0}, 831 + {0x90009, 0x0}, 832 + {0x9000a, 0x0}, 833 + {0x9000b, 0x0}, 834 + {0xd00e7, 0x0}, 835 + {0x90017, 0x0}, 836 + {0x9001f, 0x0}, 837 + {0x90026, 0x0}, 838 + {0x400d0, 0x0}, 839 + {0x400d1, 0x0}, 840 + {0x400d2, 0x0}, 841 + {0x400d3, 0x0}, 842 + {0x400d4, 0x0}, 843 + {0x400d5, 0x0}, 844 + {0x400d6, 0x0}, 845 + {0x400d7, 0x0}, 846 + {0x200be, 0x0}, 847 + {0x2000b, 0x0}, 848 + {0x2000c, 0x0}, 849 + {0x2000d, 0x0}, 850 + {0x2000e, 0x0}, 851 + {0x12000b, 0x0}, 852 + {0x12000c, 0x0}, 853 + {0x12000d, 0x0}, 854 + {0x12000e, 0x0}, 855 + {0x22000b, 0x0}, 856 + {0x22000c, 0x0}, 857 + {0x22000d, 0x0}, 858 + {0x22000e, 0x0}, 859 + {0x9000c, 0x0}, 860 + {0x9000d, 0x0}, 861 + {0x9000e, 0x0}, 862 + {0x9000f, 0x0}, 863 + {0x90010, 0x0}, 864 + {0x90011, 0x0}, 865 + {0x90012, 0x0}, 866 + {0x90013, 0x0}, 867 + {0x20010, 0x0}, 868 + {0x20011, 0x0}, 869 + {0x120010, 0x0}, 870 + {0x120011, 0x0}, 871 + {0x40080, 0x0}, 872 + {0x40081, 0x0}, 873 + {0x40082, 0x0}, 874 + {0x40083, 0x0}, 875 + {0x40084, 0x0}, 876 + {0x40085, 0x0}, 877 + {0x140080, 0x0}, 878 + {0x140081, 0x0}, 879 + {0x140082, 0x0}, 880 + {0x140083, 0x0}, 881 + {0x140084, 0x0}, 882 + {0x140085, 0x0}, 883 + {0x240080, 0x0}, 884 + {0x240081, 0x0}, 885 + {0x240082, 0x0}, 886 + {0x240083, 0x0}, 887 + {0x240084, 0x0}, 888 + {0x240085, 0x0}, 889 + {0x400fd, 0x0}, 890 + {0x400f1, 0x0}, 891 + {0x10011, 0x0}, 892 + {0x10012, 0x0}, 893 + {0x10013, 0x0}, 894 + {0x10018, 0x0}, 895 + {0x10002, 0x0}, 896 + {0x100b2, 0x0}, 897 + {0x101b4, 0x0}, 898 + {0x102b4, 0x0}, 899 + {0x103b4, 0x0}, 900 + {0x104b4, 0x0}, 901 + {0x105b4, 0x0}, 902 + {0x106b4, 0x0}, 903 + {0x107b4, 0x0}, 904 + {0x108b4, 0x0}, 905 + {0x11011, 0x0}, 906 + {0x11012, 0x0}, 907 + {0x11013, 0x0}, 908 + {0x11018, 0x0}, 909 + {0x11002, 0x0}, 910 + {0x110b2, 0x0}, 911 + {0x111b4, 0x0}, 912 + {0x112b4, 0x0}, 913 + {0x113b4, 0x0}, 914 + {0x114b4, 0x0}, 915 + {0x115b4, 0x0}, 916 + {0x116b4, 0x0}, 917 + {0x117b4, 0x0}, 918 + {0x118b4, 0x0}, 919 + {0x20089, 0x0}, 920 + {0xc0080, 0x0}, 921 + {0x200cb, 0x0}, 922 + {0x10068, 0x0}, 923 + {0x10069, 0x0}, 924 + {0x10168, 0x0}, 925 + {0x10169, 0x0}, 926 + {0x10268, 0x0}, 927 + {0x10269, 0x0}, 928 + {0x10368, 0x0}, 929 + {0x10369, 0x0}, 930 + {0x10468, 0x0}, 931 + {0x10469, 0x0}, 932 + {0x10568, 0x0}, 933 + {0x10569, 0x0}, 934 + {0x10668, 0x0}, 935 + {0x10669, 0x0}, 936 + {0x10768, 0x0}, 937 + {0x10769, 0x0}, 938 + {0x10868, 0x0}, 939 + {0x10869, 0x0}, 940 + {0x100aa, 0x0}, 941 + {0x10062, 0x0}, 942 + {0x10001, 0x0}, 943 + {0x100a0, 0x0}, 944 + {0x100a1, 0x0}, 945 + {0x100a2, 0x0}, 946 + {0x100a3, 0x0}, 947 + {0x100a4, 0x0}, 948 + {0x100a5, 0x0}, 949 + {0x100a6, 0x0}, 950 + {0x100a7, 0x0}, 951 + {0x11068, 0x0}, 952 + {0x11069, 0x0}, 953 + {0x11168, 0x0}, 954 + {0x11169, 0x0}, 955 + {0x11268, 0x0}, 956 + {0x11269, 0x0}, 957 + {0x11368, 0x0}, 958 + {0x11369, 0x0}, 959 + {0x11468, 0x0}, 960 + {0x11469, 0x0}, 961 + {0x11568, 0x0}, 962 + {0x11569, 0x0}, 963 + {0x11668, 0x0}, 964 + {0x11669, 0x0}, 965 + {0x11768, 0x0}, 966 + {0x11769, 0x0}, 967 + {0x11868, 0x0}, 968 + {0x11869, 0x0}, 969 + {0x110aa, 0x0}, 970 + {0x11062, 0x0}, 971 + {0x11001, 0x0}, 972 + {0x110a0, 0x0}, 973 + {0x110a1, 0x0}, 974 + {0x110a2, 0x0}, 975 + {0x110a3, 0x0}, 976 + {0x110a4, 0x0}, 977 + {0x110a5, 0x0}, 978 + {0x110a6, 0x0}, 979 + {0x110a7, 0x0}, 980 + {0x80, 0x0}, 981 + {0x1080, 0x0}, 982 + {0x2080, 0x0}, 983 + {0x10020, 0x0}, 984 + {0x10080, 0x0}, 985 + {0x10081, 0x0}, 986 + {0x100d0, 0x0}, 987 + {0x100d1, 0x0}, 988 + {0x1008c, 0x0}, 989 + {0x1008d, 0x0}, 990 + {0x10180, 0x0}, 991 + {0x10181, 0x0}, 992 + {0x101d0, 0x0}, 993 + {0x101d1, 0x0}, 994 + {0x1018c, 0x0}, 995 + {0x1018d, 0x0}, 996 + {0x100c0, 0x0}, 997 + {0x100c1, 0x0}, 998 + {0x101c0, 0x0}, 999 + {0x101c1, 0x0}, 1000 + {0x102c0, 0x0}, 1001 + {0x102c1, 0x0}, 1002 + {0x103c0, 0x0}, 1003 + {0x103c1, 0x0}, 1004 + {0x104c0, 0x0}, 1005 + {0x104c1, 0x0}, 1006 + {0x105c0, 0x0}, 1007 + {0x105c1, 0x0}, 1008 + {0x106c0, 0x0}, 1009 + {0x106c1, 0x0}, 1010 + {0x107c0, 0x0}, 1011 + {0x107c1, 0x0}, 1012 + {0x108c0, 0x0}, 1013 + {0x108c1, 0x0}, 1014 + {0x100ae, 0x0}, 1015 + {0x100af, 0x0}, 1016 + {0x11020, 0x0}, 1017 + {0x11080, 0x0}, 1018 + {0x11081, 0x0}, 1019 + {0x110d0, 0x0}, 1020 + {0x110d1, 0x0}, 1021 + {0x1108c, 0x0}, 1022 + {0x1108d, 0x0}, 1023 + {0x11180, 0x0}, 1024 + {0x11181, 0x0}, 1025 + {0x111d0, 0x0}, 1026 + {0x111d1, 0x0}, 1027 + {0x1118c, 0x0}, 1028 + {0x1118d, 0x0}, 1029 + {0x110c0, 0x0}, 1030 + {0x110c1, 0x0}, 1031 + {0x111c0, 0x0}, 1032 + {0x111c1, 0x0}, 1033 + {0x112c0, 0x0}, 1034 + {0x112c1, 0x0}, 1035 + {0x113c0, 0x0}, 1036 + {0x113c1, 0x0}, 1037 + {0x114c0, 0x0}, 1038 + {0x114c1, 0x0}, 1039 + {0x115c0, 0x0}, 1040 + {0x115c1, 0x0}, 1041 + {0x116c0, 0x0}, 1042 + {0x116c1, 0x0}, 1043 + {0x117c0, 0x0}, 1044 + {0x117c1, 0x0}, 1045 + {0x118c0, 0x0}, 1046 + {0x118c1, 0x0}, 1047 + {0x110ae, 0x0}, 1048 + {0x110af, 0x0}, 1049 + {0x90201, 0x0}, 1050 + {0x90202, 0x0}, 1051 + {0x90203, 0x0}, 1052 + {0x90205, 0x0}, 1053 + {0x90206, 0x0}, 1054 + {0x90207, 0x0}, 1055 + {0x90208, 0x0}, 1056 + {0x20020, 0x0}, 1057 + {0x100080, 0x0}, 1058 + {0x101080, 0x0}, 1059 + {0x102080, 0x0}, 1060 + {0x110020, 0x0}, 1061 + {0x110080, 0x0}, 1062 + {0x110081, 0x0}, 1063 + {0x1100d0, 0x0}, 1064 + {0x1100d1, 0x0}, 1065 + {0x11008c, 0x0}, 1066 + {0x11008d, 0x0}, 1067 + {0x110180, 0x0}, 1068 + {0x110181, 0x0}, 1069 + {0x1101d0, 0x0}, 1070 + {0x1101d1, 0x0}, 1071 + {0x11018c, 0x0}, 1072 + {0x11018d, 0x0}, 1073 + {0x1100c0, 0x0}, 1074 + {0x1100c1, 0x0}, 1075 + {0x1101c0, 0x0}, 1076 + {0x1101c1, 0x0}, 1077 + {0x1102c0, 0x0}, 1078 + {0x1102c1, 0x0}, 1079 + {0x1103c0, 0x0}, 1080 + {0x1103c1, 0x0}, 1081 + {0x1104c0, 0x0}, 1082 + {0x1104c1, 0x0}, 1083 + {0x1105c0, 0x0}, 1084 + {0x1105c1, 0x0}, 1085 + {0x1106c0, 0x0}, 1086 + {0x1106c1, 0x0}, 1087 + {0x1107c0, 0x0}, 1088 + {0x1107c1, 0x0}, 1089 + {0x1108c0, 0x0}, 1090 + {0x1108c1, 0x0}, 1091 + {0x1100ae, 0x0}, 1092 + {0x1100af, 0x0}, 1093 + {0x111020, 0x0}, 1094 + {0x111080, 0x0}, 1095 + {0x111081, 0x0}, 1096 + {0x1110d0, 0x0}, 1097 + {0x1110d1, 0x0}, 1098 + {0x11108c, 0x0}, 1099 + {0x11108d, 0x0}, 1100 + {0x111180, 0x0}, 1101 + {0x111181, 0x0}, 1102 + {0x1111d0, 0x0}, 1103 + {0x1111d1, 0x0}, 1104 + {0x11118c, 0x0}, 1105 + {0x11118d, 0x0}, 1106 + {0x1110c0, 0x0}, 1107 + {0x1110c1, 0x0}, 1108 + {0x1111c0, 0x0}, 1109 + {0x1111c1, 0x0}, 1110 + {0x1112c0, 0x0}, 1111 + {0x1112c1, 0x0}, 1112 + {0x1113c0, 0x0}, 1113 + {0x1113c1, 0x0}, 1114 + {0x1114c0, 0x0}, 1115 + {0x1114c1, 0x0}, 1116 + {0x1115c0, 0x0}, 1117 + {0x1115c1, 0x0}, 1118 + {0x1116c0, 0x0}, 1119 + {0x1116c1, 0x0}, 1120 + {0x1117c0, 0x0}, 1121 + {0x1117c1, 0x0}, 1122 + {0x1118c0, 0x0}, 1123 + {0x1118c1, 0x0}, 1124 + {0x1110ae, 0x0}, 1125 + {0x1110af, 0x0}, 1126 + {0x190201, 0x0}, 1127 + {0x190202, 0x0}, 1128 + {0x190203, 0x0}, 1129 + {0x190205, 0x0}, 1130 + {0x190206, 0x0}, 1131 + {0x190207, 0x0}, 1132 + {0x190208, 0x0}, 1133 + {0x120020, 0x0}, 1134 + {0x200080, 0x0}, 1135 + {0x201080, 0x0}, 1136 + {0x202080, 0x0}, 1137 + {0x210020, 0x0}, 1138 + {0x210080, 0x0}, 1139 + {0x210081, 0x0}, 1140 + {0x2100d0, 0x0}, 1141 + {0x2100d1, 0x0}, 1142 + {0x21008c, 0x0}, 1143 + {0x21008d, 0x0}, 1144 + {0x210180, 0x0}, 1145 + {0x210181, 0x0}, 1146 + {0x2101d0, 0x0}, 1147 + {0x2101d1, 0x0}, 1148 + {0x21018c, 0x0}, 1149 + {0x21018d, 0x0}, 1150 + {0x2100c0, 0x0}, 1151 + {0x2100c1, 0x0}, 1152 + {0x2101c0, 0x0}, 1153 + {0x2101c1, 0x0}, 1154 + {0x2102c0, 0x0}, 1155 + {0x2102c1, 0x0}, 1156 + {0x2103c0, 0x0}, 1157 + {0x2103c1, 0x0}, 1158 + {0x2104c0, 0x0}, 1159 + {0x2104c1, 0x0}, 1160 + {0x2105c0, 0x0}, 1161 + {0x2105c1, 0x0}, 1162 + {0x2106c0, 0x0}, 1163 + {0x2106c1, 0x0}, 1164 + {0x2107c0, 0x0}, 1165 + {0x2107c1, 0x0}, 1166 + {0x2108c0, 0x0}, 1167 + {0x2108c1, 0x0}, 1168 + {0x2100ae, 0x0}, 1169 + {0x2100af, 0x0}, 1170 + {0x211020, 0x0}, 1171 + {0x211080, 0x0}, 1172 + {0x211081, 0x0}, 1173 + {0x2110d0, 0x0}, 1174 + {0x2110d1, 0x0}, 1175 + {0x21108c, 0x0}, 1176 + {0x21108d, 0x0}, 1177 + {0x211180, 0x0}, 1178 + {0x211181, 0x0}, 1179 + {0x2111d0, 0x0}, 1180 + {0x2111d1, 0x0}, 1181 + {0x21118c, 0x0}, 1182 + {0x21118d, 0x0}, 1183 + {0x2110c0, 0x0}, 1184 + {0x2110c1, 0x0}, 1185 + {0x2111c0, 0x0}, 1186 + {0x2111c1, 0x0}, 1187 + {0x2112c0, 0x0}, 1188 + {0x2112c1, 0x0}, 1189 + {0x2113c0, 0x0}, 1190 + {0x2113c1, 0x0}, 1191 + {0x2114c0, 0x0}, 1192 + {0x2114c1, 0x0}, 1193 + {0x2115c0, 0x0}, 1194 + {0x2115c1, 0x0}, 1195 + {0x2116c0, 0x0}, 1196 + {0x2116c1, 0x0}, 1197 + {0x2117c0, 0x0}, 1198 + {0x2117c1, 0x0}, 1199 + {0x2118c0, 0x0}, 1200 + {0x2118c1, 0x0}, 1201 + {0x2110ae, 0x0}, 1202 + {0x2110af, 0x0}, 1203 + {0x290201, 0x0}, 1204 + {0x290202, 0x0}, 1205 + {0x290203, 0x0}, 1206 + {0x290205, 0x0}, 1207 + {0x290206, 0x0}, 1208 + {0x290207, 0x0}, 1209 + {0x290208, 0x0}, 1210 + {0x220020, 0x0}, 1211 + {0x20077, 0x0}, 1212 + {0x20072, 0x0}, 1213 + {0x20073, 0x0}, 1214 + {0x400c0, 0x0}, 1215 + {0x10040, 0x0}, 1216 + {0x10140, 0x0}, 1217 + {0x10240, 0x0}, 1218 + {0x10340, 0x0}, 1219 + {0x10440, 0x0}, 1220 + {0x10540, 0x0}, 1221 + {0x10640, 0x0}, 1222 + {0x10740, 0x0}, 1223 + {0x10840, 0x0}, 1224 + {0x11040, 0x0}, 1225 + {0x11140, 0x0}, 1226 + {0x11240, 0x0}, 1227 + {0x11340, 0x0}, 1228 + {0x11440, 0x0}, 1229 + {0x11540, 0x0}, 1230 + {0x11640, 0x0}, 1231 + {0x11740, 0x0}, 1232 + {0x11840, 0x0}, 1233 + }; 1234 + 1235 + /* P0 message block parameter for training firmware */ 1236 + static struct dram_cfg_param ddr_fsp0_cfg[] = { 1237 + {0xd0000, 0x0}, 1238 + {0x54003, 0x74a}, 1239 + {0x54004, 0x4}, 1240 + {0x54006, 0x15}, 1241 + {0x54008, 0x131f}, 1242 + {0x54009, 0xc8}, 1243 + {0x5400b, 0x4}, 1244 + {0x5400d, 0x100}, 1245 + {0x5400f, 0x100}, 1246 + {0x54012, 0x110}, 1247 + {0x54019, 0x1bb4}, 1248 + {0x5401a, 0x32}, 1249 + {0x5401b, 0x1146}, 1250 + {0x5401c, 0x1108}, 1251 + {0x5401e, 0x4}, 1252 + {0x5401f, 0x1bb4}, 1253 + {0x54020, 0x32}, 1254 + {0x54021, 0x1146}, 1255 + {0x54022, 0x1108}, 1256 + {0x54024, 0x4}, 1257 + {0x54032, 0xb400}, 1258 + {0x54033, 0x321b}, 1259 + {0x54034, 0x4600}, 1260 + {0x54035, 0x811}, 1261 + {0x54036, 0x11}, 1262 + {0x54037, 0x400}, 1263 + {0x54038, 0xb400}, 1264 + {0x54039, 0x321b}, 1265 + {0x5403a, 0x4600}, 1266 + {0x5403b, 0x811}, 1267 + {0x5403c, 0x11}, 1268 + {0x5403d, 0x400}, 1269 + {0xd0000, 0x1} 1270 + }; 1271 + 1272 + /* P1 message block parameter for training firmware */ 1273 + static struct dram_cfg_param ddr_fsp1_cfg[] = { 1274 + {0xd0000, 0x0}, 1275 + {0x54002, 0x1}, 1276 + {0x54003, 0x3a4}, 1277 + {0x54004, 0x4}, 1278 + {0x54006, 0x15}, 1279 + {0x54008, 0x121f}, 1280 + {0x54009, 0xc8}, 1281 + {0x5400b, 0x4}, 1282 + {0x5400d, 0x100}, 1283 + {0x5400f, 0x100}, 1284 + {0x54012, 0x110}, 1285 + {0x54019, 0x994}, 1286 + {0x5401a, 0x32}, 1287 + {0x5401b, 0x1146}, 1288 + {0x5401c, 0x1108}, 1289 + {0x5401e, 0x4}, 1290 + {0x5401f, 0x994}, 1291 + {0x54020, 0x32}, 1292 + {0x54021, 0x1146}, 1293 + {0x54022, 0x1108}, 1294 + {0x54024, 0x4}, 1295 + {0x54032, 0x9400}, 1296 + {0x54033, 0x3209}, 1297 + {0x54034, 0x4600}, 1298 + {0x54035, 0x811}, 1299 + {0x54036, 0x11}, 1300 + {0x54037, 0x400}, 1301 + {0x54038, 0x9400}, 1302 + {0x54039, 0x3209}, 1303 + {0x5403a, 0x4600}, 1304 + {0x5403b, 0x811}, 1305 + {0x5403c, 0x11}, 1306 + {0x5403d, 0x400}, 1307 + {0xd0000, 0x1} 1308 + }; 1309 + 1310 + /* P2 message block parameter for training firmware */ 1311 + static struct dram_cfg_param ddr_fsp2_cfg[] = { 1312 + {0xd0000, 0x0}, 1313 + {0x54002, 0x102}, 1314 + {0x54003, 0x270}, 1315 + {0x54004, 0x4}, 1316 + {0x54006, 0x15}, 1317 + {0x54008, 0x121f}, 1318 + {0x54009, 0xc8}, 1319 + {0x5400b, 0x4}, 1320 + {0x5400d, 0x100}, 1321 + {0x5400f, 0x100}, 1322 + {0x54012, 0x110}, 1323 + {0x54019, 0x994}, 1324 + {0x5401a, 0x32}, 1325 + {0x5401b, 0x1146}, 1326 + {0x5401c, 0x1100}, 1327 + {0x5401e, 0x4}, 1328 + {0x5401f, 0x994}, 1329 + {0x54020, 0x32}, 1330 + {0x54021, 0x1146}, 1331 + {0x54022, 0x1100}, 1332 + {0x54024, 0x4}, 1333 + {0x54032, 0x9400}, 1334 + {0x54033, 0x3209}, 1335 + {0x54034, 0x4600}, 1336 + {0x54035, 0x11}, 1337 + {0x54036, 0x11}, 1338 + {0x54037, 0x400}, 1339 + {0x54038, 0x9400}, 1340 + {0x54039, 0x3209}, 1341 + {0x5403a, 0x4600}, 1342 + {0x5403b, 0x11}, 1343 + {0x5403c, 0x11}, 1344 + {0x5403d, 0x400}, 1345 + {0xd0000, 0x1} 1346 + }; 1347 + 1348 + /* P0 2D message block parameter for training firmware */ 1349 + static struct dram_cfg_param ddr_fsp0_2d_cfg[] = { 1350 + {0xd0000, 0x0}, 1351 + {0x54003, 0x74a}, 1352 + {0x54004, 0x4}, 1353 + {0x54006, 0x15}, 1354 + {0x54008, 0x61}, 1355 + {0x54009, 0xc8}, 1356 + {0x5400b, 0x4}, 1357 + {0x5400d, 0x100}, 1358 + {0x5400f, 0x100}, 1359 + {0x54010, 0x2080}, 1360 + {0x54012, 0x110}, 1361 + {0x54019, 0x1bb4}, 1362 + {0x5401a, 0x32}, 1363 + {0x5401b, 0x1146}, 1364 + {0x5401c, 0x1108}, 1365 + {0x5401e, 0x4}, 1366 + {0x5401f, 0x1bb4}, 1367 + {0x54020, 0x32}, 1368 + {0x54021, 0x1146}, 1369 + {0x54022, 0x1108}, 1370 + {0x54024, 0x4}, 1371 + {0x54032, 0xb400}, 1372 + {0x54033, 0x321b}, 1373 + {0x54034, 0x4600}, 1374 + {0x54035, 0x811}, 1375 + {0x54036, 0x11}, 1376 + {0x54037, 0x400}, 1377 + {0x54038, 0xb400}, 1378 + {0x54039, 0x321b}, 1379 + {0x5403a, 0x4600}, 1380 + {0x5403b, 0x811}, 1381 + {0x5403c, 0x11}, 1382 + {0x5403d, 0x400}, 1383 + {0xd0000, 0x1} 1384 + }; 1385 + 1386 + /* DRAM PHY init engine image */ 1387 + static struct dram_cfg_param ddr_phy_pie[] = { 1388 + {0xd0000, 0x0}, 1389 + {0x90000, 0x10}, 1390 + {0x90001, 0x400}, 1391 + {0x90002, 0x10e}, 1392 + {0x90003, 0x0}, 1393 + {0x90004, 0x0}, 1394 + {0x90005, 0x8}, 1395 + {0x90029, 0xb}, 1396 + {0x9002a, 0x480}, 1397 + {0x9002b, 0x109}, 1398 + {0x9002c, 0x8}, 1399 + {0x9002d, 0x448}, 1400 + {0x9002e, 0x139}, 1401 + {0x9002f, 0x8}, 1402 + {0x90030, 0x478}, 1403 + {0x90031, 0x109}, 1404 + {0x90032, 0x0}, 1405 + {0x90033, 0xe8}, 1406 + {0x90034, 0x109}, 1407 + {0x90035, 0x2}, 1408 + {0x90036, 0x10}, 1409 + {0x90037, 0x139}, 1410 + {0x90038, 0xb}, 1411 + {0x90039, 0x7c0}, 1412 + {0x9003a, 0x139}, 1413 + {0x9003b, 0x44}, 1414 + {0x9003c, 0x633}, 1415 + {0x9003d, 0x159}, 1416 + {0x9003e, 0x14f}, 1417 + {0x9003f, 0x630}, 1418 + {0x90040, 0x159}, 1419 + {0x90041, 0x47}, 1420 + {0x90042, 0x633}, 1421 + {0x90043, 0x149}, 1422 + {0x90044, 0x4f}, 1423 + {0x90045, 0x633}, 1424 + {0x90046, 0x179}, 1425 + {0x90047, 0x8}, 1426 + {0x90048, 0xe0}, 1427 + {0x90049, 0x109}, 1428 + {0x9004a, 0x0}, 1429 + {0x9004b, 0x7c8}, 1430 + {0x9004c, 0x109}, 1431 + {0x9004d, 0x0}, 1432 + {0x9004e, 0x1}, 1433 + {0x9004f, 0x8}, 1434 + {0x90050, 0x30}, 1435 + {0x90051, 0x65a}, 1436 + {0x90052, 0x9}, 1437 + {0x90053, 0x0}, 1438 + {0x90054, 0x45a}, 1439 + {0x90055, 0x9}, 1440 + {0x90056, 0x0}, 1441 + {0x90057, 0x448}, 1442 + {0x90058, 0x109}, 1443 + {0x90059, 0x40}, 1444 + {0x9005a, 0x633}, 1445 + {0x9005b, 0x179}, 1446 + {0x9005c, 0x1}, 1447 + {0x9005d, 0x618}, 1448 + {0x9005e, 0x109}, 1449 + {0x9005f, 0x40c0}, 1450 + {0x90060, 0x633}, 1451 + {0x90061, 0x149}, 1452 + {0x90062, 0x8}, 1453 + {0x90063, 0x4}, 1454 + {0x90064, 0x48}, 1455 + {0x90065, 0x4040}, 1456 + {0x90066, 0x633}, 1457 + {0x90067, 0x149}, 1458 + {0x90068, 0x0}, 1459 + {0x90069, 0x4}, 1460 + {0x9006a, 0x48}, 1461 + {0x9006b, 0x40}, 1462 + {0x9006c, 0x633}, 1463 + {0x9006d, 0x149}, 1464 + {0x9006e, 0x0}, 1465 + {0x9006f, 0x658}, 1466 + {0x90070, 0x109}, 1467 + {0x90071, 0x10}, 1468 + {0x90072, 0x4}, 1469 + {0x90073, 0x18}, 1470 + {0x90074, 0x0}, 1471 + {0x90075, 0x4}, 1472 + {0x90076, 0x78}, 1473 + {0x90077, 0x549}, 1474 + {0x90078, 0x633}, 1475 + {0x90079, 0x159}, 1476 + {0x9007a, 0xd49}, 1477 + {0x9007b, 0x633}, 1478 + {0x9007c, 0x159}, 1479 + {0x9007d, 0x94a}, 1480 + {0x9007e, 0x633}, 1481 + {0x9007f, 0x159}, 1482 + {0x90080, 0x441}, 1483 + {0x90081, 0x633}, 1484 + {0x90082, 0x149}, 1485 + {0x90083, 0x42}, 1486 + {0x90084, 0x633}, 1487 + {0x90085, 0x149}, 1488 + {0x90086, 0x1}, 1489 + {0x90087, 0x633}, 1490 + {0x90088, 0x149}, 1491 + {0x90089, 0x0}, 1492 + {0x9008a, 0xe0}, 1493 + {0x9008b, 0x109}, 1494 + {0x9008c, 0xa}, 1495 + {0x9008d, 0x10}, 1496 + {0x9008e, 0x109}, 1497 + {0x9008f, 0x9}, 1498 + {0x90090, 0x3c0}, 1499 + {0x90091, 0x149}, 1500 + {0x90092, 0x9}, 1501 + {0x90093, 0x3c0}, 1502 + {0x90094, 0x159}, 1503 + {0x90095, 0x18}, 1504 + {0x90096, 0x10}, 1505 + {0x90097, 0x109}, 1506 + {0x90098, 0x0}, 1507 + {0x90099, 0x3c0}, 1508 + {0x9009a, 0x109}, 1509 + {0x9009b, 0x18}, 1510 + {0x9009c, 0x4}, 1511 + {0x9009d, 0x48}, 1512 + {0x9009e, 0x18}, 1513 + {0x9009f, 0x4}, 1514 + {0x900a0, 0x58}, 1515 + {0x900a1, 0xb}, 1516 + {0x900a2, 0x10}, 1517 + {0x900a3, 0x109}, 1518 + {0x900a4, 0x1}, 1519 + {0x900a5, 0x10}, 1520 + {0x900a6, 0x109}, 1521 + {0x900a7, 0x5}, 1522 + {0x900a8, 0x7c0}, 1523 + {0x900a9, 0x109}, 1524 + {0x40000, 0x811}, 1525 + {0x40020, 0x880}, 1526 + {0x40040, 0x0}, 1527 + {0x40060, 0x0}, 1528 + {0x40001, 0x4008}, 1529 + {0x40021, 0x83}, 1530 + {0x40041, 0x4f}, 1531 + {0x40061, 0x0}, 1532 + {0x40002, 0x4040}, 1533 + {0x40022, 0x83}, 1534 + {0x40042, 0x51}, 1535 + {0x40062, 0x0}, 1536 + {0x40003, 0x811}, 1537 + {0x40023, 0x880}, 1538 + {0x40043, 0x0}, 1539 + {0x40063, 0x0}, 1540 + {0x40004, 0x720}, 1541 + {0x40024, 0xf}, 1542 + {0x40044, 0x1740}, 1543 + {0x40064, 0x0}, 1544 + {0x40005, 0x16}, 1545 + {0x40025, 0x83}, 1546 + {0x40045, 0x4b}, 1547 + {0x40065, 0x0}, 1548 + {0x40006, 0x716}, 1549 + {0x40026, 0xf}, 1550 + {0x40046, 0x2001}, 1551 + {0x40066, 0x0}, 1552 + {0x40007, 0x716}, 1553 + {0x40027, 0xf}, 1554 + {0x40047, 0x2800}, 1555 + {0x40067, 0x0}, 1556 + {0x40008, 0x716}, 1557 + {0x40028, 0xf}, 1558 + {0x40048, 0xf00}, 1559 + {0x40068, 0x0}, 1560 + {0x40009, 0x720}, 1561 + {0x40029, 0xf}, 1562 + {0x40049, 0x1400}, 1563 + {0x40069, 0x0}, 1564 + {0x4000a, 0xe08}, 1565 + {0x4002a, 0xc15}, 1566 + {0x4004a, 0x0}, 1567 + {0x4006a, 0x0}, 1568 + {0x4000b, 0x625}, 1569 + {0x4002b, 0x15}, 1570 + {0x4004b, 0x0}, 1571 + {0x4006b, 0x0}, 1572 + {0x4000c, 0x4028}, 1573 + {0x4002c, 0x80}, 1574 + {0x4004c, 0x0}, 1575 + {0x4006c, 0x0}, 1576 + {0x4000d, 0xe08}, 1577 + {0x4002d, 0xc1a}, 1578 + {0x4004d, 0x0}, 1579 + {0x4006d, 0x0}, 1580 + {0x4000e, 0x625}, 1581 + {0x4002e, 0x1a}, 1582 + {0x4004e, 0x0}, 1583 + {0x4006e, 0x0}, 1584 + {0x4000f, 0x4040}, 1585 + {0x4002f, 0x80}, 1586 + {0x4004f, 0x0}, 1587 + {0x4006f, 0x0}, 1588 + {0x40010, 0x2604}, 1589 + {0x40030, 0x15}, 1590 + {0x40050, 0x0}, 1591 + {0x40070, 0x0}, 1592 + {0x40011, 0x708}, 1593 + {0x40031, 0x5}, 1594 + {0x40051, 0x0}, 1595 + {0x40071, 0x2002}, 1596 + {0x40012, 0x8}, 1597 + {0x40032, 0x80}, 1598 + {0x40052, 0x0}, 1599 + {0x40072, 0x0}, 1600 + {0x40013, 0x2604}, 1601 + {0x40033, 0x1a}, 1602 + {0x40053, 0x0}, 1603 + {0x40073, 0x0}, 1604 + {0x40014, 0x708}, 1605 + {0x40034, 0xa}, 1606 + {0x40054, 0x0}, 1607 + {0x40074, 0x2002}, 1608 + {0x40015, 0x4040}, 1609 + {0x40035, 0x80}, 1610 + {0x40055, 0x0}, 1611 + {0x40075, 0x0}, 1612 + {0x40016, 0x60a}, 1613 + {0x40036, 0x15}, 1614 + {0x40056, 0x1200}, 1615 + {0x40076, 0x0}, 1616 + {0x40017, 0x61a}, 1617 + {0x40037, 0x15}, 1618 + {0x40057, 0x1300}, 1619 + {0x40077, 0x0}, 1620 + {0x40018, 0x60a}, 1621 + {0x40038, 0x1a}, 1622 + {0x40058, 0x1200}, 1623 + {0x40078, 0x0}, 1624 + {0x40019, 0x642}, 1625 + {0x40039, 0x1a}, 1626 + {0x40059, 0x1300}, 1627 + {0x40079, 0x0}, 1628 + {0x4001a, 0x4808}, 1629 + {0x4003a, 0x880}, 1630 + {0x4005a, 0x0}, 1631 + {0x4007a, 0x0}, 1632 + {0x900aa, 0x0}, 1633 + {0x900ab, 0x790}, 1634 + {0x900ac, 0x11a}, 1635 + {0x900ad, 0x8}, 1636 + {0x900ae, 0x7aa}, 1637 + {0x900af, 0x2a}, 1638 + {0x900b0, 0x10}, 1639 + {0x900b1, 0x7b2}, 1640 + {0x900b2, 0x2a}, 1641 + {0x900b3, 0x0}, 1642 + {0x900b4, 0x7c8}, 1643 + {0x900b5, 0x109}, 1644 + {0x900b6, 0x10}, 1645 + {0x900b7, 0x10}, 1646 + {0x900b8, 0x109}, 1647 + {0x900b9, 0x10}, 1648 + {0x900ba, 0x2a8}, 1649 + {0x900bb, 0x129}, 1650 + {0x900bc, 0x8}, 1651 + {0x900bd, 0x370}, 1652 + {0x900be, 0x129}, 1653 + {0x900bf, 0xa}, 1654 + {0x900c0, 0x3c8}, 1655 + {0x900c1, 0x1a9}, 1656 + {0x900c2, 0xc}, 1657 + {0x900c3, 0x408}, 1658 + {0x900c4, 0x199}, 1659 + {0x900c5, 0x14}, 1660 + {0x900c6, 0x790}, 1661 + {0x900c7, 0x11a}, 1662 + {0x900c8, 0x8}, 1663 + {0x900c9, 0x4}, 1664 + {0x900ca, 0x18}, 1665 + {0x900cb, 0xe}, 1666 + {0x900cc, 0x408}, 1667 + {0x900cd, 0x199}, 1668 + {0x900ce, 0x8}, 1669 + {0x900cf, 0x8568}, 1670 + {0x900d0, 0x108}, 1671 + {0x900d1, 0x18}, 1672 + {0x900d2, 0x790}, 1673 + {0x900d3, 0x16a}, 1674 + {0x900d4, 0x8}, 1675 + {0x900d5, 0x1d8}, 1676 + {0x900d6, 0x169}, 1677 + {0x900d7, 0x10}, 1678 + {0x900d8, 0x8558}, 1679 + {0x900d9, 0x168}, 1680 + {0x900da, 0x1ff8}, 1681 + {0x900db, 0x85a8}, 1682 + {0x900dc, 0x1e8}, 1683 + {0x900dd, 0x50}, 1684 + {0x900de, 0x798}, 1685 + {0x900df, 0x16a}, 1686 + {0x900e0, 0x60}, 1687 + {0x900e1, 0x7a0}, 1688 + {0x900e2, 0x16a}, 1689 + {0x900e3, 0x8}, 1690 + {0x900e4, 0x8310}, 1691 + {0x900e5, 0x168}, 1692 + {0x900e6, 0x8}, 1693 + {0x900e7, 0xa310}, 1694 + {0x900e8, 0x168}, 1695 + {0x900e9, 0xa}, 1696 + {0x900ea, 0x408}, 1697 + {0x900eb, 0x169}, 1698 + {0x900ec, 0x6e}, 1699 + {0x900ed, 0x0}, 1700 + {0x900ee, 0x68}, 1701 + {0x900ef, 0x0}, 1702 + {0x900f0, 0x408}, 1703 + {0x900f1, 0x169}, 1704 + {0x900f2, 0x0}, 1705 + {0x900f3, 0x8310}, 1706 + {0x900f4, 0x168}, 1707 + {0x900f5, 0x0}, 1708 + {0x900f6, 0xa310}, 1709 + {0x900f7, 0x168}, 1710 + {0x900f8, 0x1ff8}, 1711 + {0x900f9, 0x85a8}, 1712 + {0x900fa, 0x1e8}, 1713 + {0x900fb, 0x68}, 1714 + {0x900fc, 0x798}, 1715 + {0x900fd, 0x16a}, 1716 + {0x900fe, 0x78}, 1717 + {0x900ff, 0x7a0}, 1718 + {0x90100, 0x16a}, 1719 + {0x90101, 0x68}, 1720 + {0x90102, 0x790}, 1721 + {0x90103, 0x16a}, 1722 + {0x90104, 0x8}, 1723 + {0x90105, 0x8b10}, 1724 + {0x90106, 0x168}, 1725 + {0x90107, 0x8}, 1726 + {0x90108, 0xab10}, 1727 + {0x90109, 0x168}, 1728 + {0x9010a, 0xa}, 1729 + {0x9010b, 0x408}, 1730 + {0x9010c, 0x169}, 1731 + {0x9010d, 0x58}, 1732 + {0x9010e, 0x0}, 1733 + {0x9010f, 0x68}, 1734 + {0x90110, 0x0}, 1735 + {0x90111, 0x408}, 1736 + {0x90112, 0x169}, 1737 + {0x90113, 0x0}, 1738 + {0x90114, 0x8b10}, 1739 + {0x90115, 0x168}, 1740 + {0x90116, 0x1}, 1741 + {0x90117, 0xab10}, 1742 + {0x90118, 0x168}, 1743 + {0x90119, 0x0}, 1744 + {0x9011a, 0x1d8}, 1745 + {0x9011b, 0x169}, 1746 + {0x9011c, 0x80}, 1747 + {0x9011d, 0x790}, 1748 + {0x9011e, 0x16a}, 1749 + {0x9011f, 0x18}, 1750 + {0x90120, 0x7aa}, 1751 + {0x90121, 0x6a}, 1752 + {0x90122, 0xa}, 1753 + {0x90123, 0x0}, 1754 + {0x90124, 0x1e9}, 1755 + {0x90125, 0x8}, 1756 + {0x90126, 0x8080}, 1757 + {0x90127, 0x108}, 1758 + {0x90128, 0xf}, 1759 + {0x90129, 0x408}, 1760 + {0x9012a, 0x169}, 1761 + {0x9012b, 0xc}, 1762 + {0x9012c, 0x0}, 1763 + {0x9012d, 0x68}, 1764 + {0x9012e, 0x9}, 1765 + {0x9012f, 0x0}, 1766 + {0x90130, 0x1a9}, 1767 + {0x90131, 0x0}, 1768 + {0x90132, 0x408}, 1769 + {0x90133, 0x169}, 1770 + {0x90134, 0x0}, 1771 + {0x90135, 0x8080}, 1772 + {0x90136, 0x108}, 1773 + {0x90137, 0x8}, 1774 + {0x90138, 0x7aa}, 1775 + {0x90139, 0x6a}, 1776 + {0x9013a, 0x0}, 1777 + {0x9013b, 0x8568}, 1778 + {0x9013c, 0x108}, 1779 + {0x9013d, 0xb7}, 1780 + {0x9013e, 0x790}, 1781 + {0x9013f, 0x16a}, 1782 + {0x90140, 0x1f}, 1783 + {0x90141, 0x0}, 1784 + {0x90142, 0x68}, 1785 + {0x90143, 0x8}, 1786 + {0x90144, 0x8558}, 1787 + {0x90145, 0x168}, 1788 + {0x90146, 0xf}, 1789 + {0x90147, 0x408}, 1790 + {0x90148, 0x169}, 1791 + {0x90149, 0xd}, 1792 + {0x9014a, 0x0}, 1793 + {0x9014b, 0x68}, 1794 + {0x9014c, 0x0}, 1795 + {0x9014d, 0x408}, 1796 + {0x9014e, 0x169}, 1797 + {0x9014f, 0x0}, 1798 + {0x90150, 0x8558}, 1799 + {0x90151, 0x168}, 1800 + {0x90152, 0x8}, 1801 + {0x90153, 0x3c8}, 1802 + {0x90154, 0x1a9}, 1803 + {0x90155, 0x3}, 1804 + {0x90156, 0x370}, 1805 + {0x90157, 0x129}, 1806 + {0x90158, 0x20}, 1807 + {0x90159, 0x2aa}, 1808 + {0x9015a, 0x9}, 1809 + {0x9015b, 0x8}, 1810 + {0x9015c, 0xe8}, 1811 + {0x9015d, 0x109}, 1812 + {0x9015e, 0x0}, 1813 + {0x9015f, 0x8140}, 1814 + {0x90160, 0x10c}, 1815 + {0x90161, 0x10}, 1816 + {0x90162, 0x8138}, 1817 + {0x90163, 0x104}, 1818 + {0x90164, 0x8}, 1819 + {0x90165, 0x448}, 1820 + {0x90166, 0x109}, 1821 + {0x90167, 0xf}, 1822 + {0x90168, 0x7c0}, 1823 + {0x90169, 0x109}, 1824 + {0x9016a, 0x0}, 1825 + {0x9016b, 0xe8}, 1826 + {0x9016c, 0x109}, 1827 + {0x9016d, 0x47}, 1828 + {0x9016e, 0x630}, 1829 + {0x9016f, 0x109}, 1830 + {0x90170, 0x8}, 1831 + {0x90171, 0x618}, 1832 + {0x90172, 0x109}, 1833 + {0x90173, 0x8}, 1834 + {0x90174, 0xe0}, 1835 + {0x90175, 0x109}, 1836 + {0x90176, 0x0}, 1837 + {0x90177, 0x7c8}, 1838 + {0x90178, 0x109}, 1839 + {0x90179, 0x8}, 1840 + {0x9017a, 0x8140}, 1841 + {0x9017b, 0x10c}, 1842 + {0x9017c, 0x0}, 1843 + {0x9017d, 0x478}, 1844 + {0x9017e, 0x109}, 1845 + {0x9017f, 0x0}, 1846 + {0x90180, 0x1}, 1847 + {0x90181, 0x8}, 1848 + {0x90182, 0x8}, 1849 + {0x90183, 0x4}, 1850 + {0x90184, 0x0}, 1851 + {0x90006, 0x8}, 1852 + {0x90007, 0x7c8}, 1853 + {0x90008, 0x109}, 1854 + {0x90009, 0x0}, 1855 + {0x9000a, 0x400}, 1856 + {0x9000b, 0x106}, 1857 + {0xd00e7, 0x400}, 1858 + {0x90017, 0x0}, 1859 + {0x9001f, 0x2b}, 1860 + {0x90026, 0x69}, 1861 + {0x400d0, 0x0}, 1862 + {0x400d1, 0x101}, 1863 + {0x400d2, 0x105}, 1864 + {0x400d3, 0x107}, 1865 + {0x400d4, 0x10f}, 1866 + {0x400d5, 0x202}, 1867 + {0x400d6, 0x20a}, 1868 + {0x400d7, 0x20b}, 1869 + {0x2003a, 0x2}, 1870 + {0x200be, 0x3}, 1871 + {0x2000b, 0x20d}, 1872 + {0x2000c, 0x74}, 1873 + {0x2000d, 0x48e}, 1874 + {0x2000e, 0x2c}, 1875 + {0x12000b, 0x107}, 1876 + {0x12000c, 0x3a}, 1877 + {0x12000d, 0x246}, 1878 + {0x12000e, 0x21}, 1879 + {0x22000b, 0xb0}, 1880 + {0x22000c, 0x27}, 1881 + {0x22000d, 0x186}, 1882 + {0x22000e, 0x10}, 1883 + {0x9000c, 0x0}, 1884 + {0x9000d, 0x173}, 1885 + {0x9000e, 0x60}, 1886 + {0x9000f, 0x6110}, 1887 + {0x90010, 0x2152}, 1888 + {0x90011, 0xdfbd}, 1889 + {0x90012, 0x2060}, 1890 + {0x90013, 0x6152}, 1891 + {0x20010, 0x5a}, 1892 + {0x20011, 0x3}, 1893 + {0x120010, 0x5a}, 1894 + {0x120011, 0x3}, 1895 + {0x40080, 0xe0}, 1896 + {0x40081, 0x12}, 1897 + {0x40082, 0xe0}, 1898 + {0x40083, 0x12}, 1899 + {0x40084, 0xe0}, 1900 + {0x40085, 0x12}, 1901 + {0x140080, 0xe0}, 1902 + {0x140081, 0x12}, 1903 + {0x140082, 0xe0}, 1904 + {0x140083, 0x12}, 1905 + {0x140084, 0xe0}, 1906 + {0x140085, 0x12}, 1907 + {0x240080, 0xe0}, 1908 + {0x240081, 0x12}, 1909 + {0x240082, 0xe0}, 1910 + {0x240083, 0x12}, 1911 + {0x240084, 0xe0}, 1912 + {0x240085, 0x12}, 1913 + {0x400fd, 0xf}, 1914 + {0x400f1, 0xe}, 1915 + {0x10011, 0x1}, 1916 + {0x10012, 0x1}, 1917 + {0x10013, 0x180}, 1918 + {0x10018, 0x1}, 1919 + {0x10002, 0x6209}, 1920 + {0x100b2, 0x1}, 1921 + {0x101b4, 0x1}, 1922 + {0x102b4, 0x1}, 1923 + {0x103b4, 0x1}, 1924 + {0x104b4, 0x1}, 1925 + {0x105b4, 0x1}, 1926 + {0x106b4, 0x1}, 1927 + {0x107b4, 0x1}, 1928 + {0x108b4, 0x1}, 1929 + {0x11011, 0x1}, 1930 + {0x11012, 0x1}, 1931 + {0x11013, 0x180}, 1932 + {0x11018, 0x1}, 1933 + {0x11002, 0x6209}, 1934 + {0x110b2, 0x1}, 1935 + {0x111b4, 0x1}, 1936 + {0x112b4, 0x1}, 1937 + {0x113b4, 0x1}, 1938 + {0x114b4, 0x1}, 1939 + {0x115b4, 0x1}, 1940 + {0x116b4, 0x1}, 1941 + {0x117b4, 0x1}, 1942 + {0x118b4, 0x1}, 1943 + {0x20089, 0x1}, 1944 + {0x20088, 0x19}, 1945 + {0xc0080, 0x0}, 1946 + {0xd0000, 0x1}, 1947 + }; 1948 + 1949 + static struct dram_fsp_msg ddr_dram_fsp_msg[] = { 1950 + { 1951 + /* P0 1866mts 1D */ 1952 + .drate = 1866, 1953 + .fw_type = FW_1D_IMAGE, 1954 + .fsp_cfg = ddr_fsp0_cfg, 1955 + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_cfg), 1956 + }, 1957 + { 1958 + /* P1 933mts 1D */ 1959 + .drate = 933, 1960 + .fw_type = FW_1D_IMAGE, 1961 + .fsp_cfg = ddr_fsp1_cfg, 1962 + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp1_cfg), 1963 + }, 1964 + { 1965 + /* P2 625mts 1D */ 1966 + .drate = 625, 1967 + .fw_type = FW_1D_IMAGE, 1968 + .fsp_cfg = ddr_fsp2_cfg, 1969 + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp2_cfg), 1970 + }, 1971 + { 1972 + /* P0 1866mts 2D */ 1973 + .drate = 1866, 1974 + .fw_type = FW_2D_IMAGE, 1975 + .fsp_cfg = ddr_fsp0_2d_cfg, 1976 + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_2d_cfg), 1977 + }, 1978 + }; 1979 + 1980 + /* ddr timing config params */ 1981 + struct dram_timing_info dram_timing_1866mts = { 1982 + .ddrc_cfg = ddr_ddrc_cfg, 1983 + .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg), 1984 + .ddrphy_cfg = ddr_ddrphy_cfg, 1985 + .ddrphy_cfg_num = ARRAY_SIZE(ddr_ddrphy_cfg), 1986 + .fsp_msg = ddr_dram_fsp_msg, 1987 + .fsp_msg_num = ARRAY_SIZE(ddr_dram_fsp_msg), 1988 + .ddrphy_trained_csr = ddr_ddrphy_trained_csr, 1989 + .ddrphy_trained_csr_num = ARRAY_SIZE(ddr_ddrphy_trained_csr), 1990 + .ddrphy_pie = ddr_phy_pie, 1991 + .ddrphy_pie_num = ARRAY_SIZE(ddr_phy_pie), 1992 + .fsp_table = { 1866, 933, 625, }, 1993 + .fsp_cfg = ddr_dram_fsp_cfg, 1994 + .fsp_cfg_num = ARRAY_SIZE(ddr_dram_fsp_cfg), 1995 + };
-1496
board/freescale/imx93_evk/lpddr4x_timing_ld.c
··· 1 - // SPDX-License-Identifier: GPL-2.0+ 2 - /* 3 - * Copyright 2022 NXP 4 - * 5 - * Generated code from IMX_DDR_tool 6 - * 7 - * Align with uboot version: 8 - * imx_v2019.04_5.4.x and above version 9 - */ 10 - 11 - #include <linux/kernel.h> 12 - #include <asm/arch/ddr.h> 13 - 14 - struct dram_cfg_param ddr_ddrc_cfg[] = { 15 - /** Initialize DDRC registers **/ 16 - { 0x4e300110, 0x44140001 }, 17 - { 0x4e301000, 0x0 }, 18 - { 0x4e300000, 0x8000ff }, 19 - { 0x4e300008, 0x0 }, 20 - { 0x4e300080, 0x80000512 }, 21 - { 0x4e300084, 0x0 }, 22 - { 0x4e300114, 0x2 }, 23 - { 0x4e300260, 0x0 }, 24 - { 0x4e30017c, 0x0 }, 25 - { 0x4e300f04, 0x80 }, 26 - { 0x4e300104, 0xaa77000e }, 27 - { 0x4e300108, 0x1816b1aa }, 28 - { 0x4e30010c, 0x5101e6 }, 29 - { 0x4e300100, 0x12552100 }, 30 - { 0x4e300160, 0x9002 }, 31 - { 0x4e30016c, 0x30900000 }, 32 - { 0x4e300250, 0x14 }, 33 - { 0x4e300254, 0xaa00aa }, 34 - { 0x4e300258, 0x8 }, 35 - { 0x4e30025c, 0x400 }, 36 - { 0x4e300300, 0x11281109 }, 37 - { 0x4e300304, 0xaa110a }, 38 - { 0x4e300308, 0x620071e }, 39 - { 0x4e300170, 0x8a0a0508 }, 40 - { 0x4e300124, 0xe3c0000 }, 41 - { 0x4e300804, 0x1f1f1f1f }, 42 - { 0x4e301240, 0x0 }, 43 - { 0x4e301244, 0x0 }, 44 - { 0x4e301248, 0x0 }, 45 - { 0x4e30124c, 0x0 }, 46 - { 0x4e301250, 0x0 }, 47 - { 0x4e301254, 0x0 }, 48 - { 0x4e301258, 0x0 }, 49 - { 0x4e30125c, 0x0 }, 50 - }; 51 - 52 - /* PHY Initialize Configuration */ 53 - struct dram_cfg_param ddr_ddrphy_cfg[] = { 54 - { 0x100a0, 0x4 }, 55 - { 0x100a1, 0x5 }, 56 - { 0x100a2, 0x6 }, 57 - { 0x100a3, 0x7 }, 58 - { 0x100a4, 0x0 }, 59 - { 0x100a5, 0x1 }, 60 - { 0x100a6, 0x2 }, 61 - { 0x100a7, 0x3 }, 62 - { 0x110a0, 0x3 }, 63 - { 0x110a1, 0x2 }, 64 - { 0x110a2, 0x0 }, 65 - { 0x110a3, 0x1 }, 66 - { 0x110a4, 0x7 }, 67 - { 0x110a5, 0x6 }, 68 - { 0x110a6, 0x4 }, 69 - { 0x110a7, 0x5 }, 70 - { 0x1005f, 0x5ff }, 71 - { 0x1015f, 0x5ff }, 72 - { 0x1105f, 0x5ff }, 73 - { 0x1115f, 0x5ff }, 74 - { 0x55, 0x1ff }, 75 - { 0x1055, 0x1ff }, 76 - { 0x2055, 0x1ff }, 77 - { 0x200c5, 0xb }, 78 - { 0x2002e, 0x2 }, 79 - { 0x90204, 0x0 }, 80 - { 0x20024, 0x1e3 }, 81 - { 0x2003a, 0x2 }, 82 - { 0x2007d, 0x212 }, 83 - { 0x2007c, 0x61 }, 84 - { 0x20056, 0x3 }, 85 - { 0x1004d, 0xe00 }, 86 - { 0x1014d, 0xe00 }, 87 - { 0x1104d, 0xe00 }, 88 - { 0x1114d, 0xe00 }, 89 - { 0x10049, 0xe00 }, 90 - { 0x10149, 0xe00 }, 91 - { 0x11049, 0xe00 }, 92 - { 0x11149, 0xe00 }, 93 - { 0x43, 0x60 }, 94 - { 0x1043, 0x60 }, 95 - { 0x2043, 0x60 }, 96 - { 0x20018, 0x1 }, 97 - { 0x20075, 0x4 }, 98 - { 0x20050, 0x0 }, 99 - { 0x2009b, 0x2 }, 100 - { 0x20008, 0x1d3 }, 101 - { 0x20088, 0x9 }, 102 - { 0x200b2, 0x10c }, 103 - { 0x10043, 0x5a1 }, 104 - { 0x10143, 0x5a1 }, 105 - { 0x11043, 0x5a1 }, 106 - { 0x11143, 0x5a1 }, 107 - { 0x200fa, 0x2 }, 108 - { 0x20019, 0x1 }, 109 - { 0x200f0, 0x0 }, 110 - { 0x200f1, 0x0 }, 111 - { 0x200f2, 0x4444 }, 112 - { 0x200f3, 0x8888 }, 113 - { 0x200f4, 0x5555 }, 114 - { 0x200f5, 0x0 }, 115 - { 0x200f6, 0x0 }, 116 - { 0x200f7, 0xf000 }, 117 - { 0x1004a, 0x500 }, 118 - { 0x1104a, 0x500 }, 119 - { 0x20025, 0x0 }, 120 - { 0x2002d, 0x0 }, 121 - { 0x20021, 0x0 }, 122 - { 0x2002c, 0x0 }, 123 - }; 124 - 125 - /* ddr phy trained csr */ 126 - struct dram_cfg_param ddr_ddrphy_trained_csr[] = { 127 - { 0x200b2, 0x0 }, 128 - { 0x1200b2, 0x0 }, 129 - { 0x2200b2, 0x0 }, 130 - { 0x200cb, 0x0 }, 131 - { 0x10043, 0x0 }, 132 - { 0x110043, 0x0 }, 133 - { 0x210043, 0x0 }, 134 - { 0x10143, 0x0 }, 135 - { 0x110143, 0x0 }, 136 - { 0x210143, 0x0 }, 137 - { 0x11043, 0x0 }, 138 - { 0x111043, 0x0 }, 139 - { 0x211043, 0x0 }, 140 - { 0x11143, 0x0 }, 141 - { 0x111143, 0x0 }, 142 - { 0x211143, 0x0 }, 143 - { 0x12043, 0x0 }, 144 - { 0x112043, 0x0 }, 145 - { 0x212043, 0x0 }, 146 - { 0x12143, 0x0 }, 147 - { 0x112143, 0x0 }, 148 - { 0x212143, 0x0 }, 149 - { 0x13043, 0x0 }, 150 - { 0x113043, 0x0 }, 151 - { 0x213043, 0x0 }, 152 - { 0x13143, 0x0 }, 153 - { 0x113143, 0x0 }, 154 - { 0x213143, 0x0 }, 155 - { 0x80, 0x0 }, 156 - { 0x100080, 0x0 }, 157 - { 0x200080, 0x0 }, 158 - { 0x1080, 0x0 }, 159 - { 0x101080, 0x0 }, 160 - { 0x201080, 0x0 }, 161 - { 0x2080, 0x0 }, 162 - { 0x102080, 0x0 }, 163 - { 0x202080, 0x0 }, 164 - { 0x3080, 0x0 }, 165 - { 0x103080, 0x0 }, 166 - { 0x203080, 0x0 }, 167 - { 0x4080, 0x0 }, 168 - { 0x104080, 0x0 }, 169 - { 0x204080, 0x0 }, 170 - { 0x5080, 0x0 }, 171 - { 0x105080, 0x0 }, 172 - { 0x205080, 0x0 }, 173 - { 0x6080, 0x0 }, 174 - { 0x106080, 0x0 }, 175 - { 0x206080, 0x0 }, 176 - { 0x7080, 0x0 }, 177 - { 0x107080, 0x0 }, 178 - { 0x207080, 0x0 }, 179 - { 0x8080, 0x0 }, 180 - { 0x108080, 0x0 }, 181 - { 0x208080, 0x0 }, 182 - { 0x9080, 0x0 }, 183 - { 0x109080, 0x0 }, 184 - { 0x209080, 0x0 }, 185 - { 0x10080, 0x0 }, 186 - { 0x110080, 0x0 }, 187 - { 0x210080, 0x0 }, 188 - { 0x10180, 0x0 }, 189 - { 0x110180, 0x0 }, 190 - { 0x210180, 0x0 }, 191 - { 0x11080, 0x0 }, 192 - { 0x111080, 0x0 }, 193 - { 0x211080, 0x0 }, 194 - { 0x11180, 0x0 }, 195 - { 0x111180, 0x0 }, 196 - { 0x211180, 0x0 }, 197 - { 0x12080, 0x0 }, 198 - { 0x112080, 0x0 }, 199 - { 0x212080, 0x0 }, 200 - { 0x12180, 0x0 }, 201 - { 0x112180, 0x0 }, 202 - { 0x212180, 0x0 }, 203 - { 0x13080, 0x0 }, 204 - { 0x113080, 0x0 }, 205 - { 0x213080, 0x0 }, 206 - { 0x13180, 0x0 }, 207 - { 0x113180, 0x0 }, 208 - { 0x213180, 0x0 }, 209 - { 0x10081, 0x0 }, 210 - { 0x110081, 0x0 }, 211 - { 0x210081, 0x0 }, 212 - { 0x10181, 0x0 }, 213 - { 0x110181, 0x0 }, 214 - { 0x210181, 0x0 }, 215 - { 0x11081, 0x0 }, 216 - { 0x111081, 0x0 }, 217 - { 0x211081, 0x0 }, 218 - { 0x11181, 0x0 }, 219 - { 0x111181, 0x0 }, 220 - { 0x211181, 0x0 }, 221 - { 0x12081, 0x0 }, 222 - { 0x112081, 0x0 }, 223 - { 0x212081, 0x0 }, 224 - { 0x12181, 0x0 }, 225 - { 0x112181, 0x0 }, 226 - { 0x212181, 0x0 }, 227 - { 0x13081, 0x0 }, 228 - { 0x113081, 0x0 }, 229 - { 0x213081, 0x0 }, 230 - { 0x13181, 0x0 }, 231 - { 0x113181, 0x0 }, 232 - { 0x213181, 0x0 }, 233 - { 0x100d0, 0x0 }, 234 - { 0x1100d0, 0x0 }, 235 - { 0x2100d0, 0x0 }, 236 - { 0x101d0, 0x0 }, 237 - { 0x1101d0, 0x0 }, 238 - { 0x2101d0, 0x0 }, 239 - { 0x110d0, 0x0 }, 240 - { 0x1110d0, 0x0 }, 241 - { 0x2110d0, 0x0 }, 242 - { 0x111d0, 0x0 }, 243 - { 0x1111d0, 0x0 }, 244 - { 0x2111d0, 0x0 }, 245 - { 0x120d0, 0x0 }, 246 - { 0x1120d0, 0x0 }, 247 - { 0x2120d0, 0x0 }, 248 - { 0x121d0, 0x0 }, 249 - { 0x1121d0, 0x0 }, 250 - { 0x2121d0, 0x0 }, 251 - { 0x130d0, 0x0 }, 252 - { 0x1130d0, 0x0 }, 253 - { 0x2130d0, 0x0 }, 254 - { 0x131d0, 0x0 }, 255 - { 0x1131d0, 0x0 }, 256 - { 0x2131d0, 0x0 }, 257 - { 0x100d1, 0x0 }, 258 - { 0x1100d1, 0x0 }, 259 - { 0x2100d1, 0x0 }, 260 - { 0x101d1, 0x0 }, 261 - { 0x1101d1, 0x0 }, 262 - { 0x2101d1, 0x0 }, 263 - { 0x110d1, 0x0 }, 264 - { 0x1110d1, 0x0 }, 265 - { 0x2110d1, 0x0 }, 266 - { 0x111d1, 0x0 }, 267 - { 0x1111d1, 0x0 }, 268 - { 0x2111d1, 0x0 }, 269 - { 0x120d1, 0x0 }, 270 - { 0x1120d1, 0x0 }, 271 - { 0x2120d1, 0x0 }, 272 - { 0x121d1, 0x0 }, 273 - { 0x1121d1, 0x0 }, 274 - { 0x2121d1, 0x0 }, 275 - { 0x130d1, 0x0 }, 276 - { 0x1130d1, 0x0 }, 277 - { 0x2130d1, 0x0 }, 278 - { 0x131d1, 0x0 }, 279 - { 0x1131d1, 0x0 }, 280 - { 0x2131d1, 0x0 }, 281 - { 0x10068, 0x0 }, 282 - { 0x10168, 0x0 }, 283 - { 0x10268, 0x0 }, 284 - { 0x10368, 0x0 }, 285 - { 0x10468, 0x0 }, 286 - { 0x10568, 0x0 }, 287 - { 0x10668, 0x0 }, 288 - { 0x10768, 0x0 }, 289 - { 0x10868, 0x0 }, 290 - { 0x11068, 0x0 }, 291 - { 0x11168, 0x0 }, 292 - { 0x11268, 0x0 }, 293 - { 0x11368, 0x0 }, 294 - { 0x11468, 0x0 }, 295 - { 0x11568, 0x0 }, 296 - { 0x11668, 0x0 }, 297 - { 0x11768, 0x0 }, 298 - { 0x11868, 0x0 }, 299 - { 0x12068, 0x0 }, 300 - { 0x12168, 0x0 }, 301 - { 0x12268, 0x0 }, 302 - { 0x12368, 0x0 }, 303 - { 0x12468, 0x0 }, 304 - { 0x12568, 0x0 }, 305 - { 0x12668, 0x0 }, 306 - { 0x12768, 0x0 }, 307 - { 0x12868, 0x0 }, 308 - { 0x13068, 0x0 }, 309 - { 0x13168, 0x0 }, 310 - { 0x13268, 0x0 }, 311 - { 0x13368, 0x0 }, 312 - { 0x13468, 0x0 }, 313 - { 0x13568, 0x0 }, 314 - { 0x13668, 0x0 }, 315 - { 0x13768, 0x0 }, 316 - { 0x13868, 0x0 }, 317 - { 0x10069, 0x0 }, 318 - { 0x10169, 0x0 }, 319 - { 0x10269, 0x0 }, 320 - { 0x10369, 0x0 }, 321 - { 0x10469, 0x0 }, 322 - { 0x10569, 0x0 }, 323 - { 0x10669, 0x0 }, 324 - { 0x10769, 0x0 }, 325 - { 0x10869, 0x0 }, 326 - { 0x11069, 0x0 }, 327 - { 0x11169, 0x0 }, 328 - { 0x11269, 0x0 }, 329 - { 0x11369, 0x0 }, 330 - { 0x11469, 0x0 }, 331 - { 0x11569, 0x0 }, 332 - { 0x11669, 0x0 }, 333 - { 0x11769, 0x0 }, 334 - { 0x11869, 0x0 }, 335 - { 0x12069, 0x0 }, 336 - { 0x12169, 0x0 }, 337 - { 0x12269, 0x0 }, 338 - { 0x12369, 0x0 }, 339 - { 0x12469, 0x0 }, 340 - { 0x12569, 0x0 }, 341 - { 0x12669, 0x0 }, 342 - { 0x12769, 0x0 }, 343 - { 0x12869, 0x0 }, 344 - { 0x13069, 0x0 }, 345 - { 0x13169, 0x0 }, 346 - { 0x13269, 0x0 }, 347 - { 0x13369, 0x0 }, 348 - { 0x13469, 0x0 }, 349 - { 0x13569, 0x0 }, 350 - { 0x13669, 0x0 }, 351 - { 0x13769, 0x0 }, 352 - { 0x13869, 0x0 }, 353 - { 0x1008c, 0x0 }, 354 - { 0x11008c, 0x0 }, 355 - { 0x21008c, 0x0 }, 356 - { 0x1018c, 0x0 }, 357 - { 0x11018c, 0x0 }, 358 - { 0x21018c, 0x0 }, 359 - { 0x1108c, 0x0 }, 360 - { 0x11108c, 0x0 }, 361 - { 0x21108c, 0x0 }, 362 - { 0x1118c, 0x0 }, 363 - { 0x11118c, 0x0 }, 364 - { 0x21118c, 0x0 }, 365 - { 0x1208c, 0x0 }, 366 - { 0x11208c, 0x0 }, 367 - { 0x21208c, 0x0 }, 368 - { 0x1218c, 0x0 }, 369 - { 0x11218c, 0x0 }, 370 - { 0x21218c, 0x0 }, 371 - { 0x1308c, 0x0 }, 372 - { 0x11308c, 0x0 }, 373 - { 0x21308c, 0x0 }, 374 - { 0x1318c, 0x0 }, 375 - { 0x11318c, 0x0 }, 376 - { 0x21318c, 0x0 }, 377 - { 0x1008d, 0x0 }, 378 - { 0x11008d, 0x0 }, 379 - { 0x21008d, 0x0 }, 380 - { 0x1018d, 0x0 }, 381 - { 0x11018d, 0x0 }, 382 - { 0x21018d, 0x0 }, 383 - { 0x1108d, 0x0 }, 384 - { 0x11108d, 0x0 }, 385 - { 0x21108d, 0x0 }, 386 - { 0x1118d, 0x0 }, 387 - { 0x11118d, 0x0 }, 388 - { 0x21118d, 0x0 }, 389 - { 0x1208d, 0x0 }, 390 - { 0x11208d, 0x0 }, 391 - { 0x21208d, 0x0 }, 392 - { 0x1218d, 0x0 }, 393 - { 0x11218d, 0x0 }, 394 - { 0x21218d, 0x0 }, 395 - { 0x1308d, 0x0 }, 396 - { 0x11308d, 0x0 }, 397 - { 0x21308d, 0x0 }, 398 - { 0x1318d, 0x0 }, 399 - { 0x11318d, 0x0 }, 400 - { 0x21318d, 0x0 }, 401 - { 0x100c0, 0x0 }, 402 - { 0x1100c0, 0x0 }, 403 - { 0x2100c0, 0x0 }, 404 - { 0x101c0, 0x0 }, 405 - { 0x1101c0, 0x0 }, 406 - { 0x2101c0, 0x0 }, 407 - { 0x102c0, 0x0 }, 408 - { 0x1102c0, 0x0 }, 409 - { 0x2102c0, 0x0 }, 410 - { 0x103c0, 0x0 }, 411 - { 0x1103c0, 0x0 }, 412 - { 0x2103c0, 0x0 }, 413 - { 0x104c0, 0x0 }, 414 - { 0x1104c0, 0x0 }, 415 - { 0x2104c0, 0x0 }, 416 - { 0x105c0, 0x0 }, 417 - { 0x1105c0, 0x0 }, 418 - { 0x2105c0, 0x0 }, 419 - { 0x106c0, 0x0 }, 420 - { 0x1106c0, 0x0 }, 421 - { 0x2106c0, 0x0 }, 422 - { 0x107c0, 0x0 }, 423 - { 0x1107c0, 0x0 }, 424 - { 0x2107c0, 0x0 }, 425 - { 0x108c0, 0x0 }, 426 - { 0x1108c0, 0x0 }, 427 - { 0x2108c0, 0x0 }, 428 - { 0x110c0, 0x0 }, 429 - { 0x1110c0, 0x0 }, 430 - { 0x2110c0, 0x0 }, 431 - { 0x111c0, 0x0 }, 432 - { 0x1111c0, 0x0 }, 433 - { 0x2111c0, 0x0 }, 434 - { 0x112c0, 0x0 }, 435 - { 0x1112c0, 0x0 }, 436 - { 0x2112c0, 0x0 }, 437 - { 0x113c0, 0x0 }, 438 - { 0x1113c0, 0x0 }, 439 - { 0x2113c0, 0x0 }, 440 - { 0x114c0, 0x0 }, 441 - { 0x1114c0, 0x0 }, 442 - { 0x2114c0, 0x0 }, 443 - { 0x115c0, 0x0 }, 444 - { 0x1115c0, 0x0 }, 445 - { 0x2115c0, 0x0 }, 446 - { 0x116c0, 0x0 }, 447 - { 0x1116c0, 0x0 }, 448 - { 0x2116c0, 0x0 }, 449 - { 0x117c0, 0x0 }, 450 - { 0x1117c0, 0x0 }, 451 - { 0x2117c0, 0x0 }, 452 - { 0x118c0, 0x0 }, 453 - { 0x1118c0, 0x0 }, 454 - { 0x2118c0, 0x0 }, 455 - { 0x120c0, 0x0 }, 456 - { 0x1120c0, 0x0 }, 457 - { 0x2120c0, 0x0 }, 458 - { 0x121c0, 0x0 }, 459 - { 0x1121c0, 0x0 }, 460 - { 0x2121c0, 0x0 }, 461 - { 0x122c0, 0x0 }, 462 - { 0x1122c0, 0x0 }, 463 - { 0x2122c0, 0x0 }, 464 - { 0x123c0, 0x0 }, 465 - { 0x1123c0, 0x0 }, 466 - { 0x2123c0, 0x0 }, 467 - { 0x124c0, 0x0 }, 468 - { 0x1124c0, 0x0 }, 469 - { 0x2124c0, 0x0 }, 470 - { 0x125c0, 0x0 }, 471 - { 0x1125c0, 0x0 }, 472 - { 0x2125c0, 0x0 }, 473 - { 0x126c0, 0x0 }, 474 - { 0x1126c0, 0x0 }, 475 - { 0x2126c0, 0x0 }, 476 - { 0x127c0, 0x0 }, 477 - { 0x1127c0, 0x0 }, 478 - { 0x2127c0, 0x0 }, 479 - { 0x128c0, 0x0 }, 480 - { 0x1128c0, 0x0 }, 481 - { 0x2128c0, 0x0 }, 482 - { 0x130c0, 0x0 }, 483 - { 0x1130c0, 0x0 }, 484 - { 0x2130c0, 0x0 }, 485 - { 0x131c0, 0x0 }, 486 - { 0x1131c0, 0x0 }, 487 - { 0x2131c0, 0x0 }, 488 - { 0x132c0, 0x0 }, 489 - { 0x1132c0, 0x0 }, 490 - { 0x2132c0, 0x0 }, 491 - { 0x133c0, 0x0 }, 492 - { 0x1133c0, 0x0 }, 493 - { 0x2133c0, 0x0 }, 494 - { 0x134c0, 0x0 }, 495 - { 0x1134c0, 0x0 }, 496 - { 0x2134c0, 0x0 }, 497 - { 0x135c0, 0x0 }, 498 - { 0x1135c0, 0x0 }, 499 - { 0x2135c0, 0x0 }, 500 - { 0x136c0, 0x0 }, 501 - { 0x1136c0, 0x0 }, 502 - { 0x2136c0, 0x0 }, 503 - { 0x137c0, 0x0 }, 504 - { 0x1137c0, 0x0 }, 505 - { 0x2137c0, 0x0 }, 506 - { 0x138c0, 0x0 }, 507 - { 0x1138c0, 0x0 }, 508 - { 0x2138c0, 0x0 }, 509 - { 0x100c1, 0x0 }, 510 - { 0x1100c1, 0x0 }, 511 - { 0x2100c1, 0x0 }, 512 - { 0x101c1, 0x0 }, 513 - { 0x1101c1, 0x0 }, 514 - { 0x2101c1, 0x0 }, 515 - { 0x102c1, 0x0 }, 516 - { 0x1102c1, 0x0 }, 517 - { 0x2102c1, 0x0 }, 518 - { 0x103c1, 0x0 }, 519 - { 0x1103c1, 0x0 }, 520 - { 0x2103c1, 0x0 }, 521 - { 0x104c1, 0x0 }, 522 - { 0x1104c1, 0x0 }, 523 - { 0x2104c1, 0x0 }, 524 - { 0x105c1, 0x0 }, 525 - { 0x1105c1, 0x0 }, 526 - { 0x2105c1, 0x0 }, 527 - { 0x106c1, 0x0 }, 528 - { 0x1106c1, 0x0 }, 529 - { 0x2106c1, 0x0 }, 530 - { 0x107c1, 0x0 }, 531 - { 0x1107c1, 0x0 }, 532 - { 0x2107c1, 0x0 }, 533 - { 0x108c1, 0x0 }, 534 - { 0x1108c1, 0x0 }, 535 - { 0x2108c1, 0x0 }, 536 - { 0x110c1, 0x0 }, 537 - { 0x1110c1, 0x0 }, 538 - { 0x2110c1, 0x0 }, 539 - { 0x111c1, 0x0 }, 540 - { 0x1111c1, 0x0 }, 541 - { 0x2111c1, 0x0 }, 542 - { 0x112c1, 0x0 }, 543 - { 0x1112c1, 0x0 }, 544 - { 0x2112c1, 0x0 }, 545 - { 0x113c1, 0x0 }, 546 - { 0x1113c1, 0x0 }, 547 - { 0x2113c1, 0x0 }, 548 - { 0x114c1, 0x0 }, 549 - { 0x1114c1, 0x0 }, 550 - { 0x2114c1, 0x0 }, 551 - { 0x115c1, 0x0 }, 552 - { 0x1115c1, 0x0 }, 553 - { 0x2115c1, 0x0 }, 554 - { 0x116c1, 0x0 }, 555 - { 0x1116c1, 0x0 }, 556 - { 0x2116c1, 0x0 }, 557 - { 0x117c1, 0x0 }, 558 - { 0x1117c1, 0x0 }, 559 - { 0x2117c1, 0x0 }, 560 - { 0x118c1, 0x0 }, 561 - { 0x1118c1, 0x0 }, 562 - { 0x2118c1, 0x0 }, 563 - { 0x120c1, 0x0 }, 564 - { 0x1120c1, 0x0 }, 565 - { 0x2120c1, 0x0 }, 566 - { 0x121c1, 0x0 }, 567 - { 0x1121c1, 0x0 }, 568 - { 0x2121c1, 0x0 }, 569 - { 0x122c1, 0x0 }, 570 - { 0x1122c1, 0x0 }, 571 - { 0x2122c1, 0x0 }, 572 - { 0x123c1, 0x0 }, 573 - { 0x1123c1, 0x0 }, 574 - { 0x2123c1, 0x0 }, 575 - { 0x124c1, 0x0 }, 576 - { 0x1124c1, 0x0 }, 577 - { 0x2124c1, 0x0 }, 578 - { 0x125c1, 0x0 }, 579 - { 0x1125c1, 0x0 }, 580 - { 0x2125c1, 0x0 }, 581 - { 0x126c1, 0x0 }, 582 - { 0x1126c1, 0x0 }, 583 - { 0x2126c1, 0x0 }, 584 - { 0x127c1, 0x0 }, 585 - { 0x1127c1, 0x0 }, 586 - { 0x2127c1, 0x0 }, 587 - { 0x128c1, 0x0 }, 588 - { 0x1128c1, 0x0 }, 589 - { 0x2128c1, 0x0 }, 590 - { 0x130c1, 0x0 }, 591 - { 0x1130c1, 0x0 }, 592 - { 0x2130c1, 0x0 }, 593 - { 0x131c1, 0x0 }, 594 - { 0x1131c1, 0x0 }, 595 - { 0x2131c1, 0x0 }, 596 - { 0x132c1, 0x0 }, 597 - { 0x1132c1, 0x0 }, 598 - { 0x2132c1, 0x0 }, 599 - { 0x133c1, 0x0 }, 600 - { 0x1133c1, 0x0 }, 601 - { 0x2133c1, 0x0 }, 602 - { 0x134c1, 0x0 }, 603 - { 0x1134c1, 0x0 }, 604 - { 0x2134c1, 0x0 }, 605 - { 0x135c1, 0x0 }, 606 - { 0x1135c1, 0x0 }, 607 - { 0x2135c1, 0x0 }, 608 - { 0x136c1, 0x0 }, 609 - { 0x1136c1, 0x0 }, 610 - { 0x2136c1, 0x0 }, 611 - { 0x137c1, 0x0 }, 612 - { 0x1137c1, 0x0 }, 613 - { 0x2137c1, 0x0 }, 614 - { 0x138c1, 0x0 }, 615 - { 0x1138c1, 0x0 }, 616 - { 0x2138c1, 0x0 }, 617 - { 0x10020, 0x0 }, 618 - { 0x110020, 0x0 }, 619 - { 0x210020, 0x0 }, 620 - { 0x11020, 0x0 }, 621 - { 0x111020, 0x0 }, 622 - { 0x211020, 0x0 }, 623 - { 0x12020, 0x0 }, 624 - { 0x112020, 0x0 }, 625 - { 0x212020, 0x0 }, 626 - { 0x13020, 0x0 }, 627 - { 0x113020, 0x0 }, 628 - { 0x213020, 0x0 }, 629 - { 0x20072, 0x0 }, 630 - { 0x20073, 0x0 }, 631 - { 0x20074, 0x0 }, 632 - { 0x100aa, 0x0 }, 633 - { 0x110aa, 0x0 }, 634 - { 0x120aa, 0x0 }, 635 - { 0x130aa, 0x0 }, 636 - { 0x20010, 0x0 }, 637 - { 0x120010, 0x0 }, 638 - { 0x220010, 0x0 }, 639 - { 0x20011, 0x0 }, 640 - { 0x120011, 0x0 }, 641 - { 0x220011, 0x0 }, 642 - { 0x100ae, 0x0 }, 643 - { 0x1100ae, 0x0 }, 644 - { 0x2100ae, 0x0 }, 645 - { 0x100af, 0x0 }, 646 - { 0x1100af, 0x0 }, 647 - { 0x2100af, 0x0 }, 648 - { 0x110ae, 0x0 }, 649 - { 0x1110ae, 0x0 }, 650 - { 0x2110ae, 0x0 }, 651 - { 0x110af, 0x0 }, 652 - { 0x1110af, 0x0 }, 653 - { 0x2110af, 0x0 }, 654 - { 0x120ae, 0x0 }, 655 - { 0x1120ae, 0x0 }, 656 - { 0x2120ae, 0x0 }, 657 - { 0x120af, 0x0 }, 658 - { 0x1120af, 0x0 }, 659 - { 0x2120af, 0x0 }, 660 - { 0x130ae, 0x0 }, 661 - { 0x1130ae, 0x0 }, 662 - { 0x2130ae, 0x0 }, 663 - { 0x130af, 0x0 }, 664 - { 0x1130af, 0x0 }, 665 - { 0x2130af, 0x0 }, 666 - { 0x20020, 0x0 }, 667 - { 0x120020, 0x0 }, 668 - { 0x220020, 0x0 }, 669 - { 0x100a0, 0x0 }, 670 - { 0x100a1, 0x0 }, 671 - { 0x100a2, 0x0 }, 672 - { 0x100a3, 0x0 }, 673 - { 0x100a4, 0x0 }, 674 - { 0x100a5, 0x0 }, 675 - { 0x100a6, 0x0 }, 676 - { 0x100a7, 0x0 }, 677 - { 0x110a0, 0x0 }, 678 - { 0x110a1, 0x0 }, 679 - { 0x110a2, 0x0 }, 680 - { 0x110a3, 0x0 }, 681 - { 0x110a4, 0x0 }, 682 - { 0x110a5, 0x0 }, 683 - { 0x110a6, 0x0 }, 684 - { 0x110a7, 0x0 }, 685 - { 0x120a0, 0x0 }, 686 - { 0x120a1, 0x0 }, 687 - { 0x120a2, 0x0 }, 688 - { 0x120a3, 0x0 }, 689 - { 0x120a4, 0x0 }, 690 - { 0x120a5, 0x0 }, 691 - { 0x120a6, 0x0 }, 692 - { 0x120a7, 0x0 }, 693 - { 0x130a0, 0x0 }, 694 - { 0x130a1, 0x0 }, 695 - { 0x130a2, 0x0 }, 696 - { 0x130a3, 0x0 }, 697 - { 0x130a4, 0x0 }, 698 - { 0x130a5, 0x0 }, 699 - { 0x130a6, 0x0 }, 700 - { 0x130a7, 0x0 }, 701 - { 0x2007c, 0x0 }, 702 - { 0x12007c, 0x0 }, 703 - { 0x22007c, 0x0 }, 704 - { 0x2007d, 0x0 }, 705 - { 0x12007d, 0x0 }, 706 - { 0x22007d, 0x0 }, 707 - { 0x400fd, 0x0 }, 708 - { 0x400c0, 0x0 }, 709 - { 0x90201, 0x0 }, 710 - { 0x190201, 0x0 }, 711 - { 0x290201, 0x0 }, 712 - { 0x90202, 0x0 }, 713 - { 0x190202, 0x0 }, 714 - { 0x290202, 0x0 }, 715 - { 0x90203, 0x0 }, 716 - { 0x190203, 0x0 }, 717 - { 0x290203, 0x0 }, 718 - { 0x90204, 0x0 }, 719 - { 0x190204, 0x0 }, 720 - { 0x290204, 0x0 }, 721 - { 0x90205, 0x0 }, 722 - { 0x190205, 0x0 }, 723 - { 0x290205, 0x0 }, 724 - { 0x90206, 0x0 }, 725 - { 0x190206, 0x0 }, 726 - { 0x290206, 0x0 }, 727 - { 0x90207, 0x0 }, 728 - { 0x190207, 0x0 }, 729 - { 0x290207, 0x0 }, 730 - { 0x90208, 0x0 }, 731 - { 0x190208, 0x0 }, 732 - { 0x290208, 0x0 }, 733 - { 0x10062, 0x0 }, 734 - { 0x10162, 0x0 }, 735 - { 0x10262, 0x0 }, 736 - { 0x10362, 0x0 }, 737 - { 0x10462, 0x0 }, 738 - { 0x10562, 0x0 }, 739 - { 0x10662, 0x0 }, 740 - { 0x10762, 0x0 }, 741 - { 0x10862, 0x0 }, 742 - { 0x11062, 0x0 }, 743 - { 0x11162, 0x0 }, 744 - { 0x11262, 0x0 }, 745 - { 0x11362, 0x0 }, 746 - { 0x11462, 0x0 }, 747 - { 0x11562, 0x0 }, 748 - { 0x11662, 0x0 }, 749 - { 0x11762, 0x0 }, 750 - { 0x11862, 0x0 }, 751 - { 0x12062, 0x0 }, 752 - { 0x12162, 0x0 }, 753 - { 0x12262, 0x0 }, 754 - { 0x12362, 0x0 }, 755 - { 0x12462, 0x0 }, 756 - { 0x12562, 0x0 }, 757 - { 0x12662, 0x0 }, 758 - { 0x12762, 0x0 }, 759 - { 0x12862, 0x0 }, 760 - { 0x13062, 0x0 }, 761 - { 0x13162, 0x0 }, 762 - { 0x13262, 0x0 }, 763 - { 0x13362, 0x0 }, 764 - { 0x13462, 0x0 }, 765 - { 0x13562, 0x0 }, 766 - { 0x13662, 0x0 }, 767 - { 0x13762, 0x0 }, 768 - { 0x13862, 0x0 }, 769 - { 0x20077, 0x0 }, 770 - { 0x10001, 0x0 }, 771 - { 0x11001, 0x0 }, 772 - { 0x12001, 0x0 }, 773 - { 0x13001, 0x0 }, 774 - { 0x10040, 0x0 }, 775 - { 0x10140, 0x0 }, 776 - { 0x10240, 0x0 }, 777 - { 0x10340, 0x0 }, 778 - { 0x10440, 0x0 }, 779 - { 0x10540, 0x0 }, 780 - { 0x10640, 0x0 }, 781 - { 0x10740, 0x0 }, 782 - { 0x10840, 0x0 }, 783 - { 0x10030, 0x0 }, 784 - { 0x10130, 0x0 }, 785 - { 0x10230, 0x0 }, 786 - { 0x10330, 0x0 }, 787 - { 0x10430, 0x0 }, 788 - { 0x10530, 0x0 }, 789 - { 0x10630, 0x0 }, 790 - { 0x10730, 0x0 }, 791 - { 0x10830, 0x0 }, 792 - { 0x11040, 0x0 }, 793 - { 0x11140, 0x0 }, 794 - { 0x11240, 0x0 }, 795 - { 0x11340, 0x0 }, 796 - { 0x11440, 0x0 }, 797 - { 0x11540, 0x0 }, 798 - { 0x11640, 0x0 }, 799 - { 0x11740, 0x0 }, 800 - { 0x11840, 0x0 }, 801 - { 0x11030, 0x0 }, 802 - { 0x11130, 0x0 }, 803 - { 0x11230, 0x0 }, 804 - { 0x11330, 0x0 }, 805 - { 0x11430, 0x0 }, 806 - { 0x11530, 0x0 }, 807 - { 0x11630, 0x0 }, 808 - { 0x11730, 0x0 }, 809 - { 0x11830, 0x0 }, 810 - { 0x12040, 0x0 }, 811 - { 0x12140, 0x0 }, 812 - { 0x12240, 0x0 }, 813 - { 0x12340, 0x0 }, 814 - { 0x12440, 0x0 }, 815 - { 0x12540, 0x0 }, 816 - { 0x12640, 0x0 }, 817 - { 0x12740, 0x0 }, 818 - { 0x12840, 0x0 }, 819 - { 0x12030, 0x0 }, 820 - { 0x12130, 0x0 }, 821 - { 0x12230, 0x0 }, 822 - { 0x12330, 0x0 }, 823 - { 0x12430, 0x0 }, 824 - { 0x12530, 0x0 }, 825 - { 0x12630, 0x0 }, 826 - { 0x12730, 0x0 }, 827 - { 0x12830, 0x0 }, 828 - { 0x13040, 0x0 }, 829 - { 0x13140, 0x0 }, 830 - { 0x13240, 0x0 }, 831 - { 0x13340, 0x0 }, 832 - { 0x13440, 0x0 }, 833 - { 0x13540, 0x0 }, 834 - { 0x13640, 0x0 }, 835 - { 0x13740, 0x0 }, 836 - { 0x13840, 0x0 }, 837 - { 0x13030, 0x0 }, 838 - { 0x13130, 0x0 }, 839 - { 0x13230, 0x0 }, 840 - { 0x13330, 0x0 }, 841 - { 0x13430, 0x0 }, 842 - { 0x13530, 0x0 }, 843 - { 0x13630, 0x0 }, 844 - { 0x13730, 0x0 }, 845 - { 0x13830, 0x0 }, 846 - }; 847 - 848 - /* P0 message block paremeter for training firmware */ 849 - struct dram_cfg_param ddr_fsp0_cfg[] = { 850 - { 0xd0000, 0x0 }, 851 - { 0x54003, 0x74a }, 852 - { 0x54004, 0x4 }, 853 - { 0x54006, 0x15 }, 854 - { 0x54008, 0x131f }, 855 - { 0x54009, 0xc8 }, 856 - { 0x5400b, 0x4 }, 857 - { 0x5400c, 0x1 }, 858 - { 0x5400d, 0x100 }, 859 - { 0x5400f, 0x100 }, 860 - { 0x54012, 0x110 }, 861 - { 0x54019, 0x1bb4 }, 862 - { 0x5401a, 0x32 }, 863 - { 0x5401b, 0x1f46 }, 864 - { 0x5401c, 0x1708 }, 865 - { 0x5401e, 0x6 }, 866 - { 0x5401f, 0x1bb4 }, 867 - { 0x54020, 0x32 }, 868 - { 0x54021, 0x1f46 }, 869 - { 0x54022, 0x1708 }, 870 - { 0x54024, 0x6 }, 871 - { 0x54032, 0xb400 }, 872 - { 0x54033, 0x321b }, 873 - { 0x54034, 0x4600 }, 874 - { 0x54035, 0x81f }, 875 - { 0x54036, 0x17 }, 876 - { 0x54037, 0x600 }, 877 - { 0x54038, 0xb400 }, 878 - { 0x54039, 0x321b }, 879 - { 0x5403a, 0x4600 }, 880 - { 0x5403b, 0x81f }, 881 - { 0x5403c, 0x17 }, 882 - { 0x5403d, 0x600 }, 883 - { 0xd0000, 0x1 }, 884 - }; 885 - 886 - /* P0 2D message block paremeter for training firmware */ 887 - struct dram_cfg_param ddr_fsp0_2d_cfg[] = { 888 - { 0xd0000, 0x0 }, 889 - { 0x54003, 0x74a }, 890 - { 0x54004, 0x4 }, 891 - { 0x54006, 0x15 }, 892 - { 0x54008, 0x61 }, 893 - { 0x54009, 0xc8 }, 894 - { 0x5400b, 0x4 }, 895 - { 0x5400c, 0x1 }, 896 - { 0x5400d, 0x100 }, 897 - { 0x5400f, 0x100 }, 898 - { 0x54010, 0x2080 }, 899 - { 0x54012, 0x110 }, 900 - { 0x54019, 0x1bb4 }, 901 - { 0x5401a, 0x32 }, 902 - { 0x5401b, 0x1f46 }, 903 - { 0x5401c, 0x1708 }, 904 - { 0x5401e, 0x6 }, 905 - { 0x5401f, 0x1bb4 }, 906 - { 0x54020, 0x32 }, 907 - { 0x54021, 0x1f46 }, 908 - { 0x54022, 0x1708 }, 909 - { 0x54024, 0x6 }, 910 - { 0x54032, 0xb400 }, 911 - { 0x54033, 0x321b }, 912 - { 0x54034, 0x4600 }, 913 - { 0x54035, 0x81f }, 914 - { 0x54036, 0x17 }, 915 - { 0x54037, 0x600 }, 916 - { 0x54038, 0xb400 }, 917 - { 0x54039, 0x321b }, 918 - { 0x5403a, 0x4600 }, 919 - { 0x5403b, 0x81f }, 920 - { 0x5403c, 0x17 }, 921 - { 0x5403d, 0x600 }, 922 - { 0xd0000, 0x1 }, 923 - }; 924 - 925 - /* DRAM PHY init engine image */ 926 - struct dram_cfg_param ddr_phy_pie[] = { 927 - { 0xd0000, 0x0 }, 928 - { 0x90000, 0x10 }, 929 - { 0x90001, 0x400 }, 930 - { 0x90002, 0x10e }, 931 - { 0x90003, 0x0 }, 932 - { 0x90004, 0x0 }, 933 - { 0x90005, 0x8 }, 934 - { 0x90029, 0xb }, 935 - { 0x9002a, 0x480 }, 936 - { 0x9002b, 0x109 }, 937 - { 0x9002c, 0x8 }, 938 - { 0x9002d, 0x448 }, 939 - { 0x9002e, 0x139 }, 940 - { 0x9002f, 0x8 }, 941 - { 0x90030, 0x478 }, 942 - { 0x90031, 0x109 }, 943 - { 0x90032, 0x0 }, 944 - { 0x90033, 0xe8 }, 945 - { 0x90034, 0x109 }, 946 - { 0x90035, 0x2 }, 947 - { 0x90036, 0x10 }, 948 - { 0x90037, 0x139 }, 949 - { 0x90038, 0xb }, 950 - { 0x90039, 0x7c0 }, 951 - { 0x9003a, 0x139 }, 952 - { 0x9003b, 0x44 }, 953 - { 0x9003c, 0x633 }, 954 - { 0x9003d, 0x159 }, 955 - { 0x9003e, 0x14f }, 956 - { 0x9003f, 0x630 }, 957 - { 0x90040, 0x159 }, 958 - { 0x90041, 0x47 }, 959 - { 0x90042, 0x633 }, 960 - { 0x90043, 0x149 }, 961 - { 0x90044, 0x4f }, 962 - { 0x90045, 0x633 }, 963 - { 0x90046, 0x179 }, 964 - { 0x90047, 0x8 }, 965 - { 0x90048, 0xe0 }, 966 - { 0x90049, 0x109 }, 967 - { 0x9004a, 0x0 }, 968 - { 0x9004b, 0x7c8 }, 969 - { 0x9004c, 0x109 }, 970 - { 0x9004d, 0x0 }, 971 - { 0x9004e, 0x1 }, 972 - { 0x9004f, 0x8 }, 973 - { 0x90050, 0x30 }, 974 - { 0x90051, 0x65a }, 975 - { 0x90052, 0x9 }, 976 - { 0x90053, 0x0 }, 977 - { 0x90054, 0x45a }, 978 - { 0x90055, 0x9 }, 979 - { 0x90056, 0x0 }, 980 - { 0x90057, 0x448 }, 981 - { 0x90058, 0x109 }, 982 - { 0x90059, 0x40 }, 983 - { 0x9005a, 0x633 }, 984 - { 0x9005b, 0x179 }, 985 - { 0x9005c, 0x1 }, 986 - { 0x9005d, 0x618 }, 987 - { 0x9005e, 0x109 }, 988 - { 0x9005f, 0x40c0 }, 989 - { 0x90060, 0x633 }, 990 - { 0x90061, 0x149 }, 991 - { 0x90062, 0x8 }, 992 - { 0x90063, 0x4 }, 993 - { 0x90064, 0x48 }, 994 - { 0x90065, 0x4040 }, 995 - { 0x90066, 0x633 }, 996 - { 0x90067, 0x149 }, 997 - { 0x90068, 0x0 }, 998 - { 0x90069, 0x4 }, 999 - { 0x9006a, 0x48 }, 1000 - { 0x9006b, 0x40 }, 1001 - { 0x9006c, 0x633 }, 1002 - { 0x9006d, 0x149 }, 1003 - { 0x9006e, 0x0 }, 1004 - { 0x9006f, 0x658 }, 1005 - { 0x90070, 0x109 }, 1006 - { 0x90071, 0x10 }, 1007 - { 0x90072, 0x4 }, 1008 - { 0x90073, 0x18 }, 1009 - { 0x90074, 0x0 }, 1010 - { 0x90075, 0x4 }, 1011 - { 0x90076, 0x78 }, 1012 - { 0x90077, 0x549 }, 1013 - { 0x90078, 0x633 }, 1014 - { 0x90079, 0x159 }, 1015 - { 0x9007a, 0xd49 }, 1016 - { 0x9007b, 0x633 }, 1017 - { 0x9007c, 0x159 }, 1018 - { 0x9007d, 0x94a }, 1019 - { 0x9007e, 0x633 }, 1020 - { 0x9007f, 0x159 }, 1021 - { 0x90080, 0x441 }, 1022 - { 0x90081, 0x633 }, 1023 - { 0x90082, 0x149 }, 1024 - { 0x90083, 0x42 }, 1025 - { 0x90084, 0x633 }, 1026 - { 0x90085, 0x149 }, 1027 - { 0x90086, 0x1 }, 1028 - { 0x90087, 0x633 }, 1029 - { 0x90088, 0x149 }, 1030 - { 0x90089, 0x0 }, 1031 - { 0x9008a, 0xe0 }, 1032 - { 0x9008b, 0x109 }, 1033 - { 0x9008c, 0xa }, 1034 - { 0x9008d, 0x10 }, 1035 - { 0x9008e, 0x109 }, 1036 - { 0x9008f, 0x9 }, 1037 - { 0x90090, 0x3c0 }, 1038 - { 0x90091, 0x149 }, 1039 - { 0x90092, 0x9 }, 1040 - { 0x90093, 0x3c0 }, 1041 - { 0x90094, 0x159 }, 1042 - { 0x90095, 0x18 }, 1043 - { 0x90096, 0x10 }, 1044 - { 0x90097, 0x109 }, 1045 - { 0x90098, 0x0 }, 1046 - { 0x90099, 0x3c0 }, 1047 - { 0x9009a, 0x109 }, 1048 - { 0x9009b, 0x18 }, 1049 - { 0x9009c, 0x4 }, 1050 - { 0x9009d, 0x48 }, 1051 - { 0x9009e, 0x18 }, 1052 - { 0x9009f, 0x4 }, 1053 - { 0x900a0, 0x58 }, 1054 - { 0x900a1, 0xb }, 1055 - { 0x900a2, 0x10 }, 1056 - { 0x900a3, 0x109 }, 1057 - { 0x900a4, 0x1 }, 1058 - { 0x900a5, 0x10 }, 1059 - { 0x900a6, 0x109 }, 1060 - { 0x900a7, 0x5 }, 1061 - { 0x900a8, 0x7c0 }, 1062 - { 0x900a9, 0x109 }, 1063 - { 0x40000, 0x811 }, 1064 - { 0x40020, 0x880 }, 1065 - { 0x40040, 0x0 }, 1066 - { 0x40060, 0x0 }, 1067 - { 0x40001, 0x4008 }, 1068 - { 0x40021, 0x83 }, 1069 - { 0x40041, 0x4f }, 1070 - { 0x40061, 0x0 }, 1071 - { 0x40002, 0x4040 }, 1072 - { 0x40022, 0x83 }, 1073 - { 0x40042, 0x51 }, 1074 - { 0x40062, 0x0 }, 1075 - { 0x40003, 0x811 }, 1076 - { 0x40023, 0x880 }, 1077 - { 0x40043, 0x0 }, 1078 - { 0x40063, 0x0 }, 1079 - { 0x40004, 0x720 }, 1080 - { 0x40024, 0xf }, 1081 - { 0x40044, 0x1740 }, 1082 - { 0x40064, 0x0 }, 1083 - { 0x40005, 0x16 }, 1084 - { 0x40025, 0x83 }, 1085 - { 0x40045, 0x4b }, 1086 - { 0x40065, 0x0 }, 1087 - { 0x40006, 0x716 }, 1088 - { 0x40026, 0xf }, 1089 - { 0x40046, 0x2001 }, 1090 - { 0x40066, 0x0 }, 1091 - { 0x40007, 0x716 }, 1092 - { 0x40027, 0xf }, 1093 - { 0x40047, 0x2800 }, 1094 - { 0x40067, 0x0 }, 1095 - { 0x40008, 0x716 }, 1096 - { 0x40028, 0xf }, 1097 - { 0x40048, 0xf00 }, 1098 - { 0x40068, 0x0 }, 1099 - { 0x40009, 0x720 }, 1100 - { 0x40029, 0xf }, 1101 - { 0x40049, 0x1400 }, 1102 - { 0x40069, 0x0 }, 1103 - { 0x4000a, 0xe08 }, 1104 - { 0x4002a, 0xc15 }, 1105 - { 0x4004a, 0x0 }, 1106 - { 0x4006a, 0x0 }, 1107 - { 0x4000b, 0x625 }, 1108 - { 0x4002b, 0x15 }, 1109 - { 0x4004b, 0x0 }, 1110 - { 0x4006b, 0x0 }, 1111 - { 0x4000c, 0x4028 }, 1112 - { 0x4002c, 0x80 }, 1113 - { 0x4004c, 0x0 }, 1114 - { 0x4006c, 0x0 }, 1115 - { 0x4000d, 0xe08 }, 1116 - { 0x4002d, 0xc1a }, 1117 - { 0x4004d, 0x0 }, 1118 - { 0x4006d, 0x0 }, 1119 - { 0x4000e, 0x625 }, 1120 - { 0x4002e, 0x1a }, 1121 - { 0x4004e, 0x0 }, 1122 - { 0x4006e, 0x0 }, 1123 - { 0x4000f, 0x4040 }, 1124 - { 0x4002f, 0x80 }, 1125 - { 0x4004f, 0x0 }, 1126 - { 0x4006f, 0x0 }, 1127 - { 0x40010, 0x2604 }, 1128 - { 0x40030, 0x15 }, 1129 - { 0x40050, 0x0 }, 1130 - { 0x40070, 0x0 }, 1131 - { 0x40011, 0x708 }, 1132 - { 0x40031, 0x5 }, 1133 - { 0x40051, 0x0 }, 1134 - { 0x40071, 0x2002 }, 1135 - { 0x40012, 0x8 }, 1136 - { 0x40032, 0x80 }, 1137 - { 0x40052, 0x0 }, 1138 - { 0x40072, 0x0 }, 1139 - { 0x40013, 0x2604 }, 1140 - { 0x40033, 0x1a }, 1141 - { 0x40053, 0x0 }, 1142 - { 0x40073, 0x0 }, 1143 - { 0x40014, 0x708 }, 1144 - { 0x40034, 0xa }, 1145 - { 0x40054, 0x0 }, 1146 - { 0x40074, 0x2002 }, 1147 - { 0x40015, 0x4040 }, 1148 - { 0x40035, 0x80 }, 1149 - { 0x40055, 0x0 }, 1150 - { 0x40075, 0x0 }, 1151 - { 0x40016, 0x60a }, 1152 - { 0x40036, 0x15 }, 1153 - { 0x40056, 0x1200 }, 1154 - { 0x40076, 0x0 }, 1155 - { 0x40017, 0x61a }, 1156 - { 0x40037, 0x15 }, 1157 - { 0x40057, 0x1300 }, 1158 - { 0x40077, 0x0 }, 1159 - { 0x40018, 0x60a }, 1160 - { 0x40038, 0x1a }, 1161 - { 0x40058, 0x1200 }, 1162 - { 0x40078, 0x0 }, 1163 - { 0x40019, 0x642 }, 1164 - { 0x40039, 0x1a }, 1165 - { 0x40059, 0x1300 }, 1166 - { 0x40079, 0x0 }, 1167 - { 0x4001a, 0x4808 }, 1168 - { 0x4003a, 0x880 }, 1169 - { 0x4005a, 0x0 }, 1170 - { 0x4007a, 0x0 }, 1171 - { 0x900aa, 0x0 }, 1172 - { 0x900ab, 0x790 }, 1173 - { 0x900ac, 0x11a }, 1174 - { 0x900ad, 0x8 }, 1175 - { 0x900ae, 0x7aa }, 1176 - { 0x900af, 0x2a }, 1177 - { 0x900b0, 0x10 }, 1178 - { 0x900b1, 0x7b2 }, 1179 - { 0x900b2, 0x2a }, 1180 - { 0x900b3, 0x0 }, 1181 - { 0x900b4, 0x7c8 }, 1182 - { 0x900b5, 0x109 }, 1183 - { 0x900b6, 0x10 }, 1184 - { 0x900b7, 0x10 }, 1185 - { 0x900b8, 0x109 }, 1186 - { 0x900b9, 0x10 }, 1187 - { 0x900ba, 0x2a8 }, 1188 - { 0x900bb, 0x129 }, 1189 - { 0x900bc, 0x8 }, 1190 - { 0x900bd, 0x370 }, 1191 - { 0x900be, 0x129 }, 1192 - { 0x900bf, 0xa }, 1193 - { 0x900c0, 0x3c8 }, 1194 - { 0x900c1, 0x1a9 }, 1195 - { 0x900c2, 0xc }, 1196 - { 0x900c3, 0x408 }, 1197 - { 0x900c4, 0x199 }, 1198 - { 0x900c5, 0x14 }, 1199 - { 0x900c6, 0x790 }, 1200 - { 0x900c7, 0x11a }, 1201 - { 0x900c8, 0x8 }, 1202 - { 0x900c9, 0x4 }, 1203 - { 0x900ca, 0x18 }, 1204 - { 0x900cb, 0xe }, 1205 - { 0x900cc, 0x408 }, 1206 - { 0x900cd, 0x199 }, 1207 - { 0x900ce, 0x8 }, 1208 - { 0x900cf, 0x8568 }, 1209 - { 0x900d0, 0x108 }, 1210 - { 0x900d1, 0x18 }, 1211 - { 0x900d2, 0x790 }, 1212 - { 0x900d3, 0x16a }, 1213 - { 0x900d4, 0x8 }, 1214 - { 0x900d5, 0x1d8 }, 1215 - { 0x900d6, 0x169 }, 1216 - { 0x900d7, 0x10 }, 1217 - { 0x900d8, 0x8558 }, 1218 - { 0x900d9, 0x168 }, 1219 - { 0x900da, 0x1ff8 }, 1220 - { 0x900db, 0x85a8 }, 1221 - { 0x900dc, 0x1e8 }, 1222 - { 0x900dd, 0x50 }, 1223 - { 0x900de, 0x798 }, 1224 - { 0x900df, 0x16a }, 1225 - { 0x900e0, 0x60 }, 1226 - { 0x900e1, 0x7a0 }, 1227 - { 0x900e2, 0x16a }, 1228 - { 0x900e3, 0x8 }, 1229 - { 0x900e4, 0x8310 }, 1230 - { 0x900e5, 0x168 }, 1231 - { 0x900e6, 0x8 }, 1232 - { 0x900e7, 0xa310 }, 1233 - { 0x900e8, 0x168 }, 1234 - { 0x900e9, 0xa }, 1235 - { 0x900ea, 0x408 }, 1236 - { 0x900eb, 0x169 }, 1237 - { 0x900ec, 0x6e }, 1238 - { 0x900ed, 0x0 }, 1239 - { 0x900ee, 0x68 }, 1240 - { 0x900ef, 0x0 }, 1241 - { 0x900f0, 0x408 }, 1242 - { 0x900f1, 0x169 }, 1243 - { 0x900f2, 0x0 }, 1244 - { 0x900f3, 0x8310 }, 1245 - { 0x900f4, 0x168 }, 1246 - { 0x900f5, 0x0 }, 1247 - { 0x900f6, 0xa310 }, 1248 - { 0x900f7, 0x168 }, 1249 - { 0x900f8, 0x1ff8 }, 1250 - { 0x900f9, 0x85a8 }, 1251 - { 0x900fa, 0x1e8 }, 1252 - { 0x900fb, 0x68 }, 1253 - { 0x900fc, 0x798 }, 1254 - { 0x900fd, 0x16a }, 1255 - { 0x900fe, 0x78 }, 1256 - { 0x900ff, 0x7a0 }, 1257 - { 0x90100, 0x16a }, 1258 - { 0x90101, 0x68 }, 1259 - { 0x90102, 0x790 }, 1260 - { 0x90103, 0x16a }, 1261 - { 0x90104, 0x8 }, 1262 - { 0x90105, 0x8b10 }, 1263 - { 0x90106, 0x168 }, 1264 - { 0x90107, 0x8 }, 1265 - { 0x90108, 0xab10 }, 1266 - { 0x90109, 0x168 }, 1267 - { 0x9010a, 0xa }, 1268 - { 0x9010b, 0x408 }, 1269 - { 0x9010c, 0x169 }, 1270 - { 0x9010d, 0x58 }, 1271 - { 0x9010e, 0x0 }, 1272 - { 0x9010f, 0x68 }, 1273 - { 0x90110, 0x0 }, 1274 - { 0x90111, 0x408 }, 1275 - { 0x90112, 0x169 }, 1276 - { 0x90113, 0x0 }, 1277 - { 0x90114, 0x8b10 }, 1278 - { 0x90115, 0x168 }, 1279 - { 0x90116, 0x1 }, 1280 - { 0x90117, 0xab10 }, 1281 - { 0x90118, 0x168 }, 1282 - { 0x90119, 0x0 }, 1283 - { 0x9011a, 0x1d8 }, 1284 - { 0x9011b, 0x169 }, 1285 - { 0x9011c, 0x80 }, 1286 - { 0x9011d, 0x790 }, 1287 - { 0x9011e, 0x16a }, 1288 - { 0x9011f, 0x18 }, 1289 - { 0x90120, 0x7aa }, 1290 - { 0x90121, 0x6a }, 1291 - { 0x90122, 0xa }, 1292 - { 0x90123, 0x0 }, 1293 - { 0x90124, 0x1e9 }, 1294 - { 0x90125, 0x8 }, 1295 - { 0x90126, 0x8080 }, 1296 - { 0x90127, 0x108 }, 1297 - { 0x90128, 0xf }, 1298 - { 0x90129, 0x408 }, 1299 - { 0x9012a, 0x169 }, 1300 - { 0x9012b, 0xc }, 1301 - { 0x9012c, 0x0 }, 1302 - { 0x9012d, 0x68 }, 1303 - { 0x9012e, 0x9 }, 1304 - { 0x9012f, 0x0 }, 1305 - { 0x90130, 0x1a9 }, 1306 - { 0x90131, 0x0 }, 1307 - { 0x90132, 0x408 }, 1308 - { 0x90133, 0x169 }, 1309 - { 0x90134, 0x0 }, 1310 - { 0x90135, 0x8080 }, 1311 - { 0x90136, 0x108 }, 1312 - { 0x90137, 0x8 }, 1313 - { 0x90138, 0x7aa }, 1314 - { 0x90139, 0x6a }, 1315 - { 0x9013a, 0x0 }, 1316 - { 0x9013b, 0x8568 }, 1317 - { 0x9013c, 0x108 }, 1318 - { 0x9013d, 0xb7 }, 1319 - { 0x9013e, 0x790 }, 1320 - { 0x9013f, 0x16a }, 1321 - { 0x90140, 0x1f }, 1322 - { 0x90141, 0x0 }, 1323 - { 0x90142, 0x68 }, 1324 - { 0x90143, 0x8 }, 1325 - { 0x90144, 0x8558 }, 1326 - { 0x90145, 0x168 }, 1327 - { 0x90146, 0xf }, 1328 - { 0x90147, 0x408 }, 1329 - { 0x90148, 0x169 }, 1330 - { 0x90149, 0xd }, 1331 - { 0x9014a, 0x0 }, 1332 - { 0x9014b, 0x68 }, 1333 - { 0x9014c, 0x0 }, 1334 - { 0x9014d, 0x408 }, 1335 - { 0x9014e, 0x169 }, 1336 - { 0x9014f, 0x0 }, 1337 - { 0x90150, 0x8558 }, 1338 - { 0x90151, 0x168 }, 1339 - { 0x90152, 0x8 }, 1340 - { 0x90153, 0x3c8 }, 1341 - { 0x90154, 0x1a9 }, 1342 - { 0x90155, 0x3 }, 1343 - { 0x90156, 0x370 }, 1344 - { 0x90157, 0x129 }, 1345 - { 0x90158, 0x20 }, 1346 - { 0x90159, 0x2aa }, 1347 - { 0x9015a, 0x9 }, 1348 - { 0x9015b, 0x8 }, 1349 - { 0x9015c, 0xe8 }, 1350 - { 0x9015d, 0x109 }, 1351 - { 0x9015e, 0x0 }, 1352 - { 0x9015f, 0x8140 }, 1353 - { 0x90160, 0x10c }, 1354 - { 0x90161, 0x10 }, 1355 - { 0x90162, 0x8138 }, 1356 - { 0x90163, 0x104 }, 1357 - { 0x90164, 0x8 }, 1358 - { 0x90165, 0x448 }, 1359 - { 0x90166, 0x109 }, 1360 - { 0x90167, 0xf }, 1361 - { 0x90168, 0x7c0 }, 1362 - { 0x90169, 0x109 }, 1363 - { 0x9016a, 0x0 }, 1364 - { 0x9016b, 0xe8 }, 1365 - { 0x9016c, 0x109 }, 1366 - { 0x9016d, 0x47 }, 1367 - { 0x9016e, 0x630 }, 1368 - { 0x9016f, 0x109 }, 1369 - { 0x90170, 0x8 }, 1370 - { 0x90171, 0x618 }, 1371 - { 0x90172, 0x109 }, 1372 - { 0x90173, 0x8 }, 1373 - { 0x90174, 0xe0 }, 1374 - { 0x90175, 0x109 }, 1375 - { 0x90176, 0x0 }, 1376 - { 0x90177, 0x7c8 }, 1377 - { 0x90178, 0x109 }, 1378 - { 0x90179, 0x8 }, 1379 - { 0x9017a, 0x8140 }, 1380 - { 0x9017b, 0x10c }, 1381 - { 0x9017c, 0x0 }, 1382 - { 0x9017d, 0x478 }, 1383 - { 0x9017e, 0x109 }, 1384 - { 0x9017f, 0x0 }, 1385 - { 0x90180, 0x1 }, 1386 - { 0x90181, 0x8 }, 1387 - { 0x90182, 0x8 }, 1388 - { 0x90183, 0x4 }, 1389 - { 0x90184, 0x0 }, 1390 - { 0x90006, 0x8 }, 1391 - { 0x90007, 0x7c8 }, 1392 - { 0x90008, 0x109 }, 1393 - { 0x90009, 0x0 }, 1394 - { 0x9000a, 0x400 }, 1395 - { 0x9000b, 0x106 }, 1396 - { 0xd00e7, 0x400 }, 1397 - { 0x90017, 0x0 }, 1398 - { 0x9001f, 0x2b }, 1399 - { 0x90026, 0x69 }, 1400 - { 0x400d0, 0x0 }, 1401 - { 0x400d1, 0x101 }, 1402 - { 0x400d2, 0x105 }, 1403 - { 0x400d3, 0x107 }, 1404 - { 0x400d4, 0x10f }, 1405 - { 0x400d5, 0x202 }, 1406 - { 0x400d6, 0x20a }, 1407 - { 0x400d7, 0x20b }, 1408 - { 0x2003a, 0x2 }, 1409 - { 0x200be, 0x0 }, 1410 - { 0x2000b, 0x20c }, 1411 - { 0x2000c, 0x74 }, 1412 - { 0x2000d, 0x48e }, 1413 - { 0x2000e, 0x2c }, 1414 - { 0x9000c, 0x0 }, 1415 - { 0x9000d, 0x173 }, 1416 - { 0x9000e, 0x60 }, 1417 - { 0x9000f, 0x6110 }, 1418 - { 0x90010, 0x2152 }, 1419 - { 0x90011, 0xdfbd }, 1420 - { 0x90012, 0x2060 }, 1421 - { 0x90013, 0x6152 }, 1422 - { 0x20010, 0x5a }, 1423 - { 0x20011, 0x3 }, 1424 - { 0x40080, 0xe0 }, 1425 - { 0x40081, 0x12 }, 1426 - { 0x40082, 0xe0 }, 1427 - { 0x40083, 0x12 }, 1428 - { 0x40084, 0xe0 }, 1429 - { 0x40085, 0x12 }, 1430 - { 0x400fd, 0xf }, 1431 - { 0x400f1, 0xe }, 1432 - { 0x10011, 0x1 }, 1433 - { 0x10012, 0x1 }, 1434 - { 0x10013, 0x180 }, 1435 - { 0x10018, 0x1 }, 1436 - { 0x10002, 0x6209 }, 1437 - { 0x100b2, 0x1 }, 1438 - { 0x101b4, 0x1 }, 1439 - { 0x102b4, 0x1 }, 1440 - { 0x103b4, 0x1 }, 1441 - { 0x104b4, 0x1 }, 1442 - { 0x105b4, 0x1 }, 1443 - { 0x106b4, 0x1 }, 1444 - { 0x107b4, 0x1 }, 1445 - { 0x108b4, 0x1 }, 1446 - { 0x11011, 0x1 }, 1447 - { 0x11012, 0x1 }, 1448 - { 0x11013, 0x180 }, 1449 - { 0x11018, 0x1 }, 1450 - { 0x11002, 0x6209 }, 1451 - { 0x110b2, 0x1 }, 1452 - { 0x111b4, 0x1 }, 1453 - { 0x112b4, 0x1 }, 1454 - { 0x113b4, 0x1 }, 1455 - { 0x114b4, 0x1 }, 1456 - { 0x115b4, 0x1 }, 1457 - { 0x116b4, 0x1 }, 1458 - { 0x117b4, 0x1 }, 1459 - { 0x118b4, 0x1 }, 1460 - { 0x20089, 0x1 }, 1461 - { 0x20088, 0x19 }, 1462 - { 0xc0080, 0x0 }, 1463 - { 0xd0000, 0x1 } 1464 - }; 1465 - 1466 - struct dram_fsp_msg ddr_dram_fsp_msg[] = { 1467 - { 1468 - /* P0 1866mts 1D */ 1469 - .drate = 1866, 1470 - .fw_type = FW_1D_IMAGE, 1471 - .fsp_cfg = ddr_fsp0_cfg, 1472 - .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_cfg), 1473 - }, 1474 - { 1475 - /* P0 1866mts 2D */ 1476 - .drate = 1866, 1477 - .fw_type = FW_2D_IMAGE, 1478 - .fsp_cfg = ddr_fsp0_2d_cfg, 1479 - .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_2d_cfg), 1480 - }, 1481 - }; 1482 - 1483 - /* ddr timing config params */ 1484 - struct dram_timing_info dram_timing = { 1485 - .ddrc_cfg = ddr_ddrc_cfg, 1486 - .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg), 1487 - .ddrphy_cfg = ddr_ddrphy_cfg, 1488 - .ddrphy_cfg_num = ARRAY_SIZE(ddr_ddrphy_cfg), 1489 - .fsp_msg = ddr_dram_fsp_msg, 1490 - .fsp_msg_num = ARRAY_SIZE(ddr_dram_fsp_msg), 1491 - .ddrphy_trained_csr = ddr_ddrphy_trained_csr, 1492 - .ddrphy_trained_csr_num = ARRAY_SIZE(ddr_ddrphy_trained_csr), 1493 - .ddrphy_pie = ddr_phy_pie, 1494 - .ddrphy_pie_num = ARRAY_SIZE(ddr_phy_pie), 1495 - .fsp_table = { 1866, }, 1496 - };
+43 -12
board/freescale/imx93_evk/spl.c
··· 52 52 puts("Normal Boot\n"); 53 53 } 54 54 55 + extern struct dram_timing_info dram_timing_1866mts; 55 56 void spl_dram_init(void) 56 57 { 57 - ddr_init(&dram_timing); 58 + struct dram_timing_info *ptiming = &dram_timing; 59 + 60 + if (is_voltage_mode(VOLT_LOW_DRIVE)) 61 + ptiming = &dram_timing_1866mts; 62 + 63 + printf("DDR: %uMTS\n", ptiming->fsp_msg[0].drate); 64 + ddr_init(ptiming); 58 65 } 59 66 60 67 #if CONFIG_IS_ENABLED(DM_PMIC_PCA9450) ··· 62 69 { 63 70 struct udevice *dev; 64 71 int ret; 72 + unsigned int val = 0, buck_val; 65 73 66 74 ret = pmic_get("pmic@25", &dev); 67 75 if (ret == -ENODEV) { ··· 77 85 /* enable DVS control through PMIC_STBY_REQ */ 78 86 pmic_reg_write(dev, PCA9450_BUCK1CTRL, 0x59); 79 87 80 - if (IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE)) { 81 - /* 0.75v for Low drive mode 82 - */ 83 - pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x0c); 84 - pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x0c); 88 + ret = pmic_reg_read(dev, PCA9450_PWR_CTRL); 89 + if (ret < 0) 90 + return ret; 91 + 92 + val = ret; 93 + 94 + if (is_voltage_mode(VOLT_LOW_DRIVE)) { 95 + buck_val = 0x0c; /* 0.8v for Low drive mode */ 96 + printf("PMIC: Low Drive Voltage Mode\n"); 97 + } else if (is_voltage_mode(VOLT_NOMINAL_DRIVE)) { 98 + buck_val = 0x10; /* 0.85v for Nominal drive mode */ 99 + printf("PMIC: Nominal Voltage Mode\n"); 100 + } else { 101 + buck_val = 0x14; /* 0.9v for Over drive mode */ 102 + printf("PMIC: Over Drive Voltage Mode\n"); 103 + } 104 + 105 + if (val & PCA9450_REG_PWRCTRL_TOFF_DEB) { 106 + pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, buck_val); 107 + pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, buck_val); 85 108 } else { 86 - /* 0.9v for Over drive mode 87 - */ 88 - pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x18); 89 - pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x18); 109 + pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, buck_val + 0x4); 110 + pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, buck_val + 0x4); 111 + } 112 + 113 + if (IS_ENABLED(CONFIG_IMX93_EVK_LPDDR4X)) { 114 + /* Set VDDQ to 1.1V from buck2 */ 115 + pmic_reg_write(dev, PCA9450_BUCK2OUT_DVS0, 0x28); 90 116 } 91 117 92 118 /* set standby voltage to 0.65v */ 93 - pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x4); 119 + if (val & PCA9450_REG_PWRCTRL_TOFF_DEB) 120 + pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x0); 121 + else 122 + pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x4); 94 123 95 124 /* I2C_LT_EN*/ 96 125 pmic_reg_write(dev, 0xa, 0x3); ··· 123 152 debug("LC: 0x%x\n", gd->arch.lifecycle); 124 153 } 125 154 155 + clock_init_late(); 156 + 126 157 power_init_board(); 127 158 128 - if (!IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE)) 159 + if (!is_voltage_mode(VOLT_LOW_DRIVE)) 129 160 set_arm_clk(get_cpu_speed_grade_hz()); 130 161 131 162 /* Init power of mix */
+1 -1
board/phytec/phycore_imx93/spl.c
··· 130 130 debug("LC: 0x%x\n", gd->arch.lifecycle); 131 131 } 132 132 133 - clock_init(); 133 + clock_init_late(); 134 134 135 135 power_init_board(); 136 136
-127
configs/imx93_11x11_evk_ld_defconfig
··· 1 - CONFIG_ARM=y 2 - CONFIG_ARCH_IMX9=y 3 - CONFIG_TEXT_BASE=0x80200000 4 - CONFIG_SYS_MALLOC_LEN=0x2000000 5 - CONFIG_SYS_MALLOC_F_LEN=0x18000 6 - CONFIG_SPL_LIBCOMMON_SUPPORT=y 7 - CONFIG_SPL_LIBGENERIC_SUPPORT=y 8 - CONFIG_NR_DRAM_BANKS=2 9 - CONFIG_ENV_SIZE=0x4000 10 - CONFIG_ENV_OFFSET=0x400000 11 - CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg" 12 - CONFIG_DM_GPIO=y 13 - CONFIG_DEFAULT_DEVICE_TREE="freescale/imx93-11x11-evk" 14 - CONFIG_SPL_TEXT_BASE=0x2049A000 15 - CONFIG_IMX9_LOW_DRIVE_MODE=y 16 - CONFIG_TARGET_IMX93_11X11_EVK=y 17 - CONFIG_SYS_MONITOR_LEN=524288 18 - CONFIG_SPL_SERIAL=y 19 - CONFIG_SPL_DRIVERS_MISC=y 20 - CONFIG_SPL_STACK=0x20519dd0 21 - CONFIG_SPL_HAS_BSS_LINKER_SECTION=y 22 - CONFIG_SPL_BSS_START_ADDR=0x2051a000 23 - CONFIG_SPL_BSS_MAX_SIZE=0x2000 24 - CONFIG_SPL=y 25 - CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x88000000 26 - CONFIG_SYS_LOAD_ADDR=0x80400000 27 - CONFIG_SYS_MEMTEST_START=0x80000000 28 - CONFIG_SYS_MEMTEST_END=0x90000000 29 - CONFIG_REMAKE_ELF=y 30 - CONFIG_DISTRO_DEFAULTS=y 31 - CONFIG_DEFAULT_FDT_FILE="imx93-11x11-evk.dtb" 32 - CONFIG_SYS_CBSIZE=2048 33 - CONFIG_SYS_PBSIZE=2074 34 - CONFIG_BOARD_EARLY_INIT_F=y 35 - CONFIG_BOARD_LATE_INIT=y 36 - CONFIG_SPL_MAX_SIZE=0x26000 37 - CONFIG_SPL_BOARD_INIT=y 38 - CONFIG_SPL_BOOTROM_SUPPORT=y 39 - CONFIG_SPL_LOAD_IMX_CONTAINER=y 40 - CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/container.cfg" 41 - # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set 42 - CONFIG_SPL_SYS_MALLOC=y 43 - CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y 44 - CONFIG_SPL_CUSTOM_SYS_MALLOC_ADDR=0x83200000 45 - CONFIG_SPL_SYS_MALLOC_SIZE=0x80000 46 - CONFIG_SPL_SYS_MMCSD_RAW_MODE=y 47 - CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y 48 - CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1040 49 - CONFIG_SPL_I2C=y 50 - CONFIG_SPL_POWER=y 51 - CONFIG_SPL_WATCHDOG=y 52 - CONFIG_SYS_PROMPT="u-boot=> " 53 - CONFIG_CMD_ERASEENV=y 54 - # CONFIG_CMD_CRC32 is not set 55 - CONFIG_CMD_MEMTEST=y 56 - CONFIG_CMD_CLK=y 57 - CONFIG_CMD_DFU=y 58 - CONFIG_CMD_FUSE=y 59 - CONFIG_CMD_GPIO=y 60 - CONFIG_CMD_GPT=y 61 - CONFIG_CMD_I2C=y 62 - CONFIG_CMD_MMC=y 63 - CONFIG_CMD_POWEROFF=y 64 - CONFIG_CMD_SNTP=y 65 - CONFIG_CMD_CACHE=y 66 - CONFIG_CMD_RTC=y 67 - CONFIG_CMD_TIME=y 68 - CONFIG_CMD_GETTIME=y 69 - CONFIG_CMD_TIMER=y 70 - CONFIG_CMD_REGULATOR=y 71 - CONFIG_CMD_HASH=y 72 - CONFIG_CMD_EXT4_WRITE=y 73 - CONFIG_OF_CONTROL=y 74 - CONFIG_SPL_OF_CONTROL=y 75 - CONFIG_ENV_OVERWRITE=y 76 - CONFIG_ENV_IS_NOWHERE=y 77 - CONFIG_ENV_IS_IN_MMC=y 78 - CONFIG_SYS_RELOC_GD_ENV_ADDR=y 79 - CONFIG_SYS_MMC_ENV_DEV=1 80 - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y 81 - CONFIG_USE_ETHPRIME=y 82 - CONFIG_ETHPRIME="eth0" 83 - CONFIG_NET_RANDOM_ETHADDR=y 84 - CONFIG_SPL_DM=y 85 - CONFIG_REGMAP=y 86 - CONFIG_SYSCON=y 87 - CONFIG_CPU=y 88 - CONFIG_CPU_IMX=y 89 - CONFIG_IMX_RGPIO2P=y 90 - CONFIG_DM_PCA953X=y 91 - CONFIG_DM_I2C=y 92 - CONFIG_SYS_I2C_IMX_LPI2C=y 93 - CONFIG_SUPPORT_EMMC_BOOT=y 94 - CONFIG_MMC_IO_VOLTAGE=y 95 - CONFIG_MMC_UHS_SUPPORT=y 96 - CONFIG_MMC_HS400_ES_SUPPORT=y 97 - CONFIG_MMC_HS400_SUPPORT=y 98 - CONFIG_FSL_USDHC=y 99 - CONFIG_PHY_ANEG_TIMEOUT=20000 100 - CONFIG_PHY_REALTEK=y 101 - CONFIG_DM_ETH_PHY=y 102 - CONFIG_PHY_GIGE=y 103 - CONFIG_DWC_ETH_QOS=y 104 - CONFIG_DWC_ETH_QOS_IMX=y 105 - CONFIG_FEC_MXC=y 106 - CONFIG_MII=y 107 - CONFIG_PINCTRL=y 108 - CONFIG_SPL_PINCTRL=y 109 - CONFIG_PINCTRL_IMX93=y 110 - CONFIG_DM_PMIC=y 111 - CONFIG_SPL_DM_PMIC_PCA9450=y 112 - CONFIG_DM_REGULATOR=y 113 - CONFIG_DM_REGULATOR_FIXED=y 114 - CONFIG_DM_REGULATOR_GPIO=y 115 - CONFIG_DM_RTC=y 116 - CONFIG_RTC_EMULATION=y 117 - CONFIG_DM_SERIAL=y 118 - CONFIG_FSL_LPUART=y 119 - CONFIG_SYSRESET=y 120 - CONFIG_SYSRESET_CMD_POWEROFF=y 121 - CONFIG_SYSRESET_PSCI=y 122 - CONFIG_DM_THERMAL=y 123 - CONFIG_IMX_TMU=y 124 - CONFIG_ULP_WATCHDOG=y 125 - CONFIG_WDT=y 126 - CONFIG_LZO=y 127 - CONFIG_BZIP2=y
+118
configs/lxr2_defconfig
··· 1 + CONFIG_ARM=y 2 + CONFIG_ARCH_MX6=y 3 + CONFIG_TEXT_BASE=0x17800000 4 + CONFIG_SYS_MALLOC_LEN=0xa00000 5 + CONFIG_SYS_MALLOC_F_LEN=0x4000 6 + CONFIG_SPL_GPIO=y 7 + CONFIG_SPL_LIBCOMMON_SUPPORT=y 8 + CONFIG_SPL_LIBGENERIC_SUPPORT=y 9 + CONFIG_NR_DRAM_BANKS=1 10 + CONFIG_SF_DEFAULT_SPEED=20000000 11 + CONFIG_ENV_SIZE=0x4000 12 + CONFIG_ENV_OFFSET=0x100000 13 + CONFIG_ENV_SECT_SIZE=0x10000 14 + CONFIG_MX6Q=y 15 + CONFIG_TARGET_LXR2=y 16 + CONFIG_DM_GPIO=y 17 + CONFIG_DEFAULT_DEVICE_TREE="imx6q-lxr" 18 + CONFIG_SPL_TEXT_BASE=0x00908000 19 + CONFIG_SYS_MONITOR_LEN=409600 20 + CONFIG_SPL_MMC=y 21 + CONFIG_SPL_SERIAL=y 22 + CONFIG_SYS_BOOTCOUNT_ADDR=0x020CC068 23 + CONFIG_SPL=y 24 + CONFIG_SYS_BOOTCOUNT_SINGLEWORD=y 25 + CONFIG_ENV_OFFSET_REDUND=0x110000 26 + CONFIG_SPL_LIBDISK_SUPPORT=y 27 + CONFIG_SPL_SPI_FLASH_SUPPORT=y 28 + CONFIG_SPL_SPI=y 29 + CONFIG_LTO=y 30 + CONFIG_HAS_BOARD_SIZE_LIMIT=y 31 + CONFIG_BOARD_SIZE_LIMIT=715766 32 + CONFIG_FIT=y 33 + CONFIG_SPL_FIT_PRINT=y 34 + CONFIG_SPL_LOAD_FIT=y 35 + CONFIG_SUPPORT_RAW_INITRD=y 36 + CONFIG_SYS_PBSIZE=532 37 + CONFIG_SYS_CONSOLE_IS_IN_ENV=y 38 + CONFIG_SPL_LEGACY_IMAGE_FORMAT=y 39 + CONFIG_SPL_SYS_MALLOC=y 40 + CONFIG_SPL_FIT_IMAGE_TINY=y 41 + CONFIG_SPL_SPI_LOAD=y 42 + CONFIG_SYS_SPI_U_BOOT_OFFS=0x11400 43 + CONFIG_HUSH_PARSER=y 44 + CONFIG_SYS_MAXARGS=32 45 + CONFIG_CMD_BOOTZ=y 46 + CONFIG_CMD_SPL=y 47 + CONFIG_CMD_SPL_WRITE_SIZE=0x20000 48 + CONFIG_CMD_MD5SUM=y 49 + CONFIG_MD5SUM_VERIFY=y 50 + CONFIG_CMD_GPIO=y 51 + CONFIG_CMD_I2C=y 52 + CONFIG_CMD_MMC=y 53 + CONFIG_CMD_NAND_TRIMFFS=y 54 + CONFIG_CMD_PART=y 55 + CONFIG_CMD_WDT=y 56 + CONFIG_CMD_DHCP=y 57 + CONFIG_CMD_MII=y 58 + CONFIG_CMD_PING=y 59 + CONFIG_CMD_BOOTCOUNT=y 60 + CONFIG_CMD_EXT2=y 61 + CONFIG_CMD_EXT4=y 62 + CONFIG_CMD_EXT4_WRITE=y 63 + CONFIG_CMD_FAT=y 64 + CONFIG_CMD_FS_GENERIC=y 65 + CONFIG_CMD_MTDPARTS=y 66 + CONFIG_MTDIDS_DEFAULT="nand0=gpmi-nand" 67 + CONFIG_MTDPARTS_DEFAULT="mtdparts=gpmi-nand:40m(Kernels),860m(root),-(nand)" 68 + CONFIG_CMD_UBI=y 69 + # CONFIG_SPL_DOS_PARTITION is not set 70 + CONFIG_EFI_PARTITION=y 71 + # CONFIG_SPL_EFI_PARTITION is not set 72 + CONFIG_OF_CONTROL=y 73 + CONFIG_ENV_OVERWRITE=y 74 + CONFIG_ENV_IS_IN_SPI_FLASH=y 75 + CONFIG_SYS_REDUNDAND_ENVIRONMENT=y 76 + CONFIG_SYS_RELOC_GD_ENV_ADDR=y 77 + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y 78 + CONFIG_ARP_TIMEOUT=200 79 + CONFIG_BOUNCE_BUFFER=y 80 + CONFIG_BOOTCOUNT_LIMIT=y 81 + CONFIG_SYS_BOOTCOUNT_MAGIC=0xB0C4000 82 + CONFIG_SYS_BOOTCOUNT_BE=y 83 + CONFIG_DM_I2C=y 84 + CONFIG_SYS_I2C_MXC=y 85 + CONFIG_FSL_USDHC=y 86 + CONFIG_MTD=y 87 + CONFIG_DM_MTD=y 88 + CONFIG_MTD_RAW_NAND=y 89 + CONFIG_NAND_MXS=y 90 + CONFIG_NAND_MXS_DT=y 91 + CONFIG_SYS_NAND_ONFI_DETECTION=y 92 + CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y 93 + CONFIG_SYS_NAND_U_BOOT_OFFS=0xe00000 94 + CONFIG_DM_SPI_FLASH=y 95 + CONFIG_SF_DEFAULT_BUS=2 96 + CONFIG_SPI_FLASH_SFDP_SUPPORT=y 97 + CONFIG_SPI_FLASH_STMICRO=y 98 + CONFIG_SPI_FLASH_WINBOND=y 99 + CONFIG_PHYLIB=y 100 + CONFIG_PHY_MICREL=y 101 + CONFIG_PHY_MICREL_KSZ90X1=y 102 + CONFIG_FEC_MXC=y 103 + CONFIG_RGMII=y 104 + CONFIG_MII=y 105 + CONFIG_PINCTRL=y 106 + CONFIG_PINCTRL_IMX6=y 107 + CONFIG_DM_REGULATOR=y 108 + CONFIG_DM_REGULATOR_FIXED=y 109 + CONFIG_DM_REGULATOR_GPIO=y 110 + CONFIG_DM_SERIAL=y 111 + CONFIG_MXC_UART=y 112 + CONFIG_SPI=y 113 + CONFIG_DM_SPI=y 114 + CONFIG_MXC_SPI=y 115 + CONFIG_SYSRESET=y 116 + CONFIG_SYSRESET_WATCHDOG=y 117 + CONFIG_SYSRESET_WATCHDOG_AUTO=y 118 + CONFIG_IMX_THERMAL=y
+4
drivers/cpu/imx8_cpu.c
··· 60 60 return "93(12)";/* iMX93 9x9 Dual core without NPU */ 61 61 case MXC_CPU_IMX9311: 62 62 return "93(11)";/* iMX93 9x9 Single core without NPU */ 63 + case MXC_CPU_IMX9302: 64 + return "93(02)";/* iMX93 900Mhz Low performance Dual core without NPU */ 65 + case MXC_CPU_IMX9301: 66 + return "93(01)";/* iMX93 900Mhz Low performance Single core without NPU */ 63 67 default: 64 68 return "??"; 65 69 }
+4
drivers/ddr/imx/phy/ddrphy_utils.c
··· 148 148 dram_pll_init(MHZ(266)); 149 149 dram_disable_bypass(); 150 150 break; 151 + case 933: 152 + dram_pll_init(MHZ(233)); 153 + dram_disable_bypass(); 154 + break; 151 155 case 667: 152 156 dram_pll_init(MHZ(167)); 153 157 dram_disable_bypass();
+23
include/configs/lxr2.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ */ 2 + // Copyright (C) Stefano Babic <sbabic@denx.de> 3 + 4 + #ifndef __LXR2_CONFIG_H 5 + #define __LXR2_CONFIG_H 6 + 7 + #include <config_distro_bootcmd.h> 8 + 9 + #include "mx6_common.h" 10 + 11 + #define PHYS_SDRAM_SIZE SZ_1G 12 + 13 + /* Physical Memory Map */ 14 + #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR 15 + 16 + #define CFG_SYS_SDRAM_BASE PHYS_SDRAM 17 + #define CFG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR 18 + #define CFG_SYS_INIT_RAM_SIZE IRAM_SIZE 19 + 20 + #define CFG_SYS_FSL_ESDHC_ADDR 0 21 + #define CFG_MXC_UART_BASE UART4_BASE 22 + 23 + #endif
+2
include/power/pca9450.h
··· 54 54 PCA9450_REG_NUM, 55 55 }; 56 56 57 + #define PCA9450_REG_PWRCTRL_TOFF_DEB BIT(5) 58 + 57 59 int power_pca9450_init(unsigned char bus, unsigned char addr); 58 60 59 61 enum {