]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 2 Oct 2014 22:06:18 +0000 (15:06 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 2 Oct 2014 22:06:18 +0000 (15:06 -0700)
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

16 files changed:
queue-3.14/drm-radeon-add-ability-to-get-and-change-dpm-state-when-radeon-px-card-is-turned-off.patch [new file with mode: 0644]
queue-3.14/drm-radeon-add-connector-quirk-for-fujitsu-board.patch [new file with mode: 0644]
queue-3.14/drm-radeon-add-missing-lines-to-ci_set_thermal_temperature_range.patch [new file with mode: 0644]
queue-3.14/drm-radeon-cik-use-a-separate-counter-for-cp-init-timeout.patch [new file with mode: 0644]
queue-3.14/drm-radeon-don-t-reset-dma-on-ni-si-init.patch [new file with mode: 0644]
queue-3.14/drm-radeon-don-t-reset-dma-on-r6xx-evergreen-init.patch [new file with mode: 0644]
queue-3.14/drm-radeon-don-t-reset-sdma-on-cik-init.patch [new file with mode: 0644]
queue-3.14/drm-radeon-dpm-set-the-thermal-type-properly-for-special-configs.patch [new file with mode: 0644]
queue-3.14/drm-radeon-fix-pm-handling-in-radeon_gpu_reset.patch [new file with mode: 0644]
queue-3.14/drm-radeon-fix-semaphore-value-init.patch [new file with mode: 0644]
queue-3.14/series
queue-3.14/xtensa-fix-a6-and-a7-handling-in-fast_syscall_xtensa.patch [new file with mode: 0644]
queue-3.14/xtensa-fix-access-to-thread_ra-thread_sp-thread_ds.patch [new file with mode: 0644]
queue-3.14/xtensa-fix-address-checks-in-dma_-alloc-free-_coherent.patch [new file with mode: 0644]
queue-3.14/xtensa-fix-tlbtemp_base_2-region-handling-in-fast_second_level_miss.patch [new file with mode: 0644]
queue-3.14/xtensa-replace-ioctl-code-definitions-with-constants.patch [new file with mode: 0644]

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 (file)
index 0000000..e062ed6
--- /dev/null
@@ -0,0 +1,64 @@
+From b07a657e3a05b81c8a30d60e3f3746ca5a48ee62 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com>
+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?= <pali.rohar@gmail.com>
+
+commit b07a657e3a05b81c8a30d60e3f3746ca5a48ee62 upstream.
+
+This fixing commit 4f2f203976964e267dc477de6648bdb3acd2b74b
+
+bug:
+https://bugzilla.kernel.org/show_bug.cgi?id=76321
+
+Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..d03c88b
--- /dev/null
@@ -0,0 +1,37 @@
+From 1952f24d0fa6292d65f886887af87ba8ac79b3ba Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 8 Sep 2014 13:55:51 -0400
+Subject: drm/radeon: add connector quirk for fujitsu board
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+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 <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..33d3e92
--- /dev/null
@@ -0,0 +1,33 @@
+From 6bce8d9772c1c606921a9c99e566eb14202f6669 Mon Sep 17 00:00:00 2001
+From: Oleg Chernovskiy <algonkvel@gmail.com>
+Date: Mon, 11 Aug 2014 21:53:46 +0400
+Subject: drm/radeon: Add missing lines to ci_set_thermal_temperature_range
+
+From: Oleg Chernovskiy <algonkvel@gmail.com>
+
+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 <algonkvel@gmail.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..e3fa1cc
--- /dev/null
@@ -0,0 +1,42 @@
+From 370ce45b5986118fa496dddbcd7039e1aa1a418f Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+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 <alexander.deucher@amd.com>
+
+commit 370ce45b5986118fa496dddbcd7039e1aa1a418f upstream.
+
+Otherwise we may fail to init the second compute ring.
+
+Noticed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..2f0d9b1
--- /dev/null
@@ -0,0 +1,41 @@
+From 31a25e2caf9367365fcb0e57fd8fa5a42e9b73e4 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+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 <alexander.deucher@amd.com>
+
+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 <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..1227a7a
--- /dev/null
@@ -0,0 +1,41 @@
+From c1789a2e66a4209fe5035eca11fdd729b2ffdd82 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+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 <alexander.deucher@amd.com>
+
+commit c1789a2e66a4209fe5035eca11fdd729b2ffdd82 upstream.
+
+Otherwise we may lose the DMA golden settings which can
+lead to hangs, etc.
+
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..bda45b2
--- /dev/null
@@ -0,0 +1,39 @@
+From 799028d5d85384cce140323be633c8d5f079193f Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+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 <alexander.deucher@amd.com>
+
+commit 799028d5d85384cce140323be633c8d5f079193f upstream.
+
+Otherwise we may lose the DMA golden settings which can
+lead to hangs, etc.
+
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..213275e
--- /dev/null
@@ -0,0 +1,61 @@
+From ff4377924f7e587c61bcbc704eafecf6c7bd2e00 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 8 Sep 2014 02:33:32 -0400
+Subject: drm/radeon/dpm: set the thermal type properly for special configs
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+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 <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..5d69cf9
--- /dev/null
@@ -0,0 +1,62 @@
+From c940b4476f4fb649f6493b6a0ae837474ded8915 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+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 <alexander.deucher@amd.com>
+
+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 <alexander.deucher@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..06f55dd
--- /dev/null
@@ -0,0 +1,35 @@
+From f229407da79315c18a2f25f485e1a1b9fdda1e92 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+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?= <christian.koenig@amd.com>
+
+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 <christian.koenig@amd.com>
+Reviewed-By: Grigori Goronzy <greg@chown.ath.cx>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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);
index 8ab6c4b17049a3ea2911cf5cb49ecf60cc5c718a..653cac4a52edb730aa46004782a7faa324176dfb 100644 (file)
@@ -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 (file)
index 0000000..da29f01
--- /dev/null
@@ -0,0 +1,73 @@
+From d1b6ba82a50cecf94be540a3a153aa89d97511a0 Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Thu, 31 Jul 2014 22:40:57 +0400
+Subject: xtensa: fix a6 and a7 handling in fast_syscall_xtensa
+
+From: Max Filippov <jcmvbkbc@gmail.com>
+
+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 <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..2aab764
--- /dev/null
@@ -0,0 +1,80 @@
+From 52247123749cc3cbc30168b33ad8c69515c96d23 Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Sun, 27 Jul 2014 07:23:41 +0400
+Subject: xtensa: fix access to THREAD_RA/THREAD_SP/THREAD_DS
+
+From: Max Filippov <jcmvbkbc@gmail.com>
+
+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 <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..a199144
--- /dev/null
@@ -0,0 +1,55 @@
+From 1ca49463c44c970b1ab1d71b0f268bfdf8427a7e Mon Sep 17 00:00:00 2001
+From: Alan Douglas <adouglas@cadence.com>
+Date: Wed, 23 Jul 2014 14:06:40 +0400
+Subject: xtensa: fix address checks in dma_{alloc,free}_coherent
+
+From: Alan Douglas <adouglas@cadence.com>
+
+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 <adouglas@cadence.com>
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..2f79f02
--- /dev/null
@@ -0,0 +1,61 @@
+From 7128039fe2dd3d59da9e4ffa036f3aaa3ba87b9f Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+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 <jcmvbkbc@gmail.com>
+
+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 <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..d674683
--- /dev/null
@@ -0,0 +1,77 @@
+From f61bf8e7d19e0a3456a7a9ed97c399e4353698dc Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Sun, 20 Jul 2014 03:38:53 +0400
+Subject: xtensa: replace IOCTL code definitions with constants
+
+From: Max Filippov <jcmvbkbc@gmail.com>
+
+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 <jcmvbkbc@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 */