]> err.no Git - linux-2.6/commitdiff
[POWERPC] PS3: Preallocate bootmem memory for the PS3 FLASH ROM storage driver
authorGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Thu, 21 Jun 2007 14:14:20 +0000 (00:14 +1000)
committerPaul Mackerras <paulus@samba.org>
Thu, 28 Jun 2007 09:18:08 +0000 (19:18 +1000)
Preallocate 256 KiB of bootmem memory for the PS3 FLASH ROM storage driver.
This can be disabled by passing `ps3flash=off' on the kernel command line.

Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/ps3/setup.c
include/asm-powerpc/ps3.h

index 6b6eca17472c90ea5850670958105fd2a93a8223..aa05288de64e13b89aadecc06191ea08b474c7bc 100644 (file)
@@ -107,7 +107,8 @@ static void ps3_panic(char *str)
        while(1);
 }
 
-#if defined(CONFIG_FB_PS3) || defined(CONFIG_FB_PS3_MODULE)
+#if defined(CONFIG_FB_PS3) || defined(CONFIG_FB_PS3_MODULE) || \
+    defined(CONFIG_PS3_FLASH) || defined(CONFIG_PS3_FLASH_MODULE)
 static void prealloc(struct ps3_prealloc *p)
 {
        if (!p->size)
@@ -123,7 +124,9 @@ static void prealloc(struct ps3_prealloc *p)
        printk(KERN_INFO "%s: %lu bytes at %p\n", p->name, p->size,
               p->address);
 }
+#endif
 
+#if defined(CONFIG_FB_PS3) || defined(CONFIG_FB_PS3_MODULE)
 struct ps3_prealloc ps3fb_videomemory = {
        .name = "ps3fb videomemory",
        .size = CONFIG_FB_PS3_DEFAULT_SIZE_M*1024*1024,
@@ -146,6 +149,30 @@ early_param("ps3fb", early_parse_ps3fb);
 #define prealloc_ps3fb_videomemory()   do { } while (0)
 #endif
 
+#if defined(CONFIG_PS3_FLASH) || defined(CONFIG_PS3_FLASH_MODULE)
+struct ps3_prealloc ps3flash_bounce_buffer = {
+       .name = "ps3flash bounce buffer",
+       .size = 256*1024,
+       .align = 256*1024
+};
+EXPORT_SYMBOL_GPL(ps3flash_bounce_buffer);
+#define prealloc_ps3flash_bounce_buffer()      prealloc(&ps3flash_bounce_buffer)
+
+static int __init early_parse_ps3flash(char *p)
+{
+       if (!p)
+               return 1;
+
+       if (!strcmp(p, "off"))
+               ps3flash_bounce_buffer.size = 0;
+
+       return 0;
+}
+early_param("ps3flash", early_parse_ps3flash);
+#else
+#define prealloc_ps3flash_bounce_buffer()      do { } while (0)
+#endif
+
 static int ps3_set_dabr(u64 dabr)
 {
        enum {DABR_USER = 1, DABR_KERNEL = 2,};
@@ -175,6 +202,8 @@ static void __init ps3_setup_arch(void)
 #endif
 
        prealloc_ps3fb_videomemory();
+       prealloc_ps3flash_bounce_buffer();
+
        ppc_md.power_save = ps3_power_save;
 
        DBG(" <- %s:%d\n", __func__, __LINE__);
index a35aea2db9c5daf6448ef6501d4786b0bff86cdd..a6f3f5ee7ca7f70a3ee592c0e173f91b40f3e53b 100644 (file)
@@ -427,6 +427,7 @@ struct ps3_prealloc {
 };
 
 extern struct ps3_prealloc ps3fb_videomemory;
+extern struct ps3_prealloc ps3flash_bounce_buffer;
 
 
 #endif