From patchwork Thu Jun 24 14:58:15 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Maverick] drm/radeon: Update LVDS connector edid_property only once From: Alberto Milone X-Patchwork-Id: 56797 Message-Id: To: kernel-team@lists.ubuntu.com Date: Thu, 24 Jun 2010 16:58:15 +0200 Hi all, After looking at Arjan's patch to cache the EDID for the intel driver, I decided to write a similar patch which should help us reduce boot time with radeon. Please consider adopting my patch in Maverick's kernel. Note: my patch is not the upstream code, read here for further details: http://lists.freedesktop.org/archives/dri-devel/2010-May/000948.html Thanks in advance for your time. >From 0bc3de352d2ed4356a51ca712e279d0058374b45 Mon Sep 17 00:00:00 2001 From: Alberto Milone Date: Mon, 31 May 2010 14:20:06 +0200 Subject: [PATCH] drm/edid: Update LVDS connector edid_property only once. drm_mode_connector_update_edid_property is called every time radeon_ddc_get_modes is called. Due to the nature of LVDS, it should be sufficient to update edid_property only once. Signed-off-by: Alberto Milone --- drivers/gpu/drm/radeon/radeon_connectors.c | 1 + drivers/gpu/drm/radeon/radeon_display.c | 8 ++++++++ drivers/gpu/drm/radeon/radeon_mode.h | 1 + 3 files changed, 10 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 0c7ccc6..389a9dd 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -1068,6 +1068,7 @@ radeon_add_atom_connector(struct drm_device *dev, connector = &radeon_connector->base; radeon_connector->connector_id = connector_id; + radeon_connector->edid_property_updated = 0; radeon_connector->devices = supported_device; radeon_connector->shared_ddc = shared_ddc; radeon_connector->connector_object_id = connector_object_id; diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index 1006549..058602b 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c @@ -403,6 +403,12 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector) dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && dig->dp_i2c_bus) radeon_connector->edid = drm_get_edid(&radeon_connector->base, &dig->dp_i2c_bus->adapter); } + if (radeon_connector->edid_property_updated && + radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_LVDS) { + DRM_INFO("Skipping update of EDID property due to cached property\n"); + return ret; + } + if (!radeon_connector->ddc_bus) return -1; if (!radeon_connector->edid) { @@ -411,6 +417,8 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector) /* some servers provide a hardcoded edid in rom for KVMs */ if (!radeon_connector->edid) radeon_connector->edid = radeon_combios_get_hardcoded_edid(rdev); + + radeon_connector->edid_property_updated = 1; if (radeon_connector->edid) { drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid); ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid); diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index 67358ba..e5f00e8 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h @@ -397,6 +397,7 @@ struct radeon_connector { /* we need to mind the EDID between detect and get modes due to analog/digital/tvencoder */ struct edid *edid; + unsigned int edid_property_updated; void *con_priv; bool dac_load_detect; uint16_t connector_object_id; -- 1.7.0.4