Commit cb1b0f90 authored by Jon Mason's avatar Jon Mason Committed by David S. Miller

net: ethernet: bgmac: unify code of the same family

BCM471X and BCM535X are of the same family (from what I can derive from
internal documents).  Group them into the case statement together, which
results in more code reuse.

Also, use existing helper variables to make the code a little more
readable too.
Signed-off-by: default avatarJon Mason <jon.mason@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 02083c3a
...@@ -192,36 +192,50 @@ static int bgmac_probe(struct bcma_device *core) ...@@ -192,36 +192,50 @@ static int bgmac_probe(struct bcma_device *core)
goto err1; goto err1;
} }
bgmac->has_robosw = !!(core->bus->sprom.boardflags_lo & bgmac->has_robosw = !!(sprom->boardflags_lo & BGMAC_BFL_ENETROBO);
BGMAC_BFL_ENETROBO);
if (bgmac->has_robosw) if (bgmac->has_robosw)
dev_warn(bgmac->dev, "Support for Roboswitch not implemented\n"); dev_warn(bgmac->dev, "Support for Roboswitch not implemented\n");
if (core->bus->sprom.boardflags_lo & BGMAC_BFL_ENETADM) if (sprom->boardflags_lo & BGMAC_BFL_ENETADM)
dev_warn(bgmac->dev, "Support for ADMtek ethernet switch not implemented\n"); dev_warn(bgmac->dev, "Support for ADMtek ethernet switch not implemented\n");
/* Feature Flags */ /* Feature Flags */
switch (core->bus->chipinfo.id) { switch (ci->id) {
/* BCM 471X/535X family */
case BCMA_CHIP_ID_BCM4716:
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
/* fallthrough */
case BCMA_CHIP_ID_BCM47162:
bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL2;
bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
break;
case BCMA_CHIP_ID_BCM5357: case BCMA_CHIP_ID_BCM5357:
case BCMA_CHIP_ID_BCM53572:
bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK; bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST; bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1; bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1;
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY; bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY;
if (core->bus->chipinfo.pkg == BCMA_PKG_ID_BCM47186) { if (ci->pkg == BCMA_PKG_ID_BCM47188 ||
bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED; ci->pkg == BCMA_PKG_ID_BCM47186) {
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII; bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII;
bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
} }
if (core->bus->chipinfo.pkg == BCMA_PKG_ID_BCM5358) if (ci->pkg == BCMA_PKG_ID_BCM5358)
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_EPHYRMII; bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_EPHYRMII;
break; break;
case BCMA_CHIP_ID_BCM53572: case BCMA_CHIP_ID_BCM53573:
bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST; bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1; bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY; if (ci->pkg == BCMA_PKG_ID_BCM47189)
if (core->bus->chipinfo.pkg == BCMA_PKG_ID_BCM47188) {
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII;
bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED; bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
if (core->core_unit == 0) {
bgmac->feature_flags |= BGMAC_FEAT_CC4_IF_SW_TYPE;
if (ci->pkg == BCMA_PKG_ID_BCM47189)
bgmac->feature_flags |=
BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII;
} else if (core->core_unit == 1) {
bgmac->feature_flags |= BGMAC_FEAT_IRQ_ID_OOB_6;
bgmac->feature_flags |= BGMAC_FEAT_CC7_IF_TYPE_RGMII;
} }
break; break;
case BCMA_CHIP_ID_BCM4749: case BCMA_CHIP_ID_BCM4749:
...@@ -229,18 +243,11 @@ static int bgmac_probe(struct bcma_device *core) ...@@ -229,18 +243,11 @@ static int bgmac_probe(struct bcma_device *core)
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST; bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1; bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL1;
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY; bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_PHY;
if (core->bus->chipinfo.pkg == 10) { if (ci->pkg == 10) {
bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII; bgmac->feature_flags |= BGMAC_FEAT_SW_TYPE_RGMII;
bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED; bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
} }
break; break;
case BCMA_CHIP_ID_BCM4716:
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
/* fallthrough */
case BCMA_CHIP_ID_BCM47162:
bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL2;
bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
break;
/* bcm4707_family */ /* bcm4707_family */
case BCMA_CHIP_ID_BCM4707: case BCMA_CHIP_ID_BCM4707:
case BCMA_CHIP_ID_BCM47094: case BCMA_CHIP_ID_BCM47094:
...@@ -249,21 +256,6 @@ static int bgmac_probe(struct bcma_device *core) ...@@ -249,21 +256,6 @@ static int bgmac_probe(struct bcma_device *core)
bgmac->feature_flags |= BGMAC_FEAT_NO_RESET; bgmac->feature_flags |= BGMAC_FEAT_NO_RESET;
bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500; bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
break; break;
case BCMA_CHIP_ID_BCM53573:
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
if (ci->pkg == BCMA_PKG_ID_BCM47189)
bgmac->feature_flags |= BGMAC_FEAT_IOST_ATTACHED;
if (core->core_unit == 0) {
bgmac->feature_flags |= BGMAC_FEAT_CC4_IF_SW_TYPE;
if (ci->pkg == BCMA_PKG_ID_BCM47189)
bgmac->feature_flags |=
BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII;
} else if (core->core_unit == 1) {
bgmac->feature_flags |= BGMAC_FEAT_IRQ_ID_OOB_6;
bgmac->feature_flags |= BGMAC_FEAT_CC7_IF_TYPE_RGMII;
}
break;
default: default:
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST; bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK; bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment