Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1686846 > unrolled thread

[PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional

Started byAbhishek Shah <abhishek.shah@broadcom.com>
First post2017-07-13 21:10 +0200
Last post2017-07-17 21:10 +0200
Articles 4 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional Abhishek Shah <abhishek.shah@broadcom.com> - 2017-07-13 21:10 +0200
    Re: [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional Jon Mason <jon.mason@broadcom.com> - 2017-07-17 17:10 +0200
      Re: [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional Abhishek Shah <abhishek.shah@broadcom.com> - 2017-07-17 20:40 +0200
        Re: [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional Jon Mason <jon.mason@broadcom.com> - 2017-07-17 21:10 +0200

#1686846 — [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional

FromAbhishek Shah <abhishek.shah@broadcom.com>
Date2017-07-13 21:10 +0200
Subject[PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional
Message-ID<u2RER-1a4-5@gated-at.bofh.it>
IDM operations are usually one time ops and should be done in
firmware itself. Driver is not supposed to touch IDM registers.

However, for some SoCs', driver is performing IDM read/writes.
So this patch masks IDM operations in case firmware is taking
care of IDM operations.

Signed-off-by: Abhishek Shah <abhishek.shah@broadcom.com>
Reviewed-by: Oza Oza <oza.oza@broadcom.com>
Reviewed-by: Ray Jui <ray.jui@broadcom.com>
Reviewed-by: Scott Branden <scott.branden@broadcom.com>
---
 drivers/net/ethernet/broadcom/bgmac-platform.c | 19 ++++---
 drivers/net/ethernet/broadcom/bgmac.c          | 70 +++++++++++++++-----------
 drivers/net/ethernet/broadcom/bgmac.h          |  1 +
 3 files changed, 55 insertions(+), 35 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bgmac-platform.c b/drivers/net/ethernet/broadcom/bgmac-platform.c
index 1ca75de..d937083d 100644
--- a/drivers/net/ethernet/broadcom/bgmac-platform.c
+++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
@@ -55,6 +55,9 @@ static void platform_bgmac_idm_write(struct bgmac *bgmac, u16 offset, u32 value)
 
 static bool platform_bgmac_clk_enabled(struct bgmac *bgmac)
 {
+	if (!bgmac->plat.idm_base)
+		return true;
+
 	if ((bgmac_idm_read(bgmac, BCMA_IOCTL) & BGMAC_CLK_EN) != BGMAC_CLK_EN)
 		return false;
 	if (bgmac_idm_read(bgmac, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
@@ -66,6 +69,9 @@ static void platform_bgmac_clk_enable(struct bgmac *bgmac, u32 flags)
 {
 	u32 val;
 
+	if (!bgmac->plat.idm_base)
+		return;
+
 	/* The Reset Control register only contains a single bit to show if the
 	 * controller is currently in reset.  Do a sanity check here, just in
 	 * case the bootloader happened to leave the device in reset.
@@ -180,6 +186,7 @@ static int bgmac_probe(struct platform_device *pdev)
 	bgmac->feature_flags |= BGMAC_FEAT_CMDCFG_SR_REV4;
 	bgmac->feature_flags |= BGMAC_FEAT_TX_MASK_SETUP;
 	bgmac->feature_flags |= BGMAC_FEAT_RX_MASK_SETUP;
+	bgmac->feature_flags |= BGMAC_FEAT_IDM_MASK;
 
 	bgmac->dev = &pdev->dev;
 	bgmac->dma_dev = &pdev->dev;
@@ -207,15 +214,13 @@ static int bgmac_probe(struct platform_device *pdev)
 		return PTR_ERR(bgmac->plat.base);
 
 	regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "idm_base");
-	if (!regs) {
-		dev_err(&pdev->dev, "Unable to obtain idm resource\n");
-		return -EINVAL;
+	if (regs) {
+		bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs);
+		if (IS_ERR(bgmac->plat.idm_base))
+			return PTR_ERR(bgmac->plat.idm_base);
+		bgmac->feature_flags &= ~BGMAC_FEAT_IDM_MASK;
 	}
 
-	bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs);
-	if (IS_ERR(bgmac->plat.idm_base))
-		return PTR_ERR(bgmac->plat.idm_base);
-
 	regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "nicpm_base");
 	if (regs) {
 		bgmac->plat.nicpm_base = devm_ioremap_resource(&pdev->dev,
diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
index ba4d2e1..48d672b 100644
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -622,9 +622,11 @@ static int bgmac_dma_alloc(struct bgmac *bgmac)
 	BUILD_BUG_ON(BGMAC_MAX_TX_RINGS > ARRAY_SIZE(ring_base));
 	BUILD_BUG_ON(BGMAC_MAX_RX_RINGS > ARRAY_SIZE(ring_base));
 
-	if (!(bgmac_idm_read(bgmac, BCMA_IOST) & BCMA_IOST_DMA64)) {
-		dev_err(bgmac->dev, "Core does not report 64-bit DMA\n");
-		return -ENOTSUPP;
+	if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
+		if (!(bgmac_idm_read(bgmac, BCMA_IOST) & BCMA_IOST_DMA64)) {
+			dev_err(bgmac->dev, "Core does not report 64-bit DMA\n");
+			return -ENOTSUPP;
+		}
 	}
 
 	for (i = 0; i < BGMAC_MAX_TX_RINGS; i++) {
@@ -855,9 +857,11 @@ static void bgmac_mac_speed(struct bgmac *bgmac)
 static void bgmac_miiconfig(struct bgmac *bgmac)
 {
 	if (bgmac->feature_flags & BGMAC_FEAT_FORCE_SPEED_2500) {
-		bgmac_idm_write(bgmac, BCMA_IOCTL,
-				bgmac_idm_read(bgmac, BCMA_IOCTL) | 0x40 |
-				BGMAC_BCMA_IOCTL_SW_CLKEN);
+		if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
+			bgmac_idm_write(bgmac, BCMA_IOCTL,
+					bgmac_idm_read(bgmac, BCMA_IOCTL) |
+					0x40 | BGMAC_BCMA_IOCTL_SW_CLKEN);
+		}
 		bgmac->mac_speed = SPEED_2500;
 		bgmac->mac_duplex = DUPLEX_FULL;
 		bgmac_mac_speed(bgmac);
@@ -874,11 +878,36 @@ static void bgmac_miiconfig(struct bgmac *bgmac)
 	}
 }
 
+static void bgmac_chip_reset_idm_config(struct bgmac *bgmac)
+{
+	u32 iost;
+
+	iost = bgmac_idm_read(bgmac, BCMA_IOST);
+	if (bgmac->feature_flags & BGMAC_FEAT_IOST_ATTACHED)
+		iost &= ~BGMAC_BCMA_IOST_ATTACHED;
+
+	/* 3GMAC: for BCM4707 & BCM47094, only do core reset at bgmac_probe() */
+	if (!(bgmac->feature_flags & BGMAC_FEAT_NO_RESET)) {
+		u32 flags = 0;
+
+		if (iost & BGMAC_BCMA_IOST_ATTACHED) {
+			flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
+			if (!bgmac->has_robosw)
+				flags |= BGMAC_BCMA_IOCTL_SW_RESET;
+		}
+		bgmac_clk_enable(bgmac, flags);
+	}
+
+	if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
+		bgmac_idm_write(bgmac, BCMA_IOCTL,
+				bgmac_idm_read(bgmac, BCMA_IOCTL) &
+				~BGMAC_BCMA_IOCTL_SW_RESET);
+}
+
 /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipreset */
 static void bgmac_chip_reset(struct bgmac *bgmac)
 {
 	u32 cmdcfg_sr;
-	u32 iost;
 	int i;
 
 	if (bgmac_clk_enabled(bgmac)) {
@@ -899,20 +928,8 @@ static void bgmac_chip_reset(struct bgmac *bgmac)
 		/* TODO: Clear software multicast filter list */
 	}
 
-	iost = bgmac_idm_read(bgmac, BCMA_IOST);
-	if (bgmac->feature_flags & BGMAC_FEAT_IOST_ATTACHED)
-		iost &= ~BGMAC_BCMA_IOST_ATTACHED;
-
-	/* 3GMAC: for BCM4707 & BCM47094, only do core reset at bgmac_probe() */
-	if (!(bgmac->feature_flags & BGMAC_FEAT_NO_RESET)) {
-		u32 flags = 0;
-		if (iost & BGMAC_BCMA_IOST_ATTACHED) {
-			flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
-			if (!bgmac->has_robosw)
-				flags |= BGMAC_BCMA_IOCTL_SW_RESET;
-		}
-		bgmac_clk_enable(bgmac, flags);
-	}
+	if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK))
+		bgmac_chip_reset_idm_config(bgmac);
 
 	/* Request Misc PLL for corerev > 2 */
 	if (bgmac->feature_flags & BGMAC_FEAT_MISC_PLL_REQ) {
@@ -970,11 +987,6 @@ static void bgmac_chip_reset(struct bgmac *bgmac)
 				      BGMAC_CHIPCTL_7_IF_TYPE_RGMII);
 	}
 
-	if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
-		bgmac_idm_write(bgmac, BCMA_IOCTL,
-				bgmac_idm_read(bgmac, BCMA_IOCTL) &
-				~BGMAC_BCMA_IOCTL_SW_RESET);
-
 	/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/gmac_reset
 	 * Specs don't say about using BGMAC_CMDCFG_SR, but in this routine
 	 * BGMAC_CMDCFG is read _after_ putting chip in a reset. So it has to
@@ -1497,8 +1509,10 @@ int bgmac_enet_probe(struct bgmac *bgmac)
 	bgmac_clk_enable(bgmac, 0);
 
 	/* This seems to be fixing IRQ by assigning OOB #6 to the core */
-	if (bgmac->feature_flags & BGMAC_FEAT_IRQ_ID_OOB_6)
-		bgmac_idm_write(bgmac, BCMA_OOB_SEL_OUT_A30, 0x86);
+	if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
+		if (bgmac->feature_flags & BGMAC_FEAT_IRQ_ID_OOB_6)
+			bgmac_idm_write(bgmac, BCMA_OOB_SEL_OUT_A30, 0x86);
+	}
 
 	bgmac_chip_reset(bgmac);
 
diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h
index c181876..443d57b 100644
--- a/drivers/net/ethernet/broadcom/bgmac.h
+++ b/drivers/net/ethernet/broadcom/bgmac.h
@@ -425,6 +425,7 @@
 #define BGMAC_FEAT_CC4_IF_SW_TYPE	BIT(17)
 #define BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII	BIT(18)
 #define BGMAC_FEAT_CC7_IF_TYPE_RGMII	BIT(19)
+#define BGMAC_FEAT_IDM_MASK		BIT(20)
 
 struct bgmac_slot_info {
 	union {
-- 
2.7.4

[toc] | [next] | [standalone]


#1689160

FromJon Mason <jon.mason@broadcom.com>
Date2017-07-17 17:10 +0200
Message-ID<u4fOO-6GU-19@gated-at.bofh.it>
In reply to#1686846
On Thu, Jul 13, 2017 at 3:04 PM, Abhishek Shah
<abhishek.shah@broadcom.com> wrote:
> IDM operations are usually one time ops and should be done in
> firmware itself. Driver is not supposed to touch IDM registers.
>
> However, for some SoCs', driver is performing IDM read/writes.
> So this patch masks IDM operations in case firmware is taking
> care of IDM operations.
>
> Signed-off-by: Abhishek Shah <abhishek.shah@broadcom.com>
> Reviewed-by: Oza Oza <oza.oza@broadcom.com>
> Reviewed-by: Ray Jui <ray.jui@broadcom.com>
> Reviewed-by: Scott Branden <scott.branden@broadcom.com>
> ---
>  drivers/net/ethernet/broadcom/bgmac-platform.c | 19 ++++---
>  drivers/net/ethernet/broadcom/bgmac.c          | 70 +++++++++++++++-----------
>  drivers/net/ethernet/broadcom/bgmac.h          |  1 +
>  3 files changed, 55 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/bgmac-platform.c b/drivers/net/ethernet/broadcom/bgmac-platform.c
> index 1ca75de..d937083d 100644
> --- a/drivers/net/ethernet/broadcom/bgmac-platform.c
> +++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
> @@ -55,6 +55,9 @@ static void platform_bgmac_idm_write(struct bgmac *bgmac, u16 offset, u32 value)
>
>  static bool platform_bgmac_clk_enabled(struct bgmac *bgmac)
>  {
> +       if (!bgmac->plat.idm_base)
> +               return true;
> +
>         if ((bgmac_idm_read(bgmac, BCMA_IOCTL) & BGMAC_CLK_EN) != BGMAC_CLK_EN)
>                 return false;
>         if (bgmac_idm_read(bgmac, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
> @@ -66,6 +69,9 @@ static void platform_bgmac_clk_enable(struct bgmac *bgmac, u32 flags)
>  {
>         u32 val;
>
> +       if (!bgmac->plat.idm_base)
> +               return;
> +
>         /* The Reset Control register only contains a single bit to show if the
>          * controller is currently in reset.  Do a sanity check here, just in
>          * case the bootloader happened to leave the device in reset.
> @@ -180,6 +186,7 @@ static int bgmac_probe(struct platform_device *pdev)
>         bgmac->feature_flags |= BGMAC_FEAT_CMDCFG_SR_REV4;
>         bgmac->feature_flags |= BGMAC_FEAT_TX_MASK_SETUP;
>         bgmac->feature_flags |= BGMAC_FEAT_RX_MASK_SETUP;
> +       bgmac->feature_flags |= BGMAC_FEAT_IDM_MASK;
>
>         bgmac->dev = &pdev->dev;
>         bgmac->dma_dev = &pdev->dev;
> @@ -207,15 +214,13 @@ static int bgmac_probe(struct platform_device *pdev)
>                 return PTR_ERR(bgmac->plat.base);
>
>         regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "idm_base");
> -       if (!regs) {
> -               dev_err(&pdev->dev, "Unable to obtain idm resource\n");
> -               return -EINVAL;
> +       if (regs) {
> +               bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs);
> +               if (IS_ERR(bgmac->plat.idm_base))
> +                       return PTR_ERR(bgmac->plat.idm_base);
> +               bgmac->feature_flags &= ~BGMAC_FEAT_IDM_MASK;
>         }
>
> -       bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs);
> -       if (IS_ERR(bgmac->plat.idm_base))
> -               return PTR_ERR(bgmac->plat.idm_base);
> -
>         regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "nicpm_base");
>         if (regs) {
>                 bgmac->plat.nicpm_base = devm_ioremap_resource(&pdev->dev,
> diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
> index ba4d2e1..48d672b 100644
> --- a/drivers/net/ethernet/broadcom/bgmac.c
> +++ b/drivers/net/ethernet/broadcom/bgmac.c
> @@ -622,9 +622,11 @@ static int bgmac_dma_alloc(struct bgmac *bgmac)
>         BUILD_BUG_ON(BGMAC_MAX_TX_RINGS > ARRAY_SIZE(ring_base));
>         BUILD_BUG_ON(BGMAC_MAX_RX_RINGS > ARRAY_SIZE(ring_base));
>
> -       if (!(bgmac_idm_read(bgmac, BCMA_IOST) & BCMA_IOST_DMA64)) {
> -               dev_err(bgmac->dev, "Core does not report 64-bit DMA\n");
> -               return -ENOTSUPP;
> +       if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
> +               if (!(bgmac_idm_read(bgmac, BCMA_IOST) & BCMA_IOST_DMA64)) {
> +                       dev_err(bgmac->dev, "Core does not report 64-bit DMA\n");
> +                       return -ENOTSUPP;
> +               }
>         }
>
>         for (i = 0; i < BGMAC_MAX_TX_RINGS; i++) {
> @@ -855,9 +857,11 @@ static void bgmac_mac_speed(struct bgmac *bgmac)
>  static void bgmac_miiconfig(struct bgmac *bgmac)
>  {
>         if (bgmac->feature_flags & BGMAC_FEAT_FORCE_SPEED_2500) {
> -               bgmac_idm_write(bgmac, BCMA_IOCTL,
> -                               bgmac_idm_read(bgmac, BCMA_IOCTL) | 0x40 |
> -                               BGMAC_BCMA_IOCTL_SW_CLKEN);
> +               if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
> +                       bgmac_idm_write(bgmac, BCMA_IOCTL,
> +                                       bgmac_idm_read(bgmac, BCMA_IOCTL) |
> +                                       0x40 | BGMAC_BCMA_IOCTL_SW_CLKEN);
> +               }
>                 bgmac->mac_speed = SPEED_2500;
>                 bgmac->mac_duplex = DUPLEX_FULL;
>                 bgmac_mac_speed(bgmac);
> @@ -874,11 +878,36 @@ static void bgmac_miiconfig(struct bgmac *bgmac)
>         }
>  }
>
> +static void bgmac_chip_reset_idm_config(struct bgmac *bgmac)
> +{
> +       u32 iost;
> +
> +       iost = bgmac_idm_read(bgmac, BCMA_IOST);
> +       if (bgmac->feature_flags & BGMAC_FEAT_IOST_ATTACHED)
> +               iost &= ~BGMAC_BCMA_IOST_ATTACHED;
> +
> +       /* 3GMAC: for BCM4707 & BCM47094, only do core reset at bgmac_probe() */
> +       if (!(bgmac->feature_flags & BGMAC_FEAT_NO_RESET)) {
> +               u32 flags = 0;
> +
> +               if (iost & BGMAC_BCMA_IOST_ATTACHED) {
> +                       flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
> +                       if (!bgmac->has_robosw)
> +                               flags |= BGMAC_BCMA_IOCTL_SW_RESET;
> +               }
> +               bgmac_clk_enable(bgmac, flags);
> +       }
> +
> +       if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
> +               bgmac_idm_write(bgmac, BCMA_IOCTL,
> +                               bgmac_idm_read(bgmac, BCMA_IOCTL) &
> +                               ~BGMAC_BCMA_IOCTL_SW_RESET);
> +}
> +
>  /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipreset */
>  static void bgmac_chip_reset(struct bgmac *bgmac)
>  {
>         u32 cmdcfg_sr;
> -       u32 iost;
>         int i;
>
>         if (bgmac_clk_enabled(bgmac)) {
> @@ -899,20 +928,8 @@ static void bgmac_chip_reset(struct bgmac *bgmac)
>                 /* TODO: Clear software multicast filter list */
>         }
>
> -       iost = bgmac_idm_read(bgmac, BCMA_IOST);
> -       if (bgmac->feature_flags & BGMAC_FEAT_IOST_ATTACHED)
> -               iost &= ~BGMAC_BCMA_IOST_ATTACHED;
> -
> -       /* 3GMAC: for BCM4707 & BCM47094, only do core reset at bgmac_probe() */
> -       if (!(bgmac->feature_flags & BGMAC_FEAT_NO_RESET)) {
> -               u32 flags = 0;
> -               if (iost & BGMAC_BCMA_IOST_ATTACHED) {
> -                       flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
> -                       if (!bgmac->has_robosw)
> -                               flags |= BGMAC_BCMA_IOCTL_SW_RESET;
> -               }
> -               bgmac_clk_enable(bgmac, flags);
> -       }
> +       if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK))
> +               bgmac_chip_reset_idm_config(bgmac);
>
>         /* Request Misc PLL for corerev > 2 */
>         if (bgmac->feature_flags & BGMAC_FEAT_MISC_PLL_REQ) {
> @@ -970,11 +987,6 @@ static void bgmac_chip_reset(struct bgmac *bgmac)
>                                       BGMAC_CHIPCTL_7_IF_TYPE_RGMII);
>         }
>
> -       if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
> -               bgmac_idm_write(bgmac, BCMA_IOCTL,
> -                               bgmac_idm_read(bgmac, BCMA_IOCTL) &
> -                               ~BGMAC_BCMA_IOCTL_SW_RESET);
> -
>         /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/gmac_reset
>          * Specs don't say about using BGMAC_CMDCFG_SR, but in this routine
>          * BGMAC_CMDCFG is read _after_ putting chip in a reset. So it has to
> @@ -1497,8 +1509,10 @@ int bgmac_enet_probe(struct bgmac *bgmac)
>         bgmac_clk_enable(bgmac, 0);
>
>         /* This seems to be fixing IRQ by assigning OOB #6 to the core */
> -       if (bgmac->feature_flags & BGMAC_FEAT_IRQ_ID_OOB_6)
> -               bgmac_idm_write(bgmac, BCMA_OOB_SEL_OUT_A30, 0x86);
> +       if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
> +               if (bgmac->feature_flags & BGMAC_FEAT_IRQ_ID_OOB_6)
> +                       bgmac_idm_write(bgmac, BCMA_OOB_SEL_OUT_A30, 0x86);
> +       }
>
>         bgmac_chip_reset(bgmac);
>
> diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h
> index c181876..443d57b 100644
> --- a/drivers/net/ethernet/broadcom/bgmac.h
> +++ b/drivers/net/ethernet/broadcom/bgmac.h
> @@ -425,6 +425,7 @@
>  #define BGMAC_FEAT_CC4_IF_SW_TYPE      BIT(17)
>  #define BGMAC_FEAT_CC4_IF_SW_TYPE_RGMII        BIT(18)
>  #define BGMAC_FEAT_CC7_IF_TYPE_RGMII   BIT(19)
> +#define BGMAC_FEAT_IDM_MASK            BIT(20)

This also will need to be added to
drivers/net/ethernet/broadcom/bgmac-bcma.c.  Otherwise, the driver
will no longer work for those platforms.  Since this was already
accepted, please push out a fix ASAP.

Thanks,
Jon

>
>  struct bgmac_slot_info {
>         union {
> --
> 2.7.4
>

[toc] | [prev] | [next] | [standalone]


#1689344

FromAbhishek Shah <abhishek.shah@broadcom.com>
Date2017-07-17 20:40 +0200
Message-ID<u4j62-aL-17@gated-at.bofh.it>
In reply to#1689160
Hi Jon,

> This also will need to be added to
> drivers/net/ethernet/broadcom/bgmac-bcma.c.  Otherwise, the driver
> will no longer work for those platforms.  Since this was already
> accepted, please push out a fix ASAP.
>
I do not see how the bcma driver [bgmac-bcma.c] will no longer work.
The whole idea behind introducing this  BGMAC_FEAT_IDM_MASK bit
was to keep bcma driver's functionality intact.

The BGMAC_FEAT_IDM_MASK bit is explicitly set by the bgmac-platform driver
and is unset inside the same if the idm register base is provided.

For BCMA driver case, I do not touch BGMAC_FEAT_IDM_MASK bit, i.e. it
is *not* set.
And if it is not set, each idm operation done in bgmac.c will take place.
Please explain if I am missing something here.


Regards,
Abhishek

[toc] | [prev] | [next] | [standalone]


#1689368

FromJon Mason <jon.mason@broadcom.com>
Date2017-07-17 21:10 +0200
Message-ID<u4jz4-zE-17@gated-at.bofh.it>
In reply to#1689344
On Mon, Jul 17, 2017 at 2:37 PM, Abhishek Shah
<abhishek.shah@broadcom.com> wrote:
> Hi Jon,
>
>> This also will need to be added to
>> drivers/net/ethernet/broadcom/bgmac-bcma.c.  Otherwise, the driver
>> will no longer work for those platforms.  Since this was already
>> accepted, please push out a fix ASAP.
>>
> I do not see how the bcma driver [bgmac-bcma.c] will no longer work.
> The whole idea behind introducing this  BGMAC_FEAT_IDM_MASK bit
> was to keep bcma driver's functionality intact.
>
> The BGMAC_FEAT_IDM_MASK bit is explicitly set by the bgmac-platform driver
> and is unset inside the same if the idm register base is provided.
>
> For BCMA driver case, I do not touch BGMAC_FEAT_IDM_MASK bit, i.e. it
> is *not* set.
> And if it is not set, each idm operation done in bgmac.c will take place.
> Please explain if I am missing something here.

Sorry, I had it flipped in my mind.  Please disregard.

>
>
> Regards,
> Abhishek

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web