|
@@ -865,7 +865,6 @@ static int link_status_1g_serdes(struct niu *np, int *link_up_p)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
static int link_status_10g_serdes(struct niu *np, int *link_up_p)
|
|
static int link_status_10g_serdes(struct niu *np, int *link_up_p)
|
|
{
|
|
{
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
@@ -900,7 +899,6 @@ static int link_status_10g_serdes(struct niu *np, int *link_up_p)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
static int link_status_1g_rgmii(struct niu *np, int *link_up_p)
|
|
static int link_status_1g_rgmii(struct niu *np, int *link_up_p)
|
|
{
|
|
{
|
|
struct niu_link_config *lp = &np->link_config;
|
|
struct niu_link_config *lp = &np->link_config;
|
|
@@ -957,7 +955,6 @@ out:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
static int bcm8704_reset(struct niu *np)
|
|
static int bcm8704_reset(struct niu *np)
|
|
{
|
|
{
|
|
int err, limit;
|
|
int err, limit;
|
|
@@ -1357,8 +1354,6 @@ static int mii_reset(struct niu *np)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
static int xcvr_init_1g_rgmii(struct niu *np)
|
|
static int xcvr_init_1g_rgmii(struct niu *np)
|
|
{
|
|
{
|
|
int err;
|
|
int err;
|
|
@@ -1419,7 +1414,6 @@ static int xcvr_init_1g_rgmii(struct niu *np)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
static int mii_init_common(struct niu *np)
|
|
static int mii_init_common(struct niu *np)
|
|
{
|
|
{
|
|
struct niu_link_config *lp = &np->link_config;
|
|
struct niu_link_config *lp = &np->link_config;
|
|
@@ -7008,31 +7002,20 @@ static int __devinit niu_phy_type_prop_decode(struct niu *np,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-/* niu board models have a trailing dash version incremented
|
|
|
|
- * with HW rev change. Need to ingnore the dash version while
|
|
|
|
- * checking for match
|
|
|
|
- *
|
|
|
|
- * for example, for the 10G card the current vpd.board_model
|
|
|
|
- * is 501-5283-04, of which -04 is the dash version and have
|
|
|
|
- * to be ignored
|
|
|
|
- */
|
|
|
|
-static int niu_board_model_match(struct niu *np, const char *model)
|
|
|
|
-{
|
|
|
|
- return !strncmp(np->vpd.board_model, model, strlen(model));
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int niu_pci_vpd_get_nports(struct niu *np)
|
|
static int niu_pci_vpd_get_nports(struct niu *np)
|
|
{
|
|
{
|
|
int ports = 0;
|
|
int ports = 0;
|
|
|
|
|
|
- if ((niu_board_model_match(np, NIU_QGC_LP_BM_STR)) ||
|
|
|
|
- (niu_board_model_match(np, NIU_QGC_PEM_BM_STR)) ||
|
|
|
|
- (niu_board_model_match(np, NIU_ALONSO_BM_STR))) {
|
|
|
|
|
|
+ if ((!strcmp(np->vpd.model, NIU_QGC_LP_MDL_STR)) ||
|
|
|
|
+ (!strcmp(np->vpd.model, NIU_QGC_PEM_MDL_STR)) ||
|
|
|
|
+ (!strcmp(np->vpd.model, NIU_MARAMBA_MDL_STR)) ||
|
|
|
|
+ (!strcmp(np->vpd.model, NIU_KIMI_MDL_STR)) ||
|
|
|
|
+ (!strcmp(np->vpd.model, NIU_ALONSO_MDL_STR))) {
|
|
ports = 4;
|
|
ports = 4;
|
|
- } else if ((niu_board_model_match(np, NIU_2XGF_LP_BM_STR)) ||
|
|
|
|
- (niu_board_model_match(np, NIU_2XGF_PEM_BM_STR)) ||
|
|
|
|
- (niu_board_model_match(np, NIU_FOXXY_BM_STR)) ||
|
|
|
|
- (niu_board_model_match(np, NIU_2XGF_MRVL_BM_STR))) {
|
|
|
|
|
|
+ } else if ((!strcmp(np->vpd.model, NIU_2XGF_LP_MDL_STR)) ||
|
|
|
|
+ (!strcmp(np->vpd.model, NIU_2XGF_PEM_MDL_STR)) ||
|
|
|
|
+ (!strcmp(np->vpd.model, NIU_FOXXY_MDL_STR)) ||
|
|
|
|
+ (!strcmp(np->vpd.model, NIU_2XGF_MRVL_MDL_STR))) {
|
|
ports = 2;
|
|
ports = 2;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -7053,8 +7036,8 @@ static void __devinit niu_pci_vpd_validate(struct niu *np)
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- if (!strcmp(np->vpd.model, "SUNW,CP3220") ||
|
|
|
|
- !strcmp(np->vpd.model, "SUNW,CP3260")) {
|
|
|
|
|
|
+ if (!strcmp(np->vpd.model, NIU_ALONSO_MDL_STR) ||
|
|
|
|
+ !strcmp(np->vpd.model, NIU_KIMI_MDL_STR)) {
|
|
np->flags |= NIU_FLAGS_10G;
|
|
np->flags |= NIU_FLAGS_10G;
|
|
np->flags &= ~NIU_FLAGS_FIBER;
|
|
np->flags &= ~NIU_FLAGS_FIBER;
|
|
np->flags |= NIU_FLAGS_XCVR_SERDES;
|
|
np->flags |= NIU_FLAGS_XCVR_SERDES;
|
|
@@ -7065,7 +7048,7 @@ static void __devinit niu_pci_vpd_validate(struct niu *np)
|
|
}
|
|
}
|
|
if (np->flags & NIU_FLAGS_10G)
|
|
if (np->flags & NIU_FLAGS_10G)
|
|
np->mac_xcvr = MAC_XCVR_XPCS;
|
|
np->mac_xcvr = MAC_XCVR_XPCS;
|
|
- } else if (niu_board_model_match(np, NIU_FOXXY_BM_STR)) {
|
|
|
|
|
|
+ } else if (!strcmp(np->vpd.model, NIU_FOXXY_MDL_STR)) {
|
|
np->flags |= (NIU_FLAGS_10G | NIU_FLAGS_FIBER |
|
|
np->flags |= (NIU_FLAGS_10G | NIU_FLAGS_FIBER |
|
|
NIU_FLAGS_HOTPLUG_PHY);
|
|
NIU_FLAGS_HOTPLUG_PHY);
|
|
} else if (niu_phy_type_prop_decode(np, np->vpd.phy_type)) {
|
|
} else if (niu_phy_type_prop_decode(np, np->vpd.phy_type)) {
|
|
@@ -7541,8 +7524,8 @@ static int __devinit walk_phys(struct niu *np, struct niu_parent *parent)
|
|
u32 val;
|
|
u32 val;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
- if (!strcmp(np->vpd.model, "SUNW,CP3220") ||
|
|
|
|
- !strcmp(np->vpd.model, "SUNW,CP3260")) {
|
|
|
|
|
|
+ if (!strcmp(np->vpd.model, NIU_ALONSO_MDL_STR) ||
|
|
|
|
+ !strcmp(np->vpd.model, NIU_KIMI_MDL_STR)) {
|
|
num_10g = 0;
|
|
num_10g = 0;
|
|
num_1g = 2;
|
|
num_1g = 2;
|
|
parent->plat_type = PLAT_TYPE_ATCA_CP3220;
|
|
parent->plat_type = PLAT_TYPE_ATCA_CP3220;
|
|
@@ -7551,7 +7534,7 @@ static int __devinit walk_phys(struct niu *np, struct niu_parent *parent)
|
|
phy_encode(PORT_TYPE_1G, 1) |
|
|
phy_encode(PORT_TYPE_1G, 1) |
|
|
phy_encode(PORT_TYPE_1G, 2) |
|
|
phy_encode(PORT_TYPE_1G, 2) |
|
|
phy_encode(PORT_TYPE_1G, 3));
|
|
phy_encode(PORT_TYPE_1G, 3));
|
|
- } else if (niu_board_model_match(np, NIU_FOXXY_BM_STR)) {
|
|
|
|
|
|
+ } else if (!strcmp(np->vpd.model, NIU_FOXXY_MDL_STR)) {
|
|
num_10g = 2;
|
|
num_10g = 2;
|
|
num_1g = 0;
|
|
num_1g = 0;
|
|
parent->num_ports = 2;
|
|
parent->num_ports = 2;
|
|
@@ -7946,6 +7929,7 @@ static int __devinit niu_get_of_props(struct niu *np)
|
|
struct device_node *dp;
|
|
struct device_node *dp;
|
|
const char *phy_type;
|
|
const char *phy_type;
|
|
const u8 *mac_addr;
|
|
const u8 *mac_addr;
|
|
|
|
+ const char *model;
|
|
int prop_len;
|
|
int prop_len;
|
|
|
|
|
|
if (np->parent->plat_type == PLAT_TYPE_NIU)
|
|
if (np->parent->plat_type == PLAT_TYPE_NIU)
|
|
@@ -8000,6 +7984,11 @@ static int __devinit niu_get_of_props(struct niu *np)
|
|
|
|
|
|
memcpy(dev->dev_addr, dev->perm_addr, dev->addr_len);
|
|
memcpy(dev->dev_addr, dev->perm_addr, dev->addr_len);
|
|
|
|
|
|
|
|
+ model = of_get_property(dp, "model", &prop_len);
|
|
|
|
+
|
|
|
|
+ if (model)
|
|
|
|
+ strcpy(np->vpd.model, model);
|
|
|
|
+
|
|
return 0;
|
|
return 0;
|
|
#else
|
|
#else
|
|
return -EINVAL;
|
|
return -EINVAL;
|