From: jon.mason@broadcom.com (Jon Mason)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 6/7] net: ethernet: bgmac: add NS2 support
Date: Wed, 2 Nov 2016 12:53:20 -0400 [thread overview]
Message-ID: <20161102164952.GA11677@broadcom.com> (raw)
In-Reply-To: <20161101210512.GB27191@broadcom.com>
On Tue, Nov 01, 2016 at 05:05:13PM -0400, Jon Mason wrote:
> On Tue, Nov 01, 2016 at 01:34:30PM -0700, Scott Branden wrote:
> > One change in this patch
> >
> > On 16-11-01 01:04 PM, Jon Mason wrote:
> > >Add support for the variant of amac hardware present in the Broadcom
> > >Northstar2 based SoCs. Northstar2 requires an additional register to be
> > >configured with the port speed/duplexity (NICPM). This can be added to
> > >the link callback to hide it from the instances that do not use this.
> > >Also, clearing of the pending interrupts on init is required due to
> > >observed issues on some platforms.
> > >
> > >Signed-off-by: Jon Mason <jon.mason@broadcom.com>
> > >---
> > > drivers/net/ethernet/broadcom/bgmac-platform.c | 56 +++++++++++++++++++++++++-
> > > drivers/net/ethernet/broadcom/bgmac.c | 3 ++
> > > drivers/net/ethernet/broadcom/bgmac.h | 1 +
> > > 3 files changed, 58 insertions(+), 2 deletions(-)
> > >
> > >diff --git a/drivers/net/ethernet/broadcom/bgmac-platform.c b/drivers/net/ethernet/broadcom/bgmac-platform.c
> > >index aed5dc5..f6d48c7 100644
> > >--- a/drivers/net/ethernet/broadcom/bgmac-platform.c
> > >+++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
> > >@@ -14,12 +14,21 @@
> > > #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> > >
> > > #include <linux/bcma/bcma.h>
> > >+#include <linux/brcmphy.h>
> > > #include <linux/etherdevice.h>
> > > #include <linux/of_address.h>
> > > #include <linux/of_mdio.h>
> > > #include <linux/of_net.h>
> > > #include "bgmac.h"
> > >
> > >+#define NICPM_IOMUX_CTRL 0x00000008
> > >+
> > >+#define NICPM_IOMUX_CTRL_INIT_VAL 0x3196e000
> > >+#define NICPM_IOMUX_CTRL_SPD_SHIFT 10
> > >+#define NICPM_IOMUX_CTRL_SPD_10M 0
> > >+#define NICPM_IOMUX_CTRL_SPD_100M 1
> > >+#define NICPM_IOMUX_CTRL_SPD_1000M 2
> > >+
> > > static u32 platform_bgmac_read(struct bgmac *bgmac, u16 offset)
> > > {
> > > return readl(bgmac->plat.base + offset);
> > >@@ -87,12 +96,46 @@ static void platform_bgmac_cmn_maskset32(struct bgmac *bgmac, u16 offset,
> > > WARN_ON(1);
> > > }
> > >
> > >+static void bgmac_nicpm_speed_set(struct net_device *net_dev)
> > >+{
> > >+ struct bgmac *bgmac = netdev_priv(net_dev);
> > >+ u32 val;
> > >+
> > >+ if (!bgmac->plat.nicpm_base)
> > >+ return;
> > >+
> > >+ val = NICPM_IOMUX_CTRL_INIT_VAL;
> > >+ switch (bgmac->net_dev->phydev->speed) {
> > >+ default:
> > >+ pr_err("Unsupported speed. Defaulting to 1000Mb\n");
> > This should be dev_err
>
> It should probably be netdev_err (and there are a few instances below
> that should probably be changed to netdev_err as well).
Actually, the other instances I referenced above should not be
netdev_err, as they are enountered before the netdev is created. So,
dev_err is correct for them.
That being said, the original pr_err that Scott referenced should be
netdev_err (as it is encountered after the netdev is created). v5 will
make that change.
Thanks,
Jon
>
> Thanks,
> Jon
>
> > >+ case SPEED_1000:
> > >+ val |= NICPM_IOMUX_CTRL_SPD_1000M << NICPM_IOMUX_CTRL_SPD_SHIFT;
> > >+ break;
> > >+ case SPEED_100:
> > >+ val |= NICPM_IOMUX_CTRL_SPD_100M << NICPM_IOMUX_CTRL_SPD_SHIFT;
> > >+ break;
> > >+ case SPEED_10:
> > >+ val |= NICPM_IOMUX_CTRL_SPD_10M << NICPM_IOMUX_CTRL_SPD_SHIFT;
> > >+ break;
> > >+ }
> > >+
> > >+ writel(val, bgmac->plat.nicpm_base + NICPM_IOMUX_CTRL);
> > >+
> > >+ bgmac_adjust_link(bgmac->net_dev);
> > >+}
> > >+
> > > static int platform_phy_connect(struct bgmac *bgmac)
> > > {
> > > struct phy_device *phy_dev;
> > >
> > >- phy_dev = of_phy_get_and_connect(bgmac->net_dev, bgmac->dev->of_node,
> > >- bgmac_adjust_link);
> > >+ if (bgmac->plat.nicpm_base)
> > >+ phy_dev = of_phy_get_and_connect(bgmac->net_dev,
> > >+ bgmac->dev->of_node,
> > >+ bgmac_nicpm_speed_set);
> > >+ else
> > >+ phy_dev = of_phy_get_and_connect(bgmac->net_dev,
> > >+ bgmac->dev->of_node,
> > >+ bgmac_adjust_link);
> > > if (!phy_dev) {
> > > dev_err(bgmac->dev, "Phy connect failed\n");
> > > return -ENODEV;
> > >@@ -182,6 +225,14 @@ static int bgmac_probe(struct platform_device *pdev)
> > > 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,
> > >+ regs);
> > >+ if (IS_ERR(bgmac->plat.nicpm_base))
> > >+ return PTR_ERR(bgmac->plat.nicpm_base);
> > >+ }
> > >+
> > > bgmac->read = platform_bgmac_read;
> > > bgmac->write = platform_bgmac_write;
> > > bgmac->idm_read = platform_bgmac_idm_read;
> > >@@ -213,6 +264,7 @@ static int bgmac_remove(struct platform_device *pdev)
> > > static const struct of_device_id bgmac_of_enet_match[] = {
> > > {.compatible = "brcm,amac",},
> > > {.compatible = "brcm,nsp-amac",},
> > >+ {.compatible = "brcm,ns2-amac",},
> > > {},
> > > };
> > >
> > >diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
> > >index 4584958..a805cc8 100644
> > >--- a/drivers/net/ethernet/broadcom/bgmac.c
> > >+++ b/drivers/net/ethernet/broadcom/bgmac.c
> > >@@ -1082,6 +1082,9 @@ static void bgmac_enable(struct bgmac *bgmac)
> > > /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipinit */
> > > static void bgmac_chip_init(struct bgmac *bgmac)
> > > {
> > >+ /* Clear any erroneously pending interrupts */
> > >+ bgmac_write(bgmac, BGMAC_INT_STATUS, ~0);
> > >+
> > > /* 1 interrupt per received frame */
> > > bgmac_write(bgmac, BGMAC_INT_RECV_LAZY, 1 << BGMAC_IRL_FC_SHIFT);
> > >
> > >diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h
> > >index ea52ac3..b1820ea 100644
> > >--- a/drivers/net/ethernet/broadcom/bgmac.h
> > >+++ b/drivers/net/ethernet/broadcom/bgmac.h
> > >@@ -463,6 +463,7 @@ struct bgmac {
> > > struct {
> > > void *base;
> > > void *idm_base;
> > >+ void *nicpm_base;
> > > } plat;
> > > struct {
> > > struct bcma_device *core;
> > >
WARNING: multiple messages have this Message-ID (diff)
From: Jon Mason <jon.mason@broadcom.com>
To: Scott Branden <scott.branden@broadcom.com>
Cc: David Miller <davem@davemloft.net>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Florian Fainelli <f.fainelli@gmail.com>,
rafal@milecki.pl, bcm-kernel-feedback-list@broadcom.com,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 6/7] net: ethernet: bgmac: add NS2 support
Date: Wed, 2 Nov 2016 12:53:20 -0400 [thread overview]
Message-ID: <20161102164952.GA11677@broadcom.com> (raw)
In-Reply-To: <20161101210512.GB27191@broadcom.com>
On Tue, Nov 01, 2016 at 05:05:13PM -0400, Jon Mason wrote:
> On Tue, Nov 01, 2016 at 01:34:30PM -0700, Scott Branden wrote:
> > One change in this patch
> >
> > On 16-11-01 01:04 PM, Jon Mason wrote:
> > >Add support for the variant of amac hardware present in the Broadcom
> > >Northstar2 based SoCs. Northstar2 requires an additional register to be
> > >configured with the port speed/duplexity (NICPM). This can be added to
> > >the link callback to hide it from the instances that do not use this.
> > >Also, clearing of the pending interrupts on init is required due to
> > >observed issues on some platforms.
> > >
> > >Signed-off-by: Jon Mason <jon.mason@broadcom.com>
> > >---
> > > drivers/net/ethernet/broadcom/bgmac-platform.c | 56 +++++++++++++++++++++++++-
> > > drivers/net/ethernet/broadcom/bgmac.c | 3 ++
> > > drivers/net/ethernet/broadcom/bgmac.h | 1 +
> > > 3 files changed, 58 insertions(+), 2 deletions(-)
> > >
> > >diff --git a/drivers/net/ethernet/broadcom/bgmac-platform.c b/drivers/net/ethernet/broadcom/bgmac-platform.c
> > >index aed5dc5..f6d48c7 100644
> > >--- a/drivers/net/ethernet/broadcom/bgmac-platform.c
> > >+++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
> > >@@ -14,12 +14,21 @@
> > > #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> > >
> > > #include <linux/bcma/bcma.h>
> > >+#include <linux/brcmphy.h>
> > > #include <linux/etherdevice.h>
> > > #include <linux/of_address.h>
> > > #include <linux/of_mdio.h>
> > > #include <linux/of_net.h>
> > > #include "bgmac.h"
> > >
> > >+#define NICPM_IOMUX_CTRL 0x00000008
> > >+
> > >+#define NICPM_IOMUX_CTRL_INIT_VAL 0x3196e000
> > >+#define NICPM_IOMUX_CTRL_SPD_SHIFT 10
> > >+#define NICPM_IOMUX_CTRL_SPD_10M 0
> > >+#define NICPM_IOMUX_CTRL_SPD_100M 1
> > >+#define NICPM_IOMUX_CTRL_SPD_1000M 2
> > >+
> > > static u32 platform_bgmac_read(struct bgmac *bgmac, u16 offset)
> > > {
> > > return readl(bgmac->plat.base + offset);
> > >@@ -87,12 +96,46 @@ static void platform_bgmac_cmn_maskset32(struct bgmac *bgmac, u16 offset,
> > > WARN_ON(1);
> > > }
> > >
> > >+static void bgmac_nicpm_speed_set(struct net_device *net_dev)
> > >+{
> > >+ struct bgmac *bgmac = netdev_priv(net_dev);
> > >+ u32 val;
> > >+
> > >+ if (!bgmac->plat.nicpm_base)
> > >+ return;
> > >+
> > >+ val = NICPM_IOMUX_CTRL_INIT_VAL;
> > >+ switch (bgmac->net_dev->phydev->speed) {
> > >+ default:
> > >+ pr_err("Unsupported speed. Defaulting to 1000Mb\n");
> > This should be dev_err
>
> It should probably be netdev_err (and there are a few instances below
> that should probably be changed to netdev_err as well).
Actually, the other instances I referenced above should not be
netdev_err, as they are enountered before the netdev is created. So,
dev_err is correct for them.
That being said, the original pr_err that Scott referenced should be
netdev_err (as it is encountered after the netdev is created). v5 will
make that change.
Thanks,
Jon
>
> Thanks,
> Jon
>
> > >+ case SPEED_1000:
> > >+ val |= NICPM_IOMUX_CTRL_SPD_1000M << NICPM_IOMUX_CTRL_SPD_SHIFT;
> > >+ break;
> > >+ case SPEED_100:
> > >+ val |= NICPM_IOMUX_CTRL_SPD_100M << NICPM_IOMUX_CTRL_SPD_SHIFT;
> > >+ break;
> > >+ case SPEED_10:
> > >+ val |= NICPM_IOMUX_CTRL_SPD_10M << NICPM_IOMUX_CTRL_SPD_SHIFT;
> > >+ break;
> > >+ }
> > >+
> > >+ writel(val, bgmac->plat.nicpm_base + NICPM_IOMUX_CTRL);
> > >+
> > >+ bgmac_adjust_link(bgmac->net_dev);
> > >+}
> > >+
> > > static int platform_phy_connect(struct bgmac *bgmac)
> > > {
> > > struct phy_device *phy_dev;
> > >
> > >- phy_dev = of_phy_get_and_connect(bgmac->net_dev, bgmac->dev->of_node,
> > >- bgmac_adjust_link);
> > >+ if (bgmac->plat.nicpm_base)
> > >+ phy_dev = of_phy_get_and_connect(bgmac->net_dev,
> > >+ bgmac->dev->of_node,
> > >+ bgmac_nicpm_speed_set);
> > >+ else
> > >+ phy_dev = of_phy_get_and_connect(bgmac->net_dev,
> > >+ bgmac->dev->of_node,
> > >+ bgmac_adjust_link);
> > > if (!phy_dev) {
> > > dev_err(bgmac->dev, "Phy connect failed\n");
> > > return -ENODEV;
> > >@@ -182,6 +225,14 @@ static int bgmac_probe(struct platform_device *pdev)
> > > 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,
> > >+ regs);
> > >+ if (IS_ERR(bgmac->plat.nicpm_base))
> > >+ return PTR_ERR(bgmac->plat.nicpm_base);
> > >+ }
> > >+
> > > bgmac->read = platform_bgmac_read;
> > > bgmac->write = platform_bgmac_write;
> > > bgmac->idm_read = platform_bgmac_idm_read;
> > >@@ -213,6 +264,7 @@ static int bgmac_remove(struct platform_device *pdev)
> > > static const struct of_device_id bgmac_of_enet_match[] = {
> > > {.compatible = "brcm,amac",},
> > > {.compatible = "brcm,nsp-amac",},
> > >+ {.compatible = "brcm,ns2-amac",},
> > > {},
> > > };
> > >
> > >diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
> > >index 4584958..a805cc8 100644
> > >--- a/drivers/net/ethernet/broadcom/bgmac.c
> > >+++ b/drivers/net/ethernet/broadcom/bgmac.c
> > >@@ -1082,6 +1082,9 @@ static void bgmac_enable(struct bgmac *bgmac)
> > > /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipinit */
> > > static void bgmac_chip_init(struct bgmac *bgmac)
> > > {
> > >+ /* Clear any erroneously pending interrupts */
> > >+ bgmac_write(bgmac, BGMAC_INT_STATUS, ~0);
> > >+
> > > /* 1 interrupt per received frame */
> > > bgmac_write(bgmac, BGMAC_INT_RECV_LAZY, 1 << BGMAC_IRL_FC_SHIFT);
> > >
> > >diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h
> > >index ea52ac3..b1820ea 100644
> > >--- a/drivers/net/ethernet/broadcom/bgmac.h
> > >+++ b/drivers/net/ethernet/broadcom/bgmac.h
> > >@@ -463,6 +463,7 @@ struct bgmac {
> > > struct {
> > > void *base;
> > > void *idm_base;
> > >+ void *nicpm_base;
> > > } plat;
> > > struct {
> > > struct bcma_device *core;
> > >
next prev parent reply other threads:[~2016-11-02 16:53 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-01 20:04 [PATCH v4 0/7] add NS2 support to bgmac Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` [PATCH v4 1/7] net: phy: broadcom: add bcm54xx_auxctl_read Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` [PATCH v4 2/7] Documentation: devicetree: add PHY lane swap binding Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:48 ` Andrew Lunn
2016-11-01 20:48 ` Andrew Lunn
2016-11-01 20:48 ` Andrew Lunn
2016-11-01 20:59 ` Jon Mason
2016-11-01 20:59 ` Jon Mason
2016-11-01 20:59 ` Jon Mason
2016-11-01 21:01 ` Scott Branden
2016-11-01 21:01 ` Scott Branden
2016-11-01 21:09 ` Andrew Lunn
2016-11-01 21:09 ` Andrew Lunn
2016-11-01 21:09 ` Andrew Lunn
2016-11-01 20:04 ` [PATCH v4 3/7] net: phy: broadcom: Add BCM54810 PHY entry Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` [PATCH v4 4/7] Documentation: devicetree: net: add NS2 bindings to amac Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` [PATCH v4 5/7] net: ethernet: bgmac: device tree phy enablement Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:04 ` [PATCH v4 6/7] net: ethernet: bgmac: add NS2 support Jon Mason
2016-11-01 20:04 ` Jon Mason
2016-11-01 20:34 ` Scott Branden
2016-11-01 20:34 ` Scott Branden
2016-11-01 21:05 ` Jon Mason
2016-11-01 21:05 ` Jon Mason
2016-11-02 16:53 ` Jon Mason [this message]
2016-11-02 16:53 ` Jon Mason
2016-11-01 20:04 ` [PATCH v4 7/7] arm64: dts: NS2: add AMAC ethernet support Jon Mason
2016-11-01 20:04 ` Jon Mason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161102164952.GA11677@broadcom.com \
--to=jon.mason@broadcom.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.