From 5a8abac4f3fd2f6d7665dfa7db0e50e492b5177f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 2 Oct 2014 15:06:18 -0700 Subject: [PATCH] 3.14-stable patches added patches: drm-radeon-add-ability-to-get-and-change-dpm-state-when-radeon-px-card-is-turned-off.patch drm-radeon-add-connector-quirk-for-fujitsu-board.patch drm-radeon-add-missing-lines-to-ci_set_thermal_temperature_range.patch drm-radeon-cik-use-a-separate-counter-for-cp-init-timeout.patch drm-radeon-don-t-reset-dma-on-ni-si-init.patch drm-radeon-don-t-reset-dma-on-r6xx-evergreen-init.patch drm-radeon-don-t-reset-sdma-on-cik-init.patch drm-radeon-dpm-set-the-thermal-type-properly-for-special-configs.patch drm-radeon-fix-pm-handling-in-radeon_gpu_reset.patch drm-radeon-fix-semaphore-value-init.patch xtensa-fix-a6-and-a7-handling-in-fast_syscall_xtensa.patch xtensa-fix-access-to-thread_ra-thread_sp-thread_ds.patch xtensa-fix-address-checks-in-dma_-alloc-free-_coherent.patch xtensa-fix-tlbtemp_base_2-region-handling-in-fast_second_level_miss.patch xtensa-replace-ioctl-code-definitions-with-constants.patch --- ...te-when-radeon-px-card-is-turned-off.patch | 64 +++++++++++++++ ...dd-connector-quirk-for-fujitsu-board.patch | 37 +++++++++ ...-to-ci_set_thermal_temperature_range.patch | 33 ++++++++ ...separate-counter-for-cp-init-timeout.patch | 42 ++++++++++ ...radeon-don-t-reset-dma-on-ni-si-init.patch | 41 ++++++++++ ...n-t-reset-dma-on-r6xx-evergreen-init.patch | 41 ++++++++++ ...-radeon-don-t-reset-sdma-on-cik-init.patch | 39 +++++++++ ...al-type-properly-for-special-configs.patch | 61 ++++++++++++++ ...-fix-pm-handling-in-radeon_gpu_reset.patch | 62 ++++++++++++++ .../drm-radeon-fix-semaphore-value-init.patch | 35 ++++++++ queue-3.14/series | 15 ++++ ...d-a7-handling-in-fast_syscall_xtensa.patch | 73 +++++++++++++++++ ...ess-to-thread_ra-thread_sp-thread_ds.patch | 80 +++++++++++++++++++ ...-checks-in-dma_-alloc-free-_coherent.patch | 55 +++++++++++++ ...n-handling-in-fast_second_level_miss.patch | 61 ++++++++++++++ ...octl-code-definitions-with-constants.patch | 77 ++++++++++++++++++ 16 files changed, 816 insertions(+) create mode 100644 queue-3.14/drm-radeon-add-ability-to-get-and-change-dpm-state-when-radeon-px-card-is-turned-off.patch create mode 100644 queue-3.14/drm-radeon-add-connector-quirk-for-fujitsu-board.patch create mode 100644 queue-3.14/drm-radeon-add-missing-lines-to-ci_set_thermal_temperature_range.patch create mode 100644 queue-3.14/drm-radeon-cik-use-a-separate-counter-for-cp-init-timeout.patch create mode 100644 queue-3.14/drm-radeon-don-t-reset-dma-on-ni-si-init.patch create mode 100644 queue-3.14/drm-radeon-don-t-reset-dma-on-r6xx-evergreen-init.patch create mode 100644 queue-3.14/drm-radeon-don-t-reset-sdma-on-cik-init.patch create mode 100644 queue-3.14/drm-radeon-dpm-set-the-thermal-type-properly-for-special-configs.patch create mode 100644 queue-3.14/drm-radeon-fix-pm-handling-in-radeon_gpu_reset.patch create mode 100644 queue-3.14/drm-radeon-fix-semaphore-value-init.patch create mode 100644 queue-3.14/xtensa-fix-a6-and-a7-handling-in-fast_syscall_xtensa.patch create mode 100644 queue-3.14/xtensa-fix-access-to-thread_ra-thread_sp-thread_ds.patch create mode 100644 queue-3.14/xtensa-fix-address-checks-in-dma_-alloc-free-_coherent.patch create mode 100644 queue-3.14/xtensa-fix-tlbtemp_base_2-region-handling-in-fast_second_level_miss.patch create mode 100644 queue-3.14/xtensa-replace-ioctl-code-definitions-with-constants.patch diff --git a/queue-3.14/drm-radeon-add-ability-to-get-and-change-dpm-state-when-radeon-px-card-is-turned-off.patch b/queue-3.14/drm-radeon-add-ability-to-get-and-change-dpm-state-when-radeon-px-card-is-turned-off.patch new file mode 100644 index 00000000000..e062ed62d1b --- /dev/null +++ b/queue-3.14/drm-radeon-add-ability-to-get-and-change-dpm-state-when-radeon-px-card-is-turned-off.patch @@ -0,0 +1,64 @@ +From b07a657e3a05b81c8a30d60e3f3746ca5a48ee62 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Pali=20Roh=C3=A1r?= +Date: Mon, 11 Aug 2014 19:01:58 +0200 +Subject: drm/radeon: Add ability to get and change dpm state when radeon PX card is turned off +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Pali=20Roh=C3=A1r?= + +commit b07a657e3a05b81c8a30d60e3f3746ca5a48ee62 upstream. + +This fixing commit 4f2f203976964e267dc477de6648bdb3acd2b74b + +bug: +https://bugzilla.kernel.org/show_bug.cgi?id=76321 + +Signed-off-by: Pali Rohár +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_pm.c | 16 ++++++---------- + 1 file changed, 6 insertions(+), 10 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_pm.c ++++ b/drivers/gpu/drm/radeon/radeon_pm.c +@@ -458,10 +458,6 @@ static ssize_t radeon_get_dpm_state(stru + struct radeon_device *rdev = ddev->dev_private; + enum radeon_pm_state_type pm = rdev->pm.dpm.user_state; + +- if ((rdev->flags & RADEON_IS_PX) && +- (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) +- return snprintf(buf, PAGE_SIZE, "off\n"); +- + return snprintf(buf, PAGE_SIZE, "%s\n", + (pm == POWER_STATE_TYPE_BATTERY) ? "battery" : + (pm == POWER_STATE_TYPE_BALANCED) ? "balanced" : "performance"); +@@ -475,11 +471,6 @@ static ssize_t radeon_set_dpm_state(stru + struct drm_device *ddev = dev_get_drvdata(dev); + struct radeon_device *rdev = ddev->dev_private; + +- /* Can't set dpm state when the card is off */ +- if ((rdev->flags & RADEON_IS_PX) && +- (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) +- return -EINVAL; +- + mutex_lock(&rdev->pm.mutex); + if (strncmp("battery", buf, strlen("battery")) == 0) + rdev->pm.dpm.user_state = POWER_STATE_TYPE_BATTERY; +@@ -493,7 +484,12 @@ static ssize_t radeon_set_dpm_state(stru + goto fail; + } + mutex_unlock(&rdev->pm.mutex); +- radeon_pm_compute_clocks(rdev); ++ ++ /* Can't set dpm state when the card is off */ ++ if (!(rdev->flags & RADEON_IS_PX) || ++ (ddev->switch_power_state == DRM_SWITCH_POWER_ON)) ++ radeon_pm_compute_clocks(rdev); ++ + fail: + return count; + } diff --git a/queue-3.14/drm-radeon-add-connector-quirk-for-fujitsu-board.patch b/queue-3.14/drm-radeon-add-connector-quirk-for-fujitsu-board.patch new file mode 100644 index 00000000000..d03c88b289d --- /dev/null +++ b/queue-3.14/drm-radeon-add-connector-quirk-for-fujitsu-board.patch @@ -0,0 +1,37 @@ +From 1952f24d0fa6292d65f886887af87ba8ac79b3ba Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Mon, 8 Sep 2014 13:55:51 -0400 +Subject: drm/radeon: add connector quirk for fujitsu board + +From: Alex Deucher + +commit 1952f24d0fa6292d65f886887af87ba8ac79b3ba upstream. + +Vbios connector table lists non-existent VGA port. + +Bug: +https://bugs.freedesktop.org/show_bug.cgi?id=83184 + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_atombios.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/drivers/gpu/drm/radeon/radeon_atombios.c ++++ b/drivers/gpu/drm/radeon/radeon_atombios.c +@@ -447,6 +447,13 @@ static bool radeon_atom_apply_quirks(str + } + } + ++ /* Fujitsu D3003-S2 board lists DVI-I as DVI-I and VGA */ ++ if ((dev->pdev->device == 0x9805) && ++ (dev->pdev->subsystem_vendor == 0x1734) && ++ (dev->pdev->subsystem_device == 0x11bd)) { ++ if (*connector_type == DRM_MODE_CONNECTOR_VGA) ++ return false; ++ } + + return true; + } diff --git a/queue-3.14/drm-radeon-add-missing-lines-to-ci_set_thermal_temperature_range.patch b/queue-3.14/drm-radeon-add-missing-lines-to-ci_set_thermal_temperature_range.patch new file mode 100644 index 00000000000..33d3e92d239 --- /dev/null +++ b/queue-3.14/drm-radeon-add-missing-lines-to-ci_set_thermal_temperature_range.patch @@ -0,0 +1,33 @@ +From 6bce8d9772c1c606921a9c99e566eb14202f6669 Mon Sep 17 00:00:00 2001 +From: Oleg Chernovskiy +Date: Mon, 11 Aug 2014 21:53:46 +0400 +Subject: drm/radeon: Add missing lines to ci_set_thermal_temperature_range + +From: Oleg Chernovskiy + +commit 6bce8d9772c1c606921a9c99e566eb14202f6669 upstream. + +Properly set the thermal min and max temp on CI. +Otherwise, we end up setting the thermal ranges +to 0 on resume and end up in the lowest power state. + +Signed-off-by: Oleg Chernovskiy +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/ci_dpm.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/gpu/drm/radeon/ci_dpm.c ++++ b/drivers/gpu/drm/radeon/ci_dpm.c +@@ -851,6 +851,9 @@ static int ci_set_thermal_temperature_ra + WREG32_SMC(CG_THERMAL_CTRL, tmp); + #endif + ++ rdev->pm.dpm.thermal.min_temp = low_temp; ++ rdev->pm.dpm.thermal.max_temp = high_temp; ++ + return 0; + } + diff --git a/queue-3.14/drm-radeon-cik-use-a-separate-counter-for-cp-init-timeout.patch b/queue-3.14/drm-radeon-cik-use-a-separate-counter-for-cp-init-timeout.patch new file mode 100644 index 00000000000..e3fa1ccf07d --- /dev/null +++ b/queue-3.14/drm-radeon-cik-use-a-separate-counter-for-cp-init-timeout.patch @@ -0,0 +1,42 @@ +From 370ce45b5986118fa496dddbcd7039e1aa1a418f Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 23 Sep 2014 10:20:13 -0400 +Subject: drm/radeon/cik: use a separate counter for CP init timeout +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Deucher + +commit 370ce45b5986118fa496dddbcd7039e1aa1a418f upstream. + +Otherwise we may fail to init the second compute ring. + +Noticed-by: Christian König +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/cik.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/radeon/cik.c ++++ b/drivers/gpu/drm/radeon/cik.c +@@ -4392,7 +4392,7 @@ struct bonaire_mqd + */ + static int cik_cp_compute_resume(struct radeon_device *rdev) + { +- int r, i, idx; ++ int r, i, j, idx; + u32 tmp; + bool use_doorbell = true; + u64 hqd_gpu_addr; +@@ -4511,7 +4511,7 @@ static int cik_cp_compute_resume(struct + mqd->queue_state.cp_hqd_pq_wptr= 0; + if (RREG32(CP_HQD_ACTIVE) & 1) { + WREG32(CP_HQD_DEQUEUE_REQUEST, 1); +- for (i = 0; i < rdev->usec_timeout; i++) { ++ for (j = 0; j < rdev->usec_timeout; j++) { + if (!(RREG32(CP_HQD_ACTIVE) & 1)) + break; + udelay(1); diff --git a/queue-3.14/drm-radeon-don-t-reset-dma-on-ni-si-init.patch b/queue-3.14/drm-radeon-don-t-reset-dma-on-ni-si-init.patch new file mode 100644 index 00000000000..2f0d9b1a5eb --- /dev/null +++ b/queue-3.14/drm-radeon-don-t-reset-dma-on-ni-si-init.patch @@ -0,0 +1,41 @@ +From 31a25e2caf9367365fcb0e57fd8fa5a42e9b73e4 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 17 Sep 2014 17:41:04 -0400 +Subject: drm/radeon: don't reset dma on NI/SI init +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Deucher + +commit 31a25e2caf9367365fcb0e57fd8fa5a42e9b73e4 upstream. + +Otherwise we may lose the DMA golden settings which can +lead to hangs, etc. + +bug: +https://www.libreoffice.org/bugzilla/show_bug.cgi?id=83500 + +Reviewed-by: Christian König +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/ni_dma.c | 6 ------ + 1 file changed, 6 deletions(-) + +--- a/drivers/gpu/drm/radeon/ni_dma.c ++++ b/drivers/gpu/drm/radeon/ni_dma.c +@@ -191,12 +191,6 @@ int cayman_dma_resume(struct radeon_devi + u32 reg_offset, wb_offset; + int i, r; + +- /* Reset dma */ +- WREG32(SRBM_SOFT_RESET, SOFT_RESET_DMA | SOFT_RESET_DMA1); +- RREG32(SRBM_SOFT_RESET); +- udelay(50); +- WREG32(SRBM_SOFT_RESET, 0); +- + for (i = 0; i < 2; i++) { + if (i == 0) { + ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX]; diff --git a/queue-3.14/drm-radeon-don-t-reset-dma-on-r6xx-evergreen-init.patch b/queue-3.14/drm-radeon-don-t-reset-dma-on-r6xx-evergreen-init.patch new file mode 100644 index 00000000000..1227a7aa806 --- /dev/null +++ b/queue-3.14/drm-radeon-don-t-reset-dma-on-r6xx-evergreen-init.patch @@ -0,0 +1,41 @@ +From c1789a2e66a4209fe5035eca11fdd729b2ffdd82 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 18 Sep 2014 10:23:04 -0400 +Subject: drm/radeon: don't reset dma on r6xx-evergreen init +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Deucher + +commit c1789a2e66a4209fe5035eca11fdd729b2ffdd82 upstream. + +Otherwise we may lose the DMA golden settings which can +lead to hangs, etc. + +Reviewed-by: Christian König +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/r600_dma.c | 9 --------- + 1 file changed, 9 deletions(-) + +--- a/drivers/gpu/drm/radeon/r600_dma.c ++++ b/drivers/gpu/drm/radeon/r600_dma.c +@@ -124,15 +124,6 @@ int r600_dma_resume(struct radeon_device + u32 rb_bufsz; + int r; + +- /* Reset dma */ +- if (rdev->family >= CHIP_RV770) +- WREG32(SRBM_SOFT_RESET, RV770_SOFT_RESET_DMA); +- else +- WREG32(SRBM_SOFT_RESET, SOFT_RESET_DMA); +- RREG32(SRBM_SOFT_RESET); +- udelay(50); +- WREG32(SRBM_SOFT_RESET, 0); +- + WREG32(DMA_SEM_INCOMPLETE_TIMER_CNTL, 0); + WREG32(DMA_SEM_WAIT_FAIL_TIMER_CNTL, 0); + diff --git a/queue-3.14/drm-radeon-don-t-reset-sdma-on-cik-init.patch b/queue-3.14/drm-radeon-don-t-reset-sdma-on-cik-init.patch new file mode 100644 index 00000000000..bda45b2b502 --- /dev/null +++ b/queue-3.14/drm-radeon-don-t-reset-sdma-on-cik-init.patch @@ -0,0 +1,39 @@ +From 799028d5d85384cce140323be633c8d5f079193f Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 18 Sep 2014 10:18:43 -0400 +Subject: drm/radeon: don't reset sdma on CIK init +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Deucher + +commit 799028d5d85384cce140323be633c8d5f079193f upstream. + +Otherwise we may lose the DMA golden settings which can +lead to hangs, etc. + +Reviewed-by: Christian König +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/cik_sdma.c | 7 ------- + 1 file changed, 7 deletions(-) + +--- a/drivers/gpu/drm/radeon/cik_sdma.c ++++ b/drivers/gpu/drm/radeon/cik_sdma.c +@@ -461,13 +461,6 @@ int cik_sdma_resume(struct radeon_device + { + int r; + +- /* Reset dma */ +- WREG32(SRBM_SOFT_RESET, SOFT_RESET_SDMA | SOFT_RESET_SDMA1); +- RREG32(SRBM_SOFT_RESET); +- udelay(50); +- WREG32(SRBM_SOFT_RESET, 0); +- RREG32(SRBM_SOFT_RESET); +- + r = cik_sdma_load_microcode(rdev); + if (r) + return r; diff --git a/queue-3.14/drm-radeon-dpm-set-the-thermal-type-properly-for-special-configs.patch b/queue-3.14/drm-radeon-dpm-set-the-thermal-type-properly-for-special-configs.patch new file mode 100644 index 00000000000..213275e93e2 --- /dev/null +++ b/queue-3.14/drm-radeon-dpm-set-the-thermal-type-properly-for-special-configs.patch @@ -0,0 +1,61 @@ +From ff4377924f7e587c61bcbc704eafecf6c7bd2e00 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Mon, 8 Sep 2014 02:33:32 -0400 +Subject: drm/radeon/dpm: set the thermal type properly for special configs + +From: Alex Deucher + +commit ff4377924f7e587c61bcbc704eafecf6c7bd2e00 upstream. + +On systems with special thermal configurations make sure we make +note of the thermal setup. This is required for proper firmware +configuration on these systems. + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_atombios.c | 26 +++++++++++++++++++------- + 1 file changed, 19 insertions(+), 7 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_atombios.c ++++ b/drivers/gpu/drm/radeon/radeon_atombios.c +@@ -2273,19 +2273,31 @@ static void radeon_atombios_add_pplib_th + (controller->ucFanParameters & + ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); + rdev->pm.int_thermal_type = THERMAL_TYPE_KV; +- } else if ((controller->ucType == +- ATOM_PP_THERMALCONTROLLER_EXTERNAL_GPIO) || +- (controller->ucType == +- ATOM_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL) || +- (controller->ucType == +- ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL)) { +- DRM_INFO("Special thermal controller config\n"); ++ } else if (controller->ucType == ++ ATOM_PP_THERMALCONTROLLER_EXTERNAL_GPIO) { ++ DRM_INFO("External GPIO thermal controller %s fan control\n", ++ (controller->ucFanParameters & ++ ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); ++ rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL_GPIO; ++ } else if (controller->ucType == ++ ATOM_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL) { ++ DRM_INFO("ADT7473 with internal thermal controller %s fan control\n", ++ (controller->ucFanParameters & ++ ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); ++ rdev->pm.int_thermal_type = THERMAL_TYPE_ADT7473_WITH_INTERNAL; ++ } else if (controller->ucType == ++ ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL) { ++ DRM_INFO("EMC2103 with internal thermal controller %s fan control\n", ++ (controller->ucFanParameters & ++ ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); ++ rdev->pm.int_thermal_type = THERMAL_TYPE_EMC2103_WITH_INTERNAL; + } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) { + DRM_INFO("Possible %s thermal controller at 0x%02x %s fan control\n", + pp_lib_thermal_controller_names[controller->ucType], + controller->ucI2cAddress >> 1, + (controller->ucFanParameters & + ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); ++ rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL; + i2c_bus = radeon_lookup_i2c_gpio(rdev, controller->ucI2cLine); + rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); + if (rdev->pm.i2c_bus) { diff --git a/queue-3.14/drm-radeon-fix-pm-handling-in-radeon_gpu_reset.patch b/queue-3.14/drm-radeon-fix-pm-handling-in-radeon_gpu_reset.patch new file mode 100644 index 00000000000..5d69cf98f41 --- /dev/null +++ b/queue-3.14/drm-radeon-fix-pm-handling-in-radeon_gpu_reset.patch @@ -0,0 +1,62 @@ +From c940b4476f4fb649f6493b6a0ae837474ded8915 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Mon, 18 Aug 2014 11:57:28 -0400 +Subject: drm/radeon: fix pm handling in radeon_gpu_reset +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Deucher + +commit c940b4476f4fb649f6493b6a0ae837474ded8915 upstream. + +pm_suspend is handled in the radeon_suspend callbacks. +pm_resume has special handling depending on whether +dpm or legacy pm is enabled. Change radeon_gpu_reset +to mirror the behavior in the suspend and resume +pathes. + +Signed-off-by: Alex Deucher +Reviewed-by: Christian König +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_device.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_device.c ++++ b/drivers/gpu/drm/radeon/radeon_device.c +@@ -1600,7 +1600,6 @@ int radeon_gpu_reset(struct radeon_devic + radeon_save_bios_scratch_regs(rdev); + /* block TTM */ + resched = ttm_bo_lock_delayed_workqueue(&rdev->mman.bdev); +- radeon_pm_suspend(rdev); + radeon_suspend(rdev); + + for (i = 0; i < RADEON_NUM_RINGS; ++i) { +@@ -1646,9 +1645,24 @@ retry: + } + } + +- radeon_pm_resume(rdev); ++ if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) { ++ /* do dpm late init */ ++ r = radeon_pm_late_init(rdev); ++ if (r) { ++ rdev->pm.dpm_enabled = false; ++ DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n"); ++ } ++ } else { ++ /* resume old pm late */ ++ radeon_pm_resume(rdev); ++ } ++ + drm_helper_resume_force_mode(rdev->ddev); + ++ /* set the power state here in case we are a PX system or headless */ ++ if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) ++ radeon_pm_compute_clocks(rdev); ++ + ttm_bo_unlock_delayed_workqueue(&rdev->mman.bdev, resched); + if (r) { + /* bad news, how to tell it to userspace ? */ diff --git a/queue-3.14/drm-radeon-fix-semaphore-value-init.patch b/queue-3.14/drm-radeon-fix-semaphore-value-init.patch new file mode 100644 index 00000000000..06f55ddcc67 --- /dev/null +++ b/queue-3.14/drm-radeon-fix-semaphore-value-init.patch @@ -0,0 +1,35 @@ +From f229407da79315c18a2f25f485e1a1b9fdda1e92 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= +Date: Sun, 7 Sep 2014 12:06:52 +0200 +Subject: drm/radeon: fix semaphore value init +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Christian=20K=C3=B6nig?= + +commit f229407da79315c18a2f25f485e1a1b9fdda1e92 upstream. + +Semaphore values have 64 bits, not 32. This fixes a very subtle bug +that disables synchronization when the upper 32bits wasn't zero. + +Signed-off-by: Christian König +Reviewed-By: Grigori Goronzy +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_semaphore.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/radeon_semaphore.c ++++ b/drivers/gpu/drm/radeon/radeon_semaphore.c +@@ -34,7 +34,7 @@ + int radeon_semaphore_create(struct radeon_device *rdev, + struct radeon_semaphore **semaphore) + { +- uint32_t *cpu_addr; ++ uint64_t *cpu_addr; + int i, r; + + *semaphore = kmalloc(sizeof(struct radeon_semaphore), GFP_KERNEL); diff --git a/queue-3.14/series b/queue-3.14/series index 8ab6c4b1704..653cac4a52e 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -54,3 +54,18 @@ drm-i915-wait-for-vblank-before-enabling-the-tv-encoder.patch drm-ast-ast2000-cannot-be-detected-correctly.patch imx-drm-ipuv3-plane-fix-ipu_plane_dpms.patch drm-vmwgfx-fix-a-potential-infinite-spin-waiting-for-fifo-idle.patch +drm-radeon-add-ability-to-get-and-change-dpm-state-when-radeon-px-card-is-turned-off.patch +drm-radeon-add-missing-lines-to-ci_set_thermal_temperature_range.patch +drm-radeon-fix-pm-handling-in-radeon_gpu_reset.patch +drm-radeon-fix-semaphore-value-init.patch +drm-radeon-dpm-set-the-thermal-type-properly-for-special-configs.patch +drm-radeon-add-connector-quirk-for-fujitsu-board.patch +drm-radeon-don-t-reset-dma-on-ni-si-init.patch +drm-radeon-don-t-reset-sdma-on-cik-init.patch +drm-radeon-don-t-reset-dma-on-r6xx-evergreen-init.patch +drm-radeon-cik-use-a-separate-counter-for-cp-init-timeout.patch +xtensa-replace-ioctl-code-definitions-with-constants.patch +xtensa-fix-address-checks-in-dma_-alloc-free-_coherent.patch +xtensa-fix-access-to-thread_ra-thread_sp-thread_ds.patch +xtensa-fix-tlbtemp_base_2-region-handling-in-fast_second_level_miss.patch +xtensa-fix-a6-and-a7-handling-in-fast_syscall_xtensa.patch diff --git a/queue-3.14/xtensa-fix-a6-and-a7-handling-in-fast_syscall_xtensa.patch b/queue-3.14/xtensa-fix-a6-and-a7-handling-in-fast_syscall_xtensa.patch new file mode 100644 index 00000000000..da29f019ada --- /dev/null +++ b/queue-3.14/xtensa-fix-a6-and-a7-handling-in-fast_syscall_xtensa.patch @@ -0,0 +1,73 @@ +From d1b6ba82a50cecf94be540a3a153aa89d97511a0 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Thu, 31 Jul 2014 22:40:57 +0400 +Subject: xtensa: fix a6 and a7 handling in fast_syscall_xtensa + +From: Max Filippov + +commit d1b6ba82a50cecf94be540a3a153aa89d97511a0 upstream. + +Remove restoring a6 on some return paths and instead modify and restore +it in a single place, using symbolic name. +Correctly restore a7 from PT_AREG7 in case of illegal a6 value. + +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/xtensa/kernel/entry.S | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +--- a/arch/xtensa/kernel/entry.S ++++ b/arch/xtensa/kernel/entry.S +@@ -1001,9 +1001,8 @@ ENTRY(fast_syscall_xtensa) + movi a7, 4 # sizeof(unsigned int) + access_ok a3, a7, a0, a2, .Leac # a0: scratch reg, a2: sp + +- addi a6, a6, -1 # assuming SYS_XTENSA_ATOMIC_SET = 1 +- _bgeui a6, SYS_XTENSA_COUNT - 1, .Lill +- _bnei a6, SYS_XTENSA_ATOMIC_CMP_SWP - 1, .Lnswp ++ _bgeui a6, SYS_XTENSA_COUNT, .Lill ++ _bnei a6, SYS_XTENSA_ATOMIC_CMP_SWP, .Lnswp + + /* Fall through for ATOMIC_CMP_SWP. */ + +@@ -1015,27 +1014,26 @@ TRY s32i a5, a3, 0 # different, modify + l32i a7, a2, PT_AREG7 # restore a7 + l32i a0, a2, PT_AREG0 # restore a0 + movi a2, 1 # and return 1 +- addi a6, a6, 1 # restore a6 (really necessary?) + rfe + + 1: l32i a7, a2, PT_AREG7 # restore a7 + l32i a0, a2, PT_AREG0 # restore a0 + movi a2, 0 # return 0 (note that we cannot set +- addi a6, a6, 1 # restore a6 (really necessary?) + rfe + + .Lnswp: /* Atomic set, add, and exg_add. */ + + TRY l32i a7, a3, 0 # orig ++ addi a6, a6, -SYS_XTENSA_ATOMIC_SET + add a0, a4, a7 # + arg + moveqz a0, a4, a6 # set ++ addi a6, a6, SYS_XTENSA_ATOMIC_SET + TRY s32i a0, a3, 0 # write new value + + mov a0, a2 + mov a2, a7 + l32i a7, a0, PT_AREG7 # restore a7 + l32i a0, a0, PT_AREG0 # restore a0 +- addi a6, a6, 1 # restore a6 (really necessary?) + rfe + + CATCH +@@ -1044,7 +1042,7 @@ CATCH + movi a2, -EFAULT + rfe + +-.Lill: l32i a7, a2, PT_AREG0 # restore a7 ++.Lill: l32i a7, a2, PT_AREG7 # restore a7 + l32i a0, a2, PT_AREG0 # restore a0 + movi a2, -EINVAL + rfe diff --git a/queue-3.14/xtensa-fix-access-to-thread_ra-thread_sp-thread_ds.patch b/queue-3.14/xtensa-fix-access-to-thread_ra-thread_sp-thread_ds.patch new file mode 100644 index 00000000000..2aab7647489 --- /dev/null +++ b/queue-3.14/xtensa-fix-access-to-thread_ra-thread_sp-thread_ds.patch @@ -0,0 +1,80 @@ +From 52247123749cc3cbc30168b33ad8c69515c96d23 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sun, 27 Jul 2014 07:23:41 +0400 +Subject: xtensa: fix access to THREAD_RA/THREAD_SP/THREAD_DS + +From: Max Filippov + +commit 52247123749cc3cbc30168b33ad8c69515c96d23 upstream. + +With SMP and a lot of debug options enabled task_struct::thread gets out +of reach of s32i/l32i instructions with base pointing at task_struct, +breaking build with the following messages: + + arch/xtensa/kernel/entry.S: Assembler messages: + arch/xtensa/kernel/entry.S:1002: Error: operand 3 of 'l32i.n' has invalid value '1048' + arch/xtensa/kernel/entry.S:1831: Error: operand 3 of 's32i.n' has invalid value '1040' + arch/xtensa/kernel/entry.S:1832: Error: operand 3 of 's32i.n' has invalid value '1044' + +Change base to point to task_struct::thread in such cases. +Don't use a10 in _switch_to to save/restore prev pointer as a2 is not +clobbered. + +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/xtensa/include/asm/uaccess.h | 5 +++++ + arch/xtensa/kernel/entry.S | 12 ++++++++---- + 2 files changed, 13 insertions(+), 4 deletions(-) + +--- a/arch/xtensa/include/asm/uaccess.h ++++ b/arch/xtensa/include/asm/uaccess.h +@@ -52,7 +52,12 @@ + */ + .macro get_fs ad, sp + GET_CURRENT(\ad,\sp) ++#if THREAD_CURRENT_DS > 1020 ++ addi \ad, \ad, TASK_THREAD ++ l32i \ad, \ad, THREAD_CURRENT_DS - TASK_THREAD ++#else + l32i \ad, \ad, THREAD_CURRENT_DS ++#endif + .endm + + /* +--- a/arch/xtensa/kernel/entry.S ++++ b/arch/xtensa/kernel/entry.S +@@ -1820,7 +1820,6 @@ ENTRY(_switch_to) + + entry a1, 16 + +- mov a10, a2 # preserve 'prev' (a2) + mov a11, a3 # and 'next' (a3) + + l32i a4, a2, TASK_THREAD_INFO +@@ -1828,8 +1827,14 @@ ENTRY(_switch_to) + + save_xtregs_user a4 a6 a8 a9 a12 a13 THREAD_XTREGS_USER + +- s32i a0, a10, THREAD_RA # save return address +- s32i a1, a10, THREAD_SP # save stack pointer ++#if THREAD_RA > 1020 || THREAD_SP > 1020 ++ addi a10, a2, TASK_THREAD ++ s32i a0, a10, THREAD_RA - TASK_THREAD # save return address ++ s32i a1, a10, THREAD_SP - TASK_THREAD # save stack pointer ++#else ++ s32i a0, a2, THREAD_RA # save return address ++ s32i a1, a2, THREAD_SP # save stack pointer ++#endif + + /* Disable ints while we manipulate the stack pointer. */ + +@@ -1870,7 +1875,6 @@ ENTRY(_switch_to) + load_xtregs_user a5 a6 a8 a9 a12 a13 THREAD_XTREGS_USER + + wsr a14, ps +- mov a2, a10 # return 'prev' + rsync + + retw diff --git a/queue-3.14/xtensa-fix-address-checks-in-dma_-alloc-free-_coherent.patch b/queue-3.14/xtensa-fix-address-checks-in-dma_-alloc-free-_coherent.patch new file mode 100644 index 00000000000..a199144475e --- /dev/null +++ b/queue-3.14/xtensa-fix-address-checks-in-dma_-alloc-free-_coherent.patch @@ -0,0 +1,55 @@ +From 1ca49463c44c970b1ab1d71b0f268bfdf8427a7e Mon Sep 17 00:00:00 2001 +From: Alan Douglas +Date: Wed, 23 Jul 2014 14:06:40 +0400 +Subject: xtensa: fix address checks in dma_{alloc,free}_coherent + +From: Alan Douglas + +commit 1ca49463c44c970b1ab1d71b0f268bfdf8427a7e upstream. + +Virtual address is translated to the XCHAL_KSEG_CACHED region in the +dma_free_coherent, but is checked to be in the 0...XCHAL_KSEG_SIZE +range. + +Change check for end of the range from 'addr >= X' to 'addr > X - 1' to +handle the case of X == 0. + +Replace 'if (C) BUG();' construct with 'BUG_ON(C);'. + +Signed-off-by: Alan Douglas +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/xtensa/kernel/pci-dma.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +--- a/arch/xtensa/kernel/pci-dma.c ++++ b/arch/xtensa/kernel/pci-dma.c +@@ -49,9 +49,8 @@ dma_alloc_coherent(struct device *dev,si + + /* We currently don't support coherent memory outside KSEG */ + +- if (ret < XCHAL_KSEG_CACHED_VADDR +- || ret >= XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE) +- BUG(); ++ BUG_ON(ret < XCHAL_KSEG_CACHED_VADDR || ++ ret > XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE - 1); + + + if (ret != 0) { +@@ -68,10 +67,11 @@ EXPORT_SYMBOL(dma_alloc_coherent); + void dma_free_coherent(struct device *hwdev, size_t size, + void *vaddr, dma_addr_t dma_handle) + { +- long addr=(long)vaddr+XCHAL_KSEG_CACHED_VADDR-XCHAL_KSEG_BYPASS_VADDR; ++ unsigned long addr = (unsigned long)vaddr + ++ XCHAL_KSEG_CACHED_VADDR - XCHAL_KSEG_BYPASS_VADDR; + +- if (addr < 0 || addr >= XCHAL_KSEG_SIZE) +- BUG(); ++ BUG_ON(addr < XCHAL_KSEG_CACHED_VADDR || ++ addr > XCHAL_KSEG_CACHED_VADDR + XCHAL_KSEG_SIZE - 1); + + free_pages(addr, get_order(size)); + } diff --git a/queue-3.14/xtensa-fix-tlbtemp_base_2-region-handling-in-fast_second_level_miss.patch b/queue-3.14/xtensa-fix-tlbtemp_base_2-region-handling-in-fast_second_level_miss.patch new file mode 100644 index 00000000000..2f79f02b490 --- /dev/null +++ b/queue-3.14/xtensa-fix-tlbtemp_base_2-region-handling-in-fast_second_level_miss.patch @@ -0,0 +1,61 @@ +From 7128039fe2dd3d59da9e4ffa036f3aaa3ba87b9f Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Mon, 21 Jul 2014 22:01:51 +0400 +Subject: xtensa: fix TLBTEMP_BASE_2 region handling in fast_second_level_miss + +From: Max Filippov + +commit 7128039fe2dd3d59da9e4ffa036f3aaa3ba87b9f upstream. + +Current definition of TLBTEMP_BASE_2 is always 32K above the +TLBTEMP_BASE_1, whereas fast_second_level_miss handler for the TLBTEMP +region analyzes virtual address bit (PAGE_SHIFT + DCACHE_ALIAS_ORDER) +to determine TLBTEMP region where the fault happened. The size of the +TLBTEMP region is also checked incorrectly: not 64K, but twice data +cache way size (whicht may as well be less than the instruction cache +way size). + +Fix TLBTEMP_BASE_2 to be TLBTEMP_BASE_1 + data cache way size. +Provide TLBTEMP_SIZE that is a greater of doubled data cache way size or +the instruction cache way size, and use it to determine if the second +level TLB miss occured in the TLBTEMP region. + +Practical occurence of page faults in the TLBTEMP area is extremely +rare, this code can be tested by deletion of all w[di]tlb instructions +in the tlbtemp_mapping region. + +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/xtensa/include/asm/pgtable.h | 7 ++++++- + arch/xtensa/kernel/entry.S | 2 +- + 2 files changed, 7 insertions(+), 2 deletions(-) + +--- a/arch/xtensa/include/asm/pgtable.h ++++ b/arch/xtensa/include/asm/pgtable.h +@@ -67,7 +67,12 @@ + #define VMALLOC_START 0xC0000000 + #define VMALLOC_END 0xC7FEFFFF + #define TLBTEMP_BASE_1 0xC7FF0000 +-#define TLBTEMP_BASE_2 0xC7FF8000 ++#define TLBTEMP_BASE_2 (TLBTEMP_BASE_1 + DCACHE_WAY_SIZE) ++#if 2 * DCACHE_WAY_SIZE > ICACHE_WAY_SIZE ++#define TLBTEMP_SIZE (2 * DCACHE_WAY_SIZE) ++#else ++#define TLBTEMP_SIZE ICACHE_WAY_SIZE ++#endif + + /* + * For the Xtensa architecture, the PTE layout is as follows: +--- a/arch/xtensa/kernel/entry.S ++++ b/arch/xtensa/kernel/entry.S +@@ -1565,7 +1565,7 @@ ENTRY(fast_second_level_miss) + rsr a0, excvaddr + bltu a0, a3, 2f + +- addi a1, a0, -(2 << (DCACHE_ALIAS_ORDER + PAGE_SHIFT)) ++ addi a1, a0, -TLBTEMP_SIZE + bgeu a1, a3, 2f + + /* Check if we have to restore an ITLB mapping. */ diff --git a/queue-3.14/xtensa-replace-ioctl-code-definitions-with-constants.patch b/queue-3.14/xtensa-replace-ioctl-code-definitions-with-constants.patch new file mode 100644 index 00000000000..d674683b27f --- /dev/null +++ b/queue-3.14/xtensa-replace-ioctl-code-definitions-with-constants.patch @@ -0,0 +1,77 @@ +From f61bf8e7d19e0a3456a7a9ed97c399e4353698dc Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sun, 20 Jul 2014 03:38:53 +0400 +Subject: xtensa: replace IOCTL code definitions with constants + +From: Max Filippov + +commit f61bf8e7d19e0a3456a7a9ed97c399e4353698dc upstream. + +This fixes userspace code that builds on other architectures but fails +on xtensa due to references to structures that other architectures don't +refer to. E.g. this fixes the following issue with python-2.7.8: + + python-2.7.8/Modules/termios.c:861:25: error: invalid application + of 'sizeof' to incomplete type 'struct serial_multiport_struct' + {"TIOCSERGETMULTI", TIOCSERGETMULTI}, + python-2.7.8/Modules/termios.c:870:25: error: invalid application + of 'sizeof' to incomplete type 'struct serial_multiport_struct' + {"TIOCSERSETMULTI", TIOCSERSETMULTI}, + python-2.7.8/Modules/termios.c:900:24: error: invalid application + of 'sizeof' to incomplete type 'struct tty_struct' + {"TIOCTTYGSTRUCT", TIOCTTYGSTRUCT}, + +Signed-off-by: Max Filippov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/xtensa/include/uapi/asm/ioctls.h | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +--- a/arch/xtensa/include/uapi/asm/ioctls.h ++++ b/arch/xtensa/include/uapi/asm/ioctls.h +@@ -28,17 +28,17 @@ + #define TCSETSW 0x5403 + #define TCSETSF 0x5404 + +-#define TCGETA _IOR('t', 23, struct termio) +-#define TCSETA _IOW('t', 24, struct termio) +-#define TCSETAW _IOW('t', 25, struct termio) +-#define TCSETAF _IOW('t', 28, struct termio) ++#define TCGETA 0x80127417 /* _IOR('t', 23, struct termio) */ ++#define TCSETA 0x40127418 /* _IOW('t', 24, struct termio) */ ++#define TCSETAW 0x40127419 /* _IOW('t', 25, struct termio) */ ++#define TCSETAF 0x4012741C /* _IOW('t', 28, struct termio) */ + + #define TCSBRK _IO('t', 29) + #define TCXONC _IO('t', 30) + #define TCFLSH _IO('t', 31) + +-#define TIOCSWINSZ _IOW('t', 103, struct winsize) +-#define TIOCGWINSZ _IOR('t', 104, struct winsize) ++#define TIOCSWINSZ 0x40087467 /* _IOW('t', 103, struct winsize) */ ++#define TIOCGWINSZ 0x80087468 /* _IOR('t', 104, struct winsize) */ + #define TIOCSTART _IO('t', 110) /* start output, like ^Q */ + #define TIOCSTOP _IO('t', 111) /* stop output, like ^S */ + #define TIOCOUTQ _IOR('t', 115, int) /* output queue size */ +@@ -88,7 +88,6 @@ + #define TIOCSETD _IOW('T', 35, int) + #define TIOCGETD _IOR('T', 36, int) + #define TCSBRKP _IOW('T', 37, int) /* Needed for POSIX tcsendbreak()*/ +-#define TIOCTTYGSTRUCT _IOR('T', 38, struct tty_struct) /* For debugging only*/ + #define TIOCSBRK _IO('T', 39) /* BSD compatibility */ + #define TIOCCBRK _IO('T', 40) /* BSD compatibility */ + #define TIOCGSID _IOR('T', 41, pid_t) /* Return the session ID of FD*/ +@@ -114,8 +113,10 @@ + #define TIOCSERGETLSR _IOR('T', 89, unsigned int) /* Get line status reg. */ + /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ + # define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ +-#define TIOCSERGETMULTI _IOR('T', 90, struct serial_multiport_struct) /* Get multiport config */ +-#define TIOCSERSETMULTI _IOW('T', 91, struct serial_multiport_struct) /* Set multiport config */ ++#define TIOCSERGETMULTI 0x80a8545a /* Get multiport config */ ++ /* _IOR('T', 90, struct serial_multiport_struct) */ ++#define TIOCSERSETMULTI 0x40a8545b /* Set multiport config */ ++ /* _IOW('T', 91, struct serial_multiport_struct) */ + + #define TIOCMIWAIT _IO('T', 92) /* wait for a change on serial input line(s) */ + #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ -- 2.47.3