diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bgmac.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/bgmac.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c index 88ec69e86d2f..2cdacb852e81 100644 --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c | |||
@@ -1446,6 +1446,27 @@ static int bgmac_probe(struct bcma_device *core) | |||
1446 | 1446 | ||
1447 | bgmac_chip_reset(bgmac); | 1447 | bgmac_chip_reset(bgmac); |
1448 | 1448 | ||
1449 | /* For Northstar, we have to take all GMAC core out of reset */ | ||
1450 | if (core->id.id == BCMA_CHIP_ID_BCM4707 || | ||
1451 | core->id.id == BCMA_CHIP_ID_BCM53018) { | ||
1452 | struct bcma_device *ns_core; | ||
1453 | int ns_gmac; | ||
1454 | |||
1455 | /* Northstar has 4 GMAC cores */ | ||
1456 | for (ns_gmac = 0; ns_gmac < 4; ns_gmac++) { | ||
1457 | /* As northstar requirement, we have to reset all GAMCs | ||
1458 | * before accessing one. bgmac_chip_reset() call | ||
1459 | * bcma_core_enable() for this core. Then the other | ||
1460 | * three GAMCs didn't reset. We do it here. | ||
1461 | */ | ||
1462 | ns_core = bcma_find_core_unit(core->bus, | ||
1463 | BCMA_CORE_MAC_GBIT, | ||
1464 | ns_gmac); | ||
1465 | if (ns_core && !bcma_core_is_enabled(ns_core)) | ||
1466 | bcma_core_enable(ns_core, 0); | ||
1467 | } | ||
1468 | } | ||
1469 | |||
1449 | err = bgmac_dma_alloc(bgmac); | 1470 | err = bgmac_dma_alloc(bgmac); |
1450 | if (err) { | 1471 | if (err) { |
1451 | bgmac_err(bgmac, "Unable to alloc memory for DMA\n"); | 1472 | bgmac_err(bgmac, "Unable to alloc memory for DMA\n"); |