diff options
Diffstat (limited to 'arch/i386/mach-visws/setup.c')
-rw-r--r-- | arch/i386/mach-visws/setup.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/arch/i386/mach-visws/setup.c b/arch/i386/mach-visws/setup.c index 07fac7e749c7..8a9e1a6f745d 100644 --- a/arch/i386/mach-visws/setup.c +++ b/arch/i386/mach-visws/setup.c | |||
@@ -10,6 +10,8 @@ | |||
10 | #include <asm/fixmap.h> | 10 | #include <asm/fixmap.h> |
11 | #include <asm/arch_hooks.h> | 11 | #include <asm/arch_hooks.h> |
12 | #include <asm/io.h> | 12 | #include <asm/io.h> |
13 | #include <asm/e820.h> | ||
14 | #include <asm/setup.h> | ||
13 | #include "cobalt.h" | 15 | #include "cobalt.h" |
14 | #include "piix4.h" | 16 | #include "piix4.h" |
15 | 17 | ||
@@ -133,3 +135,50 @@ void __init time_init_hook(void) | |||
133 | /* Wire cpu IDT entry to s/w handler (and Cobalt APIC to IDT) */ | 135 | /* Wire cpu IDT entry to s/w handler (and Cobalt APIC to IDT) */ |
134 | setup_irq(0, &irq0); | 136 | setup_irq(0, &irq0); |
135 | } | 137 | } |
138 | |||
139 | /* Hook for machine specific memory setup. */ | ||
140 | |||
141 | #define MB (1024 * 1024) | ||
142 | |||
143 | static unsigned long sgivwfb_mem_phys; | ||
144 | static unsigned long sgivwfb_mem_size; | ||
145 | |||
146 | long long mem_size __initdata = 0; | ||
147 | |||
148 | char * __init machine_specific_memory_setup(void) | ||
149 | { | ||
150 | long long gfx_mem_size = 8 * MB; | ||
151 | |||
152 | mem_size = ALT_MEM_K; | ||
153 | |||
154 | if (!mem_size) { | ||
155 | printk(KERN_WARNING "Bootloader didn't set memory size, upgrade it !\n"); | ||
156 | mem_size = 128 * MB; | ||
157 | } | ||
158 | |||
159 | /* | ||
160 | * this hardcodes the graphics memory to 8 MB | ||
161 | * it really should be sized dynamically (or at least | ||
162 | * set as a boot param) | ||
163 | */ | ||
164 | if (!sgivwfb_mem_size) { | ||
165 | printk(KERN_WARNING "Defaulting to 8 MB framebuffer size\n"); | ||
166 | sgivwfb_mem_size = 8 * MB; | ||
167 | } | ||
168 | |||
169 | /* | ||
170 | * Trim to nearest MB | ||
171 | */ | ||
172 | sgivwfb_mem_size &= ~((1 << 20) - 1); | ||
173 | sgivwfb_mem_phys = mem_size - gfx_mem_size; | ||
174 | |||
175 | add_memory_region(0, LOWMEMSIZE(), E820_RAM); | ||
176 | add_memory_region(HIGH_MEMORY, mem_size - sgivwfb_mem_size - HIGH_MEMORY, E820_RAM); | ||
177 | add_memory_region(sgivwfb_mem_phys, sgivwfb_mem_size, E820_RESERVED); | ||
178 | |||
179 | return "PROM"; | ||
180 | |||
181 | /* Remove gcc warnings */ | ||
182 | (void) sanitize_e820_map(NULL, NULL); | ||
183 | (void) copy_e820_map(NULL, 0); | ||
184 | } | ||