powerpc/b4860qds: add xfi support
authorShaohui Xie <Shaohui.Xie@freescale.com>
Thu, 13 Nov 2014 03:26:19 +0000 (11:26 +0800)
committerYork Sun <yorksun@freescale.com>
Fri, 5 Dec 2014 16:06:13 +0000 (08:06 -0800)
We need following changes to make xfi work on B4:
1. set cross-point switch VSC3308 to use sfp config when running xfi;
2. add 10G interface check for xfi;
3. set phy address for xfi so the 10G ports can be registered by mdio;

Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
board/freescale/b4860qds/b4860qds.c
board/freescale/b4860qds/eth_b4860qds.c
drivers/net/fm/b4860.c

index b3a1e753f1c917b4820c27f5fca623c520b23ae0..87dcc10f1a0182b571f01f00f6240c3399af12e6 100644 (file)
@@ -490,6 +490,9 @@ int configure_vsc3316_3308(void)
                return -1;
        }
 
+       num_vsc08_con = NUM_CON_VSC3308;
+       /* Configure VSC3308 crossbar switch */
+       ret = select_i2c_ch_pca(I2C_CH_VSC3308);
        switch (serdes2_prtcl) {
 #ifdef CONFIG_PPC_B4420
        case 0x9d:
@@ -497,18 +500,11 @@ int configure_vsc3316_3308(void)
        case 0x9E:
        case 0x9A:
        case 0x98:
-       case 0xb1:
-       case 0xb2:
        case 0x48:
        case 0x49:
        case 0x4E:
-       case 0x8C:
-       case 0x8D:
        case 0x79:
        case 0x7A:
-               num_vsc08_con = NUM_CON_VSC3308;
-               /* Configure VSC3308 crossbar switch */
-               ret = select_i2c_ch_pca(I2C_CH_VSC3308);
                if (!ret) {
                        ret = vsc3308_config(VSC3308_TX_ADDRESS,
                                        vsc08_tx_amc, num_vsc08_con);
@@ -522,6 +518,36 @@ int configure_vsc3316_3308(void)
                        return ret;
                }
                break;
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+       case 0x8a:
+       case 0x8b:
+       case 0x8c:
+       case 0x8d:
+       case 0x8e:
+       case 0xb1:
+       case 0xb2:
+               if (!ret) {
+                       ret = vsc3308_config(VSC3308_TX_ADDRESS,
+                                       vsc08_tx_sfp, num_vsc08_con);
+                       if (ret)
+                               return ret;
+                       ret = vsc3308_config(VSC3308_RX_ADDRESS,
+                                       vsc08_rx_sfp, num_vsc08_con);
+                       if (ret)
+                               return ret;
+               } else {
+                       return ret;
+               }
+               break;
        default:
                printf("WARNING:VSC crossbars programming not supported for: %x"
                                        " SerDes2 Protocol.\n", serdes2_prtcl);
index 2726cd2d473adafa5fe96bdb11579b1f63bf1633..aa48b5e654c56d9cc9bd2865d7ae9813366e8240 100644 (file)
@@ -268,6 +268,12 @@ int board_eth_init(bd_t *bis)
                                CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR);
                fm_info_set_phy_address(FM1_DTSEC4,
                                CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR);
+               /*
+                * XFI does not need a PHY to work, but to make U-boot
+                * happy, assign a fake PHY address for a XFI port.
+                */
+               fm_info_set_phy_address(FM1_10GEC1, 0);
+               fm_info_set_phy_address(FM1_10GEC2, 1);
                break;
        case 0x98:
                /* XAUI in Slot1 and Slot2 */
index 373cc4f4242cd28ee55512786adb139a4f807b66..71285a883dfaac2d93605a47ffaf7c341097ec63 100644 (file)
@@ -52,7 +52,9 @@ phy_interface_t fman_port_enet_if(enum fm_port port)
        /*B4860 has two 10Gig Mac*/
        if ((port == FM1_10GEC1 || port == FM1_10GEC2)  &&
            ((is_serdes_configured(XAUI_FM1_MAC9))      ||
-           (is_serdes_configured(XAUI_FM1_MAC10))))
+            (is_serdes_configured(XAUI_FM1_MAC10))     ||
+            (is_serdes_configured(XFI_FM1_MAC9))       ||
+            (is_serdes_configured(XFI_FM1_MAC10))))
                return PHY_INTERFACE_MODE_XGMII;
 
        /* Fix me need to handle RGMII here first */