This patch adds physically contiguous memory chunks to the UIO devices.
The same strategy can be used in the future for the CEU as well.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
.end = 0xfe9022eb,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device vpu_device = {
.end = 0xfe9200b7,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device veu_device = {
static int __init sh7343_devices_setup(void)
{
+ platform_resource_setup_memory(&vpu_device, "vpu", 1 << 20);
+ platform_resource_setup_memory(&veu_device, "veu", 2 << 20);
return platform_add_devices(sh7343_devices,
ARRAY_SIZE(sh7343_devices));
}
.end = 0xfe902807,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device vpu_device = {
.end = 0xfe9200b7,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device veu0_device = {
.end = 0xfe9240b7,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device veu1_device = {
static int __init sh7366_devices_setup(void)
{
+ platform_resource_setup_memory(&vpu_device, "vpu", 2 << 20);
+ platform_resource_setup_memory(&veu0_device, "veu0", 2 << 20);
+ platform_resource_setup_memory(&veu1_device, "veu1", 2 << 20);
return platform_add_devices(sh7366_devices,
ARRAY_SIZE(sh7366_devices));
}
.end = 0xfe9022eb,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device vpu_device = {
.end = 0xfe9200b7,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device veu_device = {
static int __init sh7722_devices_setup(void)
{
+ platform_resource_setup_memory(&vpu_device, "vpu", 1 << 20);
+ platform_resource_setup_memory(&veu_device, "veu", 2 << 20);
return platform_add_devices(sh7722_devices,
ARRAY_SIZE(sh7722_devices));
}
.end = 0xfe902807,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device vpu_device = {
.end = 0xfe92027b,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device veu0_device = {
.end = 0xfe92427b,
.flags = IORESOURCE_MEM,
},
+ [1] = {
+ /* place holder for contiguous memory */
+ },
};
static struct platform_device veu1_device = {
static int __init sh7723_devices_setup(void)
{
+ platform_resource_setup_memory(&vpu_device, "vpu", 2 << 20);
+ platform_resource_setup_memory(&veu0_device, "veu0", 2 << 20);
+ platform_resource_setup_memory(&veu1_device, "veu1", 2 << 20);
return platform_add_devices(sh7723_devices,
ARRAY_SIZE(sh7723_devices));
}
* for more details.
*/
#include <linux/mm.h>
+#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <asm/cacheflush.h>
#include <asm/addrspace.h>
}
}
EXPORT_SYMBOL(dma_cache_sync);
+
+int platform_resource_setup_memory(struct platform_device *pdev,
+ char *name, unsigned long memsize)
+{
+ struct resource *r;
+ dma_addr_t dma_handle;
+ void *buf;
+
+ r = pdev->resource + pdev->num_resources - 1;
+ if (r->flags) {
+ pr_warning("%s: unable to find empty space for resource\n",
+ name);
+ return -EINVAL;
+ }
+
+ buf = dma_alloc_coherent(NULL, memsize, &dma_handle, GFP_KERNEL);
+ if (!buf) {
+ pr_warning("%s: unable to allocate memory\n", name);
+ return -ENOMEM;
+ }
+
+ memset(buf, 0, memsize);
+
+ r->flags = IORESOURCE_MEM;
+ r->start = dma_handle;
+ r->end = r->start + memsize - 1;
+ r->name = name;
+ return 0;
+}
*/
#include <asm-generic/device.h>
+struct platform_device;
+/* allocate contiguous memory chunk and fill in struct resource */
+int platform_resource_setup_memory(struct platform_device *pdev,
+ char *name, unsigned long memsize);
+