Skip to content

Commit

Permalink
niu: Determine the # of ports from the card's VPD data
Browse files Browse the repository at this point in the history
Determine the number of physical ports from the card's VPD data.
Previous fix failed on Maramba platform which doesn't have the
"board-model" property. This fix uses the "model" property which
exists on all cards and Neptune based motherboards.

cstyle cleanup included.

Signed-off-by: Matheos Worku <matheos.worku@sun.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Matheos Worku authored and David S. Miller committed May 12, 2008
1 parent 36ca34c commit f9af857
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 32 deletions.
53 changes: 21 additions & 32 deletions drivers/net/niu.c
Original file line number Diff line number Diff line change
Expand Up @@ -865,7 +865,6 @@ static int link_status_1g_serdes(struct niu *np, int *link_up_p)
return 0;
}


static int link_status_10g_serdes(struct niu *np, int *link_up_p)
{
unsigned long flags;
Expand Down Expand Up @@ -900,7 +899,6 @@ static int link_status_10g_serdes(struct niu *np, int *link_up_p)
return 0;
}


static int link_status_1g_rgmii(struct niu *np, int *link_up_p)
{
struct niu_link_config *lp = &np->link_config;
Expand Down Expand Up @@ -957,7 +955,6 @@ static int link_status_1g_rgmii(struct niu *np, int *link_up_p)
return err;
}


static int bcm8704_reset(struct niu *np)
{
int err, limit;
Expand Down Expand Up @@ -1357,8 +1354,6 @@ static int mii_reset(struct niu *np)
return 0;
}



static int xcvr_init_1g_rgmii(struct niu *np)
{
int err;
Expand Down Expand Up @@ -1419,7 +1414,6 @@ static int xcvr_init_1g_rgmii(struct niu *np)
return 0;
}


static int mii_init_common(struct niu *np)
{
struct niu_link_config *lp = &np->link_config;
Expand Down Expand Up @@ -7008,31 +7002,20 @@ static int __devinit niu_phy_type_prop_decode(struct niu *np,
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)
{
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;
} 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;
}

Expand All @@ -7053,8 +7036,8 @@ static void __devinit niu_pci_vpd_validate(struct niu *np)
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_FIBER;
np->flags |= NIU_FLAGS_XCVR_SERDES;
Expand All @@ -7065,7 +7048,7 @@ static void __devinit niu_pci_vpd_validate(struct niu *np)
}
if (np->flags & NIU_FLAGS_10G)
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 |
NIU_FLAGS_HOTPLUG_PHY);
} else if (niu_phy_type_prop_decode(np, np->vpd.phy_type)) {
Expand Down Expand Up @@ -7541,8 +7524,8 @@ static int __devinit walk_phys(struct niu *np, struct niu_parent *parent)
u32 val;
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_1g = 2;
parent->plat_type = PLAT_TYPE_ATCA_CP3220;
Expand All @@ -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, 2) |
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_1g = 0;
parent->num_ports = 2;
Expand Down Expand Up @@ -7946,6 +7929,7 @@ static int __devinit niu_get_of_props(struct niu *np)
struct device_node *dp;
const char *phy_type;
const u8 *mac_addr;
const char *model;
int prop_len;

if (np->parent->plat_type == PLAT_TYPE_NIU)
Expand Down Expand Up @@ -8000,6 +7984,11 @@ static int __devinit niu_get_of_props(struct niu *np)

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;
#else
return -EINVAL;
Expand Down
9 changes: 9 additions & 0 deletions drivers/net/niu.h
Original file line number Diff line number Diff line change
Expand Up @@ -2946,6 +2946,15 @@ struct rx_ring_info {
#define NIU_ALONSO_BM_STR "373-0202"
#define NIU_FOXXY_BM_STR "501-7961"
#define NIU_2XGF_MRVL_BM_STR "SK-6E82"
#define NIU_QGC_LP_MDL_STR "SUNW,pcie-qgc"
#define NIU_2XGF_LP_MDL_STR "SUNW,pcie-2xgf"
#define NIU_QGC_PEM_MDL_STR "SUNW,pcie-qgc-pem"
#define NIU_2XGF_PEM_MDL_STR "SUNW,pcie-2xgf-pem"
#define NIU_ALONSO_MDL_STR "SUNW,CP3220"
#define NIU_KIMI_MDL_STR "SUNW,CP3260"
#define NIU_MARAMBA_MDL_STR "SUNW,pcie-neptune"
#define NIU_FOXXY_MDL_STR "SUNW,pcie-rfem"
#define NIU_2XGF_MRVL_MDL_STR "SysKonnect,pcie-2xgf"

#define NIU_VPD_MIN_MAJOR 3
#define NIU_VPD_MIN_MINOR 4
Expand Down

0 comments on commit f9af857

Please sign in to comment.