[coreboot] [commit] r5784 - trunk/src/devices/oprom

repository service svn at coreboot.org
Wed Sep 8 01:28:00 CEST 2010


Author: myles
Date: Wed Sep  8 01:27:59 2010
New Revision: 5784
URL: https://tracker.coreboot.org/trac/coreboot/changeset/5784

Log:
My Jmicron SATA card depends on the BIOS not clearing AL when setting AH.

Signed-off-by: Myles Watson <mylesgw at gmail.com>
Acked-by: Myles Watson <mylesgw at gmail.com>

Modified:
   trunk/src/devices/oprom/x86_interrupts.c

Modified: trunk/src/devices/oprom/x86_interrupts.c
==============================================================================
--- trunk/src/devices/oprom/x86_interrupts.c	Wed Sep  8 00:30:15 2010	(r5783)
+++ trunk/src/devices/oprom/x86_interrupts.c	Wed Sep  8 01:27:59 2010	(r5784)
@@ -99,7 +99,8 @@
 		}
 		if (dev) {
 			unsigned short busdevfn;
-			regs->eax = 0;
+			regs->eax &= 0xffff00ff; /* Clear AH */
+			regs->eax |= PCIBIOS_SUCCESSFUL;
 			// busnum is an unsigned char;
 			// devfn is an int, so we mask it off.
 			busdevfn = (dev->bus->secondary << 8)
@@ -108,7 +109,8 @@
 			regs->ebx = busdevfn;
 			retval = 0;
 		} else {
-			regs->eax = PCIBIOS_NODEV;
+			regs->eax &= 0xffff00ff; /* Clear AH */
+			regs->eax |= PCIBIOS_NODEV;
 			retval = -1;
 		}
 		break;
@@ -125,7 +127,8 @@
 		if (!dev) {
 			printk(BIOS_DEBUG, "0x%x: BAD DEVICE bus %d devfn 0x%x\n", func, bus, devfn);
 			// Or are we supposed to return PCIBIOS_NODEV?
-			regs->eax = PCIBIOS_BADREG;
+			regs->eax &= 0xffff00ff; /* Clear AH */
+			regs->eax |= PCIBIOS_BADREG;
 			retval = -1;
 			return retval;
 		}
@@ -160,11 +163,14 @@
 		printk(BIOS_DEBUG, "0x%x: bus %d devfn 0x%x reg 0x%x val 0x%x\n",
 			     func, bus, devfn, reg, regs->ecx);
 #endif
-		regs->eax = 0;
+		regs->eax &= 0xffff00ff; /* Clear AH */
+		regs->eax |= PCIBIOS_SUCCESSFUL;
 		retval = 0;
 		break;
 	default:
 		printk(BIOS_ERR, "UNSUPPORTED PCIBIOS FUNCTION 0x%x\n", func);
+		regs->eax &= 0xffff00ff; /* Clear AH */
+		regs->eax |= PCIBIOS_UNSUPPORTED;
 		retval = -1;
 		break;
 	}




More information about the coreboot mailing list