[POWERPC] Fix various offb and BootX-related issues
This patch fixes various issues with offb (the default fbdev used on powerpc when no proper fbdev is supported). It was broken when using BootX under some circumstances and would fail to properly get the framebuffer base address in others. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
committed by
Paul Mackerras
parent
4ce631e7a2
commit
ab13446616
@ -111,7 +111,7 @@ void __init btext_setup_display(int width, int height, int depth, int pitch,
|
||||
logicalDisplayBase = (unsigned char *)address;
|
||||
dispDeviceBase = (unsigned char *)address;
|
||||
dispDeviceRowBytes = pitch;
|
||||
dispDeviceDepth = depth;
|
||||
dispDeviceDepth = depth == 15 ? 16 : depth;
|
||||
dispDeviceRect[0] = dispDeviceRect[1] = 0;
|
||||
dispDeviceRect[2] = width;
|
||||
dispDeviceRect[3] = height;
|
||||
@ -160,20 +160,28 @@ int btext_initialize(struct device_node *np)
|
||||
unsigned long address = 0;
|
||||
u32 *prop;
|
||||
|
||||
prop = (u32 *)get_property(np, "width", NULL);
|
||||
prop = (u32 *)get_property(np, "linux,bootx-width", NULL);
|
||||
if (prop == NULL)
|
||||
prop = (u32 *)get_property(np, "width", NULL);
|
||||
if (prop == NULL)
|
||||
return -EINVAL;
|
||||
width = *prop;
|
||||
prop = (u32 *)get_property(np, "height", NULL);
|
||||
prop = (u32 *)get_property(np, "linux,bootx-height", NULL);
|
||||
if (prop == NULL)
|
||||
prop = (u32 *)get_property(np, "height", NULL);
|
||||
if (prop == NULL)
|
||||
return -EINVAL;
|
||||
height = *prop;
|
||||
prop = (u32 *)get_property(np, "depth", NULL);
|
||||
prop = (u32 *)get_property(np, "linux,bootx-depth", NULL);
|
||||
if (prop == NULL)
|
||||
prop = (u32 *)get_property(np, "depth", NULL);
|
||||
if (prop == NULL)
|
||||
return -EINVAL;
|
||||
depth = *prop;
|
||||
pitch = width * ((depth + 7) / 8);
|
||||
prop = (u32 *)get_property(np, "linebytes", NULL);
|
||||
prop = (u32 *)get_property(np, "linux,bootx-linebytes", NULL);
|
||||
if (prop == NULL)
|
||||
prop = (u32 *)get_property(np, "linebytes", NULL);
|
||||
if (prop)
|
||||
pitch = *prop;
|
||||
if (pitch == 1)
|
||||
@ -194,7 +202,7 @@ int btext_initialize(struct device_node *np)
|
||||
g_max_loc_Y = height / 16;
|
||||
dispDeviceBase = (unsigned char *)address;
|
||||
dispDeviceRowBytes = pitch;
|
||||
dispDeviceDepth = depth;
|
||||
dispDeviceDepth = depth == 15 ? 16 : depth;
|
||||
dispDeviceRect[0] = dispDeviceRect[1] = 0;
|
||||
dispDeviceRect[2] = width;
|
||||
dispDeviceRect[3] = height;
|
||||
|
Reference in New Issue
Block a user