"Mark A. Greer" <[email protected]> writes: > From: Mark A. Greer <[email protected]> > > The base address for the DMA's Third Party Channel Controller is currently > hardcoded. Instead, use the base address that is already in the resource > data for the controller. > > Signed-off-by: Mark A. Greer <[email protected]> > --- > arch/arm/mach-davinci/dm355.c | 1 + > arch/arm/mach-davinci/dm644x.c | 1 + > arch/arm/mach-davinci/dm646x.c | 1 + > arch/arm/mach-davinci/dma.c | 17 ++++++++++++++--- > 4 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c > index cb9ea39..5f31649 100644 > --- a/arch/arm/mach-davinci/dm355.c > +++ b/arch/arm/mach-davinci/dm355.c > @@ -484,6 +484,7 @@ static struct edma_soc_info dm355_edma_info = { > > static struct resource edma_resources[] = { > { > + .name = "edma_cc", > .start = 0x01c00000, > .end = 0x01c00000 + SZ_64K - 1, > .flags = IORESOURCE_MEM, > diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c > index b2412e8..03946fd 100644 > --- a/arch/arm/mach-davinci/dm644x.c > +++ b/arch/arm/mach-davinci/dm644x.c > @@ -383,6 +383,7 @@ static struct edma_soc_info dm644x_edma_info = { > > static struct resource edma_resources[] = { > { > + .name = "edma_cc", > .start = 0x01c00000, > .end = 0x01c00000 + SZ_64K - 1, > .flags = IORESOURCE_MEM, > diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c > index c5283d3..af040cf 100644 > --- a/arch/arm/mach-davinci/dm646x.c > +++ b/arch/arm/mach-davinci/dm646x.c > @@ -297,6 +297,7 @@ static struct edma_soc_info dm646x_edma_info = { > > static struct resource edma_resources[] = { > { > + .name = "edma_cc", > .start = 0x01c00000, > .end = 0x01c00000 + SZ_64K - 1, > .flags = IORESOURCE_MEM, > diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c > index a7acd4c..ca416c1 100644 > --- a/arch/arm/mach-davinci/dma.c > +++ b/arch/arm/mach-davinci/dma.c > @@ -102,9 +102,6 @@ > > #define PARM_OFFSET(param_no) (EDMA_PARM + ((param_no) << 5)) > > -#define edmacc_regs_base IO_ADDRESS(DAVINCI_DMA_3PCC_BASE) > - > - > #define EDMA_MAX_DMACH 64 > #define EDMA_MAX_PARAMENTRY 512 > #define EDMA_MAX_EVQUE 2 /* FIXME too small */ > @@ -112,6 +109,8 @@ > > > /*****************************************************************************/ > > +static __iomem void *edmacc_regs_base; > + > static inline unsigned int edma_read(int offset) > { > return (unsigned int)__raw_readl(edmacc_regs_base + offset); > @@ -997,10 +996,21 @@ static int __init edma_probe(struct platform_device > *pdev) > int status; > const s8 *noevent; > int irq = 0, err_irq = 0; > + struct resource *r; > > if (!info) > return -ENODEV; > > + r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "edma_cc"); > + if (!r) > + return -ENODEV; > + > + r = request_mem_region(r->start, r->end + 1, r->name); > + if (!r) > + return -EBUSY; > + > + edmacc_regs_base = IO_ADDRESS(r->start); > +
This should be ioremap() now instead of IO_ADDRESS(). As background, The arch-specific ioremap() will now check and use existing static mappings, so IO_ADDRESS() is only needed for very early bootcode before static mappings are setup. > num_channels = min_t(unsigned, info->n_channel, > EDMA_MAX_DMACH); num_slots = min_t(unsigned, info->n_slot, > EDMA_MAX_PARAMENTRY); > > @@ -1079,6 +1089,7 @@ fail: > free_irq(err_irq, NULL); > if (irq) > free_irq(irq, NULL); > + release_mem_region(r->start, r->end + 1); And an iounmap here. Kevin _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
