diff options
-rw-r--r-- | src/mainboard/lenovo/x200/blc.c | 3 | ||||
-rw-r--r-- | src/northbridge/intel/gm45/gm45.h | 2 | ||||
-rw-r--r-- | src/northbridge/intel/gm45/gma.c | 19 |
3 files changed, 13 insertions, 11 deletions
diff --git a/src/mainboard/lenovo/x200/blc.c b/src/mainboard/lenovo/x200/blc.c index 330f1bcdaf..655be567e6 100644 --- a/src/mainboard/lenovo/x200/blc.c +++ b/src/mainboard/lenovo/x200/blc.c @@ -38,8 +38,7 @@ int get_blc_values(const struct blc_pwm_t **entries) const char *mainboard_vbt_filename(void) { - struct device *gma = pcidev_path_on_root(PCI_DEVFN(0x2, 0)); - u16 pwm_freq = gma ? get_blc_pwm_freq_value(gm45_get_lvds_edid_str(gma)) : 0; + u16 pwm_freq = get_blc_pwm_freq_value(gm45_get_lvds_edid_str()); if (pwm_freq == 0) { printk(BIOS_DEBUG, diff --git a/src/northbridge/intel/gm45/gm45.h b/src/northbridge/intel/gm45/gm45.h index c85a16ce59..d30ebe32e2 100644 --- a/src/northbridge/intel/gm45/gm45.h +++ b/src/northbridge/intel/gm45/gm45.h @@ -449,7 +449,7 @@ u16 get_blc_pwm_freq_value(const char *edid_ascii_string); #include <device/device.h> #include <edid.h> -const char *gm45_get_lvds_edid_str(struct device *dev); +const char *gm45_get_lvds_edid_str(void); struct acpi_rsdp; unsigned long northbridge_write_acpi_tables(const struct device *device, unsigned long start, diff --git a/src/northbridge/intel/gm45/gma.c b/src/northbridge/intel/gm45/gma.c index 6759e743f5..ef7b872b58 100644 --- a/src/northbridge/intel/gm45/gma.c +++ b/src/northbridge/intel/gm45/gma.c @@ -143,7 +143,7 @@ static void gma_pm_init_post_vbios(struct device *const dev, reg8)); } -const char *gm45_get_lvds_edid_str(struct device *dev) +const char *gm45_get_lvds_edid_str(void) { u8 *mmio; u8 edid_data_lvds[128]; @@ -152,10 +152,10 @@ const char *gm45_get_lvds_edid_str(struct device *dev) if (edid_str[0]) return edid_str; - if (!gtt_res) - gtt_res = probe_resource(dev, PCI_BASE_ADDRESS_0); - if (!gtt_res) + if (!gtt_res) { + printk(BIOS_ERR, "Never call %s() outside dev.init() context.\n", __func__); return NULL; + } mmio = res2mmio(gtt_res, 0, 0); printk(BIOS_DEBUG, "LVDS EDID\n"); @@ -176,15 +176,18 @@ static void gma_func0_init(struct device *dev) const struct northbridge_intel_gm45_config *const conf = dev->chip_info; const char *edid_str; + /* Probe MMIO resource first. It's needed even for + intel_gma_init_igd_opregion() which may call back. */ + gtt_res = probe_resource(dev, PCI_BASE_ADDRESS_0); + if (!gtt_res) + return; + intel_gma_init_igd_opregion(); - edid_str = gm45_get_lvds_edid_str(dev); + edid_str = gm45_get_lvds_edid_str(); if (!edid_str) printk(BIOS_ERR, "Failed to obtain LVDS EDID string!\n"); - /* gtt_res should have been inited in gm45_get_lvds_edid_str() */ - if (!gtt_res) - return; mmio = res2mmio(gtt_res, 0, 0); /* |