diff options
26 files changed, 53 insertions, 38 deletions
diff --git a/src/device/pci_device.c b/src/device/pci_device.c index ca3604611d..dfc08987e7 100644 --- a/src/device/pci_device.c +++ b/src/device/pci_device.c @@ -32,6 +32,7 @@ #include <device/device.h> #include <device/pci.h> #include <device/pci_ids.h> +#include <bootmode.h> #include <delay.h> #if CONFIG_HYPERTRANSPORT_PLUGIN_SUPPORT #include <device/hypertransport.h> @@ -660,10 +661,6 @@ void pci_dev_set_subsystem(struct device *dev, unsigned vendor, unsigned device) ((device & 0xffff) << 16) | (vendor & 0xffff)); } -#if CONFIG_CHROMEOS -int oprom_is_loaded = 0; -#endif - #if CONFIG_VGA_ROM_RUN static int should_run_oprom(struct device *dev) { @@ -733,10 +730,8 @@ void pci_dev_init(struct device *dev) return; run_bios(dev, (unsigned long)ram); -#if CONFIG_CHROMEOS - oprom_is_loaded = 1; - printk(BIOS_DEBUG, "VGA Option ROM has been loaded\n"); -#endif + gfx_set_init_done(1); + printk(BIOS_DEBUG, "VGA Option ROM was run\n"); #endif /* CONFIG_VGA_ROM_RUN */ } diff --git a/src/include/bootmode.h b/src/include/bootmode.h index d64bf93291..a2c3411c0b 100644 --- a/src/include/bootmode.h +++ b/src/include/bootmode.h @@ -23,6 +23,9 @@ int get_developer_mode_switch(void); int get_recovery_mode_switch(void); +int gfx_get_init_done(void); +void gfx_set_init_done(int done); + #if CONFIG_BOOTMODE_STRAPS int developer_mode_enabled(void); int recovery_mode_enabled(void); diff --git a/src/lib/bootmode.c b/src/lib/bootmode.c index 156321f790..98184901df 100644 --- a/src/lib/bootmode.c +++ b/src/lib/bootmode.c @@ -17,6 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <rules.h> #include <bootmode.h> #if CONFIG_CHROMEOS || CONFIG_VBOOT_VERIFY_FIRMWARE #include <vendorcode/google/chromeos/chromeos.h> @@ -61,3 +62,19 @@ int recovery_mode_enabled(void) return 0; } #endif /* CONFIG_BOOTMODE_STRAPS */ + +#if ENV_RAMSTAGE +static int gfx_init_done = -1; + +int gfx_get_init_done(void) +{ + if (gfx_init_done < 0) + return 0; + return gfx_init_done; +} + +void gfx_set_init_done(int done) +{ + gfx_init_done = done; +} +#endif diff --git a/src/mainboard/google/bolt/chromeos.c b/src/mainboard/google/bolt/chromeos.c index 76f2c313c8..57241017c8 100644 --- a/src/mainboard/google/bolt/chromeos.c +++ b/src/mainboard/google/bolt/chromeos.c @@ -79,7 +79,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "lid", get_lid_switch()); fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "power", 0); - fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", oprom_is_loaded); + fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", gfx_get_init_done()); } #endif diff --git a/src/mainboard/google/butterfly/chromeos.c b/src/mainboard/google/butterfly/chromeos.c index b5a645fb24..397679aa0f 100644 --- a/src/mainboard/google/butterfly/chromeos.c +++ b/src/mainboard/google/butterfly/chromeos.c @@ -93,7 +93,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Was VGA Option ROM loaded? */ gpios->gpios[5].port = -1; /* Indicate that this is a pseudo GPIO */ gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); } diff --git a/src/mainboard/google/falco/chromeos.c b/src/mainboard/google/falco/chromeos.c index 51d625b82c..780e58f2f9 100644 --- a/src/mainboard/google/falco/chromeos.c +++ b/src/mainboard/google/falco/chromeos.c @@ -76,7 +76,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "lid", get_lid_switch()); fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "power", 0); - fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", oprom_is_loaded); + fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", gfx_get_init_done()); } #endif diff --git a/src/mainboard/google/link/chromeos.c b/src/mainboard/google/link/chromeos.c index dd1606f1cc..33069b15f1 100644 --- a/src/mainboard/google/link/chromeos.c +++ b/src/mainboard/google/link/chromeos.c @@ -88,7 +88,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Did we load the VGA Option ROM? */ gpios->gpios[5].port = -1; /* Indicate that this is a pseudo GPIO */ gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); } #endif diff --git a/src/mainboard/google/link/i915.c b/src/mainboard/google/link/i915.c index a38760b1a5..2b62bf45c8 100644 --- a/src/mainboard/google/link/i915.c +++ b/src/mainboard/google/link/i915.c @@ -58,7 +58,6 @@ static unsigned int graphics; static unsigned short addrport; static unsigned short dataport; static unsigned int physbase; -extern int oprom_is_loaded; static u32 htotal, hblank, hsync, vtotal, vblank, vsync; const u32 link_edid_data[] = { @@ -379,6 +378,5 @@ int i915lightup(unsigned int pphysbase, unsigned int piobase, printk(BIOS_SPEW, "%ld microseconds\n", globalmicroseconds()); set_vbe_mode_info_valid(&edid, graphics); i915_init_done = 1; - oprom_is_loaded = 1; - return 0; + return i915_init_done; } diff --git a/src/mainboard/google/parrot/chromeos.c b/src/mainboard/google/parrot/chromeos.c index 6f50a794b2..1e79e4bb40 100644 --- a/src/mainboard/google/parrot/chromeos.c +++ b/src/mainboard/google/parrot/chromeos.c @@ -84,7 +84,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Did we load the VGA Option ROM? */ gpios->gpios[5].port = -1; /* Indicate that this is a pseudo GPIO */ gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); } diff --git a/src/mainboard/google/peppy/chromeos.c b/src/mainboard/google/peppy/chromeos.c index 51d625b82c..780e58f2f9 100644 --- a/src/mainboard/google/peppy/chromeos.c +++ b/src/mainboard/google/peppy/chromeos.c @@ -76,7 +76,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "lid", get_lid_switch()); fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "power", 0); - fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", oprom_is_loaded); + fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", gfx_get_init_done()); } #endif diff --git a/src/mainboard/google/rambi/chromeos.c b/src/mainboard/google/rambi/chromeos.c index f6f13edc24..636aae112b 100644 --- a/src/mainboard/google/rambi/chromeos.c +++ b/src/mainboard/google/rambi/chromeos.c @@ -78,7 +78,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) get_developer_mode_switch()); fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "lid", get_lid_switch()); fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "power", 0); - fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", oprom_is_loaded); + fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", gfx_get_init_done()); } #endif diff --git a/src/mainboard/google/slippy/chromeos.c b/src/mainboard/google/slippy/chromeos.c index 51d625b82c..780e58f2f9 100644 --- a/src/mainboard/google/slippy/chromeos.c +++ b/src/mainboard/google/slippy/chromeos.c @@ -76,7 +76,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "lid", get_lid_switch()); fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "power", 0); - fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", oprom_is_loaded); + fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", gfx_get_init_done()); } #endif diff --git a/src/mainboard/google/slippy/gma.c b/src/mainboard/google/slippy/gma.c index e698fc918e..f2f93b141c 100644 --- a/src/mainboard/google/slippy/gma.c +++ b/src/mainboard/google/slippy/gma.c @@ -89,7 +89,6 @@ static unsigned int graphics; static unsigned short addrport; static unsigned short dataport; static unsigned int physbase; -extern int oprom_is_loaded; static int ioread = 0, iowrite = 0; @@ -462,10 +461,9 @@ int i915lightup(unsigned int pphysbase, unsigned int piobase, set_vbe_mode_info_valid(&dp->edid, graphics); i915_init_done = 1; - oprom_is_loaded = 1; //io_i915_write32( 0x80000000,BLC_PWM_CPU_CTL2); //io_i915_write32( 0x80000000,BLC_PWM_PCH_CTL1); - return 1; + return i915_init_done; fail: printk(BIOS_SPEW, "Graphics could not be started;"); diff --git a/src/mainboard/google/stout/chromeos.c b/src/mainboard/google/stout/chromeos.c index 0e43250008..297626cd84 100644 --- a/src/mainboard/google/stout/chromeos.c +++ b/src/mainboard/google/stout/chromeos.c @@ -82,7 +82,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Was VGA Option ROM loaded? */ gpios->gpios[5].port = -1; /* Indicate that this is a pseudo GPIO */ gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); /* EC is in RW mode when it isn't in recovery mode. */ diff --git a/src/mainboard/google/stout/i915.c b/src/mainboard/google/stout/i915.c index 8085de6554..4ebd567efe 100644 --- a/src/mainboard/google/stout/i915.c +++ b/src/mainboard/google/stout/i915.c @@ -41,7 +41,6 @@ static unsigned int graphics; static unsigned short addrport; static unsigned short dataport; static unsigned int physbase; -extern int oprom_is_loaded; #define READ32(addr) io_i915_READ32(addr) #define WRITE32(val, addr) io_i915_WRITE32(val, addr) @@ -278,6 +277,5 @@ int i915lightup(unsigned int pphysbase, memset((void *)graphics, 0, 4520*4096); printk(BIOS_SPEW, "%ld microseconds\n", globalmicroseconds()); i915_init_done = 1; - oprom_is_loaded = 1; - return 0; + return i915_init_done; } diff --git a/src/mainboard/intel/baskingridge/chromeos.c b/src/mainboard/intel/baskingridge/chromeos.c index 6bf5116c64..7b64f10604 100644 --- a/src/mainboard/intel/baskingridge/chromeos.c +++ b/src/mainboard/intel/baskingridge/chromeos.c @@ -81,7 +81,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Did we load the VGA option ROM? */ gpios->gpios[5].port = -1; gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); } #endif diff --git a/src/mainboard/intel/emeraldlake2/chromeos.c b/src/mainboard/intel/emeraldlake2/chromeos.c index 4d998ec4e8..2194973fb5 100644 --- a/src/mainboard/intel/emeraldlake2/chromeos.c +++ b/src/mainboard/intel/emeraldlake2/chromeos.c @@ -80,7 +80,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Did we load the VGA option ROM? */ gpios->gpios[5].port = -1; gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); } #endif diff --git a/src/mainboard/intel/wtm2/chromeos.c b/src/mainboard/intel/wtm2/chromeos.c index 594b4a75d3..a5ca4eb88b 100644 --- a/src/mainboard/intel/wtm2/chromeos.c +++ b/src/mainboard/intel/wtm2/chromeos.c @@ -61,7 +61,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "developer", DEV_MODE_SETTING); fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "lid", 1); // force open fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "power", 0); - fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", oprom_is_loaded); + fill_lb_gpio(gpio++, -1, ACTIVE_HIGH, "oprom", gfx_get_init_done()); } #endif diff --git a/src/mainboard/intel/wtm2/i915.c b/src/mainboard/intel/wtm2/i915.c index b664c35ebf..64fa6b1ce2 100644 --- a/src/mainboard/intel/wtm2/i915.c +++ b/src/mainboard/intel/wtm2/i915.c @@ -70,7 +70,6 @@ static unsigned int graphics; static unsigned short addrport; static unsigned short dataport; static unsigned int physbase; -extern int oprom_is_loaded; const u32 link_edid_data[] = { 0xffffff00, 0x00ffffff, 0x0379e430, 0x00000000, @@ -220,8 +219,7 @@ int i915lightup(unsigned int pphysbase, unsigned int piobase, */ i915_init_done = 1; - oprom_is_loaded = 1; - return 1; + return i915_init_done; fail: printk(BIOS_SPEW, "Graphics could not be started;"); diff --git a/src/mainboard/lenovo/x60/i915.c b/src/mainboard/lenovo/x60/i915.c index 4870fd83dc..b41a0baaa1 100644 --- a/src/mainboard/lenovo/x60/i915.c +++ b/src/mainboard/lenovo/x60/i915.c @@ -369,5 +369,5 @@ int i915lightup(unsigned int pphysbase, unsigned int piobase, set_vbe_mode_info_valid(&edid, graphics); - return 0; + return 1; } diff --git a/src/mainboard/samsung/lumpy/chromeos.c b/src/mainboard/samsung/lumpy/chromeos.c index afbdeeb9d0..c9fa1d973f 100644 --- a/src/mainboard/samsung/lumpy/chromeos.c +++ b/src/mainboard/samsung/lumpy/chromeos.c @@ -86,7 +86,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Did we load the VGA Option ROM? */ gpios->gpios[5].port = -1; /* Indicate that this is a pseudo GPIO */ gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); } #endif diff --git a/src/mainboard/samsung/stumpy/chromeos.c b/src/mainboard/samsung/stumpy/chromeos.c index e639fd3cbd..be1837061e 100644 --- a/src/mainboard/samsung/stumpy/chromeos.c +++ b/src/mainboard/samsung/stumpy/chromeos.c @@ -83,7 +83,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Did we load the VGA Option ROM? */ gpios->gpios[5].port = -1; /* Indicate that this is a pseudo GPIO */ gpios->gpios[5].polarity = ACTIVE_HIGH; - gpios->gpios[5].value = oprom_is_loaded; + gpios->gpios[5].value = gfx_get_init_done(); strncpy((char *)gpios->gpios[5].name,"oprom", GPIO_MAX_NAME_LENGTH); } #endif diff --git a/src/northbridge/intel/haswell/gma.c b/src/northbridge/intel/haswell/gma.c index 2ceffe4a83..0c56f76018 100644 --- a/src/northbridge/intel/haswell/gma.c +++ b/src/northbridge/intel/haswell/gma.c @@ -19,6 +19,7 @@ #include <arch/io.h> #include <console/console.h> +#include <bootmode.h> #include <delay.h> #include <device/device.h> #include <device/pci.h> @@ -408,6 +409,8 @@ static void gma_func0_init(struct device *dev) int i915lightup(u32 physbase, u32 iobase, u32 mmiobase, u32 gfx); lightup_ok = i915lightup(physbase, iobase, mmiobase, graphics_base); + if (lightup_ok) + gfx_set_init_done(1); #endif if (! lightup_ok) { printk(BIOS_SPEW, "FUI did not run; using VBIOS\n"); diff --git a/src/northbridge/intel/i945/gma.c b/src/northbridge/intel/i945/gma.c index 433152c26d..453e9c86b9 100644 --- a/src/northbridge/intel/i945/gma.c +++ b/src/northbridge/intel/i945/gma.c @@ -18,6 +18,7 @@ */ #include <console/console.h> +#include <bootmode.h> #include <delay.h> #include <device/device.h> #include <device/pci.h> @@ -63,7 +64,9 @@ static void gma_func0_init(struct device *dev) ); int i915lightup(u32 physbase, u32 iobase, u32 mmiobase, u32 gfx); - i915lightup(uma_memory_base, iobase, mmiobase, graphics_base); + int lightup_ok = i915lightup(uma_memory_base, iobase, mmiobase, graphics_base); + if (lightup_ok) + gfx_set_init_done(1); #endif } diff --git a/src/northbridge/intel/sandybridge/gma.c b/src/northbridge/intel/sandybridge/gma.c index b9a07a2d72..2d8bd77e9c 100644 --- a/src/northbridge/intel/sandybridge/gma.c +++ b/src/northbridge/intel/sandybridge/gma.c @@ -19,6 +19,7 @@ #include <arch/io.h> #include <console/console.h> +#include <bootmode.h> #include <delay.h> #include <device/device.h> #include <device/pci.h> @@ -649,7 +650,9 @@ static void gma_func0_init(struct device *dev) graphics_base = dev->resource_list[1].base; int i915lightup(u32 physbase, u32 iobase, u32 mmiobase, u32 gfx); - i915lightup(physbase, iobase, mmiobase, graphics_base); + int lightup_ok = i915lightup(physbase, iobase, mmiobase, graphics_base); + if (lightup_ok) + gfx_set_init_done(1); #endif } diff --git a/src/vendorcode/google/chromeos/chromeos.h b/src/vendorcode/google/chromeos/chromeos.h index 9430276abb..e501427901 100644 --- a/src/vendorcode/google/chromeos/chromeos.h +++ b/src/vendorcode/google/chromeos/chromeos.h @@ -33,7 +33,6 @@ void save_chromeos_gpios(void); /* functions implemented in vbnv.c: */ int get_recovery_mode_from_vbnv(void); int vboot_wants_oprom(void); -extern int oprom_is_loaded; void read_vbnv(uint8_t *vbnv_copy); void save_vbnv(const uint8_t *vbnv_copy); |