|
@@ -339,29 +339,41 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
|
|
|
int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
|
|
|
{
|
|
|
unsigned long zmiifer=0x0;
|
|
|
+ unsigned long pfc1;
|
|
|
|
|
|
- /*
|
|
|
- * Right now only 2*RGMII is supported. Please extend when needed.
|
|
|
- * sr - 2006-08-29
|
|
|
- */
|
|
|
- switch (1) {
|
|
|
- case 0:
|
|
|
+ mfsdr(sdr_pfc1, pfc1);
|
|
|
+ pfc1 &= SDR0_PFC1_SELECT_MASK;
|
|
|
+
|
|
|
+ switch (pfc1) {
|
|
|
+ case SDR0_PFC1_SELECT_CONFIG_2:
|
|
|
/* 1 x GMII port */
|
|
|
out32 (ZMII_FER, 0x00);
|
|
|
out32 (RGMII_FER, 0x00000037);
|
|
|
bis->bi_phymode[0] = BI_PHYMODE_GMII;
|
|
|
bis->bi_phymode[1] = BI_PHYMODE_NONE;
|
|
|
break;
|
|
|
- case 1:
|
|
|
+ case SDR0_PFC1_SELECT_CONFIG_4:
|
|
|
/* 2 x RGMII ports */
|
|
|
out32 (ZMII_FER, 0x00);
|
|
|
out32 (RGMII_FER, 0x00000055);
|
|
|
bis->bi_phymode[0] = BI_PHYMODE_RGMII;
|
|
|
bis->bi_phymode[1] = BI_PHYMODE_RGMII;
|
|
|
break;
|
|
|
- case 2:
|
|
|
+ case SDR0_PFC1_SELECT_CONFIG_6:
|
|
|
/* 2 x SMII ports */
|
|
|
-
|
|
|
+ out32 (ZMII_FER,
|
|
|
+ ((ZMII_FER_SMII) << ZMII_FER_V(0)) |
|
|
|
+ ((ZMII_FER_SMII) << ZMII_FER_V(1)));
|
|
|
+ out32 (RGMII_FER, 0x00000000);
|
|
|
+ bis->bi_phymode[0] = BI_PHYMODE_SMII;
|
|
|
+ bis->bi_phymode[1] = BI_PHYMODE_SMII;
|
|
|
+ break;
|
|
|
+ case SDR0_PFC1_SELECT_CONFIG_1_2:
|
|
|
+ /* only 1 x MII supported */
|
|
|
+ out32 (ZMII_FER, (ZMII_FER_MII) << ZMII_FER_V(0));
|
|
|
+ out32 (RGMII_FER, 0x00000000);
|
|
|
+ bis->bi_phymode[0] = BI_PHYMODE_MII;
|
|
|
+ bis->bi_phymode[1] = BI_PHYMODE_NONE;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|