fs enet and mdio bitbang patches
Subsystems (4)
cover fs enet and mdio bitbang patches
Changes since previous patchset:
- Changed mdio_bitbang_ to mdiobb_, as requested.
- Separated mii bitbang conversion to generic MDIO bitbang library from the of_platform conversion.
- Added register read-backs to flush the writes in mdio bitbang clients.
- Fixed a couple minor issues.
Jeff, please apply for 2.6.24.
-Scott
PATCH 1/9 fs_enet: Whitespace cleanup.
--- drivers/net/fs_enet/fs_enet-main.c | 85 ++++++++++++++++------------------- drivers/net/fs_enet/fs_enet.h | 4 +- drivers/net/fs_enet/mac-fcc.c | 1 - drivers/net/fs_enet/mii-bitbang.c | 3 - drivers/net/fs_enet/mii-fec.c | 1 - 5 files changed, 41 insertions(+), 53 deletions(-)
drivers/net/fs_enet/fs_enet-main.c +39 -46
@@ -353,7 +353,6 @@ static void fs_enet_tx(struct net_device *dev) do_wake = do_restart =0 ;while (((sc =CBDR_SC (bdp)) &BD_ENET_TX_READY ) ==0 ) { - dirtyidx = bdp - fep->tx_bd_base;if (fep->tx_free == fep->tx_ring)
@@ -454,7 +453,6 @@ fs_enet_interrupt(int irq, void *dev_id) nr =0 ;while ((int_events = (*fep->ops->get_int_events)(dev)) !=0 ) { - nr++; int_clr_events = int_events;
@@ -710,45 +708,43 @@ static void fs_timeout(struct net_device *dev)*-----------------------------------------------------------------------------*/ static void generic_adjust_link (struct net_device *dev) { -struct fs_enet_private *fep =netdev_priv (dev); -struct phy_device *phydev = fep->phydev; -int new_state =0 ; - -if (phydev->link) { - -/* adjust to duplex mode */ -if (phydev->duplex != fep->oldduplex){ - new_state =1 ; - fep->oldduplex = phydev->duplex; - } - -if (phydev->speed != fep->oldspeed) { - new_state =1 ; - fep->oldspeed = phydev->speed; - } - -if (!fep->oldlink) { - new_state =1 ; - fep->oldlink =1 ; -netif_schedule (dev); -netif_carrier_on (dev); -netif_start_queue (dev); - } - -if (new_state) - fep->ops->restart (dev); - - }else if (fep->oldlink) { - new_state =1 ; - fep->oldlink =0 ; - fep->oldspeed =0 ; - fep->oldduplex =-1 ; -netif_carrier_off (dev); -netif_stop_queue (dev); - } - -if (new_state &&netif_msg_link (fep)) -phy_print_status (phydev); +struct fs_enet_private *fep =netdev_priv (dev); +struct phy_device *phydev = fep->phydev; +int new_state =0 ; + +if (phydev->link) { +/* adjust to duplex mode */ +if (phydev->duplex != fep->oldduplex) { + new_state =1 ; + fep->oldduplex = phydev->duplex; + } + +if (phydev->speed != fep->oldspeed) { + new_state =1 ; + fep->oldspeed = phydev->speed; + } + +if (!fep->oldlink) { + new_state =1 ; + fep->oldlink =1 ; +netif_schedule (dev); +netif_carrier_on (dev); +netif_start_queue (dev); + } + +if (new_state) + fep->ops->restart (dev); + }else if (fep->oldlink) { + new_state =1 ; + fep->oldlink =0 ; + fep->oldspeed =0 ; + fep->oldduplex =-1 ; +netif_carrier_off (dev); +netif_stop_queue (dev); + } + +if (new_state &&netif_msg_link (fep)) +phy_print_status (phydev); }
@@ -792,7 +788,6 @@ static int fs_init_phy(struct net_device *dev)return 0 ; } -static int fs_enet_open (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev);
@@ -978,7 +973,7 @@ static struct net_device *fs_init_instance(struct device *dev,#endif #ifdef CONFIG_FS_ENET_HAS_SCC -if (fs_get_scc_index (fpi->fs_no) >=0 ) +if (fs_get_scc_index (fpi->fs_no) >=0 ) fep->ops = &fs_scc_ops;#endif
@@ -1069,9 +1064,8 @@ static struct net_device *fs_init_instance(struct device *dev,return ndev; - err: +err:if (ndev !=NULL ) { -if (registered)unregister_netdev (ndev);
@@ -1262,7 +1256,6 @@ static int __init fs_init(void) err:cleanup_immap ();return r; - } static void __exit fs_cleanup(void)
drivers/net/fs_enet/fs_enet.h +2 -2
@@ -15,8 +15,8 @@#include <asm/commproc.h> struct fec_info { -fec_t * fecp; -u32 mii_speed; +fec_t *fecp; +u32 mii_speed; };#endif
drivers/net/fs_enet/mac-fcc.c +0 -1
@@ -86,7 +86,6 @@static inline int fcc_cr_cmd (struct fs_enet_private *fep,u32 mcn,u32 op) {const struct fs_platform_info *fpi = fep->fpi; -cpm2_map_t *immap = fs_enet_immap;cpm_cpm2_t *cpmp = &immap->im_cpm;u32 v;
drivers/net/fs_enet/mii-bitbang.c +0 -3
@@ -12,7 +12,6 @@* kind, whether express or implied. */ -#include <linux/module.h> #include <linux/types.h> #include <linux/kernel.h>
@@ -308,7 +307,6 @@ static int fs_mii_bitbang_init(struct bb_info *bitbang, struct fs_mii_bb_platforreturn 0 ; } -static int __devinit fs_enet_mdio_probe (struct device *dev) {struct platform_device *pdev =to_platform_device (dev);
@@ -371,7 +369,6 @@ bus_register_fail:return err; } -static int fs_enet_mdio_remove (struct device *dev) {struct mii_bus *bus =dev_get_drvdata (dev);
drivers/net/fs_enet/mii-fec.c +0 -1
@@ -113,7 +113,6 @@ static int fs_enet_fec_mii_read(struct mii_bus *bus , int phy_id, int location) }return ret; - }static int fs_enet_fec_mii_write (struct mii_bus *bus,int phy_id,int location,u16 val)
Signature · 1 line
1.5.3.1
PATCH 2/9 fs_enet: Include linux/string.h from linux/fs_enet_pd.h
In reply to Scott WoodIt is needed for strstr().
--- include/linux/fs_enet_pd.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
include/linux/fs_enet_pd.h +1 -0
@@ -16,6 +16,7 @@#ifndef FS_ENET_PD_H #define FS_ENET_PD_H +#include <linux/string.h> #include <asm/types.h> #define FS_ENET_NAME "fs_enet"
Signature · 1 line
1.5.3.1
PATCH 3/9 fs_enet: Don't share the interrupt.
In reply to Scott WoodThis driver can't handle an interrupt immediately after request_irq (making it fail with CONFIG_DEBUG_SHIRQ), and has unshared interrupts on all hardware I'm aware of.
--- drivers/net/fs_enet/fs_enet-main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/fs_enet/fs_enet-main.c +1 -1
@@ -667,7 +667,7 @@ static int fs_request_irq(struct net_device *dev, int irq, const char *name,struct fs_enet_private *fep =netdev_priv (dev); (*fep->ops->pre_request_irq)(dev, irq); -return request_irq (irq, irqf,IRQF_SHARED , name, dev); +return request_irq (irq, irqf,0 , name, dev); }static void fs_free_irq (struct net_device *dev,int irq)
Signature · 1 line
1.5.3.1
PATCH 4/9 fs_enet: mac-fcc: Eliminate __fcc-* macros.
In reply to Scott WoodThese macros accomplish nothing other than defeating type checking.
This patch also fixes one instance of the wrong register size being used that was revealed by enabling type checking.
--- drivers/net/fs_enet/mac-fcc.c | 25 ++++++++----------------- 1 files changed, 8 insertions(+), 17 deletions(-)
drivers/net/fs_enet/mac-fcc.c +8 -17
@@ -48,28 +48,19 @@/* FCC access macros */ -#define __fcc_out32 (addr, x) out_be32((unsigned *)addr, x) -#define __fcc_out16 (addr, x) out_be16((unsigned short *)addr, x) -#define __fcc_out8 (addr, x) out_8((unsigned char *)addr, x) -#define __fcc_in32 (addr) in_be32((unsigned *)addr) -#define __fcc_in16 (addr) in_be16((unsigned short *)addr) -#define __fcc_in8 (addr) in_8((unsigned char *)addr) - -/* parameter space */ -/* write, read, set bits, clear bits */ -#define W32 (_p, _m, _v) __fcc_out32(&(_p)->_m, (_v)) -#define R32 (_p, _m) __fcc_in32(&(_p)->_m) +#define W32 (_p, _m, _v) out_be32(&(_p)->_m, (_v)) +#define R32 (_p, _m) in_be32(&(_p)->_m)#define S32 (_p, _m, _v) W32(_p, _m, R32(_p, _m) | (_v))#define C32 (_p, _m, _v) W32(_p, _m, R32(_p, _m) & ~(_v)) -#define W16 (_p, _m, _v) __fcc_out16(&(_p)->_m, (_v)) -#define R16 (_p, _m) __fcc_in16(&(_p)->_m) +#define W16 (_p, _m, _v) out_be16(&(_p)->_m, (_v)) +#define R16 (_p, _m) in_be16(&(_p)->_m)#define S16 (_p, _m, _v) W16(_p, _m, R16(_p, _m) | (_v))#define C16 (_p, _m, _v) W16(_p, _m, R16(_p, _m) & ~(_v)) -#define W8 (_p, _m, _v) __fcc_out8(&(_p)->_m, (_v)) -#define R8 (_p, _m) __fcc_in8(&(_p)->_m) +#define W8 (_p, _m, _v) out_8(&(_p)->_m, (_v)) +#define R8 (_p, _m) in_8(&(_p)->_m)#define S8 (_p, _m, _v) W8(_p, _m, R8(_p, _m) | (_v))#define C8 (_p, _m, _v) W8(_p, _m, R8(_p, _m) & ~(_v))
@@ -290,7 +281,7 @@ static void restart(struct net_device *dev)/* clear everything (slow & steady does it) */ for (i =0 ; i <sizeof (*ep); i++) -__fcc_out8 ((char *)ep + i,0 ); +out_8 ((char *)ep + i,0 );/* get physical address */ rx_bd_base_phys = fep->ring_mem_addr;
@@ -495,7 +486,7 @@ static void tx_kickstart(struct net_device *dev)struct fs_enet_private *fep =netdev_priv (dev);fcc_t *fccp = fep->fcc.fccp; -S32 (fccp, fcc_ftodr,0x80 ); +S16 (fccp, fcc_ftodr,0x8000 ); }static u32 get_int_events (struct net_device *dev)
Signature · 1 line
1.5.3.1
PATCH 5/9 fs_enet: Align receive buffers.
In reply to Scott WoodAt least some hardware driven by this driver needs receive buffers to be aligned on a 16-byte boundary. This usually happens by chance, but it breaks if slab debugging is enabled.
--- drivers/net/fs_enet/fs_enet-main.c | 21 +++++++++++++++++++-- drivers/net/fs_enet/fs_enet.h | 3 ++- 2 files changed, 21 insertions(+), 3 deletions(-)
drivers/net/fs_enet/fs_enet-main.c +19 -2
@@ -69,6 +69,14 @@ static void fs_set_multicast_list(struct net_device *dev) (*fep->ops->set_multicast_list)(dev); } +static void skb_align (struct sk_buff *skb,int align) +{ +int off = ((unsigned long )skb->data) & (align -1 ); + +if (off) +skb_reserve (skb, align - off); +} +/* NAPI receive function */ static int fs_enet_rx_napi (struct net_device *dev,int *budget) {
@@ -166,9 +174,13 @@ static int fs_enet_rx_napi(struct net_device *dev, int *budget) skb = skbn; skbn = skbt; } - }else + }else { skbn =dev_alloc_skb (ENET_RX_FRSIZE ); +if (skbn) +skb_align (skbn,ENET_RX_ALIGN ); + } +if (skbn !=NULL ) {skb_put (skb, pkt_len);/* Make room */ skb->protocol =eth_type_trans (skb, dev);
@@ -300,9 +312,13 @@ static int fs_enet_rx_non_napi(struct net_device *dev) skb = skbn; skbn = skbt; } - }else + }else { skbn =dev_alloc_skb (ENET_RX_FRSIZE ); +if (skbn) +skb_align (skbn,ENET_RX_ALIGN ); + } +if (skbn !=NULL ) {skb_put (skb, pkt_len);/* Make room */ skb->protocol =eth_type_trans (skb, dev);
@@ -512,6 +528,7 @@ void fs_init_bds(struct net_device *dev) dev->name);break ; } +skb_align (skb,ENET_RX_ALIGN ); fep->rx_skbuff[i] = skb; CBDW_BUFADDR(bdp, dma_map_single(fep->dev, skb->data,
drivers/net/fs_enet/fs_enet.h +2 -1
@@ -82,7 +82,8 @@ struct phy_info {/* Must be a multiple of 32 (to cover both FEC & FCC) */ #define PKT_MAXBLR_SIZE ((PKT_MAXBUF_SIZE + 31) & ~31)/* This is needed so that invalidate_xxx wont invalidate too much */ -#define ENET_RX_FRSIZE L1_CACHE_ALIGN(PKT_MAXBUF_SIZE) +#define ENET_RX_ALIGN 16 +#define ENET_RX_FRSIZE L1_CACHE_ALIGN(PKT_MAXBUF_SIZE + ENET_RX_ALIGN - 1)struct fs_enet_mii_bus {struct list_head list;
Signature · 1 line
1.5.3.1
PATCH 7/9 Generic bitbanged MDIO library
In reply to Scott WoodPreviously, bitbanged MDIO was only supported in individual hardware-specific drivers. This code factors out the higher level protocol implementation, reducing the hardware-specific portion to functions setting direction, data, and clock.
--- drivers/net/phy/Kconfig | 9 ++ drivers/net/phy/Makefile | 1 + drivers/net/phy/mdio-bitbang.c | 187 ++++++++++++++++++++++++++++++++++++++++ include/linux/mdio-bitbang.h | 42 +++++++++ 4 files changed, 239 insertions(+), 0 deletions(-) create mode 100644 drivers/net/phy/mdio-bitbang.c create mode 100644 include/linux/mdio-bitbang.h
drivers/net/phy/Kconfig +9 -0
@@ -76,4 +76,13 @@ config FIXED_MII_100_FDX bool "Emulation for 100M Fdx fixed PHY behavior" depends on FIXED_PHY +config MDIO_BITBANG + tristate "Support for bitbanged MDIO buses" + help + This module implements the MDIO bus protocol in software, + for use by low level drivers that export the ability to + drive the relevant pins. + + If in doubt, say N. + endif # PHYLIB
drivers/net/phy/Makefile +1 -0
@@ -13,3 +13,4 @@ obj-$(CONFIG_VITESSE_PHY) += vitesse.o obj-$(CONFIG_BROADCOM_PHY) += broadcom.o obj-$(CONFIG_ICPLUS_PHY) += icplus.o obj-$(CONFIG_FIXED_PHY) += fixed.o +obj-$(CONFIG_MDIO_BITBANG) += mdio-bitbang.o
drivers/net/phy/mdio-bitbang.c new file +187 -0
187 lines not on this page · raw message
include/linux/mdio-bitbang.h new file +42 -0
42 lines not on this page · raw message
Signature · 1 line
1.5.3.1
PATCH 6/9 fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
In reply to Scott WoodThe existing OF glue code was crufty and broken. Rather than fix it, it will be removed, and the ethernet driver now talks to the device tree directly.
The old, non-CONFIG_PPC_CPM_NEW_BINDING code can go away once CPM platforms are dropped from arch/ppc (which will hopefully be soon), and existing arch/powerpc boards that I wasn't able to test on for this patchset get converted (which should be even sooner).
--- drivers/net/fs_enet/Kconfig | 1 + drivers/net/fs_enet/fs_enet-main.c | 259 ++++++++++++++++++++++++++++++++--- drivers/net/fs_enet/fs_enet.h | 55 +------- drivers/net/fs_enet/mac-fcc.c | 89 +++++++++---- drivers/net/fs_enet/mac-fec.c | 19 +++- drivers/net/fs_enet/mac-scc.c | 53 +++++-- drivers/net/fs_enet/mii-bitbang.c | 269 +++++++++++++++++++++++++++--------- drivers/net/fs_enet/mii-fec.c | 143 +++++++++++++++++++- include/linux/fs_enet_pd.h | 5 + 9 files changed, 714 insertions(+), 179 deletions(-)
drivers/net/fs_enet/Kconfig +1 -0
@@ -11,6 +11,7 @@ config FS_ENET_HAS_SCC config FS_ENET_HAS_FCC bool "Chip has an FCC usable for ethernet" depends on FS_ENET && CPM2 + select MDIO_BITBANG default y config FS_ENET_HAS_FEC
drivers/net/fs_enet/fs_enet-main.c +241 -18
307 lines not on this page · raw message
drivers/net/fs_enet/fs_enet.h +3 -52
85 lines not on this page · raw message
drivers/net/fs_enet/mac-fcc.c +65 -24
172 lines not on this page · raw message
drivers/net/fs_enet/mac-fec.c +18 -1
@@ -43,6 +43,10 @@#include <asm/commproc.h> #endif +#ifdef CONFIG_PPC_CPM_NEW_BINDING +#include <asm/of_device.h> +#endif +#include "fs_enet.h" #include "fec.h"
@@ -95,6 +99,19 @@ static int whack_reset(fec_t * fecp)static int do_pd_setup (struct fs_enet_private *fep) { +#ifdef CONFIG_PPC_CPM_NEW_BINDING +struct of_device *ofdev =to_of_device (fep->dev); + + fep->interrupt =of_irq_to_resource (ofdev->node,0 ,NULL ); +if (fep->interrupt ==NO_IRQ ) +return -EINVAL ; + + fep->fec.fecp =of_iomap (ofdev->node,0 ); +if (!fep->fcc.fccp) +return -EINVAL ; + +return 0 ; +#else struct platform_device *pdev =to_platform_device (fep->dev);struct resource *r;
@@ -110,7 +127,7 @@ static int do_pd_setup(struct fs_enet_private *fep)return -EINVAL ;return 0 ; - +#endif }#define FEC_NAPI_RX_EVENT_MSK (FEC_ENET_RXF | FEC_ENET_RXB)
drivers/net/fs_enet/mac-scc.c +37 -16
95 lines not on this page · raw message
drivers/net/fs_enet/mii-bitbang.c +202 -67
328 lines not on this page · raw message
drivers/net/fs_enet/mii-fec.c +142 -1
170 lines not on this page · raw message
include/linux/fs_enet_pd.h +5 -0
@@ -120,6 +120,7 @@ struct fs_platform_info {u32 cp_page;/* CPM page */ u32 cp_block;/* CPM sblock */ +u32 cp_command;/* CPM page/sblock/mcn */ u32 clk_trx;/* some stuff for pins & mux configuration*/ u32 clk_rx;
@@ -134,7 +135,11 @@ struct fs_platform_info {u32 device_flags;int phy_addr;/* the phy address (-1 no phy) */ +#ifdef CONFIG_PPC_CPM_NEW_BINDING +char bus_id[16 ]; +#else const char * bus_id; +#endif int phy_irq;/* the phy irq (if it exists) */ const struct fs_mii_bus_info *bus_info;
Signature · 1 line
1.5.3.1
PATCH 8/9 fs_enet: Convert mii-bitbang to use the generic bitbang MDIO code.
In reply to Scott Wood--- drivers/net/fs_enet/mii-bitbang.c | 270 ++++++++----------------------------- 1 files changed, 54 insertions(+), 216 deletions(-)
drivers/net/fs_enet/mii-bitbang.c +54 -216
@@ -15,15 +15,13 @@#include <linux/module.h> #include <linux/ioport.h> #include <linux/slab.h> -#include <linux/interrupt.h> #include <linux/init.h> -#include <linux/delay.h> +#include <linux/interrupt.h> #include <linux/netdevice.h> #include <linux/etherdevice.h> #include <linux/mii.h> -#include <linux/ethtool.h> -#include <linux/bitops.h> #include <linux/platform_device.h> +#include <linux/mdio-bitbang.h> #ifdef CONFIG_PPC_CPM_NEW_BINDING #include <linux/of_platform.h>
@@ -32,11 +30,11 @@#include "fs_enet.h" struct bb_info { +struct mdiobb_ctrl ctrl;__be32 __iomem *dir;__be32 __iomem *dat;u32 mdio_msk;u32 mdc_msk; -int delay; };/* FIXME: If any other users of GPIO crop up, then these will have to
@@ -59,212 +57,58 @@ static inline int bb_read(u32 __iomem *p, u32 m)return (in_be32 (p) & m) !=0 ; } -static inline void mdio_active (struct bb_info *bitbang) +static inline void mdio_dir (struct mdiobb_ctrl *ctrl,int dir) { -bb_set (bitbang->dir, bitbang->mdio_msk); -} + struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl); -static inline void mdio_tristate (struct bb_info *bitbang) -{ -bb_clr (bitbang->dir, bitbang->mdio_msk); +if (dir) +bb_set (bitbang->dir, bitbang->mdio_msk); +else +bb_clr (bitbang->dir, bitbang->mdio_msk); + +/* Read back to flush the write. */ +in_be32 (bitbang->dir); } -static inline int mdio_read (struct bb_info *bitbang) +static inline int mdio_read (struct mdiobb_ctrl *ctrl) { + struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl);return bb_read (bitbang->dat, bitbang->mdio_msk); } -static inline void mdio (struct bb_info *bitbang,int what) +static inline void mdio (struct mdiobb_ctrl *ctrl,int what) { + struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl); +if (what)bb_set (bitbang->dat, bitbang->mdio_msk);else bb_clr (bitbang->dat, bitbang->mdio_msk); + +/* Read back to flush the write. */ +in_be32 (bitbang->dat); } -static inline void mdc (struct bb_info *bitbang,int what) +static inline void mdc (struct mdiobb_ctrl *ctrl,int what) { + struct bb_info *bitbang = container_of(ctrl, struct bb_info, ctrl); +if (what)bb_set (bitbang->dat, bitbang->mdc_msk);else bb_clr (bitbang->dat, bitbang->mdc_msk); -} - -static inline void mii_delay (struct bb_info *bitbang) -{ -udelay (bitbang->delay); -} - -/* Utility to send the preamble, address, and register (common to read and write). */ -static void bitbang_pre (struct bb_info *bitbang ,int read,u8 addr,u8 reg) -{ -int j; - -/* -* Send a 32 bit preamble ('1's) with an extra '1' bit for good measure. -* The IEEE spec says this is a PHY optional requirement. The AMD -* 79C874 requires one after power up and one after a MII communications -* error. This means that we are doing more preambles than we need, -* but it is safer and will be much more robust. -*/ - -mdio_active (bitbang); -mdio (bitbang,1 ); -for (j =0 ; j <32 ; j++) { -mdc (bitbang,0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - } - -/* send the start bit (01) and the read opcode (10) or write (10) */ -mdc (bitbang,0 ); -mdio (bitbang,0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); -mdc (bitbang,0 ); -mdio (bitbang,1 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); -mdc (bitbang,0 ); -mdio (bitbang, read); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); -mdc (bitbang,0 ); -mdio (bitbang, !read); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - -/* send the PHY address */ -for (j =0 ; j <5 ; j++) { -mdc (bitbang,0 ); -mdio (bitbang, (addr &0x10 ) !=0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - addr <<=1 ; - } -/* send the register address */ -for (j =0 ; j <5 ; j++) { -mdc (bitbang,0 ); -mdio (bitbang, (reg &0x10 ) !=0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - reg <<=1 ; - } +/* Read back to flush the write. */ +in_be32 (bitbang->dat); } -static int fs_enet_mii_bb_read (struct mii_bus *bus ,int phy_id,int location) -{ -u16 rdreg; -int ret, j; -u8 addr = phy_id &0xff ; -u8 reg = location &0xff ; -struct bb_info * bitbang = bus->priv; - -bitbang_pre (bitbang,1 , addr, reg); - -/* tri-state our MDIO I/O pin so we can read */ -mdc (bitbang,0 ); -mdio_tristate (bitbang); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - -/* check the turnaround bit: the PHY should be driving it to zero */ -if (mdio_read (bitbang) !=0 ) { -/* PHY didn't drive TA low */ -for (j =0 ; j <32 ; j++) { -mdc (bitbang,0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - } - ret =-1 ; - goto out; - } - -mdc (bitbang,0 ); -mii_delay (bitbang); - -/* read 16 bits of register data, MSB first */ - rdreg =0 ; -for (j =0 ; j <16 ; j++) { -mdc (bitbang,1 ); -mii_delay (bitbang); - rdreg <<=1 ; - rdreg |=mdio_read (bitbang); -mdc (bitbang,0 ); -mii_delay (bitbang); - } - -mdc (bitbang,1 ); -mii_delay (bitbang); -mdc (bitbang,0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - - ret = rdreg; -out: -return ret; -} - -static int fs_enet_mii_bb_write (struct mii_bus *bus,int phy_id,int location,u16 val) -{ -int j; -struct bb_info * bitbang = bus->priv; - -u8 addr = phy_id &0xff ; -u8 reg = location &0xff ; -u16 value = val &0xffff ; - -bitbang_pre (bitbang,0 , addr, reg); - -/* send the turnaround (10) */ -mdc (bitbang,0 ); -mdio (bitbang,1 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); -mdc (bitbang,0 ); -mdio (bitbang,0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - -/* write 16 bits of register data, MSB first */ -for (j =0 ; j <16 ; j++) { -mdc (bitbang,0 ); -mdio (bitbang, (value &0x8000 ) !=0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); - value <<=1 ; - } - -/* -* Tri-state the MDIO line. -*/ -mdio_tristate (bitbang); -mdc (bitbang,0 ); -mii_delay (bitbang); -mdc (bitbang,1 ); -mii_delay (bitbang); -return 0 ; -} - -static int fs_enet_mii_bb_reset (struct mii_bus *bus) -{ -/*nothing here - dunno how to reset it*/ -return 0 ; -} +static struct mdiobb_ops bb_ops = { + .owner =THIS_MODULE , + .set_mdc = mdc, + .set_mdio_dir = mdio_dir, + .set_mdio_data = mdio, + .get_mdio_data = mdio_read, +};#ifdef CONFIG_PPC_CPM_NEW_BINDING static int __devinit fs_mii_bitbang_init(struct mii_bus *bus,
@@ -305,7 +149,6 @@ static int __devinit fs_mii_bitbang_init(struct mii_bus *bus, bitbang->dat = bitbang->dir +4 ; bitbang->mdio_msk =1 << (31 - mdio_pin); bitbang->mdc_msk =1 << (31 - mdc_pin); - bitbang->delay =1 ;/* 1 us between operations */ return 0 ; }
@@ -336,23 +179,21 @@ static int __devinit fs_enet_mdio_probe(struct of_device *ofdev,int ret = -ENOMEM ;int i; - new_bus =kzalloc (sizeof (struct mii_bus ),GFP_KERNEL ); -if (!new_bus) - goto out; - bitbang =kzalloc (sizeof (struct bb_info ),GFP_KERNEL );if (!bitbang) - goto out_free_bus; + goto out; + + bitbang->ctrl.ops = &bb_ops; + + new_bus =alloc_mdio_bitbang (&bitbang->ctrl); +if (!new_bus) + goto out_free_priv; - new_bus->priv = bitbang; new_bus->name ="CPM2 Bitbanged MII" , - new_bus->read = &fs_enet_mii_bb_read, - new_bus->write = &fs_enet_mii_bb_write, - new_bus->reset = &fs_enet_mii_bb_reset, ret =fs_mii_bitbang_init (new_bus, ofdev->node);if (ret) - goto out_free_bitbang; + goto out_free_bus; new_bus->phy_mask = ~0 ; new_bus->irq =kmalloc (sizeof (int ) *PHY_MAX_ADDR ,GFP_KERNEL );
@@ -380,10 +221,10 @@ out_free_irqs:kfree (new_bus->irq); out_unmap_regs:iounmap (bitbang->dir); -out_free_bitbang: -kfree (bitbang); out_free_bus:kfree (new_bus); +out_free_priv: +free_mdio_bitbang (new_bus); out:return ret; }
@@ -394,6 +235,7 @@ static int fs_enet_mdio_remove(struct of_device *ofdev)struct bb_info *bitbang = bus->priv;mdiobus_unregister (bus); +free_mdio_bitbang (bus);dev_set_drvdata (&ofdev->dev,NULL );kfree (bus->irq);iounmap (bitbang->dir);
@@ -417,12 +259,12 @@ static struct of_platform_driver fs_enet_bb_mdio_driver = { .remove = fs_enet_mdio_remove, }; -int fs_enet_mdio_bb_init (void ) +static int fs_enet_mdio_bb_init (void ) {return of_register_platform_driver (&fs_enet_bb_mdio_driver); } -void fs_enet_mdio_bb_exit (void ) +static void fs_enet_mdio_bb_exit (void ) {of_unregister_platform_driver (&fs_enet_bb_mdio_driver); }
@@ -437,7 +279,6 @@ static int __devinit fs_mii_bitbang_init(struct bb_info *bitbang, bitbang->dat = (u32 __iomem *)fmpi->mdio_dat.offset; bitbang->mdio_msk =1U << (31 - fmpi->mdio_dat.bit); bitbang->mdc_msk =1U << (31 - fmpi->mdc_dat.bit); - bitbang->delay = fmpi->delay;return 0 ; }
@@ -453,20 +294,19 @@ static int __devinit fs_enet_mdio_probe(struct device *dev)if (NULL == dev)return -EINVAL ; - new_bus =kzalloc (sizeof (struct mii_bus ),GFP_KERNEL ); + bitbang =kzalloc (sizeof (struct bb_info ),GFP_KERNEL ); -if (NULL == new_bus) +if (NULL == bitbang)return -ENOMEM ; - bitbang =kzalloc (sizeof (struct bb_info ),GFP_KERNEL ); + bitbang->ctrl.ops = &bb_ops; -if (NULL == bitbang) + new_bus =alloc_mdio_bitbang (&bitbang->ctrl); + +if (NULL == new_bus)return -ENOMEM ; new_bus->name ="BB MII Bus" , - new_bus->read = &fs_enet_mii_bb_read, - new_bus->write = &fs_enet_mii_bb_write, - new_bus->reset = &fs_enet_mii_bb_reset, new_bus->id = pdev->id; new_bus->phy_mask = ~0x9 ;
@@ -498,8 +338,8 @@ static int __devinit fs_enet_mdio_probe(struct device *dev)return 0 ; bus_register_fail: +free_mdio_bitbang (new_bus);kfree (bitbang); -kfree (new_bus);return err; }
@@ -512,9 +352,7 @@ static int fs_enet_mdio_remove(struct device *dev)dev_set_drvdata (dev,NULL ); -iounmap ((void *) (&bus->priv)); - bus->priv =NULL ; -kfree (bus); +free_mdio_bitbang (bus);return 0 ; }
@@ -535,4 +373,4 @@ void fs_enet_mdio_bb_exit(void) {driver_unregister (&fs_enet_bb_mdio_driver); } - +#endif
Signature · 1 line
1.5.3.1
PATCH 9/9 fs_enet: sparse fixes
In reply to Scott WoodMostly a bunch of __iomem annotations.
--- drivers/net/fs_enet/fs_enet-main.c | 16 +++++----- drivers/net/fs_enet/fs_enet.h | 30 +++++++++--------- drivers/net/fs_enet/mac-fcc.c | 60 ++++++++++++++++++++--------------- drivers/net/fs_enet/mac-fec.c | 34 ++++++++++---------- drivers/net/fs_enet/mac-scc.c | 37 +++++++++++----------- drivers/net/fs_enet/mii-fec.c | 6 ++-- 6 files changed, 96 insertions(+), 87 deletions(-)
drivers/net/fs_enet/fs_enet-main.c +8 -8
@@ -62,7 +62,7 @@ MODULE_DESCRIPTION("Freescale Ethernet Driver");MODULE_LICENSE ("GPL" );MODULE_VERSION (DRV_MODULE_VERSION ); -int fs_enet_debug =-1 ;/* -1 == use FS_ENET_DEF_MSG_ENABLE as value */ +static int fs_enet_debug =-1 ;/* -1 == use FS_ENET_DEF_MSG_ENABLE as value */ module_param (fs_enet_debug, int,0 );MODULE_PARM_DESC (fs_enet_debug,"Freescale bitmapped debugging message enable value" );
@@ -88,7 +88,7 @@ static int fs_enet_rx_napi(struct net_device *dev, int *budget) {struct fs_enet_private *fep =netdev_priv (dev);const struct fs_platform_info *fpi = fep->fpi; -cbd_t *bdp; +cbd_t __iomem *bdp;struct sk_buff *skb, *skbn, *skbt;int received =0 ;u16 pkt_len, sc;
@@ -240,7 +240,7 @@ static int fs_enet_rx_non_napi(struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev);const struct fs_platform_info *fpi = fep->fpi; -cbd_t *bdp; +cbd_t __iomem *bdp;struct sk_buff *skb, *skbn, *skbt;int received =0 ;u16 pkt_len, sc;
@@ -365,7 +365,7 @@ static int fs_enet_rx_non_napi(struct net_device *dev)static void fs_enet_tx (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -cbd_t *bdp; +cbd_t __iomem *bdp;struct sk_buff *skb;int dirtyidx, do_wake, do_restart;u16 sc;
@@ -513,7 +513,7 @@ fs_enet_interrupt(int irq, void *dev_id)void fs_init_bds (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -cbd_t *bdp; +cbd_t __iomem *bdp;struct sk_buff *skb;int i;
@@ -567,7 +567,7 @@ void fs_cleanup_bds(struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev);struct sk_buff *skb; -cbd_t *bdp; +cbd_t __iomem *bdp;int i;/*
@@ -608,7 +608,7 @@ void fs_cleanup_bds(struct net_device *dev)static int fs_enet_start_xmit (struct sk_buff *skb,struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -cbd_t *bdp; +cbd_t __iomem *bdp;int curidx;u16 sc;unsigned long flags;
@@ -1144,7 +1144,7 @@ static int fs_cleanup_instance(struct net_device *ndev)/**************************************************************************************/ /* handy pointer to the immap */ -void *fs_enet_immap =NULL ; +void __iomem *fs_enet_immap =NULL ;static int setup_immap (void ) {
drivers/net/fs_enet/fs_enet.h +15 -15
@@ -15,7 +15,7 @@#include <asm/commproc.h> struct fec_info { -fec_t *fecp; +fec_t __iomem *fecp;u32 mii_speed; };#endif
@@ -80,14 +80,14 @@ struct fs_enet_private {const struct fs_ops *ops;int rx_ring, tx_ring;dma_addr_t ring_mem_addr; -void *ring_base; +void __iomem *ring_base;struct sk_buff **rx_skbuff;struct sk_buff **tx_skbuff; -cbd_t *rx_bd_base;/* Address of Rx and Tx buffers. */ -cbd_t *tx_bd_base; -cbd_t *dirty_tx;/* ring entries to be free()ed. */ -cbd_t *cur_rx; -cbd_t *cur_tx; +cbd_t __iomem *rx_bd_base;/* Address of Rx and Tx buffers. */ +cbd_t __iomem *tx_bd_base; +cbd_t __iomem *dirty_tx;/* ring entries to be free()ed. */ +cbd_t __iomem *cur_rx; +cbd_t __iomem *cur_tx;int tx_free;struct net_device_stats stats;struct timer_list phy_timer_list;
@@ -112,23 +112,23 @@ struct fs_enet_private {union {struct {int idx;/* FEC1 = 0, FEC2 = 1 */ -void *fecp;/* hw registers */ +void __iomem *fecp;/* hw registers */ u32 hthi, htlo;/* state for multicast */ } fec;struct {int idx;/* FCC1-3 = 0-2 */ -void *fccp;/* hw registers */ -void *ep;/* parameter ram */ -void *fcccp;/* hw registers cont. */ -void *mem;/* FCC DPRAM */ +void __iomem *fccp;/* hw registers */ +void __iomem *ep;/* parameter ram */ +void __iomem *fcccp;/* hw registers cont. */ +void __iomem *mem;/* FCC DPRAM */ u32 gaddrh, gaddrl;/* group address */ } fcc;struct {int idx;/* FEC1 = 0, FEC2 = 1 */ -void *sccp;/* hw registers */ -void *ep;/* parameter ram */ +void __iomem *sccp;/* hw registers */ +void __iomem *ep;/* parameter ram */ u32 hthi, htlo;/* state for multicast */ } scc;
@@ -199,7 +199,7 @@ extern const struct fs_ops fs_scc_ops;/*******************************************************************/ /* handy pointer to the immap */ -extern void *fs_enet_immap; +extern void __iomem *fs_enet_immap;/*******************************************************************/
drivers/net/fs_enet/mac-fcc.c +34 -26
192 lines not on this page · raw message
drivers/net/fs_enet/mac-fec.c +17 -17
@@ -83,7 +83,7 @@*/ #define FEC_RESET_DELAY 50 -static int whack_reset (fec_t * fecp) +static int whack_reset (fec_t __iomem *fecp) {int i;
@@ -159,7 +159,7 @@ static int allocate_bd(struct net_device *dev)struct fs_enet_private *fep =netdev_priv (dev);const struct fs_platform_info *fpi = fep->fpi; - fep->ring_base =dma_alloc_coherent (fep->dev, + fep->ring_base = (void __force __iomem *)dma_alloc_coherent (fep->dev, (fpi->tx_ring + fpi->rx_ring) *sizeof (cbd_t), &fep->ring_mem_addr,GFP_KERNEL );
@@ -177,7 +177,7 @@ static void free_bd(struct net_device *dev)if (fep->ring_base)dma_free_coherent (fep->dev, (fpi->tx_ring + fpi->rx_ring) *sizeof (cbd_t), - fep->ring_base, + (void __force *)fep->ring_base, fep->ring_mem_addr); }
@@ -189,7 +189,7 @@ static void cleanup_data(struct net_device *dev)static void set_promiscuous_mode (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;FS (fecp, r_cntrl,FEC_RCNTRL_PROM ); }
@@ -237,7 +237,7 @@ static void set_multicast_one(struct net_device *dev, const u8 *mac)static void set_multicast_finish (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;/* if all multi or too many multicasts; just enable all */ if ((dev->flags & IFF_ALLMULTI) != 0 ||
@@ -271,7 +271,7 @@ static void restart(struct net_device *dev)u32 cptr;#endif struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;const struct fs_platform_info *fpi = fep->fpi;dma_addr_t rx_bd_base_phys, tx_bd_base_phys;int r;
@@ -399,7 +399,7 @@ static void stop(struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev);const struct fs_platform_info *fpi = fep->fpi; -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;struct fec_info * feci= fep->phydev->bus->priv;
@@ -461,7 +461,7 @@ static void post_free_irq(struct net_device *dev, int irq)static void napi_clear_rx_event (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;FW (fecp, ievent,FEC_NAPI_RX_EVENT_MSK ); }
@@ -469,7 +469,7 @@ static void napi_clear_rx_event(struct net_device *dev)static void napi_enable_rx (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;FS (fecp, imask,FEC_NAPI_RX_EVENT_MSK ); }
@@ -477,7 +477,7 @@ static void napi_enable_rx(struct net_device *dev)static void napi_disable_rx (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;FC (fecp, imask,FEC_NAPI_RX_EVENT_MSK ); }
@@ -485,7 +485,7 @@ static void napi_disable_rx(struct net_device *dev)static void rx_bd_done (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;FW (fecp, r_des_active,0x01000000 ); }
@@ -493,7 +493,7 @@ static void rx_bd_done(struct net_device *dev)static void tx_kickstart (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;FW (fecp, x_des_active,0x01000000 ); }
@@ -501,7 +501,7 @@ static void tx_kickstart(struct net_device *dev)static u32 get_int_events (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;return FR (fecp, ievent) &FR (fecp, imask); }
@@ -509,7 +509,7 @@ static u32 get_int_events(struct net_device *dev)static void clear_int_events (struct net_device *dev,u32 int_events) {struct fs_enet_private *fep =netdev_priv (dev); -fec_t *fecp = fep->fec.fecp; +fec_t __iomem *fecp = fep->fec.fecp;FW (fecp, ievent, int_events); }
@@ -520,7 +520,7 @@ static void ev_error(struct net_device *dev, u32 int_events) ": %s FEC ERROR(s) 0x%x\n", dev->name, int_events); } -int get_regs (struct net_device *dev,void *p,int *sizep) +static int get_regs (struct net_device *dev,void *p,int *sizep) {struct fs_enet_private *fep =netdev_priv (dev);
@@ -532,12 +532,12 @@ int get_regs(struct net_device *dev, void *p, int *sizep)return 0 ; } -int get_regs_len (struct net_device *dev) +static int get_regs_len (struct net_device *dev) {return sizeof (fec_t); } -void tx_restart (struct net_device *dev) +static void tx_restart (struct net_device *dev) {/* nothing */ }
drivers/net/fs_enet/mac-scc.c +19 -18
@@ -191,7 +191,8 @@ static int allocate_bd(struct net_device *dev)if (IS_ERR_VALUE (fep->ring_mem_addr))return -ENOMEM ; - fep->ring_base =cpm_dpram_addr (fep->ring_mem_addr); + fep->ring_base = (void __iomem __force *) +cpm_dpram_addr (fep->ring_mem_addr);return 0 ; }
@@ -212,7 +213,7 @@ static void cleanup_data(struct net_device *dev)static void set_promiscuous_mode (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; +scc_t __iomem *sccp = fep->scc.sccp;S16 (sccp, scc_psmr,SCC_PSMR_PRO ); }
@@ -220,7 +221,7 @@ static void set_promiscuous_mode(struct net_device *dev)static void set_multicast_start (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_enet_t *ep = fep->scc.ep; +scc_enet_t __iomem *ep = fep->scc.ep;W16 (ep, sen_gaddr1,0 );W16 (ep, sen_gaddr2,0 );
@@ -231,7 +232,7 @@ static void set_multicast_start(struct net_device *dev)static void set_multicast_one (struct net_device *dev,const u8 * mac) {struct fs_enet_private *fep =netdev_priv (dev); -scc_enet_t *ep = fep->scc.ep; +scc_enet_t __iomem *ep = fep->scc.ep;u16 taddrh, taddrm, taddrl; taddrh = ((u16 ) mac[5 ] <<8 ) | mac[4 ];
@@ -247,8 +248,8 @@ static void set_multicast_one(struct net_device *dev, const u8 * mac)static void set_multicast_finish (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; -scc_enet_t *ep = fep->scc.ep; +scc_t __iomem *sccp = fep->scc.sccp; +scc_enet_t __iomem *ep = fep->scc.ep;/* clear promiscuous always */ C16 (sccp, scc_psmr,SCC_PSMR_PRO );
@@ -285,8 +286,8 @@ static void set_multicast_list(struct net_device *dev)static void restart (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; -scc_enet_t *ep = fep->scc.ep; +scc_t __iomem *sccp = fep->scc.sccp; +scc_enet_t __iomem *ep = fep->scc.ep;const struct fs_platform_info *fpi = fep->fpi;u16 paddrh, paddrm, paddrl;const unsigned char *mac;
@@ -296,7 +297,7 @@ static void restart(struct net_device *dev)/* clear everything (slow & steady does it) */ for (i =0 ; i <sizeof (*ep); i++) -__fs_out8 ((char *)ep + i,0 ); +__fs_out8 ((u8 __iomem *)ep + i,0 );/* point to bds */ W16 (ep, sen_genscc.scc_rbase, fep->ring_mem_addr);
@@ -397,7 +398,7 @@ static void restart(struct net_device *dev)static void stop (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; +scc_t __iomem *sccp = fep->scc.sccp;int i;for (i =0 ; (R16 (sccp, scc_sccm) ==0 ) && i <SCC_RESET_DELAY ; i++)
@@ -441,7 +442,7 @@ static void post_free_irq(struct net_device *dev, int irq)static void napi_clear_rx_event (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; +scc_t __iomem *sccp = fep->scc.sccp;W16 (sccp, scc_scce,SCC_NAPI_RX_EVENT_MSK ); }
@@ -449,7 +450,7 @@ static void napi_clear_rx_event(struct net_device *dev)static void napi_enable_rx (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; +scc_t __iomem *sccp = fep->scc.sccp;S16 (sccp, scc_sccm,SCC_NAPI_RX_EVENT_MSK ); }
@@ -457,7 +458,7 @@ static void napi_enable_rx(struct net_device *dev)static void napi_disable_rx (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; +scc_t __iomem *sccp = fep->scc.sccp;C16 (sccp, scc_sccm,SCC_NAPI_RX_EVENT_MSK ); }
@@ -475,7 +476,7 @@ static void tx_kickstart(struct net_device *dev)static u32 get_int_events (struct net_device *dev) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; +scc_t __iomem *sccp = fep->scc.sccp;return (u32 )R16 (sccp, scc_scce); }
@@ -483,7 +484,7 @@ static u32 get_int_events(struct net_device *dev)static void clear_int_events (struct net_device *dev,u32 int_events) {struct fs_enet_private *fep =netdev_priv (dev); -scc_t *sccp = fep->scc.sccp; +scc_t __iomem *sccp = fep->scc.sccp;W16 (sccp, scc_scce, int_events &0xffff ); }
@@ -498,20 +499,20 @@ static int get_regs(struct net_device *dev, void *p, int *sizep) {struct fs_enet_private *fep =netdev_priv (dev); -if (*sizep <sizeof (scc_t) +sizeof (scc_enet_t)) +if (*sizep <sizeof (scc_t) +sizeof (scc_enet_t __iomem *))return -EINVAL ;memcpy_fromio (p, fep->scc.sccp,sizeof (scc_t)); p = (char *)p +sizeof (scc_t); -memcpy_fromio (p, fep->scc.ep,sizeof (scc_enet_t)); +memcpy_fromio (p, fep->scc.ep,sizeof (scc_enet_t __iomem *));return 0 ; }static int get_regs_len (struct net_device *dev) { -return sizeof (scc_t) +sizeof (scc_enet_t); +return sizeof (scc_t) +sizeof (scc_enet_t __iomem *); }static void tx_restart (struct net_device *dev)
drivers/net/fs_enet/mii-fec.c +3 -3
@@ -70,7 +70,7 @@ static int match_has_phy (struct device *dev, void* data)static int fs_mii_fec_init (struct fec_info * fec,struct fs_mii_fec_platform_info *fmpi) {struct resource *r; -fec_t *fecp; +fec_t __iomem *fecp;char * name ="fsl-cpm-fec" ;/* we need fec in order to be useful */
@@ -100,7 +100,7 @@ static int fs_mii_fec_init(struct fec_info* fec, struct fs_mii_fec_platform_infostatic int fs_enet_fec_mii_read (struct mii_bus *bus ,int phy_id,int location) {struct fec_info * fec = bus->priv; -fec_t *fecp = fec->fecp; +fec_t __iomem *fecp = fec->fecp;int i, ret =-1 ;if ((in_be32 (&fecp->fec_r_cntrl) &FEC_RCNTRL_MII_MODE ) ==0 )
@@ -124,7 +124,7 @@ static int fs_enet_fec_mii_read(struct mii_bus *bus , int phy_id, int location)static int fs_enet_fec_mii_write (struct mii_bus *bus,int phy_id,int location,u16 val) {struct fec_info * fec = bus->priv; -fec_t *fecp = fec->fecp; +fec_t __iomem *fecp = fec->fecp;int i;/* this must never happen */
Signature · 1 line
1.5.3.1
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
In reply to Scott Wooddrivers/net/fs_enet/fs_enet-main.c line 48
Quoted 8 lines · On Thu, 20 Sep 2007 17:01:21 -0500 Scott Wood <[email protected]> wrote:
+++
b/drivers/net/fs_enet/fs_enet-main.cdrivers/net/fs_enet/fs_enet-main.c +2
-0@@ -44,12 +44,18 @@#include <asm/irq.h> #include <asm/uaccess.h> +#ifdef CONFIG_PPC_CPM_NEW_BINDING +#include <asm/of_platform.h>
Hmm, didn't I already ask you to change this to linux/of_platform.h?
drivers/net/fs_enet/mac-fcc.c line 46
Quoted 7 lines
drivers/net/fs_enet/mac-fcc.c +3
-0+++ b/drivers/net/fs_enet/mac-fcc.c@@ -42,6 +42,10 @@#include <asm/irq.h> #include <asm/uaccess.h> +#ifdef CONFIG_PPC_CPM_NEW_BINDING +#include <asm/of_device.h>
And this to linux/of_device.h
drivers/net/fs_enet/mac-fec.c line 47
Quoted 7 lines
drivers/net/fs_enet/mac-fec.c +3
-0+++ b/drivers/net/fs_enet/mac-fec.c@@ -43,6 +43,10 @@#include <asm/commproc.h> #endif +#ifdef CONFIG_PPC_CPM_NEW_BINDING +#include <asm/of_device.h>
And this?
drivers/net/fs_enet/mac-scc.c line 47
Quoted 7 lines
drivers/net/fs_enet/mac-scc.c +3
-0+++ b/drivers/net/fs_enet/mac-scc.c@@ -43,6 +43,10 @@#include <asm/commproc.h> #endif +#ifdef CONFIG_PPC_CPM_NEW_BINDING +#include <asm/of_platform.h>
And this
drivers/net/fs_enet/fs_enet-main.c line 40
Quoted 7 lines
drivers/net/fs_enet/fs_enet-main.c +3
-0+++ b/drivers/net/fs_enet/mii-fec.c@@ -36,6 +36,10 @@#include <asm/irq.h> #include <asm/uaccess.h> +#ifdef CONFIG_PPC_CPM_NEW_BINDING +#include <asm/of_platform.h>
And here
Sorry if I missed these last time around.
Signature · 3 lines
Cheers, Stephen Rothwell [email protected] http://www.canb.auug.org.au/~sfr/
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
Quoted 11 lines · Stephen Rothwell
drivers/net/fs_enet/fs_enet-main.c line 48
Quoted 8 lines · On Thu, 20 Sep 2007 17:01:21 -0500 Scott Wood <[email protected]> wrote:
+++
b/drivers/net/fs_enet/fs_enet-main.cdrivers/net/fs_enet/fs_enet-main.c +2
-0@@ -44,12 +44,18 @@#include <asm/irq.h> #include <asm/uaccess.h> +#ifdef CONFIG_PPC_CPM_NEW_BINDING +#include <asm/of_platform.h> Hmm, didn't I already ask you to change this to
linux/of_platform.h?
Grrr, I thought I'd gotten them all.
-Scott
Re: [PATCH 3/9] fs_enet: Don't share the interrupt.
In reply to Scott WoodQuoted 1 line · Scott Wood
This driver can't handle an interrupt immediately after
request_irq
You MUST assume that you will receive an interrupt immediately after request_irq(). If fs_enet cannot handle that, then that is what wants fixing.
Please send along a fix for this, rather than band-aiding the problem.
Re: [PATCH 1/9] fs_enet: Whitespace cleanup.
In reply to Scott WoodQuoted 8 lines · Scott Wood
Signed-off-by Scott Wood <[email protected]>--- drivers/net/fs_enet/fs_enet-main.c | 85 ++++++++++++++++------------------- drivers/net/fs_enet/fs_enet.h | 4 +- drivers/net/fs_enet/mac-fcc.c | 1 - drivers/net/fs_enet/mii-bitbang.c | 3 - drivers/net/fs_enet/mii-fec.c | 1 - 5 files changed, 41 insertions(+), 53 deletions(-)
ACK patches 1-2, 4-9
This patch doesn't apply cleanly to netdev-2.6.git#upstream (nor net-2.6.24.git), so this and the rest of the patch series failed to apply.
Please resend series on top of netdev-2.6.git#upstream or net-2.6.24.git.
RE: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
In reply to Scott WoodHi Scott,
A minor error handling bug
drivers/net/fs_enet/fs_enet-main.c void *fs_enet_immap = NULL; · line 1187
Quoted 10 lines
drivers/net/fs_enet/fs_enet-main.c +10
-0+const u32 *data =of_get_property (np,"phy-handle" , &len); +if (!data || len !=4 ) +return -EINVAL ; + + phynode =of_find_node_by_phandle (*data); +if (!phynode) +return -EINVAL ; + + mdionode =of_get_parent (phynode); +if (!phynode)
if (!mdionode)
drivers/net/fs_enet/fs_enet-main.c void *fs_enet_immap = NULL; · line 1188
Quoted 1 line
drivers/net/fs_enet/fs_enet-main.c +1
-0+ goto out_put_phy;
Best regards,
Esben
PATCH 1/1 phy/bitbang: missing MODULE_LICENSE
In reply to Scott WoodFrom: Randy Dunlap <[email protected]>
Missing MODULE_LICENSE(), loading this module taints the kernel.
--- drivers/net/phy/mdio-bitbang.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/phy/mdio-bitbang.c +2 -0
@@ -185,3 +185,5 @@ void free_mdio_bitbang(struct mii_bus *bmodule_put (ctrl->ops->owner);kfree (bus); } + +MODULE_LICENSE ("GPL" );
Re: [PATCH] phy/bitbang: missing MODULE_LICENSE
Quoted 8 lines · Randy Dunlap
From: Randy Dunlap <[email protected]>
Missing
MODULE_LICENSE(), loading this module taints the kernel.Signed-off-by Randy Dunlap <[email protected]>--- drivers/net/phy/mdio-bitbang.c | 2 ++ 1 file changed, 2 insertions(+)
applied this and the NAPI_Howto Kconfig patch
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
In reply to Scott WoodHi Scott,
I apologize for bringing this after so much time. Hope the "better late than never" motto applies.
Quoted 10 lines · Scott Wood
The existing OF glue code was crufty and broken. Rather than fix it, it will be removed, and the ethernet driver now talks to the device tree directly.
The old, non-CONFIG_PPC_CPM_NEW_BINDING code can go away once CPM platforms are dropped from
arch/ppc(which will hopefully be soon), and existingarch/powerpcboards that I wasn't able to test on for this patchset get converted (which should be even sooner).Signed-off-by Scott Wood <[email protected]>
[snip]
Quoted 21 lines
drivers/net/fs_enet/fs_enet.h +0
-13@@ -24,19 +24,6 @@ struct fec_info {#include <asm/cpm2.h> #endif -/* This is used to operate with pins. -Note that the actual port size may -be different; cpm(s) handle it OK */ -struct bb_info { -u8 mdio_dat_msk; -u8 mdio_dir_msk; -u8 *mdio_dir; -u8 *mdio_dat; -u8 mdc_msk; -u8 *mdc_dat; -int delay; -}; -
[snip]
Quoted 4 lines
(quoted diff) +0
-0
b/drivers/net/fs_enet/mii-bitbang.cindex 8f766a5..2b9c44c 100644drivers/net/fs_enet/mii-bitbang.c +0
-0
[snip]
drivers/net/fs_enet/mii-bitbang.c line 40
Quoted 7 lines
drivers/net/fs_enet/mii-bitbang.c +7
-0+struct bb_info { +__be32 __iomem *dir; +__be32 __iomem *dat; +u32 mdio_msk; +u32 mdc_msk; +int delay; +};
We're loosing the possibility of having MDC and MDIO on different ports. This is quite easy to fix for the non-CONFIG_PPC_CPM_NEW_BINDING case but I'm not familiar with OF bindings (yet) to fix the CONFIG_PPC_CPM_NEW_BINDING case.
Signature · 9 lines
Laurent Pinchart CSE Semaphore Belgium Chaussée de Bruxelles, 732A B-1410 Waterloo Belgium T +32 (2) 387 42 59 F +32 (2) 387 42 75
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
Am Freitag, den 15.02.2008, 13:50 +0100 schrieb Laurent Pinchart:
Quoted 4 lines
We're loosing the possibility of having MDC and MDIO on different ports. This is quite easy to fix for the non-CONFIG_PPC_CPM_NEW_BINDING case but I'm not familiar with OF bindings (yet) to fix the
CONFIG_PPC_CPM_NEW_BINDINGcase.
for OF issue i had this for a paar month:
http://www.spinics.net/lists/netdev/msg45778.html
http://www.spinics.net/lists/netdev/msg47159.html
i'll be glad if it helps...
Regards
Sergej.
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
Hi Sergej,
Quoted 10 lines · Sergej Stepanov
Am Freitag, den 15.02.2008, 13:50 +0100 schrieb Laurent Pinchart:
Quoted 4 lines
We're loosing the possibility of having MDC and MDIO on different ports. This is quite easy to fix for the non-CONFIG_PPC_CPM_NEW_BINDING case but I'm not familiar with OF bindings (yet) to fix the
CONFIG_PPC_CPM_NEW_BINDINGcase.for OF issue i had this for a paar month:
http://www.spinics.net/lists/netdev/msg45778.html
http://www.spinics.net/lists/netdev/msg47159.html
i'll be glad if it helps...
Could these be applied ? Any showstopper ?
Best regards,
Signature · 9 lines
Laurent Pinchart CSE Semaphore Belgium Chaussée de Bruxelles, 732A B-1410 Waterloo Belgium T +32 (2) 387 42 59 F +32 (2) 387 42 75
Scott Wood
Acked-byRe: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
Quoted 9 lines · Laurent Pinchart
Hi Sergej,
Quoted 6 lines · Sergej Stepanov
Am Freitag, den 15.02.2008, 13:50 +0100 schrieb Laurent Pinchart:
Quoted 4 lines
We're loosing the possibility of having MDC and MDIO on different ports. This is quite easy to fix for the non-CONFIG_PPC_CPM_NEW_BINDING case but I'm not familiar with OF bindings (yet) to fix the
CONFIG_PPC_CPM_NEW_BINDINGcase.
Quoted 6 lines
Quoted 4 lines
for OF issue i had this for a paar month:
http://www.spinics.net/lists/netdev/msg45778.html
http://www.spinics.net/lists/netdev/msg47159.html
i'll be glad if it helps...Could these be applied ? Any showstopper ?
-Scott
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
Quoted 4 lines
-Scott
I thought, you did it.
Thank you.
Signature · 15 lines
Dipl.-Ing. Sergej Stepanov Software-Entwicklung IDS GmbH E-PA (Entwicklung - Prozess Automatisierung) Nobelstr. 18, D-76275 Ettlingen T. (0) 72 43/2 18-615 F. (0) 72 43/2 18-100 E. [email protected] <http://www.ids.de> Geschäftsführer: Norbert Wagner, Friedrich Abriß Sitz der Gesellschaft: Ettlingen Amtsgericht Mannheim HRB 362503
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
Quoted 6 lines · Sergej Stepanov
Quoted 3 lines
-Scott
I thought, you did it.
Thank you.
Your documentation patch states that
"The first reg resource is the I/O port register block on which MDIO resides. The second reg resource is the I/O port register block on which MDC resides. If there is only one reg resource, it is used for both MDIO and MDC."
If I'm not mistaken the code uses the first reg resource for MDC and the second reg resource for MDIO. Which one should be fixed, the doc or the code ?
Best regards,
Signature · 9 lines
Laurent Pinchart CSE Semaphore Belgium Chaussée de Bruxelles, 732A B-1410 Waterloo Belgium T +32 (2) 387 42 59 F +32 (2) 387 42 75
Re: [PATCH 6/9] fs_enet: Be an of_platform device when CONFIG_PPC_CPM_NEW_BINDING is set.
Am Montag, den 10.03.2008, 12:05 +0100 schrieb Laurent Pinchart:
Quoted 7 lines
Your documentation patch states that
"The first reg resource is the I/O port register block on which MDIO resides. The second reg resource is the I/O port register block on which MDC resides. If there is only one reg resource, it is used for both MDIO and MDC."
Quoted 6 lines
If I'm not mistaken the code uses the first reg resource for MDC and the second reg resource for MDIO. Which one should be fixed, the doc or the code ?
Best regards,
Ooops... Sorry...
You are right: the first is MDC, second MDIO.
I have to fix the docu, it would be simpler.
Thank you and best regards
Sergej.
PATCH v3 1/1 using mii-bitbang on different processor ports - update the booting-without-of.txt-file
In reply to Laurent PinchartThe patch updates the booting-without-of.txt-file.
There is a description for the case
if mdio data and clock pins are on different processor ports. It extends the "[PATCH v3] using mii-bitbang on different processor ports".
--
Documentation/powerpc/booting-without-of.txt +7 -3
@@ -2003,10 +2003,14 @@ platforms are moved over to use the flattened-device-tree model. Currently defined compatibles: fsl,pq1-fec-mdio (reg is same as first resource of FEC device) - fsl,cpm2-mdio-bitbang (reg is port C registers) + fsl,cpm2-mdio-bitbang Properties for fsl,cpm2-mdio-bitbang: - fsl,mdio-pin : pin of port C controlling mdio data - fsl,mdc-pin : pin of port C controlling mdio clock + The first reg resource is the I/O port register block on which MDC + resides. The second reg resource is the I/O port register block on + which MDIO resides. If there is only one reg resource, it is used for + both MDIO and MDC. + fsl,mdio-pin : pin of chosen port for controlling mdio data + fsl,mdc-pin : pin of chosen port for controlling mdio clock Example: