Kevin, Few comments on the patch.
> -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf > Of Kevin Hilman > Sent: Friday, January 30, 2009 4:32 AM > To: [email protected] > Subject: [PATCH 2/2] NET: davinci emac: convert to using ioremap() > > Cc: Chaithrika Subrahmanya <[email protected]> > Signed-off-by: Kevin Hilman <[email protected]> > --- > drivers/net/davinci_emac.c | 69 +++++++++++++++++++++++++++++++-------- > ----- > 1 files changed, 49 insertions(+), 20 deletions(-) > > diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c > index 1f86256..7431479 100644 > --- a/drivers/net/davinci_emac.c > +++ b/drivers/net/davinci_emac.c > @@ -29,9 +29,8 @@ > */ > > /** Pending Items in this driver: > - * 1. use ioremap(), remove davinci_readl()/etc, minimize __force > - * 2. Use Linux cache infrastcture for DMA'ed memory (dma_xxx functions) > - * 3. Add DM646x support (gigabit included) > + * 1. Use Linux cache infrastcture for DMA'ed memory (dma_xxx functions) > + * 2. Add DM646x support (gigabit included) The gigabit support has been added already. > */ > > #include <linux/module.h> > @@ -66,6 +65,7 @@ > > #include <asm/irq.h> > #include <asm/page.h> > +#include <asm/io.h> > > #include <mach/memory.h> > #include <mach/cpu.h> > @@ -485,8 +485,10 @@ struct emac_priv { > char mac_addr[6]; > spinlock_t tx_lock; > spinlock_t rx_lock; > - u32 emac_base_regs; > - u32 emac_ctrl_regs; > + u32 emac_base_phys; > + void __iomem *emac_base; > + u32 emac_ctrl_phys; > + void __iomem *ctrl_base; > void __iomem *emac_ctrl_ram; > u32 ctrl_ram_size; > struct emac_txch *txch[EMAC_DEF_MAX_TX_CH]; > @@ -557,16 +559,15 @@ static char *emac_rxhost_errcodes[16] = { > #define EMAC_DEV (&(priv)->ndev->dev) > > /* Helper macros */ > -#define emac_read(reg) davinci_readl((priv->emac_base_regs + > (reg))) > -#define emac_write(reg, val) \ > - davinci_writel(val, (priv->emac_base_regs + (reg))) > +#define emac_read(reg) ioread32(priv->emac_base + (reg)) > +#define emac_write(reg, val) iowrite32(val, priv->emac_base + (reg)) > > -#define emac_ctrl_read(reg) davinci_readl((priv->emac_ctrl_regs + > (reg))) > -#define emac_ctrl_write(reg, val) \ > - davinci_writel(val, (priv->emac_ctrl_regs + (reg))) > +#define emac_ctrl_read(reg) ioread32((priv->ctrl_base + (reg))) > +#define emac_ctrl_write(reg, val) iowrite32(val, (priv->ctrl_base + > (reg))) > + > +#define emac_mdio_read(reg) ioread32(bus->priv + (reg)) > +#define emac_mdio_write(reg, val) iowrite32(val, (bus->priv + (reg))) > > -#define emac_mdio_read(reg) davinci_readl((bus->priv + (reg))) > -#define emac_mdio_write(reg, val) davinci_writel(val, (bus->priv + > (reg))) > /** > * emac_dump_regs: Dump important EMAC registers to debug terminal > * @priv: The DaVinci EMAC private adapter structure > @@ -2644,9 +2645,16 @@ static int __devinit davinci_emac_probe(struct > platform_device *pdev) > rc = -ENOENT; > goto probe_quit; > } > - priv->emac_base_regs = res->start; > - ndev->base_addr = (unsigned long)IO_ADDRESS(res->start); > - if (!request_mem_region((u32)priv->emac_base_regs, > + priv->emac_base_phys = res->start; > + priv->emac_base = ioremap(res->start, res->end); The 'end' members of the resource structure for EMAC has the ending address value of module, therefore in ioremap calls, the size has to be passed in a manner similar to request_mem_region. > + if (!priv->emac_base) { > + dev_err(EMAC_DEV, "Unable to map IO\n"); > + rc = -ENOMEM; > + goto probe_quit; > + } > + printk("EMAC bas @ 0x%p\n", priv->emac_base); > + ndev->base_addr = (unsigned long)priv->emac_base; > + if (!request_mem_region(priv->emac_base_phys, > (res->end - res->start + 1), > ndev->name)) { Thanks, Chaithrika_______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
