diff mbox

[v3,4/5] bgmac: reset all cores on Northstar SoC

Message ID 1388880647-7611-5-git-send-email-hauke@hauke-m.de
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Hauke Mehrtens Jan. 5, 2014, 12:10 a.m. UTC
On the Northstar SoC (BCM4707 and BCM53018) we have to enable all GMAC
cores when we just want to use on. We iterate over all the cores and
activate them.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Acked-by: Rafał Miłecki <zajec5@gmail.com>
---
 drivers/net/ethernet/broadcom/bgmac.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Sergei Shtylyov Jan. 5, 2014, 1:10 p.m. UTC | #1
Hello.

On 05-01-2014 4:10, Hauke Mehrtens wrote:

> On the Northstar SoC (BCM4707 and BCM53018) we have to enable all GMAC
> cores when we just want to use on. We iterate over all the cores and
> activate them.

> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> Acked-by: Rafał Miłecki <zajec5@gmail.com>
> ---
>   drivers/net/ethernet/broadcom/bgmac.c |   21 +++++++++++++++++++++
>   1 file changed, 21 insertions(+)

> diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
> index 88ec69e..2cdacb8 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)
>
>   	bgmac_chip_reset(bgmac);
>
> +	/* For Northstar, we have to take all GMAC core out of reset */
> +	if (core->id.id == BCMA_CHIP_ID_BCM4707 ||
> +	    core->id.id == BCMA_CHIP_ID_BCM53018) {
> +		struct bcma_device *ns_core;
> +		int ns_gmac;
> +
> +		/* Northstar has 4 GMAC cores */
> +		for (ns_gmac = 0; ns_gmac < 4; ns_gmac++) {
> +			/* As northstar requirement, we have to reset all GAMCs

    Sorry for grammar nitpicking but s/GAMCs/GMACs/? And "northstar" probaby 
should be capitalized.

> +			 * before accessing one. bgmac_chip_reset() call
> +			 * bcma_core_enable() for this core. Then the other
> +			 * three GAMCs didn't reset.  We do it here.

    GMACs again?

> +			 */
> +			ns_core = bcma_find_core_unit(core->bus,
> +						      BCMA_CORE_MAC_GBIT,
> +						      ns_gmac);
> +			if (ns_core && !bcma_core_is_enabled(ns_core))
> +				bcma_core_enable(ns_core, 0);
> +		}
> +	}
> +

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
index 88ec69e..2cdacb8 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)
 
 	bgmac_chip_reset(bgmac);
 
+	/* For Northstar, we have to take all GMAC core out of reset */
+	if (core->id.id == BCMA_CHIP_ID_BCM4707 ||
+	    core->id.id == BCMA_CHIP_ID_BCM53018) {
+		struct bcma_device *ns_core;
+		int ns_gmac;
+
+		/* Northstar has 4 GMAC cores */
+		for (ns_gmac = 0; ns_gmac < 4; ns_gmac++) {
+			/* As northstar requirement, we have to reset all GAMCs
+			 * before accessing one. bgmac_chip_reset() call
+			 * bcma_core_enable() for this core. Then the other
+			 * three GAMCs didn't reset.  We do it here.
+			 */
+			ns_core = bcma_find_core_unit(core->bus,
+						      BCMA_CORE_MAC_GBIT,
+						      ns_gmac);
+			if (ns_core && !bcma_core_is_enabled(ns_core))
+				bcma_core_enable(ns_core, 0);
+		}
+	}
+
 	err = bgmac_dma_alloc(bgmac);
 	if (err) {
 		bgmac_err(bgmac, "Unable to alloc memory for DMA\n");