From aba7073ef5fd7fcef12241331832964f78713e39 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 14 Jan 2013 09:52:24 -0800 Subject: [PATCH] 3.4-stable patches added patches: drm-i915-make-the-panel-fitter-work-on-pipes-b-and-c-on-ivb.patch drm-radeon-add-wait_until-to-evergreen-vm-safe-reg-list.patch drm-radeon-fix-edp-clk-and-lane-setup-for-scaled-modes.patch drm-radeon-properly-handle-ddc-probe-for-dp-bridges.patch i2400m-add-intel-6150-device-ids.patch intel-iommu-free-old-page-tables-before-creating-superpage.patch jffs2-hold-erase_completion_lock-on-exit.patch --- ...-fitter-work-on-pipes-b-and-c-on-ivb.patch | 50 +++++++ ..._until-to-evergreen-vm-safe-reg-list.patch | 31 +++++ ...-clk-and-lane-setup-for-scaled-modes.patch | 31 +++++ ...erly-handle-ddc-probe-for-dp-bridges.patch | 126 ++++++++++++++++++ .../i2400m-add-intel-6150-device-ids.patch | 54 ++++++++ ...age-tables-before-creating-superpage.patch | 57 ++++++++ ...2-hold-erase_completion_lock-on-exit.patch | 45 +++++++ queue-3.4/series | 7 + 8 files changed, 401 insertions(+) create mode 100644 queue-3.4/drm-i915-make-the-panel-fitter-work-on-pipes-b-and-c-on-ivb.patch create mode 100644 queue-3.4/drm-radeon-add-wait_until-to-evergreen-vm-safe-reg-list.patch create mode 100644 queue-3.4/drm-radeon-fix-edp-clk-and-lane-setup-for-scaled-modes.patch create mode 100644 queue-3.4/drm-radeon-properly-handle-ddc-probe-for-dp-bridges.patch create mode 100644 queue-3.4/i2400m-add-intel-6150-device-ids.patch create mode 100644 queue-3.4/intel-iommu-free-old-page-tables-before-creating-superpage.patch create mode 100644 queue-3.4/jffs2-hold-erase_completion_lock-on-exit.patch diff --git a/queue-3.4/drm-i915-make-the-panel-fitter-work-on-pipes-b-and-c-on-ivb.patch b/queue-3.4/drm-i915-make-the-panel-fitter-work-on-pipes-b-and-c-on-ivb.patch new file mode 100644 index 00000000000..50ec0eb061b --- /dev/null +++ b/queue-3.4/drm-i915-make-the-panel-fitter-work-on-pipes-b-and-c-on-ivb.patch @@ -0,0 +1,50 @@ +From 13888d78c664a1f61d7b09d282f5916993827a40 Mon Sep 17 00:00:00 2001 +From: Paulo Zanoni +Date: Tue, 20 Nov 2012 13:27:41 -0200 +Subject: drm/i915: make the panel fitter work on pipes B and C on IVB + +From: Paulo Zanoni + +commit 13888d78c664a1f61d7b09d282f5916993827a40 upstream. + +I actually found this problem on Haswell, but then discovered Ivy +Bridge also has it by reading the spec. + +I don't have the hardware to test this. + +Signed-off-by: Paulo Zanoni +Reviewed-by: Damien Lespiau +Signed-off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_reg.h | 2 ++ + drivers/gpu/drm/i915/intel_display.c | 6 +++++- + 2 files changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/i915/i915_reg.h ++++ b/drivers/gpu/drm/i915/i915_reg.h +@@ -3015,6 +3015,8 @@ + #define _PFA_CTL_1 0x68080 + #define _PFB_CTL_1 0x68880 + #define PF_ENABLE (1<<31) ++#define PF_PIPE_SEL_MASK_IVB (3<<29) ++#define PF_PIPE_SEL_IVB(pipe) ((pipe)<<29) + #define PF_FILTER_MASK (3<<23) + #define PF_FILTER_PROGRAMMED (0<<23) + #define PF_FILTER_MED_3x3 (1<<23) +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -3095,7 +3095,11 @@ static void ironlake_crtc_enable(struct + * as some pre-programmed values are broken, + * e.g. x201. + */ +- I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3); ++ if (IS_IVYBRIDGE(dev)) ++ I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3 | ++ PF_PIPE_SEL_IVB(pipe)); ++ else ++ I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3); + I915_WRITE(PF_WIN_POS(pipe), dev_priv->pch_pf_pos); + I915_WRITE(PF_WIN_SZ(pipe), dev_priv->pch_pf_size); + } diff --git a/queue-3.4/drm-radeon-add-wait_until-to-evergreen-vm-safe-reg-list.patch b/queue-3.4/drm-radeon-add-wait_until-to-evergreen-vm-safe-reg-list.patch new file mode 100644 index 00000000000..28ffcfb5bf2 --- /dev/null +++ b/queue-3.4/drm-radeon-add-wait_until-to-evergreen-vm-safe-reg-list.patch @@ -0,0 +1,31 @@ +From 668bbc81baf0f34df832d8aca5c7d5e19a493c68 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 20 Dec 2012 21:19:32 -0500 +Subject: drm/radeon: add WAIT_UNTIL to evergreen VM safe reg list + +From: Alex Deucher + +commit 668bbc81baf0f34df832d8aca5c7d5e19a493c68 upstream. + +It's used in a recent mesa commit: +http://cgit.freedesktop.org/mesa/mesa/commit/?id=24b1206ab2dcd506aaac3ef656aebc8bc20cd27a +and there may be some other cases in the future where it's required. + +Signed-off-by: Alex Deucher +Reviewed-by: Jerome Glisse +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/evergreen_cs.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/gpu/drm/radeon/evergreen_cs.c ++++ b/drivers/gpu/drm/radeon/evergreen_cs.c +@@ -2670,6 +2670,7 @@ static bool evergreen_vm_reg_valid(u32 r + + /* check config regs */ + switch (reg) { ++ case WAIT_UNTIL: + case GRBM_GFX_INDEX: + case CP_STRMOUT_CNTL: + case CP_COHER_CNTL: diff --git a/queue-3.4/drm-radeon-fix-edp-clk-and-lane-setup-for-scaled-modes.patch b/queue-3.4/drm-radeon-fix-edp-clk-and-lane-setup-for-scaled-modes.patch new file mode 100644 index 00000000000..dd944d2a2b2 --- /dev/null +++ b/queue-3.4/drm-radeon-fix-edp-clk-and-lane-setup-for-scaled-modes.patch @@ -0,0 +1,31 @@ +From 93927f9c1db5f55085457e820f0631064c7bfa34 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 4 Dec 2012 16:50:28 -0500 +Subject: drm/radeon: fix eDP clk and lane setup for scaled modes + +From: Alex Deucher + +commit 93927f9c1db5f55085457e820f0631064c7bfa34 upstream. + +Need to use the adjusted mode since we are sending native +timing and using the scaler for non-native modes. + +Signed-off-by: Alex Deucher +Reviewed-by: Jerome Glisse +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/atombios_encoders.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/atombios_encoders.c ++++ b/drivers/gpu/drm/radeon/atombios_encoders.c +@@ -95,7 +95,7 @@ static bool radeon_atom_mode_fixup(struc + ((radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) || + (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE))) { + struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); +- radeon_dp_set_link_config(connector, mode); ++ radeon_dp_set_link_config(connector, adjusted_mode); + } + + return true; diff --git a/queue-3.4/drm-radeon-properly-handle-ddc-probe-for-dp-bridges.patch b/queue-3.4/drm-radeon-properly-handle-ddc-probe-for-dp-bridges.patch new file mode 100644 index 00000000000..4393f389058 --- /dev/null +++ b/queue-3.4/drm-radeon-properly-handle-ddc-probe-for-dp-bridges.patch @@ -0,0 +1,126 @@ +From 0a9069d34918659bc8a89e21e69e60b2b83291a3 Mon Sep 17 00:00:00 2001 +From: Niels Ole Salscheider +Date: Thu, 3 Jan 2013 19:09:28 +0100 +Subject: drm/radeon: Properly handle DDC probe for DP bridges + +From: Niels Ole Salscheider + +commit 0a9069d34918659bc8a89e21e69e60b2b83291a3 upstream. + +DDC information can be accessed using AUX CH + +Fixes failure to probe monitors on some systems with +DP bridge chips. + +agd5f: minor fixes + +Signed-off-by: Niels Ole Salscheider +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_connectors.c | 10 ++++++---- + drivers/gpu/drm/radeon/radeon_display.c | 13 +++++++++---- + drivers/gpu/drm/radeon/radeon_i2c.c | 10 ++++++++-- + drivers/gpu/drm/radeon/radeon_mode.h | 2 +- + 4 files changed, 24 insertions(+), 11 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_connectors.c ++++ b/drivers/gpu/drm/radeon/radeon_connectors.c +@@ -689,7 +689,7 @@ radeon_vga_detect(struct drm_connector * + ret = connector_status_disconnected; + + if (radeon_connector->ddc_bus) +- dret = radeon_ddc_probe(radeon_connector); ++ dret = radeon_ddc_probe(radeon_connector, false); + if (dret) { + radeon_connector->detected_by_load = false; + if (radeon_connector->edid) { +@@ -895,7 +895,7 @@ radeon_dvi_detect(struct drm_connector * + return connector->status; + + if (radeon_connector->ddc_bus) +- dret = radeon_ddc_probe(radeon_connector); ++ dret = radeon_ddc_probe(radeon_connector, false); + if (dret) { + radeon_connector->detected_by_load = false; + if (radeon_connector->edid) { +@@ -1335,7 +1335,8 @@ radeon_dp_detect(struct drm_connector *c + if (encoder) { + /* setup ddc on the bridge */ + radeon_atom_ext_encoder_setup_ddc(encoder); +- if (radeon_ddc_probe(radeon_connector)) /* try DDC */ ++ /* bridge chips are always aux */ ++ if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */ + ret = connector_status_connected; + else if (radeon_connector->dac_load_detect) { /* try load detection */ + struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; +@@ -1353,7 +1354,8 @@ radeon_dp_detect(struct drm_connector *c + if (radeon_dp_getdpcd(radeon_connector)) + ret = connector_status_connected; + } else { +- if (radeon_ddc_probe(radeon_connector)) ++ /* try non-aux ddc (DP to DVI/HMDI/etc. adapter) */ ++ if (radeon_ddc_probe(radeon_connector, false)) + ret = connector_status_connected; + } + } +--- a/drivers/gpu/drm/radeon/radeon_display.c ++++ b/drivers/gpu/drm/radeon/radeon_display.c +@@ -713,10 +713,15 @@ int radeon_ddc_get_modes(struct radeon_c + if (radeon_connector->router.ddc_valid) + radeon_router_select_ddc_port(radeon_connector); + +- if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) || +- (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) || +- (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) != +- ENCODER_OBJECT_ID_NONE)) { ++ if (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) != ++ ENCODER_OBJECT_ID_NONE) { ++ struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; ++ ++ if (dig->dp_i2c_bus) ++ radeon_connector->edid = drm_get_edid(&radeon_connector->base, ++ &dig->dp_i2c_bus->adapter); ++ } else if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) || ++ (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)) { + struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; + + if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || +--- a/drivers/gpu/drm/radeon/radeon_i2c.c ++++ b/drivers/gpu/drm/radeon/radeon_i2c.c +@@ -39,7 +39,7 @@ extern u32 radeon_atom_hw_i2c_func(struc + * radeon_ddc_probe + * + */ +-bool radeon_ddc_probe(struct radeon_connector *radeon_connector) ++bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux) + { + u8 out = 0x0; + u8 buf[8]; +@@ -63,7 +63,13 @@ bool radeon_ddc_probe(struct radeon_conn + if (radeon_connector->router.ddc_valid) + radeon_router_select_ddc_port(radeon_connector); + +- ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2); ++ if (use_aux) { ++ struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; ++ ret = i2c_transfer(&dig->dp_i2c_bus->adapter, msgs, 2); ++ } else { ++ ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2); ++ } ++ + if (ret != 2) + /* Couldn't find an accessible DDC on this connector */ + return false; +--- a/drivers/gpu/drm/radeon/radeon_mode.h ++++ b/drivers/gpu/drm/radeon/radeon_mode.h +@@ -527,7 +527,7 @@ extern void radeon_i2c_put_byte(struct r + u8 val); + extern void radeon_router_select_ddc_port(struct radeon_connector *radeon_connector); + extern void radeon_router_select_cd_port(struct radeon_connector *radeon_connector); +-extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector); ++extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux); + extern int radeon_ddc_get_modes(struct radeon_connector *radeon_connector); + + extern struct drm_encoder *radeon_best_encoder(struct drm_connector *connector); diff --git a/queue-3.4/i2400m-add-intel-6150-device-ids.patch b/queue-3.4/i2400m-add-intel-6150-device-ids.patch new file mode 100644 index 00000000000..0531b9a68aa --- /dev/null +++ b/queue-3.4/i2400m-add-intel-6150-device-ids.patch @@ -0,0 +1,54 @@ +From 999a7c5776a0ed2133645fa7e008bec05bda9254 Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Fri, 14 Dec 2012 13:10:50 +0000 +Subject: i2400m: add Intel 6150 device IDs + +From: Dan Williams + +commit 999a7c5776a0ed2133645fa7e008bec05bda9254 upstream. + +Add device IDs for WiMAX function of Intel 6150 cards. + +Signed-off-by: Dan Williams +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wimax/i2400m/i2400m-usb.h | 3 +++ + drivers/net/wimax/i2400m/usb.c | 6 ++++++ + 2 files changed, 9 insertions(+) + +--- a/drivers/net/wimax/i2400m/i2400m-usb.h ++++ b/drivers/net/wimax/i2400m/i2400m-usb.h +@@ -152,6 +152,9 @@ enum { + /* Device IDs */ + USB_DEVICE_ID_I6050 = 0x0186, + USB_DEVICE_ID_I6050_2 = 0x0188, ++ USB_DEVICE_ID_I6150 = 0x07d6, ++ USB_DEVICE_ID_I6150_2 = 0x07d7, ++ USB_DEVICE_ID_I6150_3 = 0x07d9, + USB_DEVICE_ID_I6250 = 0x0187, + }; + +--- a/drivers/net/wimax/i2400m/usb.c ++++ b/drivers/net/wimax/i2400m/usb.c +@@ -510,6 +510,9 @@ int i2400mu_probe(struct usb_interface * + switch (id->idProduct) { + case USB_DEVICE_ID_I6050: + case USB_DEVICE_ID_I6050_2: ++ case USB_DEVICE_ID_I6150: ++ case USB_DEVICE_ID_I6150_2: ++ case USB_DEVICE_ID_I6150_3: + case USB_DEVICE_ID_I6250: + i2400mu->i6050 = 1; + break; +@@ -759,6 +762,9 @@ static + struct usb_device_id i2400mu_id_table[] = { + { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050) }, + { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050_2) }, ++ { USB_DEVICE(0x8087, USB_DEVICE_ID_I6150) }, ++ { USB_DEVICE(0x8087, USB_DEVICE_ID_I6150_2) }, ++ { USB_DEVICE(0x8087, USB_DEVICE_ID_I6150_3) }, + { USB_DEVICE(0x8086, USB_DEVICE_ID_I6250) }, + { USB_DEVICE(0x8086, 0x0181) }, + { USB_DEVICE(0x8086, 0x1403) }, diff --git a/queue-3.4/intel-iommu-free-old-page-tables-before-creating-superpage.patch b/queue-3.4/intel-iommu-free-old-page-tables-before-creating-superpage.patch new file mode 100644 index 00000000000..67a45bd3972 --- /dev/null +++ b/queue-3.4/intel-iommu-free-old-page-tables-before-creating-superpage.patch @@ -0,0 +1,57 @@ +From 6491d4d02893d9787ba67279595990217177b351 Mon Sep 17 00:00:00 2001 +From: "Woodhouse, David" +Date: Wed, 19 Dec 2012 13:25:35 +0000 +Subject: intel-iommu: Free old page tables before creating superpage + +From: "Woodhouse, David" + +commit 6491d4d02893d9787ba67279595990217177b351 upstream. + +The dma_pte_free_pagetable() function will only free a page table page +if it is asked to free the *entire* 2MiB range that it covers. So if a +page table page was used for one or more small mappings, it's likely to +end up still present in the page tables... but with no valid PTEs. + +This was fine when we'd only be repopulating it with 4KiB PTEs anyway +but the same virtual address range can end up being reused for a +*large-page* mapping. And in that case were were trying to insert the +large page into the second-level page table, and getting a complaint +from the sanity check in __domain_mapping() because there was already a +corresponding entry. This was *relatively* harmless; it led to a memory +leak of the old page table page, but no other ill-effects. + +Fix it by calling dma_pte_clear_range (hopefully redundant) and +dma_pte_free_pagetable() before setting up the new large page. + +Signed-off-by: David Woodhouse +Tested-by: Ravi Murty +Tested-by: Sudeep Dutt +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iommu/intel-iommu.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +--- a/drivers/iommu/intel-iommu.c ++++ b/drivers/iommu/intel-iommu.c +@@ -1826,10 +1826,17 @@ static int __domain_mapping(struct dmar_ + if (!pte) + return -ENOMEM; + /* It is large page*/ +- if (largepage_lvl > 1) ++ if (largepage_lvl > 1) { + pteval |= DMA_PTE_LARGE_PAGE; +- else ++ /* Ensure that old small page tables are removed to make room ++ for superpage, if they exist. */ ++ dma_pte_clear_range(domain, iov_pfn, ++ iov_pfn + lvl_to_nr_pages(largepage_lvl) - 1); ++ dma_pte_free_pagetable(domain, iov_pfn, ++ iov_pfn + lvl_to_nr_pages(largepage_lvl) - 1); ++ } else { + pteval &= ~(uint64_t)DMA_PTE_LARGE_PAGE; ++ } + + } + /* We don't need lock here, nobody else diff --git a/queue-3.4/jffs2-hold-erase_completion_lock-on-exit.patch b/queue-3.4/jffs2-hold-erase_completion_lock-on-exit.patch new file mode 100644 index 00000000000..2c57b8eba0a --- /dev/null +++ b/queue-3.4/jffs2-hold-erase_completion_lock-on-exit.patch @@ -0,0 +1,45 @@ +From 2cbba75a56ea78e6876b4e2547a882f10b3fe72b Mon Sep 17 00:00:00 2001 +From: Alexey Khoroshilov +Date: Mon, 5 Nov 2012 22:40:14 +0400 +Subject: jffs2: hold erase_completion_lock on exit + +From: Alexey Khoroshilov + +commit 2cbba75a56ea78e6876b4e2547a882f10b3fe72b upstream. + +Users of jffs2_do_reserve_space() expect they still held +erase_completion_lock after call to it. But there is a path +where jffs2_do_reserve_space() leaves erase_completion_lock unlocked. +The patch fixes it. + +Found by Linux Driver Verification project (linuxtesting.org). + +Signed-off-by: Alexey Khoroshilov +Signed-off-by: Artem Bityutskiy +Signed-off-by: Greg Kroah-Hartman + +--- + fs/jffs2/nodemgmt.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/fs/jffs2/nodemgmt.c ++++ b/fs/jffs2/nodemgmt.c +@@ -375,14 +375,16 @@ static int jffs2_do_reserve_space(struct + spin_unlock(&c->erase_completion_lock); + + ret = jffs2_prealloc_raw_node_refs(c, jeb, 1); +- if (ret) +- return ret; ++ + /* Just lock it again and continue. Nothing much can change because + we hold c->alloc_sem anyway. In fact, it's not entirely clear why + we hold c->erase_completion_lock in the majority of this function... + but that's a question for another (more caffeine-rich) day. */ + spin_lock(&c->erase_completion_lock); + ++ if (ret) ++ return ret; ++ + waste = jeb->free_size; + jffs2_link_node_ref(c, jeb, + (jeb->offset + c->sector_size - waste) | REF_OBSOLETE, diff --git a/queue-3.4/series b/queue-3.4/series index bc00d154290..59cbae1e015 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -32,3 +32,10 @@ mtd-nand-gpmi-reset-bch-earlier-too-to-avoid-nand-startup-problems.patch sunrpc-continue-run-over-clients-list-on-pipefs-event-instead-of-break.patch sunrpc-ensure-that-we-free-the-rpc_task-after-cleanups-are-done.patch sunrpc-ensure-we-release-the-socket-write-lock-if-the-rpc_task-exits-early.patch +jffs2-hold-erase_completion_lock-on-exit.patch +i2400m-add-intel-6150-device-ids.patch +intel-iommu-free-old-page-tables-before-creating-superpage.patch +drm-radeon-fix-edp-clk-and-lane-setup-for-scaled-modes.patch +drm-radeon-add-wait_until-to-evergreen-vm-safe-reg-list.patch +drm-radeon-properly-handle-ddc-probe-for-dp-bridges.patch +drm-i915-make-the-panel-fitter-work-on-pipes-b-and-c-on-ivb.patch -- 2.47.3