Patchwork mcp55_fadt patch to fix Microsoft Windows BSOD 0x000000A5 (0x00000011, 0x00000006 ....)

login
register
about
Submitter David Robinson
Date 2010-12-09 09:40:05
Message ID <00d501cb9785$0f826740$2e8735c0$@co.uk>
Download mbox | patch
Permalink /patch/2409/
State New
Headers show

Comments

David Robinson - 2010-12-09 09:40:05
Hi,

 

The attached patch fixes a problem preventing Windows XP / 7 from booting
with bug check error A5 (0x00000011, 0x00000006) on the Gigabyte GA-M57SLI-
S4 board. Microsoft documentation states that this bug check occurs because,
"SCI_EN never becomes set in PM1 Control Register". This patch sets the
SCI_EN bit. The patch applies to any board featuring the MCP55 south bridge.

 

Signed-off-by: David Robinson <drobinson@bluechiptechnology.co.uk>

 

 


Blue Chip Technology Limited. Chowley Oak Lane, Tattenhall, Chester, Cheshire CH3 9EX Tel: 01829 772000 Registered in England 3110403 Vat No: GB 618 374134
Stefan Reinauer - 2010-12-09 22:54:44
* David Robinson <drobinson@bluechiptechnology.co.uk> [101209 10:40]:
> Hi,
> 
>  
> 
> The attached patch fixes a problem preventing Windows XP / 7 from booting with
> bug check error A5 (0x00000011, 0x00000006) on the Gigabyte GA-M57SLI- S4
> board. Microsoft documentation states that this bug check occurs because,
> “SCI_EN never becomes set in PM1 Control Register”. This patch sets the SCI_EN
> bit. The patch applies to any board featuring the MCP55 south bridge.

Wouldn't the right way to fix this be to actually implement the
acpi_enable/acpi_disable commands on smi_cmd?

Stefan
Rudolf Marek - 2010-12-10 07:59:00
> Wouldn't the right way to fix this be to actually implement the
> acpi_enable/acpi_disable commands on smi_cmd?

No, you can put system in ACPI mode yourself. The only disadvantage is that you 
don't get poweroff if power button is pressed for less than 4 seconds (unless 
implementing IRQ9).

I think all other chipsets in coreboot are doing it this way except Intel ;)

Rudolf
David Robinson - 2010-12-10 10:01:32
Hi Stefan,

I agree that your suggestion would be the right implementation to support ACPI / Legacy systems. 

I chose this implementation due to a combination of: 
	* The mcp55 code sets the smi_cmd  to 0, disabling SMM.
	* Other main boards in the coreboot source tree seem to implement the same fix.
	* I don't have datasheets for the mcp55.

An alternative to patching this change into the coreboot source tree, could be to add an FAQ to the ACPI section of the coreboot website?

David Robinson

-----Original Message-----
From: Stefan Reinauer [mailto:stepan@coreboot.org] 
Sent: 09 December 2010 22:55
To: David Robinson
Cc: coreboot@coreboot.org
Subject: Re: [coreboot] mcp55_fadt patch to fix Microsoft Windows BSOD 0x000000A5 (0x00000011, 0x00000006 ....)

* David Robinson <drobinson@bluechiptechnology.co.uk> [101209 10:40]:
> Hi,
> 
>  
> 
> The attached patch fixes a problem preventing Windows XP / 7 from booting with
> bug check error A5 (0x00000011, 0x00000006) on the Gigabyte GA-M57SLI- S4
> board. Microsoft documentation states that this bug check occurs because,
> “SCI_EN never becomes set in PM1 Control Register”. This patch sets the SCI_EN
> bit. The patch applies to any board featuring the MCP55 south bridge.

Wouldn't the right way to fix this be to actually implement the
acpi_enable/acpi_disable commands on smi_cmd?

Stefan


Blue Chip Technology Limited. Chowley Oak Lane, Tattenhall, Chester, Cheshire CH3 9EX Tel: 01829 772000 Registered in England 3110403 Vat No: GB 618 374134
Patrick Georgi - 2010-12-10 10:30:43
Am 10.12.2010 08:59, schrieb Rudolf Marek:
>> Wouldn't the right way to fix this be to actually implement the
>> acpi_enable/acpi_disable commands on smi_cmd?
> 
> No, you can put system in ACPI mode yourself. The only disadvantage is
> that you don't get poweroff if power button is pressed for less than 4
> seconds (unless implementing IRQ9).
> 
> I think all other chipsets in coreboot are doing it this way except
> Intel ;)
I'd accept this in the context of this patch if fixing this for all
chipsets is put on the Infrastructure_Projects list (so it's not forgotten).

Subpar chipset support shouldn't be a long-term design goal.


Patrick
Stefan Reinauer - 2010-12-10 18:41:30
* Rudolf Marek <r.marek@assembler.cz> [101210 08:59]:
> >Wouldn't the right way to fix this be to actually implement the
> >acpi_enable/acpi_disable commands on smi_cmd?
> 
> No, you can put system in ACPI mode yourself. The only disadvantage
> is that you don't get poweroff if power button is pressed for less
> than 4 seconds (unless implementing IRQ9).
> 
> I think all other chipsets in coreboot are doing it this way except Intel ;)

Wow, so the Intel chipsets are the only ones not broken in coreboot? ;-)

Nevermind, I think this should go in but with a big warning in the code
stating that it should be released once we have a decent SMM handler for
that system.

Stefan

Patch

Index: src/southbridge/nvidia/mcp55/mcp55_fadt.c
===================================================================
--- src/southbridge/nvidia/mcp55/mcp55_fadt.c	(revision 6142)
+++ src/southbridge/nvidia/mcp55/mcp55_fadt.c	(working copy)
@@ -4,6 +4,7 @@ 
  * Copyright (C) 2004 Nick Barker <nick.barker9@btinternet.com>
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
  * Copyright (C) 2009 Harald Gutmann <harald.gutmann@gmx.net>
+ * Copyright (C) 2010 David Robinson <drobinson@bluechiptechnology.co.uk>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -69,6 +70,7 @@ 
 	fadt->pm2_cnt_blk = pm_base + 0x1c;
 	fadt->pm_tmr_blk = pm_base + 0x8;
 	fadt->gpe0_blk = pm_base + 0x20;
+	outl(0x1, pm_base + 0x4);	/*set SCI_EN */
 
 	fadt->pm1_evt_len = 4;
 	fadt->pm1_cnt_len = 2;