Re: kernel won't boot on a Cyrix MediaGXm (Geode )

Ingo Molnar
2008-07-21T11:48:18Z

* Rafael C. de Almeida <almeidaraf@gmail.com> wrote:

> Samuel Sieb wrote:
> > I have a computer here with a CPU that the BIOS identifies as:
> > Cyrix MediaGXm/Cx5530 Unicorn Revision 1.19.3B
> >
> > kernel 2.6.14 identifies it as:
> > vendor_id : Geode by NSC
> > cpu family : 5
> > model : 9
> > model name : Geode(TM) Integrated Processor by National Semi
> > stepping : 1
> >
> > I can't boot any kernel later than 2.6.22 on it. Anything later either
> > hangs or gives random kernel panics while booting. I tracked down the
> > problem to a specific commit:
> >
> > commit f25f64ed5bd3c2932493681bdfdb483ea707da0a
> > Author: Juergen Beisert <juergen@kreuzholzen.de>
> > Date: Sun Jul 22 11:12:38 2007 +0200
> >
> > x86: Replace NSC/Cyrix specific chipset access macros by inlined
> > functions.
> >
> > Reversing the patch (compensating for kernel changes) let me boot a
> > 2.6.25 kernel. I realize the patch is supposed to fix something that
> > didn't work right, but I didn't have a problem before and I do now. :-)

does the debug patch below (ontop of v2.6.26 or later kernels) make the
system bootable again? Commit f25f64ed5 changed the meaning of that
line. This patch switches back to the old behavior (which essentially
did nothing, due to macro side-effect bugs).

(if this makes a difference we can figure out a proper way for a DMI or
CPU ID based quirk or something like that.)

Ingo

------------------>
commit d92d27891c37c58830e58e3277f1918465ceaee9
Author: Ingo Molnar <mingo@elte.hu>
Date: Mon Jul 21 13:45:19 2008 +0200

debug patch

Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
arch/x86/kernel/cpu/cyrix.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c
index 3fd7a67..85700c3 100644
--- a/arch/x86/kernel/cpu/cyrix.c
+++ b/arch/x86/kernel/cpu/cyrix.c
@@ -162,7 +162,7 @@ static void __cpuinit geode_configure(void)
local_irq_save(flags);

/* Suspend on halt power saving and enable #SUSP pin */
- setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);
+ /* setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88); */

ccr3 = getCx86(CX86_CCR3);
setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */