* [U-Boot] [PATCH 0/3] net: macb: add support for gigabit MAC
@ 2013-04-24 7:59 Bo Shen
2013-04-24 7:59 ` [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry Bo Shen
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Bo Shen @ 2013-04-24 7:59 UTC (permalink / raw)
To: u-boot
This patch add macb support for gigabit MAC, will be used by sama5d3.
Tha patch for sama5d3 is in patchwork:
http://patchwork.ozlabs.org/patch/226795/
After this patch is applied, will add gmac support for sama5d3
Bo Shen (3):
net: macb: using AT91FAMILY replace #ifdeferry
net: macb: using phylib to configure phy device
net: macb: add support for gigabit MAC
drivers/net/macb.c | 177 +++++++++++++++++++++++++++++++++++++++-------------
drivers/net/macb.h | 55 ++++++++++++++--
2 files changed, 184 insertions(+), 48 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 10+ messages in thread* [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry 2013-04-24 7:59 [U-Boot] [PATCH 0/3] net: macb: add support for gigabit MAC Bo Shen @ 2013-04-24 7:59 ` Bo Shen 2013-05-08 11:30 ` Andreas Bießmann 2013-06-24 14:57 ` Andreas Bießmann 2013-04-24 7:59 ` [U-Boot] [PATCH 2/3] net: macb: using phylib to configure phy device Bo Shen ` (2 subsequent siblings) 3 siblings, 2 replies; 10+ messages in thread From: Bo Shen @ 2013-04-24 7:59 UTC (permalink / raw) To: u-boot Using CONFIG_AT91FAMILY replace #ifdeferry for atmel SoC Signed-off-by: Bo Shen <voice.shen@atmel.com> --- drivers/net/macb.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index 8bacbda..753fb96 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -466,19 +466,13 @@ static int macb_init(struct eth_device *netdev, bd_t *bd) /* choose RMII or MII mode. This depends on the board */ #ifdef CONFIG_RMII -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) +#ifdef CONFIG_AT91FAMILY macb_writel(macb, USRIO, MACB_BIT(RMII) | MACB_BIT(CLKEN)); #else macb_writel(macb, USRIO, 0); #endif #else -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) +#ifdef CONFIG_AT91FAMILY macb_writel(macb, USRIO, MACB_BIT(CLKEN)); #else macb_writel(macb, USRIO, MACB_BIT(MII)); -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry 2013-04-24 7:59 ` [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry Bo Shen @ 2013-05-08 11:30 ` Andreas Bießmann 2013-06-24 14:57 ` Andreas Bießmann 1 sibling, 0 replies; 10+ messages in thread From: Andreas Bießmann @ 2013-05-08 11:30 UTC (permalink / raw) To: u-boot On 04/24/2013 09:59 AM, Bo Shen wrote: > Using CONFIG_AT91FAMILY replace #ifdeferry for atmel SoC > > Signed-off-by: Bo Shen <voice.shen@atmel.com> Acked-by: Andreas Bie?mann <andreas.devel@googlemail.com> > --- > drivers/net/macb.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/macb.c b/drivers/net/macb.c > index 8bacbda..753fb96 100644 > --- a/drivers/net/macb.c > +++ b/drivers/net/macb.c > @@ -466,19 +466,13 @@ static int macb_init(struct eth_device *netdev, bd_t *bd) > > /* choose RMII or MII mode. This depends on the board */ > #ifdef CONFIG_RMII > -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ > - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ > - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ > - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) > +#ifdef CONFIG_AT91FAMILY > macb_writel(macb, USRIO, MACB_BIT(RMII) | MACB_BIT(CLKEN)); > #else > macb_writel(macb, USRIO, 0); > #endif > #else > -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ > - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ > - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ > - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) > +#ifdef CONFIG_AT91FAMILY > macb_writel(macb, USRIO, MACB_BIT(CLKEN)); > #else > macb_writel(macb, USRIO, MACB_BIT(MII)); > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry 2013-04-24 7:59 ` [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry Bo Shen 2013-05-08 11:30 ` Andreas Bießmann @ 2013-06-24 14:57 ` Andreas Bießmann 2013-06-25 0:13 ` Joe Hershberger 1 sibling, 1 reply; 10+ messages in thread From: Andreas Bießmann @ 2013-06-24 14:57 UTC (permalink / raw) To: u-boot Hi Joe, On 04/24/2013 09:59 AM, Bo Shen wrote: > Using CONFIG_AT91FAMILY replace #ifdeferry for atmel SoC > > Signed-off-by: Bo Shen <voice.shen@atmel.com> > --- > drivers/net/macb.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/macb.c b/drivers/net/macb.c > index 8bacbda..753fb96 100644 > --- a/drivers/net/macb.c > +++ b/drivers/net/macb.c > @@ -466,19 +466,13 @@ static int macb_init(struct eth_device *netdev, bd_t *bd) > > /* choose RMII or MII mode. This depends on the board */ > #ifdef CONFIG_RMII > -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ > - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ > - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ > - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) > +#ifdef CONFIG_AT91FAMILY > macb_writel(macb, USRIO, MACB_BIT(RMII) | MACB_BIT(CLKEN)); > #else > macb_writel(macb, USRIO, 0); > #endif > #else > -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ > - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ > - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ > - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) > +#ifdef CONFIG_AT91FAMILY > macb_writel(macb, USRIO, MACB_BIT(CLKEN)); > #else > macb_writel(macb, USRIO, MACB_BIT(MII)); > just realized that this patch is still not in u-boot/master. Will you apply it (and the rest of the series) for this release? Best regards Andreas Bie?mann ^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry 2013-06-24 14:57 ` Andreas Bießmann @ 2013-06-25 0:13 ` Joe Hershberger 0 siblings, 0 replies; 10+ messages in thread From: Joe Hershberger @ 2013-06-25 0:13 UTC (permalink / raw) To: u-boot On Mon, Jun 24, 2013 at 9:57 AM, Andreas Bie?mann <andreas.devel@googlemail.com> wrote: > Hi Joe, > > On 04/24/2013 09:59 AM, Bo Shen wrote: >> Using CONFIG_AT91FAMILY replace #ifdeferry for atmel SoC >> >> Signed-off-by: Bo Shen <voice.shen@atmel.com> >> --- >> drivers/net/macb.c | 10 ++-------- >> 1 file changed, 2 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/net/macb.c b/drivers/net/macb.c >> index 8bacbda..753fb96 100644 >> --- a/drivers/net/macb.c >> +++ b/drivers/net/macb.c >> @@ -466,19 +466,13 @@ static int macb_init(struct eth_device *netdev, bd_t *bd) >> >> /* choose RMII or MII mode. This depends on the board */ >> #ifdef CONFIG_RMII >> -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ >> - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ >> - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ >> - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) >> +#ifdef CONFIG_AT91FAMILY >> macb_writel(macb, USRIO, MACB_BIT(RMII) | MACB_BIT(CLKEN)); >> #else >> macb_writel(macb, USRIO, 0); >> #endif >> #else >> -#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \ >> - defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \ >> - defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ >> - defined(CONFIG_AT91SAM9XE) || defined(CONFIG_AT91SAM9X5) >> +#ifdef CONFIG_AT91FAMILY >> macb_writel(macb, USRIO, MACB_BIT(CLKEN)); >> #else >> macb_writel(macb, USRIO, MACB_BIT(MII)); >> > > just realized that this patch is still not in u-boot/master. Will you > apply it (and the rest of the series) for this release? Yes. I have a PR ready now. -Joe ^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 2/3] net: macb: using phylib to configure phy device 2013-04-24 7:59 [U-Boot] [PATCH 0/3] net: macb: add support for gigabit MAC Bo Shen 2013-04-24 7:59 ` [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry Bo Shen @ 2013-04-24 7:59 ` Bo Shen 2013-08-15 14:36 ` Andreas Bießmann 2013-04-24 7:59 ` [U-Boot] [PATCH 3/3] net: macb: add support for gigabit MAC Bo Shen 2013-07-08 16:14 ` [U-Boot] [PATCH 0/3] " Joe Hershberger 3 siblings, 1 reply; 10+ messages in thread From: Bo Shen @ 2013-04-24 7:59 UTC (permalink / raw) To: u-boot using phylib to configure phy device in macb driver Signed-off-by: Bo Shen <voice.shen@atmel.com> --- drivers/net/macb.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index 753fb96..b83d65a 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -103,6 +103,7 @@ struct macb_device { const struct device *dev; struct eth_device netdev; unsigned short phy_addr; + struct mii_dev *bus; }; #define to_macb(_nd) container_of(_nd, struct macb_device, netdev) @@ -163,7 +164,7 @@ static u16 macb_mdio_read(struct macb_device *macb, u8 reg) return MACB_BFEXT(DATA, frame); } -#if defined(CONFIG_CMD_MII) +#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB) int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value) { @@ -372,6 +373,9 @@ static int macb_phy_find(struct macb_device *macb) static int macb_phy_init(struct macb_device *macb) { struct eth_device *netdev = &macb->netdev; +#ifdef CONFIG_PHYLIB + struct phy_device *phydev; +#endif u32 ncfgr; u16 phy_id, status, adv, lpa; int media, speed, duplex; @@ -391,6 +395,13 @@ static int macb_phy_init(struct macb_device *macb) return 0; } +#ifdef CONFIG_PHYLIB + phydev->bus = macb->bus; + phydev->dev = netdev; + phydev->addr = macb->phy_addr; + phy_config(phydev); +#endif + status = macb_mdio_read(macb, MII_BMSR); if (!(status & BMSR_LSTATUS)) { /* Try to re-negotiate if we don't have link already. */ @@ -574,8 +585,9 @@ int macb_eth_initialize(int id, void *regs, unsigned int phy_addr) eth_register(netdev); -#if defined(CONFIG_CMD_MII) +#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB) miiphy_register(netdev->name, macb_miiphy_read, macb_miiphy_write); + macb->bus = miiphy_get_dev_by_name(netdev->name); #endif return 0; } -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 2/3] net: macb: using phylib to configure phy device 2013-04-24 7:59 ` [U-Boot] [PATCH 2/3] net: macb: using phylib to configure phy device Bo Shen @ 2013-08-15 14:36 ` Andreas Bießmann 2013-08-16 1:53 ` Bo Shen 0 siblings, 1 reply; 10+ messages in thread From: Andreas Bießmann @ 2013-08-15 14:36 UTC (permalink / raw) To: u-boot Hi Bo, I'm currently applying your patches. Patch 'arm: atmel: add gmac support for sama5d3xek board' shows that this particular patch is defective ... please send a fix or I will not apply the gmac for sama5. On 04/24/2013 09:59 AM, Bo Shen wrote: > using phylib to configure phy device in macb driver > > Signed-off-by: Bo Shen <voice.shen@atmel.com> > --- > drivers/net/macb.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/macb.c b/drivers/net/macb.c > index 753fb96..b83d65a 100644 > --- a/drivers/net/macb.c > +++ b/drivers/net/macb.c > @@ -103,6 +103,7 @@ struct macb_device { > const struct device *dev; > struct eth_device netdev; > unsigned short phy_addr; > + struct mii_dev *bus; > }; > #define to_macb(_nd) container_of(_nd, struct macb_device, netdev) > > @@ -163,7 +164,7 @@ static u16 macb_mdio_read(struct macb_device *macb, u8 reg) > return MACB_BFEXT(DATA, frame); > } > > -#if defined(CONFIG_CMD_MII) > +#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB) > > int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value) > { > @@ -372,6 +373,9 @@ static int macb_phy_find(struct macb_device *macb) > static int macb_phy_init(struct macb_device *macb) > { > struct eth_device *netdev = &macb->netdev; > +#ifdef CONFIG_PHYLIB > + struct phy_device *phydev; > +#endif > u32 ncfgr; > u16 phy_id, status, adv, lpa; > int media, speed, duplex; > @@ -391,6 +395,13 @@ static int macb_phy_init(struct macb_device *macb) > return 0; > } > > +#ifdef CONFIG_PHYLIB > + phydev->bus = macb->bus; phydev is uninitialized here ... > + phydev->dev = netdev; > + phydev->addr = macb->phy_addr; > + phy_config(phydev); > +#endif > + > status = macb_mdio_read(macb, MII_BMSR); > if (!(status & BMSR_LSTATUS)) { > /* Try to re-negotiate if we don't have link already. */ > @@ -574,8 +585,9 @@ int macb_eth_initialize(int id, void *regs, unsigned int phy_addr) > > eth_register(netdev); > > -#if defined(CONFIG_CMD_MII) > +#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB) > miiphy_register(netdev->name, macb_miiphy_read, macb_miiphy_write); > + macb->bus = miiphy_get_dev_by_name(netdev->name); > #endif > return 0; > } > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 2/3] net: macb: using phylib to configure phy device 2013-08-15 14:36 ` Andreas Bießmann @ 2013-08-16 1:53 ` Bo Shen 0 siblings, 0 replies; 10+ messages in thread From: Bo Shen @ 2013-08-16 1:53 UTC (permalink / raw) To: u-boot Hi Andreas, On 8/15/2013 22:36, Andreas Bie?mann wrote: > Hi Bo, > > I'm currently applying your patches. Patch 'arm: atmel: add gmac support > for sama5d3xek board' shows that this particular patch is defective ... > please send a fix or I will not apply the gmac for sama5. Thanks for point out this. The fix patch has been sent out. More information at: http://patchwork.ozlabs.org/patch/267530/ (net: macb: fix the building warning) Best Regards, Bo Shen ^ permalink raw reply [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 3/3] net: macb: add support for gigabit MAC 2013-04-24 7:59 [U-Boot] [PATCH 0/3] net: macb: add support for gigabit MAC Bo Shen 2013-04-24 7:59 ` [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry Bo Shen 2013-04-24 7:59 ` [U-Boot] [PATCH 2/3] net: macb: using phylib to configure phy device Bo Shen @ 2013-04-24 7:59 ` Bo Shen 2013-07-08 16:14 ` [U-Boot] [PATCH 0/3] " Joe Hershberger 3 siblings, 0 replies; 10+ messages in thread From: Bo Shen @ 2013-04-24 7:59 UTC (permalink / raw) To: u-boot Add gigabit MAC support in macb driver - using IP version to distinguish whether MAC is GMAC Signed-off-by: Bo Shen <voice.shen@atmel.com> --- drivers/net/macb.c | 151 +++++++++++++++++++++++++++++++++++++++++----------- drivers/net/macb.h | 55 ++++++++++++++++--- 2 files changed, 168 insertions(+), 38 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index b83d65a..e4e2a74 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -107,6 +107,11 @@ struct macb_device { }; #define to_macb(_nd) container_of(_nd, struct macb_device, netdev) +static int macb_is_gem(struct macb_device *macb) +{ + return MACB_BFEXT(IDNUM, macb_readl(macb, MID)) == 0x2; +} + static void macb_mdio_write(struct macb_device *macb, u8 reg, u16 value) { unsigned long netctl; @@ -419,28 +424,64 @@ static int macb_phy_init(struct macb_device *macb) printf("%s: link down (status: 0x%04x)\n", netdev->name, status); return 0; - } else { - adv = macb_mdio_read(macb, MII_ADVERTISE); - lpa = macb_mdio_read(macb, MII_LPA); - media = mii_nway_result(lpa & adv); - speed = (media & (ADVERTISE_100FULL | ADVERTISE_100HALF) - ? 1 : 0); - duplex = (media & ADVERTISE_FULL) ? 1 : 0; - printf("%s: link up, %sMbps %s-duplex (lpa: 0x%04x)\n", - netdev->name, - speed ? "100" : "10", - duplex ? "full" : "half", - lpa); - - ncfgr = macb_readl(macb, NCFGR); - ncfgr &= ~(MACB_BIT(SPD) | MACB_BIT(FD)); - if (speed) - ncfgr |= MACB_BIT(SPD); - if (duplex) - ncfgr |= MACB_BIT(FD); - macb_writel(macb, NCFGR, ncfgr); - return 1; } + + /* First check for GMAC */ + if (macb_is_gem(macb)) { + lpa = macb_mdio_read(macb, MII_STAT1000); + if (lpa & (1 << 11)) { + speed = 1000; + duplex = 1; + } else { + if (lpa & (1 << 10)) { + speed = 1000; + duplex = 1; + } else { + speed = 0; + } + } + + if (speed == 1000) { + printf("%s: link up, %dMbps %s-duplex (lpa: 0x%04x)\n", + netdev->name, + speed, + duplex ? "full" : "half", + lpa); + + ncfgr = macb_readl(macb, NCFGR); + ncfgr &= ~(GEM_BIT(GBE) | MACB_BIT(SPD) | MACB_BIT(FD)); + if (speed) + ncfgr |= GEM_BIT(GBE); + if (duplex) + ncfgr |= MACB_BIT(FD); + macb_writel(macb, NCFGR, ncfgr); + + return 1; + } + } + + /* fall back for EMAC checking */ + adv = macb_mdio_read(macb, MII_ADVERTISE); + lpa = macb_mdio_read(macb, MII_LPA); + media = mii_nway_result(lpa & adv); + speed = (media & (ADVERTISE_100FULL | ADVERTISE_100HALF) + ? 1 : 0); + duplex = (media & ADVERTISE_FULL) ? 1 : 0; + printf("%s: link up, %sMbps %s-duplex (lpa: 0x%04x)\n", + netdev->name, + speed ? "100" : "10", + duplex ? "full" : "half", + lpa); + + ncfgr = macb_readl(macb, NCFGR); + ncfgr &= ~(MACB_BIT(SPD) | MACB_BIT(FD)); + if (speed) + ncfgr |= MACB_BIT(SPD); + if (duplex) + ncfgr |= MACB_BIT(FD); + macb_writel(macb, NCFGR, ncfgr); + + return 1; } static int macb_init(struct eth_device *netdev, bd_t *bd) @@ -475,6 +516,13 @@ static int macb_init(struct eth_device *netdev, bd_t *bd) macb_writel(macb, RBQP, macb->rx_ring_dma); macb_writel(macb, TBQP, macb->tx_ring_dma); + if (macb_is_gem(macb)) { +#ifdef CONFIG_RGMII + gem_writel(macb, UR, GEM_BIT(RGMII)); +#else + gem_writel(macb, UR, 0); +#endif + } else { /* choose RMII or MII mode. This depends on the board */ #ifdef CONFIG_RMII #ifdef CONFIG_AT91FAMILY @@ -489,6 +537,7 @@ static int macb_init(struct eth_device *netdev, bd_t *bd) macb_writel(macb, USRIO, MACB_BIT(MII)); #endif #endif /* CONFIG_RMII */ + } if (!macb_phy_init(macb)) return -1; @@ -532,11 +581,48 @@ static int macb_write_hwaddr(struct eth_device *dev) return 0; } +static u32 macb_mdc_clk_div(int id, struct macb_device *macb) +{ + u32 config; + unsigned long macb_hz = get_macb_pclk_rate(id); + + if (macb_hz < 20000000) + config = MACB_BF(CLK, MACB_CLK_DIV8); + else if (macb_hz < 40000000) + config = MACB_BF(CLK, MACB_CLK_DIV16); + else if (macb_hz < 80000000) + config = MACB_BF(CLK, MACB_CLK_DIV32); + else + config = MACB_BF(CLK, MACB_CLK_DIV64); + + return config; +} + +static u32 gem_mdc_clk_div(int id, struct macb_device *macb) +{ + u32 config; + unsigned long macb_hz = get_macb_pclk_rate(id); + + if (macb_hz < 20000000) + config = GEM_BF(CLK, GEM_CLK_DIV8); + else if (macb_hz < 40000000) + config = GEM_BF(CLK, GEM_CLK_DIV16); + else if (macb_hz < 80000000) + config = GEM_BF(CLK, GEM_CLK_DIV32); + else if (macb_hz < 120000000) + config = GEM_BF(CLK, GEM_CLK_DIV48); + else if (macb_hz < 160000000) + config = GEM_BF(CLK, GEM_CLK_DIV64); + else + config = GEM_BF(CLK, GEM_CLK_DIV96); + + return config; +} + int macb_eth_initialize(int id, void *regs, unsigned int phy_addr) { struct macb_device *macb; struct eth_device *netdev; - unsigned long macb_hz; u32 ncfgr; macb = malloc(sizeof(struct macb_device)); @@ -560,7 +646,11 @@ int macb_eth_initialize(int id, void *regs, unsigned int phy_addr) macb->regs = regs; macb->phy_addr = phy_addr; - sprintf(netdev->name, "macb%d", id); + if (macb_is_gem(macb)) + sprintf(netdev->name, "gmac%d", id); + else + sprintf(netdev->name, "macb%d", id); + netdev->init = macb_init; netdev->halt = macb_halt; netdev->send = macb_send; @@ -571,15 +661,12 @@ int macb_eth_initialize(int id, void *regs, unsigned int phy_addr) * Do some basic initialization so that we at least can talk * to the PHY */ - macb_hz = get_macb_pclk_rate(id); - if (macb_hz < 20000000) - ncfgr = MACB_BF(CLK, MACB_CLK_DIV8); - else if (macb_hz < 40000000) - ncfgr = MACB_BF(CLK, MACB_CLK_DIV16); - else if (macb_hz < 80000000) - ncfgr = MACB_BF(CLK, MACB_CLK_DIV32); - else - ncfgr = MACB_BF(CLK, MACB_CLK_DIV64); + if (macb_is_gem(macb)) { + ncfgr = gem_mdc_clk_div(id, macb); + ncfgr |= GEM_BF(DBW, 1); + } else { + ncfgr = macb_mdc_clk_div(id, macb); + } macb_writel(macb, NCFGR, ncfgr); diff --git a/drivers/net/macb.h b/drivers/net/macb.h index f92a20c..68eef00 100644 --- a/drivers/net/macb.h +++ b/drivers/net/macb.h @@ -26,6 +26,7 @@ #define MACB_NCR 0x0000 #define MACB_NCFGR 0x0004 #define MACB_NSR 0x0008 +#define GEM_UR 0x000c #define MACB_TSR 0x0014 #define MACB_RBQP 0x0018 #define MACB_TBQP 0x001c @@ -71,6 +72,7 @@ #define MACB_TPQ 0x00bc #define MACB_USRIO 0x00c0 #define MACB_WOL 0x00c4 +#define MACB_MID 0x00fc /* Bitfields in NCR */ #define MACB_LB_OFFSET 0 @@ -138,6 +140,13 @@ #define MACB_IRXFCS_OFFSET 19 #define MACB_IRXFCS_SIZE 1 +#define GEM_GBE_OFFSET 10 +#define GEM_GBE_SIZE 1 +#define GEM_CLK_OFFSET 18 +#define GEM_CLK_SIZE 3 +#define GEM_DBW_OFFSET 21 +#define GEM_DBW_SIZE 2 + /* Bitfields in NSR */ #define MACB_NSR_LINK_OFFSET 0 #define MACB_NSR_LINK_SIZE 1 @@ -146,6 +155,10 @@ #define MACB_IDLE_OFFSET 2 #define MACB_IDLE_SIZE 1 +/* Bitfields in UR */ +#define GEM_RGMII_OFFSET 0 +#define GEM_RGMII_SIZE 1 + /* Bitfields in TSR */ #define MACB_UBR_OFFSET 0 #define MACB_UBR_SIZE 1 @@ -240,12 +253,25 @@ #define MACB_WOL_MTI_OFFSET 19 #define MACB_WOL_MTI_SIZE 1 +/* Bitfields in MID */ +#define MACB_IDNUM_OFFSET 16 +#define MACB_IDNUM_SIZE 16 + +/* Bitfields in DCFG1 */ /* Constants for CLK */ #define MACB_CLK_DIV8 0 #define MACB_CLK_DIV16 1 #define MACB_CLK_DIV32 2 #define MACB_CLK_DIV64 3 +/* GEM specific constants for CLK */ +#define GEM_CLK_DIV8 0 +#define GEM_CLK_DIV16 1 +#define GEM_CLK_DIV32 2 +#define GEM_CLK_DIV48 3 +#define GEM_CLK_DIV64 4 +#define GEM_CLK_DIV96 5 + /* Constants for MAN register */ #define MACB_MAN_SOF 1 #define MACB_MAN_WRITE 1 @@ -255,21 +281,38 @@ /* Bit manipulation macros */ #define MACB_BIT(name) \ (1 << MACB_##name##_OFFSET) -#define MACB_BF(name,value) \ +#define MACB_BF(name, value) \ (((value) & ((1 << MACB_##name##_SIZE) - 1)) \ << MACB_##name##_OFFSET) -#define MACB_BFEXT(name,value)\ +#define MACB_BFEXT(name, value)\ (((value) >> MACB_##name##_OFFSET) \ & ((1 << MACB_##name##_SIZE) - 1)) -#define MACB_BFINS(name,value,old) \ +#define MACB_BFINS(name, value, old) \ (((old) & ~(((1 << MACB_##name##_SIZE) - 1) \ << MACB_##name##_OFFSET)) \ - | MACB_BF(name,value)) + | MACB_BF(name, value)) + +#define GEM_BIT(name) \ + (1 << GEM_##name##_OFFSET) +#define GEM_BF(name, value) \ + (((value) & ((1 << GEM_##name##_SIZE) - 1)) \ + << GEM_##name##_OFFSET) +#define GEM_BFEXT(name, value)\ + (((value) >> GEM_##name##_OFFSET) \ + & ((1 << GEM_##name##_SIZE) - 1)) +#define GEM_BFINS(name, value, old) \ + (((old) & ~(((1 << GEM_##name##_SIZE) - 1) \ + << GEM_##name##_OFFSET)) \ + | GEM_BF(name, value)) /* Register access macros */ -#define macb_readl(port,reg) \ +#define macb_readl(port, reg) \ readl((port)->regs + MACB_##reg) -#define macb_writel(port,reg,value) \ +#define macb_writel(port, reg, value) \ writel((value), (port)->regs + MACB_##reg) +#define gem_readl(port, reg) \ + readl((port)->regs + GEM_##reg) +#define gem_writel(port, reg, value) \ + writel((value), (port)->regs + GEM_##reg) #endif /* __DRIVERS_MACB_H__ */ -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [U-Boot] [PATCH 0/3] net: macb: add support for gigabit MAC 2013-04-24 7:59 [U-Boot] [PATCH 0/3] net: macb: add support for gigabit MAC Bo Shen ` (2 preceding siblings ...) 2013-04-24 7:59 ` [U-Boot] [PATCH 3/3] net: macb: add support for gigabit MAC Bo Shen @ 2013-07-08 16:14 ` Joe Hershberger 3 siblings, 0 replies; 10+ messages in thread From: Joe Hershberger @ 2013-07-08 16:14 UTC (permalink / raw) To: u-boot On Wed, Apr 24, 2013 at 2:59 AM, Bo Shen <voice.shen@atmel.com> wrote: > This patch add macb support for gigabit MAC, will be used by sama5d3. > Tha patch for sama5d3 is in patchwork: > http://patchwork.ozlabs.org/patch/226795/ > > After this patch is applied, will add gmac support for sama5d3 > > Bo Shen (3): > net: macb: using AT91FAMILY replace #ifdeferry > net: macb: using phylib to configure phy device > net: macb: add support for gigabit MAC Applied series, Thanks. -Joe ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2013-08-16 1:53 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-04-24 7:59 [U-Boot] [PATCH 0/3] net: macb: add support for gigabit MAC Bo Shen 2013-04-24 7:59 ` [U-Boot] [PATCH 1/3] net: macb: using AT91FAMILY replace #ifdeferry Bo Shen 2013-05-08 11:30 ` Andreas Bießmann 2013-06-24 14:57 ` Andreas Bießmann 2013-06-25 0:13 ` Joe Hershberger 2013-04-24 7:59 ` [U-Boot] [PATCH 2/3] net: macb: using phylib to configure phy device Bo Shen 2013-08-15 14:36 ` Andreas Bießmann 2013-08-16 1:53 ` Bo Shen 2013-04-24 7:59 ` [U-Boot] [PATCH 3/3] net: macb: add support for gigabit MAC Bo Shen 2013-07-08 16:14 ` [U-Boot] [PATCH 0/3] " Joe Hershberger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox