Message ID | 1304578268-24887-1-git-send-email-alexander.stein@systec-electronic.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 1dbe7dada2d03d1313183d439068f1f951a91244 |
Headers | show |
On 05/05/11 07:51, Alexander Stein wrote: > req.sample needs its own cacheline otherwise accessing req.msg fetches > it in again. > > Note: This effect doesn't occur if the underlying SPI driver doesn't use > DMA at all. I would say the comment is a bit obvious, but then you are fixing a bug because it was wrong - so fair call. > > Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> > --- > This obsoletes the patch > [PATCH 1/2] ads7846: Make buffers in ads7846_read12_ser and ads7845_read12_ser DMA save > > drivers/input/touchscreen/ads7846.c | 12 ++++++++++-- > 1 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c > index c24946f..ab51a8d 100644 > --- a/drivers/input/touchscreen/ads7846.c > +++ b/drivers/input/touchscreen/ads7846.c > @@ -281,17 +281,25 @@ struct ser_req { > u8 command; > u8 ref_off; > u16 scratch; > - __be16 sample; > struct spi_message msg; > struct spi_transfer xfer[6]; > + /* > + * DMA (thus cache coherency maintenance) requires the > + * transfer buffers to live in their own cache lines. > + */ > + __be16 sample ____cacheline_aligned; > }; > > struct ads7845_ser_req { > u8 command[3]; > u8 pwrdown[3]; > - u8 sample[3]; > struct spi_message msg; > struct spi_transfer xfer[2]; > + /* > + * DMA (thus cache coherency maintenance) requires the > + * transfer buffers to live in their own cache lines. > + */ > + u8 sample[3] ____cacheline_aligned; > }; > > static int ads7846_read12_ser(struct device *dev, unsigned command) -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, May 05, 2011 at 10:06:30AM +0100, Jonathan Cameron wrote: > On 05/05/11 07:51, Alexander Stein wrote: > > req.sample needs its own cacheline otherwise accessing req.msg fetches > > it in again. > > > > Note: This effect doesn't occur if the underlying SPI driver doesn't use > > DMA at all. > I would say the comment is a bit obvious, but then you are fixing a bug > because it was wrong - so fair call. > > > > Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com> > Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Both applied, thanks Alexander and Jonathan.
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c index c24946f..ab51a8d 100644 --- a/drivers/input/touchscreen/ads7846.c +++ b/drivers/input/touchscreen/ads7846.c @@ -281,17 +281,25 @@ struct ser_req { u8 command; u8 ref_off; u16 scratch; - __be16 sample; struct spi_message msg; struct spi_transfer xfer[6]; + /* + * DMA (thus cache coherency maintenance) requires the + * transfer buffers to live in their own cache lines. + */ + __be16 sample ____cacheline_aligned; }; struct ads7845_ser_req { u8 command[3]; u8 pwrdown[3]; - u8 sample[3]; struct spi_message msg; struct spi_transfer xfer[2]; + /* + * DMA (thus cache coherency maintenance) requires the + * transfer buffers to live in their own cache lines. + */ + u8 sample[3] ____cacheline_aligned; }; static int ads7846_read12_ser(struct device *dev, unsigned command)
req.sample needs its own cacheline otherwise accessing req.msg fetches it in again. Note: This effect doesn't occur if the underlying SPI driver doesn't use DMA at all. Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com> --- This obsoletes the patch [PATCH 1/2] ads7846: Make buffers in ads7846_read12_ser and ads7845_read12_ser DMA save drivers/input/touchscreen/ads7846.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-)