aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Ferre <nicolas.ferre@atmel.com>2016-03-10 10:44:32 -0500
committerDavid S. Miller <davem@davemloft.net>2016-03-13 22:16:22 -0400
commit6bdaa5e9ed39b3b3328f35d218e8ad5a99cfc4d2 (patch)
treefb48cb1048b1ed4b46cdb56f4310850ec2a0e1f0
parent470c3822d2ab7fadcbb1ac317ef27b31caac370e (diff)
net: macb: fix default configuration for GMAC on AT91
On AT91 SoCs, the User Register (USRIO) exposes a switch to configure the "Reduced" or "Traditional" version of the Media Independent Interface (RMII vs. MII or RGMII vs. GMII). As on the older EMAC version, on GMAC, this switch is set by default to the non-reduced type of interface, so use the existing capability and extend it to GMII as well. We then keep the current logic in the macb_init() function. The capabilities of sama5d2, sama5d4 and sama5d3 GEM interface are updated in the macb_config structure to be able to properly enable them with a traditional interface (GMII or MII). Reported-by: Romain HENRIET <romain.henriet@l-acoustics.com> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/cadence/macb.c13
-rw-r--r--drivers/net/ethernet/cadence/macb.h2
2 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 7ccf2298a5fa..3ce6095ced3d 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -2440,9 +2440,9 @@ static int macb_init(struct platform_device *pdev)
2440 if (bp->phy_interface == PHY_INTERFACE_MODE_RGMII) 2440 if (bp->phy_interface == PHY_INTERFACE_MODE_RGMII)
2441 val = GEM_BIT(RGMII); 2441 val = GEM_BIT(RGMII);
2442 else if (bp->phy_interface == PHY_INTERFACE_MODE_RMII && 2442 else if (bp->phy_interface == PHY_INTERFACE_MODE_RMII &&
2443 (bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII)) 2443 (bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII))
2444 val = MACB_BIT(RMII); 2444 val = MACB_BIT(RMII);
2445 else if (!(bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII)) 2445 else if (!(bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII))
2446 val = MACB_BIT(MII); 2446 val = MACB_BIT(MII);
2447 2447
2448 if (bp->caps & MACB_CAPS_USRIO_HAS_CLKEN) 2448 if (bp->caps & MACB_CAPS_USRIO_HAS_CLKEN)
@@ -2774,7 +2774,7 @@ static int at91ether_init(struct platform_device *pdev)
2774} 2774}
2775 2775
2776static const struct macb_config at91sam9260_config = { 2776static const struct macb_config at91sam9260_config = {
2777 .caps = MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII, 2777 .caps = MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
2778 .clk_init = macb_clk_init, 2778 .clk_init = macb_clk_init,
2779 .init = macb_init, 2779 .init = macb_init,
2780}; 2780};
@@ -2787,21 +2787,22 @@ static const struct macb_config pc302gem_config = {
2787}; 2787};
2788 2788
2789static const struct macb_config sama5d2_config = { 2789static const struct macb_config sama5d2_config = {
2790 .caps = 0, 2790 .caps = MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
2791 .dma_burst_length = 16, 2791 .dma_burst_length = 16,
2792 .clk_init = macb_clk_init, 2792 .clk_init = macb_clk_init,
2793 .init = macb_init, 2793 .init = macb_init,
2794}; 2794};
2795 2795
2796static const struct macb_config sama5d3_config = { 2796static const struct macb_config sama5d3_config = {
2797 .caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE, 2797 .caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE
2798 | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
2798 .dma_burst_length = 16, 2799 .dma_burst_length = 16,
2799 .clk_init = macb_clk_init, 2800 .clk_init = macb_clk_init,
2800 .init = macb_init, 2801 .init = macb_init,
2801}; 2802};
2802 2803
2803static const struct macb_config sama5d4_config = { 2804static const struct macb_config sama5d4_config = {
2804 .caps = 0, 2805 .caps = MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
2805 .dma_burst_length = 4, 2806 .dma_burst_length = 4,
2806 .clk_init = macb_clk_init, 2807 .clk_init = macb_clk_init,
2807 .init = macb_init, 2808 .init = macb_init,
diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index 9ba416d5afff..8a13824ef802 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -400,7 +400,7 @@
400/* Capability mask bits */ 400/* Capability mask bits */
401#define MACB_CAPS_ISR_CLEAR_ON_WRITE 0x00000001 401#define MACB_CAPS_ISR_CLEAR_ON_WRITE 0x00000001
402#define MACB_CAPS_USRIO_HAS_CLKEN 0x00000002 402#define MACB_CAPS_USRIO_HAS_CLKEN 0x00000002
403#define MACB_CAPS_USRIO_DEFAULT_IS_MII 0x00000004 403#define MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII 0x00000004
404#define MACB_CAPS_NO_GIGABIT_HALF 0x00000008 404#define MACB_CAPS_NO_GIGABIT_HALF 0x00000008
405#define MACB_CAPS_USRIO_DISABLED 0x00000010 405#define MACB_CAPS_USRIO_DISABLED 0x00000010
406#define MACB_CAPS_FIFO_MODE 0x10000000 406#define MACB_CAPS_FIFO_MODE 0x10000000