[coreboot-gerrit] New patch to review for coreboot: 2bb3729 Unify and clean up remaining INT15 handlers

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Mon Nov 18 23:04:37 CET 2013


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4140

-gerrit

commit 2bb3729d8db44ffefa2eee4465574baf2ccfaed8
Author: Stefan Reinauer <reinauer at chromium.org>
Date:   Tue Apr 23 15:23:15 2013 -0700

    Unify and clean up remaining INT15 handlers
    
    Some handlers still had 2 variants, others were
    incorrectly guarded by CONFIG_ variables. This
    patch straightens them out.
    
    This does not touch the siemens/sitemp_g1p1 which
    provides an interestingly complex solution for the
    int15 handler.
    
    Signed-off-by: Stefan Reinauer <reinauer at google.com>
    
    Change-Id: I5d74fdf7c2ab1faa96ebc2b5ca5c69398449b069
    Reviewed-on: https://gerrit.chromium.org/gerrit/48979
    Reviewed-by: Aaron Durbin <adurbin at chromium.org>
    Reviewed-by: Patrick Georgi <patrick at georgi-clan.de>
    Commit-Queue: Stefan Reinauer <reinauer at google.com>
    Tested-by: Stefan Reinauer <reinauer at google.com>
---
 src/mainboard/ibase/mb899/mainboard.c        |   6 +-
 src/mainboard/intel/emeraldlake2/mainboard.c |   2 +-
 src/mainboard/kontron/986lcd-m/mainboard.c   |   4 +-
 src/mainboard/roda/rk886ex/mainboard.c       |   4 +-
 src/mainboard/samsung/lumpy/mainboard.c      | 134 ++++-----------------------
 src/mainboard/samsung/stumpy/mainboard.c     | 111 ++++------------------
 src/mainboard/thomson/ip1000/mainboard.c     |   6 +-
 7 files changed, 49 insertions(+), 218 deletions(-)

diff --git a/src/mainboard/ibase/mb899/mainboard.c b/src/mainboard/ibase/mb899/mainboard.c
index 4fc7d04..dbbc598 100644
--- a/src/mainboard/ibase/mb899/mainboard.c
+++ b/src/mainboard/ibase/mb899/mainboard.c
@@ -20,13 +20,13 @@
 #include <types.h>
 #include <device/device.h>
 #include <console/console.h>
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 #include <x86emu/x86emu.h>
 #endif
 #include <pc80/mc146818rtc.h>
 #include <arch/io.h>
 
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 static int int15_handler(void)
 {
 #define BOOT_DISPLAY_DEFAULT	0
@@ -213,7 +213,7 @@ static void verb_setup(void)
 
 static void mainboard_enable(device_t dev)
 {
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
diff --git a/src/mainboard/intel/emeraldlake2/mainboard.c b/src/mainboard/intel/emeraldlake2/mainboard.c
index 92704c9..5f7d224 100644
--- a/src/mainboard/intel/emeraldlake2/mainboard.c
+++ b/src/mainboard/intel/emeraldlake2/mainboard.c
@@ -156,7 +156,7 @@ static void verb_setup(void)
 
 static void mainboard_enable(device_t dev)
 {
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL || CONFIG_PCI_OPTION_ROM_RUN_REALMODE
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
diff --git a/src/mainboard/kontron/986lcd-m/mainboard.c b/src/mainboard/kontron/986lcd-m/mainboard.c
index 061944a..0bee70e 100644
--- a/src/mainboard/kontron/986lcd-m/mainboard.c
+++ b/src/mainboard/kontron/986lcd-m/mainboard.c
@@ -37,7 +37,7 @@
 #define BOOT_DISPLAY_EFP2	(1 << 6)
 #define BOOT_DISPLAY_LCD2	(1 << 7)
 
-#if CONFIG_VGA_ROM_RUN
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 static int int15_handler(void)
 {
 	/* This int15 handler is Intel IGD. specific. Other chipsets need other
@@ -221,7 +221,7 @@ static void verb_setup(void)
 
 static void mainboard_enable(device_t dev)
 {
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL || CONFIG_PCI_OPTION_ROM_RUN_REALMODE
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
diff --git a/src/mainboard/roda/rk886ex/mainboard.c b/src/mainboard/roda/rk886ex/mainboard.c
index 575aa9b..9504701 100644
--- a/src/mainboard/roda/rk886ex/mainboard.c
+++ b/src/mainboard/roda/rk886ex/mainboard.c
@@ -60,7 +60,7 @@ static void backlight_enable(void)
 #define BOOT_DISPLAY_EFP2	(1 << 6)
 #define BOOT_DISPLAY_LCD2	(1 << 7)
 
-#if CONFIG_VGA_ROM_RUN
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 static int int15_handler(void)
 {
 	/* This int15 handler is Intel IGD. specific. Other chipsets need other
@@ -124,7 +124,7 @@ static void mainboard_enable(device_t dev)
 	/* Disable Dummy DCC -> GP45 = 1 */
 	outb(inb(0x60f) | (1 << 5), 0x60f);
 
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL || CONFIG_PCI_OPTION_ROM_RUN_REALMODE
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
diff --git a/src/mainboard/samsung/lumpy/mainboard.c b/src/mainboard/samsung/lumpy/mainboard.c
index be9a046..c1749f7 100644
--- a/src/mainboard/samsung/lumpy/mainboard.c
+++ b/src/mainboard/samsung/lumpy/mainboard.c
@@ -49,15 +49,15 @@ void mainboard_suspend_resume(void)
 	send_ec_command(EC_ACPI_ENABLE);
 }
 
-#if defined(CONFIG_PCI_OPTION_ROM_RUN_REALMODE) && CONFIG_PCI_OPTION_ROM_RUN_REALMODE
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 static int int15_handler(void)
 {
 	int res=0;
 
 	printk(BIOS_DEBUG, "%s: INT15 function %04x!\n",
-			__func__, X86_EAX & 0xffff);
+			__func__, X86_AX);
 
-	switch(X86_EAX & 0xffff) {
+	switch(X86_AX) {
 	case 0x5f34:
 		/*
 		 * Set Panel Fitting Hook:
@@ -66,10 +66,8 @@ static int int15_handler(void)
 		 *  bit 0 = Centering (do not set with bit1 or bit2)
 		 *  0     = video bios default
 		 */
-		X86_EAX &= 0xffff0000;
-		X86_EAX |= 0x005f;
-		X86_ECX &= 0xffffff00;
-		X86_ECX |= 0x00;
+		X86_AX = 0x005f;
+		X86_CL = 0x00;
 		res = 1;
 		break;
 	case 0x5f35:
@@ -84,10 +82,8 @@ static int int15_handler(void)
 		 *  bit 6 = EFP2 *
 		 *  bit 7 = LFP2
 		 */
-		X86_EAX &= 0xffff0000;
-		X86_EAX |= 0x005f;
-		X86_ECX &= 0xffff0000;
-		X86_ECX |= 0x0000;
+		X86_AX = 0x005f;
+		X86_CX = 0x0000;
 		res = 1;
 		break;
 	case 0x5f51:
@@ -98,138 +94,46 @@ static int int15_handler(void)
 		 *  02h = SVDO-LVDS, LFP driven by SVDO decoder
 		 *  03h = eDP, LFP Driven by Int-DisplayPort encoder
 		 */
-		X86_EAX &= 0xffff0000;
-		X86_EAX |= 0x005f;
-		X86_ECX &= 0xffff0000;
-		X86_ECX |= 0x0001;
+		X86_AX = 0x005f;
+		X86_CX = 0x0001;
 		res = 1;
 		break;
 	case 0x5f70:
-		switch ((X86_ECX >> 8) & 0xff) {
+		switch (X86_CH) {
 		case 0:
 			/* Get Mux */
-			X86_EAX &= 0xffff0000;
-			X86_EAX |= 0x005f;
-			X86_ECX &= 0xffff0000;
-			X86_ECX |= 0x0000;
+			X86_AX = 0x005f;
+			X86_CX = 0x0000;
 			res = 1;
 			break;
 		case 1:
 			/* Set Mux */
-			X86_EAX &= 0xffff0000;
-			X86_EAX |= 0x005f;
-			X86_ECX &= 0xffff0000;
-			X86_ECX |= 0x0000;
+			X86_EAX = 0x005f;
+			X86_ECX = 0x0000;
 			res = 1;
 			break;
 		case 2:
 			/* Get SG/Non-SG mode */
-			X86_EAX &= 0xffff0000;
-			X86_EAX |= 0x005f;
-			X86_ECX &= 0xffff0000;
-			X86_ECX |= 0x0000;
+			X86_AX = 0x005f;
+			X86_CX = 0x0000;
 			res = 1;
 			break;
 		default:
 			/* FIXME: Interrupt was not handled, but return success? */
 			printk(BIOS_DEBUG, "Unknown INT15 5f70 function: 0x%02x\n",
-				((X86_ECX >> 8) & 0xff));
+				X86_CH);
 			return 1;
 		}
 		break;
 
         default:
-		printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n",
-				X86_EAX & 0xffff);
+		printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n", X86_AX);
 		break;
 	}
 	return res;
 }
 #endif
 
-#if defined(CONFIG_PCI_OPTION_ROM_RUN_YABEL) && CONFIG_PCI_OPTION_ROM_RUN_YABEL
-static int int15_handler(void)
-{
-	printk(BIOS_DEBUG, "%s: AX=%04x BX=%04x CX=%04x DX=%04x\n",
-			  __func__, X86_AX, X86_BX, X86_CX, X86_DX);
-
-	switch (X86_AX) {
-	case 0x5f34:
-		/*
-		 * Set Panel Fitting Hook:
-		 *  bit 2 = Graphics Stretching
-		 *  bit 1 = Text Stretching
-		 *  bit 0 = Centering (do not set with bit1 or bit2)
-		 *  0     = video bios default
-		 */
-		X86_AX = 0x005f;
-		X86_CL = 0x00;
-		break;
-	case 0x5f35:
-		/*
-		 * Boot Display Device Hook:
-		 *  bit 0 = CRT
-		 *  bit 1 = TV
-		 *  bit 2 = EFP *
-		 *  bit 3 = LFP
-		 *  bit 4 = CRT2
-		 *  bit 5 = TV2
-		 *  bit 6 = EFP2 *
-		 *  bit 7 = LFP2
-		 */
-		X86_AX = 0x005f;
-		X86_CX = 0x0000;
-		break;
-	case 0x5f51:
-		/*
-		 * Hook to select active LFP configuration:
-		 *  00h = No LVDS, VBIOS does not enable LVDS
-		 *  01h = Int-LVDS, LFP driven by integrated LVDS decoder
-		 *  02h = SVDO-LVDS, LFP driven by SVDO decoder
-		 *  03h = eDP, LFP Driven by Int-DisplayPort encoder
-		 */
-		X86_AX = 0x005f;
-		X86_CX = 1;
-		break;
-	case 0x5f70:
-		switch (X86_CH) {
-		case 0:
-			/* Get Mux */
-			printk(BIOS_DEBUG, "Get Mux\n");
-			X86_AX = 0x005f;
-			X86_CL = 0;
-			break;
-		case 1:
-			printk(BIOS_DEBUG, "Set Mux\n");
-			/* Set Mux */
-			X86_AX = 0x005f;
-			X86_CX = 0;
-			break;
-		case 2:
-			printk(BIOS_DEBUG, "Get SG Mode\n");
-			/* Get SG/Non-SG mode */
-			X86_AX = 0x005f;
-			X86_CX = 0;
-			break;
-		default:
-			/* Interrupt was not handled */
-			printk(BIOS_DEBUG, "Unknown INT15 5f70 function: 0x%02x\n",
-				X86_CH);
-			return 0;
-		}
-		break;
-	default:
-		/* Interrupt was not handled */
-		printk(BIOS_DEBUG, "Unknown INT15 function: 0x%04x\n",
-			X86_AX);
-		return 0;
-	}
-
-	/* Interrupt handled */
-	return 1;
-}
-#endif
-
 /* Audio Setup */
 
 extern const u32 * cim_verb_data;
@@ -302,7 +206,7 @@ static void mainboard_enable(device_t dev)
 {
 	dev->ops->init = mainboard_init;
 	dev->ops->get_smbios_data = lumpy_onboard_smbios_data;
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL || CONFIG_PCI_OPTION_ROM_RUN_REALMODE
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
diff --git a/src/mainboard/samsung/stumpy/mainboard.c b/src/mainboard/samsung/stumpy/mainboard.c
index cbf5af7..30612db 100644
--- a/src/mainboard/samsung/stumpy/mainboard.c
+++ b/src/mainboard/samsung/stumpy/mainboard.c
@@ -42,15 +42,15 @@ void mainboard_suspend_resume(void)
 	outb(0xcb, 0xb2);
 }
 
-#if defined(CONFIG_PCI_OPTION_ROM_RUN_REALMODE) && CONFIG_PCI_OPTION_ROM_RUN_REALMODE
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 static int int15_handler(void)
 {
 	int res=0;
 
 	printk(BIOS_DEBUG, "%s: INT15 function %04x!\n",
-			__func__, X86_EAX & 0xffff);
+			__func__, X86_AX);
 
-	switch(X86_EAX & 0xffff) {
+	switch(X86_AX) {
 	case 0x5f34:
 		/*
 		 * Set Panel Fitting Hook:
@@ -59,10 +59,8 @@ static int int15_handler(void)
 		 *  bit 0 = Centering (do not set with bit1 or bit2)
 		 *  0     = video bios default
 		 */
-		X86_EAX &= 0xffff0000;
-		X86_EAX |= 0x005f;
-		X86_ECX &= 0xffffff00;
-		X86_ECX |= 0x01;
+		X86_AX = 0x005f;
+		X86_CL = 0x01;
 		res = 1;
 		break;
 	case 0x5f35:
@@ -77,10 +75,8 @@ static int int15_handler(void)
 		 *  bit 6 = EFP2 *
 		 *  bit 7 = LFP2
 		 */
-		X86_EAX &= 0xffff0000;
-		X86_EAX |= 0x005f;
-		X86_ECX &= 0xffff0000;
-		X86_ECX |= 0x0000;
+		X86_AX = 0x005f;
+		X86_CX = 0x0000;
 		res = 1;
 		break;
 	case 0x5f51:
@@ -91,115 +87,46 @@ static int int15_handler(void)
 		 *  02h = SVDO-LVDS, LFP driven by SVDO decoder
 		 *  03h = eDP, LFP Driven by Int-DisplayPort encoder
 		 */
-		X86_EAX &= 0xffff0000;
-		X86_EAX |= 0x005f;
-		X86_ECX &= 0xffff0000;
-		X86_ECX |= 0x0003;
+		X86_AX = 0x005f;
+		X86_CX = 0x0003;
 		res = 1;
 		break;
 	case 0x5f70:
-		switch ((X86_ECX >> 8) & 0xff) {
+		switch (X86_CH) {
 		case 0:
 			/* Get Mux */
-			X86_EAX &= 0xffff0000;
-			X86_EAX |= 0x005f;
-			X86_ECX &= 0xffff0000;
-			X86_ECX |= 0x0000;
+			X86_AX = 0x005f;
+			X86_CX = 0x0000;
 			res = 1;
 			break;
 		case 1:
 			/* Set Mux */
-			X86_EAX &= 0xffff0000;
-			X86_EAX |= 0x005f;
-			X86_ECX &= 0xffff0000;
-			X86_ECX |= 0x0000;
+			X86_AX = 0x005f;
+			X86_CX = 0x0000;
 			res = 1;
 			break;
 		case 2:
 			/* Get SG/Non-SG mode */
-			X86_EAX &= 0xffff0000;
-			X86_EAX |= 0x005f;
-			X86_ECX &= 0xffff0000;
-			X86_ECX |= 0x0000;
+			X86_AX = 0x005f;
+			X86_CX = 0x0000;
 			res = 1;
 			break;
 		default:
 			/* FIXME: Interrupt was not handled, but return sucess? */
 			printk(BIOS_DEBUG, "Unknown INT15 5f70 function: 0x%02x\n",
-				((X86_ECX >> 8) & 0xff));
+				X86_CH);
 			return 1;
 		}
 		break;
 
         default:
-		printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n",
-				X86_EAX & 0xffff);
+		printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n", X86_AX);
 		break;
 	}
 	return res;
 }
 #endif
 
-#if defined(CONFIG_PCI_OPTION_ROM_RUN_YABEL) && CONFIG_PCI_OPTION_ROM_RUN_YABEL
-static int int15_handler(void)
-{
-	printk(BIOS_DEBUG, "%s: AX=%04x BX=%04x CX=%04x DX=%04x\n",
-			  __func__, X86_AX, X86_BX, X86_CX, X86_DX);
-
-	switch (X86_AX) {
-	case 0x5f34:
-		/*
-		 * Set Panel Fitting Hook:
-		 *  bit 2 = Graphics Stretching
-		 *  bit 1 = Text Stretching
-		 *  bit 0 = Centering (do not set with bit1 or bit2)
-		 */
-		X86_AX = 0x005f;
-		X86_CX = 0x0001;
-		break;
-	case 0x5f35:
-		/*
-		 * Boot Display Device Hook:
-		 *  bit 0 = CRT
-		 *  bit 1 = TV (eDP) *
-		 *  bit 2 = EFP *
-		 *  bit 3 = LFP
-		 *  bit 4 = CRT2
-		 *  bit 5 = TV2 (eDP) *
-		 *  bit 6 = EFP2 *
-		 *  bit 7 = LFP2
-		 */
-		X86_AX = 0x005f;
-		X86_CX = 0x0000;
-		break;
-	case 0x5f51:
-		/*
-		 * Hook to select active LFP configuration:
-		 *  00h = No LVDS, VBIOS does not enable LVDS
-		 *  01h = Int-LVDS, LFP driven by integrated LVDS decoder
-		 *  02h = SVDO-LVDS, LFP driven by SVDO decoder
-		 *  03h = eDP, LFP Driven by Int-DisplayPort encoder
-		 */
-		X86_AX = 0x005f;
-		X86_CX = 3;
-		break;
-	case 0x5f70:
-		/* Unknown */
-		X86_AX = 0x005f;
-		X86_CX = 0;
-		break;
-	default:
-		/* Interrupt was not handled */
-		printk(BIOS_DEBUG, "Unknown INT15 function: 0x%04x\n",
-			X86_AX);
-		return 0;
-	}
-
-	/* Interrupt handled */
-	return 1;
-}
-#endif
-
 /* Audio Setup */
 
 extern const u32 * cim_verb_data;
@@ -220,7 +147,7 @@ static void verb_setup(void)
 
 static void mainboard_enable(device_t dev)
 {
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL || CONFIG_PCI_OPTION_ROM_RUN_REALMODE
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif
diff --git a/src/mainboard/thomson/ip1000/mainboard.c b/src/mainboard/thomson/ip1000/mainboard.c
index 909c9f6..a23c6db 100644
--- a/src/mainboard/thomson/ip1000/mainboard.c
+++ b/src/mainboard/thomson/ip1000/mainboard.c
@@ -21,7 +21,7 @@
 #include <console/console.h>
 #include <device/device.h>
 #include <delay.h>
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 #include <x86emu/x86emu.h>
 #endif
 #include <arch/io.h>
@@ -86,7 +86,7 @@ static void flash_gpios(void)
 }
 
 
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 static int int15_handler(void)
 {
 #define BOOT_DISPLAY_DEFAULT	0
@@ -141,7 +141,7 @@ static void mainboard_init(device_t dev)
 static void mainboard_enable(device_t dev)
 {
 	dev->ops->init = mainboard_init;
-#if CONFIG_PCI_OPTION_ROM_RUN_YABEL
+#if CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN
 	/* Install custom int15 handler for VGA OPROM */
 	mainboard_interrupt_handlers(0x15, &int15_handler);
 #endif



More information about the coreboot-gerrit mailing list