summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/f18
diff options
context:
space:
mode:
authorAlexandre Oliva <lxoliva@fsfla.org>2013-01-25 11:06:43 +0000
committerAlexandre Oliva <lxoliva@fsfla.org>2013-01-25 11:06:43 +0000
commitd8b85642043e2c597f0485c9bebdcadaa58a3b14 (patch)
treef8710e4f4fcc65e7966c37c422516bb04420abe8 /freed-ora/current/f18
parent1f2a099a34f9729e32132c2b0c207085ecebdd55 (diff)
downloadlinux-libre-raptor-d8b85642043e2c597f0485c9bebdcadaa58a3b14.tar.gz
linux-libre-raptor-d8b85642043e2c597f0485c9bebdcadaa58a3b14.zip
3.7.4-203.fc18.gnu
Diffstat (limited to 'freed-ora/current/f18')
-rw-r--r--freed-ora/current/f18/arm-l2x0-only-set-set_debug-on-pl310-r3p0-and-earlier.patch31
-rw-r--r--freed-ora/current/f18/config-armv75
-rw-r--r--freed-ora/current/f18/drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch67
-rw-r--r--freed-ora/current/f18/kernel.spec33
-rw-r--r--freed-ora/current/f18/libata-replace-sata_settings-with-devslp_timing.patch131
5 files changed, 263 insertions, 4 deletions
diff --git a/freed-ora/current/f18/arm-l2x0-only-set-set_debug-on-pl310-r3p0-and-earlier.patch b/freed-ora/current/f18/arm-l2x0-only-set-set_debug-on-pl310-r3p0-and-earlier.patch
new file mode 100644
index 000000000..662ebe666
--- /dev/null
+++ b/freed-ora/current/f18/arm-l2x0-only-set-set_debug-on-pl310-r3p0-and-earlier.patch
@@ -0,0 +1,31 @@
+From: Rob Herring <rob.herring at calxeda.com>
+
+PL310 errata work-arounds using .set_debug function are only needed on
+r3p0 and earlier, so check the rev and only set .set_debug on older revs.
+
+Avoiding debug register accesses fixes aborts on non-secure platforms
+like highbank. It is assumed that non-secure platforms needing these
+work-arounds have already implemented .set_debug with secure monitor
+calls.
+
+Signed-off-by: Rob Herring <rob.herring at calxeda.com>
+---
+ arch/arm/mm/cache-l2x0.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
+index 8a97e64..6cf2fd1 100644
+--- a/arch/arm/mm/cache-l2x0.c
++++ b/arch/arm/mm/cache-l2x0.c
+@@ -334,7 +334,8 @@ void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)
+ /* Unmapped register. */
+ sync_reg_offset = L2X0_DUMMY_REG;
+ #endif
+- outer_cache.set_debug = pl310_set_debug;
++ if ((cache_id & L2X0_CACHE_ID_RTL_MASK) <= L2X0_CACHE_ID_RTL_R3P0)
++ outer_cache.set_debug = pl310_set_debug;
+ break;
+ case L2X0_CACHE_ID_PART_L210:
+ ways = (aux >> 13) & 0xf;
+--
+1.7.10.4
diff --git a/freed-ora/current/f18/config-armv7 b/freed-ora/current/f18/config-armv7
index f143f3dee..5d6d294ab 100644
--- a/freed-ora/current/f18/config-armv7
+++ b/freed-ora/current/f18/config-armv7
@@ -48,7 +48,7 @@ CONFIG_HIGHPTE=y
# CONFIG_ARM_LPAE is not set
# CONFIG_THUMB2_KERNEL is not set
# CONFIG_XEN is not set
-CONFIG_HVC_DCC=y
+# CONFIG_HVC_DCC is not set
# CONFIG_ARM_VIRT_EXT is not set
@@ -144,6 +144,9 @@ CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+# disable VIRTIO console on because not doing real virt and it breaks vexpress on qemu
+# CONFIG_VIRTIO_CONSOLE is not set
+
CONFIG_RTC_DRV_PL030=y
CONFIG_RTC_DRV_PL031=y
diff --git a/freed-ora/current/f18/drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch b/freed-ora/current/f18/drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch
new file mode 100644
index 000000000..be557dc9d
--- /dev/null
+++ b/freed-ora/current/f18/drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch
@@ -0,0 +1,67 @@
+commit 262b6d363fcff16359c93bd58c297f961f6e6273
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue Jan 15 16:17:54 2013 +0000
+
+ drm/i915: Invalidate the relocation presumed_offsets along the slow path
+
+ In the slow path, we are forced to copy the relocations prior to
+ acquiring the struct mutex in order to handle pagefaults. We forgo
+ copying the new offsets back into the relocation entries in order to
+ prevent a recursive locking bug should we trigger a pagefault whilst
+ holding the mutex for the reservations of the execbuffer. Therefore, we
+ need to reset the presumed_offsets just in case the objects are rebound
+ back into their old locations after relocating for this exexbuffer - if
+ that were to happen we would assume the relocations were valid and leave
+ the actual pointers to the kernels dangling, instant hang.
+
+ Fixes regression from commit bcf50e2775bbc3101932d8e4ab8c7902aa4163b4
+ Author: Chris Wilson <chris@chris-wilson.co.uk>
+ Date: Sun Nov 21 22:07:12 2010 +0000
+
+ drm/i915: Handle pagefaults in execbuffer user relocations
+
+ Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=55984
+ Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+ Cc: Daniel Vetter <daniel.vetter@fwll.ch>
+ Cc: stable@vger.kernel.org
+ Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+
+diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+index d6a994a..26d08bb 100644
+--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
++++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+@@ -539,6 +539,8 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
+ total = 0;
+ for (i = 0; i < count; i++) {
+ struct drm_i915_gem_relocation_entry __user *user_relocs;
++ u64 invalid_offset = (u64)-1;
++ int j;
+
+ user_relocs = (void __user *)(uintptr_t)exec[i].relocs_ptr;
+
+@@ -549,6 +551,25 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
+ goto err;
+ }
+
++ /* As we do not update the known relocation offsets after
++ * relocating (due to the complexities in lock handling),
++ * we need to mark them as invalid now so that we force the
++ * relocation processing next time. Just in case the target
++ * object is evicted and then rebound into its old
++ * presumed_offset before the next execbuffer - if that
++ * happened we would make the mistake of assuming that the
++ * relocations were valid.
++ */
++ for (j = 0; j < exec[i].relocation_count; j++) {
++ if (copy_to_user(&user_relocs[j].presumed_offset,
++ &invalid_offset,
++ sizeof(invalid_offset))) {
++ ret = -EFAULT;
++ mutex_lock(&dev->struct_mutex);
++ goto err;
++ }
++ }
++
+ reloc_offset[i] = total;
+ total += exec[i].relocation_count;
+ }
diff --git a/freed-ora/current/f18/kernel.spec b/freed-ora/current/f18/kernel.spec
index bfb132aa9..1e99d1150 100644
--- a/freed-ora/current/f18/kernel.spec
+++ b/freed-ora/current/f18/kernel.spec
@@ -62,7 +62,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
-%global baserelease 201
+%global baserelease 203
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -801,9 +801,12 @@ Patch20001: 0002-x86-EFI-Calculate-the-EFI-framebuffer-size-instead-o.patch
# ARM
Patch21000: arm-read_current_timer.patch
-Patch21001: arm-fix-omapdrm.patch
-Patch21003: arm-alignment-faults.patch
+# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-December/137164.html
+Patch21001: arm-l2x0-only-set-set_debug-on-pl310-r3p0-and-earlier.patch
+Patch21002: arm-alignment-faults.patch
+
# OMAP
+Patch21003: arm-fix-omapdrm.patch
# ARM tegra
Patch21004: arm-tegra-nvec-kconfig.patch
@@ -835,6 +838,12 @@ Patch21233: 8139cp-re-enable-interrupts-after-tx-timeout.patch
#rhbz 886946
Patch21234: iwlegacy-fix-IBSS-cleanup.patch
+#rhbz 902523
+Patch21236: libata-replace-sata_settings-with-devslp_timing.patch
+
+# i915 hang fixes
+Patch21237: drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch
+
# END OF PATCH DEFINITIONS
%endif
@@ -1462,6 +1471,8 @@ ApplyPatch vmbugon-warnon.patch
#
#ApplyPatch arm-read_current_timer.patch
#ApplyPatch arm-fix-omapdrm.patch
+
+ApplyPatch arm-l2x0-only-set-set_debug-on-pl310-r3p0-and-earlier.patch
ApplyPatch arm-tegra-nvec-kconfig.patch
ApplyPatch arm-tegra-usb-no-reset-linux33.patch
ApplyPatch arm-tegra-sdhci-module-fix.patch
@@ -1607,6 +1618,12 @@ ApplyPatch 8139cp-re-enable-interrupts-after-tx-timeout.patch
#rhbz 886948
ApplyPatch iwlegacy-fix-IBSS-cleanup.patch
+#rhbz 902523
+ApplyPatch libata-replace-sata_settings-with-devslp_timing.patch
+
+#i915
+ApplyPatch drm-invalidate-relocation-presumed_offsets-along-slow-patch.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -2474,6 +2491,16 @@ fi
# ||----w |
# || ||
%changelog
+* Tue Jan 22 2013 Justin M. Forbes <jforbes@redhat.com> - 3.7.4-203
+- Add i915 bugfix from airlied
+
+* Tue Jan 22 2013 Peter Robinson <pbrobinson@fedoraproject.org>
+- Apply ARM errata fix
+- disable HVC_DCC and VIRTIO_CONSOLE on ARM
+
+* Tue Jan 22 2013 Josh Boyer <jwboyer@redhat.com>
+- Fix libata settings bug (rhbz 902523)
+
* Tue Jan 22 2013 Alexandre Oliva <lxoliva@fsfla.org> -libre
- GNU Linux-libre 3.7.4-gnu
diff --git a/freed-ora/current/f18/libata-replace-sata_settings-with-devslp_timing.patch b/freed-ora/current/f18/libata-replace-sata_settings-with-devslp_timing.patch
new file mode 100644
index 000000000..f620a20bd
--- /dev/null
+++ b/freed-ora/current/f18/libata-replace-sata_settings-with-devslp_timing.patch
@@ -0,0 +1,131 @@
+From 803739d25c2343da6d2f95eebdcbc08bf67097d4 Mon Sep 17 00:00:00 2001
+From: Shane Huang <shane.huang@amd.com>
+Date: Mon, 17 Dec 2012 23:18:59 +0800
+Subject: [PATCH] [libata] replace sata_settings with devslp_timing
+
+NCQ capability was used to check availability of SATA Settings page
+from Identify Device Data Log, which contains DevSlp timing variables.
+It does not work on some HDDs and leads to error messages.
+
+IDENTIFY word 78 bit 5(Hardware Feature Control) can't work either
+because it is only the sufficient condition of Identify Device data
+log, not the necessary condition.
+
+This patch replaced ata_device->sata_settings with ->devslp_timing
+to only save DevSlp timing variables(8 bytes), instead of the whole
+SATA Settings page(512 bytes).
+
+Addresses https://bugzilla.kernel.org/show_bug.cgi?id=51881
+
+Reported-by: Borislav Petkov <bp@alien8.de>
+Signed-off-by: Shane Huang <shane.huang@amd.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+---
+ drivers/ata/libahci.c | 6 +++---
+ drivers/ata/libata-core.c | 22 +++++++++++++---------
+ include/linux/ata.h | 8 +++++---
+ include/linux/libata.h | 4 ++--
+ 4 files changed, 23 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
+index 320712a..6cd7805 100644
+--- a/drivers/ata/libahci.c
++++ b/drivers/ata/libahci.c
+@@ -1951,13 +1951,13 @@ static void ahci_set_aggressive_devslp(struct ata_port *ap, bool sleep)
+ /* Use the nominal value 10 ms if the read MDAT is zero,
+ * the nominal value of DETO is 20 ms.
+ */
+- if (dev->sata_settings[ATA_LOG_DEVSLP_VALID] &
++ if (dev->devslp_timing[ATA_LOG_DEVSLP_VALID] &
+ ATA_LOG_DEVSLP_VALID_MASK) {
+- mdat = dev->sata_settings[ATA_LOG_DEVSLP_MDAT] &
++ mdat = dev->devslp_timing[ATA_LOG_DEVSLP_MDAT] &
+ ATA_LOG_DEVSLP_MDAT_MASK;
+ if (!mdat)
+ mdat = 10;
+- deto = dev->sata_settings[ATA_LOG_DEVSLP_DETO];
++ deto = dev->devslp_timing[ATA_LOG_DEVSLP_DETO];
+ if (!deto)
+ deto = 20;
+ } else {
+diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
+index 9e8b99a..46cd3f4 100644
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -2325,24 +2325,28 @@ int ata_dev_configure(struct ata_device *dev)
+ }
+ }
+
+- /* check and mark DevSlp capability */
+- if (ata_id_has_devslp(dev->id))
+- dev->flags |= ATA_DFLAG_DEVSLP;
+-
+- /* Obtain SATA Settings page from Identify Device Data Log,
+- * which contains DevSlp timing variables etc.
+- * Exclude old devices with ata_id_has_ncq()
++ /* Check and mark DevSlp capability. Get DevSlp timing variables
++ * from SATA Settings page of Identify Device Data Log.
+ */
+- if (ata_id_has_ncq(dev->id)) {
++ if (ata_id_has_devslp(dev->id)) {
++ u8 sata_setting[ATA_SECT_SIZE];
++ int i, j;
++
++ dev->flags |= ATA_DFLAG_DEVSLP;
+ err_mask = ata_read_log_page(dev,
+ ATA_LOG_SATA_ID_DEV_DATA,
+ ATA_LOG_SATA_SETTINGS,
+- dev->sata_settings,
++ sata_setting,
+ 1);
+ if (err_mask)
+ ata_dev_dbg(dev,
+ "failed to get Identify Device Data, Emask 0x%x\n",
+ err_mask);
++ else
++ for (i = 0; i < ATA_LOG_DEVSLP_SIZE; i++) {
++ j = ATA_LOG_DEVSLP_OFFSET + i;
++ dev->devslp_timing[i] = sata_setting[j];
++ }
+ }
+
+ dev->cdb_len = 16;
+diff --git a/include/linux/ata.h b/include/linux/ata.h
+index 408da95..8f7a3d6 100644
+--- a/include/linux/ata.h
++++ b/include/linux/ata.h
+@@ -297,10 +297,12 @@ enum {
+ ATA_LOG_SATA_NCQ = 0x10,
+ ATA_LOG_SATA_ID_DEV_DATA = 0x30,
+ ATA_LOG_SATA_SETTINGS = 0x08,
+- ATA_LOG_DEVSLP_MDAT = 0x30,
++ ATA_LOG_DEVSLP_OFFSET = 0x30,
++ ATA_LOG_DEVSLP_SIZE = 0x08,
++ ATA_LOG_DEVSLP_MDAT = 0x00,
+ ATA_LOG_DEVSLP_MDAT_MASK = 0x1F,
+- ATA_LOG_DEVSLP_DETO = 0x31,
+- ATA_LOG_DEVSLP_VALID = 0x37,
++ ATA_LOG_DEVSLP_DETO = 0x01,
++ ATA_LOG_DEVSLP_VALID = 0x07,
+ ATA_LOG_DEVSLP_VALID_MASK = 0x80,
+
+ /* READ/WRITE LONG (obsolete) */
+diff --git a/include/linux/libata.h b/include/linux/libata.h
+index 83ba0ab..649e5f8 100644
+--- a/include/linux/libata.h
++++ b/include/linux/libata.h
+@@ -652,8 +652,8 @@ struct ata_device {
+ u32 gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */
+ };
+
+- /* Identify Device Data Log (30h), SATA Settings (page 08h) */
+- u8 sata_settings[ATA_SECT_SIZE];
++ /* DEVSLP Timing Variables from Identify Device Data Log */
++ u8 devslp_timing[ATA_LOG_DEVSLP_SIZE];
+
+ /* error history */
+ int spdn_cnt;
+--
+1.7.7.6
+
OpenPOWER on IntegriCloud