These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / block / ps3vram.c
index ef45cfb..56847fc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * ps3vram - Use extra PS3 video ram as MTD block device.
+ * ps3vram - Use extra PS3 video ram as block device.
  *
  * Copyright 2009 Sony Corporation
  *
@@ -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);
@@ -593,11 +593,12 @@ out:
        next = bio_list_peek(&priv->list);
        spin_unlock_irq(&priv->lock);
 
-       bio_endio(bio, error);
+       bio->bi_error = error;
+       bio_endio(bio);
        return next;
 }
 
-static void ps3vram_make_request(struct request_queue *q, struct bio *bio)
+static blk_qc_t ps3vram_make_request(struct request_queue *q, struct bio *bio)
 {
        struct ps3_system_bus_device *dev = q->queuedata;
        struct ps3vram_priv *priv = ps3_system_bus_get_drvdata(dev);
@@ -605,17 +606,21 @@ static void ps3vram_make_request(struct request_queue *q, struct bio *bio)
 
        dev_dbg(&dev->core, "%s\n", __func__);
 
+       blk_queue_split(q, &bio, q->bio_split);
+
        spin_lock_irq(&priv->lock);
        busy = !bio_list_empty(&priv->list);
        bio_list_add(&priv->list, bio);
        spin_unlock_irq(&priv->lock);
 
        if (busy)
-               return;
+               return BLK_QC_T_NONE;
 
        do {
                bio = ps3vram_do_bio(dev, bio);
        } while (bio);
+
+       return BLK_QC_T_NONE;
 }
 
 static int ps3vram_probe(struct ps3_system_bus_device *dev)