[Cbe-oss-dev] [PATCH v2] block: Fix ps3vram sparse warnings
Jim Paris
jim at jtan.com
Sat Mar 23 01:34:23 EST 2013
Hi Geoff,
Geoff Levand wrote:
> Fix sparse warnings like these:
>
> drivers/block/ps3vram.c: warning: incorrect type in assignment (different address spaces)
> drivers/block/ps3vram.c: expected unsigned int [usertype] *ctrl
> drivers/block/ps3vram.c: got void [noderef] <asn:2>*
>
> Cc: Jim Paris <jim at jtan.com>
> Cc: Jens Axboe <axboe at kernel.dk>
> Signed-off-by: Geoff Levand <geoff at infradead.org>
Acked-by: Jim Paris <jim at jtan.com>
-jim
> ---
> Hi Jim,
>
> On Thu, 2013-03-21 at 17:19 -0400, Jim Paris wrote:
> Hi Geoff,
> >
> > It's been a while since I've looked at any of this, and I'm unable to
> > test on the PS3 at the moment, but shouldn't this be ioread32be() and
> > iowrite32be() instead of readl() and writel() throughout here?
>
> Thanks for checking. It even boots now...
>
> -Geoff
>
> drivers/block/ps3vram.c | 32 ++++++++++++++++----------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
> index 75e112d..98c3a64 100644
> --- a/drivers/block/ps3vram.c
> +++ b/drivers/block/ps3vram.c
> @@ -73,8 +73,8 @@ struct ps3vram_priv {
>
> u64 memory_handle;
> u64 context_handle;
> - u32 *ctrl;
> - void *reports;
> + u32 __iomem *ctrl;
> + void __iomem *reports;
> u8 *xdr_buf;
>
> u32 *fifo_base;
> @@ -104,7 +104,7 @@ static char *size = "256M";
> module_param(size, charp, 0);
> MODULE_PARM_DESC(size, "memory size");
>
> -static u32 *ps3vram_get_notifier(void *reports, int notifier)
> +static u32 __iomem *ps3vram_get_notifier(void __iomem *reports, int notifier)
> {
> return reports + DMA_NOTIFIER_OFFSET_BASE +
> DMA_NOTIFIER_SIZE * notifier;
> @@ -113,22 +113,22 @@ static u32 *ps3vram_get_notifier(void *reports, int notifier)
> static void ps3vram_notifier_reset(struct ps3_system_bus_device *dev)
> {
> struct ps3vram_priv *priv = ps3_system_bus_get_drvdata(dev);
> - u32 *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
> + u32 __iomem *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
> int i;
>
> for (i = 0; i < 4; i++)
> - notify[i] = 0xffffffff;
> + iowrite32be(0xffffffff, notify + i);
> }
>
> static int ps3vram_notifier_wait(struct ps3_system_bus_device *dev,
> unsigned int timeout_ms)
> {
> struct ps3vram_priv *priv = ps3_system_bus_get_drvdata(dev);
> - u32 *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
> + u32 __iomem *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
> unsigned long timeout;
>
> for (timeout = 20; timeout; timeout--) {
> - if (!notify[3])
> + if (!ioread32be(notify + 3))
> return 0;
> udelay(10);
> }
> @@ -136,7 +136,7 @@ static int ps3vram_notifier_wait(struct ps3_system_bus_device *dev,
> timeout = jiffies + msecs_to_jiffies(timeout_ms);
>
> do {
> - if (!notify[3])
> + if (!ioread32be(notify + 3))
> return 0;
> msleep(1);
> } while (time_before(jiffies, timeout));
> @@ -148,8 +148,8 @@ static void ps3vram_init_ring(struct ps3_system_bus_device *dev)
> {
> struct ps3vram_priv *priv = ps3_system_bus_get_drvdata(dev);
>
> - priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET;
> - priv->ctrl[CTRL_GET] = FIFO_BASE + FIFO_OFFSET;
> + iowrite32be(FIFO_BASE + FIFO_OFFSET, priv->ctrl + CTRL_PUT);
> + iowrite32be(FIFO_BASE + FIFO_OFFSET, priv->ctrl + CTRL_GET);
> }
>
> static int ps3vram_wait_ring(struct ps3_system_bus_device *dev,
> @@ -159,14 +159,14 @@ static int ps3vram_wait_ring(struct ps3_system_bus_device *dev,
> unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms);
>
> do {
> - if (priv->ctrl[CTRL_PUT] == priv->ctrl[CTRL_GET])
> + if (ioread32be(priv->ctrl + CTRL_PUT) == ioread32be(priv->ctrl + CTRL_GET))
> return 0;
> msleep(1);
> } while (time_before(jiffies, timeout));
>
> dev_warn(&dev->core, "FIFO timeout (%08x/%08x/%08x)\n",
> - priv->ctrl[CTRL_PUT], priv->ctrl[CTRL_GET],
> - priv->ctrl[CTRL_TOP]);
> + ioread32be(priv->ctrl + CTRL_PUT), ioread32be(priv->ctrl + CTRL_GET),
> + ioread32be(priv->ctrl + CTRL_TOP));
>
> return -ETIMEDOUT;
> }
> @@ -189,7 +189,7 @@ static void ps3vram_rewind_ring(struct ps3_system_bus_device *dev)
>
> ps3vram_out_ring(priv, 0x20000000 | (FIFO_BASE + FIFO_OFFSET));
>
> - priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET;
> + iowrite32be(FIFO_BASE + FIFO_OFFSET, priv->ctrl + CTRL_PUT);
>
> /* asking the HV for a blit will kick the FIFO */
> status = lv1_gpu_fb_blit(priv->context_handle, 0, 0, 0, 0);
> @@ -207,8 +207,8 @@ static void ps3vram_fire_ring(struct ps3_system_bus_device *dev)
>
> mutex_lock(&ps3_gpu_mutex);
>
> - priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET +
> - (priv->fifo_ptr - priv->fifo_base) * sizeof(u32);
> + iowrite32be(FIFO_BASE + FIFO_OFFSET + (priv->fifo_ptr - priv->fifo_base)
> + * sizeof(u32), priv->ctrl + CTRL_PUT);
>
> /* asking the HV for a blit will kick the FIFO */
> status = lv1_gpu_fb_blit(priv->context_handle, 0, 0, 0, 0);
> --
> 1.7.9.5
>
>
>
>
> _______________________________________________
> cbe-oss-dev mailing list
> cbe-oss-dev at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/cbe-oss-dev
More information about the cbe-oss-dev
mailing list