aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/powermac/bootx_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/powermac/bootx_init.c')
-rw-r--r--arch/powerpc/platforms/powermac/bootx_init.c29
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,
181static void __init bootx_add_display_props(unsigned long base, 181static 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
188static void __init bootx_dt_add_string(char *s, unsigned long *mem_end) 205static 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,