Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fbdb3e5be36619c4acf415d870eceab4cbce2850
Commit:     fbdb3e5be36619c4acf415d870eceab4cbce2850
Parent:     dcfe2666ffd6316b764801db82092bc62db56e6f
Author:     Geert Uytterhoeven <[EMAIL PROTECTED]>
AuthorDate: Mon Feb 12 00:55:22 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Mon Feb 12 09:48:44 2007 -0800

    [PATCH] ps3: Preallocate bootmem memory for ps3fb
    
    Preallocate bootmem memory for the PS3 frame buffer device, which needs a
    large block of physically-contiguous memory. The size of this memory block 
is
    configurable:
      - The config option CONFIG_FB_PS3_DEFAULT_SIZE_M allows to specify the
        default amount of memory (in MiB) allocated to the virtual frame buffer.
      - The early boot parameter `ps3fb=xxx' allows to override the default 
value.
        It will be rounded up to a multiple of 1 MiB, if needed.
    
    Signed-off-by: Geert Uytterhoeven <[EMAIL PROTECTED]>
    Signed-off-by: Geoff Levand <[EMAIL PROTECTED]>
    Cc: James Simmons <[EMAIL PROTECTED]>
    Cc: Benjamin Herrenschmidt <[EMAIL PROTECTED]>
    Cc: Paul Mackerras <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/ps3/setup.c |   42 ++++++++++++++++++++++++++++++++++++
 include/asm-powerpc/ps3.h          |    9 +++++++
 2 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/platforms/ps3/setup.c 
b/arch/powerpc/platforms/ps3/setup.c
index e62505e..13d669a 100644
--- a/arch/powerpc/platforms/ps3/setup.c
+++ b/arch/powerpc/platforms/ps3/setup.c
@@ -24,6 +24,7 @@
 #include <linux/root_dev.h>
 #include <linux/console.h>
 #include <linux/kexec.h>
+#include <linux/bootmem.h>
 
 #include <asm/machdep.h>
 #include <asm/firmware.h>
@@ -80,6 +81,46 @@ static void ps3_panic(char *str)
        for (;;) ;
 }
 
+
+static void prealloc(struct ps3_prealloc *p)
+{
+       if (!p->size)
+               return;
+
+       p->address = __alloc_bootmem(p->size, p->align, __pa(MAX_DMA_ADDRESS));
+       if (!p->address) {
+               printk(KERN_ERR "%s: Cannot allocate %s\n", __FUNCTION__,
+                      p->name);
+               return;
+       }
+
+       printk(KERN_INFO "%s: %lu bytes at %p\n", p->name, p->size,
+              p->address);
+}
+
+#ifdef CONFIG_FB_PS3
+struct ps3_prealloc ps3fb_videomemory = {
+    .name = "ps3fb videomemory",
+    .size = CONFIG_FB_PS3_DEFAULT_SIZE_M*1024*1024,
+    .align = 1024*1024                 /* the GPU requires 1 MiB alignment */
+};
+#define prealloc_ps3fb_videomemory()   prealloc(&ps3fb_videomemory)
+
+static int __init early_parse_ps3fb(char *p)
+{
+       if (!p)
+               return 1;
+
+       ps3fb_videomemory.size = _ALIGN_UP(memparse(p, &p),
+                                          ps3fb_videomemory.align);
+       return 0;
+}
+early_param("ps3fb", early_parse_ps3fb);
+#else
+#define prealloc_ps3fb_videomemory()   do { } while (0)
+#endif
+
+
 static void __init ps3_setup_arch(void)
 {
        union ps3_firmware_version v;
@@ -101,6 +142,7 @@ static void __init ps3_setup_arch(void)
        conswitchp = &dummy_con;
 #endif
 
+       prealloc_ps3fb_videomemory();
        ppc_md.power_save = ps3_power_save;
 
        DBG(" <- %s:%d\n", __func__, __LINE__);
diff --git a/include/asm-powerpc/ps3.h b/include/asm-powerpc/ps3.h
index 4f5a1e0..e5982ad 100644
--- a/include/asm-powerpc/ps3.h
+++ b/include/asm-powerpc/ps3.h
@@ -388,4 +388,13 @@ struct ps3_vuart_port_device {
 
 int ps3_vuart_port_device_register(struct ps3_vuart_port_device *dev);
 
+struct ps3_prealloc {
+    const char *name;
+    void *address;
+    unsigned long size;
+    unsigned long align;
+};
+
+extern struct ps3_prealloc ps3fb_videomemory;
+
 #endif
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to