--- /dev/null
+From ab5dbebe33e0c353e8545f09c34553ac3351dad6 Mon Sep 17 00:00:00 2001
+From: Mike Miller <mike.miller@hp.com>
+Date: Thu, 20 Oct 2011 22:19:17 +0200
+Subject: cciss: add small delay when using PCI Power Management to reset for kump
+
+From: Mike Miller <mike.miller@hp.com>
+
+commit ab5dbebe33e0c353e8545f09c34553ac3351dad6 upstream.
+
+The P600 requires a small delay when changing states. Otherwise we may think
+the board did not reset and we bail. This for kdump only and is particular
+to the P600.
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/cciss.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/block/cciss.c
++++ b/drivers/block/cciss.c
+@@ -4533,6 +4533,13 @@ static int cciss_controller_hard_reset(s
+ pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
+ pmcsr |= PCI_D0;
+ pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr);
++
++ /*
++ * The P600 requires a small delay when changing states.
++ * Otherwise we may think the board did not reset and we bail.
++ * This for kdump only and is particular to the P600.
++ */
++ msleep(500);
+ }
+ return 0;
+ }
--- /dev/null
+From 340764465aa4a586ca332e61ae64883e5ad6f183 Mon Sep 17 00:00:00 2001
+From: Jerome Glisse <jglisse@redhat.com>
+Date: Mon, 24 Oct 2011 18:16:34 -0400
+Subject: drm/radeon: avoid bouncing connector status btw disconnected & unknown
+
+From: Jerome Glisse <jglisse@redhat.com>
+
+commit 340764465aa4a586ca332e61ae64883e5ad6f183 upstream.
+
+Since force handling rework of d0d0a225e6ad43314c9aa7ea081f76adc5098ad4
+we could end up bouncing connector status btw disconnected and unknown.
+When connector status change a call to output_poll_changed happen which
+in turn ask again for detect but with force set.
+
+So set the load detect flags whenever we report the connector as
+connected or unknown this avoid bouncing btw disconnected and unknown.
+
+Signed-off-by: Jerome Glisse <jglisse@redhat.com>
+Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Cc: Stefan Lippers-Hollmann <s.L-H@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon_connectors.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -755,7 +755,7 @@ radeon_vga_detect(struct drm_connector *
+ if (radeon_connector->dac_load_detect && encoder) {
+ encoder_funcs = encoder->helper_private;
+ ret = encoder_funcs->detect(encoder, connector);
+- if (ret == connector_status_connected)
++ if (ret != connector_status_disconnected)
+ radeon_connector->detected_by_load = true;
+ }
+ }
+@@ -996,8 +996,9 @@ radeon_dvi_detect(struct drm_connector *
+ ret = encoder_funcs->detect(encoder, connector);
+ if (ret == connector_status_connected) {
+ radeon_connector->use_digital = false;
+- radeon_connector->detected_by_load = true;
+ }
++ if (ret != connector_status_disconnected)
++ radeon_connector->detected_by_load = true;
+ }
+ break;
+ }
--- /dev/null
+From a18cee15ed4c8b6a35f96b7b26a46bac32e04bd9 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 1 Nov 2011 14:20:30 -0400
+Subject: drm/radeon/kms: add MSI module parameter
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit a18cee15ed4c8b6a35f96b7b26a46bac32e04bd9 upstream.
+
+Allow the user to override whether MSIs are enabled
+or not on supported ASICs. MSIs are disabled by default
+on IGP chips as they tend not to work. However certain
+IGP chips only seem to work with MSIs enabled.
+
+I suspect this is a chipset or bios issue, but I'm not sure
+what the proper fix is. This will at least make diagnosing
+and working around the problem much easier.
+
+See:
+https://bugs.freedesktop.org/show_bug.cgi?id=37679
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon.h | 1 +
+ drivers/gpu/drm/radeon/radeon_drv.c | 4 ++++
+ drivers/gpu/drm/radeon/radeon_irq_kms.c | 6 ++++++
+ 3 files changed, 11 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon.h
++++ b/drivers/gpu/drm/radeon/radeon.h
+@@ -93,6 +93,7 @@ extern int radeon_audio;
+ extern int radeon_disp_priority;
+ extern int radeon_hw_i2c;
+ extern int radeon_pcie_gen2;
++extern int radeon_msi;
+
+ /*
+ * Copy from radeon_drv.h so we don't have to include both and have conflicting
+--- a/drivers/gpu/drm/radeon/radeon_drv.c
++++ b/drivers/gpu/drm/radeon/radeon_drv.c
+@@ -117,6 +117,7 @@ int radeon_audio = 0;
+ int radeon_disp_priority = 0;
+ int radeon_hw_i2c = 0;
+ int radeon_pcie_gen2 = 0;
++int radeon_msi = -1;
+
+ MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
+ module_param_named(no_wb, radeon_no_wb, int, 0444);
+@@ -163,6 +164,9 @@ module_param_named(hw_i2c, radeon_hw_i2c
+ MODULE_PARM_DESC(pcie_gen2, "PCIE Gen2 mode (1 = enable)");
+ module_param_named(pcie_gen2, radeon_pcie_gen2, int, 0444);
+
++MODULE_PARM_DESC(msi, "MSI support (1 = enable, 0 = disable, -1 = auto)");
++module_param_named(msi, radeon_msi, int, 0444);
++
+ static int radeon_suspend(struct drm_device *dev, pm_message_t state)
+ {
+ drm_radeon_private_t *dev_priv = dev->dev_private;
+--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+@@ -118,6 +118,12 @@ static bool radeon_msi_ok(struct radeon_
+ if (rdev->flags & RADEON_IS_AGP)
+ return false;
+
++ /* force MSI on */
++ if (radeon_msi == 1)
++ return true;
++ else if (radeon_msi == 0)
++ return false;
++
+ /* Quirks */
+ /* HP RS690 only seems to work with MSIs. */
+ if ((rdev->pdev->device == 0x791f) &&
--- /dev/null
+From 01e718ec194e30b3e8eb3858c742c13649757efc Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 1 Nov 2011 14:14:18 -0400
+Subject: drm/radeon/kms: Add MSI quirk for Dell RS690
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 01e718ec194e30b3e8eb3858c742c13649757efc upstream.
+
+Some Dell laptops only seem to work with MSIs. This
+looks like a platform/bios bug.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=37679
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon_irq_kms.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+@@ -125,6 +125,12 @@ static bool radeon_msi_ok(struct radeon_
+ (rdev->pdev->subsystem_device == 0x30c2))
+ return true;
+
++ /* Dell RS690 only seems to work with MSIs. */
++ if ((rdev->pdev->device == 0x791f) &&
++ (rdev->pdev->subsystem_vendor == 0x1028) &&
++ (rdev->pdev->subsystem_device == 0x01fd))
++ return true;
++
+ if (rdev->flags & RADEON_IS_IGP) {
+ /* APUs work fine with MSIs */
+ if (rdev->family >= CHIP_PALM)
--- /dev/null
+From b362105f7f5223fa4d2e03ceeea0e51da754ccc6 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 25 Oct 2011 15:11:08 -0400
+Subject: drm/radeon/kms: Add MSI quirk for HP RS690
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit b362105f7f5223fa4d2e03ceeea0e51da754ccc6 upstream.
+
+Some HP laptops only seem to work with MSIs. This
+looks like a platform/bios bug.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=37679
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon_irq_kms.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+@@ -118,6 +118,13 @@ static bool radeon_msi_ok(struct radeon_
+ if (rdev->flags & RADEON_IS_AGP)
+ return false;
+
++ /* Quirks */
++ /* HP RS690 only seems to work with MSIs. */
++ if ((rdev->pdev->device == 0x791f) &&
++ (rdev->pdev->subsystem_vendor == 0x103c) &&
++ (rdev->pdev->subsystem_device == 0x30c2))
++ return true;
++
+ if (rdev->flags & RADEON_IS_IGP) {
+ /* APUs work fine with MSIs */
+ if (rdev->family >= CHIP_PALM)
--- /dev/null
+From 00dfb8df5bf8c3afe4c0bb8361133156b06b7a2c Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 31 Oct 2011 08:54:41 -0400
+Subject: drm/radeon/kms: properly set panel mode for eDP
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 00dfb8df5bf8c3afe4c0bb8361133156b06b7a2c upstream.
+
+This should make eDP more reliable.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/atombios_dp.c | 11 +++++++++++
+ include/drm/drm_dp_helper.h | 3 +++
+ 2 files changed, 14 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/atombios_dp.c
++++ b/drivers/gpu/drm/radeon/atombios_dp.c
+@@ -553,6 +553,7 @@ static void radeon_dp_set_panel_mode(str
+ {
+ struct drm_device *dev = encoder->dev;
+ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+ int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
+
+ if (!ASIC_IS_DCE4(rdev))
+@@ -560,10 +561,20 @@ static void radeon_dp_set_panel_mode(str
+
+ if (radeon_connector_encoder_is_dp_bridge(connector))
+ panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE;
++ else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
++ u8 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP);
++ if (tmp & 1)
++ panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE;
++ }
+
+ atombios_dig_encoder_setup(encoder,
+ ATOM_ENCODER_CMD_SETUP_PANEL_MODE,
+ panel_mode);
++
++ if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) &&
++ (panel_mode == DP_PANEL_MODE_INTERNAL_DP2_MODE)) {
++ radeon_write_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_SET, 1);
++ }
+ }
+
+ void radeon_dp_set_link_config(struct drm_connector *connector,
+--- a/include/drm/drm_dp_helper.h
++++ b/include/drm/drm_dp_helper.h
+@@ -72,6 +72,7 @@
+
+ #define DP_MAIN_LINK_CHANNEL_CODING 0x006
+
++#define DP_EDP_CONFIGURATION_CAP 0x00d
+ #define DP_TRAINING_AUX_RD_INTERVAL 0x00e
+
+ /* link configuration */
+@@ -133,6 +134,8 @@
+ #define DP_MAIN_LINK_CHANNEL_CODING_SET 0x108
+ # define DP_SET_ANSI_8B10B (1 << 0)
+
++#define DP_EDP_CONFIGURATION_SET 0x10a
++
+ #define DP_LANE0_1_STATUS 0x202
+ #define DP_LANE2_3_STATUS 0x203
+ # define DP_LANE_CR_DONE (1 << 0)
--- /dev/null
+From 64912e997f0fe13512e4c7b90e4f7c11cb922ab5 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 3 Nov 2011 11:21:39 -0400
+Subject: drm/radeon/kms: set HPD polarity in hpd_init()
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 64912e997f0fe13512e4c7b90e4f7c11cb922ab5 upstream.
+
+Polarity needs to be set accordingly to connector status (connected
+or disconnected). Set it up in hpd_init() so first hotplug works
+reliably no matter what is the initial set of connector. hpd_init()
+also covers resume so HPD will work correctly after resume as well.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Cc: Jerome Glisse <j.glisse@gmail.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/evergreen.c | 1 +
+ drivers/gpu/drm/radeon/r100.c | 1 +
+ drivers/gpu/drm/radeon/r600.c | 19 +++++++++----------
+ drivers/gpu/drm/radeon/radeon_connectors.c | 1 -
+ drivers/gpu/drm/radeon/rs600.c | 1 +
+ 5 files changed, 12 insertions(+), 11 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -353,6 +353,7 @@ void evergreen_hpd_init(struct radeon_de
+ default:
+ break;
+ }
++ radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+ }
+ if (rdev->irq.installed)
+ evergreen_irq_set(rdev);
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -434,6 +434,7 @@ void r100_hpd_init(struct radeon_device
+ default:
+ break;
+ }
++ radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+ }
+ if (rdev->irq.installed)
+ r100_irq_set(rdev);
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -762,13 +762,14 @@ void r600_hpd_init(struct radeon_device
+ struct drm_device *dev = rdev->ddev;
+ struct drm_connector *connector;
+
+- if (ASIC_IS_DCE3(rdev)) {
+- u32 tmp = DC_HPDx_CONNECTION_TIMER(0x9c4) | DC_HPDx_RX_INT_TIMER(0xfa);
+- if (ASIC_IS_DCE32(rdev))
+- tmp |= DC_HPDx_EN;
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
++
++ if (ASIC_IS_DCE3(rdev)) {
++ u32 tmp = DC_HPDx_CONNECTION_TIMER(0x9c4) | DC_HPDx_RX_INT_TIMER(0xfa);
++ if (ASIC_IS_DCE32(rdev))
++ tmp |= DC_HPDx_EN;
+
+- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+ switch (radeon_connector->hpd.hpd) {
+ case RADEON_HPD_1:
+ WREG32(DC_HPD1_CONTROL, tmp);
+@@ -798,10 +799,7 @@ void r600_hpd_init(struct radeon_device
+ default:
+ break;
+ }
+- }
+- } else {
+- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- struct radeon_connector *radeon_connector = to_radeon_connector(connector);
++ } else {
+ switch (radeon_connector->hpd.hpd) {
+ case RADEON_HPD_1:
+ WREG32(DC_HOT_PLUG_DETECT1_CONTROL, DC_HOT_PLUG_DETECTx_EN);
+@@ -819,6 +817,7 @@ void r600_hpd_init(struct radeon_device
+ break;
+ }
+ }
++ radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+ }
+ if (rdev->irq.installed)
+ r600_irq_set(rdev);
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -1779,7 +1779,6 @@ radeon_add_atom_connector(struct drm_dev
+ connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+ } else
+ connector->polled = DRM_CONNECTOR_POLL_HPD;
+- radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+
+ connector->display_info.subpixel_order = subpixel_order;
+ drm_sysfs_connector_add(connector);
+--- a/drivers/gpu/drm/radeon/rs600.c
++++ b/drivers/gpu/drm/radeon/rs600.c
+@@ -287,6 +287,7 @@ void rs600_hpd_init(struct radeon_device
+ default:
+ break;
+ }
++ radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+ }
+ if (rdev->irq.installed)
+ rs600_irq_set(rdev);
--- /dev/null
+From 8f6c25c59b0c895c68cae59d1b34e9a7b36971bc Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 25 Oct 2011 14:58:49 -0400
+Subject: drm/radeon/kms: split MSI check into a separate function
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 8f6c25c59b0c895c68cae59d1b34e9a7b36971bc upstream.
+
+This makes it easier to add quirks for certain systems.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon_irq_kms.c | 29 +++++++++++++++++++++++------
+ 1 file changed, 23 insertions(+), 6 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+@@ -108,6 +108,27 @@ void radeon_driver_irq_uninstall_kms(str
+ radeon_irq_set(rdev);
+ }
+
++static bool radeon_msi_ok(struct radeon_device *rdev)
++{
++ /* RV370/RV380 was first asic with MSI support */
++ if (rdev->family < CHIP_RV380)
++ return false;
++
++ /* MSIs don't work on AGP */
++ if (rdev->flags & RADEON_IS_AGP)
++ return false;
++
++ if (rdev->flags & RADEON_IS_IGP) {
++ /* APUs work fine with MSIs */
++ if (rdev->family >= CHIP_PALM)
++ return true;
++ /* lots of IGPs have problems with MSIs */
++ return false;
++ }
++
++ return true;
++}
++
+ int radeon_irq_kms_init(struct radeon_device *rdev)
+ {
+ int i;
+@@ -124,12 +145,8 @@ int radeon_irq_kms_init(struct radeon_de
+ }
+ /* enable msi */
+ rdev->msi_enabled = 0;
+- /* MSIs don't seem to work reliably on all IGP
+- * chips. Disable MSI on them for now.
+- */
+- if ((rdev->family >= CHIP_RV380) &&
+- ((!(rdev->flags & RADEON_IS_IGP)) || (rdev->family >= CHIP_PALM)) &&
+- (!(rdev->flags & RADEON_IS_AGP))) {
++
++ if (radeon_msi_ok(rdev)) {
+ int ret = pci_enable_msi(rdev->pdev);
+ if (!ret) {
+ rdev->msi_enabled = 1;
--- /dev/null
+From 8ab250d4484b72ccc78e34276c5ffa84c1d41303 Mon Sep 17 00:00:00 2001
+From: Jerome Glisse <jglisse@redhat.com>
+Date: Fri, 28 Oct 2011 17:52:34 -0400
+Subject: drm/radeon: set hpd polarity at init time so hotplug detect works
+
+From: Jerome Glisse <jglisse@redhat.com>
+
+commit 8ab250d4484b72ccc78e34276c5ffa84c1d41303 upstream.
+
+Polarity needs to be set accordingly to connector status (connected
+or disconnected). Set it up at module init so first hotplug works
+reliably no matter what is the initial set of connector.
+
+Signed-off-by: Jerome Glisse <jglisse@redhat.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/radeon/radeon_connectors.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -1779,6 +1779,7 @@ radeon_add_atom_connector(struct drm_dev
+ connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+ } else
+ connector->polled = DRM_CONNECTOR_POLL_HPD;
++ radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+
+ connector->display_info.subpixel_order = subpixel_order;
+ drm_sysfs_connector_add(connector);
--- /dev/null
+From 2aba6cac2a84f3b80e11a680c34d55e7739b474d Mon Sep 17 00:00:00 2001
+From: Jean Delvare <khali@linux-fr.org>
+Date: Sun, 6 Nov 2011 20:25:18 +0100
+Subject: hwmon: (coretemp) Fix for non-SMP builds
+
+From: Jean Delvare <khali@linux-fr.org>
+
+commit 2aba6cac2a84f3b80e11a680c34d55e7739b474d upstream.
+
+The definition of TO_ATTR_NO in the non-SMP case is wrong. As the SMP
+definition resolves to the correct value, just use this for both
+cases.
+
+Without this fix the temperature attributes are named temp0_* instead
+of temp2_*, so libsensors won't pick them. Broken since kernel 3.0.
+
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Tested-by: Phil Sutter <phil@nwl.cc>
+Acked-by: Durgadoss R <Durgadoss.r@intel.com>
+Acked-by: Guenter Roeck <guenter.roeck@ericsson.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hwmon/coretemp.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/hwmon/coretemp.c
++++ b/drivers/hwmon/coretemp.c
+@@ -50,14 +50,13 @@
+ #ifdef CONFIG_SMP
+ #define TO_PHYS_ID(cpu) cpu_data(cpu).phys_proc_id
+ #define TO_CORE_ID(cpu) cpu_data(cpu).cpu_core_id
+-#define TO_ATTR_NO(cpu) (TO_CORE_ID(cpu) + BASE_SYSFS_ATTR_NO)
+ #define for_each_sibling(i, cpu) for_each_cpu(i, cpu_sibling_mask(cpu))
+ #else
+ #define TO_PHYS_ID(cpu) (cpu)
+ #define TO_CORE_ID(cpu) (cpu)
+-#define TO_ATTR_NO(cpu) (cpu)
+ #define for_each_sibling(i, cpu) for (i = 0; false; )
+ #endif
++#define TO_ATTR_NO(cpu) (TO_CORE_ID(cpu) + BASE_SYSFS_ATTR_NO)
+
+ /*
+ * Per-Core Temperature Data
--- /dev/null
+From bfa02b0da66965caf46e441270af87edda4fea14 Mon Sep 17 00:00:00 2001
+From: Guenter Roeck <guenter.roeck@ericsson.com>
+Date: Sun, 6 Nov 2011 20:25:18 +0100
+Subject: hwmon: (w83627ehf) Fix broken driver init
+
+From: Guenter Roeck <guenter.roeck@ericsson.com>
+
+commit bfa02b0da66965caf46e441270af87edda4fea14 upstream.
+
+Commit 2265cef2 (hwmon: (w83627ehf) Properly report PECI and AMD-SI
+sensor types) results in kernel panic if data->temp_label was not
+initialized.
+The problem was found with chip W83627DHG-P.
+
+Add check if data->temp->label was set before use.
+
+Based on incomplete patch by Alexander Beregalov.
+
+Reported-by: Alexander Beregalov <a.beregalov@gmail.com>
+Tested-by: Alexander Beregalov <a.beregalov@gmail.com>
+Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hwmon/w83627ehf.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+--- a/drivers/hwmon/w83627ehf.c
++++ b/drivers/hwmon/w83627ehf.c
+@@ -1756,12 +1756,15 @@ static inline void __devinit w83627ehf_i
+ diode = 0x70;
+ }
+ for (i = 0; i < 3; i++) {
+- const char *label = data->temp_label[data->temp_src[i]];
++ const char *label = NULL;
++
++ if (data->temp_label)
++ label = data->temp_label[data->temp_src[i]];
+
+ /* Digital source overrides analog type */
+- if (strncmp(label, "PECI", 4) == 0)
++ if (label && strncmp(label, "PECI", 4) == 0)
+ data->temp_type[i] = 6;
+- else if (strncmp(label, "AMD", 3) == 0)
++ else if (label && strncmp(label, "AMD", 3) == 0)
+ data->temp_type[i] = 5;
+ else if ((tmp & (0x02 << i)))
+ data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
--- /dev/null
+From 2265cef2751b3441df91f85e0107f9f549e5b711 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <khali@linux-fr.org>
+Date: Fri, 4 Nov 2011 12:00:47 +0100
+Subject: hwmon: (w83627ehf) Properly report PECI and AMD-SI sensor types
+
+From: Jean Delvare <khali@linux-fr.org>
+
+commit 2265cef2751b3441df91f85e0107f9f549e5b711 upstream.
+
+When temperature sources are PECI or AMD-SI agents, it makes no sense
+to report their type as diode or thermistor. Instead we must report
+their digital nature.
+
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Acked-by: Guenter Roeck <guenter.roeck@ericsson.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hwmon/w83627ehf.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+--- a/drivers/hwmon/w83627ehf.c
++++ b/drivers/hwmon/w83627ehf.c
+@@ -1756,7 +1756,14 @@ static inline void __devinit w83627ehf_i
+ diode = 0x70;
+ }
+ for (i = 0; i < 3; i++) {
+- if ((tmp & (0x02 << i)))
++ const char *label = data->temp_label[data->temp_src[i]];
++
++ /* Digital source overrides analog type */
++ if (strncmp(label, "PECI", 4) == 0)
++ data->temp_type[i] = 6;
++ else if (strncmp(label, "AMD", 3) == 0)
++ data->temp_type[i] = 5;
++ else if ((tmp & (0x02 << i)))
+ data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
+ else
+ data->temp_type[i] = 4; /* thermistor */
--- /dev/null
+From 3f198dfee49d2e9c30583c62b0c79286c78c7b44 Mon Sep 17 00:00:00 2001
+From: Srinivas Kandagatla <srinivas.kandagatla@st.com>
+Date: Tue, 2 Aug 2011 18:49:52 +0100
+Subject: kbuild: Fix help text not displayed in choice option.
+
+From: Srinivas Kandagatla <srinivas.kandagatla@st.com>
+
+commit 3f198dfee49d2e9c30583c62b0c79286c78c7b44 upstream.
+
+Help text under choice menu is never displayed because it does not have
+symbol name associated with it, however many kconfigs have help text
+under choice, assuming that it will be displayed when user selects help.
+for example in Kconfig if we have:
+choice
+ prompt "Choice"
+ ---help---
+ HELP TEXT ...
+
+config A
+ bool "A"
+
+config B
+ bool "B"
+
+endchoice
+
+Without this patch "HELP TEXT" is not displayed when user selects help
+option when "Choice" is highlighted from menuconfig or xconfig or
+gconfig.
+
+This patch changes the logic in menu_get_ext_help to display help for
+cases which dont have symbol names like choice.
+
+Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@st.com>
+Reviewed-by: Stuart Menefy <stuart.menefy@st.com>
+Reviewed-by: Arnaud Lacombe <lacombar@gmail.com>
+Signed-off-by: Michal Marek <mmarek@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ scripts/kconfig/menu.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/scripts/kconfig/menu.c
++++ b/scripts/kconfig/menu.c
+@@ -596,11 +596,10 @@ void menu_get_ext_help(struct menu *menu
+ struct symbol *sym = menu->sym;
+
+ if (menu_has_help(menu)) {
+- if (sym->name) {
++ if (sym->name)
+ str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
+- str_append(help, _(menu_get_help(menu)));
+- str_append(help, "\n");
+- }
++ str_append(help, _(menu_get_help(menu)));
++ str_append(help, "\n");
+ } else {
+ str_append(help, nohelp_text);
+ }
alsa-hda-disable-power-widget-control-for-idt-92hd83-93.patch
alsa-hda-add-support-for-92hd65-92hd66-family-of-codecs.patch
alsa-hda-realtek-skip-invalid-digital-out-pins.patch
+drm-radeon-avoid-bouncing-connector-status-btw-disconnected-unknown.patch
+drm-radeon-kms-split-msi-check-into-a-separate-function.patch
+drm-radeon-kms-add-msi-quirk-for-hp-rs690.patch
+drm-radeon-set-hpd-polarity-at-init-time-so-hotplug-detect-works.patch
+drm-radeon-kms-properly-set-panel-mode-for-edp.patch
+drm-radeon-kms-add-msi-quirk-for-dell-rs690.patch
+drm-radeon-kms-add-msi-module-parameter.patch
+drm-radeon-kms-set-hpd-polarity-in-hpd_init.patch
+kbuild-fix-help-text-not-displayed-in-choice-option.patch
+usb-update-last_busy-time-after-autosuspend-fails.patch
+cciss-add-small-delay-when-using-pci-power-management-to-reset-for-kump.patch
+hwmon-coretemp-fix-for-non-smp-builds.patch
+hwmon-w83627ehf-properly-report-peci-and-amd-si-sensor-types.patch
+hwmon-w83627ehf-fix-broken-driver-init.patch
--- /dev/null
+From b2c0a863e14676fa5760c6d828fd373288e2f64a Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Fri, 4 Nov 2011 00:52:46 +0100
+Subject: USB: Update last_busy time after autosuspend fails
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit b2c0a863e14676fa5760c6d828fd373288e2f64a upstream.
+
+Originally, the runtime PM core would send an idle notification
+whenever a suspend attempt failed. The idle callback routine could
+then schedule a delayed suspend for some time later.
+
+However this behavior was changed by commit
+f71648d73c1650b8b4aceb3856bebbde6daa3b86 (PM / Runtime: Remove idle
+notification after failing suspend). No notifications were sent, and
+there was no clear mechanism to retry failed suspends.
+
+This caused problems for the usbhid driver, because it fails
+autosuspend attempts as long as a key is being held down. A companion
+patch changes the PM core's behavior, but we also need to change the
+USB core. In particular, this patch (as1493) updates the device's
+last_busy time when an autosuspend fails, so that the PM core will
+retry the autosuspend in the future when the delay time expires
+again.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Henrik Rydberg <rydberg@euromail.se>
+Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/driver.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/usb/core/driver.c
++++ b/drivers/usb/core/driver.c
+@@ -1668,6 +1668,11 @@ int usb_runtime_suspend(struct device *d
+ return -EAGAIN;
+
+ status = usb_suspend_both(udev, PMSG_AUTO_SUSPEND);
++
++ /* Allow a retry if autosuspend failed temporarily */
++ if (status == -EAGAIN || status == -EBUSY)
++ usb_mark_last_busy(udev);
++
+ /* The PM core reacts badly unless the return code is 0,
+ * -EAGAIN, or -EBUSY, so always return -EBUSY on an error.
+ */