diff options
Diffstat (limited to 'arch/powerpc/platforms/powermac/bootx_init.c')
-rw-r--r-- | arch/powerpc/platforms/powermac/bootx_init.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/powermac/bootx_init.c b/arch/powerpc/platforms/powermac/bootx_init.c index cb257aeb91..5685ad9e88 100644 --- a/arch/powerpc/platforms/powermac/bootx_init.c +++ b/arch/powerpc/platforms/powermac/bootx_init.c | |||
@@ -181,8 +181,25 @@ static void __init bootx_add_chosen_props(unsigned long base, | |||
181 | static void __init bootx_add_display_props(unsigned long base, | 181 | static void __init bootx_add_display_props(unsigned long base, |
182 | unsigned long *mem_end) | 182 | unsigned long *mem_end) |
183 | { | 183 | { |
184 | boot_infos_t *bi = bootx_info; | ||
185 | u32 tmp; | ||
186 | |||
184 | bootx_dt_add_prop("linux,boot-display", NULL, 0, mem_end); | 187 | bootx_dt_add_prop("linux,boot-display", NULL, 0, mem_end); |
185 | bootx_dt_add_prop("linux,opened", NULL, 0, mem_end); | 188 | bootx_dt_add_prop("linux,opened", NULL, 0, mem_end); |
189 | tmp = bi->dispDeviceDepth; | ||
190 | bootx_dt_add_prop("linux,bootx-depth", &tmp, 4, mem_end); | ||
191 | tmp = bi->dispDeviceRect[2] - bi->dispDeviceRect[0]; | ||
192 | bootx_dt_add_prop("linux,bootx-width", &tmp, 4, mem_end); | ||
193 | tmp = bi->dispDeviceRect[3] - bi->dispDeviceRect[1]; | ||
194 | bootx_dt_add_prop("linux,bootx-height", &tmp, 4, mem_end); | ||
195 | tmp = bi->dispDeviceRowBytes; | ||
196 | bootx_dt_add_prop("linux,bootx-linebytes", &tmp, 4, mem_end); | ||
197 | tmp = (u32)bi->dispDeviceBase; | ||
198 | if (tmp == 0) | ||
199 | tmp = (u32)bi->logicalDisplayBase; | ||
200 | tmp += bi->dispDeviceRect[1] * bi->dispDeviceRowBytes; | ||
201 | tmp += bi->dispDeviceRect[0] * ((bi->dispDeviceDepth + 7) / 8); | ||
202 | bootx_dt_add_prop("linux,bootx-addr", &tmp, 4, mem_end); | ||
186 | } | 203 | } |
187 | 204 | ||
188 | static void __init bootx_dt_add_string(char *s, unsigned long *mem_end) | 205 | static void __init bootx_dt_add_string(char *s, unsigned long *mem_end) |
@@ -222,6 +239,11 @@ static void __init bootx_scan_dt_build_strings(unsigned long base, | |||
222 | DBG(" detected display ! adding properties names !\n"); | 239 | DBG(" detected display ! adding properties names !\n"); |
223 | bootx_dt_add_string("linux,boot-display", mem_end); | 240 | bootx_dt_add_string("linux,boot-display", mem_end); |
224 | bootx_dt_add_string("linux,opened", mem_end); | 241 | bootx_dt_add_string("linux,opened", mem_end); |
242 | bootx_dt_add_string("linux,bootx-depth", mem_end); | ||
243 | bootx_dt_add_string("linux,bootx-width", mem_end); | ||
244 | bootx_dt_add_string("linux,bootx-height", mem_end); | ||
245 | bootx_dt_add_string("linux,bootx-linebytes", mem_end); | ||
246 | bootx_dt_add_string("linux,bootx-addr", mem_end); | ||
225 | strncpy(bootx_disp_path, namep, 255); | 247 | strncpy(bootx_disp_path, namep, 255); |
226 | } | 248 | } |
227 | 249 | ||
@@ -443,7 +465,14 @@ void __init bootx_init(unsigned long r3, unsigned long r4) | |||
443 | if (!BOOT_INFO_IS_V2_COMPATIBLE(bi)) | 465 | if (!BOOT_INFO_IS_V2_COMPATIBLE(bi)) |
444 | bi->logicalDisplayBase = bi->dispDeviceBase; | 466 | bi->logicalDisplayBase = bi->dispDeviceBase; |
445 | 467 | ||
468 | /* Fixup depth 16 -> 15 as that's what MacOS calls 16bpp */ | ||
469 | if (bi->dispDeviceDepth == 16) | ||
470 | bi->dispDeviceDepth = 15; | ||
471 | |||
446 | #ifdef CONFIG_BOOTX_TEXT | 472 | #ifdef CONFIG_BOOTX_TEXT |
473 | ptr = (unsigned long)bi->logicalDisplayBase; | ||
474 | ptr += bi->dispDeviceRect[1] * bi->dispDeviceRowBytes; | ||
475 | ptr += bi->dispDeviceRect[0] * ((bi->dispDeviceDepth + 7) / 8); | ||
447 | btext_setup_display(bi->dispDeviceRect[2] - bi->dispDeviceRect[0], | 476 | btext_setup_display(bi->dispDeviceRect[2] - bi->dispDeviceRect[0], |
448 | bi->dispDeviceRect[3] - bi->dispDeviceRect[1], | 477 | bi->dispDeviceRect[3] - bi->dispDeviceRect[1], |
449 | bi->dispDeviceDepth, bi->dispDeviceRowBytes, | 478 | bi->dispDeviceDepth, bi->dispDeviceRowBytes, |