Re: [PATCH] olpc: fix model detection without OFW

Andres Salomon
2009-02-14T21:53:28Z

On Sat, 14 Feb 2009 22:43:12 +0100
Ingo Molnar <mingo@elte.hu> wrote:
[...]
>
> Applied to tip:x86/urgent [for v2.6.29], thanks guys!
>
> Did i get the impact-line below right?
>
> Ingo
>

More like -

Impact: garbled display, laptop is unusable

;)

The DCON detection code determines whether there's a DCON attached
based upon the model (any XO model >= B2 is assumed to have a DCON).
The LXFB driver determines which mode to use based upon whether or not
it thinks there's a DCON attached, and the DCON/LXFB can't deal w/
standard modes.

So, the result is that LXFB attempts to use some random standard mode
rather than the DCON-required 1200x900, and the display is unusable.

> ---------------->
> From 307250cda516547c0b0fe70dc3a3626bd82820cc Mon Sep 17 00:00:00 2001
> From: Chris Ball <cjb@laptop.org>
> Date: Fri, 13 Feb 2009 20:56:18 -0500
> Subject: [PATCH] x86, olpc: fix model detection without OFW
>
> Impact: make certain OLPC-board revision based quirks [mouse, sound]
> work properly
>
> Harvey's endianness patch (e51a1ac2dfca9ad869471e88f828281db7e810c0)
> breaks model comparison on OLPC; the value 0xc2 needs to be scaled
> up by olpc_board(). The pre-patch version was wrong, but accidentally
> worked anyway (big-endian 0xc2 is big enough to satisfy all other
> board revisions, but little endian 0xc2 is not).
>
> Signed-off-by: Chris Ball <cjb@laptop.org>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Acked-by: Andres Salomon <dilinger@queued.net>
> Cc: Harvey Harrison <harvey.harrison@gmail.com>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
> ---
> arch/x86/kernel/olpc.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/kernel/olpc.c b/arch/x86/kernel/olpc.c
> index 7a13fac..4006c52 100644
> --- a/arch/x86/kernel/olpc.c
> +++ b/arch/x86/kernel/olpc.c
> @@ -203,7 +203,7 @@ static void __init platform_detect(void)
> static void __init platform_detect(void)
> {
> /* stopgap until OFW support is added to the kernel */
> - olpc_platform_info.boardrev = 0xc2;
> + olpc_platform_info.boardrev = olpc_board(0xc2);
> }
> #endif
>