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

Merge tag 'imx-fixes-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into arm/fixes

i.MX fixes for 6.1:

- Fix imx93-pd driver to release resources when error occurs in probe.
- A series from Ioana Ciornei to add missing clock frequencies for MDIO
controllers on LayerScape SoCs, so that the kernel driver can work
independently from bootloader.
- A series from Li Jun to fix USB power domain setup in i.MX8MM/N device
trees.
- Fix CPLD_Dn pull configuration for MX8Menlo board to avoid interfering
with CPLD power off functionality.
- Fix ctrl_sleep_moci GPIO setup for verdin-imx8mp board.
- Fix DT schema check warnings on uSDHC clocks for imx8-ss-conn device
tree.
- Fix up gpcv2 DT bindings to have an optional `power-domains` property.
- A couple of i.MX93 device tree fixes on S4MU interrupt and gpio-ranges
of GPIO controllers.
- Keep PU regulator on for Quad and QuadPlus based imx6dl-yapp4 boards to
work around a hardware design flaw in supply voltage distribution.
- Fix user push-button GPIO offset on imx6qdl-gw59 boards.

* tag 'imx-fixes-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux:
arm64: dts: ls208xa: specify clock frequencies for the MDIO controllers
arm64: dts: ls1088a: specify clock frequencies for the MDIO controllers
arm64: dts: lx2160a: specify clock frequencies for the MDIO controllers
soc: imx: imx93-pd: Fix the error handling path of imx93_pd_probe()
arm64: dts: imx93: correct gpio-ranges
arm64: dts: imx93: correct s4mu interrupt names
dt-bindings: power: gpcv2: add power-domains property
arm64: dts: imx8: correct clock order
ARM: dts: imx6dl-yapp4: Do not allow PM to switch PU regulator off on Q/QP
ARM: dts: imx6qdl-gw59{10,13}: fix user pushbutton GPIO offset
arm64: dts: imx8mn: Correct the usb power domain
arm64: dts: imx8mn: remove otg1 power domain dependency on hsio
arm64: dts: imx8mm: correct usb power domains
arm64: dts: imx8mm: remove otg1/2 power domain dependency on hsio
arm64: dts: verdin-imx8mp: fix ctrl_sleep_moci
arm64: dts: imx8mm: Enable CPLD_Dn pull down resistor on MX8Menlo

Link: https://lore.kernel.org/r/20221101031547.GB125525@dragon
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

