powerpc: More offb/bootx fixes
Subsystems (3)
PATCH 1/1 powerpc: More offb/bootx fixes
There were still some issues with offb when BootX doesn't provide a proper display node,
this fixes them. This also re-instates the palette hacks that were disabled a couple of
kernel versions ago when I converted to the new OF parsing and shuffles some functions
around to avoid prototypes.
Signed-off-by Benjamin Herrenschmidt <[email protected]>
arch/powerpc/platforms/powermac/bootx_init.c +24 -11
@@ -181,13 +181,18 @@ }static void __init bootx_add_display_props (unsigned long base, -unsigned long *mem_end) +unsigned long *mem_end, +int has_real_node) {boot_infos_t *bi = bootx_info;u32 tmp; -bootx_dt_add_prop ("linux,boot-display" ,NULL ,0 , mem_end); -bootx_dt_add_prop ("linux,opened" ,NULL ,0 , mem_end); +if (has_real_node) { +bootx_dt_add_prop ("linux,boot-display" ,NULL ,0 , mem_end); +bootx_dt_add_prop ("linux,opened" ,NULL ,0 , mem_end); + }else +bootx_dt_add_prop ("linux,bootx-noscreen" ,NULL ,0 , mem_end); + tmp = bi->dispDeviceDepth;bootx_dt_add_prop ("linux,bootx-depth" , &tmp,4 , mem_end); tmp = bi->dispDeviceRect[2 ] - bi->dispDeviceRect[0 ];
@@ -241,11 +246,6 @@DBG (" detected display ! adding properties names !\n" );bootx_dt_add_string ("linux,boot-display" , mem_end);bootx_dt_add_string ("linux,opened" , mem_end); -bootx_dt_add_string ("linux,bootx-depth" , mem_end); -bootx_dt_add_string ("linux,bootx-width" , mem_end); -bootx_dt_add_string ("linux,bootx-height" , mem_end); -bootx_dt_add_string ("linux,bootx-linebytes" , mem_end); -bootx_dt_add_string ("linux,bootx-addr" , mem_end);strncpy (bootx_disp_path, namep,255 ); }
@@ -329,10 +329,13 @@ ppp = &pp->next; } -if (node == bootx_node_chosen) +if (node == bootx_node_chosen) {bootx_add_chosen_props (base, mem_end); -if (node == bootx_info->dispDeviceRegEntryOffset) -bootx_add_display_props (base, mem_end); +if (bootx_info->dispDeviceRegEntryOffset ==0 ) +bootx_add_display_props (base, mem_end,0 ); + } +else if (node == bootx_info->dispDeviceRegEntryOffset) +bootx_add_display_props (base, mem_end,1 );/* do all our children */ cpp = &np->child;
@@ -374,6 +377,14 @@ mem_end +=4 ; bootx_dt_strend = mem_end;bootx_scan_dt_build_strings (base,4 , &mem_end); +/* Add some strings */ +bootx_dt_add_string ("linux,bootx-noscreen" , &mem_end); +bootx_dt_add_string ("linux,bootx-depth" , &mem_end); +bootx_dt_add_string ("linux,bootx-width" , &mem_end); +bootx_dt_add_string ("linux,bootx-height" , &mem_end); +bootx_dt_add_string ("linux,bootx-linebytes" , &mem_end); +bootx_dt_add_string ("linux,bootx-addr" , &mem_end); +/* Wrap up strings */ hdr->off_dt_strings = bootx_dt_strbase - mem_start; hdr->dt_strings_size = bootx_dt_strend - bootx_dt_strbase;
@@ -471,6 +482,7 @@if (bi->dispDeviceDepth ==16 ) bi->dispDeviceDepth =15 ; +#ifdef CONFIG_BOOTX_TEXT ptr = (unsigned long )bi->logicalDisplayBase; ptr += bi->dispDeviceRect[1 ] * bi->dispDeviceRowBytes;
@@ -508,6 +520,7 @@#ifdef CONFIG_BOOTX_TEXT btext_welcome (bi);#endif +/* New BootX enters kernel with MMU off, i/os are not allowed * here. This hack will have been done by the boostrap anyway. */
drivers/video/offb.c +161 -146
353 lines not on this page · raw message