diff options
author | David S. Miller <davem@davemloft.net> | 2015-07-27 04:10:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-07-27 04:10:30 -0400 |
commit | 54109da31f0bec407b419cebfb19c7d9f2a6e56a (patch) | |
tree | 7b5c067406be60a0edf92bee7feec7ac572f449d | |
parent | dfbafc995304ebb9a9b03f65083e6e9cea143b20 (diff) | |
parent | e018a0cce3d849bc73e72686c571420adc40bad2 (diff) |
Merge branch 'macb-fixes'
Andy Shevchenko says:
====================
net/macb: fix for AVR32 and clean up
It seems no one had tested recently the driver on AVR32 platforms such as
ATNGW100. This series bring it back to work.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/cadence/macb.c | 125 | ||||
-rw-r--r-- | drivers/net/ethernet/cadence/macb.h | 34 | ||||
-rw-r--r-- | include/linux/platform_data/macb.h | 14 |
3 files changed, 108 insertions, 65 deletions
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index caeb39561567..c638757251e6 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c | |||
@@ -104,6 +104,57 @@ static void *macb_rx_buffer(struct macb *bp, unsigned int index) | |||
104 | return bp->rx_buffers + bp->rx_buffer_size * macb_rx_ring_wrap(index); | 104 | return bp->rx_buffers + bp->rx_buffer_size * macb_rx_ring_wrap(index); |
105 | } | 105 | } |
106 | 106 | ||
107 | /* I/O accessors */ | ||
108 | static u32 hw_readl_native(struct macb *bp, int offset) | ||
109 | { | ||
110 | return __raw_readl(bp->regs + offset); | ||
111 | } | ||
112 | |||
113 | static void hw_writel_native(struct macb *bp, int offset, u32 value) | ||
114 | { | ||
115 | __raw_writel(value, bp->regs + offset); | ||
116 | } | ||
117 | |||
118 | static u32 hw_readl(struct macb *bp, int offset) | ||
119 | { | ||
120 | return readl_relaxed(bp->regs + offset); | ||
121 | } | ||
122 | |||
123 | static void hw_writel(struct macb *bp, int offset, u32 value) | ||
124 | { | ||
125 | writel_relaxed(value, bp->regs + offset); | ||
126 | } | ||
127 | |||
128 | /* | ||
129 | * Find the CPU endianness by using the loopback bit of NCR register. When the | ||
130 | * CPU is in big endian we need to program swaped mode for management | ||
131 | * descriptor access. | ||
132 | */ | ||
133 | static bool hw_is_native_io(void __iomem *addr) | ||
134 | { | ||
135 | u32 value = MACB_BIT(LLB); | ||
136 | |||
137 | __raw_writel(value, addr + MACB_NCR); | ||
138 | value = __raw_readl(addr + MACB_NCR); | ||
139 | |||
140 | /* Write 0 back to disable everything */ | ||
141 | __raw_writel(0, addr + MACB_NCR); | ||
142 | |||
143 | return value == MACB_BIT(LLB); | ||
144 | } | ||
145 | |||
146 | static bool hw_is_gem(void __iomem *addr, bool native_io) | ||
147 | { | ||
148 | u32 id; | ||
149 | |||
150 | if (native_io) | ||
151 | id = __raw_readl(addr + MACB_MID); | ||
152 | else | ||
153 | id = readl_relaxed(addr + MACB_MID); | ||
154 | |||
155 | return MACB_BFEXT(IDNUM, id) >= 0x2; | ||
156 | } | ||
157 | |||
107 | static void macb_set_hwaddr(struct macb *bp) | 158 | static void macb_set_hwaddr(struct macb *bp) |
108 | { | 159 | { |
109 | u32 bottom; | 160 | u32 bottom; |
@@ -160,7 +211,7 @@ static void macb_get_hwaddr(struct macb *bp) | |||
160 | } | 211 | } |
161 | } | 212 | } |
162 | 213 | ||
163 | netdev_info(bp->dev, "invalid hw address, using random\n"); | 214 | dev_info(&bp->pdev->dev, "invalid hw address, using random\n"); |
164 | eth_hw_addr_random(bp->dev); | 215 | eth_hw_addr_random(bp->dev); |
165 | } | 216 | } |
166 | 217 | ||
@@ -252,7 +303,6 @@ static void macb_handle_link_change(struct net_device *dev) | |||
252 | struct macb *bp = netdev_priv(dev); | 303 | struct macb *bp = netdev_priv(dev); |
253 | struct phy_device *phydev = bp->phy_dev; | 304 | struct phy_device *phydev = bp->phy_dev; |
254 | unsigned long flags; | 305 | unsigned long flags; |
255 | |||
256 | int status_change = 0; | 306 | int status_change = 0; |
257 | 307 | ||
258 | spin_lock_irqsave(&bp->lock, flags); | 308 | spin_lock_irqsave(&bp->lock, flags); |
@@ -449,14 +499,14 @@ err_out: | |||
449 | 499 | ||
450 | static void macb_update_stats(struct macb *bp) | 500 | static void macb_update_stats(struct macb *bp) |
451 | { | 501 | { |
452 | u32 __iomem *reg = bp->regs + MACB_PFR; | ||
453 | u32 *p = &bp->hw_stats.macb.rx_pause_frames; | 502 | u32 *p = &bp->hw_stats.macb.rx_pause_frames; |
454 | u32 *end = &bp->hw_stats.macb.tx_pause_frames + 1; | 503 | u32 *end = &bp->hw_stats.macb.tx_pause_frames + 1; |
504 | int offset = MACB_PFR; | ||
455 | 505 | ||
456 | WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4); | 506 | WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4); |
457 | 507 | ||
458 | for(; p < end; p++, reg++) | 508 | for(; p < end; p++, offset += 4) |
459 | *p += readl_relaxed(reg); | 509 | *p += bp->readl(bp, offset); |
460 | } | 510 | } |
461 | 511 | ||
462 | static int macb_halt_tx(struct macb *bp) | 512 | static int macb_halt_tx(struct macb *bp) |
@@ -1107,12 +1157,6 @@ static void macb_poll_controller(struct net_device *dev) | |||
1107 | } | 1157 | } |
1108 | #endif | 1158 | #endif |
1109 | 1159 | ||
1110 | static inline unsigned int macb_count_tx_descriptors(struct macb *bp, | ||
1111 | unsigned int len) | ||
1112 | { | ||
1113 | return (len + bp->max_tx_length - 1) / bp->max_tx_length; | ||
1114 | } | ||
1115 | |||
1116 | static unsigned int macb_tx_map(struct macb *bp, | 1160 | static unsigned int macb_tx_map(struct macb *bp, |
1117 | struct macb_queue *queue, | 1161 | struct macb_queue *queue, |
1118 | struct sk_buff *skb) | 1162 | struct sk_buff *skb) |
@@ -1263,11 +1307,11 @@ static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1263 | * socket buffer: skb fragments of jumbo frames may need to be | 1307 | * socket buffer: skb fragments of jumbo frames may need to be |
1264 | * splitted into many buffer descriptors. | 1308 | * splitted into many buffer descriptors. |
1265 | */ | 1309 | */ |
1266 | count = macb_count_tx_descriptors(bp, skb_headlen(skb)); | 1310 | count = DIV_ROUND_UP(skb_headlen(skb), bp->max_tx_length); |
1267 | nr_frags = skb_shinfo(skb)->nr_frags; | 1311 | nr_frags = skb_shinfo(skb)->nr_frags; |
1268 | for (f = 0; f < nr_frags; f++) { | 1312 | for (f = 0; f < nr_frags; f++) { |
1269 | frag_size = skb_frag_size(&skb_shinfo(skb)->frags[f]); | 1313 | frag_size = skb_frag_size(&skb_shinfo(skb)->frags[f]); |
1270 | count += macb_count_tx_descriptors(bp, frag_size); | 1314 | count += DIV_ROUND_UP(frag_size, bp->max_tx_length); |
1271 | } | 1315 | } |
1272 | 1316 | ||
1273 | spin_lock_irqsave(&bp->lock, flags); | 1317 | spin_lock_irqsave(&bp->lock, flags); |
@@ -1603,7 +1647,6 @@ static u32 macb_dbw(struct macb *bp) | |||
1603 | static void macb_configure_dma(struct macb *bp) | 1647 | static void macb_configure_dma(struct macb *bp) |
1604 | { | 1648 | { |
1605 | u32 dmacfg; | 1649 | u32 dmacfg; |
1606 | u32 tmp, ncr; | ||
1607 | 1650 | ||
1608 | if (macb_is_gem(bp)) { | 1651 | if (macb_is_gem(bp)) { |
1609 | dmacfg = gem_readl(bp, DMACFG) & ~GEM_BF(RXBS, -1L); | 1652 | dmacfg = gem_readl(bp, DMACFG) & ~GEM_BF(RXBS, -1L); |
@@ -1613,22 +1656,11 @@ static void macb_configure_dma(struct macb *bp) | |||
1613 | dmacfg |= GEM_BIT(TXPBMS) | GEM_BF(RXBMS, -1L); | 1656 | dmacfg |= GEM_BIT(TXPBMS) | GEM_BF(RXBMS, -1L); |
1614 | dmacfg &= ~GEM_BIT(ENDIA_PKT); | 1657 | dmacfg &= ~GEM_BIT(ENDIA_PKT); |
1615 | 1658 | ||
1616 | /* Find the CPU endianness by using the loopback bit of net_ctrl | 1659 | if (bp->native_io) |
1617 | * register. save it first. When the CPU is in big endian we | ||
1618 | * need to program swaped mode for management descriptor access. | ||
1619 | */ | ||
1620 | ncr = macb_readl(bp, NCR); | ||
1621 | __raw_writel(MACB_BIT(LLB), bp->regs + MACB_NCR); | ||
1622 | tmp = __raw_readl(bp->regs + MACB_NCR); | ||
1623 | |||
1624 | if (tmp == MACB_BIT(LLB)) | ||
1625 | dmacfg &= ~GEM_BIT(ENDIA_DESC); | 1660 | dmacfg &= ~GEM_BIT(ENDIA_DESC); |
1626 | else | 1661 | else |
1627 | dmacfg |= GEM_BIT(ENDIA_DESC); /* CPU in big endian */ | 1662 | dmacfg |= GEM_BIT(ENDIA_DESC); /* CPU in big endian */ |
1628 | 1663 | ||
1629 | /* Restore net_ctrl */ | ||
1630 | macb_writel(bp, NCR, ncr); | ||
1631 | |||
1632 | if (bp->dev->features & NETIF_F_HW_CSUM) | 1664 | if (bp->dev->features & NETIF_F_HW_CSUM) |
1633 | dmacfg |= GEM_BIT(TXCOEN); | 1665 | dmacfg |= GEM_BIT(TXCOEN); |
1634 | else | 1666 | else |
@@ -1897,19 +1929,19 @@ static int macb_change_mtu(struct net_device *dev, int new_mtu) | |||
1897 | 1929 | ||
1898 | static void gem_update_stats(struct macb *bp) | 1930 | static void gem_update_stats(struct macb *bp) |
1899 | { | 1931 | { |
1900 | int i; | 1932 | unsigned int i; |
1901 | u32 *p = &bp->hw_stats.gem.tx_octets_31_0; | 1933 | u32 *p = &bp->hw_stats.gem.tx_octets_31_0; |
1902 | 1934 | ||
1903 | for (i = 0; i < GEM_STATS_LEN; ++i, ++p) { | 1935 | for (i = 0; i < GEM_STATS_LEN; ++i, ++p) { |
1904 | u32 offset = gem_statistics[i].offset; | 1936 | u32 offset = gem_statistics[i].offset; |
1905 | u64 val = readl_relaxed(bp->regs + offset); | 1937 | u64 val = bp->readl(bp, offset); |
1906 | 1938 | ||
1907 | bp->ethtool_stats[i] += val; | 1939 | bp->ethtool_stats[i] += val; |
1908 | *p += val; | 1940 | *p += val; |
1909 | 1941 | ||
1910 | if (offset == GEM_OCTTXL || offset == GEM_OCTRXL) { | 1942 | if (offset == GEM_OCTTXL || offset == GEM_OCTRXL) { |
1911 | /* Add GEM_OCTTXH, GEM_OCTRXH */ | 1943 | /* Add GEM_OCTTXH, GEM_OCTRXH */ |
1912 | val = readl_relaxed(bp->regs + offset + 4); | 1944 | val = bp->readl(bp, offset + 4); |
1913 | bp->ethtool_stats[i] += ((u64)val) << 32; | 1945 | bp->ethtool_stats[i] += ((u64)val) << 32; |
1914 | *(++p) += val; | 1946 | *(++p) += val; |
1915 | } | 1947 | } |
@@ -1976,7 +2008,7 @@ static int gem_get_sset_count(struct net_device *dev, int sset) | |||
1976 | 2008 | ||
1977 | static void gem_get_ethtool_strings(struct net_device *dev, u32 sset, u8 *p) | 2009 | static void gem_get_ethtool_strings(struct net_device *dev, u32 sset, u8 *p) |
1978 | { | 2010 | { |
1979 | int i; | 2011 | unsigned int i; |
1980 | 2012 | ||
1981 | switch (sset) { | 2013 | switch (sset) { |
1982 | case ETH_SS_STATS: | 2014 | case ETH_SS_STATS: |
@@ -2190,7 +2222,7 @@ static void macb_configure_caps(struct macb *bp, const struct macb_config *dt_co | |||
2190 | if (dt_conf) | 2222 | if (dt_conf) |
2191 | bp->caps = dt_conf->caps; | 2223 | bp->caps = dt_conf->caps; |
2192 | 2224 | ||
2193 | if (macb_is_gem_hw(bp->regs)) { | 2225 | if (hw_is_gem(bp->regs, bp->native_io)) { |
2194 | bp->caps |= MACB_CAPS_MACB_IS_GEM; | 2226 | bp->caps |= MACB_CAPS_MACB_IS_GEM; |
2195 | 2227 | ||
2196 | dcfg = gem_readl(bp, DCFG1); | 2228 | dcfg = gem_readl(bp, DCFG1); |
@@ -2201,10 +2233,11 @@ static void macb_configure_caps(struct macb *bp, const struct macb_config *dt_co | |||
2201 | bp->caps |= MACB_CAPS_FIFO_MODE; | 2233 | bp->caps |= MACB_CAPS_FIFO_MODE; |
2202 | } | 2234 | } |
2203 | 2235 | ||
2204 | netdev_dbg(bp->dev, "Cadence caps 0x%08x\n", bp->caps); | 2236 | dev_dbg(&bp->pdev->dev, "Cadence caps 0x%08x\n", bp->caps); |
2205 | } | 2237 | } |
2206 | 2238 | ||
2207 | static void macb_probe_queues(void __iomem *mem, | 2239 | static void macb_probe_queues(void __iomem *mem, |
2240 | bool native_io, | ||
2208 | unsigned int *queue_mask, | 2241 | unsigned int *queue_mask, |
2209 | unsigned int *num_queues) | 2242 | unsigned int *num_queues) |
2210 | { | 2243 | { |
@@ -2219,7 +2252,7 @@ static void macb_probe_queues(void __iomem *mem, | |||
2219 | * we are early in the probe process and don't have the | 2252 | * we are early in the probe process and don't have the |
2220 | * MACB_CAPS_MACB_IS_GEM flag positioned | 2253 | * MACB_CAPS_MACB_IS_GEM flag positioned |
2221 | */ | 2254 | */ |
2222 | if (!macb_is_gem_hw(mem)) | 2255 | if (!hw_is_gem(mem, native_io)) |
2223 | return; | 2256 | return; |
2224 | 2257 | ||
2225 | /* bit 0 is never set but queue 0 always exists */ | 2258 | /* bit 0 is never set but queue 0 always exists */ |
@@ -2786,6 +2819,7 @@ static int macb_probe(struct platform_device *pdev) | |||
2786 | struct clk *pclk, *hclk, *tx_clk; | 2819 | struct clk *pclk, *hclk, *tx_clk; |
2787 | unsigned int queue_mask, num_queues; | 2820 | unsigned int queue_mask, num_queues; |
2788 | struct macb_platform_data *pdata; | 2821 | struct macb_platform_data *pdata; |
2822 | bool native_io; | ||
2789 | struct phy_device *phydev; | 2823 | struct phy_device *phydev; |
2790 | struct net_device *dev; | 2824 | struct net_device *dev; |
2791 | struct resource *regs; | 2825 | struct resource *regs; |
@@ -2794,6 +2828,11 @@ static int macb_probe(struct platform_device *pdev) | |||
2794 | struct macb *bp; | 2828 | struct macb *bp; |
2795 | int err; | 2829 | int err; |
2796 | 2830 | ||
2831 | regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
2832 | mem = devm_ioremap_resource(&pdev->dev, regs); | ||
2833 | if (IS_ERR(mem)) | ||
2834 | return PTR_ERR(mem); | ||
2835 | |||
2797 | if (np) { | 2836 | if (np) { |
2798 | const struct of_device_id *match; | 2837 | const struct of_device_id *match; |
2799 | 2838 | ||
@@ -2809,14 +2848,9 @@ static int macb_probe(struct platform_device *pdev) | |||
2809 | if (err) | 2848 | if (err) |
2810 | return err; | 2849 | return err; |
2811 | 2850 | ||
2812 | regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 2851 | native_io = hw_is_native_io(mem); |
2813 | mem = devm_ioremap_resource(&pdev->dev, regs); | ||
2814 | if (IS_ERR(mem)) { | ||
2815 | err = PTR_ERR(mem); | ||
2816 | goto err_disable_clocks; | ||
2817 | } | ||
2818 | 2852 | ||
2819 | macb_probe_queues(mem, &queue_mask, &num_queues); | 2853 | macb_probe_queues(mem, native_io, &queue_mask, &num_queues); |
2820 | dev = alloc_etherdev_mq(sizeof(*bp), num_queues); | 2854 | dev = alloc_etherdev_mq(sizeof(*bp), num_queues); |
2821 | if (!dev) { | 2855 | if (!dev) { |
2822 | err = -ENOMEM; | 2856 | err = -ENOMEM; |
@@ -2831,6 +2865,14 @@ static int macb_probe(struct platform_device *pdev) | |||
2831 | bp->pdev = pdev; | 2865 | bp->pdev = pdev; |
2832 | bp->dev = dev; | 2866 | bp->dev = dev; |
2833 | bp->regs = mem; | 2867 | bp->regs = mem; |
2868 | bp->native_io = native_io; | ||
2869 | if (native_io) { | ||
2870 | bp->readl = hw_readl_native; | ||
2871 | bp->writel = hw_writel_native; | ||
2872 | } else { | ||
2873 | bp->readl = hw_readl; | ||
2874 | bp->writel = hw_writel; | ||
2875 | } | ||
2834 | bp->num_queues = num_queues; | 2876 | bp->num_queues = num_queues; |
2835 | bp->queue_mask = queue_mask; | 2877 | bp->queue_mask = queue_mask; |
2836 | if (macb_config) | 2878 | if (macb_config) |
@@ -2838,9 +2880,8 @@ static int macb_probe(struct platform_device *pdev) | |||
2838 | bp->pclk = pclk; | 2880 | bp->pclk = pclk; |
2839 | bp->hclk = hclk; | 2881 | bp->hclk = hclk; |
2840 | bp->tx_clk = tx_clk; | 2882 | bp->tx_clk = tx_clk; |
2841 | if (macb_config->jumbo_max_len) { | 2883 | if (macb_config) |
2842 | bp->jumbo_max_len = macb_config->jumbo_max_len; | 2884 | bp->jumbo_max_len = macb_config->jumbo_max_len; |
2843 | } | ||
2844 | 2885 | ||
2845 | spin_lock_init(&bp->lock); | 2886 | spin_lock_init(&bp->lock); |
2846 | 2887 | ||
diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h index d74655993d4b..2aa102ecff6c 100644 --- a/drivers/net/ethernet/cadence/macb.h +++ b/drivers/net/ethernet/cadence/macb.h | |||
@@ -429,18 +429,12 @@ | |||
429 | | GEM_BF(name, value)) | 429 | | GEM_BF(name, value)) |
430 | 430 | ||
431 | /* Register access macros */ | 431 | /* Register access macros */ |
432 | #define macb_readl(port,reg) \ | 432 | #define macb_readl(port, reg) (port)->readl((port), MACB_##reg) |
433 | readl_relaxed((port)->regs + MACB_##reg) | 433 | #define macb_writel(port, reg, value) (port)->writel((port), MACB_##reg, (value)) |
434 | #define macb_writel(port,reg,value) \ | 434 | #define gem_readl(port, reg) (port)->readl((port), GEM_##reg) |
435 | writel_relaxed((value), (port)->regs + MACB_##reg) | 435 | #define gem_writel(port, reg, value) (port)->writel((port), GEM_##reg, (value)) |
436 | #define gem_readl(port, reg) \ | 436 | #define queue_readl(queue, reg) (queue)->bp->readl((queue)->bp, (queue)->reg) |
437 | readl_relaxed((port)->regs + GEM_##reg) | 437 | #define queue_writel(queue, reg, value) (queue)->bp->writel((queue)->bp, (queue)->reg, (value)) |
438 | #define gem_writel(port, reg, value) \ | ||
439 | writel_relaxed((value), (port)->regs + GEM_##reg) | ||
440 | #define queue_readl(queue, reg) \ | ||
441 | readl_relaxed((queue)->bp->regs + (queue)->reg) | ||
442 | #define queue_writel(queue, reg, value) \ | ||
443 | writel_relaxed((value), (queue)->bp->regs + (queue)->reg) | ||
444 | 438 | ||
445 | /* Conditional GEM/MACB macros. These perform the operation to the correct | 439 | /* Conditional GEM/MACB macros. These perform the operation to the correct |
446 | * register dependent on whether the device is a GEM or a MACB. For registers | 440 | * register dependent on whether the device is a GEM or a MACB. For registers |
@@ -785,6 +779,11 @@ struct macb_queue { | |||
785 | 779 | ||
786 | struct macb { | 780 | struct macb { |
787 | void __iomem *regs; | 781 | void __iomem *regs; |
782 | bool native_io; | ||
783 | |||
784 | /* hardware IO accessors */ | ||
785 | u32 (*readl)(struct macb *bp, int offset); | ||
786 | void (*writel)(struct macb *bp, int offset, u32 value); | ||
788 | 787 | ||
789 | unsigned int rx_tail; | 788 | unsigned int rx_tail; |
790 | unsigned int rx_prepared_head; | 789 | unsigned int rx_prepared_head; |
@@ -817,9 +816,9 @@ struct macb { | |||
817 | 816 | ||
818 | struct mii_bus *mii_bus; | 817 | struct mii_bus *mii_bus; |
819 | struct phy_device *phy_dev; | 818 | struct phy_device *phy_dev; |
820 | unsigned int link; | 819 | int link; |
821 | unsigned int speed; | 820 | int speed; |
822 | unsigned int duplex; | 821 | int duplex; |
823 | 822 | ||
824 | u32 caps; | 823 | u32 caps; |
825 | unsigned int dma_burst_length; | 824 | unsigned int dma_burst_length; |
@@ -843,9 +842,4 @@ static inline bool macb_is_gem(struct macb *bp) | |||
843 | return !!(bp->caps & MACB_CAPS_MACB_IS_GEM); | 842 | return !!(bp->caps & MACB_CAPS_MACB_IS_GEM); |
844 | } | 843 | } |
845 | 844 | ||
846 | static inline bool macb_is_gem_hw(void __iomem *addr) | ||
847 | { | ||
848 | return !!(MACB_BFEXT(IDNUM, readl_relaxed(addr + MACB_MID)) >= 0x2); | ||
849 | } | ||
850 | |||
851 | #endif /* _MACB_H */ | 845 | #endif /* _MACB_H */ |
diff --git a/include/linux/platform_data/macb.h b/include/linux/platform_data/macb.h index 044a124bfbbc..21b15f6fee25 100644 --- a/include/linux/platform_data/macb.h +++ b/include/linux/platform_data/macb.h | |||
@@ -8,11 +8,19 @@ | |||
8 | #ifndef __MACB_PDATA_H__ | 8 | #ifndef __MACB_PDATA_H__ |
9 | #define __MACB_PDATA_H__ | 9 | #define __MACB_PDATA_H__ |
10 | 10 | ||
11 | /** | ||
12 | * struct macb_platform_data - platform data for MACB Ethernet | ||
13 | * @phy_mask: phy mask passed when register the MDIO bus | ||
14 | * within the driver | ||
15 | * @phy_irq_pin: PHY IRQ | ||
16 | * @is_rmii: using RMII interface? | ||
17 | * @rev_eth_addr: reverse Ethernet address byte order | ||
18 | */ | ||
11 | struct macb_platform_data { | 19 | struct macb_platform_data { |
12 | u32 phy_mask; | 20 | u32 phy_mask; |
13 | int phy_irq_pin; /* PHY IRQ */ | 21 | int phy_irq_pin; |
14 | u8 is_rmii; /* using RMII interface? */ | 22 | u8 is_rmii; |
15 | u8 rev_eth_addr; /* reverse Ethernet address byte order */ | 23 | u8 rev_eth_addr; |
16 | }; | 24 | }; |
17 | 25 | ||
18 | #endif /* __MACB_PDATA_H__ */ | 26 | #endif /* __MACB_PDATA_H__ */ |