> > -----Original Message----- > > From: linux-omap-owner@xxxxxxxxxxxxxxx > > [mailto:linux-omap-owner@xxxxxxxxxxxxxxx] On Behalf Of vimal singh > > Sent: Wednesday, October 14, 2009 3:23 PM > > To: Varadarajan, Charu Latha > > Cc: linux-omap@xxxxxxxxxxxxxxx; Syed, Rafiuddin > > Subject: Re: [PATCH] OMAP3: Fix McBSP poll read and write for > > 32bit reg access > > > > On Wed, Oct 14, 2009 at 3:00 PM, <charu@xxxxxx> wrote: > > > omap_mcbsp_pollwrite and omap_mcbsp_pollread functions access > > > McBSP registers as 16-bit registers. > > > > > > The McBSP registers (DRR_REG and DXR_REG) are limited to > > > 32-bit data accesses (L4 Interconnect). 16-bit and 8-bit is > > > not allowed and can corrupt register content. > > > > > > This patch modifies omap_mcbsp_pollwrite and > > > omap_mcbsp_pollread functions to do 32 bit access for above > > > mentioned McBSP registers. Data accepted by these > > > functions is also modified to 32-bit. > > > > > > Signed-off-by: Charulatha V <charu@xxxxxx> > > > Signed-off-by: Syed Rafiuddin <rafiuddin.syed@xxxxxx> > > > --- > > > arch/arm/plat-omap/include/mach/mcbsp.h | 4 +- > > > arch/arm/plat-omap/mcbsp.c | 46 > > ++++++++++++++----------------- > > > 2 files changed, 23 insertions(+), 27 deletions(-) > > > > > > diff --git a/arch/arm/plat-omap/include/mach/mcbsp.h > > b/arch/arm/plat-omap/include/mach/mcbsp.h > > > index 7e9cae3..05b0d8d 100644 > > > --- a/arch/arm/plat-omap/include/mach/mcbsp.h > > > +++ b/arch/arm/plat-omap/include/mach/mcbsp.h > > > @@ -455,8 +455,8 @@ int > > omap_mcbsp_spi_master_recv_word_poll(unsigned int id, u32 * word); > > > void omap_mcbsp_set_spi_mode(unsigned int id, const struct > > omap_mcbsp_spi_cfg * spi_cfg); > > > > > > /* Polled read/write functions */ > > > -int omap_mcbsp_pollread(unsigned int id, u16 * buf); > > > -int omap_mcbsp_pollwrite(unsigned int id, u16 buf); > > > +int omap_mcbsp_pollread(unsigned int id, u32 *buf); > > > +int omap_mcbsp_pollwrite(unsigned int id, u32 buf); > > > int omap_mcbsp_set_io_type(unsigned int id, > > omap_mcbsp_io_type_t io_type); > > > > > > #endif > > > diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c > > > index 88ac976..1f278a2 100644 > > > --- a/arch/arm/plat-omap/mcbsp.c > > > +++ b/arch/arm/plat-omap/mcbsp.c > > > @@ -613,7 +613,7 @@ void omap_mcbsp_stop(unsigned int id, > > int tx, int rx) > > > EXPORT_SYMBOL(omap_mcbsp_stop); > > > > > > /* polled mcbsp i/o operations */ > > > -int omap_mcbsp_pollwrite(unsigned int id, u16 buf) > > > +int omap_mcbsp_pollwrite(unsigned int id, u32 buf) > > > { > > > struct omap_mcbsp *mcbsp; > > > void __iomem *base; > > > @@ -626,26 +626,24 @@ int omap_mcbsp_pollwrite(unsigned int > > id, u16 buf) > > > mcbsp = id_to_mcbsp_ptr(id); > > > base = mcbsp->io_base; > > > > > > - writew(buf, base + OMAP_MCBSP_REG_DXR1); > > > + OMAP_MCBSP_WRITE(base, DXR, buf); > > > /* if frame sync error - clear the error */ > > > - if (readw(base + OMAP_MCBSP_REG_SPCR2) & XSYNC_ERR) { > > > + if (OMAP_MCBSP_READ(base, SPCR2) & XSYNC_ERR) { > > > /* clear error */ > > > - writew(readw(base + OMAP_MCBSP_REG_SPCR2) & > > (~XSYNC_ERR), > > > - base + OMAP_MCBSP_REG_SPCR2); > > > + OMAP_MCBSP_WRITE(base, SPCR2, > > OMAP_MCBSP_READ(base , SPCR2) > > > > remove extra space: 'base ,' > > checkpatch.pl should catch these kind of issues. checkpatch.pl has not captured this error.... Anyways, I will modify the same in my next version of patch > > > > -vimal > > > > > + & (~XSYNC_ERR)); > > > /* resend */ > > > return -1; > > > } else { > > > /* wait for transmit confirmation */ > > > int attemps = 0; > > > - while (!(readw(base + OMAP_MCBSP_REG_SPCR2) > > & XRDY)) { > > > + while (!(OMAP_MCBSP_READ(base, SPCR2) & XRDY)) { > > > if (attemps++ > 1000) { > > > - writew(readw(base + > > OMAP_MCBSP_REG_SPCR2) & > > > - (~XRST), > > > - base + OMAP_MCBSP_REG_SPCR2); > > > + OMAP_MCBSP_WRITE(base, SPCR2, > > > + > > OMAP_MCBSP_READ(base, SPCR2) & (~XRST)); > > > udelay(10); > > > - writew(readw(base + > > OMAP_MCBSP_REG_SPCR2) | > > > - (XRST), > > > - base + OMAP_MCBSP_REG_SPCR2); > > > + OMAP_MCBSP_WRITE(base, SPCR2, > > > + > > OMAP_MCBSP_READ(base, SPCR2) | (XRST)); > > > udelay(10); > > > dev_err(mcbsp->dev, "Could > > not write to" > > > " McBSP%d > > Register\n", mcbsp->id); > > > @@ -658,7 +656,7 @@ int omap_mcbsp_pollwrite(unsigned int > > id, u16 buf) > > > } > > > EXPORT_SYMBOL(omap_mcbsp_pollwrite); > > > > > > -int omap_mcbsp_pollread(unsigned int id, u16 *buf) > > > +int omap_mcbsp_pollread(unsigned int id, u32 *buf) > > > { > > > struct omap_mcbsp *mcbsp; > > > void __iomem *base; > > > @@ -671,24 +669,22 @@ int omap_mcbsp_pollread(unsigned int > > id, u16 *buf) > > > > > > base = mcbsp->io_base; > > > /* if frame sync error - clear the error */ > > > - if (readw(base + OMAP_MCBSP_REG_SPCR1) & RSYNC_ERR) { > > > + if (OMAP_MCBSP_READ(base, SPCR1) & RSYNC_ERR) { > > > /* clear error */ > > > - writew(readw(base + OMAP_MCBSP_REG_SPCR1) & > > (~RSYNC_ERR), > > > - base + OMAP_MCBSP_REG_SPCR1); > > > + OMAP_MCBSP_WRITE(base, SPCR1, > > OMAP_MCBSP_READ(base, SPCR1) > > > + & (~RSYNC_ERR)); > > > /* resend */ > > > return -1; > > > } else { > > > /* wait for recieve confirmation */ > > > int attemps = 0; > > > - while (!(readw(base + OMAP_MCBSP_REG_SPCR1) > > & RRDY)) { > > > - if (attemps++ > 1000) { > > > - writew(readw(base + > > OMAP_MCBSP_REG_SPCR1) & > > > - (~RRST), > > > - base + OMAP_MCBSP_REG_SPCR1); > > > + while (!(OMAP_MCBSP_READ(base, SPCR1) & RRDY)) { > > > + if (attemps++ > 10000) { > > > + OMAP_MCBSP_WRITE(base, SPCR1, > > > + > > OMAP_MCBSP_READ(base, SPCR1) & (~RRST)); > > > udelay(10); > > > - writew(readw(base + > > OMAP_MCBSP_REG_SPCR1) | > > > - (RRST), > > > - base + OMAP_MCBSP_REG_SPCR1); > > > + OMAP_MCBSP_WRITE(base, SPCR1, > > > + > > OMAP_MCBSP_READ(base, SPCR1) | (RRST)); > > > udelay(10); > > > dev_err(mcbsp->dev, "Could > > not read from" > > > " McBSP%d > > Register\n", mcbsp->id); > > > @@ -696,7 +692,7 @@ int omap_mcbsp_pollread(unsigned int > > id, u16 *buf) > > > } > > > } > > > } > > > - *buf = readw(base + OMAP_MCBSP_REG_DRR1); > > > + *buf = OMAP_MCBSP_READ(base, DRR); > > > > > > return 0; > > > } > > > -- > > > 1.6.0.4 > > > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html