@@ -39,6 +39,7 @@
#include <plat/fb.h>
#include <plat/fimc-core.h>
#include <plat/sdhci.h>
+#include <plat/cma-stub.h>
/* Following are default values for UCON, ULCON and UFCON UART registers */
#define AQUILA_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
@@ -690,4 +691,5 @@ MACHINE_START(AQUILA, "Aquila")
.map_io = aquila_map_io,
.init_machine = aquila_machine_init,
.timer = &s3c24xx_timer,
+ .reserve = cma_mach_reserve,
MACHINE_END
@@ -45,6 +45,7 @@
#include <plat/keypad.h>
#include <plat/sdhci.h>
#include <plat/clock.h>
+#include <plat/cma-stub.h>
/* Following are default values for UCON, ULCON and UFCON UART registers */
#define GONI_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
@@ -865,4 +866,5 @@ MACHINE_START(GONI, "GONI")
.map_io = goni_map_io,
.init_machine = goni_machine_init,
.timer = &s3c24xx_timer,
+ .reserve = cma_mach_reserve,
MACHINE_END
@@ -21,6 +21,7 @@
#include <plat/s5pv310.h>
#include <plat/cpu.h>
#include <plat/devs.h>
+#include <plat/cma-stub.h>
#include <mach/map.h>
@@ -152,6 +153,7 @@ MACHINE_START(UNIVERSAL_C210, "UNIVERSAL_C210")
.boot_params = S5P_PA_SDRAM + 0x100,
.init_irq = s5pv310_init_irq,
.map_io = universal_map_io,
+ .reserve = cma_mach_reserve,
.init_machine = universal_machine_init,
.timer = &s5pv310_timer,
MACHINE_END
@@ -28,3 +28,5 @@ obj-$(CONFIG_S5P_DEV_FIMC0) += dev-fimc0.o
obj-$(CONFIG_S5P_DEV_FIMC1) += dev-fimc1.o
obj-$(CONFIG_S5P_DEV_FIMC2) += dev-fimc2.o
obj-$(CONFIG_S5P_DEV_ONENAND) += dev-onenand.o
+
+obj-$(CONFIG_CMA) += cma-stub.o
new file mode 100644
@@ -0,0 +1,49 @@
+/*
+ * This file is just a quick and dirty hack to get CMA testing device
+ * working. The cma_mach_reserve() should be called as mach's reserve
+ * callback. CMA testing device will use cma_ctx for allocations.
+ */
+
+#include <plat/cma-stub.h>
+
+#include <linux/cma.h>
+#include <linux/err.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+
+struct cma *cma_ctx;
+
+#define cma_size (32UL << 20) /* 32 MiB */
+
+static unsigned long cma_start __initdata;
+
+void __init cma_mach_reserve(void)
+{
+ unsigned long start = cma_reserve(0, cma_size, 0);
+ if (IS_ERR_VALUE(start))
+ printk(KERN_WARNING "cma: unable to reserve %lu for CMA: %d\n",
+ cma_size >> 20, (int)start);
+ else
+ cma_start = start;
+}
+
+static int __init cma_mach_init(void)
+{
+ int ret = -ENOMEM;
+
+ if (cma_start) {
+ struct cma *ctx = cma_create(cma_start, cma_size);
+ if (IS_ERR(ctx)) {
+ ret = PTR_ERR(ctx);
+ printk(KERN_WARNING
+ "cma: cma_create(%p, %p) failed: %d\n",
+ (void *)cma_start, (void *)cma_size, ret);
+ } else {
+ cma_ctx = ctx;
+ ret = 0;
+ }
+ }
+
+ return ret;
+}
+device_initcall(cma_mach_init);
new file mode 100644
@@ -0,0 +1,21 @@
+/*
+ * This file is just a quick and dirty hack to get CMA testing device
+ * working. The cma_mach_reserve() should be called as mach's reserve
+ * callback. CMA testing device will use cma_ctx for allocations.
+ */
+
+struct cma;
+
+#ifdef CONFIG_CMA
+
+extern struct cma *cma_ctx;
+
+void cma_mach_reserve(void);
+
+#else
+
+#define cma_ctx ((struct cma *)NULL)
+
+#define cma_mach_reserve NULL
+
+#endif