+85 -42
+3
Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml
··· 81 81 82 82 power-supply: true 83 83 84 + power-domains: 85 + maxItems: 1 86 + 84 87 resets: 85 88 description: | 86 89 A number of phandles to resets that need to be asserted during
+4
arch/arm/boot/dts/imx6q-yapp4-crux.dts
··· 33 33 status = "okay"; 34 34 }; 35 35 36 + &reg_pu { 37 + regulator-always-on; 38 + }; 39 + 36 40 &reg_usb_h1_vbus { 37 41 status = "okay"; 38 42 };
+1 -1
arch/arm/boot/dts/imx6qdl-gw5910.dtsi
··· 29 29 30 30 user-pb { 31 31 label = "user_pb"; 32 - gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>; 32 + gpios = <&gsc_gpio 2 GPIO_ACTIVE_LOW>; 33 33 linux,code = <BTN_0>; 34 34 }; 35 35
+1 -1
arch/arm/boot/dts/imx6qdl-gw5913.dtsi
··· 26 26 27 27 user-pb { 28 28 label = "user_pb"; 29 - gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>; 29 + gpios = <&gsc_gpio 2 GPIO_ACTIVE_LOW>; 30 30 linux,code = <BTN_0>; 31 31 }; 32 32
+4
arch/arm/boot/dts/imx6qp-yapp4-crux-plus.dts
··· 33 33 status = "okay"; 34 34 }; 35 35 36 + &reg_pu { 37 + regulator-always-on; 38 + }; 39 + 36 40 &reg_usb_h1_vbus { 37 41 status = "okay"; 38 42 };
+6
arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi
··· 779 779 little-endian; 780 780 #address-cells = <1>; 781 781 #size-cells = <0>; 782 + clock-frequency = <2500000>; 783 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 784 + QORIQ_CLK_PLL_DIV(1)>; 782 785 status = "disabled"; 783 786 }; 784 787 ··· 791 788 little-endian; 792 789 #address-cells = <1>; 793 790 #size-cells = <0>; 791 + clock-frequency = <2500000>; 792 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 793 + QORIQ_CLK_PLL_DIV(1)>; 794 794 status = "disabled"; 795 795 }; 796 796
+6
arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi
··· 532 532 little-endian; 533 533 #address-cells = <1>; 534 534 #size-cells = <0>; 535 + clock-frequency = <2500000>; 536 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 537 + QORIQ_CLK_PLL_DIV(2)>; 535 538 status = "disabled"; 536 539 }; 537 540 ··· 544 541 little-endian; 545 542 #address-cells = <1>; 546 543 #size-cells = <0>; 544 + clock-frequency = <2500000>; 545 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 546 + QORIQ_CLK_PLL_DIV(2)>; 547 547 status = "disabled"; 548 548 }; 549 549
+6
arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
··· 1385 1385 #address-cells = <1>; 1386 1386 #size-cells = <0>; 1387 1387 little-endian; 1388 + clock-frequency = <2500000>; 1389 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 1390 + QORIQ_CLK_PLL_DIV(2)>; 1388 1391 status = "disabled"; 1389 1392 }; 1390 1393 ··· 1398 1395 little-endian; 1399 1396 #address-cells = <1>; 1400 1397 #size-cells = <0>; 1398 + clock-frequency = <2500000>; 1399 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 1400 + QORIQ_CLK_PLL_DIV(2)>; 1401 1401 status = "disabled"; 1402 1402 }; 1403 1403
+9 -9
arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi
··· 38 38 interrupts = <GIC_SPI 232 IRQ_TYPE_LEVEL_HIGH>; 39 39 reg = <0x5b010000 0x10000>; 40 40 clocks = <&sdhc0_lpcg IMX_LPCG_CLK_4>, 41 - <&sdhc0_lpcg IMX_LPCG_CLK_5>, 42 - <&sdhc0_lpcg IMX_LPCG_CLK_0>; 43 - clock-names = "ipg", "per", "ahb"; 41 + <&sdhc0_lpcg IMX_LPCG_CLK_0>, 42 + <&sdhc0_lpcg IMX_LPCG_CLK_5>; 43 + clock-names = "ipg", "ahb", "per"; 44 44 power-domains = <&pd IMX_SC_R_SDHC_0>; 45 45 status = "disabled"; 46 46 }; ··· 49 49 interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; 50 50 reg = <0x5b020000 0x10000>; 51 51 clocks = <&sdhc1_lpcg IMX_LPCG_CLK_4>, 52 - <&sdhc1_lpcg IMX_LPCG_CLK_5>, 53 - <&sdhc1_lpcg IMX_LPCG_CLK_0>; 54 - clock-names = "ipg", "per", "ahb"; 52 + <&sdhc1_lpcg IMX_LPCG_CLK_0>, 53 + <&sdhc1_lpcg IMX_LPCG_CLK_5>; 54 + clock-names = "ipg", "ahb", "per"; 55 55 power-domains = <&pd IMX_SC_R_SDHC_1>; 56 56 fsl,tuning-start-tap = <20>; 57 57 fsl,tuning-step = <2>; ··· 62 62 interrupts = <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>; 63 63 reg = <0x5b030000 0x10000>; 64 64 clocks = <&sdhc2_lpcg IMX_LPCG_CLK_4>, 65 - <&sdhc2_lpcg IMX_LPCG_CLK_5>, 66 - <&sdhc2_lpcg IMX_LPCG_CLK_0>; 67 - clock-names = "ipg", "per", "ahb"; 65 + <&sdhc2_lpcg IMX_LPCG_CLK_0>, 66 + <&sdhc2_lpcg IMX_LPCG_CLK_5>; 67 + clock-names = "ipg", "ahb", "per"; 68 68 power-domains = <&pd IMX_SC_R_SDHC_2>; 69 69 status = "disabled"; 70 70 };
+8 -8
arch/arm64/boot/dts/freescale/imx8mm-mx8menlo.dts
··· 250 250 /* SODIMM 96 */ 251 251 MX8MM_IOMUXC_SAI1_RXD2_GPIO4_IO4 0x1c4 252 252 /* CPLD_D[7] */ 253 - MX8MM_IOMUXC_SAI1_RXD3_GPIO4_IO5 0x1c4 253 + MX8MM_IOMUXC_SAI1_RXD3_GPIO4_IO5 0x184 254 254 /* CPLD_D[6] */ 255 - MX8MM_IOMUXC_SAI1_RXFS_GPIO4_IO0 0x1c4 255 + MX8MM_IOMUXC_SAI1_RXFS_GPIO4_IO0 0x184 256 256 /* CPLD_D[5] */ 257 - MX8MM_IOMUXC_SAI1_TXC_GPIO4_IO11 0x1c4 257 + MX8MM_IOMUXC_SAI1_TXC_GPIO4_IO11 0x184 258 258 /* CPLD_D[4] */ 259 - MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12 0x1c4 259 + MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12 0x184 260 260 /* CPLD_D[3] */ 261 - MX8MM_IOMUXC_SAI1_TXD1_GPIO4_IO13 0x1c4 261 + MX8MM_IOMUXC_SAI1_TXD1_GPIO4_IO13 0x184 262 262 /* CPLD_D[2] */ 263 - MX8MM_IOMUXC_SAI1_TXD2_GPIO4_IO14 0x1c4 263 + MX8MM_IOMUXC_SAI1_TXD2_GPIO4_IO14 0x184 264 264 /* CPLD_D[1] */ 265 - MX8MM_IOMUXC_SAI1_TXD3_GPIO4_IO15 0x1c4 265 + MX8MM_IOMUXC_SAI1_TXD3_GPIO4_IO15 0x184 266 266 /* CPLD_D[0] */ 267 - MX8MM_IOMUXC_SAI1_TXD4_GPIO4_IO16 0x1c4 267 + MX8MM_IOMUXC_SAI1_TXD4_GPIO4_IO16 0x184 268 268 /* KBD_intK */ 269 269 MX8MM_IOMUXC_SAI2_MCLK_GPIO4_IO27 0x1c4 270 270 /* DISP_reset */
+4 -4
arch/arm64/boot/dts/freescale/imx8mm.dtsi
··· 276 276 assigned-clocks = <&clk IMX8MM_CLK_USB_PHY_REF>; 277 277 assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_100M>; 278 278 clock-names = "main_clk"; 279 + power-domains = <&pgc_otg1>; 279 280 }; 280 281 281 282 usbphynop2: usbphynop2 { ··· 286 285 assigned-clocks = <&clk IMX8MM_CLK_USB_PHY_REF>; 287 286 assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_100M>; 288 287 clock-names = "main_clk"; 288 + power-domains = <&pgc_otg2>; 289 289 }; 290 290 291 291 soc: soc@0 { ··· 676 674 pgc_otg1: power-domain@2 { 677 675 #power-domain-cells = <0>; 678 676 reg = <IMX8MM_POWER_DOMAIN_OTG1>; 679 - power-domains = <&pgc_hsiomix>; 680 677 }; 681 678 682 679 pgc_otg2: power-domain@3 { 683 680 #power-domain-cells = <0>; 684 681 reg = <IMX8MM_POWER_DOMAIN_OTG2>; 685 - power-domains = <&pgc_hsiomix>; 686 682 }; 687 683 688 684 pgc_gpumix: power-domain@4 { ··· 1186 1186 assigned-clock-parents = <&clk IMX8MM_SYS_PLL2_500M>; 1187 1187 phys = <&usbphynop1>; 1188 1188 fsl,usbmisc = <&usbmisc1 0>; 1189 - power-domains = <&pgc_otg1>; 1189 + power-domains = <&pgc_hsiomix>; 1190 1190 status = "disabled"; 1191 1191 }; 1192 1192 ··· 1206 1206 assigned-clock-parents = <&clk IMX8MM_SYS_PLL2_500M>; 1207 1207 phys = <&usbphynop2>; 1208 1208 fsl,usbmisc = <&usbmisc2 0>; 1209 - power-domains = <&pgc_otg2>; 1209 + power-domains = <&pgc_hsiomix>; 1210 1210 status = "disabled"; 1211 1211 }; 1212 1212
+2 -2
arch/arm64/boot/dts/freescale/imx8mn.dtsi
··· 662 662 pgc_otg1: power-domain@1 { 663 663 #power-domain-cells = <0>; 664 664 reg = <IMX8MN_POWER_DOMAIN_OTG1>; 665 - power-domains = <&pgc_hsiomix>; 666 665 }; 667 666 668 667 pgc_gpumix: power-domain@2 { ··· 1075 1076 assigned-clock-parents = <&clk IMX8MN_SYS_PLL2_500M>; 1076 1077 phys = <&usbphynop1>; 1077 1078 fsl,usbmisc = <&usbmisc1 0>; 1078 - power-domains = <&pgc_otg1>; 1079 + power-domains = <&pgc_hsiomix>; 1079 1080 status = "disabled"; 1080 1081 }; 1081 1082 ··· 1174 1175 assigned-clocks = <&clk IMX8MN_CLK_USB_PHY_REF>; 1175 1176 assigned-clock-parents = <&clk IMX8MN_SYS_PLL1_100M>; 1176 1177 clock-names = "main_clk"; 1178 + power-domains = <&pgc_otg1>; 1177 1179 }; 1178 1180 };
+10 -10
arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
··· 354 354 "SODIMM_82", 355 355 "SODIMM_70", 356 356 "SODIMM_72"; 357 - 358 - ctrl-sleep-moci-hog { 359 - gpio-hog; 360 - /* Verdin CTRL_SLEEP_MOCI# (SODIMM 256) */ 361 - gpios = <29 GPIO_ACTIVE_HIGH>; 362 - line-name = "CTRL_SLEEP_MOCI#"; 363 - output-high; 364 - pinctrl-names = "default"; 365 - pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; 366 - }; 367 357 }; 368 358 369 359 &gpio3 { ··· 422 432 "SODIMM_256", 423 433 "SODIMM_48", 424 434 "SODIMM_44"; 435 + 436 + ctrl-sleep-moci-hog { 437 + gpio-hog; 438 + /* Verdin CTRL_SLEEP_MOCI# (SODIMM 256) */ 439 + gpios = <29 GPIO_ACTIVE_HIGH>; 440 + line-name = "CTRL_SLEEP_MOCI#"; 441 + output-high; 442 + pinctrl-names = "default"; 443 + pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; 444 + }; 425 445 }; 426 446 427 447 /* On-module I2C */
+6 -5
arch/arm64/boot/dts/freescale/imx93.dtsi
··· 451 451 clocks = <&clk IMX93_CLK_GPIO2_GATE>, 452 452 <&clk IMX93_CLK_GPIO2_GATE>; 453 453 clock-names = "gpio", "port"; 454 - gpio-ranges = <&iomuxc 0 32 32>; 454 + gpio-ranges = <&iomuxc 0 4 30>; 455 455 }; 456 456 457 457 gpio3: gpio@43820080 { ··· 465 465 clocks = <&clk IMX93_CLK_GPIO3_GATE>, 466 466 <&clk IMX93_CLK_GPIO3_GATE>; 467 467 clock-names = "gpio", "port"; 468 - gpio-ranges = <&iomuxc 0 64 32>; 468 + gpio-ranges = <&iomuxc 0 84 8>, <&iomuxc 8 66 18>, 469 + <&iomuxc 26 34 2>, <&iomuxc 28 0 4>; 469 470 }; 470 471 471 472 gpio4: gpio@43830080 { ··· 480 479 clocks = <&clk IMX93_CLK_GPIO4_GATE>, 481 480 <&clk IMX93_CLK_GPIO4_GATE>; 482 481 clock-names = "gpio", "port"; 483 - gpio-ranges = <&iomuxc 0 96 32>; 482 + gpio-ranges = <&iomuxc 0 38 28>, <&iomuxc 28 36 2>; 484 483 }; 485 484 486 485 gpio1: gpio@47400080 { ··· 494 493 clocks = <&clk IMX93_CLK_GPIO1_GATE>, 495 494 <&clk IMX93_CLK_GPIO1_GATE>; 496 495 clock-names = "gpio", "port"; 497 - gpio-ranges = <&iomuxc 0 0 32>; 496 + gpio-ranges = <&iomuxc 0 92 16>; 498 497 }; 499 498 500 499 s4muap: mailbox@47520000 { ··· 502 501 reg = <0x47520000 0x10000>; 503 502 interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>, 504 503 <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; 505 - interrupt-names = "txirq", "rxirq"; 504 + interrupt-names = "tx", "rx"; 506 505 #mbox-cells = <2>; 507 506 }; 508 507
+15 -2
drivers/soc/imx/imx93-pd.c
··· 135 135 136 136 ret = pm_genpd_init(&domain->genpd, NULL, domain->init_off); 137 137 if (ret) 138 - return ret; 138 + goto err_clk_unprepare; 139 139 140 140 platform_set_drvdata(pdev, domain); 141 141 142 - return of_genpd_add_provider_simple(np, &domain->genpd); 142 + ret = of_genpd_add_provider_simple(np, &domain->genpd); 143 + if (ret) 144 + goto err_genpd_remove; 145 + 146 + return 0; 147 + 148 + err_genpd_remove: 149 + pm_genpd_remove(&domain->genpd); 150 + 151 + err_clk_unprepare: 152 + if (!domain->init_off) 153 + clk_bulk_disable_unprepare(domain->num_clks, domain->clks); 154 + 155 + return ret; 143 156 } 144 157 145 158 static const struct of_device_id imx93_pd_ids[] = {