summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainboard/lenovo/x200/blc.c3
-rw-r--r--src/northbridge/intel/gm45/gm45.h2
-rw-r--r--src/northbridge/intel/gm45/gma.c19
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);
/*