net: phy: delay only if reset handler is registered
[oweals/u-boot.git] / drivers / net / fm / init.c
index 35edd7ad94017ff7cb0f69064d76d0e8ca560da7..9a8a007861435872ca883e087c03284574425b7f 100644 (file)
@@ -6,6 +6,7 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/fsl_serdes.h>
+#include <fsl_mdio.h>
 
 #include "fm.h"
 
@@ -64,6 +65,12 @@ struct fm_eth_info fm_info[] = {
 #if (CONFIG_SYS_NUM_FM1_10GEC >= 2)
        FM_TGEC_INFO_INITIALIZER(1, 2),
 #endif
+#if (CONFIG_SYS_NUM_FM1_10GEC >= 3)
+       FM_TGEC_INFO_INITIALIZER2(1, 3),
+#endif
+#if (CONFIG_SYS_NUM_FM1_10GEC >= 4)
+       FM_TGEC_INFO_INITIALIZER2(1, 4),
+#endif
 #if (CONFIG_SYS_NUM_FM2_10GEC >= 1)
        FM_TGEC_INFO_INITIALIZER(2, 1),
 #endif
@@ -141,6 +148,9 @@ void fm_disable_port(enum fm_port port)
 {
        int i = fm_port_to_index(port);
 
+       if (i == -1)
+               return;
+
        fm_info[i].enabled = 0;
        fman_disable_port(port);
 }
@@ -149,6 +159,9 @@ void fm_enable_port(enum fm_port port)
 {
        int i = fm_port_to_index(port);
 
+       if (i == -1)
+               return;
+
        fm_info[i].enabled = 1;
        fman_enable_port(port);
 }
@@ -234,21 +247,38 @@ static void ft_fixup_port(void *blob, struct fm_eth_info *info, char *prop)
        }
 
 #ifdef CONFIG_SYS_FMAN_V3
+#ifndef CONFIG_FSL_FM_10GEC_REGULAR_NOTATION
        /*
-        * Physically FM1_DTSEC9 and FM1_10GEC1 use the same dual-role MAC, when
-        * FM1_10GEC1 is enabled and  FM1_DTSEC9 is disabled, ensure that the
-        * dual-role MAC is not disabled, ditto for other dual-role MACs.
+        * On T2/T4 SoCs, physically FM1_DTSEC9 and FM1_10GEC1 use the same
+        * dual-role MAC, when FM1_10GEC1 is enabled and  FM1_DTSEC9
+        * is disabled, ensure that the dual-role MAC is not disabled,
+        * ditto for other dual-role MACs.
         */
-       if (((info->port == FM1_DTSEC9) && (PORT_IS_ENABLED(FM1_10GEC1)))       ||
-           ((info->port == FM1_DTSEC10) && (PORT_IS_ENABLED(FM1_10GEC2)))      ||
-           ((info->port == FM1_10GEC1) && (PORT_IS_ENABLED(FM1_DTSEC9)))       ||
-           ((info->port == FM1_10GEC2) && (PORT_IS_ENABLED(FM1_DTSEC10)))
+       if (((info->port == FM1_DTSEC9) && (PORT_IS_ENABLED(FM1_10GEC1)))  ||
+           ((info->port == FM1_DTSEC10) && (PORT_IS_ENABLED(FM1_10GEC2))) ||
+           ((info->port == FM1_DTSEC1) && (PORT_IS_ENABLED(FM1_10GEC3)))  ||
+           ((info->port == FM1_DTSEC2) && (PORT_IS_ENABLED(FM1_10GEC4)))  ||
+           ((info->port == FM1_10GEC1) && (PORT_IS_ENABLED(FM1_DTSEC9)))  ||
+           ((info->port == FM1_10GEC2) && (PORT_IS_ENABLED(FM1_DTSEC10))) ||
+           ((info->port == FM1_10GEC3) && (PORT_IS_ENABLED(FM1_DTSEC1)))  ||
+           ((info->port == FM1_10GEC4) && (PORT_IS_ENABLED(FM1_DTSEC2)))
 #if (CONFIG_SYS_NUM_FMAN == 2)
                                                                                ||
            ((info->port == FM2_DTSEC9) && (PORT_IS_ENABLED(FM2_10GEC1)))       ||
            ((info->port == FM2_DTSEC10) && (PORT_IS_ENABLED(FM2_10GEC2)))      ||
            ((info->port == FM2_10GEC1) && (PORT_IS_ENABLED(FM2_DTSEC9)))       ||
            ((info->port == FM2_10GEC2) && (PORT_IS_ENABLED(FM2_DTSEC10)))
+#endif
+#else
+       /* FM1_DTSECx and FM1_10GECx use the same dual-role MAC */
+       if (((info->port == FM1_DTSEC1) && (PORT_IS_ENABLED(FM1_10GEC1)))  ||
+           ((info->port == FM1_DTSEC2) && (PORT_IS_ENABLED(FM1_10GEC2)))  ||
+           ((info->port == FM1_DTSEC3) && (PORT_IS_ENABLED(FM1_10GEC3)))  ||
+           ((info->port == FM1_DTSEC4) && (PORT_IS_ENABLED(FM1_10GEC4)))  ||
+           ((info->port == FM1_10GEC1) && (PORT_IS_ENABLED(FM1_DTSEC1)))  ||
+           ((info->port == FM1_10GEC2) && (PORT_IS_ENABLED(FM1_DTSEC2)))  ||
+           ((info->port == FM1_10GEC3) && (PORT_IS_ENABLED(FM1_DTSEC3)))  ||
+           ((info->port == FM1_10GEC4) && (PORT_IS_ENABLED(FM1_DTSEC4)))
 #endif
        )
                return;