imx8m: soc: drop phy-reset-gpios for fec
authorPeng Fan <peng.fan@nxp.com>
Thu, 7 Apr 2022 07:55:55 +0000 (15:55 +0800)
committerStefano Babic <sbabic@denx.de>
Tue, 12 Apr 2022 17:10:44 +0000 (19:10 +0200)
Need to drop phy-reset-gpios before booting linux, this property
is legacy property and replaced with reset-gpios.

If provide both, kernel would failed to request the same gpio twice
and cause fec not work.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
arch/arm/mach-imx/imx8m/soc.c

index d47638e..0be47aa 100644 (file)
@@ -1152,36 +1152,36 @@ static int disable_cpu_nodes(void *blob, u32 disabled_cores)
        return 0;
 }
 
-#if defined(CONFIG_IMX8MM)
 static int cleanup_nodes_for_efi(void *blob)
 {
-       static const char * const usbotg_path[] = {
-               "/soc@0/bus@32c00000/usb@32e40000",
-               "/soc@0/bus@32c00000/usb@32e50000"
-               };
+       static const char * const path[][2] = {
+               { "/soc@0/bus@32c00000/usb@32e40000", "extcon" },
+               { "/soc@0/bus@32c00000/usb@32e50000", "extcon" },
+               { "/soc@0/bus@30800000/ethernet@30be0000", "phy-reset-gpios" },
+               { "/soc@0/bus@30800000/ethernet@30bf0000", "phy-reset-gpios" }
+       };
        int nodeoff, i, rc;
 
-       for (i = 0; i < ARRAY_SIZE(usbotg_path); i++) {
-               nodeoff = fdt_path_offset(blob, usbotg_path[i]);
+       for (i = 0; i < ARRAY_SIZE(path); i++) {
+               nodeoff = fdt_path_offset(blob, path[i][0]);
                if (nodeoff < 0)
                        continue; /* Not found, skip it */
-               debug("Found %s node\n", usbotg_path[i]);
+               debug("Found %s node\n", path[i][0]);
 
-               rc = fdt_delprop(blob, nodeoff, "extcon");
+               rc = fdt_delprop(blob, nodeoff, path[i][1]);
                if (rc == -FDT_ERR_NOTFOUND)
                        continue;
                if (rc) {
                        printf("Unable to update property %s:%s, err=%s\n",
-                              usbotg_path[i], "extcon", fdt_strerror(rc));
+                              path[i][0], path[i][1], fdt_strerror(rc));
                        return rc;
                }
 
-               printf("Remove %s:%s\n", usbotg_path[i], "extcon");
+               printf("Remove %s:%s\n", path[i][0], path[i][1]);
        }
 
        return 0;
 }
-#endif
 
 int ft_system_setup(void *blob, struct bd_info *bd)
 {
@@ -1277,8 +1277,6 @@ usb_modify_speed:
        else if (is_imx8mms() || is_imx8mmsl())
                disable_cpu_nodes(blob, 3);
 
-       cleanup_nodes_for_efi(blob);
-
 #elif defined(CONFIG_IMX8MN)
        if (is_imx8mnl() || is_imx8mndl() ||  is_imx8mnsl())
                disable_gpu_nodes(blob);
@@ -1326,6 +1324,7 @@ usb_modify_speed:
                disable_cpu_nodes(blob, 2);
 #endif
 
+       cleanup_nodes_for_efi(blob);
        return 0;
 }
 #endif