* [PATCH] mmc: tmio: add barriers to IO operations
@ 2013-01-23 16:46 Guennadi Liakhovetski
2013-01-24 11:10 ` Paul Mundt
0 siblings, 1 reply; 5+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-23 16:46 UTC (permalink / raw)
To: linux-sh; +Cc: linux-mmc, Magnus Damm, Chris Ball
Without barriers SDIO operations fail with runtime PM enabled.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
drivers/mmc/host/tmio_mmc.h | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
index d857f5c..ad1a1c6 100644
--- a/drivers/mmc/host/tmio_mmc.h
+++ b/drivers/mmc/host/tmio_mmc.h
@@ -159,19 +159,20 @@ int tmio_mmc_host_runtime_resume(struct device *dev);
static inline u16 sd_ctrl_read16(struct tmio_mmc_host *host, int addr)
{
- return readw(host->ctl + (addr << host->bus_shift));
+ return ioread16(host->ctl + (addr << host->bus_shift));
}
static inline void sd_ctrl_read16_rep(struct tmio_mmc_host *host, int addr,
u16 *buf, int count)
{
+ wmb();
readsw(host->ctl + (addr << host->bus_shift), buf, count);
}
static inline u32 sd_ctrl_read32(struct tmio_mmc_host *host, int addr)
{
- return readw(host->ctl + (addr << host->bus_shift)) |
- readw(host->ctl + ((addr + 2) << host->bus_shift)) << 16;
+ return ioread16(host->ctl + (addr << host->bus_shift)) |
+ ioread16(host->ctl + ((addr + 2) << host->bus_shift)) << 16;
}
static inline void sd_ctrl_write16(struct tmio_mmc_host *host, int addr, u16 val)
@@ -181,19 +182,20 @@ static inline void sd_ctrl_write16(struct tmio_mmc_host *host, int addr, u16 val
*/
if (host->pdata->write16_hook && host->pdata->write16_hook(host, addr))
return;
- writew(val, host->ctl + (addr << host->bus_shift));
+ iowrite16(val, host->ctl + (addr << host->bus_shift));
}
static inline void sd_ctrl_write16_rep(struct tmio_mmc_host *host, int addr,
u16 *buf, int count)
{
writesw(host->ctl + (addr << host->bus_shift), buf, count);
+ wmb();
}
static inline void sd_ctrl_write32(struct tmio_mmc_host *host, int addr, u32 val)
{
- writew(val, host->ctl + (addr << host->bus_shift));
- writew(val >> 16, host->ctl + ((addr + 2) << host->bus_shift));
+ iowrite16(val, host->ctl + (addr << host->bus_shift));
+ iowrite16(val >> 16, host->ctl + ((addr + 2) << host->bus_shift));
}
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] mmc: tmio: add barriers to IO operations
2013-01-23 16:46 [PATCH] mmc: tmio: add barriers to IO operations Guennadi Liakhovetski
@ 2013-01-24 11:10 ` Paul Mundt
2013-01-24 11:20 ` Guennadi Liakhovetski
0 siblings, 1 reply; 5+ messages in thread
From: Paul Mundt @ 2013-01-24 11:10 UTC (permalink / raw)
To: Guennadi Liakhovetski; +Cc: linux-sh, linux-mmc, Magnus Damm, Chris Ball
On Wed, Jan 23, 2013 at 05:46:18PM +0100, Guennadi Liakhovetski wrote:
> Without barriers SDIO operations fail with runtime PM enabled.
>
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> ---
> drivers/mmc/host/tmio_mmc.h | 14 ++++++++------
> 1 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
> index d857f5c..ad1a1c6 100644
> --- a/drivers/mmc/host/tmio_mmc.h
> +++ b/drivers/mmc/host/tmio_mmc.h
> @@ -159,19 +159,20 @@ int tmio_mmc_host_runtime_resume(struct device *dev);
>
> static inline u16 sd_ctrl_read16(struct tmio_mmc_host *host, int addr)
> {
> - return readw(host->ctl + (addr << host->bus_shift));
> + return ioread16(host->ctl + (addr << host->bus_shift));
> }
>
> static inline void sd_ctrl_read16_rep(struct tmio_mmc_host *host, int addr,
> u16 *buf, int count)
> {
> + wmb();
> readsw(host->ctl + (addr << host->bus_shift), buf, count);
> }
>
Some reason to not use ioread16_rep() and friends?
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] mmc: tmio: add barriers to IO operations
2013-01-24 11:10 ` Paul Mundt
@ 2013-01-24 11:20 ` Guennadi Liakhovetski
2013-01-24 11:42 ` Paul Mundt
0 siblings, 1 reply; 5+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-24 11:20 UTC (permalink / raw)
To: Paul Mundt; +Cc: linux-sh, linux-mmc, Magnus Damm, Chris Ball
On Thu, 24 Jan 2013, Paul Mundt wrote:
> On Wed, Jan 23, 2013 at 05:46:18PM +0100, Guennadi Liakhovetski wrote:
> > Without barriers SDIO operations fail with runtime PM enabled.
> >
> > Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > ---
> > drivers/mmc/host/tmio_mmc.h | 14 ++++++++------
> > 1 files changed, 8 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
> > index d857f5c..ad1a1c6 100644
> > --- a/drivers/mmc/host/tmio_mmc.h
> > +++ b/drivers/mmc/host/tmio_mmc.h
> > @@ -159,19 +159,20 @@ int tmio_mmc_host_runtime_resume(struct device *dev);
> >
> > static inline u16 sd_ctrl_read16(struct tmio_mmc_host *host, int addr)
> > {
> > - return readw(host->ctl + (addr << host->bus_shift));
> > + return ioread16(host->ctl + (addr << host->bus_shift));
> > }
> >
> > static inline void sd_ctrl_read16_rep(struct tmio_mmc_host *host, int addr,
> > u16 *buf, int count)
> > {
> > + wmb();
> > readsw(host->ctl + (addr << host->bus_shift), buf, count);
> > }
> >
> Some reason to not use ioread16_rep() and friends?
Aren't they "raw," i.e. without barriers:
#define ioread16_rep(p,d,c) __raw_readsw(p,d,c)
?
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] mmc: tmio: add barriers to IO operations
2013-01-24 11:20 ` Guennadi Liakhovetski
@ 2013-01-24 11:42 ` Paul Mundt
2013-01-24 11:52 ` Guennadi Liakhovetski
0 siblings, 1 reply; 5+ messages in thread
From: Paul Mundt @ 2013-01-24 11:42 UTC (permalink / raw)
To: Guennadi Liakhovetski; +Cc: linux-sh, linux-mmc, Magnus Damm, Chris Ball
On Thu, Jan 24, 2013 at 12:20:19PM +0100, Guennadi Liakhovetski wrote:
> On Thu, 24 Jan 2013, Paul Mundt wrote:
>
> > On Wed, Jan 23, 2013 at 05:46:18PM +0100, Guennadi Liakhovetski wrote:
> > > Without barriers SDIO operations fail with runtime PM enabled.
> > >
> > > Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > > ---
> > > drivers/mmc/host/tmio_mmc.h | 14 ++++++++------
> > > 1 files changed, 8 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
> > > index d857f5c..ad1a1c6 100644
> > > --- a/drivers/mmc/host/tmio_mmc.h
> > > +++ b/drivers/mmc/host/tmio_mmc.h
> > > @@ -159,19 +159,20 @@ int tmio_mmc_host_runtime_resume(struct device *dev);
> > >
> > > static inline u16 sd_ctrl_read16(struct tmio_mmc_host *host, int addr)
> > > {
> > > - return readw(host->ctl + (addr << host->bus_shift));
> > > + return ioread16(host->ctl + (addr << host->bus_shift));
> > > }
> > >
> > > static inline void sd_ctrl_read16_rep(struct tmio_mmc_host *host, int addr,
> > > u16 *buf, int count)
> > > {
> > > + wmb();
> > > readsw(host->ctl + (addr << host->bus_shift), buf, count);
> > > }
> > >
> > Some reason to not use ioread16_rep() and friends?
>
> Aren't they "raw," i.e. without barriers:
>
> #define ioread16_rep(p,d,c) __raw_readsw(p,d,c)
I wasn't talking about the barrier semantics, I meant for consistency, as
you are converting to the ioread/write API for everything else.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] mmc: tmio: add barriers to IO operations
2013-01-24 11:42 ` Paul Mundt
@ 2013-01-24 11:52 ` Guennadi Liakhovetski
0 siblings, 0 replies; 5+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-24 11:52 UTC (permalink / raw)
To: Paul Mundt; +Cc: linux-sh, linux-mmc, Magnus Damm, Chris Ball
On Thu, 24 Jan 2013, Paul Mundt wrote:
> On Thu, Jan 24, 2013 at 12:20:19PM +0100, Guennadi Liakhovetski wrote:
> > On Thu, 24 Jan 2013, Paul Mundt wrote:
> >
> > > On Wed, Jan 23, 2013 at 05:46:18PM +0100, Guennadi Liakhovetski wrote:
> > > > Without barriers SDIO operations fail with runtime PM enabled.
> > > >
> > > > Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > > > ---
> > > > drivers/mmc/host/tmio_mmc.h | 14 ++++++++------
> > > > 1 files changed, 8 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
> > > > index d857f5c..ad1a1c6 100644
> > > > --- a/drivers/mmc/host/tmio_mmc.h
> > > > +++ b/drivers/mmc/host/tmio_mmc.h
> > > > @@ -159,19 +159,20 @@ int tmio_mmc_host_runtime_resume(struct device *dev);
> > > >
> > > > static inline u16 sd_ctrl_read16(struct tmio_mmc_host *host, int addr)
> > > > {
> > > > - return readw(host->ctl + (addr << host->bus_shift));
> > > > + return ioread16(host->ctl + (addr << host->bus_shift));
> > > > }
> > > >
> > > > static inline void sd_ctrl_read16_rep(struct tmio_mmc_host *host, int addr,
> > > > u16 *buf, int count)
> > > > {
> > > > + wmb();
> > > > readsw(host->ctl + (addr << host->bus_shift), buf, count);
> > > > }
> > > >
> > > Some reason to not use ioread16_rep() and friends?
> >
> > Aren't they "raw," i.e. without barriers:
> >
> > #define ioread16_rep(p,d,c) __raw_readsw(p,d,c)
>
> I wasn't talking about the barrier semantics, I meant for consistency, as
> you are converting to the ioread/write API for everything else.
Ok, I see. But the reason to replace readw() / writew() ops with io* was
to add barriers, whereas this change wouldn't actually do any good. So,
yeah, we could do that for consistency, but otherwise it wouldn't bring
any more benefits and explicit barriers would have to be kept anyway.
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-01-24 11:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-23 16:46 [PATCH] mmc: tmio: add barriers to IO operations Guennadi Liakhovetski
2013-01-24 11:10 ` Paul Mundt
2013-01-24 11:20 ` Guennadi Liakhovetski
2013-01-24 11:42 ` Paul Mundt
2013-01-24 11:52 ` Guennadi Liakhovetski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox