|
@@ -10,6 +10,7 @@
|
|
|
#include <asm/io.h>
|
|
|
#include <asm/immap_85xx.h>
|
|
|
#include <asm/fsl_serdes.h>
|
|
|
+#include <hwconfig.h>
|
|
|
|
|
|
u32 port_to_devdisr[] = {
|
|
|
[FM1_DTSEC1] = FSL_CORENET_DEVDISR2_DTSEC1_1,
|
|
@@ -46,17 +47,76 @@ void fman_enable_port(enum fm_port port)
|
|
|
|
|
|
phy_interface_t fman_port_enet_if(enum fm_port port)
|
|
|
{
|
|
|
+#if defined(CONFIG_B4860QDS)
|
|
|
+ u32 serdes2_prtcl;
|
|
|
+ char buffer[HWCONFIG_BUFFER_SIZE];
|
|
|
+ char *buf = NULL;
|
|
|
+ ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
|
|
+#endif
|
|
|
+
|
|
|
if (is_device_disabled(port))
|
|
|
return PHY_INTERFACE_MODE_NONE;
|
|
|
|
|
|
/*B4860 has two 10Gig Mac*/
|
|
|
if ((port == FM1_10GEC1 || port == FM1_10GEC2) &&
|
|
|
((is_serdes_configured(XAUI_FM1_MAC9)) ||
|
|
|
- (is_serdes_configured(XAUI_FM1_MAC10)) ||
|
|
|
+ #if !defined(CONFIG_B4860QDS)
|
|
|
(is_serdes_configured(XFI_FM1_MAC9)) ||
|
|
|
- (is_serdes_configured(XFI_FM1_MAC10))))
|
|
|
+ (is_serdes_configured(XFI_FM1_MAC10)) ||
|
|
|
+ #endif
|
|
|
+ (is_serdes_configured(XAUI_FM1_MAC10))
|
|
|
+ ))
|
|
|
return PHY_INTERFACE_MODE_XGMII;
|
|
|
|
|
|
+#if defined(CONFIG_B4860QDS)
|
|
|
+ serdes2_prtcl = in_be32(&gur->rcwsr[4]) &
|
|
|
+ FSL_CORENET2_RCWSR4_SRDS2_PRTCL;
|
|
|
+
|
|
|
+ if (serdes2_prtcl) {
|
|
|
+ serdes2_prtcl >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT;
|
|
|
+ switch (serdes2_prtcl) {
|
|
|
+ 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:
|
|
|
+ /*
|
|
|
+ * Extract hwconfig from environment since environment
|
|
|
+ * is not setup yet
|
|
|
+ */
|
|
|
+ getenv_f("hwconfig", buffer, sizeof(buffer));
|
|
|
+ buf = buffer;
|
|
|
+
|
|
|
+ /* check if XFI interface enable in hwconfig for 10g */
|
|
|
+ if (hwconfig_subarg_cmp_f("fsl_b4860_serdes2",
|
|
|
+ "sfp_amc", "sfp", buf)) {
|
|
|
+ if ((port == FM1_10GEC1 ||
|
|
|
+ port == FM1_10GEC2) &&
|
|
|
+ ((is_serdes_configured(XFI_FM1_MAC9)) ||
|
|
|
+ (is_serdes_configured(XFI_FM1_MAC10))))
|
|
|
+ return PHY_INTERFACE_MODE_XGMII;
|
|
|
+ else if ((port == FM1_DTSEC1) ||
|
|
|
+ (port == FM1_DTSEC2) ||
|
|
|
+ (port == FM1_DTSEC3) ||
|
|
|
+ (port == FM1_DTSEC4))
|
|
|
+ return PHY_INTERFACE_MODE_NONE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
/* Fix me need to handle RGMII here first */
|
|
|
|
|
|
switch (port) {
|