* [PATCH 0/3] Extend BGMAC driver for Stingray SoC @ 2017-07-13 19:04 Abhishek Shah 2017-07-13 19:04 ` [PATCH 1/3] net: ethernet: bgmac: Remove unnecessary 'return' from platform_bgmac_idm_write Abhishek Shah ` (3 more replies) 0 siblings, 4 replies; 8+ messages in thread From: Abhishek Shah @ 2017-07-13 19:04 UTC (permalink / raw) To: Rafał Miłecki, Florian Fainelli, David S . Miller, Jon Mason, Rob Herring, Mark Rutland Cc: netdev, linux-kernel, linux-arm-kernel, devicetree, bcm-kernel-feedback-list, Abhishek Shah The patchset extends Broadcom BGMAC driver for Broadcom Stingray SoC. This patchset is based on Linux-4.12 and tested on NS2 and Stingray. Abhishek Shah (3): net: ethernet: bgmac: Remove unnecessary 'return' from platform_bgmac_idm_write net: ethernet: bgmac: Make IDM register space optional in BGMAC driver Documentation: devicetree: net: optional idm regs for bgmac .../devicetree/bindings/net/brcm,amac.txt | 1 + drivers/net/ethernet/broadcom/bgmac-platform.c | 21 ++++--- drivers/net/ethernet/broadcom/bgmac.c | 70 +++++++++++++--------- drivers/net/ethernet/broadcom/bgmac.h | 1 + 4 files changed, 57 insertions(+), 36 deletions(-) -- 2.7.4 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] net: ethernet: bgmac: Remove unnecessary 'return' from platform_bgmac_idm_write 2017-07-13 19:04 [PATCH 0/3] Extend BGMAC driver for Stingray SoC Abhishek Shah @ 2017-07-13 19:04 ` Abhishek Shah 2017-07-13 19:04 ` [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional Abhishek Shah ` (2 subsequent siblings) 3 siblings, 0 replies; 8+ messages in thread From: Abhishek Shah @ 2017-07-13 19:04 UTC (permalink / raw) To: Rafał Miłecki, Florian Fainelli, David S . Miller, Jon Mason, Rob Herring, Mark Rutland Cc: netdev, linux-kernel, linux-arm-kernel, devicetree, bcm-kernel-feedback-list, Abhishek Shah Return type for idm register write callback should be void as 'writel' API is used for write operation. However, there no need to have 'return' in this function. 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bgmac-platform.c b/drivers/net/ethernet/broadcom/bgmac-platform.c index 73aca97..1ca75de 100644 --- a/drivers/net/ethernet/broadcom/bgmac-platform.c +++ b/drivers/net/ethernet/broadcom/bgmac-platform.c @@ -50,7 +50,7 @@ static u32 platform_bgmac_idm_read(struct bgmac *bgmac, u16 offset) static void platform_bgmac_idm_write(struct bgmac *bgmac, u16 offset, u32 value) { - return writel(value, bgmac->plat.idm_base + offset); + writel(value, bgmac->plat.idm_base + offset); } static bool platform_bgmac_clk_enabled(struct bgmac *bgmac) -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional 2017-07-13 19:04 [PATCH 0/3] Extend BGMAC driver for Stingray SoC Abhishek Shah 2017-07-13 19:04 ` [PATCH 1/3] net: ethernet: bgmac: Remove unnecessary 'return' from platform_bgmac_idm_write Abhishek Shah @ 2017-07-13 19:04 ` Abhishek Shah [not found] ` <1499972649-6200-3-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> 2017-07-13 19:04 ` [PATCH 3/3] Documentation: devicetree: net: optional idm regs for bgmac Abhishek Shah [not found] ` <1499972649-6200-1-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> 3 siblings, 1 reply; 8+ messages in thread From: Abhishek Shah @ 2017-07-13 19:04 UTC (permalink / raw) To: Rafał Miłecki, Florian Fainelli, David S . Miller, Jon Mason, Rob Herring, Mark Rutland Cc: netdev, linux-kernel, linux-arm-kernel, devicetree, bcm-kernel-feedback-list, Abhishek Shah 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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
[parent not found: <1499972649-6200-3-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional [not found] ` <1499972649-6200-3-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> @ 2017-07-17 15:04 ` Jon Mason [not found] ` <CAC3K-4o=WRqBv_vTf7QGDYjWzMmVog=63ZbiHbHAuW7zJcsHFQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 8+ messages in thread From: Jon Mason @ 2017-07-17 15:04 UTC (permalink / raw) To: Abhishek Shah Cc: Rafał Miłecki, Florian Fainelli, David S . Miller, Rob Herring, Mark Rutland, Network Development, open list, linux-arm-kernel, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, BCM Kernel Feedback On Thu, Jul 13, 2017 at 3:04 PM, Abhishek Shah <abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> 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-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> > Reviewed-by: Oza Oza <oza.oza-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> > Reviewed-by: Ray Jui <ray.jui-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> > Reviewed-by: Scott Branden <scott.branden-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> > --- > 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 > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <CAC3K-4o=WRqBv_vTf7QGDYjWzMmVog=63ZbiHbHAuW7zJcsHFQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional [not found] ` <CAC3K-4o=WRqBv_vTf7QGDYjWzMmVog=63ZbiHbHAuW7zJcsHFQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2017-07-17 18:37 ` Abhishek Shah [not found] ` <CAKUFe6ad027MAg-A3XO7i1=c-Q623JqMPCKV_+Hi+ZpUojBn-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 8+ messages in thread From: Abhishek Shah @ 2017-07-17 18:37 UTC (permalink / raw) To: Jon Mason Cc: Rafał Miłecki, Florian Fainelli, David S . Miller, Rob Herring, Mark Rutland, Network Development, open list, linux-arm-kernel, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, BCM Kernel Feedback 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 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <CAKUFe6ad027MAg-A3XO7i1=c-Q623JqMPCKV_+Hi+ZpUojBn-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional [not found] ` <CAKUFe6ad027MAg-A3XO7i1=c-Q623JqMPCKV_+Hi+ZpUojBn-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2017-07-17 19:05 ` Jon Mason 0 siblings, 0 replies; 8+ messages in thread From: Jon Mason @ 2017-07-17 19:05 UTC (permalink / raw) To: Abhishek Shah Cc: Rafał Miłecki, Florian Fainelli, David S . Miller, Rob Herring, Mark Rutland, Network Development, open list, linux-arm-kernel, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, BCM Kernel Feedback On Mon, Jul 17, 2017 at 2:37 PM, Abhishek Shah <abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> 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 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] Documentation: devicetree: net: optional idm regs for bgmac 2017-07-13 19:04 [PATCH 0/3] Extend BGMAC driver for Stingray SoC Abhishek Shah 2017-07-13 19:04 ` [PATCH 1/3] net: ethernet: bgmac: Remove unnecessary 'return' from platform_bgmac_idm_write Abhishek Shah 2017-07-13 19:04 ` [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional Abhishek Shah @ 2017-07-13 19:04 ` Abhishek Shah [not found] ` <1499972649-6200-1-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> 3 siblings, 0 replies; 8+ messages in thread From: Abhishek Shah @ 2017-07-13 19:04 UTC (permalink / raw) To: Rafał Miłecki, Florian Fainelli, David S . Miller, Jon Mason, Rob Herring, Mark Rutland Cc: netdev, linux-kernel, linux-arm-kernel, devicetree, bcm-kernel-feedback-list, Abhishek Shah Specifying IDM register space in DT is not mendatory for SoCs where firmware takes care of IDM operations. This patch updates BGMAC driver's DT binding documentation indicating the same. Signed-off-by: Abhishek Shah <abhishek.shah@broadcom.com> Reviewed-by: Ray Jui <ray.jui@broadcom.com> Reviewed-by: Oza Oza <oza.oza@broadcom.com> Reviewed-by: Scott Branden <scott.branden@broadcom.com> --- Documentation/devicetree/bindings/net/brcm,amac.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/net/brcm,amac.txt b/Documentation/devicetree/bindings/net/brcm,amac.txt index 2fefa1a..ad16c1f 100644 --- a/Documentation/devicetree/bindings/net/brcm,amac.txt +++ b/Documentation/devicetree/bindings/net/brcm,amac.txt @@ -11,6 +11,7 @@ Required properties: - reg-names: Names of the registers. "amac_base": Address and length of the GMAC registers "idm_base": Address and length of the GMAC IDM registers + (required for NSP and Northstar2) "nicpm_base": Address and length of the NIC Port Manager registers (required for Northstar2) - interrupts: Interrupt number -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
[parent not found: <1499972649-6200-1-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH 0/3] Extend BGMAC driver for Stingray SoC [not found] ` <1499972649-6200-1-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> @ 2017-07-15 21:30 ` David Miller 0 siblings, 0 replies; 8+ messages in thread From: David Miller @ 2017-07-15 21:30 UTC (permalink / raw) To: abhishek.shah-dY08KVG/lbpWk0Htik3J/w Cc: rafal-g1n6cQUeyibVItvQsEIGlw, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w, jon.mason-dY08KVG/lbpWk0Htik3J/w, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, netdev-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, bcm-kernel-feedback-list-dY08KVG/lbpWk0Htik3J/w From: Abhishek Shah <abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> Date: Fri, 14 Jul 2017 00:34:06 +0530 > The patchset extends Broadcom BGMAC driver for Broadcom Stingray SoC. > > This patchset is based on Linux-4.12 and tested on NS2 and Stingray. Series applied. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-07-17 19:05 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-07-13 19:04 [PATCH 0/3] Extend BGMAC driver for Stingray SoC Abhishek Shah 2017-07-13 19:04 ` [PATCH 1/3] net: ethernet: bgmac: Remove unnecessary 'return' from platform_bgmac_idm_write Abhishek Shah 2017-07-13 19:04 ` [PATCH 2/3] net: ethernet: bgmac: Make IDM register space optional Abhishek Shah [not found] ` <1499972649-6200-3-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> 2017-07-17 15:04 ` Jon Mason [not found] ` <CAC3K-4o=WRqBv_vTf7QGDYjWzMmVog=63ZbiHbHAuW7zJcsHFQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-07-17 18:37 ` Abhishek Shah [not found] ` <CAKUFe6ad027MAg-A3XO7i1=c-Q623JqMPCKV_+Hi+ZpUojBn-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2017-07-17 19:05 ` Jon Mason 2017-07-13 19:04 ` [PATCH 3/3] Documentation: devicetree: net: optional idm regs for bgmac Abhishek Shah [not found] ` <1499972649-6200-1-git-send-email-abhishek.shah-dY08KVG/lbpWk0Htik3J/w@public.gmane.org> 2017-07-15 21:30 ` [PATCH 0/3] Extend BGMAC driver for Stingray SoC David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).