|
@@ -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__);
|