All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race
@ 2012-07-29 17:08 Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 02/12] beaglebone-tester: re-enable pmic test Koen Kooi
                   ` (10 more replies)
  0 siblings, 11 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 recipes-ti/beagleboard/beaglebone-tester.bb |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/recipes-ti/beagleboard/beaglebone-tester.bb b/recipes-ti/beagleboard/beaglebone-tester.bb
index b5e3081..9995556 100644
--- a/recipes-ti/beagleboard/beaglebone-tester.bb
+++ b/recipes-ti/beagleboard/beaglebone-tester.bb
@@ -7,11 +7,11 @@ LIC_FILES_CHKSUM="file://gpl.txt;md5=5b122a36d0f6dc55279a0ebc69f3c60b"
 # only scripts and data
 inherit allarch
 
-PR = "r15"
+PR = "r16"
 
 SRC_URI = "git://github.com/koenkooi/validation-scripts.git;protocol=git \
           "
-SRCREV = "3b19f1caf8c616e3f4a25abacca28b2239d3ec82"
+SRCREV = "4f6335aedf520917a0bc0c83e9c1ac1135b8a2af"
 
 S = "${WORKDIR}/git"
 
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 02/12] beaglebone-tester: re-enable pmic test
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 03/12] linux-ti33x-psp 3.2: update to 3.2.21, add libertas fixes Koen Kooi
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 recipes-ti/beagleboard/beaglebone-tester.bb |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/recipes-ti/beagleboard/beaglebone-tester.bb b/recipes-ti/beagleboard/beaglebone-tester.bb
index 9995556..82c5a83 100644
--- a/recipes-ti/beagleboard/beaglebone-tester.bb
+++ b/recipes-ti/beagleboard/beaglebone-tester.bb
@@ -7,11 +7,11 @@ LIC_FILES_CHKSUM="file://gpl.txt;md5=5b122a36d0f6dc55279a0ebc69f3c60b"
 # only scripts and data
 inherit allarch
 
-PR = "r16"
+PR = "r17"
 
 SRC_URI = "git://github.com/koenkooi/validation-scripts.git;protocol=git \
           "
-SRCREV = "4f6335aedf520917a0bc0c83e9c1ac1135b8a2af"
+SRCREV = "c748d157b9afbb71e6eadf1dca7a787a456c0149"
 
 S = "${WORKDIR}/git"
 
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 03/12] linux-ti33x-psp 3.2: update to 3.2.21, add libertas fixes
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 02/12] beaglebone-tester: re-enable pmic test Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 04/12] linux-ti33x-psp 3.2: fix audio/spidev clash on beaglebone Koen Kooi
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 conf/machine/include/ti33x.inc                     |    2 +-
 ...ifier-Flush-TLBs-before-releasing-mmu_loc.patch |   79 +
 ...all-vcpus-are-consistent-with-in-kernel-i.patch |  110 ++
 ...-lock-slots_lock-around-device-assignment.patch |   83 +
 ...nVMX-Fix-erroneous-exception-bitmap-check.patch |   36 +
 ...M-VMX-vmx_set_cr0-expects-kvm-srcu-locked.patch |   35 +
 ...-store-status-after-handling-STOP_ON_STOP.patch |   65 +
 ...90-Sanitize-fpc-registers-for-KVM_SET_FPU.patch |   36 +
 ...008-bio-don-t-overflow-in-bio_get_nr_vecs.patch |   61 +
 ...allocation-failure-due-to-bio_get_nr_vecs.patch |   49 +
 ...uffer-overflow-when-printing-partition-UU.patch |   98 ++
 .../3.2.19/0011-fix-PA1.1-oops-on-boot.patch       |   43 +
 ...x-crash-in-flush_icache_page_asm-on-PA1.1.patch |   91 ++
 ...13-fix-panic-on-prefetch-NULL-on-PA7300LC.patch |   39 +
 ...h-tile-Kconfig-remove-pointless-M386-test.patch |   31 +
 ...15-tilegx-enable-SYSCALL_WRAPPERS-support.patch |   39 +
 .../0016-mtd-sm_ftl-fix-typo-in-major-number.patch |   33 +
 ...017-hpsa-Fix-problem-with-MSA2xxx-devices.patch |   77 +
 ...sel_make_bools-errors-don-t-leave-inconsi.patch |   34 +
 ...rn-if-db.txt-is-empty-with-CONFIG_CFG8021.patch |   86 +
 ...-for-panic-happening-because-of-improper-.patch |   60 +
 ...isdn-gigaset-ratelimit-CAPI-message-dumps.patch |   87 ++
 ...n-gigaset-fix-CAPI-disconnect-B3-handling.patch |   46 +
 ...t-improve-error-handling-querying-firmwar.patch |   47 +
 ...e-compat-keyctl-syscall-wrapper-on-Sparc6.patch |   60 +
 ...-mismatch-between-locked-and-pinned-pages.patch |   38 +
 ...ore-Release-regulator-regulator-supplies-.patch |   34 +
 ...u-Fix-off-by-one-in-dmar_get_fault_reason.patch |   41 +
 ...Always-wake-up-waiters-in-c4iw_peer_abort.patch |   38 +
 ...b4-Drop-peer_abort-when-no-endpoint-found.patch |   37 +
 .../0030-s390-pfault-fix-task-state-race.patch     |   82 +
 ...m-parameter-validation-on-single-controll.patch |   46 +
 ...g-allocations-called-very-early-during-bo.patch |   69 +
 ...O-use-the-proper-rw_verify_area-area-help.patch |  109 ++
 ...ocs-update-HOWTO-for-2.6.x-3.x-versioning.patch |  100 ++
 ...ging-comedi-comedi_fops.c-add-missing-vfr.patch |   34 +
 ...-move-usb_translate_errors-to-linux-usb.h.patch |   70 +
 .../0037-USB-cdc-wdm-sanitize-error-returns.patch  |   33 +
 .../3.2.19/0038-USB-cdc-wdm-fix-memory-leak.patch  |   35 +
 .../0039-8250_pci-fix-pch-uart-matching.patch      |  102 ++
 ...d-USB_QUIRK_RESET_RESUME-for-M-Audio-88es.patch |   36 +
 ...usbtest-two-super-speed-fixes-for-usbtest.patch |   60 +
 .../0042-8250.c-less-than-2400-baud-fix.patch      |   51 +
 ...-usb-xhci-Handle-COMP_TX_ERR-for-isoc-tds.patch |   49 +
 ...oid-dead-ports-when-CONFIG_USB_XHCI_HCD-n.patch |   63 +
 ...nx-Point-to-list-of-Intel-switchable-host.patch |   81 +
 ...fsl_udc_core-dTD-s-next-dtd-pointer-need-.patch |   44 +
 ...7-Add-missing-call-to-uart_update_timeout.patch |   36 +
 ...o-add-support-for-Physik-Instrumente-E-86.patch |   58 +
 ...t-fix-length-argument-of-out-function-cal.patch |   36 +
 .../0050-HID-wiimote-Fix-IR-data-parser.patch      |   60 +
 ...-unusual_devs-entry-for-Yarvik-PMP400-MP4.patch |   41 +
 ...91-add-a-reset-function-to-fix-race-condi.patch |   63 +
 ...h-read-all-32-bits-of-report-type-bitfiel.patch |   70 +
 ...ti_usb_3410_5052-Add-support-for-the-FRI2.patch |   77 +
 ...-poll-must-return-POLLHUP-if-device-is-go.patch |   38 +
 ...USB-cdc-wdm-add-debug-messages-on-cleanup.patch |   54 +
 ...-cannot-use-dev_printk-when-device-is-gon.patch |   66 +
 ...y-Allow-uart_register-unregister-register.patch |   33 +
 ...kip-nr_running-sanity-check-in-worker_ent.patch |   51 +
 ...-new-short-TX-quirk-for-Fresco-Logic-host.patch |  129 ++
 ...ore-enable-USB2-LPM-if-port-suspend-fails.patch |   43 +
 ...date-event-scheduling-constraints-for-AMD.patch |   62 +
 ...fix-resource-leak-in-xhci-power-loss-path.patch |   74 +
 ...set-reserved-command-ring-TRBs-on-cleanup.patch |   39 +
 .../3.2.19/0065-USB-Remove-races-in-devio.c.patch  |  132 ++
 ...FP_NOIO-to-allocate-bio-for-flush-request.patch |   37 +
 ...7-um-Implement-a-custom-pte_same-function.patch |   41 +
 .../3.2.19/0068-um-Fix-__swp_type.patch            |   39 +
 ...n-t-do-discard-if-no-discard-option-added.patch |   41 +
 ...-Input-wacom-relax-Bamboo-stylus-ID-check.patch |   42 +
 ...i-Detect-Marvell-88SE9172-SATA-controller.patch |   35 +
 ...drop-unused-parameter-from-flush_cache_us.patch |   59 +
 ...Do-not-call-flush_cache_user_range-with-m.patch |   45 +
 ...ptop-Enable-keyboard-backlight-by-default.patch |   48 +
 ...try-mounting-device-as-nfs-root-unless-ty.patch |   54 +
 ...mcg-free-spare-array-to-avoid-memory-leak.patch |   40 +
 ...RT-signal-mask-corruption-via-sigprocmask.patch |  107 ++
 ...error-handling-on-inode-bitmap-corruption.patch |   43 +
 ...error-handling-on-inode-bitmap-corruption.patch |   42 +
 ...dd-Sony-Vaio-VPCCW29FX-to-nonvs-blacklist.patch |   42 +
 ...QF_SHARED-back-in-for-the-non-MSI-X-inter.patch |   42 +
 ...e-up-s_wait_unfrozen-when-freeze_fs-fails.patch |   42 +
 ...cifs-fix-revalidation-test-in-cifs_llseek.patch |   35 +
 .../3.2.19/0084-dl2k-Clean-up-rio_ioctl.patch      |  123 ++
 ...C-fix-NULL-pointer-dereference-in-DSS2-VE.patch |   41 +
 ...t-change-timeout-value-50msec-to-1000msec.patch |   36 +
 ...N7-Use-HW-scheduler-for-fixed-function-sh.patch |  100 ++
 ...void-spurious-calls-to-interrupt-handlers.patch |   99 ++
 ...autodetection-support-for-USB-ID-2040-c0a.patch |   31 +
 .../0090-uvcvideo-Fix-ENUMINPUT-handling.patch     |   34 +
 ...oid-a-double-read-of-PCH_IIR-during-inter.patch |   63 +
 ...ix-error-due-to-MMIO-access-with-SSB-unpo.patch |   35 +
 ...x-Prevent-NULL-pointer-deref-in-demux-han.patch |   45 +
 ...n-t-clobber-the-pipe-param-in-sanitize_mo.patch |   52 +
 ...-spi-reference-correct-pdata-in-fsl_spi_c.patch |   42 +
 ...ot-map-the-same-GSI-twice-in-PVHVM-guests.patch |   90 ++
 ...-nouveau_set_bo_placement-takes-TTM-flags.patch |   32 +
 ...E-Fix-vm86-handling-for-32bit-mce-handler.patch |   43 +
 ...-check-for-processor-context-when-machine.patch |   53 +
 ...e-fix-bug-where-fls-0-was-not-returning-0.patch |   50 +
 ...-Add-device-info-into-list-before-doing-c.patch |   63 +
 ...l-terminate-filename-passed-to-ethtool_op.patch |   55 +
 ...-mark-buffers-beyond-end-of-disk-as-mappe.patch |  157 ++
 ...-rtc-pl031.c-configure-correct-wday-for-2.patch |   63 +
 ...allocate-USB-read-buffers-and-eliminate-k.patch |  136 ++
 ...6-NFS4-fix-compile-warnings-in-nfs4proc.c.patch |   39 +
 ...d-reading-past-buffer-when-calling-GETACL.patch |  123 ++
 ...void-beyond-bounds-copy-while-caching-ACL.patch |   88 ++
 ...otify-transfer-complete-after-clearing-st.patch |   73 +
 ...-i2c-davinci-Free-requested-IRQ-in-remove.patch |   33 +
 ...e-16-bit-real-mode-code-support-for-reloc.patch | 1651 ++++++++++++++++++++
 ...Workaround-for-binutils-2.22.52.0.1-secti.patch |   43 +
 ...When-printing-an-error-say-relative-or-ab.patch |   69 +
 .../3.2.19/0114-x86-relocs-Build-clean-fix.patch   |   33 +
 ...cs-Whitelist-more-symbols-for-ld-bug-work.patch |   73 +
 ...Add-jiffies-and-jiffies_64-to-the-relativ.patch |   42 +
 .../3.2.19/0117-Linux-3.2.19.patch                 |   24 +
 ...mtdoops-fix-the-oops_page_used-array-size.patch |    6 +-
 ...mtdoops-skip-reading-initially-bad-blocks.patch |    6 +-
 ...devs-don-t-increase-open-count-on-error-p.patch |    6 +-
 ...tresstest-bail-out-if-device-has-not-enou.patch |    6 +-
 ...-interface.c-fix-alarm-rollover-when-day-.patch |    6 +-
 ...dd-missing-ext4_resize_end-on-error-paths.patch |    6 +-
 ...undefined-behavior-in-ext4_fill_flex_info.patch |    6 +-
 ...sb-us122l-Delete-calls-to-preempt_disable.patch |    6 +-
 ...-Fix-master-control-for-Cirrus-Logic-421X.patch |    6 +-
 ...SA-HDA-Fix-automute-for-Cirrus-Logic-421x.patch |    6 +-
 ...e1724-Check-for-ac97-to-avoid-kernel-oops.patch |    6 +-
 ...dio-Avoid-flood-of-frame-active-debug-mes.patch |    6 +-
 ...e-auto-parser-for-HP-laptops-with-cx20459.patch |    6 +-
 ...turn-the-error-from-get_wcaps_type-for-in.patch |    6 +-
 ...x-the-detection-of-Loopback-Mixing-contro.patch |    6 +-
 ...x-the-lost-power-setup-of-seconary-pins-a.patch |    6 +-
 ...kms-workaround-invalid-AVI-infoframe-chec.patch |    6 +-
 ...n-kms-disable-writeback-on-pre-R300-asics.patch |    6 +-
 ...disabling-PCI-bus-mastering-on-big-endian.patch |    6 +-
 ...FS-errors-are-communicated-on-iodata-pnfs.patch |    6 +-
 ...1-pnfs-obj-Must-return-layout-on-IO-error.patch |    6 +-
 .../3.2.2/0022-NFS-Retry-mounting-NFSROOT.patch    |    6 +-
 ...4.1-fix-backchannel-slotid-off-by-one-bug.patch |    6 +-
 ...fix-recent-breakage-to-NFS-error-handling.patch |    6 +-
 ...FSv4-include-bitmap-in-nfsv4-get-acl-data.patch |    6 +-
 ...ression-in-handling-of-context-option-in-.patch |    6 +-
 ...ximum-global-item-tag-report-size-to-96-b.patch |    6 +-
 .../0028-HID-wiimote-Select-INPUT_FF_MEMLESS.patch |    6 +-
 ...ix-missing-scrub-when-there-is-a-bit-flip.patch |    6 +-
 ...0030-UBI-fix-use-after-free-on-error-path.patch |    6 +-
 .../0031-PCI-Fix-PCI_EXP_TYPE_RC_EC-value.patch    |    6 +-
 ...able-msi-interrupts-when-we-initialize-a-.patch |    6 +-
 ...ore-CPU-non-addressable-_CRS-reserved-mem.patch |    6 +-
 ...x86-PCI-amd-factor-out-MMCONFIG-discovery.patch |    6 +-
 ...build-amd_bus.o-only-when-CONFIG_AMD_NB-y.patch |    6 +-
 ...s-Release-spinlock-for-the-raid-device-li.patch |    6 +-
 ...s-Fix-for-memory-allocation-error-for-lar.patch |    6 +-
 ...Reject-replies-with-payload-XENSTORE_PAYL.patch |    6 +-
 ...rform-bad-block-tests-for-WriteMostly-dev.patch |    6 +-
 ...040-ima-free-duplicate-measurement-memory.patch |    6 +-
 .../0041-ima-fix-invalid-memory-reference.patch    |    6 +-
 ...ub-fix-a-possible-memleak-in-__slab_alloc.patch |    6 +-
 ...ound-Dell-1536-1546-BIOS-MMCONFIG-bug-tha.patch |    6 +-
 ...tting-custom-MAC-address-on-Asix-88178-de.patch |    6 +-
 ...tting-custom-MAC-address-on-Asix-88772-de.patch |    6 +-
 ...46-include-linux-crash_dump.h-needs-elf.h.patch |    6 +-
 ...ix-BUG-caused-by-failure-to-check-skb-all.patch |    6 +-
 ...x-rx-key-NULL-pointer-dereference-in-prom.patch |    6 +-
 ...egression-in-channelwidth-switch-at-the-s.patch |    6 +-
 ...em_cgroup_replace_page_cache-to-fix-LRU-i.patch |    6 +-
 .../0051-x86-Fix-mmap-random-address-range.patch   |    6 +-
 .../0052-UBI-fix-nameless-volumes-handling.patch   |    6 +-
 .../3.2.2/0053-UBI-fix-debugging-messages.patch    |    6 +-
 .../3.2.2/0054-UBI-make-vid_hdr-non-static.patch   |    6 +-
 .../3.2.2/0055-UBIFS-fix-debugging-messages.patch  |    6 +-
 ...UBIFS-make-debugging-messages-light-again.patch |    6 +-
 ...ror-value-returned-by-several-bus-drivers.patch |    6 +-
 ...8-mmc-core-Fix-voltage-select-in-DDR-mode.patch |    6 +-
 ...ix-tuning-timer-incorrect-setting-when-su.patch |    6 +-
 .../0060-mmc-sd-Fix-SDR12-timing-regression.patch  |    6 +-
 ...2-ioctl-integer-overflow-in-video_usercop.patch |    6 +-
 ...s-in-a-batch-should-not-be-accounted-as-a.patch |    6 +-
 ...race-Fix-unregister-ftrace_ops-accounting.patch |    6 +-
 ...eamline-config.pl-Simplify-backslash-line.patch |    6 +-
 ...eamline-config.pl-Fix-parsing-Makefile-wi.patch |    8 +-
 ...double-free-on-shutdown-of-nfsd-after-cha.patch |    6 +-
 ...svcrpc-destroy-server-sockets-all-at-once.patch |    6 +-
 ...-avoid-memory-corruption-on-pool-shutdown.patch |    6 +-
 .../3.2.2/0069-nfsd4-fix-lockowner-matching.patch  |    6 +-
 ...d-Fix-oops-when-parsing-a-0-length-export.patch |    6 +-
 ...notify-don-t-BUG-in-fsnotify_destroy_mark.patch |    6 +-
 ...Update-Boot-messages-for-SGI-UV2-platform.patch |    6 +-
 ...t-Fix-handling-of-elf64-big-endian-object.patch |    6 +-
 ...ix-integer-overflow-in-uvc_ioctl_ctrl_map.patch |    6 +-
 ...cache-use-a-dispose-list-in-select_parent.patch |    6 +-
 .../0076-fix-shrink_dcache_parent-livelock.patch   |    6 +-
 ...fsblock-acquire-im_lock-in-_preload_range.patch |    6 +-
 ...ock-don-t-spinlock-when-freeing-block_dev.patch |    6 +-
 .../0079-pnfsblock-limit-bio-page-count.patch      |    6 +-
 ...0211-revert-on-channel-work-optimisations.patch |    6 +-
 ...-HID-hid-multitouch-add-another-eGalax-id.patch |    6 +-
 ...touch-cleanup-with-eGalax-PID-definitions.patch |    6 +-
 ...itouch-Add-egalax-ID-for-Acer-Iconia-W500.patch |    6 +-
 ...ouch-add-support-for-the-MSI-Windpad-110W.patch |    6 +-
 ...titouch-add-support-for-new-Hanvon-panels.patch |    6 +-
 ...uch-add-support-of-Atmel-multitouch-panel.patch |    6 +-
 ...0087-HID-multitouch-add-support-for-3M-32.patch |    6 +-
 ...ltitouch-add-support-9-new-Xiroku-devices.patch |    6 +-
 ...-fix-cputime-overflow-in-uptime_proc_show.patch |    6 +-
 ...0090-block-add-and-use-scsi_blk_cmd_ioctl.patch |    6 +-
 ...SCSI-passthrough-ioctls-on-partition-devi.patch |    6 +-
 ...orward-ioctls-from-logical-volumes-to-the.patch |    6 +-
 ...oc-clean-up-and-fix-proc-pid-mem-handling.patch |    6 +-
 ...Use-LPIB-position-fix-for-Macbook-Pro-7-1.patch |    6 +-
 ...oso-Xonar-DS-fix-polarity-of-front-output.patch |    6 +-
 ...x-internal-microphone-on-Dell-Studio-16-X.patch |    6 +-
 ...97-TOMOYO-Accept-000-as-a-valid-character.patch |    6 +-
 ...8-intel-idle-Make-idle-driver-more-robust.patch |    6 +-
 .../3.2.2/0099-intel_idle-fix-API-misuse.patch     |    6 +-
 .../0100-ACPI-Store-SRAT-table-revision.patch      |    6 +-
 ...e-SRAT-table-rev-to-use-8bit-or-32bit-PXM.patch |    6 +-
 ...se-SRAT-table-rev-to-use-8bit-or-16-32bit.patch |    6 +-
 ...back-the-call-to-acpi_os_validate_address.patch |    6 +-
 ...essor-fix-acpi_get_cpuid-for-UP-processor.patch |    6 +-
 ...ix-NULL-pointer-dereference-in-slave_dest.patch |    6 +-
 ...t-Set-response-format-in-INQUIRY-response.patch |    6 +-
 ...additional-sense-length-field-in-sense-da.patch |    6 +-
 ...idate-the-mapped-core-over-suspend-resume.patch |    6 +-
 ...-cx23885-dvb-check-if-dvb_attach-succeded.patch |    6 +-
 ...ix-don-t-duplicate-xc4000-entry-for-radio.patch |    6 +-
 ...umberspace-conflict-between-xc4000-and-pt.patch |    6 +-
 ...-module-Fix-disabling-tracepoints-with-ta.patch |    6 +-
 ...-new-UV2-hardware-by-using-native-UV2-bro.patch |    2 +-
 ...ix-BAU-destination-timeout-initialization.patch |    2 +-
 .../3.2.2/0115-x86-UV2-Work-around-BAU-bug.patch   |    2 +-
 ...fix-interpretation-of-the-rx-KeyMiss-flag.patch |    2 +-
 ...800pci-fix-spurious-interrupts-generation.patch |    2 +-
 ...x-endian-conversion-issue-in-discard-code.patch |    2 +-
 ...20t-modified-the-setting-of-transfer-rate.patch |    2 +-
 ...e-fix-off-by-one-index-into-syscall-table.patch |    2 +-
 ...default-wsize-when-unix-extensions-are-no.patch |    2 +-
 ...2-kprobes-initialize-before-using-a-hlist.patch |    2 +-
 ...oc-clear_refs-do-not-clear-reserved-pages.patch |    2 +-
 ...-ptr-dereference-in-__count_immobile_page.patch |    2 +-
 .../3.2.2/0125-iwlagn-check-for-SMPS-mode.patch    |    2 +-
 ...945-fix-hw-passive-scan-on-radar-channels.patch |    2 +-
 ...SHM_UNLOCK-fix-long-unpreemptible-section.patch |    2 +-
 ...fix-Unevictable-pages-stranded-after-swap.patch |    2 +-
 .../3.2.2/0129-Linux-3.2.2.patch                   |    2 +-
 ...-amd-Add-workaround-for-event-log-erratum.patch |   68 +
 ...XX-Add-missing-include-for-bcm63xx_gpio.h.patch |   52 +
 ...e-backup-intent-search-flags-during-searc.patch |  152 ++
 ...loss-of-task-tk_status-after-rpc_delay-ca.patch |   63 +
 ...5-exofs-Fix-CRASH-on-very-early-IO-errors.patch |   49 +
 ...ops-while-traversing-open-file-list-try-4.patch |  141 ++
 ...ltipath-starvation-when-scsi-host-is-busy.patch |   61 +
 ...fix-compilation-by-adding-gpiolib-support.patch |  210 +++
 ...operly-handle-interlaced-bit-for-sdvo-dtd.patch |   78 +
 ...able-vdd-when-switching-off-the-eDP-panel.patch |   97 ++
 ...dd-Clientron-E830-to-the-ignore-LVDS-list.patch |   37 +
 ...nore-LVDS-on-hp-t5745-and-hp-st5747-thin-.patch |   54 +
 ...5-no-lvds-quirk-for-HP-t5740e-Thin-Client.patch |   40 +
 ...wait-for-a-vblank-to-pass-after-tv-detect.patch |   66 +
 ...m-i915-Update-GEN6_RP_CONTROL-definitions.patch |   55 +
 ...ways-use-RPNSWREQ-for-turbo-change-reques.patch |   39 +
 .../3.2.20/0017-solos-pci-Fix-DMA-support.patch    |   51 +
 ...aze-Do-not-select-GENERIC_GPIO-by-default.patch |   42 +
 ...ilure-on-32-bit-systems-caused-by-branch-.patch |   49 +
 ...ix-TLB-fault-path-on-PA2.0-narrow-systems.patch |  142 ++
 ...i-update-BT-traffic-load-states-correctly.patch |   43 +
 ...fi-do-not-use-shadow-registers-by-default.patch |   84 +
 .../0023-wl1251-fix-oops-on-early-interrupt.patch  |   69 +
 ...FS4ERR_SHARE_DENIED-into-an-EACCES-error-.patch |   37 +
 .../3.2.20/0025-drm-radeon-fix-XFX-quirk.patch     |   40 +
 ...-use-after-free-bug-when-ath_tx_setup_buf.patch |   92 ++
 ...x-ADDBA-declined-after-suspend-with-wowla.patch |   53 +
 ...-overflow-in-vma-length-when-copying-mmap.patch |   81 +
 ...-all-swapped-back-pages-in-used-once-logi.patch |   65 +
 ...0-hugetlb-fix-resv_map-leak-in-error-path.patch |  101 ++
 ...lloc.c-change-void-into-explict-vm_struct.patch |   63 +
 ...fix-faulty-initialization-in-vmalloc_init.patch |   51 +
 .../3.2.20/0033-fix-scsi_wait_scan.patch           |   44 +
 .../0034-mm-fix-vma_resv_map-NULL-pointer.patch    |   70 +
 ...en-Avoid-NULL-pointer-paravirt-references.patch |   38 +
 ...lub-fix-a-memory-leak-in-get_partial_node.patch |   86 +
 ...-force-ro-mount-if-ext4_setup_super-fails.patch |   45 +
 ...llow-hard-linked-directory-in-ext4_lookup.patch |   38 +
 .../0039-mtd-nand-fix-scan_read_raw_oob.patch      |   33 +
 ...crement-iversion-when-a-file-is-truncated.patch |   48 +
 ...tree-might-be-called-on-subtree-that-had-.patch |   37 +
 ...add-missing-save_error_info-to-ext4_error.patch |   36 +
 ...-ALSA-usb-audio-fix-rate_list-memory-leak.patch |   35 +
 ...dd-ext4_mb_unload_buddy-in-the-error-path.patch |   32 +
 ...-mb_groups-before-tearing-down-the-buddy_.patch |   53 +
 ...eon-fix-bank-information-in-tiling-config.patch |   84 +
 ...properly-program-gart-on-rv740-juniper-cy.patch |   79 +
 ...eon-fix-HD6790-HD6570-backend-programming.patch |   44 +
 .../0049-drm-ttm-Fix-spinlock-imbalance.patch      |   33 +
 ...-Fix-nasty-write-past-alloced-memory-area.patch |   31 +
 ...0051-mtd-of_parts-fix-breakage-in-Kconfig.patch |   37 +
 .../0052-fec_mpc52xx-fix-timestamp-filtering.patch |   34 +
 ...tusb-Add-vendor-specific-ID-0a5c-21f3-for.patch |   44 +
 ...tusb-add-support-for-BCM20702A0-0a5c-21e6.patch |   48 +
 ...uetooth-btusb-Add-USB-device-ID-0a5c-21e8.patch |   47 +
 ...oth-btusb-typo-in-Broadcom-SoftSailing-id.patch |   66 +
 ...tusb-Add-vendor-specific-ID-0489-e042-for.patch |   43 +
 ...uetooth-Add-support-for-Atheros-13d3-3362.patch |   64 +
 ...luetooth-Add-support-for-AR3012-0cf3-e004.patch |   65 +
 ...-Add-Foxconn-Hon-Hai-IDs-for-btusb-module.patch |   71 +
 ...dd-support-for-Foxconn-Hon-Hai-AR5BBU22-0.patch |   94 ++
 .../0062-drm-i915-Disable-FBC-on-SandyBridge.patch |   34 +
 ...063-ipv4-Do-not-use-dead-fib_info-entries.patch |   36 +
 ...e-rcu-race-between-free_fib_info-and-ip_r.patch |   92 ++
 ...rtable-s-dst-to-NULL-to-avoid-kernel-Oops.patch |  110 ++
 .../0066-ipv6-fix-incorrect-ipsec-fragment.patch   |  181 +++
 ...ps-in-L2TP-IP-sockets-for-connect-AF_UNSP.patch |  113 ++
 .../3.2.20/0068-r8169-missing-barriers.patch       |   47 +
 .../0069-r8169-fix-early-queue-wake-up.patch       |   58 +
 ...8169-fix-unsigned-int-wraparound-with-TSO.patch |   82 +
 ...maintain-namespace-isolation-between-vlan.patch |  138 ++
 ...072-sctp-check-cached-dst-before-using-it.patch |   88 ++
 ...id-unnecessary-reallocations-in-__skb_cow.patch |   42 +
 ...et-hdr-len-into-account-for-esp-payload-s.patch |  100 ++
 ...y-only-refresh-the-sysfs-files-when-perti.patch |   51 +
 ...-Use-O_DSYNC-by-default-for-FILEIO-backen.patch |  188 +++
 ...mmu-amd-Cache-pdev-pointer-to-root-bridge.patch |   84 +
 ...-drm-radeon-kms-add-new-Palm-Sumo-PCI-ids.patch |   38 +
 .../0079-drm-radeon-kms-add-new-BTC-PCI-ids.patch  |   37 +
 ...ree-fix-tree-corruption-in-btree_get_prev.patch |   56 +
 .../0081-kbuild-install-kernel-page-flags.h.patch  |   62 +
 ...low-full-size-8021Q-frames-to-be-received.patch |   49 +
 ...-t-trash-state-flags-in-EXT4_IOC_SETFLAGS.patch |   54 +
 ...t4-don-t-set-i_flags-in-EXT4_IOC_SETFLAGS.patch |   34 +
 ...e-free-blocks-calculation-for-ext3-file-s.patch |   76 +
 .../3.2.20/0086-Linux-3.2.20.patch                 |   24 +
 ...rk-the-ringbuffers-as-being-in-the-GTT-do.patch |   44 +
 ...m-i915-hold-forcewake-around-ring-hw-init.patch |  158 ++
 ...pin-the-flip-target-if-we-fail-to-queue-t.patch |  166 ++
 ...004-drm-i915-fix-up-ivb-plane-3-pageflips.patch |   93 ++
 ...char-agp-add-another-Ironlake-host-bridge.patch |   46 +
 .../0006-x86-uv-Fix-UV2-BAU-legacy-mode.patch      |   53 +
 ...ix-kernel-panic-during-kernel-module-load.patch |   70 +
 ...-determine-a-value-for-display_info.bpc-i.patch |   81 +
 ...-default-to-8bpc-for-non-LVDS-panels-if-E.patch |   42 +
 ...-disp-fix-dithering-not-being-enabled-on-.patch |   38 +
 ...11-fuse-fix-stat-call-on-32-bit-platforms.patch |  103 ++
 ...-Make-APIC-LVT-thresholding-interrupt-opt.patch |  146 ++
 ...enable-CPU-topology-extensions-in-case-BI.patch |   60 +
 ...n-fam15h_power-Increase-output-resolution.patch |   56 +
 ...Fix-the-relax_domain_level-boot-parameter.patch |   65 +
 ...don-t-mess-up-the-SCD-when-removing-a-key.patch |   47 +
 ...-rng-fix-race-condition-leading-to-repeat.patch |   85 +
 ...i-intel-fix-unaligned-cbc-decrypt-for-x86.patch |   46 +
 ...setup-filter-APERFMPERF-cpuid-feature-out.patch |   58 +
 ....1-Fix-a-request-leak-on-the-back-channel.patch |   33 +
 ...ix-BUG-echo_skb-is-occupied-during-transm.patch |   70 +
 ...ix-an-interrupt-thrash-issue-with-c_can-d.patch |   73 +
 ...an-c_can-fix-race-condition-in-c_can_open.patch |   47 +
 .../0024-ARM-i.MX53-Fix-PLL4-base-address.patch    |   33 +
 ...dget-fix-crash-caused-by-dangling-pointer.patch |   50 +
 ...ean-up-remain-on-channel-on-interface-sto.patch |   80 +
 ...0027-rt2x00-use-atomic-variable-for-seqno.patch |  174 +++
 ...iwlwifi-disable-WoWLAN-if-CONFIG_PM_SLEEP.patch |   44 +
 ...-Ensure-all-AIFnCLK-events-are-run-from-t.patch |   66 +
 ...-Apply-volume-updates-with-clocks-enabled.patch |  170 ++
 ...egister-LEDs-if-mac80211-registration-fai.patch |   35 +
 ...cfg80211-fix-interface-combinations-check.patch |   81 +
 ...-unsafe-using-smp_processor_id-in-preempt.patch |   36 +
 ...et-sierra_net-device-IDs-for-Aircard-320U.patch |   70 +
 ...6-exit-coherency-when-shutting-down-a-cpu.patch |   98 ++
 ...x21ads-Fix-overlapping-static-i-o-mapping.patch |   36 +
 ...nnecessary-delegation-returns-in-nfs4_do_.patch |   39 +
 ...-correct-supported-firmware-for-6035-and-.patch |   88 ++
 ...able-the-buggy-chain-extension-feature-in.patch |   52 +
 ...40-ALSA-hda-Add-codec-no_jack_detect-flag.patch |   47 +
 ...dd-support-for-Uniwill-ECS-M31EI-notebook.patch |   32 +
 ...ppress-auto-mute-feature-on-some-machines.patch |   93 ++
 ...d-another-jack-detection-suppression-for-.patch |   52 +
 ...A-HDA-Pin-fixup-for-Zotac-Z68-motherboard.patch |   56 +
 ...dm-Add-device-id-for-Huawei-3G-LTE-modems.patch |   68 +
 ...B-qcserial-Add-Sierra-Wireless-device-IDs.patch |   41 +
 ...o-Add-support-for-RT-Systems-USB-RTS01-se.patch |   48 +
 ...SB-serial-cp210x-add-Optris-MS-Pro-usb-id.patch |   29 +
 ...sierra-Add-support-for-Sierra-Wireless-Ai.patch |   35 +
 ...option-Updated-Huawei-K4605-has-better-id.patch |   36 +
 ...SB-mct_u232-Fix-incorrect-TIOCMSET-return.patch |   48 +
 .../0052-USB-option-fix-port-data-abuse.patch      |   81 +
 .../3.2.21/0053-USB-option-fix-memory-leak.patch   |   58 +
 .../0054-USB-option-add-more-YUGA-device-ids.patch |   94 ++
 ...rn-error-to-initiator-if-SET-TARGET-PORT-.patch |   55 +
 ...D3_DURING_SLEEP-flag-and-revert-151b61284.patch |  179 +++
 ...Enforce-USB-driver-and-USB-serial-driver-.patch |  162 ++
 ...x-invalid-loop-check-in-xhci_free_tt_info.patch |   89 ++
 ...-Don-t-free-endpoints-in-xhci_mem_cleanup.patch |   94 ++
 ...se-the-timeout-for-controller-save-restor.patch |   66 +
 .../0061-usb-PS3-EHCI-QH-read-work-around.patch    |   36 +
 .../3.2.21/0062-USB-fix-PS3-EHCI-systems.patch     |   37 +
 ...c-acm-fix-devices-not-unthrottled-on-open.patch |   43 +
 ...B-fix-gathering-of-interface-associations.patch |   88 ++
 ...fix-shmem-swapping-when-more-than-8-areas.patch |  102 ++
 ...add-some-additional-6xx-7xx-EG-register-i.patch |  121 ++
 .../3.2.21/0067-Linux-3.2.21.patch                 |   24 +
 .../0071-beaglebone-fix-LCD3-led-key-overlap.patch |   54 +
 ...vert-drivers-net-to-use-module_usb_driver.patch |   80 +
 ...t-fix-assignment-of-0-1-to-bool-variables.patch |   55 +
 .../libertas/0003-switch-debugfs-to-umode_t.patch  |   26 +
 ...-Remove-unnecessary-k.alloc-v.alloc-OOM-m.patch |   54 +
 ...ibertas-remove-dump_survey-implementation.patch |   80 +
 ...bertas-remove-redundant-NULL-tests-before.patch |   95 ++
 ...ix-signedness-bug-in-lbs_auth_to_authtype.patch |   48 +
 ...-wireless-libertas-if_usb.c-add-missing-d.patch |   35 +
 ...libertas-Firmware-loading-simplifications.patch |  618 ++++++++
 .../0010-libertas-harden-up-exit-paths.patch       |   46 +
 ...d-asynchronous-firmware-loading-capabilit.patch |  269 ++++
 ...IO-convert-to-asynchronous-firmware-loadi.patch |  320 ++++
 ...B-convert-to-asynchronous-firmware-loadin.patch |  201 +++
 ...-convert-to-asynchronous-firmware-loading.patch |  154 ++
 .../0015-libertas-add-missing-include.patch        |   30 +
 ...ve-debug-msgs-due-to-missing-in_interrupt.patch |   35 +
 ...P-HS-Enable-HSPE-bit-for-high-speed-cards.patch |   66 +
 recipes-kernel/linux/linux-ti33x-psp_3.2.bb        |  292 +++-
 419 files changed, 21742 insertions(+), 357 deletions(-)
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0001-KVM-mmu_notifier-Flush-TLBs-before-releasing-mmu_loc.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0002-KVM-Ensure-all-vcpus-are-consistent-with-in-kernel-i.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0003-KVM-lock-slots_lock-around-device-assignment.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0004-KVM-nVMX-Fix-erroneous-exception-bitmap-check.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0005-KVM-VMX-vmx_set_cr0-expects-kvm-srcu-locked.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0006-KVM-s390-do-store-status-after-handling-STOP_ON_STOP.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0007-KVM-s390-Sanitize-fpc-registers-for-KVM_SET_FPU.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0008-bio-don-t-overflow-in-bio_get_nr_vecs.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0009-bio-allocation-failure-due-to-bio_get_nr_vecs.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0010-block-fix-buffer-overflow-when-printing-partition-UU.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0011-fix-PA1.1-oops-on-boot.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0012-fix-crash-in-flush_icache_page_asm-on-PA1.1.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0013-fix-panic-on-prefetch-NULL-on-PA7300LC.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0014-arch-tile-Kconfig-remove-pointless-M386-test.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0015-tilegx-enable-SYSCALL_WRAPPERS-support.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0016-mtd-sm_ftl-fix-typo-in-major-number.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0017-hpsa-Fix-problem-with-MSA2xxx-devices.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0018-SELinux-if-sel_make_bools-errors-don-t-leave-inconsi.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0019-cfg80211-warn-if-db.txt-is-empty-with-CONFIG_CFG8021.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0020-mpt2sas-Fix-for-panic-happening-because-of-improper-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0021-isdn-gigaset-ratelimit-CAPI-message-dumps.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0022-isdn-gigaset-fix-CAPI-disconnect-B3-handling.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0023-isdn-gigaset-improve-error-handling-querying-firmwar.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0024-KEYS-Use-the-compat-keyctl-syscall-wrapper-on-Sparc6.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0025-IB-core-Fix-mismatch-between-locked-and-pinned-pages.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0026-regulator-core-Release-regulator-regulator-supplies-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0027-iommu-Fix-off-by-one-in-dmar_get_fault_reason.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0028-RDMA-cxgb4-Always-wake-up-waiters-in-c4iw_peer_abort.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0029-RDMA-cxgb4-Drop-peer_abort-when-no-endpoint-found.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0030-s390-pfault-fix-task-state-race.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0031-isci-fix-oem-parameter-validation-on-single-controll.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0032-Fix-blocking-allocations-called-very-early-during-bo.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0033-vfs-make-AIO-use-the-proper-rw_verify_area-area-help.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0034-docs-update-HOWTO-for-2.6.x-3.x-versioning.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0035-drivers-staging-comedi-comedi_fops.c-add-missing-vfr.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0036-USB-move-usb_translate_errors-to-linux-usb.h.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0037-USB-cdc-wdm-sanitize-error-returns.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0038-USB-cdc-wdm-fix-memory-leak.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0039-8250_pci-fix-pch-uart-matching.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0040-usb-add-USB_QUIRK_RESET_RESUME-for-M-Audio-88es.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0041-usb-usbtest-two-super-speed-fixes-for-usbtest.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0042-8250.c-less-than-2400-baud-fix.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0043-usb-xhci-Handle-COMP_TX_ERR-for-isoc-tds.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0044-xhci-Avoid-dead-ports-when-CONFIG_USB_XHCI_HCD-n.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0045-xhci-Add-Lynx-Point-to-list-of-Intel-switchable-host.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0046-usb-gadget-fsl_udc_core-dTD-s-next-dtd-pointer-need-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0047-Add-missing-call-to-uart_update_timeout.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0048-USB-ftdi-sio-add-support-for-Physik-Instrumente-E-86.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0049-USB-ffs-test-fix-length-argument-of-out-function-cal.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0050-HID-wiimote-Fix-IR-data-parser.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0051-usb-storage-unusual_devs-entry-for-Yarvik-PMP400-MP4.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0052-USB-ohci-at91-add-a-reset-function-to-fix-race-condi.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0053-HID-logitech-read-all-32-bits-of-report-type-bitfiel.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0054-USB-serial-ti_usb_3410_5052-Add-support-for-the-FRI2.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0055-USB-cdc-wdm-poll-must-return-POLLHUP-if-device-is-go.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0056-USB-cdc-wdm-add-debug-messages-on-cleanup.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0057-USB-cdc-wdm-cannot-use-dev_printk-when-device-is-gon.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0058-tty-Allow-uart_register-unregister-register.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0059-workqueue-skip-nr_running-sanity-check-in-worker_ent.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0060-xhci-Add-new-short-TX-quirk-for-Fresco-Logic-host.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0061-usbcore-enable-USB2-LPM-if-port-suspend-fails.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0062-perf-x86-Update-event-scheduling-constraints-for-AMD.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0063-USB-fix-resource-leak-in-xhci-power-loss-path.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0064-xhci-Reset-reserved-command-ring-TRBs-on-cleanup.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0065-USB-Remove-races-in-devio.c.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0066-md-using-GFP_NOIO-to-allocate-bio-for-flush-request.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0067-um-Implement-a-custom-pte_same-function.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0068-um-Fix-__swp_type.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0069-swap-don-t-do-discard-if-no-discard-option-added.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0070-Input-wacom-relax-Bamboo-stylus-ID-check.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0071-ahci-Detect-Marvell-88SE9172-SATA-controller.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0072-ARM-7365-1-drop-unused-parameter-from-flush_cache_us.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0073-ARM-7409-1-Do-not-call-flush_cache_user_range-with-m.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0074-sony-laptop-Enable-keyboard-backlight-by-default.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0075-init-don-t-try-mounting-device-as-nfs-root-unless-ty.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0076-memcg-free-spare-array-to-avoid-memory-leak.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0077-compat-Fix-RT-signal-mask-corruption-via-sigprocmask.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0078-ext3-Fix-error-handling-on-inode-bitmap-corruption.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0079-ext4-fix-error-handling-on-inode-bitmap-corruption.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0080-ACPI-PM-Add-Sony-Vaio-VPCCW29FX-to-nonvs-blacklist.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0081-hpsa-Add-IRQF_SHARED-back-in-for-the-non-MSI-X-inter.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0082-wake-up-s_wait_unfrozen-when-freeze_fs-fails.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0083-cifs-fix-revalidation-test-in-cifs_llseek.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0084-dl2k-Clean-up-rio_ioctl.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0085-OMAPDSS-VENC-fix-NULL-pointer-dereference-in-DSS2-VE.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0086-i2c-eg20t-change-timeout-value-50msec-to-1000msec.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0087-drm-i915-GEN7-Use-HW-scheduler-for-fixed-function-sh.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0088-mmc-sdio-avoid-spurious-calls-to-interrupt-handlers.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0089-smsusb-add-autodetection-support-for-USB-ID-2040-c0a.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0090-uvcvideo-Fix-ENUMINPUT-handling.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0091-drm-i915-Avoid-a-double-read-of-PCH_IIR-during-inter.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0092-b43legacy-Fix-error-due-to-MMIO-access-with-SSB-unpo.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0093-gpio-mpc8xxx-Prevent-NULL-pointer-deref-in-demux-han.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0094-drm-i915-don-t-clobber-the-pipe-param-in-sanitize_mo.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0095-spi-spi-fsl-spi-reference-correct-pdata-in-fsl_spi_c.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0096-xen-do-not-map-the-same-GSI-twice-in-PVHVM-guests.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0097-nouveau-nouveau_set_bo_placement-takes-TTM-flags.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0098-MCE-Fix-vm86-handling-for-32bit-mce-handler.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0099-x86-mce-Fix-check-for-processor-context-when-machine.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0100-tile-fix-bug-where-fls-0-was-not-returning-0.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0101-intel-iommu-Add-device-info-into-list-before-doing-c.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0102-ethtool-Null-terminate-filename-passed-to-ethtool_op.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0103-block-don-t-mark-buffers-beyond-end-of-disk-as-mappe.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0104-drivers-rtc-rtc-pl031.c-configure-correct-wday-for-2.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0105-rtlwifi-Preallocate-USB-read-buffers-and-eliminate-k.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0106-NFS4-fix-compile-warnings-in-nfs4proc.c.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0107-Avoid-reading-past-buffer-when-calling-GETACL.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0108-Avoid-beyond-bounds-copy-while-caching-ACL.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0109-i2c-tegra-notify-transfer-complete-after-clearing-st.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0110-i2c-davinci-Free-requested-IRQ-in-remove.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0111-x86-realmode-16-bit-real-mode-code-support-for-reloc.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0112-x86-relocs-Workaround-for-binutils-2.22.52.0.1-secti.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0113-x86-relocs-When-printing-an-error-say-relative-or-ab.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0114-x86-relocs-Build-clean-fix.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0115-x86-32-relocs-Whitelist-more-symbols-for-ld-bug-work.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0116-x86-relocs-Add-jiffies-and-jiffies_64-to-the-relativ.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0117-Linux-3.2.19.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0001-iommu-amd-Add-workaround-for-event-log-erratum.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0002-MIPS-BCM63XX-Add-missing-include-for-bcm63xx_gpio.h.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0003-cifs-Include-backup-intent-search-flags-during-searc.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0004-sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-ca.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0005-exofs-Fix-CRASH-on-very-early-IO-errors.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0006-cifs-fix-oops-while-traversing-open-file-list-try-4.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0007-Fix-dm-multipath-starvation-when-scsi-host-is-busy.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0008-ixp4xx-fix-compilation-by-adding-gpiolib-support.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0009-drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0010-drm-i915-enable-vdd-when-switching-off-the-eDP-panel.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0011-drm-i915-Add-Clientron-E830-to-the-ignore-LVDS-list.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0012-drm-i915-Ignore-LVDS-on-hp-t5745-and-hp-st5747-thin-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0013-drm-i915-no-lvds-quirk-for-HP-t5740e-Thin-Client.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0014-drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0015-drm-i915-Update-GEN6_RP_CONTROL-definitions.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0016-drm-i915-always-use-RPNSWREQ-for-turbo-change-reques.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0017-solos-pci-Fix-DMA-support.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0018-microblaze-Do-not-select-GENERIC_GPIO-by-default.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0019-fix-boot-failure-on-32-bit-systems-caused-by-branch-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0020-fix-TLB-fault-path-on-PA2.0-narrow-systems.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0021-iwlwifi-update-BT-traffic-load-states-correctly.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0022-iwlwifi-do-not-use-shadow-registers-by-default.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0023-wl1251-fix-oops-on-early-interrupt.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0024-NFSv4-Map-NFS4ERR_SHARE_DENIED-into-an-EACCES-error-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0025-drm-radeon-fix-XFX-quirk.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0026-ath9k-fix-a-use-after-free-bug-when-ath_tx_setup_buf.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0027-mac80211-fix-ADDBA-declined-after-suspend-with-wowla.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0028-mm-fork-fix-overflow-in-vma-length-when-copying-mmap.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0029-mm-consider-all-swapped-back-pages-in-used-once-logi.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0030-hugetlb-fix-resv_map-leak-in-error-path.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0031-mm-vmalloc.c-change-void-into-explict-vm_struct.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0032-mm-fix-faulty-initialization-in-vmalloc_init.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0033-fix-scsi_wait_scan.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0034-mm-fix-vma_resv_map-NULL-pointer.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0035-x86-amd-xen-Avoid-NULL-pointer-paravirt-references.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0036-slub-fix-a-memory-leak-in-get_partial_node.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0037-ext4-force-ro-mount-if-ext4_setup_super-fails.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0038-ext4-disallow-hard-linked-directory-in-ext4_lookup.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0039-mtd-nand-fix-scan_read_raw_oob.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0040-vfs-increment-iversion-when-a-file-is-truncated.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0041-vfs-umount_tree-might-be-called-on-subtree-that-had-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0042-ext4-add-missing-save_error_info-to-ext4_error.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0043-ALSA-usb-audio-fix-rate_list-memory-leak.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0044-ext4-add-ext4_mb_unload_buddy-in-the-error-path.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0045-ext4-remove-mb_groups-before-tearing-down-the-buddy_.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0046-drm-radeon-fix-bank-information-in-tiling-config.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0047-drm-radeon-properly-program-gart-on-rv740-juniper-cy.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0048-drm-radeon-fix-HD6790-HD6570-backend-programming.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0049-drm-ttm-Fix-spinlock-imbalance.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0050-drm-vmwgfx-Fix-nasty-write-past-alloced-memory-area.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0051-mtd-of_parts-fix-breakage-in-Kconfig.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0052-fec_mpc52xx-fix-timestamp-filtering.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0053-Bluetooth-btusb-Add-vendor-specific-ID-0a5c-21f3-for.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0054-Bluetooth-btusb-add-support-for-BCM20702A0-0a5c-21e6.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0055-Bluetooth-btusb-Add-USB-device-ID-0a5c-21e8.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0056-Bluetooth-btusb-typo-in-Broadcom-SoftSailing-id.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0057-Bluetooth-btusb-Add-vendor-specific-ID-0489-e042-for.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0058-Bluetooth-Add-support-for-Atheros-13d3-3362.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0059-Bluetooth-Add-support-for-AR3012-0cf3-e004.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0060-Add-Foxconn-Hon-Hai-IDs-for-btusb-module.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0061-Bluetooth-Add-support-for-Foxconn-Hon-Hai-AR5BBU22-0.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0062-drm-i915-Disable-FBC-on-SandyBridge.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0063-ipv4-Do-not-use-dead-fib_info-entries.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0064-ipv4-fix-the-rcu-race-between-free_fib_info-and-ip_r.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0065-set-fake_rtable-s-dst-to-NULL-to-avoid-kernel-Oops.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0066-ipv6-fix-incorrect-ipsec-fragment.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0067-l2tp-fix-oops-in-L2TP-IP-sockets-for-connect-AF_UNSP.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0068-r8169-missing-barriers.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0069-r8169-fix-early-queue-wake-up.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0070-r8169-fix-unsigned-int-wraparound-with-TSO.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0071-Revert-net-maintain-namespace-isolation-between-vlan.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0072-sctp-check-cached-dst-before-using-it.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0073-skb-avoid-unnecessary-reallocations-in-__skb_cow.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0074-xfrm-take-net-hdr-len-into-account-for-esp-payload-s.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0075-ACPI-battery-only-refresh-the-sysfs-files-when-perti.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0076-target-file-Use-O_DSYNC-by-default-for-FILEIO-backen.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0077-iommu-amd-Cache-pdev-pointer-to-root-bridge.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0078-drm-radeon-kms-add-new-Palm-Sumo-PCI-ids.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0079-drm-radeon-kms-add-new-BTC-PCI-ids.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0080-btree-fix-tree-corruption-in-btree_get_prev.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0081-kbuild-install-kernel-page-flags.h.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0082-asix-allow-full-size-8021Q-frames-to-be-received.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0083-ext4-don-t-trash-state-flags-in-EXT4_IOC_SETFLAGS.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0084-ext4-don-t-set-i_flags-in-EXT4_IOC_SETFLAGS.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0085-ext4-fix-the-free-blocks-calculation-for-ext3-file-s.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0086-Linux-3.2.20.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0001-drm-i915-Mark-the-ringbuffers-as-being-in-the-GTT-do.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0002-drm-i915-hold-forcewake-around-ring-hw-init.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0003-drm-i915-Unpin-the-flip-target-if-we-fail-to-queue-t.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0004-drm-i915-fix-up-ivb-plane-3-pageflips.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0005-char-agp-add-another-Ironlake-host-bridge.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0006-x86-uv-Fix-UV2-BAU-legacy-mode.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0007-powerpc-Fix-kernel-panic-during-kernel-module-load.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0008-drm-nouveau-determine-a-value-for-display_info.bpc-i.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0009-drm-nouveau-default-to-8bpc-for-non-LVDS-panels-if-E.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0010-drm-nouveau-disp-fix-dithering-not-being-enabled-on-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0011-fuse-fix-stat-call-on-32-bit-platforms.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0012-x86-MCE-AMD-Make-APIC-LVT-thresholding-interrupt-opt.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0013-x86-amd-Re-enable-CPU-topology-extensions-in-case-BI.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0014-hwmon-fam15h_power-Increase-output-resolution.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0015-sched-Fix-the-relax_domain_level-boot-parameter.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0016-iwlwifi-don-t-mess-up-the-SCD-when-removing-a-key.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0017-hwrng-atmel-rng-fix-race-condition-leading-to-repeat.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0018-crypto-aesni-intel-fix-unaligned-cbc-decrypt-for-x86.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0019-xen-setup-filter-APERFMPERF-cpuid-feature-out.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0020-NFSv4.1-Fix-a-request-leak-on-the-back-channel.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0021-can-c_can-fix-BUG-echo_skb-is-occupied-during-transm.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0022-can-c_can-fix-an-interrupt-thrash-issue-with-c_can-d.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0023-can-c_can-fix-race-condition-in-c_can_open.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0024-ARM-i.MX53-Fix-PLL4-base-address.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0025-usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0026-mac80211-clean-up-remain-on-channel-on-interface-sto.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0027-rt2x00-use-atomic-variable-for-seqno.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0028-iwlwifi-disable-WoWLAN-if-CONFIG_PM_SLEEP.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0029-ASoC-wm8994-Ensure-all-AIFnCLK-events-are-run-from-t.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0030-ASoC-wm8994-Apply-volume-updates-with-clocks-enabled.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0031-iwlwifi-unregister-LEDs-if-mac80211-registration-fai.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0032-cfg80211-fix-interface-combinations-check.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0033-mpt2sas-Fix-unsafe-using-smp_processor_id-in-preempt.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0034-net-sierra_net-device-IDs-for-Aircard-320U.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0035-ARM-imx6-exit-coherency-when-shutting-down-a-cpu.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0036-ARM-i.MX-imx21ads-Fix-overlapping-static-i-o-mapping.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0037-NFSv4-Fix-unnecessary-delegation-returns-in-nfs4_do_.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0038-iwlwifi-use-correct-supported-firmware-for-6035-and-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0039-iwlwifi-disable-the-buggy-chain-extension-feature-in.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0040-ALSA-hda-Add-codec-no_jack_detect-flag.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0041-ALSA-hda-add-support-for-Uniwill-ECS-M31EI-notebook.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0042-ALSA-hda-Suppress-auto-mute-feature-on-some-machines.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0043-ALSA-hda-Add-another-jack-detection-suppression-for-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0044-ALSA-HDA-Pin-fixup-for-Zotac-Z68-motherboard.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0045-usb-cdc-wdm-Add-device-id-for-Huawei-3G-LTE-modems.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0046-USB-qcserial-Add-Sierra-Wireless-device-IDs.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0047-USB-ftdi-sio-Add-support-for-RT-Systems-USB-RTS01-se.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0048-USB-serial-cp210x-add-Optris-MS-Pro-usb-id.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0049-USB-serial-sierra-Add-support-for-Sierra-Wireless-Ai.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0050-USB-option-Updated-Huawei-K4605-has-better-id.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0051-USB-mct_u232-Fix-incorrect-TIOCMSET-return.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0052-USB-option-fix-port-data-abuse.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0053-USB-option-fix-memory-leak.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0054-USB-option-add-more-YUGA-device-ids.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0055-target-Return-error-to-initiator-if-SET-TARGET-PORT-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0056-USB-add-NO_D3_DURING_SLEEP-flag-and-revert-151b61284.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0057-USB-serial-Enforce-USB-driver-and-USB-serial-driver-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0058-xhci-Fix-invalid-loop-check-in-xhci_free_tt_info.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0059-xhci-Don-t-free-endpoints-in-xhci_mem_cleanup.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0060-xHCI-Increase-the-timeout-for-controller-save-restor.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0061-usb-PS3-EHCI-QH-read-work-around.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0062-USB-fix-PS3-EHCI-systems.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0063-usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0064-USB-fix-gathering-of-interface-associations.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0065-swap-fix-shmem-swapping-when-more-than-8-areas.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0066-drm-radeon-add-some-additional-6xx-7xx-EG-register-i.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0067-Linux-3.2.21.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0001-USB-convert-drivers-net-to-use-module_usb_driver.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0002-net-fix-assignment-of-0-1-to-bool-variables.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0003-switch-debugfs-to-umode_t.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0004-drivers-net-Remove-unnecessary-k.alloc-v.alloc-OOM-m.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0005-libertas-remove-dump_survey-implementation.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0006-wireless-libertas-remove-redundant-NULL-tests-before.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0007-libertas-fix-signedness-bug-in-lbs_auth_to_authtype.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0008-drivers-net-wireless-libertas-if_usb.c-add-missing-d.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0009-libertas-Firmware-loading-simplifications.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0010-libertas-harden-up-exit-paths.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0011-libertas-add-asynchronous-firmware-loading-capabilit.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0012-libertas-SDIO-convert-to-asynchronous-firmware-loadi.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0013-libertas-USB-convert-to-asynchronous-firmware-loadin.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0014-libertas-CS-convert-to-asynchronous-firmware-loading.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0015-libertas-add-missing-include.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0016-remove-debug-msgs-due-to-missing-in_interrupt.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/psp/0019-MMC-OMAP-HS-Enable-HSPE-bit-for-high-speed-cards.patch

diff --git a/conf/machine/include/ti33x.inc b/conf/machine/include/ti33x.inc
index 61ee65e..441a7bb 100644
--- a/conf/machine/include/ti33x.inc
+++ b/conf/machine/include/ti33x.inc
@@ -4,7 +4,7 @@ require conf/machine/include/soc-family.inc
 require conf/machine/include/tune-cortexa8.inc
 PREFERRED_PROVIDER_virtual/kernel = "linux-ti33x-psp"
 # Increase this everytime you change something in the kernel
-MACHINE_KERNEL_PR = "r12"
+MACHINE_KERNEL_PR = "r13"
 
 KERNEL_IMAGETYPE = "uImage"
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0001-KVM-mmu_notifier-Flush-TLBs-before-releasing-mmu_loc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0001-KVM-mmu_notifier-Flush-TLBs-before-releasing-mmu_loc.patch
new file mode 100644
index 0000000..dff41fc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0001-KVM-mmu_notifier-Flush-TLBs-before-releasing-mmu_loc.patch
@@ -0,0 +1,79 @@
+From e29e69cb6dff635429cbda9a9548c3d0390689f9 Mon Sep 17 00:00:00 2001
+From: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
+Date: Fri, 10 Feb 2012 15:28:31 +0900
+Subject: [PATCH 001/117] KVM: mmu_notifier: Flush TLBs before releasing
+ mmu_lock
+
+(cherry picked from commit 565f3be2174611f364405bbea2d86e153c2e7e78
+
+Other threads may process the same page in that small window and skip
+TLB flush and then return before these functions do flush.
+
+Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Avi Kivity <avi@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ virt/kvm/kvm_main.c |   19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
+index e401c1b..9ffac2e 100644
+--- a/virt/kvm/kvm_main.c
++++ b/virt/kvm/kvm_main.c
+@@ -289,15 +289,15 @@ static void kvm_mmu_notifier_invalidate_page(struct mmu_notifier *mn,
+ 	 */
+ 	idx = srcu_read_lock(&kvm->srcu);
+ 	spin_lock(&kvm->mmu_lock);
++
+ 	kvm->mmu_notifier_seq++;
+ 	need_tlb_flush = kvm_unmap_hva(kvm, address) | kvm->tlbs_dirty;
+-	spin_unlock(&kvm->mmu_lock);
+-	srcu_read_unlock(&kvm->srcu, idx);
+-
+ 	/* we've to flush the tlb before the pages can be freed */
+ 	if (need_tlb_flush)
+ 		kvm_flush_remote_tlbs(kvm);
+ 
++	spin_unlock(&kvm->mmu_lock);
++	srcu_read_unlock(&kvm->srcu, idx);
+ }
+ 
+ static void kvm_mmu_notifier_change_pte(struct mmu_notifier *mn,
+@@ -335,12 +335,12 @@ static void kvm_mmu_notifier_invalidate_range_start(struct mmu_notifier *mn,
+ 	for (; start < end; start += PAGE_SIZE)
+ 		need_tlb_flush |= kvm_unmap_hva(kvm, start);
+ 	need_tlb_flush |= kvm->tlbs_dirty;
+-	spin_unlock(&kvm->mmu_lock);
+-	srcu_read_unlock(&kvm->srcu, idx);
+-
+ 	/* we've to flush the tlb before the pages can be freed */
+ 	if (need_tlb_flush)
+ 		kvm_flush_remote_tlbs(kvm);
++
++	spin_unlock(&kvm->mmu_lock);
++	srcu_read_unlock(&kvm->srcu, idx);
+ }
+ 
+ static void kvm_mmu_notifier_invalidate_range_end(struct mmu_notifier *mn,
+@@ -378,13 +378,14 @@ static int kvm_mmu_notifier_clear_flush_young(struct mmu_notifier *mn,
+ 
+ 	idx = srcu_read_lock(&kvm->srcu);
+ 	spin_lock(&kvm->mmu_lock);
+-	young = kvm_age_hva(kvm, address);
+-	spin_unlock(&kvm->mmu_lock);
+-	srcu_read_unlock(&kvm->srcu, idx);
+ 
++	young = kvm_age_hva(kvm, address);
+ 	if (young)
+ 		kvm_flush_remote_tlbs(kvm);
+ 
++	spin_unlock(&kvm->mmu_lock);
++	srcu_read_unlock(&kvm->srcu, idx);
++
+ 	return young;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0002-KVM-Ensure-all-vcpus-are-consistent-with-in-kernel-i.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0002-KVM-Ensure-all-vcpus-are-consistent-with-in-kernel-i.patch
new file mode 100644
index 0000000..801ab45
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0002-KVM-Ensure-all-vcpus-are-consistent-with-in-kernel-i.patch
@@ -0,0 +1,110 @@
+From 54719e9d5196e2af1e358795de9face038502343 Mon Sep 17 00:00:00 2001
+From: Avi Kivity <avi@redhat.com>
+Date: Mon, 5 Mar 2012 14:23:29 +0200
+Subject: [PATCH 002/117] KVM: Ensure all vcpus are consistent with in-kernel
+ irqchip settings
+
+(cherry picked from commit 3e515705a1f46beb1c942bb8043c16f8ac7b1e9e)
+
+If some vcpus are created before KVM_CREATE_IRQCHIP, then
+irqchip_in_kernel() and vcpu->arch.apic will be inconsistent, leading
+to potential NULL pointer dereferences.
+
+Fix by:
+- ensuring that no vcpus are installed when KVM_CREATE_IRQCHIP is called
+- ensuring that a vcpu has an apic if it is installed after KVM_CREATE_IRQCHIP
+
+This is somewhat long winded because vcpu->arch.apic is created without
+kvm->lock held.
+
+Based on earlier patch by Michael Ellerman.
+
+Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
+Signed-off-by: Avi Kivity <avi@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/ia64/kvm/kvm-ia64.c |    5 +++++
+ arch/x86/kvm/x86.c       |    8 ++++++++
+ include/linux/kvm_host.h |    7 +++++++
+ virt/kvm/kvm_main.c      |    4 ++++
+ 4 files changed, 24 insertions(+)
+
+diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
+index 43f4c92..7073185 100644
+--- a/arch/ia64/kvm/kvm-ia64.c
++++ b/arch/ia64/kvm/kvm-ia64.c
+@@ -1169,6 +1169,11 @@ out:
+ 
+ #define PALE_RESET_ENTRY    0x80000000ffffffb0UL
+ 
++bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu)
++{
++	return irqchip_in_kernel(vcpu->kcm) == (vcpu->arch.apic != NULL);
++}
++
+ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
+ {
+ 	struct kvm_vcpu *v;
+diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
+index e04cae1..4fc5323 100644
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -3579,6 +3579,9 @@ long kvm_arch_vm_ioctl(struct file *filp,
+ 		r = -EEXIST;
+ 		if (kvm->arch.vpic)
+ 			goto create_irqchip_unlock;
++		r = -EINVAL;
++		if (atomic_read(&kvm->online_vcpus))
++			goto create_irqchip_unlock;
+ 		r = -ENOMEM;
+ 		vpic = kvm_create_pic(kvm);
+ 		if (vpic) {
+@@ -6486,6 +6489,11 @@ void kvm_arch_check_processor_compat(void *rtn)
+ 	kvm_x86_ops->check_processor_compatibility(rtn);
+ }
+ 
++bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu)
++{
++	return irqchip_in_kernel(vcpu->kvm) == (vcpu->arch.apic != NULL);
++}
++
+ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
+ {
+ 	struct page *page;
+diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
+index 35410ef..6136821 100644
+--- a/include/linux/kvm_host.h
++++ b/include/linux/kvm_host.h
+@@ -744,6 +744,13 @@ static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu)
+ {
+ 	return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id;
+ }
++
++bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu);
++
++#else
++
++static inline bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu) { return true; }
++
+ #endif
+ 
+ #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
+diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
+index 9ffac2e..ec747dc 100644
+--- a/virt/kvm/kvm_main.c
++++ b/virt/kvm/kvm_main.c
+@@ -1667,6 +1667,10 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
+ 		goto vcpu_destroy;
+ 
+ 	mutex_lock(&kvm->lock);
++	if (!kvm_vcpu_compatible(vcpu)) {
++		r = -EINVAL;
++		goto unlock_vcpu_destroy;
++	}
+ 	if (atomic_read(&kvm->online_vcpus) == KVM_MAX_VCPUS) {
+ 		r = -EINVAL;
+ 		goto unlock_vcpu_destroy;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0003-KVM-lock-slots_lock-around-device-assignment.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0003-KVM-lock-slots_lock-around-device-assignment.patch
new file mode 100644
index 0000000..12c9a1e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0003-KVM-lock-slots_lock-around-device-assignment.patch
@@ -0,0 +1,83 @@
+From 2464830dde6595631a26a5178946f8d8d0ac974f Mon Sep 17 00:00:00 2001
+From: Alex Williamson <alex.williamson@redhat.com>
+Date: Tue, 17 Apr 2012 21:46:44 -0600
+Subject: [PATCH 003/117] KVM: lock slots_lock around device assignment
+
+(cherry picked from commit 21a1416a1c945c5aeaeaf791b63c64926018eb77)
+
+As pointed out by Jason Baron, when assigning a device to a guest
+we first set the iommu domain pointer, which enables mapping
+and unmapping of memory slots to the iommu.  This leaves a window
+where this path is enabled, but we haven't synchronized the iommu
+mappings to the existing memory slots.  Thus a slot being removed
+at that point could send us down unexpected code paths removing
+non-existent pinnings and iommu mappings.  Take the slots_lock
+around creating the iommu domain and initial mappings as well as
+around iommu teardown to avoid this race.
+
+Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ virt/kvm/iommu.c |   23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c
+index fd817a2..533db33 100644
+--- a/virt/kvm/iommu.c
++++ b/virt/kvm/iommu.c
+@@ -239,9 +239,13 @@ int kvm_iommu_map_guest(struct kvm *kvm)
+ 		return -ENODEV;
+ 	}
+ 
++	mutex_lock(&kvm->slots_lock);
++
+ 	kvm->arch.iommu_domain = iommu_domain_alloc(&pci_bus_type);
+-	if (!kvm->arch.iommu_domain)
+-		return -ENOMEM;
++	if (!kvm->arch.iommu_domain) {
++		r = -ENOMEM;
++		goto out_unlock;
++	}
+ 
+ 	if (!allow_unsafe_assigned_interrupts &&
+ 	    !iommu_domain_has_cap(kvm->arch.iommu_domain,
+@@ -252,17 +256,16 @@ int kvm_iommu_map_guest(struct kvm *kvm)
+ 		       " module option.\n", __func__);
+ 		iommu_domain_free(kvm->arch.iommu_domain);
+ 		kvm->arch.iommu_domain = NULL;
+-		return -EPERM;
++		r = -EPERM;
++		goto out_unlock;
+ 	}
+ 
+ 	r = kvm_iommu_map_memslots(kvm);
+ 	if (r)
+-		goto out_unmap;
+-
+-	return 0;
++		kvm_iommu_unmap_memslots(kvm);
+ 
+-out_unmap:
+-	kvm_iommu_unmap_memslots(kvm);
++out_unlock:
++	mutex_unlock(&kvm->slots_lock);
+ 	return r;
+ }
+ 
+@@ -338,7 +341,11 @@ int kvm_iommu_unmap_guest(struct kvm *kvm)
+ 	if (!domain)
+ 		return 0;
+ 
++	mutex_lock(&kvm->slots_lock);
+ 	kvm_iommu_unmap_memslots(kvm);
++	kvm->arch.iommu_domain = NULL;
++	mutex_unlock(&kvm->slots_lock);
++
+ 	iommu_domain_free(domain);
+ 	return 0;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0004-KVM-nVMX-Fix-erroneous-exception-bitmap-check.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0004-KVM-nVMX-Fix-erroneous-exception-bitmap-check.patch
new file mode 100644
index 0000000..34538bd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0004-KVM-nVMX-Fix-erroneous-exception-bitmap-check.patch
@@ -0,0 +1,36 @@
+From c997d0a009e5eb7b372287c13fc9eaba901533e8 Mon Sep 17 00:00:00 2001
+From: Nadav Har'El <nyh@math.technion.ac.il>
+Date: Tue, 6 Mar 2012 16:39:22 +0200
+Subject: [PATCH 004/117] KVM: nVMX: Fix erroneous exception bitmap check
+
+(cherry picked from commit 9587190107d0c0cbaccbf7bf6b0245d29095a9ae)
+
+The code which checks whether to inject a pagefault to L1 or L2 (in
+nested VMX) was wrong, incorrect in how it checked the PF_VECTOR bit.
+Thanks to Dan Carpenter for spotting this.
+
+Signed-off-by: Nadav Har'El <nyh@il.ibm.com>
+Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Avi Kivity <avi@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kvm/vmx.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
+index 4ea7678..7ac5993 100644
+--- a/arch/x86/kvm/vmx.c
++++ b/arch/x86/kvm/vmx.c
+@@ -1677,7 +1677,7 @@ static int nested_pf_handled(struct kvm_vcpu *vcpu)
+ 	struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
+ 
+ 	/* TODO: also check PFEC_MATCH/MASK, not just EB.PF. */
+-	if (!(vmcs12->exception_bitmap & PF_VECTOR))
++	if (!(vmcs12->exception_bitmap & (1u << PF_VECTOR)))
+ 		return 0;
+ 
+ 	nested_vmx_vmexit(vcpu);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0005-KVM-VMX-vmx_set_cr0-expects-kvm-srcu-locked.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0005-KVM-VMX-vmx_set_cr0-expects-kvm-srcu-locked.patch
new file mode 100644
index 0000000..6a3536f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0005-KVM-VMX-vmx_set_cr0-expects-kvm-srcu-locked.patch
@@ -0,0 +1,35 @@
+From 6d02e81e40e77ff4e0d65ae89cf91a7402d3255f Mon Sep 17 00:00:00 2001
+From: Marcelo Tosatti <mtosatti@redhat.com>
+Date: Tue, 27 Mar 2012 19:47:26 -0300
+Subject: [PATCH 005/117] KVM: VMX: vmx_set_cr0 expects kvm->srcu locked
+
+(cherry picked from commit 7a4f5ad051e02139a9f1c0f7f4b1acb88915852b)
+
+vmx_set_cr0 is called from vcpu run context, therefore it expects
+kvm->srcu to be held (for setting up the real-mode TSS).
+
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Avi Kivity <avi@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kvm/vmx.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
+index 7ac5993..7315488 100644
+--- a/arch/x86/kvm/vmx.c
++++ b/arch/x86/kvm/vmx.c
+@@ -3915,7 +3915,9 @@ static int vmx_vcpu_reset(struct kvm_vcpu *vcpu)
+ 		vmcs_write16(VIRTUAL_PROCESSOR_ID, vmx->vpid);
+ 
+ 	vmx->vcpu.arch.cr0 = X86_CR0_NW | X86_CR0_CD | X86_CR0_ET;
++	vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
+ 	vmx_set_cr0(&vmx->vcpu, kvm_read_cr0(vcpu)); /* enter rmode */
++	srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
+ 	vmx_set_cr4(&vmx->vcpu, 0);
+ 	vmx_set_efer(&vmx->vcpu, 0);
+ 	vmx_fpu_activate(&vmx->vcpu);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0006-KVM-s390-do-store-status-after-handling-STOP_ON_STOP.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0006-KVM-s390-do-store-status-after-handling-STOP_ON_STOP.patch
new file mode 100644
index 0000000..f47e28d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0006-KVM-s390-do-store-status-after-handling-STOP_ON_STOP.patch
@@ -0,0 +1,65 @@
+From 4ec77e205d0abcfd9d48332ac0a8d60322966562 Mon Sep 17 00:00:00 2001
+From: Jens Freimann <jfrei@linux.vnet.ibm.com>
+Date: Mon, 6 Feb 2012 10:59:03 +0100
+Subject: [PATCH 006/117] KVM: s390: do store status after handling
+ STOP_ON_STOP bit
+
+(cherry picked from commit 9e0d5473e2f0ba2d2fe9dab9408edef3060b710e)
+
+In handle_stop() handle the stop bit before doing the store status as
+described for "Stop and Store Status" in the Principles of Operation.
+We have to give up the local_int.lock before calling kvm store status
+since it calls gmap_fault() which might sleep. Since local_int.lock
+only protects local_int.* and not guest memory we can give up the lock.
+
+Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
+Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Avi Kivity <avi@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/s390/kvm/intercept.c |   20 ++++++++++++--------
+ 1 file changed, 12 insertions(+), 8 deletions(-)
+
+diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c
+index 0243454..a5f6eff 100644
+--- a/arch/s390/kvm/intercept.c
++++ b/arch/s390/kvm/intercept.c
+@@ -133,13 +133,6 @@ static int handle_stop(struct kvm_vcpu *vcpu)
+ 
+ 	vcpu->stat.exit_stop_request++;
+ 	spin_lock_bh(&vcpu->arch.local_int.lock);
+-	if (vcpu->arch.local_int.action_bits & ACTION_STORE_ON_STOP) {
+-		vcpu->arch.local_int.action_bits &= ~ACTION_STORE_ON_STOP;
+-		rc = kvm_s390_vcpu_store_status(vcpu,
+-						  KVM_S390_STORE_STATUS_NOADDR);
+-		if (rc >= 0)
+-			rc = -EOPNOTSUPP;
+-	}
+ 
+ 	if (vcpu->arch.local_int.action_bits & ACTION_RELOADVCPU_ON_STOP) {
+ 		vcpu->arch.local_int.action_bits &= ~ACTION_RELOADVCPU_ON_STOP;
+@@ -155,7 +148,18 @@ static int handle_stop(struct kvm_vcpu *vcpu)
+ 		rc = -EOPNOTSUPP;
+ 	}
+ 
+-	spin_unlock_bh(&vcpu->arch.local_int.lock);
++	if (vcpu->arch.local_int.action_bits & ACTION_STORE_ON_STOP) {
++		vcpu->arch.local_int.action_bits &= ~ACTION_STORE_ON_STOP;
++		/* store status must be called unlocked. Since local_int.lock
++		 * only protects local_int.* and not guest memory we can give
++		 * up the lock here */
++		spin_unlock_bh(&vcpu->arch.local_int.lock);
++		rc = kvm_s390_vcpu_store_status(vcpu,
++						KVM_S390_STORE_STATUS_NOADDR);
++		if (rc >= 0)
++			rc = -EOPNOTSUPP;
++	} else
++		spin_unlock_bh(&vcpu->arch.local_int.lock);
+ 	return rc;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0007-KVM-s390-Sanitize-fpc-registers-for-KVM_SET_FPU.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0007-KVM-s390-Sanitize-fpc-registers-for-KVM_SET_FPU.patch
new file mode 100644
index 0000000..cd494d6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0007-KVM-s390-Sanitize-fpc-registers-for-KVM_SET_FPU.patch
@@ -0,0 +1,36 @@
+From 12632a351defb18140a84df1720a363d94991973 Mon Sep 17 00:00:00 2001
+From: Christian Borntraeger <borntraeger@de.ibm.com>
+Date: Mon, 6 Feb 2012 10:59:02 +0100
+Subject: [PATCH 007/117] KVM: s390: Sanitize fpc registers for KVM_SET_FPU
+
+(cherry picked from commit 851755871c1f3184f4124c466e85881f17fa3226)
+
+commit 7eef87dc99e419b1cc051e4417c37e4744d7b661 (KVM: s390: fix
+register setting) added a load of the floating point control register
+to the KVM_SET_FPU path. Lets make sure that the fpc is valid.
+
+Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Avi Kivity <avi@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/s390/kvm/kvm-s390.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
+index d1c44573..d3cb86c 100644
+--- a/arch/s390/kvm/kvm-s390.c
++++ b/arch/s390/kvm/kvm-s390.c
+@@ -418,7 +418,7 @@ int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
+ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
+ {
+ 	memcpy(&vcpu->arch.guest_fpregs.fprs, &fpu->fprs, sizeof(fpu->fprs));
+-	vcpu->arch.guest_fpregs.fpc = fpu->fpc;
++	vcpu->arch.guest_fpregs.fpc = fpu->fpc & FPC_VALID_MASK;
+ 	restore_fp_regs(&vcpu->arch.guest_fpregs);
+ 	return 0;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0008-bio-don-t-overflow-in-bio_get_nr_vecs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0008-bio-don-t-overflow-in-bio_get_nr_vecs.patch
new file mode 100644
index 0000000..d0b79e0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0008-bio-don-t-overflow-in-bio_get_nr_vecs.patch
@@ -0,0 +1,61 @@
+From ac72e8c98ddb0c511b506472d9bc5afcf720babc Mon Sep 17 00:00:00 2001
+From: Kent Overstreet <kent.overstreet@gmail.com>
+Date: Wed, 8 Feb 2012 22:07:18 +0100
+Subject: [PATCH 008/117] bio: don't overflow in bio_get_nr_vecs()
+
+commit 5abebfdd02450fa1349daacf242e70b3736581e3 upstream.
+
+There were two places bio_get_nr_vecs() could overflow:
+
+First, it did a left shift to convert from sectors to bytes immediately
+before dividing by PAGE_SIZE.  If PAGE_SIZE ever was less than 512 a great
+many things would break, so dividing by PAGE_SIZE >> 9 is safe and will
+generate smaller code too.
+
+The nastier overflow was in the DIV_ROUND_UP() (that's what the code was
+effectively doing, anyways).  If n + d overflowed, the whole thing would
+return 0 which breaks things rather effectively.
+
+bio_get_nr_vecs() doesn't claim to give an exact value anyways, so the
+DIV_ROUND_UP() is silly; we could do a straight divide except if a
+device's queue_max_sectors was less than PAGE_SIZE we'd return 0.  So we
+just add 1; this should always be safe - things will break badly if
+bio_get_nr_vecs() returns > BIO_MAX_PAGES (bio_alloc() will suddenly start
+failing) but it's queue_max_segments that must guard against this, if
+queue_max_sectors is preventing this from happen things are going to
+explode on architectures with different PAGE_SIZE.
+
+Signed-off-by: Kent Overstreet <koverstreet@google.com>
+Cc: Tejun Heo <tj@kernel.org>
+Acked-by: Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/bio.c |   10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/fs/bio.c b/fs/bio.c
+index b1fe82c..b980ecd 100644
+--- a/fs/bio.c
++++ b/fs/bio.c
+@@ -505,13 +505,9 @@ EXPORT_SYMBOL(bio_clone);
+ int bio_get_nr_vecs(struct block_device *bdev)
+ {
+ 	struct request_queue *q = bdev_get_queue(bdev);
+-	int nr_pages;
+-
+-	nr_pages = ((queue_max_sectors(q) << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT;
+-	if (nr_pages > queue_max_segments(q))
+-		nr_pages = queue_max_segments(q);
+-
+-	return nr_pages;
++	return min_t(unsigned,
++		     queue_max_segments(q),
++		     queue_max_sectors(q) / (PAGE_SIZE >> 9) + 1);
+ }
+ EXPORT_SYMBOL(bio_get_nr_vecs);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0009-bio-allocation-failure-due-to-bio_get_nr_vecs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0009-bio-allocation-failure-due-to-bio_get_nr_vecs.patch
new file mode 100644
index 0000000..1be8875
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0009-bio-allocation-failure-due-to-bio_get_nr_vecs.patch
@@ -0,0 +1,49 @@
+From a98c14f6d0a745c09fa0ebf22c2ce8913c211d9b Mon Sep 17 00:00:00 2001
+From: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
+Date: Fri, 11 May 2012 16:36:44 +0200
+Subject: [PATCH 009/117] bio allocation failure due to bio_get_nr_vecs()
+
+commit f908ee9463b09ddd05e1c1a0111132212dc05fac upstream.
+
+The number of bio_get_nr_vecs() is passed down via bio_alloc() to
+bvec_alloc_bs(), which fails the bio allocation if
+nr_iovecs > BIO_MAX_PAGES. For the underlying caller this causes an
+unexpected bio allocation failure.
+Limiting to queue_max_segments() is not sufficient, as max_segments
+also might be very large.
+
+bvec_alloc_bs(gfp_mask, nr_iovecs, ) => NULL when nr_iovecs  > BIO_MAX_PAGES
+bio_alloc_bioset(gfp_mask, nr_iovecs, ...)
+bio_alloc(GFP_NOIO, nvecs)
+xfs_alloc_ioend_bio()
+
+Signed-off-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/bio.c |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/fs/bio.c b/fs/bio.c
+index b980ecd..4fc4dbb 100644
+--- a/fs/bio.c
++++ b/fs/bio.c
+@@ -505,9 +505,14 @@ EXPORT_SYMBOL(bio_clone);
+ int bio_get_nr_vecs(struct block_device *bdev)
+ {
+ 	struct request_queue *q = bdev_get_queue(bdev);
+-	return min_t(unsigned,
++	int nr_pages;
++
++	nr_pages = min_t(unsigned,
+ 		     queue_max_segments(q),
+ 		     queue_max_sectors(q) / (PAGE_SIZE >> 9) + 1);
++
++	return min_t(unsigned, nr_pages, BIO_MAX_PAGES);
++
+ }
+ EXPORT_SYMBOL(bio_get_nr_vecs);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0010-block-fix-buffer-overflow-when-printing-partition-UU.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0010-block-fix-buffer-overflow-when-printing-partition-UU.patch
new file mode 100644
index 0000000..65aff34
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0010-block-fix-buffer-overflow-when-printing-partition-UU.patch
@@ -0,0 +1,98 @@
+From 6a6f5fba154e1400185844d74b953fba440fda63 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Tue, 15 May 2012 08:22:04 +0200
+Subject: [PATCH 010/117] block: fix buffer overflow when printing partition
+ UUIDs
+
+commit 05c69d298c96703741cac9a5cbbf6c53bd55a6e2 upstream.
+
+6d1d8050b4bc8 "block, partition: add partition_meta_info to hd_struct"
+added part_unpack_uuid() which assumes that the passed in buffer has
+enough space for sprintfing "%pU" - 37 characters including '\0'.
+
+Unfortunately, b5af921ec0233 "init: add support for root devices
+specified by partition UUID" supplied 33 bytes buffer to the function
+leading to the following panic with stackprotector enabled.
+
+  Kernel panic - not syncing: stack-protector: Kernel stack corrupted in: ffffffff81b14c7e
+
+  [<ffffffff815e226b>] panic+0xba/0x1c6
+  [<ffffffff81b14c7e>] ? printk_all_partitions+0x259/0x26xb
+  [<ffffffff810566bb>] __stack_chk_fail+0x1b/0x20
+  [<ffffffff81b15c7e>] printk_all_paritions+0x259/0x26xb
+  [<ffffffff81aedfe0>] mount_block_root+0x1bc/0x27f
+  [<ffffffff81aee0fa>] mount_root+0x57/0x5b
+  [<ffffffff81aee23b>] prepare_namespace+0x13d/0x176
+  [<ffffffff8107eec0>] ? release_tgcred.isra.4+0x330/0x30
+  [<ffffffff81aedd60>] kernel_init+0x155/0x15a
+  [<ffffffff81087b97>] ? schedule_tail+0x27/0xb0
+  [<ffffffff815f4d24>] kernel_thread_helper+0x5/0x10
+  [<ffffffff81aedc0b>] ? start_kernel+0x3c5/0x3c5
+  [<ffffffff815f4d20>] ? gs_change+0x13/0x13
+
+Increase the buffer size, remove the dangerous part_unpack_uuid() and
+use snprintf() directly from printk_all_partitions().
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: Szymon Gruszczynski <sz.gruszczynski@googlemail.com>
+Cc: Will Drewry <wad@chromium.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ block/genhd.c         |   10 ++++++----
+ include/linux/genhd.h |    6 ------
+ 2 files changed, 6 insertions(+), 10 deletions(-)
+
+diff --git a/block/genhd.c b/block/genhd.c
+index 997afd6..4927476 100644
+--- a/block/genhd.c
++++ b/block/genhd.c
+@@ -744,7 +744,7 @@ void __init printk_all_partitions(void)
+ 		struct hd_struct *part;
+ 		char name_buf[BDEVNAME_SIZE];
+ 		char devt_buf[BDEVT_SIZE];
+-		u8 uuid[PARTITION_META_INFO_UUIDLTH * 2 + 1];
++		char uuid_buf[PARTITION_META_INFO_UUIDLTH * 2 + 5];
+ 
+ 		/*
+ 		 * Don't show empty devices or things that have been
+@@ -763,14 +763,16 @@ void __init printk_all_partitions(void)
+ 		while ((part = disk_part_iter_next(&piter))) {
+ 			bool is_part0 = part == &disk->part0;
+ 
+-			uuid[0] = 0;
++			uuid_buf[0] = '\0';
+ 			if (part->info)
+-				part_unpack_uuid(part->info->uuid, uuid);
++				snprintf(uuid_buf, sizeof(uuid_buf), "%pU",
++					 part->info->uuid);
+ 
+ 			printk("%s%s %10llu %s %s", is_part0 ? "" : "  ",
+ 			       bdevt_str(part_devt(part), devt_buf),
+ 			       (unsigned long long)part->nr_sects >> 1,
+-			       disk_name(disk, part->partno, name_buf), uuid);
++			       disk_name(disk, part->partno, name_buf),
++			       uuid_buf);
+ 			if (is_part0) {
+ 				if (disk->driverfs_dev != NULL &&
+ 				    disk->driverfs_dev->driver != NULL)
+diff --git a/include/linux/genhd.h b/include/linux/genhd.h
+index c6f7f6a..4eec461 100644
+--- a/include/linux/genhd.h
++++ b/include/linux/genhd.h
+@@ -222,12 +222,6 @@ static inline void part_pack_uuid(const u8 *uuid_str, u8 *to)
+ 	}
+ }
+ 
+-static inline char *part_unpack_uuid(const u8 *uuid, char *out)
+-{
+-	sprintf(out, "%pU", uuid);
+-	return out;
+-}
+-
+ static inline int disk_max_parts(struct gendisk *disk)
+ {
+ 	if (disk->flags & GENHD_FL_EXT_DEVT)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0011-fix-PA1.1-oops-on-boot.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0011-fix-PA1.1-oops-on-boot.patch
new file mode 100644
index 0000000..8ca8689
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0011-fix-PA1.1-oops-on-boot.patch
@@ -0,0 +1,43 @@
+From 882770bdde14aed9bf896980f51fe2fc8a55623f Mon Sep 17 00:00:00 2001
+From: James Bottomley <JBottomley@Parallels.com>
+Date: Tue, 15 May 2012 11:04:19 +0100
+Subject: [PATCH 011/117] fix PA1.1 oops on boot
+
+commit 5e185581d7c46ddd33cd9c01106d1fc86efb9376 upstream.
+
+All PA1.1 systems have been oopsing on boot since
+
+commit f311847c2fcebd81912e2f0caf8a461dec28db41
+Author: James Bottomley <James.Bottomley@HansenPartnership.com>
+Date:   Wed Dec 22 10:22:11 2010 -0600
+
+    parisc: flush pages through tmpalias space
+
+because a PA2.0 instruction was accidentally introduced into the PA1.1 TLB
+insertion interruption path when it was consolidated with the do_alias macro.
+Fix the do_alias macro only to use PA2.0 instructions if compiled for 64 bit.
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/parisc/kernel/entry.S |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S
+index 6f05944..5350342 100644
+--- a/arch/parisc/kernel/entry.S
++++ b/arch/parisc/kernel/entry.S
+@@ -581,7 +581,11 @@
+ 	 */
+ 	cmpiclr,=	0x01,\tmp,%r0
+ 	ldi		(_PAGE_DIRTY|_PAGE_READ|_PAGE_WRITE),\prot
++#ifdef CONFIG_64BIT
+ 	depd,z		\prot,8,7,\prot
++#else
++	depw,z		\prot,8,7,\prot
++#endif
+ 	/*
+ 	 * OK, it is in the temp alias region, check whether "from" or "to".
+ 	 * Check "subtle" note in pacache.S re: r23/r26.
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0012-fix-crash-in-flush_icache_page_asm-on-PA1.1.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0012-fix-crash-in-flush_icache_page_asm-on-PA1.1.patch
new file mode 100644
index 0000000..a5f6121
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0012-fix-crash-in-flush_icache_page_asm-on-PA1.1.patch
@@ -0,0 +1,91 @@
+From 95093fb411e522ec7a6c33d12863107ba841fe72 Mon Sep 17 00:00:00 2001
+From: John David Anglin <dave.anglin@bell.net>
+Date: Wed, 16 May 2012 10:14:52 +0100
+Subject: [PATCH 012/117] fix crash in flush_icache_page_asm on PA1.1
+
+commit 207f583d7179f707f402c36a7bda5ca1fd03ad5b upstream.
+
+As pointed out by serveral people, PA1.1 only has a type 26 instruction
+meaning that the space register must be explicitly encoded.  Not giving an
+explicit space means that the compiler uses the type 24 version which is PA2.0
+only resulting in an illegal instruction crash.
+
+This regression was caused by
+
+    commit f311847c2fcebd81912e2f0caf8a461dec28db41
+    Author: James Bottomley <James.Bottomley@HansenPartnership.com>
+    Date:   Wed Dec 22 10:22:11 2010 -0600
+
+        parisc: flush pages through tmpalias space
+
+Reported-by: Helge Deller <deller@gmx.de>
+Signed-off-by: John David Anglin <dave.anglin@bell.net>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/parisc/kernel/pacache.S |   38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S
+index 93ff3d9..5d7218a 100644
+--- a/arch/parisc/kernel/pacache.S
++++ b/arch/parisc/kernel/pacache.S
+@@ -692,7 +692,7 @@ ENTRY(flush_icache_page_asm)
+ 
+ 	/* Purge any old translation */
+ 
+-	pitlb		(%sr0,%r28)
++	pitlb		(%sr4,%r28)
+ 
+ 	ldil		L%icache_stride, %r1
+ 	ldw		R%icache_stride(%r1), %r1
+@@ -706,27 +706,29 @@ ENTRY(flush_icache_page_asm)
+ 	sub		%r25, %r1, %r25
+ 
+ 
+-1:      fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
+-	fic,m		%r1(%r28)
++	/* fic only has the type 26 form on PA1.1, requiring an
++	 * explicit space specification, so use %sr4 */
++1:      fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
++	fic,m		%r1(%sr4,%r28)
+ 	cmpb,COND(<<)		%r28, %r25,1b
+-	fic,m		%r1(%r28)
++	fic,m		%r1(%sr4,%r28)
+ 
+ 	sync
+ 	bv		%r0(%r2)
+-	pitlb		(%sr0,%r25)
++	pitlb		(%sr4,%r25)
+ 	.exit
+ 
+ 	.procend
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0013-fix-panic-on-prefetch-NULL-on-PA7300LC.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0013-fix-panic-on-prefetch-NULL-on-PA7300LC.patch
new file mode 100644
index 0000000..461025a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0013-fix-panic-on-prefetch-NULL-on-PA7300LC.patch
@@ -0,0 +1,39 @@
+From ae4fc9e89e9e7fb510ddbff1c3ca6d41477f45e1 Mon Sep 17 00:00:00 2001
+From: James Bottomley <JBottomley@Parallels.com>
+Date: Wed, 16 May 2012 11:10:27 +0100
+Subject: [PATCH 013/117] fix panic on prefetch(NULL) on PA7300LC
+
+commit b3cb8674811d1851bbf1486a73d62b90c119b994 upstream.
+
+Due to an errata, the PA7300LC generates a TLB miss interruption even on the
+prefetch instruction.  This means that prefetch(NULL), which is supposed to be
+a nop on linux actually generates a NULL deref fault.  Fix this by testing the
+address of prefetch against NULL before doing the prefetch.
+
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/parisc/include/asm/prefetch.h |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/arch/parisc/include/asm/prefetch.h b/arch/parisc/include/asm/prefetch.h
+index c5edc60..1ee7c82 100644
+--- a/arch/parisc/include/asm/prefetch.h
++++ b/arch/parisc/include/asm/prefetch.h
+@@ -21,7 +21,12 @@
+ #define ARCH_HAS_PREFETCH
+ static inline void prefetch(const void *addr)
+ {
+-	__asm__("ldw 0(%0), %%r0" : : "r" (addr));
++	__asm__(
++#ifndef CONFIG_PA20
++		/* Need to avoid prefetch of NULL on PA7300LC */
++		"	extrw,u,= %0,31,32,%%r0\n"
++#endif
++		"	ldw 0(%0), %%r0" : : "r" (addr));
+ }
+ 
+ /* LDD is a PA2.0 addition. */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0014-arch-tile-Kconfig-remove-pointless-M386-test.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0014-arch-tile-Kconfig-remove-pointless-M386-test.patch
new file mode 100644
index 0000000..abfee03
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0014-arch-tile-Kconfig-remove-pointless-M386-test.patch
@@ -0,0 +1,31 @@
+From 083a3c3d326ad085b05c8606f4ea8594ca6467b8 Mon Sep 17 00:00:00 2001
+From: Chris Metcalf <cmetcalf@tilera.com>
+Date: Tue, 27 Mar 2012 13:47:57 -0400
+Subject: [PATCH 014/117] arch/tile/Kconfig: remove pointless "!M386" test.
+
+commit 8d6951439ef524683057251f1231df232046b6b6 upstream.
+
+Looks like a cut and paste bug from the x86 version.
+
+Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/tile/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
+index 70a0de4..7c9d2d4 100644
+--- a/arch/tile/Kconfig
++++ b/arch/tile/Kconfig
+@@ -12,7 +12,7 @@ config TILE
+ 	select GENERIC_PENDING_IRQ if SMP
+ 	select GENERIC_IRQ_SHOW
+ 	select SYS_HYPERVISOR
+-	select ARCH_HAVE_NMI_SAFE_CMPXCHG if !M386
++	select ARCH_HAVE_NMI_SAFE_CMPXCHG
+ 
+ # FIXME: investigate whether we need/want these options.
+ #	select HAVE_IOREMAP_PROT
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0015-tilegx-enable-SYSCALL_WRAPPERS-support.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0015-tilegx-enable-SYSCALL_WRAPPERS-support.patch
new file mode 100644
index 0000000..593e184
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0015-tilegx-enable-SYSCALL_WRAPPERS-support.patch
@@ -0,0 +1,39 @@
+From 7f297eaca9b90a9be05ebe02c90efca3692136db Mon Sep 17 00:00:00 2001
+From: Chris Metcalf <cmetcalf@tilera.com>
+Date: Fri, 18 May 2012 13:33:24 -0400
+Subject: [PATCH 015/117] tilegx: enable SYSCALL_WRAPPERS support
+
+commit e6d9668e119af44ae5bcd5f1197174531458afe3 upstream.
+
+Some discussion with the glibc mailing lists revealed that this was
+necessary for 64-bit platforms with MIPS-like sign-extension rules
+for 32-bit values.  The original symptom was that passing (uid_t)-1 to
+setreuid() was failing in programs linked -pthread because of the "setxid"
+mechanism for passing setxid-type function arguments to the syscall code.
+SYSCALL_WRAPPERS handles ensuring that all syscall arguments end up with
+proper sign-extension and is thus the appropriate fix for this problem.
+
+On other platforms (s390, powerpc, sparc64, and mips) this was fixed
+in 2.6.28.6.  The general issue is tracked as CVE-2009-0029.
+
+Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/tile/Kconfig |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
+index 7c9d2d4..6cb8319 100644
+--- a/arch/tile/Kconfig
++++ b/arch/tile/Kconfig
+@@ -11,6 +11,7 @@ config TILE
+ 	select GENERIC_IRQ_PROBE
+ 	select GENERIC_PENDING_IRQ if SMP
+ 	select GENERIC_IRQ_SHOW
++	select HAVE_SYSCALL_WRAPPERS if TILEGX
+ 	select SYS_HYPERVISOR
+ 	select ARCH_HAVE_NMI_SAFE_CMPXCHG
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0016-mtd-sm_ftl-fix-typo-in-major-number.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0016-mtd-sm_ftl-fix-typo-in-major-number.patch
new file mode 100644
index 0000000..14de1ba
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0016-mtd-sm_ftl-fix-typo-in-major-number.patch
@@ -0,0 +1,33 @@
+From 183929ad3fad7588523ae70fa91912196d4697db Mon Sep 17 00:00:00 2001
+From: Maxim Levitsky <maximlevitsky@gmail.com>
+Date: Sat, 17 Mar 2012 20:16:53 +0200
+Subject: [PATCH 016/117] mtd: sm_ftl: fix typo in major number.
+
+commit 452380efbd72d8d41f53ea64c8a6ea1fedc4394d upstream.
+
+major == 0 allocates dynamic major, not major == -1
+
+Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
+Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/mtd/sm_ftl.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
+index fddb714..a9ff89ff 100644
+--- a/drivers/mtd/sm_ftl.c
++++ b/drivers/mtd/sm_ftl.c
+@@ -1256,7 +1256,7 @@ static void sm_remove_dev(struct mtd_blktrans_dev *dev)
+ 
+ static struct mtd_blktrans_ops sm_ftl_ops = {
+ 	.name		= "smblk",
+-	.major		= -1,
++	.major		= 0,
+ 	.part_bits	= SM_FTL_PARTN_BITS,
+ 	.blksize	= SM_SECTOR_SIZE,
+ 	.getgeo		= sm_getgeo,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0017-hpsa-Fix-problem-with-MSA2xxx-devices.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0017-hpsa-Fix-problem-with-MSA2xxx-devices.patch
new file mode 100644
index 0000000..58f4fce
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0017-hpsa-Fix-problem-with-MSA2xxx-devices.patch
@@ -0,0 +1,77 @@
+From 3b1c9abc52f8145721d64abf54bf65139554f2be Mon Sep 17 00:00:00 2001
+From: "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
+Date: Thu, 19 Jan 2012 14:01:04 -0600
+Subject: [PATCH 017/117] hpsa: Fix problem with MSA2xxx devices
+
+commit 9bc3711cbb67ac620bf09b4a147cbab45b2c36c0 upstream.
+
+Upgraded firmware on Smart Array P7xx (and some others) made them show up as
+SCSI revision 5 devices and this caused the driver to fail to map MSA2xxx
+logical drives to the correct bus/target/lun.  A symptom of this would be that
+the target ID of the logical drives as presented by the external storage array
+is ignored, and all such logical drives are assigned to target zero,
+differentiated only by LUN.  Some multipath software reportedly does not deal
+well with this behavior, failing to recognize different paths to the same
+device as such.
+
+Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
+Signed-off-by: Scott Teel <scott.teel@hp.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/scsi/hpsa.c |   34 +++++++++++++++-------------------
+ 1 file changed, 15 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
+index 865d452..dc9dea3 100644
+--- a/drivers/scsi/hpsa.c
++++ b/drivers/scsi/hpsa.c
+@@ -1674,30 +1674,26 @@ static void figure_bus_target_lun(struct ctlr_info *h,
+ 
+ 	if (is_logical_dev_addr_mode(lunaddrbytes)) {
+ 		/* logical device */
+-		if (unlikely(is_scsi_rev_5(h))) {
+-			/* p1210m, logical drives lun assignments
+-			 * match SCSI REPORT LUNS data.
++		lunid = le32_to_cpu(*((__le32 *) lunaddrbytes));
++		if (is_msa2xxx(h, device)) {
++			/* msa2xxx way, put logicals on bus 1
++			 * and match target/lun numbers box
++			 * reports.
+ 			 */
+-			lunid = le32_to_cpu(*((__le32 *) lunaddrbytes));
+-			*bus = 0;
+-			*target = 0;
+-			*lun = (lunid & 0x3fff) + 1;
++			*bus = 1;
++			*target = (lunid >> 16) & 0x3fff;
++			*lun = lunid & 0x00ff;
+ 		} else {
+-			/* not p1210m... */
+-			lunid = le32_to_cpu(*((__le32 *) lunaddrbytes));
+-			if (is_msa2xxx(h, device)) {
+-				/* msa2xxx way, put logicals on bus 1
+-				 * and match target/lun numbers box
+-				 * reports.
+-				 */
+-				*bus = 1;
+-				*target = (lunid >> 16) & 0x3fff;
+-				*lun = lunid & 0x00ff;
++			if (likely(is_scsi_rev_5(h))) {
++				/* All current smart arrays (circa 2011) */
++				*bus = 0;
++				*target = 0;
++				*lun = (lunid & 0x3fff) + 1;
+ 			} else {
+-				/* Traditional smart array way. */
++				/* Traditional old smart array way. */
+ 				*bus = 0;
+-				*lun = 0;
+ 				*target = lunid & 0x3fff;
++				*lun = 0;
+ 			}
+ 		}
+ 	} else {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0018-SELinux-if-sel_make_bools-errors-don-t-leave-inconsi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0018-SELinux-if-sel_make_bools-errors-don-t-leave-inconsi.patch
new file mode 100644
index 0000000..dc82d8d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0018-SELinux-if-sel_make_bools-errors-don-t-leave-inconsi.patch
@@ -0,0 +1,34 @@
+From d5263c321d2e9dcacc4eed438d3dad60c13f95ba Mon Sep 17 00:00:00 2001
+From: Eric Paris <eparis@redhat.com>
+Date: Wed, 4 Apr 2012 13:47:11 -0400
+Subject: [PATCH 018/117] SELinux: if sel_make_bools errors don't leave
+ inconsistent state
+
+commit 154c50ca4eb9ae472f50b6a481213e21ead4457d upstream.
+
+We reset the bool names and values array to NULL, but do not reset the
+number of entries in these arrays to 0.  If we error out and then get back
+into this function we will walk these NULL pointers based on the belief
+that they are non-zero length.
+
+Signed-off-by: Eric Paris <eparis@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ security/selinux/selinuxfs.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
+index f466587..b4f802d 100644
+--- a/security/selinux/selinuxfs.c
++++ b/security/selinux/selinuxfs.c
+@@ -1238,6 +1238,7 @@ static int sel_make_bools(void)
+ 		kfree(bool_pending_names[i]);
+ 	kfree(bool_pending_names);
+ 	kfree(bool_pending_values);
++	bool_num = 0;
+ 	bool_pending_names = NULL;
+ 	bool_pending_values = NULL;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0019-cfg80211-warn-if-db.txt-is-empty-with-CONFIG_CFG8021.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0019-cfg80211-warn-if-db.txt-is-empty-with-CONFIG_CFG8021.patch
new file mode 100644
index 0000000..20927de
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0019-cfg80211-warn-if-db.txt-is-empty-with-CONFIG_CFG8021.patch
@@ -0,0 +1,86 @@
+From d9029a9d61ea9f9f8b153d7967365d66229b3874 Mon Sep 17 00:00:00 2001
+From: "Luis R. Rodriguez" <mcgrof@frijolero.org>
+Date: Fri, 23 Mar 2012 07:23:31 -0700
+Subject: [PATCH 019/117] cfg80211: warn if db.txt is empty with
+ CONFIG_CFG80211_INTERNAL_REGDB
+
+commit 80007efeff0568375b08faf93c7aad65602cb97e upstream.
+
+It has happened twice now where elaborate troubleshooting has
+undergone on systems where CONFIG_CFG80211_INTERNAL_REGDB [0]
+has been set but yet net/wireless/db.txt was not updated.
+
+Despite the documentation on this it seems system integrators could
+use some more help with this, so throw out a kernel warning at boot time
+when their database is empty.
+
+This does mean that the error-prone system integrator won't likely
+realize the issue until they boot the machine but -- it does not seem
+to make sense to enable a build bug breaking random build testing.
+
+[0] http://wireless.kernel.org/en/developers/Regulatory/CRDA#CONFIG_CFG80211_INTERNAL_REGDB
+
+Cc: Stephen Rothwell <sfr@canb.auug.org.au>
+Cc: Youngsin Lee <youngsin@qualcomm.com>
+Cc: Raja Mani <rmani@qca.qualcomm.com>
+Cc: Senthil Kumar Balasubramanian <senthilb@qca.qualcomm.com>
+Cc: Vipin Mehta <vipimeht@qca.qualcomm.com>
+Cc: yahuan@qca.qualcomm.com
+Cc: jjan@qca.qualcomm.com
+Cc: vthiagar@qca.qualcomm.com
+Cc: henrykim@qualcomm.com
+Cc: jouni@qca.qualcomm.com
+Cc: athiruve@qca.qualcomm.com
+Cc: cjkim@qualcomm.com
+Cc: philipk@qca.qualcomm.com
+Cc: sunnykim@qualcomm.com
+Cc: sskwak@qualcomm.com
+Cc: kkim@qualcomm.com
+Cc: mattbyun@qualcomm.com
+Cc: ryanlee@qualcomm.com
+Cc: simbap@qualcomm.com
+Cc: krislee@qualcomm.com
+Cc: conner@qualcomm.com
+Cc: hojinkim@qualcomm.com
+Cc: honglee@qualcomm.com
+Cc: johnwkim@qualcomm.com
+Cc: jinyong@qca.qualcomm.com
+Signed-off-by: Luis R. Rodriguez <mcgrof@frijolero.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/wireless/reg.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/net/wireless/reg.c b/net/wireless/reg.c
+index 3302c56..c1c99dd 100644
+--- a/net/wireless/reg.c
++++ b/net/wireless/reg.c
+@@ -379,7 +379,15 @@ static void reg_regdb_query(const char *alpha2)
+ 
+ 	schedule_work(&reg_regdb_work);
+ }
++
++/* Feel free to add any other sanity checks here */
++static void reg_regdb_size_check(void)
++{
++	/* We should ideally BUILD_BUG_ON() but then random builds would fail */
++	WARN_ONCE(!reg_regdb_size, "db.txt is empty, you should update it...");
++}
+ #else
++static inline void reg_regdb_size_check(void) {}
+ static inline void reg_regdb_query(const char *alpha2) {}
+ #endif /* CONFIG_CFG80211_INTERNAL_REGDB */
+ 
+@@ -2236,6 +2244,8 @@ int __init regulatory_init(void)
+ 	spin_lock_init(&reg_requests_lock);
+ 	spin_lock_init(&reg_pending_beacons_lock);
+ 
++	reg_regdb_size_check();
++
+ 	cfg80211_regdomain = cfg80211_world_regdom;
+ 
+ 	user_alpha2[0] = '9';
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0020-mpt2sas-Fix-for-panic-happening-because-of-improper-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0020-mpt2sas-Fix-for-panic-happening-because-of-improper-.patch
new file mode 100644
index 0000000..d27b465
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0020-mpt2sas-Fix-for-panic-happening-because-of-improper-.patch
@@ -0,0 +1,60 @@
+From b12bc1d8337657ea79d90aecba397eaee36d10f6 Mon Sep 17 00:00:00 2001
+From: "nagalakshmi.nandigama@lsi.com" <nagalakshmi.nandigama@lsi.com>
+Date: Tue, 20 Mar 2012 12:10:01 +0530
+Subject: [PATCH 020/117] mpt2sas: Fix for panic happening because of improper
+ memory allocation
+
+commit e42fafc25fa86c61824e8d4c5e7582316415d24f upstream.
+
+The ioc->pfacts member in the IOC structure is getting set to zero
+following a call to _base_get_ioc_facts due to the memset in that routine.
+So if the ioc->pfacts was read after a host reset, there would be a NULL
+pointer dereference. The routine _base_get_ioc_facts is called from context
+of host reset.  The problem in _base_get_ioc_facts  is the size of
+Mpi2IOCFactsReply is 64, whereas the sizeof "struct mpt2sas_facts" is 60,
+so there is a four byte overflow resulting from the memset.
+
+Also, there is memset in _base_get_port_facts using the incorrect structure,
+it should be "struct mpt2sas_port_facts" instead of Mpi2PortFactsReply.
+
+Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/scsi/mpt2sas/mpt2sas_base.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
+index b1ddfef..ac336e1 100644
+--- a/drivers/scsi/mpt2sas/mpt2sas_base.c
++++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
+@@ -3274,7 +3274,7 @@ _base_get_port_facts(struct MPT2SAS_ADAPTER *ioc, int port, int sleep_flag)
+ 	}
+ 
+ 	pfacts = &ioc->pfacts[port];
+-	memset(pfacts, 0, sizeof(Mpi2PortFactsReply_t));
++	memset(pfacts, 0, sizeof(struct mpt2sas_port_facts));
+ 	pfacts->PortNumber = mpi_reply.PortNumber;
+ 	pfacts->VP_ID = mpi_reply.VP_ID;
+ 	pfacts->VF_ID = mpi_reply.VF_ID;
+@@ -3316,7 +3316,7 @@ _base_get_ioc_facts(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
+ 	}
+ 
+ 	facts = &ioc->facts;
+-	memset(facts, 0, sizeof(Mpi2IOCFactsReply_t));
++	memset(facts, 0, sizeof(struct mpt2sas_facts));
+ 	facts->MsgVersion = le16_to_cpu(mpi_reply.MsgVersion);
+ 	facts->HeaderVersion = le16_to_cpu(mpi_reply.HeaderVersion);
+ 	facts->VP_ID = mpi_reply.VP_ID;
+@@ -4193,7 +4193,7 @@ mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc)
+ 		goto out_free_resources;
+ 
+ 	ioc->pfacts = kcalloc(ioc->facts.NumberOfPorts,
+-	    sizeof(Mpi2PortFactsReply_t), GFP_KERNEL);
++	    sizeof(struct mpt2sas_port_facts), GFP_KERNEL);
+ 	if (!ioc->pfacts) {
+ 		r = -ENOMEM;
+ 		goto out_free_resources;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0021-isdn-gigaset-ratelimit-CAPI-message-dumps.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0021-isdn-gigaset-ratelimit-CAPI-message-dumps.patch
new file mode 100644
index 0000000..ba58393
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0021-isdn-gigaset-ratelimit-CAPI-message-dumps.patch
@@ -0,0 +1,87 @@
+From cb510e3381f2dda5ad0cdf3519e6eee50ee2081e Mon Sep 17 00:00:00 2001
+From: Tilman Schmidt <tilman@imap.cc>
+Date: Wed, 25 Apr 2012 13:02:19 +0000
+Subject: [PATCH 021/117] isdn/gigaset: ratelimit CAPI message dumps
+
+commit 8e618aad5348b6e6c5a90e8d97ea643197963b20 upstream.
+
+Introduce a global ratelimit for CAPI message dumps to protect
+against possible log flood.
+Drop the ratelimit for ignored messages which is now covered by the
+global one.
+
+Signed-off-by: Tilman Schmidt <tilman@imap.cc>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/isdn/gigaset/capi.c |   22 +++++++++-------------
+ 1 file changed, 9 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
+index 6d5ceee..5b80ef7 100644
+--- a/drivers/isdn/gigaset/capi.c
++++ b/drivers/isdn/gigaset/capi.c
+@@ -14,6 +14,7 @@
+ #include "gigaset.h"
+ #include <linux/proc_fs.h>
+ #include <linux/seq_file.h>
++#include <linux/ratelimit.h>
+ #include <linux/isdn/capilli.h>
+ #include <linux/isdn/capicmd.h>
+ #include <linux/isdn/capiutil.h>
+@@ -223,10 +224,14 @@ get_appl(struct gigaset_capi_ctr *iif, u16 appl)
+ static inline void dump_cmsg(enum debuglevel level, const char *tag, _cmsg *p)
+ {
+ #ifdef CONFIG_GIGASET_DEBUG
++	/* dump at most 20 messages in 20 secs */
++	static DEFINE_RATELIMIT_STATE(msg_dump_ratelimit, 20 * HZ, 20);
+ 	_cdebbuf *cdb;
+ 
+ 	if (!(gigaset_debuglevel & level))
+ 		return;
++	if (!___ratelimit(&msg_dump_ratelimit, tag))
++		return;
+ 
+ 	cdb = capi_cmsg2str(p);
+ 	if (cdb) {
+@@ -2059,12 +2064,6 @@ static void do_reset_b3_req(struct gigaset_capi_ctr *iif,
+ }
+ 
+ /*
+- * dump unsupported/ignored messages at most twice per minute,
+- * some apps send those very frequently
+- */
+-static unsigned long ignored_msg_dump_time;
+-
+-/*
+  * unsupported CAPI message handler
+  */
+ static void do_unsupported(struct gigaset_capi_ctr *iif,
+@@ -2073,8 +2072,7 @@ static void do_unsupported(struct gigaset_capi_ctr *iif,
+ {
+ 	/* decode message */
+ 	capi_message2cmsg(&iif->acmsg, skb->data);
+-	if (printk_timed_ratelimit(&ignored_msg_dump_time, 30 * 1000))
+-		dump_cmsg(DEBUG_CMD, __func__, &iif->acmsg);
++	dump_cmsg(DEBUG_CMD, __func__, &iif->acmsg);
+ 	send_conf(iif, ap, skb, CapiMessageNotSupportedInCurrentState);
+ }
+ 
+@@ -2085,11 +2083,9 @@ static void do_nothing(struct gigaset_capi_ctr *iif,
+ 		       struct gigaset_capi_appl *ap,
+ 		       struct sk_buff *skb)
+ {
+-	if (printk_timed_ratelimit(&ignored_msg_dump_time, 30 * 1000)) {
+-		/* decode message */
+-		capi_message2cmsg(&iif->acmsg, skb->data);
+-		dump_cmsg(DEBUG_CMD, __func__, &iif->acmsg);
+-	}
++	/* decode message */
++	capi_message2cmsg(&iif->acmsg, skb->data);
++	dump_cmsg(DEBUG_CMD, __func__, &iif->acmsg);
+ 	dev_kfree_skb_any(skb);
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0022-isdn-gigaset-fix-CAPI-disconnect-B3-handling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0022-isdn-gigaset-fix-CAPI-disconnect-B3-handling.patch
new file mode 100644
index 0000000..92a5406
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0022-isdn-gigaset-fix-CAPI-disconnect-B3-handling.patch
@@ -0,0 +1,46 @@
+From 49aed427d03f5bc84f690900a4a13c52b4c0916c Mon Sep 17 00:00:00 2001
+From: Tilman Schmidt <tilman@imap.cc>
+Date: Wed, 25 Apr 2012 13:02:20 +0000
+Subject: [PATCH 022/117] isdn/gigaset: fix CAPI disconnect B3 handling
+
+commit 62a1cfe052346b96a552b6a9178d412c709711bb upstream.
+
+If DISCONNECT_B3_IND was synthesized because of a DISCONNECT_REQ
+with existing logical connections, the connection state wasn't
+updated accordingly. Also the emitted DISCONNECT_B3_IND message
+wasn't included in the debug log as requested.
+This patch fixes both of these issues.
+
+Signed-off-by: Tilman Schmidt <tilman@imap.cc>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/isdn/gigaset/capi.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
+index 5b80ef7..fd17bb3 100644
+--- a/drivers/isdn/gigaset/capi.c
++++ b/drivers/isdn/gigaset/capi.c
+@@ -1887,6 +1887,9 @@ static void do_disconnect_req(struct gigaset_capi_ctr *iif,
+ 
+ 	/* check for active logical connection */
+ 	if (bcs->apconnstate >= APCONN_ACTIVE) {
++		/* clear it */
++		bcs->apconnstate = APCONN_SETUP;
++
+ 		/*
+ 		 * emit DISCONNECT_B3_IND with cause 0x3301
+ 		 * use separate cmsg structure, as the content of iif->acmsg
+@@ -1911,6 +1914,7 @@ static void do_disconnect_req(struct gigaset_capi_ctr *iif,
+ 		}
+ 		capi_cmsg2message(b3cmsg,
+ 			__skb_put(b3skb, CAPI_DISCONNECT_B3_IND_BASELEN));
++		dump_cmsg(DEBUG_CMD, __func__, b3cmsg);
+ 		kfree(b3cmsg);
+ 		capi_ctr_handle_message(&iif->ctr, ap->id, b3skb);
+ 	}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0023-isdn-gigaset-improve-error-handling-querying-firmwar.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0023-isdn-gigaset-improve-error-handling-querying-firmwar.patch
new file mode 100644
index 0000000..efbdbbb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0023-isdn-gigaset-improve-error-handling-querying-firmwar.patch
@@ -0,0 +1,47 @@
+From acee45e91a831a741676284dc84513b074705805 Mon Sep 17 00:00:00 2001
+From: Tilman Schmidt <tilman@imap.cc>
+Date: Wed, 25 Apr 2012 13:02:20 +0000
+Subject: [PATCH 023/117] isdn/gigaset: improve error handling querying
+ firmware version
+
+commit e055d03dc088a990fe5ea24a2d64033a168da23c upstream.
+
+An out-of-place "OK" response to the "AT+GMR" (get firmware version)
+command turns out to be, more often than not, a delayed response to
+a previous command rather than an actual error, so continue waiting
+for the version number in that case.
+
+Signed-off-by: Tilman Schmidt <tilman@imap.cc>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+[bwh: Backported to 3.2: adjust indentation]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/isdn/gigaset/ev-layer.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/isdn/gigaset/ev-layer.c b/drivers/isdn/gigaset/ev-layer.c
+index 6d12623..e95fac0 100644
+--- a/drivers/isdn/gigaset/ev-layer.c
++++ b/drivers/isdn/gigaset/ev-layer.c
+@@ -190,6 +190,7 @@ struct reply_t gigaset_tab_nocid[] =
+ 							  ACT_INIT} },
+ {RSP_OK,	121, 121, -1,			  0,  0, {ACT_GOTVER,
+ 							  ACT_INIT} },
++{RSP_NONE,	121, 121, -1,			120,  0, {ACT_GETSTRING} },
+ 
+ /* leave dle mode */
+ {RSP_INIT,	  0,   0, SEQ_DLE0,		201,  5, {0},	"^SDLE=0\r"},
+@@ -1314,8 +1315,9 @@ static void do_action(int action, struct cardstate *cs,
+ 		s = ev->ptr;
+ 
+ 		if (!strcmp(s, "OK")) {
++			/* OK without version string: assume old response */
+ 			*p_genresp = 1;
+-			*p_resp_code = RSP_ERROR;
++			*p_resp_code = RSP_NONE;
+ 			break;
+ 		}
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0024-KEYS-Use-the-compat-keyctl-syscall-wrapper-on-Sparc6.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0024-KEYS-Use-the-compat-keyctl-syscall-wrapper-on-Sparc6.patch
new file mode 100644
index 0000000..52b1d96
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0024-KEYS-Use-the-compat-keyctl-syscall-wrapper-on-Sparc6.patch
@@ -0,0 +1,60 @@
+From ab5b15d0550f35ed49bb445fe04092d8b6fac542 Mon Sep 17 00:00:00 2001
+From: David Howells <dhowells@redhat.com>
+Date: Fri, 11 May 2012 10:56:56 +0100
+Subject: [PATCH 024/117] KEYS: Use the compat keyctl() syscall wrapper on
+ Sparc64 for Sparc32 compat
+
+commit 45de6767dc51358a188f75dc4ad9dfddb7fb9480 upstream.
+
+Use the 32-bit compat keyctl() syscall wrapper on Sparc64 for Sparc32 binary
+compatibility.
+
+Without this, keyctl(KEYCTL_INSTANTIATE_IOV) is liable to malfunction as it
+uses an iovec array read from userspace - though the kernel should survive this
+as it checks pointers and sizes anyway.
+
+I think all the other keyctl() function should just work, provided (a) the top
+32-bits of each 64-bit argument register are cleared prior to invoking the
+syscall routine, and the 32-bit address space is right at the 0-end of the
+64-bit address space.  Most of the arguments are 32-bit anyway, and so for
+those clearing is not required.
+
+Signed-off-by: David Howells <dhowells@redhat.com
+cc: "David S. Miller" <davem@davemloft.net>
+cc: sparclinux@vger.kernel.org
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/sparc/Kconfig             |    3 +++
+ arch/sparc/kernel/systbls_64.S |    2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
+index f92602e..f210d51 100644
+--- a/arch/sparc/Kconfig
++++ b/arch/sparc/Kconfig
+@@ -583,6 +583,9 @@ config SYSVIPC_COMPAT
+ 	depends on COMPAT && SYSVIPC
+ 	default y
+ 
++config KEYS_COMPAT
++	def_bool y if COMPAT && KEYS
++
+ endmenu
+ 
+ source "net/Kconfig"
+diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S
+index db86b1a..3a58e0d 100644
+--- a/arch/sparc/kernel/systbls_64.S
++++ b/arch/sparc/kernel/systbls_64.S
+@@ -74,7 +74,7 @@ sys_call_table32:
+ 	.word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy
+ /*270*/	.word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
+ 	.word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
+-/*280*/	.word sys32_tee, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat
++/*280*/	.word sys32_tee, sys_add_key, sys_request_key, compat_sys_keyctl, compat_sys_openat
+ 	.word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64
+ /*290*/	.word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
+ 	.word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0025-IB-core-Fix-mismatch-between-locked-and-pinned-pages.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0025-IB-core-Fix-mismatch-between-locked-and-pinned-pages.patch
new file mode 100644
index 0000000..fe3c1e7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0025-IB-core-Fix-mismatch-between-locked-and-pinned-pages.patch
@@ -0,0 +1,38 @@
+From a107ab4ce96a6243eca41ca139acc033a8be253b Mon Sep 17 00:00:00 2001
+From: Yishai Hadas <yishaih@mellanox.com>
+Date: Thu, 10 May 2012 23:28:05 +0300
+Subject: [PATCH 025/117] IB/core: Fix mismatch between locked and pinned
+ pages
+
+commit c4870eb874ac16dccef40e1bc7a002c7e9156adc upstream.
+
+Commit bc3e53f682d9 ("mm: distinguish between mlocked and pinned
+pages") introduced a separate counter for pinned pages and used it in
+the IB stack.  However, in ib_umem_get() the pinned counter is
+incremented, but ib_umem_release() wrongly decrements the locked
+counter.  Fix this.
+
+Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
+Reviewed-by: Christoph Lameter <cl@linux.com>
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/infiniband/core/umem.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
+index 71f0c0f..a841123 100644
+--- a/drivers/infiniband/core/umem.c
++++ b/drivers/infiniband/core/umem.c
+@@ -269,7 +269,7 @@ void ib_umem_release(struct ib_umem *umem)
+ 	} else
+ 		down_write(&mm->mmap_sem);
+ 
+-	current->mm->locked_vm -= diff;
++	current->mm->pinned_vm -= diff;
+ 	up_write(&mm->mmap_sem);
+ 	mmput(mm);
+ 	kfree(umem);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0026-regulator-core-Release-regulator-regulator-supplies-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0026-regulator-core-Release-regulator-regulator-supplies-.patch
new file mode 100644
index 0000000..027fb88
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0026-regulator-core-Release-regulator-regulator-supplies-.patch
@@ -0,0 +1,34 @@
+From 675478b722ec5e21b9e1db453e3c59ced85b2008 Mon Sep 17 00:00:00 2001
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Date: Sun, 13 May 2012 18:35:56 +0100
+Subject: [PATCH 026/117] regulator: core: Release regulator-regulator
+ supplies on error
+
+commit e81dba85c6388dfabcb76cbc2b8bd02836a53ae5 upstream.
+
+If we fail while registering a regulator make sure we release the supply
+for the regulator if there is one.
+
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Acked-by: Liam Girdwood <lrg@ti.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/regulator/core.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
+index 938398f..6ec610c 100644
+--- a/drivers/regulator/core.c
++++ b/drivers/regulator/core.c
+@@ -2765,6 +2765,8 @@ unset_supplies:
+ 	unset_regulator_supplies(rdev);
+ 
+ scrub:
++	if (rdev->supply)
++		regulator_put(rdev->supply);
+ 	kfree(rdev->constraints);
+ 	device_unregister(&rdev->dev);
+ 	/* device core frees rdev */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0027-iommu-Fix-off-by-one-in-dmar_get_fault_reason.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0027-iommu-Fix-off-by-one-in-dmar_get_fault_reason.patch
new file mode 100644
index 0000000..4ab581b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0027-iommu-Fix-off-by-one-in-dmar_get_fault_reason.patch
@@ -0,0 +1,41 @@
+From 3dd0f718e41c8a6e580d3c11f8153ffd7ddeacde Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Sun, 13 May 2012 20:09:38 +0300
+Subject: [PATCH 027/117] iommu: Fix off by one in dmar_get_fault_reason()
+
+commit fefe1ed1398b81e3fadc92d11d91162d343c8836 upstream.
+
+fault_reason - 0x20 == ARRAY_SIZE(irq_remap_fault_reasons) is
+one past the end of the array.
+
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Cc: Joerg Roedel <joerg.roedel@amd.com>
+Cc: Youquan Song <youquan.song@intel.com>
+Cc: walter harms <wharms@bfs.de>
+Cc: Suresh Siddha <suresh.b.siddha@intel.com>
+Link: http://lkml.kernel.org/r/20120513170938.GA4280@elgon.mountain
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+[bwh: Backported to 3.2: s/irq_remap_fault_reasons/intr_remap_fault_reasons/]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/iommu/dmar.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
+index 35c1e17..97b2e21 100644
+--- a/drivers/iommu/dmar.c
++++ b/drivers/iommu/dmar.c
+@@ -1056,8 +1056,8 @@ static const char *intr_remap_fault_reasons[] =
+ 
+ const char *dmar_get_fault_reason(u8 fault_reason, int *fault_type)
+ {
+-	if (fault_reason >= 0x20 && (fault_reason <= 0x20 +
+-				     ARRAY_SIZE(intr_remap_fault_reasons))) {
++	if (fault_reason >= 0x20 && (fault_reason - 0x20 <
++					ARRAY_SIZE(intr_remap_fault_reasons))) {
+ 		*fault_type = INTR_REMAP;
+ 		return intr_remap_fault_reasons[fault_reason - 0x20];
+ 	} else if (fault_reason < ARRAY_SIZE(dma_remap_fault_reasons)) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0028-RDMA-cxgb4-Always-wake-up-waiters-in-c4iw_peer_abort.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0028-RDMA-cxgb4-Always-wake-up-waiters-in-c4iw_peer_abort.patch
new file mode 100644
index 0000000..9fde99c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0028-RDMA-cxgb4-Always-wake-up-waiters-in-c4iw_peer_abort.patch
@@ -0,0 +1,38 @@
+From e8cefa61ecf62e7ec98658843627df00696699d5 Mon Sep 17 00:00:00 2001
+From: Steve Wise <swise@opengridcomputing.com>
+Date: Fri, 27 Apr 2012 09:59:16 -0500
+Subject: [PATCH 028/117] RDMA/cxgb4: Always wake up waiters in
+ c4iw_peer_abort_intr()
+
+commit 0f1dcfae6bc5563424346ad3a03282b8235a4c33 upstream.
+
+This fixes a race where an ingress abort fails to wake up the thread
+blocked in rdma_init() causing the app to hang.
+
+Signed-off-by: Steve Wise <swise@opengridcomputing.com>
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/infiniband/hw/cxgb4/cm.c |    5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
+index 0747004..151334c 100644
+--- a/drivers/infiniband/hw/cxgb4/cm.c
++++ b/drivers/infiniband/hw/cxgb4/cm.c
+@@ -2725,11 +2725,8 @@ static int peer_abort_intr(struct c4iw_dev *dev, struct sk_buff *skb)
+ 
+ 	/*
+ 	 * Wake up any threads in rdma_init() or rdma_fini().
+-	 * However, this is not needed if com state is just
+-	 * MPA_REQ_SENT
+ 	 */
+-	if (ep->com.state != MPA_REQ_SENT)
+-		c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET);
++	c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET);
+ 	sched(dev, skb);
+ 	return 0;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0029-RDMA-cxgb4-Drop-peer_abort-when-no-endpoint-found.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0029-RDMA-cxgb4-Drop-peer_abort-when-no-endpoint-found.patch
new file mode 100644
index 0000000..99be4e3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0029-RDMA-cxgb4-Drop-peer_abort-when-no-endpoint-found.patch
@@ -0,0 +1,37 @@
+From 6ccdd0ede34681b1bdda91a5735e700274db9e5c Mon Sep 17 00:00:00 2001
+From: Steve Wise <swise@opengridcomputing.com>
+Date: Mon, 30 Apr 2012 15:31:29 -0500
+Subject: [PATCH 029/117] RDMA/cxgb4: Drop peer_abort when no endpoint found
+
+commit 14b9222808bb8bfefc71f72bc0dbdcf3b2f0140f upstream.
+
+Log a warning and drop the abort message.  Otherwise we will do a
+bogus wake_up() and crash.
+
+Signed-off-by: Steve Wise <swise@opengridcomputing.com>
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/infiniband/hw/cxgb4/cm.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
+index 151334c..2e6a538 100644
+--- a/drivers/infiniband/hw/cxgb4/cm.c
++++ b/drivers/infiniband/hw/cxgb4/cm.c
+@@ -2714,6 +2714,12 @@ static int peer_abort_intr(struct c4iw_dev *dev, struct sk_buff *skb)
+ 	unsigned int tid = GET_TID(req);
+ 
+ 	ep = lookup_tid(t, tid);
++	if (!ep) {
++		printk(KERN_WARNING MOD
++		       "Abort on non-existent endpoint, tid %d\n", tid);
++		kfree_skb(skb);
++		return 0;
++	}
+ 	if (is_neg_adv_abort(req->status)) {
+ 		PDBG("%s neg_adv_abort ep %p tid %u\n", __func__, ep,
+ 		     ep->hwtid);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0030-s390-pfault-fix-task-state-race.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0030-s390-pfault-fix-task-state-race.patch
new file mode 100644
index 0000000..bd7759f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0030-s390-pfault-fix-task-state-race.patch
@@ -0,0 +1,82 @@
+From f292f8180fb1ab073d5e88859f3d05608fa1fbe7 Mon Sep 17 00:00:00 2001
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+Date: Wed, 9 May 2012 09:37:30 +0200
+Subject: [PATCH 030/117] s390/pfault: fix task state race
+
+commit d5e50a51ccbda36b379aba9d1131a852eb908dda upstream.
+
+When setting the current task state to TASK_UNINTERRUPTIBLE this can
+race with a different cpu. The other cpu could set the task state after
+it inspected it (while it was still TASK_RUNNING) to TASK_RUNNING which
+would change the state from TASK_UNINTERRUPTIBLE to TASK_RUNNING again.
+
+This race was always present in the pfault interrupt code but didn't
+cause anything harmful before commit f2db2e6c "[S390] pfault: cpu hotplug
+vs missing completion interrupts" which relied on the fact that after
+setting the task state to TASK_UNINTERRUPTIBLE the task would really
+sleep.
+Since this is not necessarily the case the result may be a list corruption
+of the pfault_list or, as observed, a use-after-free bug while trying to
+access the task_struct of a task which terminated itself already.
+
+To fix this, we need to get a reference of the affected task when receiving
+the initial pfault interrupt and add special handling if we receive yet
+another initial pfault interrupt when the task is already enqueued in the
+pfault list.
+
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/s390/mm/fault.c |   14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
+index c7f0fbc..b28aaa4 100644
+--- a/arch/s390/mm/fault.c
++++ b/arch/s390/mm/fault.c
+@@ -583,6 +583,7 @@ static void pfault_interrupt(unsigned int ext_int_code,
+ 			tsk->thread.pfault_wait = 0;
+ 			list_del(&tsk->thread.list);
+ 			wake_up_process(tsk);
++			put_task_struct(tsk);
+ 		} else {
+ 			/* Completion interrupt was faster than initial
+ 			 * interrupt. Set pfault_wait to -1 so the initial
+@@ -597,14 +598,22 @@ static void pfault_interrupt(unsigned int ext_int_code,
+ 		put_task_struct(tsk);
+ 	} else {
+ 		/* signal bit not set -> a real page is missing. */
+-		if (tsk->thread.pfault_wait == -1) {
++		if (tsk->thread.pfault_wait == 1) {
++			/* Already on the list with a reference: put to sleep */
++			set_task_state(tsk, TASK_UNINTERRUPTIBLE);
++			set_tsk_need_resched(tsk);
++		} else if (tsk->thread.pfault_wait == -1) {
+ 			/* Completion interrupt was faster than the initial
+ 			 * interrupt (pfault_wait == -1). Set pfault_wait
+ 			 * back to zero and exit. */
+ 			tsk->thread.pfault_wait = 0;
+ 		} else {
+ 			/* Initial interrupt arrived before completion
+-			 * interrupt. Let the task sleep. */
++			 * interrupt. Let the task sleep.
++			 * An extra task reference is needed since a different
++			 * cpu may set the task state to TASK_RUNNING again
++			 * before the scheduler is reached. */
++			get_task_struct(tsk);
+ 			tsk->thread.pfault_wait = 1;
+ 			list_add(&tsk->thread.list, &pfault_list);
+ 			set_task_state(tsk, TASK_UNINTERRUPTIBLE);
+@@ -629,6 +638,7 @@ static int __cpuinit pfault_cpu_notify(struct notifier_block *self,
+ 			list_del(&thread->list);
+ 			tsk = container_of(thread, struct task_struct, thread);
+ 			wake_up_process(tsk);
++			put_task_struct(tsk);
+ 		}
+ 		spin_unlock_irq(&pfault_lock);
+ 		break;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0031-isci-fix-oem-parameter-validation-on-single-controll.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0031-isci-fix-oem-parameter-validation-on-single-controll.patch
new file mode 100644
index 0000000..000d1dc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0031-isci-fix-oem-parameter-validation-on-single-controll.patch
@@ -0,0 +1,46 @@
+From 51945640120dea3c9b3a0207bc864138c6c1c8a8 Mon Sep 17 00:00:00 2001
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Mon, 30 Apr 2012 11:57:44 -0700
+Subject: [PATCH 031/117] isci: fix oem parameter validation on single
+ controller skus
+
+commit fc25f79af321c01a739150ba2c09435cf977a63d upstream.
+
+OEM parameters [1] are parsed from the platform option-rom / efi
+driver.  By default the driver was validating the parameters for the
+dual-controller case, but in single-controller case only the first set
+of parameters may be valid.
+
+Limit the validation to the number of actual controllers detected
+otherwise the driver may fail to parse the valid parameters leading to
+driver-load or runtime failures.
+
+[1] the platform specific set of phy address, configuration,and analog
+    tuning values
+
+[stable v3.0+]
+Reported-by: Dave Jiang <dave.jiang@intel.com>
+Tested-by: Dave Jiang <dave.jiang@intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/scsi/isci/init.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c
+index a97edab..83d08b6 100644
+--- a/drivers/scsi/isci/init.c
++++ b/drivers/scsi/isci/init.c
+@@ -465,7 +465,7 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic
+ 	if (!orom)
+ 		orom = isci_request_oprom(pdev);
+ 
+-	for (i = 0; orom && i < ARRAY_SIZE(orom->ctrl); i++) {
++	for (i = 0; orom && i < num_controllers(pdev); i++) {
+ 		if (sci_oem_parameters_validate(&orom->ctrl[i])) {
+ 			dev_warn(&pdev->dev,
+ 				 "[%d]: invalid oem parameters detected, falling back to firmware\n", i);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0032-Fix-blocking-allocations-called-very-early-during-bo.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0032-Fix-blocking-allocations-called-very-early-during-bo.patch
new file mode 100644
index 0000000..231e430
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0032-Fix-blocking-allocations-called-very-early-during-bo.patch
@@ -0,0 +1,69 @@
+From 193433aeaf9380a822cd4bf7f5777e70b2e86550 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Mon, 21 May 2012 12:52:42 -0700
+Subject: [PATCH 032/117] Fix blocking allocations called very early during
+ bootup
+
+commit 31a67102f4762df5544bc2dfb34a931233d2a5b2 upstream.
+
+During early boot, when the scheduler hasn't really been fully set up,
+we really can't do blocking allocations because with certain (dubious)
+configurations the "might_resched()" calls can actually result in
+scheduling events.
+
+We could just make such users always use GFP_ATOMIC, but quite often the
+code that does the allocation isn't really aware of the fact that the
+scheduler isn't up yet, and forcing that kind of random knowledge on the
+initialization code is just annoying and not good for anybody.
+
+And we actually have a the 'gfp_allowed_mask' exactly for this reason:
+it's just that the kernel init sequence happens to set it to allow
+blocking allocations much too early.
+
+So move the 'gfp_allowed_mask' initialization from 'start_kernel()'
+(which is some of the earliest init code, and runs with preemption
+disabled for good reasons) into 'kernel_init()'.  kernel_init() is run
+in the newly created thread that will become the 'init' process, as
+opposed to the early startup code that runs within the context of what
+will be the first idle thread.
+
+So by the time we reach 'kernel_init()', we know that the scheduler must
+be at least limping along, because we've already scheduled from the idle
+thread into the init thread.
+
+Reported-by: Steven Rostedt <rostedt@goodmis.org>
+Cc: David Rientjes <rientjes@google.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ init/main.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/init/main.c b/init/main.c
+index 217ed23..cb08fea2 100644
+--- a/init/main.c
++++ b/init/main.c
+@@ -563,9 +563,6 @@ asmlinkage void __init start_kernel(void)
+ 	early_boot_irqs_disabled = false;
+ 	local_irq_enable();
+ 
+-	/* Interrupts are enabled now so all GFP allocations are safe. */
+-	gfp_allowed_mask = __GFP_BITS_MASK;
+-
+ 	kmem_cache_init_late();
+ 
+ 	/*
+@@ -798,6 +795,10 @@ static int __init kernel_init(void * unused)
+ 	 * Wait until kthreadd is all set-up.
+ 	 */
+ 	wait_for_completion(&kthreadd_done);
++
++	/* Now the scheduler is fully set up and can do blocking allocations */
++	gfp_allowed_mask = __GFP_BITS_MASK;
++
+ 	/*
+ 	 * init can allocate pages on any node
+ 	 */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0033-vfs-make-AIO-use-the-proper-rw_verify_area-area-help.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0033-vfs-make-AIO-use-the-proper-rw_verify_area-area-help.patch
new file mode 100644
index 0000000..e496eb2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0033-vfs-make-AIO-use-the-proper-rw_verify_area-area-help.patch
@@ -0,0 +1,109 @@
+From 078dda1f3c0c180fc5d408f9f087752a0afbed3f Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Mon, 21 May 2012 16:06:20 -0700
+Subject: [PATCH 033/117] vfs: make AIO use the proper rw_verify_area() area
+ helpers
+
+commit a70b52ec1aaeaf60f4739edb1b422827cb6f3893 upstream.
+
+We had for some reason overlooked the AIO interface, and it didn't use
+the proper rw_verify_area() helper function that checks (for example)
+mandatory locking on the file, and that the size of the access doesn't
+cause us to overflow the provided offset limits etc.
+
+Instead, AIO did just the security_file_permission() thing (that
+rw_verify_area() also does) directly.
+
+This fixes it to do all the proper helper functions, which not only
+means that now mandatory file locking works with AIO too, we can
+actually remove lines of code.
+
+Reported-by: Manish Honap <manish_honap_vit@yahoo.co.in>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/aio.c |   30 ++++++++++++++----------------
+ 1 file changed, 14 insertions(+), 16 deletions(-)
+
+diff --git a/fs/aio.c b/fs/aio.c
+index b9d64d8..3b65ee7 100644
+--- a/fs/aio.c
++++ b/fs/aio.c
+@@ -1477,6 +1477,10 @@ static ssize_t aio_setup_vectored_rw(int type, struct kiocb *kiocb, bool compat)
+ 	if (ret < 0)
+ 		goto out;
+ 
++	ret = rw_verify_area(type, kiocb->ki_filp, &kiocb->ki_pos, ret);
++	if (ret < 0)
++		goto out;
++
+ 	kiocb->ki_nr_segs = kiocb->ki_nbytes;
+ 	kiocb->ki_cur_seg = 0;
+ 	/* ki_nbytes/left now reflect bytes instead of segs */
+@@ -1488,11 +1492,17 @@ out:
+ 	return ret;
+ }
+ 
+-static ssize_t aio_setup_single_vector(struct kiocb *kiocb)
++static ssize_t aio_setup_single_vector(int type, struct file * file, struct kiocb *kiocb)
+ {
++	int bytes;
++
++	bytes = rw_verify_area(type, file, &kiocb->ki_pos, kiocb->ki_left);
++	if (bytes < 0)
++		return bytes;
++
+ 	kiocb->ki_iovec = &kiocb->ki_inline_vec;
+ 	kiocb->ki_iovec->iov_base = kiocb->ki_buf;
+-	kiocb->ki_iovec->iov_len = kiocb->ki_left;
++	kiocb->ki_iovec->iov_len = bytes;
+ 	kiocb->ki_nr_segs = 1;
+ 	kiocb->ki_cur_seg = 0;
+ 	return 0;
+@@ -1517,10 +1527,7 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb, bool compat)
+ 		if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf,
+ 			kiocb->ki_left)))
+ 			break;
+-		ret = security_file_permission(file, MAY_READ);
+-		if (unlikely(ret))
+-			break;
+-		ret = aio_setup_single_vector(kiocb);
++		ret = aio_setup_single_vector(READ, file, kiocb);
+ 		if (ret)
+ 			break;
+ 		ret = -EINVAL;
+@@ -1535,10 +1542,7 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb, bool compat)
+ 		if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf,
+ 			kiocb->ki_left)))
+ 			break;
+-		ret = security_file_permission(file, MAY_WRITE);
+-		if (unlikely(ret))
+-			break;
+-		ret = aio_setup_single_vector(kiocb);
++		ret = aio_setup_single_vector(WRITE, file, kiocb);
+ 		if (ret)
+ 			break;
+ 		ret = -EINVAL;
+@@ -1549,9 +1553,6 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb, bool compat)
+ 		ret = -EBADF;
+ 		if (unlikely(!(file->f_mode & FMODE_READ)))
+ 			break;
+-		ret = security_file_permission(file, MAY_READ);
+-		if (unlikely(ret))
+-			break;
+ 		ret = aio_setup_vectored_rw(READ, kiocb, compat);
+ 		if (ret)
+ 			break;
+@@ -1563,9 +1564,6 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb, bool compat)
+ 		ret = -EBADF;
+ 		if (unlikely(!(file->f_mode & FMODE_WRITE)))
+ 			break;
+-		ret = security_file_permission(file, MAY_WRITE);
+-		if (unlikely(ret))
+-			break;
+ 		ret = aio_setup_vectored_rw(WRITE, kiocb, compat);
+ 		if (ret)
+ 			break;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0034-docs-update-HOWTO-for-2.6.x-3.x-versioning.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0034-docs-update-HOWTO-for-2.6.x-3.x-versioning.patch
new file mode 100644
index 0000000..2539418
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0034-docs-update-HOWTO-for-2.6.x-3.x-versioning.patch
@@ -0,0 +1,100 @@
+From d2c7de1fefbc917e3731bf69e18b553b3c7a165f Mon Sep 17 00:00:00 2001
+From: Kees Cook <keescook@chromium.org>
+Date: Wed, 18 Apr 2012 23:16:45 -0700
+Subject: [PATCH 034/117] docs: update HOWTO for 2.6.x -> 3.x versioning
+
+commit 591bfc6bf9e5e25e464fd4c87d64afd5135667c4 upstream.
+
+The HOWTO document needed updating for the new kernel versioning. The
+git URI for -next was updated as well.
+
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ Documentation/HOWTO |   32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/Documentation/HOWTO b/Documentation/HOWTO
+index f7ade3b..59c080f 100644
+--- a/Documentation/HOWTO
++++ b/Documentation/HOWTO
+@@ -218,16 +218,16 @@ The development process
+ Linux kernel development process currently consists of a few different
+ main kernel "branches" and lots of different subsystem-specific kernel
+ branches.  These different branches are:
+-  - main 2.6.x kernel tree
+-  - 2.6.x.y -stable kernel tree
+-  - 2.6.x -git kernel patches
++  - main 3.x kernel tree
++  - 3.x.y -stable kernel tree
++  - 3.x -git kernel patches
+   - subsystem specific kernel trees and patches
+-  - the 2.6.x -next kernel tree for integration tests
++  - the 3.x -next kernel tree for integration tests
+ 
+-2.6.x kernel tree
++3.x kernel tree
+ -----------------
+-2.6.x kernels are maintained by Linus Torvalds, and can be found on
+-kernel.org in the pub/linux/kernel/v2.6/ directory.  Its development
++3.x kernels are maintained by Linus Torvalds, and can be found on
++kernel.org in the pub/linux/kernel/v3.x/ directory.  Its development
+ process is as follows:
+   - As soon as a new kernel is released a two weeks window is open,
+     during this period of time maintainers can submit big diffs to
+@@ -262,20 +262,20 @@ mailing list about kernel releases:
+ 	released according to perceived bug status, not according to a
+ 	preconceived timeline."
+ 
+-2.6.x.y -stable kernel tree
++3.x.y -stable kernel tree
+ ---------------------------
+-Kernels with 4-part versions are -stable kernels. They contain
++Kernels with 3-part versions are -stable kernels. They contain
+ relatively small and critical fixes for security problems or significant
+-regressions discovered in a given 2.6.x kernel.
++regressions discovered in a given 3.x kernel.
+ 
+ This is the recommended branch for users who want the most recent stable
+ kernel and are not interested in helping test development/experimental
+ versions.
+ 
+-If no 2.6.x.y kernel is available, then the highest numbered 2.6.x
++If no 3.x.y kernel is available, then the highest numbered 3.x
+ kernel is the current stable kernel.
+ 
+-2.6.x.y are maintained by the "stable" team <stable@vger.kernel.org>, and
++3.x.y are maintained by the "stable" team <stable@vger.kernel.org>, and
+ are released as needs dictate.  The normal release period is approximately
+ two weeks, but it can be longer if there are no pressing problems.  A
+ security-related problem, instead, can cause a release to happen almost
+@@ -285,7 +285,7 @@ The file Documentation/stable_kernel_rules.txt in the kernel tree
+ documents what kinds of changes are acceptable for the -stable tree, and
+ how the release process works.
+ 
+-2.6.x -git patches
++3.x -git patches
+ ------------------
+ These are daily snapshots of Linus' kernel tree which are managed in a
+ git repository (hence the name.) These patches are usually released
+@@ -317,13 +317,13 @@ revisions to it, and maintainers can mark patches as under review,
+ accepted, or rejected.  Most of these patchwork sites are listed at
+ http://patchwork.kernel.org/.
+ 
+-2.6.x -next kernel tree for integration tests
++3.x -next kernel tree for integration tests
+ ---------------------------------------------
+-Before updates from subsystem trees are merged into the mainline 2.6.x
++Before updates from subsystem trees are merged into the mainline 3.x
+ tree, they need to be integration-tested.  For this purpose, a special
+ testing repository exists into which virtually all subsystem trees are
+ pulled on an almost daily basis:
+-	http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git
++	http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git
+ 	http://linux.f-seidel.de/linux-next/pmwiki/
+ 
+ This way, the -next kernel gives a summary outlook onto what will be
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0035-drivers-staging-comedi-comedi_fops.c-add-missing-vfr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0035-drivers-staging-comedi-comedi_fops.c-add-missing-vfr.patch
new file mode 100644
index 0000000..0286930
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0035-drivers-staging-comedi-comedi_fops.c-add-missing-vfr.patch
@@ -0,0 +1,34 @@
+From bf21ec2ca510b5e8d017ea1177ffa78a2fec5b93 Mon Sep 17 00:00:00 2001
+From: Julia Lawall <Julia.Lawall@lip6.fr>
+Date: Sun, 22 Apr 2012 13:37:09 +0200
+Subject: [PATCH 035/117] drivers/staging/comedi/comedi_fops.c: add missing
+ vfree
+
+commit abae41e6438b798e046d721b6ccdd55b4a398170 upstream.
+
+aux_free is freed on all other exits from the function.  By removing the
+return, we can benefit from the vfree already at the end of the function.
+
+Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/staging/comedi/comedi_fops.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
+index 5e78c77..4ad2c0e 100644
+--- a/drivers/staging/comedi/comedi_fops.c
++++ b/drivers/staging/comedi/comedi_fops.c
+@@ -280,7 +280,7 @@ static int do_devconfig_ioctl(struct comedi_device *dev,
+ 	if (ret == 0) {
+ 		if (!try_module_get(dev->driver->module)) {
+ 			comedi_device_detach(dev);
+-			return -ENOSYS;
++			ret = -ENOSYS;
+ 		}
+ 	}
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0036-USB-move-usb_translate_errors-to-linux-usb.h.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0036-USB-move-usb_translate_errors-to-linux-usb.h.patch
new file mode 100644
index 0000000..b1eb787
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0036-USB-move-usb_translate_errors-to-linux-usb.h.patch
@@ -0,0 +1,70 @@
+From a62e9c8e391b91bd60c705748ea8ec207ef72eab Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Thu, 10 Nov 2011 14:58:26 +0100
+Subject: [PATCH 036/117] USB: move usb_translate_errors to linux/usb.h
+
+commit 2c4d6bf295ae10ffcd84f0df6cb642598eb66603 upstream.
+
+Move usb_translate_errors from usb core to linux/usb.h as it is meant to
+be accessed from drivers.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/core/usb.h |   14 --------------
+ include/linux/usb.h    |   13 +++++++++++++
+ 2 files changed, 13 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
+index 3888778..45e8479 100644
+--- a/drivers/usb/core/usb.h
++++ b/drivers/usb/core/usb.h
+@@ -132,20 +132,6 @@ static inline int is_usb_device_driver(struct device_driver *drv)
+ 			for_devices;
+ }
+ 
+-/* translate USB error codes to codes user space understands */
+-static inline int usb_translate_errors(int error_code)
+-{
+-	switch (error_code) {
+-	case 0:
+-	case -ENOMEM:
+-	case -ENODEV:
+-		return error_code;
+-	default:
+-		return -EIO;
+-	}
+-}
+-
+-
+ /* for labeling diagnostics */
+ extern const char *usbcore_name;
+ 
+diff --git a/include/linux/usb.h b/include/linux/usb.h
+index 7626e5a..68cdc84 100644
+--- a/include/linux/usb.h
++++ b/include/linux/usb.h
+@@ -1600,6 +1600,19 @@ usb_maxpacket(struct usb_device *udev, int pipe, int is_out)
+ 
+ /* ----------------------------------------------------------------------- */
+ 
++/* translate USB error codes to codes user space understands */
++static inline int usb_translate_errors(int error_code)
++{
++	switch (error_code) {
++	case 0:
++	case -ENOMEM:
++	case -ENODEV:
++		return error_code;
++	default:
++		return -EIO;
++	}
++}
++
+ /* Events from the usb core */
+ #define USB_DEVICE_ADD		0x0001
+ #define USB_DEVICE_REMOVE	0x0002
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0037-USB-cdc-wdm-sanitize-error-returns.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0037-USB-cdc-wdm-sanitize-error-returns.patch
new file mode 100644
index 0000000..bbb4964
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0037-USB-cdc-wdm-sanitize-error-returns.patch
@@ -0,0 +1,33 @@
+From 1676590583666a41bf8b26924d0ab9b729455813 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oliver@neukum.org>
+Date: Fri, 27 Apr 2012 14:23:54 +0200
+Subject: [PATCH 037/117] USB: cdc-wdm: sanitize error returns
+
+commit 24a85bae5da2b43fed423859c09c5a81ab359473 upstream.
+
+wdm_flush() returns unsanitized USB error codes.
+They must be cleaned up to before being anded to user space
+
+Signed-off-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/class/cdc-wdm.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
+index 2db0327..ac9099a 100644
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -500,7 +500,7 @@ static int wdm_flush(struct file *file, fl_owner_t id)
+ 		dev_err(&desc->intf->dev, "Error in flush path: %d\n",
+ 			desc->werr);
+ 
+-	return desc->werr;
++	return usb_translate_errors(desc->werr);
+ }
+ 
+ static unsigned int wdm_poll(struct file *file, struct poll_table_struct *wait)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0038-USB-cdc-wdm-fix-memory-leak.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0038-USB-cdc-wdm-fix-memory-leak.patch
new file mode 100644
index 0000000..06dd85c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0038-USB-cdc-wdm-fix-memory-leak.patch
@@ -0,0 +1,35 @@
+From bc51604d6cadd35fa7a9a4d70644471cb6ab81f8 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oliver@neukum.org>
+Date: Fri, 27 Apr 2012 14:36:37 +0200
+Subject: [PATCH 038/117] USB: cdc-wdm: fix memory leak
+
+commit 2f338c8a1904e2e7aa5a8bd12fb0cf2422d17da4 upstream.
+
+cleanup() is not called if the last close() comes after
+disconnect(). That leads to a memory leak. Rectified
+by checking for an earlier disconnect() in release()
+
+Signed-off-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/class/cdc-wdm.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
+index ac9099a..cfe5be4 100644
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -590,6 +590,8 @@ static int wdm_release(struct inode *inode, struct file *file)
+ 		kill_urbs(desc);
+ 		if (!test_bit(WDM_DISCONNECTING, &desc->flags))
+ 			desc->intf->needs_remote_wakeup = 0;
++		else
++			cleanup(desc);
+ 	}
+ 	mutex_unlock(&wdm_mutex);
+ 	return 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0039-8250_pci-fix-pch-uart-matching.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0039-8250_pci-fix-pch-uart-matching.patch
new file mode 100644
index 0000000..c895c80
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0039-8250_pci-fix-pch-uart-matching.patch
@@ -0,0 +1,102 @@
+From e90d4ef7a5801bf1e9c956edf51d22f6c8f33611 Mon Sep 17 00:00:00 2001
+From: Arnaud Patard <apatard@hupstream.com>
+Date: Wed, 25 Apr 2012 12:17:24 +0200
+Subject: [PATCH 039/117] 8250_pci: fix pch uart matching
+
+commit aaa10eb1d0034eccc096f583fe308f0921617598 upstream.
+
+The rules used to make 8250_pci "ignore" the PCH uarts are lacking pci subids
+entries, preventing it to match and thus is breaking serial port support for
+theses systems.
+
+This has been tested on a nanoETXexpress-TT, which has a specifici uart clock.
+
+Tested-by: Erwan Velu <Erwan.Velu@zodiacaerospace.com>
+Signed-off-by: Arnaud Patard <apatard@hupstream.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2: adjust filename]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/tty/serial/8250_pci.c |   18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/drivers/tty/serial/8250_pci.c b/drivers/tty/serial/8250_pci.c
+index 825937a..482d51e 100644
+--- a/drivers/tty/serial/8250_pci.c
++++ b/drivers/tty/serial/8250_pci.c
+@@ -1590,54 +1590,72 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
+ 	{
+ 		.vendor         = PCI_VENDOR_ID_INTEL,
+ 		.device         = 0x8811,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = PCI_VENDOR_ID_INTEL,
+ 		.device         = 0x8812,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = PCI_VENDOR_ID_INTEL,
+ 		.device         = 0x8813,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = PCI_VENDOR_ID_INTEL,
+ 		.device         = 0x8814,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = 0x10DB,
+ 		.device         = 0x8027,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = 0x10DB,
+ 		.device         = 0x8028,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = 0x10DB,
+ 		.device         = 0x8029,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = 0x10DB,
+ 		.device         = 0x800C,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+ 	{
+ 		.vendor         = 0x10DB,
+ 		.device         = 0x800D,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
+ 		.init		= pci_eg20t_init,
+ 		.setup		= pci_default_setup,
+ 	},
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0040-usb-add-USB_QUIRK_RESET_RESUME-for-M-Audio-88es.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0040-usb-add-USB_QUIRK_RESET_RESUME-for-M-Audio-88es.patch
new file mode 100644
index 0000000..5d78e49
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0040-usb-add-USB_QUIRK_RESET_RESUME-for-M-Audio-88es.patch
@@ -0,0 +1,36 @@
+From aa66cb26f7b032f3ae43ff3cb126b3a3cff9b151 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Steffen=20M=C3=BCller?= <steffen.mueller@radio-frei.de>
+Date: Mon, 30 Apr 2012 13:05:34 +0200
+Subject: [PATCH 040/117] usb: add USB_QUIRK_RESET_RESUME for M-Audio 88es
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 166cb70e97bd83d7ae9bbec6ae59a178fd9bb823 upstream.
+
+Tested-by: Steffen Müller <steffen.mueller@radio-frei.de>
+Signed-off-by: Steffen Müller <steffen.mueller@radio-frei.de>
+Signed-off-by: Stefan Seyfried <seife+kernel@b1-systems.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/core/quirks.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
+index 4c65eb6..32d3adc 100644
+--- a/drivers/usb/core/quirks.c
++++ b/drivers/usb/core/quirks.c
+@@ -123,6 +123,9 @@ static const struct usb_device_id usb_quirk_list[] = {
+ 	/* Guillemot Webcam Hercules Dualpix Exchange*/
+ 	{ USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME },
+ 
++	/* Midiman M-Audio Keystation 88es */
++	{ USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME },
++
+ 	/* M-Systems Flash Disk Pioneers */
+ 	{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0041-usb-usbtest-two-super-speed-fixes-for-usbtest.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0041-usb-usbtest-two-super-speed-fixes-for-usbtest.patch
new file mode 100644
index 0000000..2bc330a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0041-usb-usbtest-two-super-speed-fixes-for-usbtest.patch
@@ -0,0 +1,60 @@
+From bb6dfbca863a06884b7af33a6c46fddb690eb7d3 Mon Sep 17 00:00:00 2001
+From: Paul Zimmerman <Paul.Zimmerman@synopsys.com>
+Date: Mon, 16 Apr 2012 14:19:07 -0700
+Subject: [PATCH 041/117] usb: usbtest: two super speed fixes for usbtest
+
+commit 6a23ccd216b6a8ba2c67a9f9d8969b4431ad2920 upstream.
+
+bMaxPacketSize0 field for super speed is a power of 2, not a count.
+The size itself is always 512.
+
+Max packet size for a super speed bulk endpoint is 1024, so
+allocate the urb size in halt_simple() accordingly.
+
+Signed-off-by: Paul Zimmerman <paulz@synopsys.com>
+Acked-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/misc/usbtest.c |   17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
+index bd6d008..b9ac9a3 100644
+--- a/drivers/usb/misc/usbtest.c
++++ b/drivers/usb/misc/usbtest.c
+@@ -1025,7 +1025,10 @@ test_ctrl_queue(struct usbtest_dev *dev, struct usbtest_param *param)
+ 		case 13:	/* short read, resembling case 10 */
+ 			req.wValue = cpu_to_le16((USB_DT_CONFIG << 8) | 0);
+ 			/* last data packet "should" be DATA1, not DATA0 */
+-			len = 1024 - udev->descriptor.bMaxPacketSize0;
++			if (udev->speed == USB_SPEED_SUPER)
++				len = 1024 - 512;
++			else
++				len = 1024 - udev->descriptor.bMaxPacketSize0;
+ 			expected = -EREMOTEIO;
+ 			break;
+ 		case 14:	/* short read; try to fill the last packet */
+@@ -1384,11 +1387,15 @@ static int test_halt(struct usbtest_dev *tdev, int ep, struct urb *urb)
+ 
+ static int halt_simple(struct usbtest_dev *dev)
+ {
+-	int		ep;
+-	int		retval = 0;
+-	struct urb	*urb;
++	int			ep;
++	int			retval = 0;
++	struct urb		*urb;
++	struct usb_device	*udev = testdev_to_usbdev(dev);
+ 
+-	urb = simple_alloc_urb(testdev_to_usbdev(dev), 0, 512);
++	if (udev->speed == USB_SPEED_SUPER)
++		urb = simple_alloc_urb(udev, 0, 1024);
++	else
++		urb = simple_alloc_urb(udev, 0, 512);
+ 	if (urb == NULL)
+ 		return -ENOMEM;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0042-8250.c-less-than-2400-baud-fix.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0042-8250.c-less-than-2400-baud-fix.patch
new file mode 100644
index 0000000..1c7547e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0042-8250.c-less-than-2400-baud-fix.patch
@@ -0,0 +1,51 @@
+From 52c1820cb4b5f10c0664104bb6f570305d0c49cc Mon Sep 17 00:00:00 2001
+From: Christian Melki <christian.melki@ericsson.se>
+Date: Mon, 30 Apr 2012 11:21:26 +0200
+Subject: [PATCH 042/117] 8250.c: less than 2400 baud fix.
+
+commit f9a9111b540fd67db5dab332f4b83d86c90e27b1 upstream.
+
+We noticed that we were loosing data at speed less than 2400 baud.
+It turned out our (TI16750 compatible) uart with 64 byte outgoing fifo
+was truncated to 16 byte (bit 5 sets fifo len) when modifying the fcr
+reg.
+The input code still fills the buffer with 64 bytes if I remember
+correctly and thus data is lost.
+Our fix was to remove whiping of the fcr content and just add the
+TRIGGER_1 which we want for latency.
+I can't see why this would not work on less than 2400 always, for all
+uarts ...
+Otherwise one would have to make sure the filling of the fifo re-checks
+the current state of available fifo size (urrk).
+
+Signed-off-by: Christian Melki <christian.melki@ericsson.se>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2: adjust filename; replace *port with up->port]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/tty/serial/8250.c |    9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c
+index eeadf1b..70585b6 100644
+--- a/drivers/tty/serial/8250.c
++++ b/drivers/tty/serial/8250.c
+@@ -2327,10 +2327,11 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
+ 		quot++;
+ 
+ 	if (up->capabilities & UART_CAP_FIFO && up->port.fifosize > 1) {
+-		if (baud < 2400)
+-			fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
+-		else
+-			fcr = uart_config[up->port.type].fcr;
++		fcr = uart_config[up->port.type].fcr;
++		if (baud < 2400) {
++			fcr &= ~UART_FCR_TRIGGER_MASK;
++			fcr |= UART_FCR_TRIGGER_1;
++		}
+ 	}
+ 
+ 	/*
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0043-usb-xhci-Handle-COMP_TX_ERR-for-isoc-tds.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0043-usb-xhci-Handle-COMP_TX_ERR-for-isoc-tds.patch
new file mode 100644
index 0000000..ce641a4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0043-usb-xhci-Handle-COMP_TX_ERR-for-isoc-tds.patch
@@ -0,0 +1,49 @@
+From 5ccddedea273a8a59eda8f3a7ad026d0751ada3d Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Mon, 23 Apr 2012 15:06:09 +0200
+Subject: [PATCH 043/117] usb-xhci: Handle COMP_TX_ERR for isoc tds
+
+commit 9c745995ae5c4ff787f34a359de908facc11ee00 upstream.
+
+While testing unplugging an UVC HD webcam with usb-redirection (so through
+usbdevfs), my userspace usb-redir code was getting a value of -1 in
+iso_frame_desc[n].status, which according to Documentation/usb/error-codes.txt
+is not a valid value.
+
+The source of this -1 is the default case in xhci-ring.c:process_isoc_td()
+adding a kprintf there showed the value of trb_comp_code to be COMP_TX_ERR
+in this case, so this patch adds handling for that completion code to
+process_isoc_td().
+
+This was observed and tested with the following xhci controller:
+1033:0194 NEC Corporation uPD720200 USB 3.0 Host Controller (rev 04)
+
+Note: I also wonder if setting frame->status to -1 (-EPERM) is the best we can
+do, but since I cannot come up with anything better I've left that as is.
+
+This patch should be backported to kernels as old as 2.6.36, which contain the
+commit 04e51901dd44f40a5a385ced897f6bca87d5f40a "USB: xHCI: Isochronous
+transfer implementation".
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/xhci-ring.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
+index 43b3447..2304c45 100644
+--- a/drivers/usb/host/xhci-ring.c
++++ b/drivers/usb/host/xhci-ring.c
+@@ -1752,6 +1752,7 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
+ 		break;
+ 	case COMP_DEV_ERR:
+ 	case COMP_STALL:
++	case COMP_TX_ERR:
+ 		frame->status = -EPROTO;
+ 		skip_td = true;
+ 		break;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0044-xhci-Avoid-dead-ports-when-CONFIG_USB_XHCI_HCD-n.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0044-xhci-Avoid-dead-ports-when-CONFIG_USB_XHCI_HCD-n.patch
new file mode 100644
index 0000000..eaa0ec5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0044-xhci-Avoid-dead-ports-when-CONFIG_USB_XHCI_HCD-n.patch
@@ -0,0 +1,63 @@
+From 48a73f4c8ba6d9e5587a29aa4f9710f405a28cc7 Mon Sep 17 00:00:00 2001
+From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Date: Mon, 16 Apr 2012 10:56:47 -0700
+Subject: [PATCH 044/117] xhci: Avoid dead ports when CONFIG_USB_XHCI_HCD=n
+
+commit 51c9e6c7732b67769c0a514d31f505e49fa82dd4 upstream.
+
+If the user chooses to say "no" to CONFIG_USB_XHCI_HCD on a system
+with an Intel Panther Point chipset, the PCI quirks code or the EHCI
+driver will switch the ports over to the xHCI host, but the xHCI driver
+will never load.  The ports will be powered off and seem "dead" to the
+user.
+
+Fix this by only switching the ports over if CONFIG_USB_XHCI_HCD is
+either compiled in, or compiled as a module.
+
+This patch should be backported to stable kernels as old as 3.0,
+that contain commit 69e848c2090aebba5698a1620604c7dccb448684
+"Intel xhci: Support EHCI/xHCI port switching."
+
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Reported-by: Eric Anholt <eric.anholt@intel.com>
+Reported-by: David Bein <d.bein@f5.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/pci-quirks.c |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
+index 2afff88..a33362b 100644
+--- a/drivers/usb/host/pci-quirks.c
++++ b/drivers/usb/host/pci-quirks.c
+@@ -9,6 +9,7 @@
+  */
+ 
+ #include <linux/types.h>
++#include <linux/kconfig.h>
+ #include <linux/kernel.h>
+ #include <linux/pci.h>
+ #include <linux/init.h>
+@@ -742,6 +743,19 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
+ {
+ 	u32		ports_available;
+ 
++	/* Don't switchover the ports if the user hasn't compiled the xHCI
++	 * driver.  Otherwise they will see "dead" USB ports that don't power
++	 * the devices.
++	 */
++	if (!IS_ENABLED(CONFIG_USB_XHCI_HCD)) {
++		dev_warn(&xhci_pdev->dev,
++				"CONFIG_USB_XHCI_HCD is turned off, "
++				"defaulting to EHCI.\n");
++		dev_warn(&xhci_pdev->dev,
++				"USB 3.0 devices will work at USB 2.0 speeds.\n");
++		return;
++	}
++
+ 	ports_available = 0xffffffff;
+ 	/* Write USB3_PSSEN, the USB 3.0 Port SuperSpeed Enable
+ 	 * Register, to turn on SuperSpeed terminations for all
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0045-xhci-Add-Lynx-Point-to-list-of-Intel-switchable-host.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0045-xhci-Add-Lynx-Point-to-list-of-Intel-switchable-host.patch
new file mode 100644
index 0000000..2bd8bcd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0045-xhci-Add-Lynx-Point-to-list-of-Intel-switchable-host.patch
@@ -0,0 +1,81 @@
+From cc4326a34985d9ce41cd590e7cf7275a0fbaa9dd Mon Sep 17 00:00:00 2001
+From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Date: Thu, 9 Feb 2012 15:55:13 -0800
+Subject: [PATCH 045/117] xhci: Add Lynx Point to list of Intel switchable
+ hosts.
+
+commit 1c12443ab8eba71a658fae4572147e56d1f84f66 upstream.
+
+The upcoming Intel Lynx Point chipset includes an xHCI host controller
+that can have ports switched from the EHCI host controller, just like
+the Intel Panther Point xHCI host.  This time, ports from both EHCI
+hosts can be switched to the xHCI host controller.  The PCI config
+registers to do the port switching are in the exact same place in the
+xHCI PCI configuration registers, with the same semantics.
+
+Hooray for shipping patches for next-gen hardware before the current gen
+hardware is even available for purchase!
+
+This patch should be backported to stable kernels as old as 3.0,
+that contain commit 69e848c2090aebba5698a1620604c7dccb448684
+"Intel xhci: Support EHCI/xHCI port switching."
+
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/ehci-pci.c   |    4 +++-
+ drivers/usb/host/pci-quirks.c |   18 +++++++++++++++++-
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
+index 971d312..ee85e81 100644
+--- a/drivers/usb/host/ehci-pci.c
++++ b/drivers/usb/host/ehci-pci.c
+@@ -365,7 +365,9 @@ static bool usb_is_intel_switchable_ehci(struct pci_dev *pdev)
+ {
+ 	return pdev->class == PCI_CLASS_SERIAL_USB_EHCI &&
+ 		pdev->vendor == PCI_VENDOR_ID_INTEL &&
+-		pdev->device == 0x1E26;
++		(pdev->device == 0x1E26 ||
++		 pdev->device == 0x8C2D ||
++		 pdev->device == 0x8C26);
+ }
+ 
+ static void ehci_enable_xhci_companion(void)
+diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
+index a33362b..833b3c6 100644
+--- a/drivers/usb/host/pci-quirks.c
++++ b/drivers/usb/host/pci-quirks.c
+@@ -713,12 +713,28 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done,
+ 	return -ETIMEDOUT;
+ }
+ 
+-bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
++#define PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI	0x8C31
++
++bool usb_is_intel_ppt_switchable_xhci(struct pci_dev *pdev)
+ {
+ 	return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
+ 		pdev->vendor == PCI_VENDOR_ID_INTEL &&
+ 		pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI;
+ }
++
++/* The Intel Lynx Point chipset also has switchable ports. */
++bool usb_is_intel_lpt_switchable_xhci(struct pci_dev *pdev)
++{
++	return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
++		pdev->vendor == PCI_VENDOR_ID_INTEL &&
++		pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI;
++}
++
++bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
++{
++	return usb_is_intel_ppt_switchable_xhci(pdev) ||
++		usb_is_intel_lpt_switchable_xhci(pdev);
++}
+ EXPORT_SYMBOL_GPL(usb_is_intel_switchable_xhci);
+ 
+ /*
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0046-usb-gadget-fsl_udc_core-dTD-s-next-dtd-pointer-need-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0046-usb-gadget-fsl_udc_core-dTD-s-next-dtd-pointer-need-.patch
new file mode 100644
index 0000000..5e46323
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0046-usb-gadget-fsl_udc_core-dTD-s-next-dtd-pointer-need-.patch
@@ -0,0 +1,44 @@
+From 45bf78829065725fa73b4cacfaf2a2142056d301 Mon Sep 17 00:00:00 2001
+From: Peter Chen <peter.chen@freescale.com>
+Date: Sun, 1 Apr 2012 15:17:16 +0800
+Subject: [PATCH 046/117] usb: gadget: fsl_udc_core: dTD's next dtd pointer
+ need to be updated once written
+
+commit 4d0947dec4db1224354e2f6f00ae22ce38e62a43 upstream.
+
+dTD's next dtd pointer need to be updated once CPU writes it, or this
+request may not be handled by controller, then host will get NAK from
+device forever.
+
+This problem occurs when there is a request is handling, we need to add
+a new request to dTD list, if this new request is added before the current
+one is finished, the new request is intended to added as next dtd pointer
+at current dTD, but without wmb(), the dTD's next dtd pointer may not be
+updated when the controller reads it. In that case, the controller will
+still get Terminate Bit is 1 at dTD's next dtd pointer, that means there is
+no next request, then this new request is missed by controller.
+
+Signed-off-by: Peter Chen <peter.chen@freescale.com>
+Acked-by: Li Yang <leoli@freescale.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/gadget/fsl_udc_core.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
+index 9085d14..185db03 100644
+--- a/drivers/usb/gadget/fsl_udc_core.c
++++ b/drivers/usb/gadget/fsl_udc_core.c
+@@ -736,6 +736,8 @@ static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
+ 		lastreq = list_entry(ep->queue.prev, struct fsl_req, queue);
+ 		lastreq->tail->next_td_ptr =
+ 			cpu_to_hc32(req->head->td_dma & DTD_ADDR_MASK);
++		/* Ensure dTD's next dtd pointer to be updated */
++		wmb();
+ 		/* Read prime bit, if 1 goto done */
+ 		if (fsl_readl(&dr_regs->endpointprime) & bitmask)
+ 			return;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0047-Add-missing-call-to-uart_update_timeout.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0047-Add-missing-call-to-uart_update_timeout.patch
new file mode 100644
index 0000000..9c15081
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0047-Add-missing-call-to-uart_update_timeout.patch
@@ -0,0 +1,36 @@
+From 17e2d3e18d2042fb6fb23605752754deb87772c5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lothar=20Wa=C3=9Fmann?= <LW@KARO-electronics.de>
+Date: Thu, 3 May 2012 11:37:12 +0200
+Subject: [PATCH 047/117] Add missing call to uart_update_timeout()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 8b979f7c6bf13a57e7b6002f1175312a44773960 upstream.
+
+This patch fixes a problem reported here:
+http://article.gmane.org/gmane.linux.ports.arm.kernel/155242/match=auart
+
+Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/tty/serial/mxs-auart.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
+index 7e02c9c..5b3d063 100644
+--- a/drivers/tty/serial/mxs-auart.c
++++ b/drivers/tty/serial/mxs-auart.c
+@@ -368,6 +368,8 @@ static void mxs_auart_settermios(struct uart_port *u,
+ 
+ 	writel(ctrl, u->membase + AUART_LINECTRL);
+ 	writel(ctrl2, u->membase + AUART_CTRL2);
++
++	uart_update_timeout(u, termios->c_cflag, baud);
+ }
+ 
+ static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0048-USB-ftdi-sio-add-support-for-Physik-Instrumente-E-86.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0048-USB-ftdi-sio-add-support-for-Physik-Instrumente-E-86.patch
new file mode 100644
index 0000000..493344b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0048-USB-ftdi-sio-add-support-for-Physik-Instrumente-E-86.patch
@@ -0,0 +1,58 @@
+From 52bf48eda8302a253e63ac9ec069a1635932b237 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C3=89ric=20Piel?= <piel@delmic.com>
+Date: Mon, 7 May 2012 12:37:54 +0200
+Subject: [PATCH 048/117] USB: ftdi-sio: add support for Physik Instrumente
+ E-861
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit b69cc672052540e8efb1368420f10d7d4d8b8a3d upstream.
+
+This adds VID/PID for the PI E-861. Without it, I had to do:
+modprobe -q ftdi-sio product=0x1008 vendor=0x1a72
+
+http://www.physikinstrumente.com/en/products/prdetail.php?sortnr=900610
+
+Signed-off-by: Éric Piel <piel@delmic.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/ftdi_sio.c     |    1 +
+ drivers/usb/serial/ftdi_sio_ids.h |    8 ++++++++
+ 2 files changed, 9 insertions(+)
+
+diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
+index c4cf3f3..450bdfe 100644
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -809,6 +809,7 @@ static struct usb_device_id id_table_combined [] = {
+ 		.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
+ 	{ USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) },
+ 	{ USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) },
++	{ USB_DEVICE(PI_VID, PI_E861_PID) },
+ 	{ USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
+ 	{ USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
+ 		.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
+diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
+index c6dd18e..219b199 100644
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -785,6 +785,14 @@
+ #define RTSYSTEMS_SERIAL_VX7_PID	0x9e52	/* Serial converter for VX-7 Radios using FT232RL */
+ #define RTSYSTEMS_CT29B_PID		0x9e54	/* CT29B Radio Cable */
+ 
++
++/*
++ * Physik Instrumente
++ * http://www.physikinstrumente.com/en/products/
++ */
++#define PI_VID              0x1a72  /* Vendor ID */
++#define PI_E861_PID         0x1008  /* E-861 piezo controller USB connection */
++
+ /*
+  * Bayer Ascensia Contour blood glucose meter USB-converter cable.
+  * http://winglucofacts.com/cables/
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0049-USB-ffs-test-fix-length-argument-of-out-function-cal.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0049-USB-ffs-test-fix-length-argument-of-out-function-cal.patch
new file mode 100644
index 0000000..81f1eb1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0049-USB-ffs-test-fix-length-argument-of-out-function-cal.patch
@@ -0,0 +1,36 @@
+From 7041c376790f592d9ed3c6b88a44a6cf18b8423c Mon Sep 17 00:00:00 2001
+From: Matthias Fend <Matthias.Fend@wolfvision.net>
+Date: Mon, 7 May 2012 14:37:30 +0200
+Subject: [PATCH 049/117] USB: ffs-test: fix length argument of out function
+ call
+
+commit eb9c5836384cd2a276254df6254ed71117983626 upstream.
+
+The out functions should only handle actual available data instead of the complete buffer.
+Otherwise for example the ep0_consume function will report ghost events since it tries to decode
+the complete buffer - which may contain partly invalid data.
+
+Signed-off-by: Matthias Fend <matthias.fend@wolfvision.net>
+Acked-by: Michal Nazarewicz <mina86@mina86.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/usb/ffs-test.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/usb/ffs-test.c b/tools/usb/ffs-test.c
+index b9c7986..f17dfee 100644
+--- a/tools/usb/ffs-test.c
++++ b/tools/usb/ffs-test.c
+@@ -324,7 +324,7 @@ static void *start_thread_helper(void *arg)
+ 
+ 		ret = t->in(t, t->buf, t->buf_size);
+ 		if (ret > 0) {
+-			ret = t->out(t, t->buf, t->buf_size);
++			ret = t->out(t, t->buf, ret);
+ 			name = out_name;
+ 			op = "write";
+ 		} else {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0050-HID-wiimote-Fix-IR-data-parser.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0050-HID-wiimote-Fix-IR-data-parser.patch
new file mode 100644
index 0000000..c5f666a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0050-HID-wiimote-Fix-IR-data-parser.patch
@@ -0,0 +1,60 @@
+From 0842fcae9a509f08c6d540dfa4d3f097c4f3f92d Mon Sep 17 00:00:00 2001
+From: David Herrmann <dh.herrmann@googlemail.com>
+Date: Tue, 8 May 2012 16:52:31 +0200
+Subject: [PATCH 050/117] HID: wiimote: Fix IR data parser
+
+commit 74b89e8a3625c17c7452532dfb997ac4f1a38751 upstream.
+
+We incorrectly parse incoming IR data. The extra byte contains the upper
+bits and not the lower bits of the x/y coordinates. User-space expects
+absolute position data from us so this patch does not break existing
+applications. On the contrary, it extends the virtual view and fixes
+garbage reports for margin areas of the virtual screen.
+
+Reported-by: Peter Bukovsky <bukovsky.peter@gmail.com>
+Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+[bwh: Backported to 3.2: adjust filename]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/hid/hid-wiimote.c |   16 +++++-----------
+ 1 file changed, 5 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/hid/hid-wiimote.c b/drivers/hid/hid-wiimote.c
+index 76739c0..bfa9a27 100644
+--- a/drivers/hid/hid-wiimote.c
++++ b/drivers/hid/hid-wiimote.c
+@@ -829,7 +829,7 @@ static void __ir_to_input(struct wiimote_data *wdata, const __u8 *ir,
+ 
+ 	/*
+ 	 * Basic IR data is encoded into 3 bytes. The first two bytes are the
+-	 * upper 8 bit of the X/Y data, the 3rd byte contains the lower 2 bits
++	 * lower 8 bit of the X/Y data, the 3rd byte contains the upper 2 bits
+ 	 * of both.
+ 	 * If data is packed, then the 3rd byte is put first and slightly
+ 	 * reordered. This allows to interleave packed and non-packed data to
+@@ -838,17 +838,11 @@ static void __ir_to_input(struct wiimote_data *wdata, const __u8 *ir,
+ 	 */
+ 
+ 	if (packed) {
+-		x = ir[1] << 2;
+-		y = ir[2] << 2;
+-
+-		x |= ir[0] & 0x3;
+-		y |= (ir[0] >> 2) & 0x3;
++		x = ir[1] | ((ir[0] & 0x03) << 8);
++		y = ir[2] | ((ir[0] & 0x0c) << 6);
+ 	} else {
+-		x = ir[0] << 2;
+-		y = ir[1] << 2;
+-
+-		x |= (ir[2] >> 4) & 0x3;
+-		y |= (ir[2] >> 6) & 0x3;
++		x = ir[0] | ((ir[2] & 0x30) << 4);
++		y = ir[1] | ((ir[2] & 0xc0) << 2);
+ 	}
+ 
+ 	input_report_abs(wdata->ir, xid, x);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0051-usb-storage-unusual_devs-entry-for-Yarvik-PMP400-MP4.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0051-usb-storage-unusual_devs-entry-for-Yarvik-PMP400-MP4.patch
new file mode 100644
index 0000000..6a9b5d9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0051-usb-storage-unusual_devs-entry-for-Yarvik-PMP400-MP4.patch
@@ -0,0 +1,41 @@
+From a595c200511d66729bc55aadbb93adb96988c590 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 8 May 2012 15:15:25 -0400
+Subject: [PATCH 051/117] usb-storage: unusual_devs entry for Yarvik PMP400
+ MP4 player
+
+commit df767b71e5816692134d59c0c17e0f77cd73333d upstream.
+
+This patch (as1553) adds an unusual_dev entrie for the Yarvik PMP400
+MP4 music player.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: Jesse Feddema <jdfeddema@gmail.com>
+Tested-by: Jesse Feddema <jdfeddema@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/storage/unusual_devs.h |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
+index 24caba7..591f57f 100644
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1885,6 +1885,13 @@ UNUSUAL_DEV(  0x1652, 0x6600, 0x0201, 0x0201,
+ 		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ 		US_FL_IGNORE_RESIDUE ),
+ 
++/* Reported by Jesse Feddema <jdfeddema@gmail.com> */
++UNUSUAL_DEV(  0x177f, 0x0400, 0x0000, 0x0000,
++		"Yarvik",
++		"PMP400",
++		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++		US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ),
++
+ /* Reported by Hans de Goede <hdegoede@redhat.com>
+  * These Appotech controllers are found in Picture Frames, they provide a
+  * (buggy) emulation of a cdrom drive which contains the windows software
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0052-USB-ohci-at91-add-a-reset-function-to-fix-race-condi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0052-USB-ohci-at91-add-a-reset-function-to-fix-race-condi.patch
new file mode 100644
index 0000000..3f380bb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0052-USB-ohci-at91-add-a-reset-function-to-fix-race-condi.patch
@@ -0,0 +1,63 @@
+From ac7728e7d633262cd020d764404abf381f282d12 Mon Sep 17 00:00:00 2001
+From: Nicolas Ferre <nicolas.ferre@atmel.com>
+Date: Wed, 9 May 2012 10:48:54 +0200
+Subject: [PATCH 052/117] USB: ohci-at91: add a reset function to fix race
+ condition
+
+commit 07e4e556eff4938eb2edf2591de3aa7d7fb82b52 upstream.
+
+A possible race condition appears because we are not initializing
+the ohci->regs before calling usb_hcd_request_irqs().
+We move the call to ohci_init() in hcd->driver->reset() instead of
+hcd->driver->start() to fix this.
+This was experienced when we share the same IRQ line between OHCI and EHCI
+controllers.
+
+Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Tested-by: Christian Eggers <christian.eggers@kathrein.de>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/ohci-at91.c |   11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
+index 95a9fec..a60c7aa 100644
+--- a/drivers/usb/host/ohci-at91.c
++++ b/drivers/usb/host/ohci-at91.c
+@@ -199,7 +199,7 @@ static void usb_hcd_at91_remove(struct usb_hcd *hcd,
+ /*-------------------------------------------------------------------------*/
+ 
+ static int __devinit
+-ohci_at91_start (struct usb_hcd *hcd)
++ohci_at91_reset (struct usb_hcd *hcd)
+ {
+ 	struct at91_usbh_data	*board = hcd->self.controller->platform_data;
+ 	struct ohci_hcd		*ohci = hcd_to_ohci (hcd);
+@@ -209,6 +209,14 @@ ohci_at91_start (struct usb_hcd *hcd)
+ 		return ret;
+ 
+ 	ohci->num_ports = board->ports;
++	return 0;
++}
++
++static int __devinit
++ohci_at91_start (struct usb_hcd *hcd)
++{
++	struct ohci_hcd		*ohci = hcd_to_ohci (hcd);
++	int			ret;
+ 
+ 	if ((ret = ohci_run(ohci)) < 0) {
+ 		err("can't start %s", hcd->self.bus_name);
+@@ -390,6 +398,7 @@ static const struct hc_driver ohci_at91_hc_driver = {
+ 	/*
+ 	 * basic lifecycle operations
+ 	 */
++	.reset =		ohci_at91_reset,
+ 	.start =		ohci_at91_start,
+ 	.stop =			ohci_stop,
+ 	.shutdown =		ohci_shutdown,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0053-HID-logitech-read-all-32-bits-of-report-type-bitfiel.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0053-HID-logitech-read-all-32-bits-of-report-type-bitfiel.patch
new file mode 100644
index 0000000..181bd55
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0053-HID-logitech-read-all-32-bits-of-report-type-bitfiel.patch
@@ -0,0 +1,70 @@
+From 4061b435a02342ee10ee34fb69f2c75d53e8da70 Mon Sep 17 00:00:00 2001
+From: Jonathan Nieder <jrnieder@gmail.com>
+Date: Fri, 11 May 2012 16:17:16 +0200
+Subject: [PATCH 053/117] HID: logitech: read all 32 bits of report type
+ bitfield
+
+commit 44d27f7dfedd9aadc082cda31462f6600f56e4ec upstream.
+
+On big-endian systems (e.g., Apple PowerBook), trying to use a
+logitech wireless mouse with the Logitech Unifying Receiver does not
+work with v3.2 and later kernels.  The device doesn't show up in
+/dev/input.  Older kernels work fine.
+
+That is because the new hid-logitech-dj driver claims the device.  The
+device arrival notification appears:
+
+	20 00 41 02 00 00 00 00 00 00 00 00 00 00 00
+
+and we read the report_types bitfield (02 00 00 00) to find out what
+kind of device it is.  Unfortunately the driver only reads the first 8
+bits and treats that value as a 32-bit little-endian number, so on a
+powerpc the report type seems to be 0x02000000 and is not recognized.
+
+Even on little-endian machines, connecting a media center remote
+control (report type 00 01 00 00) with this driver loaded would
+presumably fail for the same reason.
+
+Fix both problems by using get_unaligned_le32() to read all four
+bytes, which is a little clearer anyway.  After this change, the
+wireless mouse works on Hugo's PowerBook again.
+
+Based on a patch by Nestor Lopez Casado.
+Addresses http://bugs.debian.org/671292
+
+Reported-by: Hugo Osvaldo Barrera <hugo@osvaldobarrera.com.ar>
+Inspired-by: Nestor Lopez Casado <nlopezcasad@logitech.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+Signed-off-by: Nestor Lopez Casado <nlopezcasad@logitech.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/hid/hid-logitech-dj.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
+index 38b12e4..2eac8c5 100644
+--- a/drivers/hid/hid-logitech-dj.c
++++ b/drivers/hid/hid-logitech-dj.c
+@@ -26,6 +26,7 @@
+ #include <linux/hid.h>
+ #include <linux/module.h>
+ #include <linux/usb.h>
++#include <asm/unaligned.h>
+ #include "usbhid/usbhid.h"
+ #include "hid-ids.h"
+ #include "hid-logitech-dj.h"
+@@ -265,8 +266,8 @@ static void logi_dj_recv_add_djhid_device(struct dj_receiver_dev *djrcv_dev,
+ 		goto dj_device_allocate_fail;
+ 	}
+ 
+-	dj_dev->reports_supported = le32_to_cpu(
+-		dj_report->report_params[DEVICE_PAIRED_RF_REPORT_TYPE]);
++	dj_dev->reports_supported = get_unaligned_le32(
++		dj_report->report_params + DEVICE_PAIRED_RF_REPORT_TYPE);
+ 	dj_dev->hdev = dj_hiddev;
+ 	dj_dev->dj_receiver_dev = djrcv_dev;
+ 	dj_dev->device_index = dj_report->device_index;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0054-USB-serial-ti_usb_3410_5052-Add-support-for-the-FRI2.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0054-USB-serial-ti_usb_3410_5052-Add-support-for-the-FRI2.patch
new file mode 100644
index 0000000..105ed17
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0054-USB-serial-ti_usb_3410_5052-Add-support-for-the-FRI2.patch
@@ -0,0 +1,77 @@
+From 38827d01920cd8adbdbdb89d79b749f6cb50b8f0 Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Fri, 11 May 2012 13:56:57 -0700
+Subject: [PATCH 054/117] USB: serial: ti_usb_3410_5052: Add support for the
+ FRI2 serial console
+
+commit 975dc33b82cb887d75a29b1e3835c8eb063a8e99 upstream.
+
+The Kontron M2M development board, also known as the Fish River Island II,
+has an optional daughter card providing access to the PCH_UART (EG20T) via
+a ti_usb_3410_5052 uart to usb chip.
+
+http://us.kontron.com/products/systems+and+platforms/m2m/m2m+smart+services+developer+kit.html
+
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+CC: Al Borchers <alborchers@steinerpoint.com>
+CC: Peter Berger <pberger@brimson.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/ti_usb_3410_5052.c |    6 ++++--
+ drivers/usb/serial/ti_usb_3410_5052.h |    1 +
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
+index 21c82b0..2856474 100644
+--- a/drivers/usb/serial/ti_usb_3410_5052.c
++++ b/drivers/usb/serial/ti_usb_3410_5052.c
+@@ -165,7 +165,7 @@ static unsigned int product_5052_count;
+ /* the array dimension is the number of default entries plus */
+ /* TI_EXTRA_VID_PID_COUNT user defined entries plus 1 terminating */
+ /* null entry */
+-static struct usb_device_id ti_id_table_3410[14+TI_EXTRA_VID_PID_COUNT+1] = {
++static struct usb_device_id ti_id_table_3410[15+TI_EXTRA_VID_PID_COUNT+1] = {
+ 	{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
+ 	{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
+ 	{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
+@@ -180,6 +180,7 @@ static struct usb_device_id ti_id_table_3410[14+TI_EXTRA_VID_PID_COUNT+1] = {
+ 	{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
+ 	{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
+ 	{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
++	{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
+ };
+ 
+ static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
+@@ -189,7 +190,7 @@ static struct usb_device_id ti_id_table_5052[5+TI_EXTRA_VID_PID_COUNT+1] = {
+ 	{ USB_DEVICE(TI_VENDOR_ID, TI_5052_FIRMWARE_PRODUCT_ID) },
+ };
+ 
+-static struct usb_device_id ti_id_table_combined[18+2*TI_EXTRA_VID_PID_COUNT+1] = {
++static struct usb_device_id ti_id_table_combined[19+2*TI_EXTRA_VID_PID_COUNT+1] = {
+ 	{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
+ 	{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
+ 	{ USB_DEVICE(MTS_VENDOR_ID, MTS_GSM_NO_FW_PRODUCT_ID) },
+@@ -208,6 +209,7 @@ static struct usb_device_id ti_id_table_combined[18+2*TI_EXTRA_VID_PID_COUNT+1]
+ 	{ USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) },
+ 	{ USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) },
+ 	{ USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) },
++	{ USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) },
+ 	{ }
+ };
+ 
+diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h
+index f140f1b..b353e7e 100644
+--- a/drivers/usb/serial/ti_usb_3410_5052.h
++++ b/drivers/usb/serial/ti_usb_3410_5052.h
+@@ -37,6 +37,7 @@
+ #define TI_5152_BOOT_PRODUCT_ID		0x5152	/* no EEPROM, no firmware */
+ #define TI_5052_EEPROM_PRODUCT_ID	0x505A	/* EEPROM, no firmware */
+ #define TI_5052_FIRMWARE_PRODUCT_ID	0x505F	/* firmware is running */
++#define FRI2_PRODUCT_ID			0x5053  /* Fish River Island II */
+ 
+ /* Multi-Tech vendor and product ids */
+ #define MTS_VENDOR_ID			0x06E0
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0055-USB-cdc-wdm-poll-must-return-POLLHUP-if-device-is-go.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0055-USB-cdc-wdm-poll-must-return-POLLHUP-if-device-is-go.patch
new file mode 100644
index 0000000..40e98b3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0055-USB-cdc-wdm-poll-must-return-POLLHUP-if-device-is-go.patch
@@ -0,0 +1,38 @@
+From 420e76b95a867f5105ee9b3d824c47f62601c19b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Wed, 9 May 2012 13:53:21 +0200
+Subject: [PATCH 055/117] USB: cdc-wdm: poll must return POLLHUP if device is
+ gone
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 616b6937e348ef2b4c6ea5fef2cd3c441145efb0 upstream.
+
+Else the poll will be restarted indefinitely in a tight loop,
+preventing final device cleanup.
+
+Cc: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/class/cdc-wdm.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
+index cfe5be4..38d8c33 100644
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -511,7 +511,7 @@ static unsigned int wdm_poll(struct file *file, struct poll_table_struct *wait)
+ 
+ 	spin_lock_irqsave(&desc->iuspin, flags);
+ 	if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
+-		mask = POLLERR;
++		mask = POLLHUP | POLLERR;
+ 		spin_unlock_irqrestore(&desc->iuspin, flags);
+ 		goto desc_out;
+ 	}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0056-USB-cdc-wdm-add-debug-messages-on-cleanup.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0056-USB-cdc-wdm-add-debug-messages-on-cleanup.patch
new file mode 100644
index 0000000..4ad688a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0056-USB-cdc-wdm-add-debug-messages-on-cleanup.patch
@@ -0,0 +1,54 @@
+From ec4941d4623bada1da050a962485961da8c928d6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Mon, 30 Apr 2012 09:26:11 +0200
+Subject: [PATCH 056/117] USB: cdc-wdm: add debug messages on cleanup
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 880bca3a2a6f159d7453e0cbcbfe2f1d8204d907 upstream.
+
+Device state cleanup is done in either wdm_disconnect or
+wdm_release depending on the order they are called. Adding
+a couple of debug messages to document the program flow.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Acked-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/class/cdc-wdm.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
+index 38d8c33..40a3f0b 100644
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -588,10 +588,12 @@ static int wdm_release(struct inode *inode, struct file *file)
+ 	if (!desc->count) {
+ 		dev_dbg(&desc->intf->dev, "wdm_release: cleanup");
+ 		kill_urbs(desc);
+-		if (!test_bit(WDM_DISCONNECTING, &desc->flags))
++		if (!test_bit(WDM_DISCONNECTING, &desc->flags)) {
+ 			desc->intf->needs_remote_wakeup = 0;
+-		else
++		} else {
++			dev_dbg(&desc->intf->dev, "%s: device gone - cleaning up\n", __func__);
+ 			cleanup(desc);
++		}
+ 	}
+ 	mutex_unlock(&wdm_mutex);
+ 	return 0;
+@@ -807,6 +809,8 @@ static void wdm_disconnect(struct usb_interface *intf)
+ 	mutex_unlock(&desc->rlock);
+ 	if (!desc->count)
+ 		cleanup(desc);
++	else
++		dev_dbg(&intf->dev, "%s: %d open files - postponing cleanup\n", __func__, desc->count);
+ 	mutex_unlock(&wdm_mutex);
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0057-USB-cdc-wdm-cannot-use-dev_printk-when-device-is-gon.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0057-USB-cdc-wdm-cannot-use-dev_printk-when-device-is-gon.patch
new file mode 100644
index 0000000..146b18b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0057-USB-cdc-wdm-cannot-use-dev_printk-when-device-is-gon.patch
@@ -0,0 +1,66 @@
+From beaa75548738c322895c5b3ca7c010397cfb0afb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Wed, 9 May 2012 13:53:22 +0200
+Subject: [PATCH 057/117] USB: cdc-wdm: cannot use dev_printk when device is
+ gone
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 6b0b79d38806481c1c8fffa7c5842f3c83679a42 upstream.
+
+We cannot dereference a removed USB interface for
+dev_printk. Use pr_debug instead where necessary.
+
+Flush errors are expected if device is unplugged and are
+therefore best ingored at this point.
+
+Move the kill_urbs() call in wdm_release with dev_dbg()
+for the non disconnect, as we know it has already been
+called if WDM_DISCONNECTING is set.  This does not
+actually fix anything, but keeps the code more consistent.
+
+Cc: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/class/cdc-wdm.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
+index 40a3f0b..554ac90 100644
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -496,7 +496,9 @@ static int wdm_flush(struct file *file, fl_owner_t id)
+ 	struct wdm_device *desc = file->private_data;
+ 
+ 	wait_event(desc->wait, !test_bit(WDM_IN_USE, &desc->flags));
+-	if (desc->werr < 0)
++
++	/* cannot dereference desc->intf if WDM_DISCONNECTING */
++	if (desc->werr < 0 && !test_bit(WDM_DISCONNECTING, &desc->flags))
+ 		dev_err(&desc->intf->dev, "Error in flush path: %d\n",
+ 			desc->werr);
+ 
+@@ -586,12 +588,13 @@ static int wdm_release(struct inode *inode, struct file *file)
+ 	mutex_unlock(&desc->wlock);
+ 
+ 	if (!desc->count) {
+-		dev_dbg(&desc->intf->dev, "wdm_release: cleanup");
+-		kill_urbs(desc);
+ 		if (!test_bit(WDM_DISCONNECTING, &desc->flags)) {
++			dev_dbg(&desc->intf->dev, "wdm_release: cleanup");
++			kill_urbs(desc);
+ 			desc->intf->needs_remote_wakeup = 0;
+ 		} else {
+-			dev_dbg(&desc->intf->dev, "%s: device gone - cleaning up\n", __func__);
++			/* must avoid dev_printk here as desc->intf is invalid */
++			pr_debug(KBUILD_MODNAME " %s: device gone - cleaning up\n", __func__);
+ 			cleanup(desc);
+ 		}
+ 	}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0058-tty-Allow-uart_register-unregister-register.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0058-tty-Allow-uart_register-unregister-register.patch
new file mode 100644
index 0000000..8c999bc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0058-tty-Allow-uart_register-unregister-register.patch
@@ -0,0 +1,33 @@
+From d3f8f68e0ff8065d2769fc80ebab6cd4a99df65d Mon Sep 17 00:00:00 2001
+From: Alan Cox <alan@linux.intel.com>
+Date: Mon, 14 May 2012 14:51:22 +0100
+Subject: [PATCH 058/117] tty: Allow uart_register/unregister/register
+
+commit 1e66cded334e6cea596c72f6f650eec351b1e959 upstream.
+
+This is legitimate but because we don't clear the drv->state pointer in the
+unregister code causes a bogus BUG().
+
+Resolves-bug: https://bugzilla.kernel.org/show_bug.cgi?id=42880
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/tty/serial/serial_core.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
+index 0406d7f..af5ffb9 100644
+--- a/drivers/tty/serial/serial_core.c
++++ b/drivers/tty/serial/serial_core.c
+@@ -2305,6 +2305,7 @@ void uart_unregister_driver(struct uart_driver *drv)
+ 	tty_unregister_driver(p);
+ 	put_tty_driver(p);
+ 	kfree(drv->state);
++	drv->state = NULL;
+ 	drv->tty_driver = NULL;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0059-workqueue-skip-nr_running-sanity-check-in-worker_ent.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0059-workqueue-skip-nr_running-sanity-check-in-worker_ent.patch
new file mode 100644
index 0000000..22d6da3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0059-workqueue-skip-nr_running-sanity-check-in-worker_ent.patch
@@ -0,0 +1,51 @@
+From ac2fd7de4ac5b536aace631588cdab6c27a3ef9d Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Mon, 14 May 2012 15:04:50 -0700
+Subject: [PATCH 059/117] workqueue: skip nr_running sanity check in
+ worker_enter_idle() if trustee is active
+
+commit 544ecf310f0e7f51fa057ac2a295fc1b3b35a9d3 upstream.
+
+worker_enter_idle() has WARN_ON_ONCE() which triggers if nr_running
+isn't zero when every worker is idle.  This can trigger spuriously
+while a cpu is going down due to the way trustee sets %WORKER_ROGUE
+and zaps nr_running.
+
+It first sets %WORKER_ROGUE on all workers without updating
+nr_running, releases gcwq->lock, schedules, regrabs gcwq->lock and
+then zaps nr_running.  If the last running worker enters idle
+inbetween, it would see stale nr_running which hasn't been zapped yet
+and trigger the WARN_ON_ONCE().
+
+Fix it by performing the sanity check iff the trustee is idle.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ kernel/workqueue.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/kernel/workqueue.c b/kernel/workqueue.c
+index bb425b1..7947e16 100644
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -1215,8 +1215,13 @@ static void worker_enter_idle(struct worker *worker)
+ 	} else
+ 		wake_up_all(&gcwq->trustee_wait);
+ 
+-	/* sanity check nr_running */
+-	WARN_ON_ONCE(gcwq->nr_workers == gcwq->nr_idle &&
++	/*
++	 * Sanity check nr_running.  Because trustee releases gcwq->lock
++	 * between setting %WORKER_ROGUE and zapping nr_running, the
++	 * warning may trigger spuriously.  Check iff trustee is idle.
++	 */
++	WARN_ON_ONCE(gcwq->trustee_state == TRUSTEE_DONE &&
++		     gcwq->nr_workers == gcwq->nr_idle &&
+ 		     atomic_read(get_gcwq_nr_running(gcwq->cpu)));
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0060-xhci-Add-new-short-TX-quirk-for-Fresco-Logic-host.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0060-xhci-Add-new-short-TX-quirk-for-Fresco-Logic-host.patch
new file mode 100644
index 0000000..58e0547
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0060-xhci-Add-new-short-TX-quirk-for-Fresco-Logic-host.patch
@@ -0,0 +1,129 @@
+From 24338a0903923d202e90e35100abe050436bf00a Mon Sep 17 00:00:00 2001
+From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Date: Tue, 8 May 2012 09:22:49 -0700
+Subject: [PATCH 060/117] xhci: Add new short TX quirk for Fresco Logic host.
+
+commit 1530bbc6272d9da1e39ef8e06190d42c13a02733 upstream.
+
+Sergio reported that when he recorded audio from a USB headset mic
+plugged into the USB 3.0 port on his ASUS N53SV-DH72, the audio sounded
+"robotic".  When plugged into the USB 2.0 port under EHCI on the same
+laptop, the audio sounded fine.  The device is:
+
+Bus 002 Device 004: ID 046d:0a0c Logitech, Inc. Clear Chat Comfort USB Headset
+
+The problem was tracked down to the Fresco Logic xHCI host controller
+not correctly reporting short transfers on isochronous IN endpoints.
+The driver would submit a 96 byte transfer, the device would only send
+88 or 90 bytes, and the xHCI host would report the transfer had a
+"successful" completion code, with an untransferred buffer length of 8
+or 6 bytes.
+
+The successful completion code and non-zero untransferred length is a
+contradiction.  The xHCI host is supposed to only mark a transfer as
+successful if all the bytes are transferred.  Otherwise, the transfer
+should be marked with a short packet completion code.  Without the EHCI
+bus trace, we wouldn't know whether the xHCI driver should trust the
+completion code or the untransferred length.  With it, we know to trust
+the untransferred length.
+
+Add a new xHCI quirk for the Fresco Logic host controller.  If a
+transfer is reported as successful, but the untransferred length is
+non-zero, print a warning.  For the Fresco Logic host, change the
+completion code to COMP_SHORT_TX and process the transfer like a short
+transfer.
+
+This should be backported to stable kernels that contain the commit
+f5182b4155b9d686c5540a6822486400e34ddd98 "xhci: Disable MSI for some
+Fresco Logic hosts."  That commit was marked for stable kernels as old
+as 2.6.36.
+
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Reported-by: Sergio Correia <lists@uece.net>
+Tested-by: Sergio Correia <lists@uece.net>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/xhci-pci.c  |    1 +
+ drivers/usb/host/xhci-ring.c |   20 +++++++++++++++++---
+ drivers/usb/host/xhci.h      |    1 +
+ 3 files changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
+index 211296a..daf5754 100644
+--- a/drivers/usb/host/xhci-pci.c
++++ b/drivers/usb/host/xhci-pci.c
+@@ -72,6 +72,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
+ 		xhci_dbg(xhci, "QUIRK: Fresco Logic revision %u "
+ 				"has broken MSI implementation\n",
+ 				pdev->revision);
++		xhci->quirks |= XHCI_TRUST_TX_LENGTH;
+ 	}
+ 
+ 	if (pdev->vendor == PCI_VENDOR_ID_NEC)
+diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
+index 2304c45..fb0981e 100644
+--- a/drivers/usb/host/xhci-ring.c
++++ b/drivers/usb/host/xhci-ring.c
+@@ -1735,8 +1735,12 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
+ 	/* handle completion code */
+ 	switch (trb_comp_code) {
+ 	case COMP_SUCCESS:
+-		frame->status = 0;
+-		break;
++		if (TRB_LEN(le32_to_cpu(event->transfer_len)) == 0) {
++			frame->status = 0;
++			break;
++		}
++		if ((xhci->quirks & XHCI_TRUST_TX_LENGTH))
++			trb_comp_code = COMP_SHORT_TX;
+ 	case COMP_SHORT_TX:
+ 		frame->status = td->urb->transfer_flags & URB_SHORT_NOT_OK ?
+ 				-EREMOTEIO : 0;
+@@ -1833,13 +1837,16 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
+ 	switch (trb_comp_code) {
+ 	case COMP_SUCCESS:
+ 		/* Double check that the HW transferred everything. */
+-		if (event_trb != td->last_trb) {
++		if (event_trb != td->last_trb ||
++				TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) {
+ 			xhci_warn(xhci, "WARN Successful completion "
+ 					"on short TX\n");
+ 			if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
+ 				*status = -EREMOTEIO;
+ 			else
+ 				*status = 0;
++			if ((xhci->quirks & XHCI_TRUST_TX_LENGTH))
++				trb_comp_code = COMP_SHORT_TX;
+ 		} else {
+ 			*status = 0;
+ 		}
+@@ -1978,6 +1985,13 @@ static int handle_tx_event(struct xhci_hcd *xhci,
+ 	 * transfer type
+ 	 */
+ 	case COMP_SUCCESS:
++		if (TRB_LEN(le32_to_cpu(event->transfer_len)) == 0)
++			break;
++		if (xhci->quirks & XHCI_TRUST_TX_LENGTH)
++			trb_comp_code = COMP_SHORT_TX;
++		else
++			xhci_warn(xhci, "WARN Successful completion on short TX: "
++					"needs XHCI_TRUST_TX_LENGTH quirk?\n");
+ 	case COMP_SHORT_TX:
+ 		break;
+ 	case COMP_STOP:
+diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
+index 4850c4d..363b141 100644
+--- a/drivers/usb/host/xhci.h
++++ b/drivers/usb/host/xhci.h
+@@ -1466,6 +1466,7 @@ struct xhci_hcd {
+ #define XHCI_RESET_ON_RESUME	(1 << 7)
+ #define	XHCI_SW_BW_CHECKING	(1 << 8)
+ #define XHCI_AMD_0x96_HOST	(1 << 9)
++#define XHCI_TRUST_TX_LENGTH	(1 << 10)
+ 	unsigned int		num_active_eps;
+ 	unsigned int		limit_active_eps;
+ 	/* There are two roothubs to keep track of bus suspend info for */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0061-usbcore-enable-USB2-LPM-if-port-suspend-fails.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0061-usbcore-enable-USB2-LPM-if-port-suspend-fails.patch
new file mode 100644
index 0000000..230c80a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0061-usbcore-enable-USB2-LPM-if-port-suspend-fails.patch
@@ -0,0 +1,43 @@
+From 644753e795bddc5e687932d9e8b6795859553ac3 Mon Sep 17 00:00:00 2001
+From: Andiry Xu <andiry.xu@gmail.com>
+Date: Sat, 5 May 2012 00:50:10 +0800
+Subject: [PATCH 061/117] usbcore: enable USB2 LPM if port suspend fails
+
+commit c3e751e4f4754793bb52bd5ae30e9cc027edbb12 upstream.
+
+USB2 LPM is disabled when device begin to suspend and enabled after device
+is resumed. That's because USB spec does not define the transition from
+U1/U2 state to U3 state.
+
+If usb_port_suspend() fails, usb_port_resume() is never called, and USB2 LPM
+is disabled in this situation. Enable USB2 LPM if port suspend fails.
+
+This patch should be backported to kernels as old as 3.2, that contain
+the commit 65580b4321eb36f16ae8b5987bfa1bb948fc5112 "xHCI: set USB2
+hardware LPM".
+
+Signed-off-by: Andiry Xu <andiry.xu@gmail.com>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/core/hub.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
+index ab4e49f..50cf41a 100644
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -2420,6 +2420,10 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
+ 				NULL, 0,
+ 				USB_CTRL_SET_TIMEOUT);
+ 
++		/* Try to enable USB2 hardware LPM again */
++		if (udev->usb2_hw_lpm_capable == 1)
++			usb_set_usb2_hardware_lpm(udev, 1);
++
+ 		/* System sleep transitions should never fail */
+ 		if (!PMSG_IS_AUTO(msg))
+ 			status = 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0062-perf-x86-Update-event-scheduling-constraints-for-AMD.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0062-perf-x86-Update-event-scheduling-constraints-for-AMD.patch
new file mode 100644
index 0000000..92793f3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0062-perf-x86-Update-event-scheduling-constraints-for-AMD.patch
@@ -0,0 +1,62 @@
+From 2ece12a2e8f1df09f28dbed203e3295d99d94c83 Mon Sep 17 00:00:00 2001
+From: Robert Richter <robert.richter@amd.com>
+Date: Fri, 18 May 2012 12:40:42 +0200
+Subject: [PATCH 062/117] perf/x86: Update event scheduling constraints for
+ AMD family 15h models
+
+commit 5bcdf5e4fee3c45e1281c25e4941f2163cb28c65 upstream.
+
+This update is for newer family 15h cpu models from 0x02 to 0x1f.
+
+Signed-off-by: Robert Richter <robert.richter@amd.com>
+Acked-by: Peter Zijlstra <peterz@infradead.org>
+Cc: Stephane Eranian <eranian@google.com>
+Link: http://lkml.kernel.org/r/1337337642-1621-1-git-send-email-robert.richter@amd.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kernel/cpu/perf_event_amd.c |   11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/kernel/cpu/perf_event_amd.c b/arch/x86/kernel/cpu/perf_event_amd.c
+index f64a039..3dbfb00 100644
+--- a/arch/x86/kernel/cpu/perf_event_amd.c
++++ b/arch/x86/kernel/cpu/perf_event_amd.c
+@@ -473,6 +473,7 @@ static __initconst const struct x86_pmu amd_pmu = {
+  * 0x023	DE	PERF_CTL[2:0]
+  * 0x02D	LS	PERF_CTL[3]
+  * 0x02E	LS	PERF_CTL[3,0]
++ * 0x031	LS	PERF_CTL[2:0] (**)
+  * 0x043	CU	PERF_CTL[2:0]
+  * 0x045	CU	PERF_CTL[2:0]
+  * 0x046	CU	PERF_CTL[2:0]
+@@ -486,10 +487,12 @@ static __initconst const struct x86_pmu amd_pmu = {
+  * 0x0DD	LS	PERF_CTL[5:0]
+  * 0x0DE	LS	PERF_CTL[5:0]
+  * 0x0DF	LS	PERF_CTL[5:0]
++ * 0x1C0	EX	PERF_CTL[5:3]
+  * 0x1D6	EX	PERF_CTL[5:0]
+  * 0x1D8	EX	PERF_CTL[5:0]
+  *
+- * (*) depending on the umask all FPU counters may be used
++ * (*)  depending on the umask all FPU counters may be used
++ * (**) only one unitmask enabled at a time
+  */
+ 
+ static struct event_constraint amd_f15_PMC0  = EVENT_CONSTRAINT(0, 0x01, 0);
+@@ -539,6 +542,12 @@ amd_get_event_constraints_f15h(struct cpu_hw_events *cpuc, struct perf_event *ev
+ 			return &amd_f15_PMC3;
+ 		case 0x02E:
+ 			return &amd_f15_PMC30;
++		case 0x031:
++			if (hweight_long(hwc->config & ARCH_PERFMON_EVENTSEL_UMASK) <= 1)
++				return &amd_f15_PMC20;
++			return &emptyconstraint;
++		case 0x1C0:
++			return &amd_f15_PMC53;
+ 		default:
+ 			return &amd_f15_PMC50;
+ 		}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0063-USB-fix-resource-leak-in-xhci-power-loss-path.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0063-USB-fix-resource-leak-in-xhci-power-loss-path.patch
new file mode 100644
index 0000000..4f897b4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0063-USB-fix-resource-leak-in-xhci-power-loss-path.patch
@@ -0,0 +1,74 @@
+From 51025bed29bdd5301f9028357e13707356ae9692 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oneukum@suse.de>
+Date: Thu, 10 May 2012 10:19:21 +0200
+Subject: [PATCH 063/117] USB: fix resource leak in xhci power loss path
+
+commit f8a9e72d125f4e00ec529ba67b674321a1f3bf31 upstream.
+
+Some more data structures must be freed and counters
+reset if an XHCI controller has lost power. The failure
+to do so renders some chips inoperative after a certain number
+of S4 cycles.
+
+This patch should be backported to kernels as old as 3.2,
+that contain the commits c29eea621900f18287d50519f72cb9113746d75a
+"xhci: Implement HS/FS/LS bandwidth checking." and
+commit 839c817ce67178ca3c7c7ad534c571bba1e69ebe
+"xhci: Implement HS/FS/LS bandwidth checking."
+
+Signed-off-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/xhci-mem.c |   26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
+index 01c3800..a7b0676 100644
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -1699,6 +1699,14 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
+ {
+ 	struct pci_dev	*pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
+ 	struct dev_info	*dev_info, *next;
++	struct list_head *tt_list_head;
++	struct list_head *tt;
++	struct list_head *endpoints;
++	struct list_head *ep, *q;
++	struct xhci_tt_bw_info *tt_info;
++	struct xhci_interval_bw_table *bwt;
++	struct xhci_virt_ep *virt_ep;
++
+ 	unsigned long	flags;
+ 	int size;
+ 	int i;
+@@ -1757,8 +1765,26 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
+ 	}
+ 	spin_unlock_irqrestore(&xhci->lock, flags);
+ 
++	bwt = &xhci->rh_bw->bw_table;
++	for (i = 0; i < XHCI_MAX_INTERVAL; i++) {
++		endpoints = &bwt->interval_bw[i].endpoints;
++		list_for_each_safe(ep, q, endpoints) {
++			virt_ep = list_entry(ep, struct xhci_virt_ep, bw_endpoint_list);
++			list_del(&virt_ep->bw_endpoint_list);
++			kfree(virt_ep);
++		}
++	}
++
++	tt_list_head = &xhci->rh_bw->tts;
++	list_for_each_safe(tt, q, tt_list_head) {
++		tt_info = list_entry(tt, struct xhci_tt_bw_info, tt_list);
++		list_del(tt);
++		kfree(tt_info);
++	}
++
+ 	xhci->num_usb2_ports = 0;
+ 	xhci->num_usb3_ports = 0;
++	xhci->num_active_eps = 0;
+ 	kfree(xhci->usb2_ports);
+ 	kfree(xhci->usb3_ports);
+ 	kfree(xhci->port_array);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0064-xhci-Reset-reserved-command-ring-TRBs-on-cleanup.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0064-xhci-Reset-reserved-command-ring-TRBs-on-cleanup.patch
new file mode 100644
index 0000000..f28b167
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0064-xhci-Reset-reserved-command-ring-TRBs-on-cleanup.patch
@@ -0,0 +1,39 @@
+From 06abda2cc51b6f5ffcb67e7b7299ffd7e3af966b Mon Sep 17 00:00:00 2001
+From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Date: Tue, 8 May 2012 07:09:26 -0700
+Subject: [PATCH 064/117] xhci: Reset reserved command ring TRBs on cleanup.
+
+commit 33b2831ac870d50cc8e01c317b07fb1e69c13fe1 upstream.
+
+When the xHCI driver needs to clean up memory (perhaps due to a failed
+register restore on resume from S3 or resume from S4), it needs to reset
+the number of reserved TRBs on the command ring to zero.  Otherwise,
+several resume cycles (about 30) with a UAS device attached will
+continually increment the number of reserved TRBs, until all command
+submissions fail because there isn't enough room on the command ring.
+
+This patch should be backported to kernels as old as 2.6.32,
+that contain the commit 913a8a344ffcaf0b4a586d6662a2c66a7106557d
+"USB: xhci: Change how xHCI commands are handled."
+
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/xhci-mem.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
+index a7b0676..4232e868 100644
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -1723,6 +1723,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
+ 	xhci->event_ring = NULL;
+ 	xhci_dbg(xhci, "Freed event ring\n");
+ 
++	xhci->cmd_ring_reserved_trbs = 0;
+ 	if (xhci->cmd_ring)
+ 		xhci_ring_free(xhci, xhci->cmd_ring);
+ 	xhci->cmd_ring = NULL;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0065-USB-Remove-races-in-devio.c.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0065-USB-Remove-races-in-devio.c.patch
new file mode 100644
index 0000000..4814713
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0065-USB-Remove-races-in-devio.c.patch
@@ -0,0 +1,132 @@
+From 13538bbeb4fc2e5f45d426579967a675474e4f16 Mon Sep 17 00:00:00 2001
+From: Huajun Li <huajun.li.lee@gmail.com>
+Date: Fri, 18 May 2012 20:12:51 +0800
+Subject: [PATCH 065/117] USB: Remove races in devio.c
+
+commit 4e09dcf20f7b5358615514c2ec8584b248ab8874 upstream.
+
+There exist races in devio.c, below is one case,
+and there are similar races in destroy_async()
+and proc_unlinkurb().  Remove these races.
+
+ cancel_bulk_urbs()        async_completed()
+-------------------                -----------------------
+ spin_unlock(&ps->lock);
+
+                           list_move_tail(&as->asynclist,
+		                    &ps->async_completed);
+
+                           wake_up(&ps->wait);
+
+                           Lead to free_async() be triggered,
+                           then urb and 'as' will be freed.
+
+ usb_unlink_urb(as->urb);
+ ===> refer to the freed 'as'
+
+Signed-off-by: Huajun Li <huajun.li.lee@gmail.com>
+Cc: Alan Stern <stern@rowland.harvard.edu>
+Cc: Oncaphillis <oncaphillis@snafu.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/core/devio.c |   33 +++++++++++++++++++++++++--------
+ 1 file changed, 25 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
+index 7abf060..f6ff837 100644
+--- a/drivers/usb/core/devio.c
++++ b/drivers/usb/core/devio.c
+@@ -295,17 +295,14 @@ static struct async *async_getcompleted(struct dev_state *ps)
+ static struct async *async_getpending(struct dev_state *ps,
+ 					     void __user *userurb)
+ {
+-	unsigned long flags;
+ 	struct async *as;
+ 
+-	spin_lock_irqsave(&ps->lock, flags);
+ 	list_for_each_entry(as, &ps->async_pending, asynclist)
+ 		if (as->userurb == userurb) {
+ 			list_del_init(&as->asynclist);
+-			spin_unlock_irqrestore(&ps->lock, flags);
+ 			return as;
+ 		}
+-	spin_unlock_irqrestore(&ps->lock, flags);
++
+ 	return NULL;
+ }
+ 
+@@ -360,6 +357,7 @@ static void cancel_bulk_urbs(struct dev_state *ps, unsigned bulk_addr)
+ __releases(ps->lock)
+ __acquires(ps->lock)
+ {
++	struct urb *urb;
+ 	struct async *as;
+ 
+ 	/* Mark all the pending URBs that match bulk_addr, up to but not
+@@ -382,8 +380,11 @@ __acquires(ps->lock)
+ 	list_for_each_entry(as, &ps->async_pending, asynclist) {
+ 		if (as->bulk_status == AS_UNLINK) {
+ 			as->bulk_status = 0;		/* Only once */
++			urb = as->urb;
++			usb_get_urb(urb);
+ 			spin_unlock(&ps->lock);		/* Allow completions */
+-			usb_unlink_urb(as->urb);
++			usb_unlink_urb(urb);
++			usb_put_urb(urb);
+ 			spin_lock(&ps->lock);
+ 			goto rescan;
+ 		}
+@@ -434,6 +435,7 @@ static void async_completed(struct urb *urb)
+ 
+ static void destroy_async(struct dev_state *ps, struct list_head *list)
+ {
++	struct urb *urb;
+ 	struct async *as;
+ 	unsigned long flags;
+ 
+@@ -441,10 +443,13 @@ static void destroy_async(struct dev_state *ps, struct list_head *list)
+ 	while (!list_empty(list)) {
+ 		as = list_entry(list->next, struct async, asynclist);
+ 		list_del_init(&as->asynclist);
++		urb = as->urb;
++		usb_get_urb(urb);
+ 
+ 		/* drop the spinlock so the completion handler can run */
+ 		spin_unlock_irqrestore(&ps->lock, flags);
+-		usb_kill_urb(as->urb);
++		usb_kill_urb(urb);
++		usb_put_urb(urb);
+ 		spin_lock_irqsave(&ps->lock, flags);
+ 	}
+ 	spin_unlock_irqrestore(&ps->lock, flags);
+@@ -1350,12 +1355,24 @@ static int proc_submiturb(struct dev_state *ps, void __user *arg)
+ 
+ static int proc_unlinkurb(struct dev_state *ps, void __user *arg)
+ {
++	struct urb *urb;
+ 	struct async *as;
++	unsigned long flags;
+ 
++	spin_lock_irqsave(&ps->lock, flags);
+ 	as = async_getpending(ps, arg);
+-	if (!as)
++	if (!as) {
++		spin_unlock_irqrestore(&ps->lock, flags);
+ 		return -EINVAL;
+-	usb_kill_urb(as->urb);
++	}
++
++	urb = as->urb;
++	usb_get_urb(urb);
++	spin_unlock_irqrestore(&ps->lock, flags);
++
++	usb_kill_urb(urb);
++	usb_put_urb(urb);
++
+ 	return 0;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0066-md-using-GFP_NOIO-to-allocate-bio-for-flush-request.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0066-md-using-GFP_NOIO-to-allocate-bio-for-flush-request.patch
new file mode 100644
index 0000000..dc48a60
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0066-md-using-GFP_NOIO-to-allocate-bio-for-flush-request.patch
@@ -0,0 +1,37 @@
+From d4bae88d4fc370e24457c3cf69fb343316b8f759 Mon Sep 17 00:00:00 2001
+From: Shaohua Li <shli@kernel.org>
+Date: Mon, 21 May 2012 09:26:59 +1000
+Subject: [PATCH 066/117] md: using GFP_NOIO to allocate bio for flush request
+
+commit b5e1b8cee7ad58a15d2fa79bcd7946acb592602d upstream.
+
+A flush request is usually issued in transaction commit code path, so
+using GFP_KERNEL to allocate memory for flush request bio falls into
+the classic deadlock issue.
+
+This is suitable for any -stable kernel to which it applies as it
+avoids a possible deadlock.
+
+Signed-off-by: Shaohua Li <shli@fusionio.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/md.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/md/md.c b/drivers/md/md.c
+index adcd850..700ecae 100644
+--- a/drivers/md/md.c
++++ b/drivers/md/md.c
+@@ -453,7 +453,7 @@ static void submit_flushes(struct work_struct *ws)
+ 			atomic_inc(&rdev->nr_pending);
+ 			atomic_inc(&rdev->nr_pending);
+ 			rcu_read_unlock();
+-			bi = bio_alloc_mddev(GFP_KERNEL, 0, mddev);
++			bi = bio_alloc_mddev(GFP_NOIO, 0, mddev);
+ 			bi->bi_end_io = md_end_flush;
+ 			bi->bi_private = rdev;
+ 			bi->bi_bdev = rdev->bdev;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0067-um-Implement-a-custom-pte_same-function.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0067-um-Implement-a-custom-pte_same-function.patch
new file mode 100644
index 0000000..346a207
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0067-um-Implement-a-custom-pte_same-function.patch
@@ -0,0 +1,41 @@
+From ed8e2c17d62006fb136c30abeb552673727c5eee Mon Sep 17 00:00:00 2001
+From: Richard Weinberger <richard@nod.at>
+Date: Sat, 14 Apr 2012 17:29:30 +0200
+Subject: [PATCH 067/117] um: Implement a custom pte_same() function
+
+commit f15b9000eb1d09bbaa4b0a6b2089d7e1f64e84b3 upstream.
+
+UML uses the _PAGE_NEWPAGE flag to mark pages which are not jet
+installed on the host side using mmap().
+pte_same() has to ignore this flag, otherwise unuse_pte_range()
+is unable to unuse the page because two identical
+page tables entries with different _PAGE_NEWPAGE flags would not
+match and swapoff() would never return.
+
+Analyzed-by: Hugh Dickins <hughd@google.com>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/um/include/asm/pgtable.h |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h
+index 41474fb..0fea0ec 100644
+--- a/arch/um/include/asm/pgtable.h
++++ b/arch/um/include/asm/pgtable.h
+@@ -271,6 +271,12 @@ static inline void set_pte(pte_t *pteptr, pte_t pteval)
+ }
+ #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
+ 
++#define __HAVE_ARCH_PTE_SAME
++static inline int pte_same(pte_t pte_a, pte_t pte_b)
++{
++	return !((pte_val(pte_a) ^ pte_val(pte_b)) & ~_PAGE_NEWPAGE);
++}
++
+ /*
+  * Conversion functions: convert a page and protection to a page entry,
+  * and a page entry and page directory to the page they refer to.
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0068-um-Fix-__swp_type.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0068-um-Fix-__swp_type.patch
new file mode 100644
index 0000000..cdb5252
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0068-um-Fix-__swp_type.patch
@@ -0,0 +1,39 @@
+From a8f0308ef13a60d8103b7635fdbd54e10a621a0a Mon Sep 17 00:00:00 2001
+From: Richard Weinberger <richard@nod.at>
+Date: Sat, 14 Apr 2012 17:46:01 +0200
+Subject: [PATCH 068/117] um: Fix __swp_type()
+
+commit 2b76ebaa728f8a3967c52aa189261c72fe56a6f1 upstream.
+
+The current __swp_type() function uses a too small bitshift.
+Using more than one swap files causes bad pages because
+the type bits clash with other page flags.
+
+Analyzed-by: Hugh Dickins <hughd@google.com>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/um/include/asm/pgtable.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h
+index 0fea0ec..aa365c5 100644
+--- a/arch/um/include/asm/pgtable.h
++++ b/arch/um/include/asm/pgtable.h
+@@ -352,11 +352,11 @@ extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr);
+ #define update_mmu_cache(vma,address,ptep) do ; while (0)
+ 
+ /* Encode and de-code a swap entry */
+-#define __swp_type(x)			(((x).val >> 4) & 0x3f)
++#define __swp_type(x)			(((x).val >> 5) & 0x1f)
+ #define __swp_offset(x)			((x).val >> 11)
+ 
+ #define __swp_entry(type, offset) \
+-	((swp_entry_t) { ((type) << 4) | ((offset) << 11) })
++	((swp_entry_t) { ((type) << 5) | ((offset) << 11) })
+ #define __pte_to_swp_entry(pte) \
+ 	((swp_entry_t) { pte_val(pte_mkuptodate(pte)) })
+ #define __swp_entry_to_pte(x)		((pte_t) { (x).val })
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0069-swap-don-t-do-discard-if-no-discard-option-added.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0069-swap-don-t-do-discard-if-no-discard-option-added.patch
new file mode 100644
index 0000000..b4f1a5f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0069-swap-don-t-do-discard-if-no-discard-option-added.patch
@@ -0,0 +1,41 @@
+From c3ad2b1e42ce62ce0b8aa5283e5f1eee851dd3fb Mon Sep 17 00:00:00 2001
+From: Shaohua Li <shli@kernel.org>
+Date: Wed, 21 Mar 2012 16:34:17 -0700
+Subject: [PATCH 069/117] swap: don't do discard if no discard option added
+
+commit 052b1987faca3606109d88d96bce124851f7c4c2 upstream.
+
+When swapon() was not passed the SWAP_FLAG_DISCARD option, sys_swapon()
+will still perform a discard operation.  This can cause problems if
+discard is slow or buggy.
+
+Reverse the order of the check so that a discard operation is performed
+only if the sys_swapon() caller is attempting to enable discard.
+
+Signed-off-by: Shaohua Li <shli@fusionio.com>
+Reported-by: Holger Kiehl <Holger.Kiehl@dwd.de>
+Tested-by: Holger Kiehl <Holger.Kiehl@dwd.de>
+Cc: Hugh Dickins <hughd@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/swapfile.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mm/swapfile.c b/mm/swapfile.c
+index 2015a1e..d3955f2 100644
+--- a/mm/swapfile.c
++++ b/mm/swapfile.c
+@@ -2102,7 +2102,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
+ 			p->flags |= SWP_SOLIDSTATE;
+ 			p->cluster_next = 1 + (random32() % p->highest_bit);
+ 		}
+-		if (discard_swap(p) == 0 && (swap_flags & SWAP_FLAG_DISCARD))
++		if ((swap_flags & SWAP_FLAG_DISCARD) && discard_swap(p) == 0)
+ 			p->flags |= SWP_DISCARDABLE;
+ 	}
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0070-Input-wacom-relax-Bamboo-stylus-ID-check.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0070-Input-wacom-relax-Bamboo-stylus-ID-check.patch
new file mode 100644
index 0000000..cf106b4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0070-Input-wacom-relax-Bamboo-stylus-ID-check.patch
@@ -0,0 +1,42 @@
+From ae03191fbcee985e26e744fc2e3b928077e647a1 Mon Sep 17 00:00:00 2001
+From: Chris Bagwell <chris@cnpbagwell.com>
+Date: Wed, 26 Oct 2011 22:28:34 -0700
+Subject: [PATCH 070/117] Input: wacom - relax Bamboo stylus ID check
+
+commit c5981411f60c31f0dff6f0f98d2d3711384badaf upstream.
+
+Bit 0x02 always means tip versus eraser. Bit 0x01 is something related
+to version of stylus and different values are starting to be used.
+
+Relaxing proximity check is required to be used with 3rd generation
+Bamboo Pen and Touch tablets.
+
+Signed-off-by: Chris Bagwell <chris@cnpbagwell.com>
+Acked-by: Ping Cheng <pingc@wacom.com>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/input/tablet/wacom_wac.c |    7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
+index 2ee47d0..f00c70e 100644
+--- a/drivers/input/tablet/wacom_wac.c
++++ b/drivers/input/tablet/wacom_wac.c
+@@ -843,12 +843,7 @@ static int wacom_bpt_pen(struct wacom_wac *wacom)
+ 	unsigned char *data = wacom->data;
+ 	int prox = 0, x = 0, y = 0, p = 0, d = 0, pen = 0, btn1 = 0, btn2 = 0;
+ 
+-	/*
+-	 * Similar to Graphire protocol, data[1] & 0x20 is proximity and
+-	 * data[1] & 0x18 is tool ID.  0x30 is safety check to ignore
+-	 * 2 unused tool ID's.
+-	 */
+-	prox = (data[1] & 0x30) == 0x30;
++	prox = (data[1] & 0x20) == 0x20;
+ 
+ 	/*
+ 	 * All reports shared between PEN and RUBBER tool must be
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0071-ahci-Detect-Marvell-88SE9172-SATA-controller.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0071-ahci-Detect-Marvell-88SE9172-SATA-controller.patch
new file mode 100644
index 0000000..b1855cc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0071-ahci-Detect-Marvell-88SE9172-SATA-controller.patch
@@ -0,0 +1,35 @@
+From 3e4b4afbb70e3054734cacd6aacf50024f27c3dd Mon Sep 17 00:00:00 2001
+From: Matt Johnson <johnso87@illinois.edu>
+Date: Fri, 27 Apr 2012 01:42:30 -0500
+Subject: [PATCH 071/117] ahci: Detect Marvell 88SE9172 SATA controller
+
+commit 642d89252201c4155fc3946bf9cdea409e5d263e upstream.
+
+The Marvell 88SE9172 SATA controller (PCI ID 1b4b 917a) already worked
+once it was detected, but was missing an ahci_pci_tbl entry.
+
+Boot tested on a Gigabyte Z68X-UD3H-B3 motherboard.
+
+Signed-off-by: Matt Johnson <johnso87@illinois.edu>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/ata/ahci.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index cf26222..fb65915 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -384,6 +384,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ 	  .driver_data = board_ahci_yes_fbs },			/* 88se9128 */
+ 	{ PCI_DEVICE(0x1b4b, 0x9125),
+ 	  .driver_data = board_ahci_yes_fbs },			/* 88se9125 */
++	{ PCI_DEVICE(0x1b4b, 0x917a),
++	  .driver_data = board_ahci_yes_fbs },			/* 88se9172 */
+ 	{ PCI_DEVICE(0x1b4b, 0x91a3),
+ 	  .driver_data = board_ahci_yes_fbs },
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0072-ARM-7365-1-drop-unused-parameter-from-flush_cache_us.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0072-ARM-7365-1-drop-unused-parameter-from-flush_cache_us.patch
new file mode 100644
index 0000000..9af45a0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0072-ARM-7365-1-drop-unused-parameter-from-flush_cache_us.patch
@@ -0,0 +1,59 @@
+From 06d6cd667991ac824b4e32c07ad4c382e202b920 Mon Sep 17 00:00:00 2001
+From: Dima Zavin <dima@android.com>
+Date: Thu, 29 Mar 2012 20:44:06 +0100
+Subject: [PATCH 072/117] ARM: 7365/1: drop unused parameter from
+ flush_cache_user_range
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 4542b6a0fa6b48d9ae6b41c1efeb618b7a221b2a upstream.
+
+vma isn't used and flush_cache_user_range isn't a standard macro that
+is used on several archs with the same prototype. In fact only unicore32
+has a macro with the same name (with an identical implementation and no
+in-tree users).
+
+This is a part of a patch proposed by Dima Zavin (with Message-id:
+1272439931-12795-1-git-send-email-dima@android.com) that didn't get
+accepted.
+
+Cc: Dima Zavin <dima@android.com>
+Acked-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/include/asm/cacheflush.h |    2 +-
+ arch/arm/kernel/traps.c           |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h
+index d5d8d5c..1252a26 100644
+--- a/arch/arm/include/asm/cacheflush.h
++++ b/arch/arm/include/asm/cacheflush.h
+@@ -249,7 +249,7 @@ extern void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr
+  * Harvard caches are synchronised for the user space address range.
+  * This is used for the ARM private sys_cacheflush system call.
+  */
+-#define flush_cache_user_range(vma,start,end) \
++#define flush_cache_user_range(start,end) \
+ 	__cpuc_coherent_user_range((start) & PAGE_MASK, PAGE_ALIGN(end))
+ 
+ /*
+diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
+index 99a5727..f363ad9 100644
+--- a/arch/arm/kernel/traps.c
++++ b/arch/arm/kernel/traps.c
+@@ -488,7 +488,7 @@ do_cache_op(unsigned long start, unsigned long end, int flags)
+ 		if (end > vma->vm_end)
+ 			end = vma->vm_end;
+ 
+-		flush_cache_user_range(vma, start, end);
++		flush_cache_user_range(start, end);
+ 	}
+ 	up_read(&mm->mmap_sem);
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0073-ARM-7409-1-Do-not-call-flush_cache_user_range-with-m.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0073-ARM-7409-1-Do-not-call-flush_cache_user_range-with-m.patch
new file mode 100644
index 0000000..bb8d026
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0073-ARM-7409-1-Do-not-call-flush_cache_user_range-with-m.patch
@@ -0,0 +1,45 @@
+From bf1dbf3f545a79e9ac5ff460053283f2760f095b Mon Sep 17 00:00:00 2001
+From: Dima Zavin <dima@android.com>
+Date: Mon, 30 Apr 2012 10:26:14 +0100
+Subject: [PATCH 073/117] ARM: 7409/1: Do not call flush_cache_user_range with
+ mmap_sem held
+
+commit 435a7ef52db7d86e67a009b36cac1457f8972391 upstream.
+
+We can't be holding the mmap_sem while calling flush_cache_user_range
+because the flush can fault. If we fault on a user address, the
+page fault handler will try to take mmap_sem again. Since both places
+acquire the read lock, most of the time it succeeds. However, if another
+thread tries to acquire the write lock on the mmap_sem (e.g. mmap) in
+between the call to flush_cache_user_range and the fault, the down_read
+in do_page_fault will deadlock.
+
+[will: removed drop of vma parameter as already queued by rmk (7365/1)]
+
+Acked-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Dima Zavin <dima@android.com>
+Signed-off-by: John Stultz <john.stultz@linaro.org>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/kernel/traps.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
+index f363ad9..160cb16 100644
+--- a/arch/arm/kernel/traps.c
++++ b/arch/arm/kernel/traps.c
+@@ -488,7 +488,9 @@ do_cache_op(unsigned long start, unsigned long end, int flags)
+ 		if (end > vma->vm_end)
+ 			end = vma->vm_end;
+ 
++		up_read(&mm->mmap_sem);
+ 		flush_cache_user_range(start, end);
++		return;
+ 	}
+ 	up_read(&mm->mmap_sem);
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0074-sony-laptop-Enable-keyboard-backlight-by-default.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0074-sony-laptop-Enable-keyboard-backlight-by-default.patch
new file mode 100644
index 0000000..615aa31
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0074-sony-laptop-Enable-keyboard-backlight-by-default.patch
@@ -0,0 +1,48 @@
+From 444d2b8e5c56b431d2aa79db0c1742c6159b661a Mon Sep 17 00:00:00 2001
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Wed, 2 Nov 2011 14:32:00 -0400
+Subject: [PATCH 074/117] sony-laptop: Enable keyboard backlight by default
+
+commit 6fe6ae56a7cebaebc2e6daa11c423e4692f9b592 upstream.
+
+When the keyboard backlight support was originally added, the commit said
+to default it to on with a 10 second timeout.  That actually wasn't the
+case, as the default value is commented out for the kbd_backlight parameter.
+Because it is a static variable, it gets set to 0 by default without some
+other form of initialization.
+
+However, it seems the function to set the value wasn't actually called
+immediately, so whatever state the keyboard was in initially would remain.
+Then commit df410d522410e67660 was introduced during the 2.6.39 timeframe to
+immediately set whatever value was present (as well as attempt to
+restore/reset the state on module removal or resume).  That seems to have
+now forced the light off immediately when the module is loaded unless
+the option kbd_backlight=1 is specified.
+
+Let's enable it by default again (for the first time).  This should solve
+https://bugzilla.redhat.com/show_bug.cgi?id=728478
+
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+Acked-by: Mattia Dongili <malattia@linux.it>
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/platform/x86/sony-laptop.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
+index c006dee..40c4705 100644
+--- a/drivers/platform/x86/sony-laptop.c
++++ b/drivers/platform/x86/sony-laptop.c
+@@ -127,7 +127,7 @@ MODULE_PARM_DESC(minor,
+ 		 "default is -1 (automatic)");
+ #endif
+ 
+-static int kbd_backlight;	/* = 1 */
++static int kbd_backlight = 1;
+ module_param(kbd_backlight, int, 0444);
+ MODULE_PARM_DESC(kbd_backlight,
+ 		 "set this to 0 to disable keyboard backlight, "
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0075-init-don-t-try-mounting-device-as-nfs-root-unless-ty.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0075-init-don-t-try-mounting-device-as-nfs-root-unless-ty.patch
new file mode 100644
index 0000000..e86f89a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0075-init-don-t-try-mounting-device-as-nfs-root-unless-ty.patch
@@ -0,0 +1,54 @@
+From b277e4c19f3668e1a58e03d8933a3c6cd612c5e2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <levinsasha928@gmail.com>
+Date: Sat, 5 May 2012 17:06:35 +0200
+Subject: [PATCH 075/117] init: don't try mounting device as nfs root unless
+ type fully matches
+
+commit 377485f6244af255b04d662cf19cddbbc4ae4310 upstream.
+
+Currently, we'll try mounting any device who's major device number is
+UNNAMED_MAJOR as NFS root.  This would happen for non-NFS devices as
+well (such as 9p devices) but it wouldn't cause any issues since
+mounting the device as NFS would fail quickly and the code proceeded to
+doing the proper mount:
+
+       [  101.522716] VFS: Unable to mount root fs via NFS, trying floppy.
+       [  101.534499] VFS: Mounted root (9p filesystem) on device 0:18.
+
+Commit 6829a048102a ("NFS: Retry mounting NFSROOT") introduced retries
+when mounting NFS root, which means that now we don't immediately fail
+and instead it takes an additional 90+ seconds until we stop retrying,
+which has revealed the issue this patch fixes.
+
+This meant that it would take an additional 90 seconds to boot when
+we're not using a device type which gets detected in order before NFS.
+
+This patch modifies the NFS type check to require device type to be
+'Root_NFS' instead of requiring the device to have an UNNAMED_MAJOR
+major.  This makes boot process cleaner since we now won't go through
+the NFS mounting code at all when the device isn't an NFS root
+("/dev/nfs").
+
+Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ init/do_mounts.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/init/do_mounts.c b/init/do_mounts.c
+index db6e5ee..d6c229f 100644
+--- a/init/do_mounts.c
++++ b/init/do_mounts.c
+@@ -470,7 +470,7 @@ void __init change_floppy(char *fmt, ...)
+ void __init mount_root(void)
+ {
+ #ifdef CONFIG_ROOT_NFS
+-	if (MAJOR(ROOT_DEV) == UNNAMED_MAJOR) {
++	if (ROOT_DEV == Root_NFS) {
+ 		if (mount_nfs_root())
+ 			return;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0076-memcg-free-spare-array-to-avoid-memory-leak.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0076-memcg-free-spare-array-to-avoid-memory-leak.patch
new file mode 100644
index 0000000..0d731c2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0076-memcg-free-spare-array-to-avoid-memory-leak.patch
@@ -0,0 +1,40 @@
+From 0b0f028ae418e6b772241ed68bee5f2d0c6bcb3a Mon Sep 17 00:00:00 2001
+From: Sha Zhengju <handai.szj@taobao.com>
+Date: Thu, 10 May 2012 13:01:45 -0700
+Subject: [PATCH 076/117] memcg: free spare array to avoid memory leak
+
+commit 8c7577637ca31385e92769a77e2ab5b428e8b99c upstream.
+
+When the last event is unregistered, there is no need to keep the spare
+array anymore.  So free it to avoid memory leak.
+
+Signed-off-by: Sha Zhengju <handai.szj@taobao.com>
+Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Reviewed-by: Kirill A. Shutemov <kirill@shutemov.name>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/memcontrol.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/mm/memcontrol.c b/mm/memcontrol.c
+index 778554f..c8425b1 100644
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -4549,6 +4549,12 @@ static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,
+ swap_buffers:
+ 	/* Swap primary and spare array */
+ 	thresholds->spare = thresholds->primary;
++	/* If all events are unregistered, free the spare array */
++	if (!new) {
++		kfree(thresholds->spare);
++		thresholds->spare = NULL;
++	}
++
+ 	rcu_assign_pointer(thresholds->primary, new);
+ 
+ 	/* To be sure that nobody uses thresholds */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0077-compat-Fix-RT-signal-mask-corruption-via-sigprocmask.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0077-compat-Fix-RT-signal-mask-corruption-via-sigprocmask.patch
new file mode 100644
index 0000000..de65263
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0077-compat-Fix-RT-signal-mask-corruption-via-sigprocmask.patch
@@ -0,0 +1,107 @@
+From 2ed9e3e61cd65b3a43998d48846744be1b263394 Mon Sep 17 00:00:00 2001
+From: Jan Kiszka <jan.kiszka@siemens.com>
+Date: Thu, 10 May 2012 10:04:36 -0300
+Subject: [PATCH 077/117] compat: Fix RT signal mask corruption via
+ sigprocmask
+
+commit b7dafa0ef3145c31d7753be0a08b3cbda51f0209 upstream.
+
+compat_sys_sigprocmask reads a smaller signal mask from userspace than
+sigprogmask accepts for setting.  So the high word of blocked.sig[0]
+will be cleared, releasing any potentially blocked RT signal.
+
+This was discovered via userspace code that relies on get/setcontext.
+glibc's i386 versions of those functions use sigprogmask instead of
+rt_sigprogmask to save/restore signal mask and caused RT signal
+unblocking this way.
+
+As suggested by Linus, this replaces the sys_sigprocmask based compat
+version with one that open-codes the required logic, including the merge
+of the existing blocked set with the new one provided on SIG_SETMASK.
+
+Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ kernel/compat.c |   63 ++++++++++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 46 insertions(+), 17 deletions(-)
+
+diff --git a/kernel/compat.c b/kernel/compat.c
+index f346ced..a6d0649 100644
+--- a/kernel/compat.c
++++ b/kernel/compat.c
+@@ -320,25 +320,54 @@ asmlinkage long compat_sys_sigpending(compat_old_sigset_t __user *set)
+ 
+ #ifdef __ARCH_WANT_SYS_SIGPROCMASK
+ 
+-asmlinkage long compat_sys_sigprocmask(int how, compat_old_sigset_t __user *set,
+-		compat_old_sigset_t __user *oset)
++/*
++ * sys_sigprocmask SIG_SETMASK sets the first (compat) word of the
++ * blocked set of signals to the supplied signal set
++ */
++static inline void compat_sig_setmask(sigset_t *blocked, compat_sigset_word set)
+ {
+-	old_sigset_t s;
+-	long ret;
+-	mm_segment_t old_fs;
++	memcpy(blocked->sig, &set, sizeof(set));
++}
+ 
+-	if (set && get_user(s, set))
+-		return -EFAULT;
+-	old_fs = get_fs();
+-	set_fs(KERNEL_DS);
+-	ret = sys_sigprocmask(how,
+-			      set ? (old_sigset_t __user *) &s : NULL,
+-			      oset ? (old_sigset_t __user *) &s : NULL);
+-	set_fs(old_fs);
+-	if (ret == 0)
+-		if (oset)
+-			ret = put_user(s, oset);
+-	return ret;
++asmlinkage long compat_sys_sigprocmask(int how,
++				       compat_old_sigset_t __user *nset,
++				       compat_old_sigset_t __user *oset)
++{
++	old_sigset_t old_set, new_set;
++	sigset_t new_blocked;
++
++	old_set = current->blocked.sig[0];
++
++	if (nset) {
++		if (get_user(new_set, nset))
++			return -EFAULT;
++		new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));
++
++		new_blocked = current->blocked;
++
++		switch (how) {
++		case SIG_BLOCK:
++			sigaddsetmask(&new_blocked, new_set);
++			break;
++		case SIG_UNBLOCK:
++			sigdelsetmask(&new_blocked, new_set);
++			break;
++		case SIG_SETMASK:
++			compat_sig_setmask(&new_blocked, new_set);
++			break;
++		default:
++			return -EINVAL;
++		}
++
++		set_current_blocked(&new_blocked);
++	}
++
++	if (oset) {
++		if (put_user(old_set, oset))
++			return -EFAULT;
++	}
++
++	return 0;
+ }
+ 
+ #endif
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0078-ext3-Fix-error-handling-on-inode-bitmap-corruption.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0078-ext3-Fix-error-handling-on-inode-bitmap-corruption.patch
new file mode 100644
index 0000000..d7a8016
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0078-ext3-Fix-error-handling-on-inode-bitmap-corruption.patch
@@ -0,0 +1,43 @@
+From c95c67d82938539844654f8d12a831e06ddae45a Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Thu, 8 Dec 2011 21:13:46 +0100
+Subject: [PATCH 078/117] ext3: Fix error handling on inode bitmap corruption
+
+commit 1415dd8705394399d59a3df1ab48d149e1e41e77 upstream.
+
+When insert_inode_locked() fails in ext3_new_inode() it most likely
+means inode bitmap got corrupted and we allocated again inode which
+is already in use. Also doing unlock_new_inode() during error recovery
+is wrong since inode does not have I_NEW set. Fix the problem by jumping
+to fail: (instead of fail_drop:) which declares filesystem error and
+does not call unlock_new_inode().
+
+Reviewed-by: Eric Sandeen <sandeen@redhat.com>
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext3/ialloc.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/fs/ext3/ialloc.c b/fs/ext3/ialloc.c
+index 5c866e0..adae962 100644
+--- a/fs/ext3/ialloc.c
++++ b/fs/ext3/ialloc.c
+@@ -525,8 +525,12 @@ got:
+ 	if (IS_DIRSYNC(inode))
+ 		handle->h_sync = 1;
+ 	if (insert_inode_locked(inode) < 0) {
+-		err = -EINVAL;
+-		goto fail_drop;
++		/*
++		 * Likely a bitmap corruption causing inode to be allocated
++		 * twice.
++		 */
++		err = -EIO;
++		goto fail;
+ 	}
+ 	spin_lock(&sbi->s_next_gen_lock);
+ 	inode->i_generation = sbi->s_next_generation++;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0079-ext4-fix-error-handling-on-inode-bitmap-corruption.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0079-ext4-fix-error-handling-on-inode-bitmap-corruption.patch
new file mode 100644
index 0000000..4d6aacf
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0079-ext4-fix-error-handling-on-inode-bitmap-corruption.patch
@@ -0,0 +1,42 @@
+From 92d372ef4ce9cea8d08163f727e4eeac7e9a2472 Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Sun, 18 Dec 2011 17:37:02 -0500
+Subject: [PATCH 079/117] ext4: fix error handling on inode bitmap corruption
+
+commit acd6ad83517639e8f09a8c5525b1dccd81cd2a10 upstream.
+
+When insert_inode_locked() fails in ext4_new_inode() it most likely means inode
+bitmap got corrupted and we allocated again inode which is already in use. Also
+doing unlock_new_inode() during error recovery is wrong since the inode does
+not have I_NEW set. Fix the problem by jumping to fail: (instead of fail_drop:)
+which declares filesystem error and does not call unlock_new_inode().
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/ialloc.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
+index 00beb4f..8fb6844 100644
+--- a/fs/ext4/ialloc.c
++++ b/fs/ext4/ialloc.c
+@@ -885,8 +885,12 @@ got:
+ 	if (IS_DIRSYNC(inode))
+ 		ext4_handle_sync(handle);
+ 	if (insert_inode_locked(inode) < 0) {
+-		err = -EINVAL;
+-		goto fail_drop;
++		/*
++		 * Likely a bitmap corruption causing inode to be allocated
++		 * twice.
++		 */
++		err = -EIO;
++		goto fail;
+ 	}
+ 	spin_lock(&sbi->s_next_gen_lock);
+ 	inode->i_generation = sbi->s_next_generation++;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0080-ACPI-PM-Add-Sony-Vaio-VPCCW29FX-to-nonvs-blacklist.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0080-ACPI-PM-Add-Sony-Vaio-VPCCW29FX-to-nonvs-blacklist.patch
new file mode 100644
index 0000000..1460ce3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0080-ACPI-PM-Add-Sony-Vaio-VPCCW29FX-to-nonvs-blacklist.patch
@@ -0,0 +1,42 @@
+From 1155d70b0cfab4cef0edb62753bc9b5053d6fa8e Mon Sep 17 00:00:00 2001
+From: Lan Tianyu <tianyu.lan@intel.com>
+Date: Sat, 21 Jan 2012 09:23:56 +0800
+Subject: [PATCH 080/117] ACPI / PM: Add Sony Vaio VPCCW29FX to nonvs
+ blacklist.
+
+commit 93f770846e8dedc5d9117bd4ad9d7efd18420627 upstream.
+
+Sony Vaio VPCCW29FX does not resume correctly without
+acpi_sleep=nonvs, so add it to the ACPI sleep blacklist.
+
+https://bugzilla.kernel.org/show_bug.cgi?id=34722
+
+Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/acpi/sleep.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
+index 0a7ed69..ca191ff 100644
+--- a/drivers/acpi/sleep.c
++++ b/drivers/acpi/sleep.c
+@@ -438,6 +438,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
+ 	},
+ 	{
+ 	.callback = init_nvs_nosave,
++	.ident = "Sony Vaio VPCCW29FX",
++	.matches = {
++		DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
++		DMI_MATCH(DMI_PRODUCT_NAME, "VPCCW29FX"),
++		},
++	},
++	{
++	.callback = init_nvs_nosave,
+ 	.ident = "Averatec AV1020-ED2",
+ 	.matches = {
+ 		DMI_MATCH(DMI_SYS_VENDOR, "AVERATEC"),
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0081-hpsa-Add-IRQF_SHARED-back-in-for-the-non-MSI-X-inter.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0081-hpsa-Add-IRQF_SHARED-back-in-for-the-non-MSI-X-inter.patch
new file mode 100644
index 0000000..f16c608
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0081-hpsa-Add-IRQF_SHARED-back-in-for-the-non-MSI-X-inter.patch
@@ -0,0 +1,42 @@
+From a9b96c2354127a1d9d0401564b6359403aecdb66 Mon Sep 17 00:00:00 2001
+From: "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
+Date: Mon, 28 Nov 2011 10:15:20 -0600
+Subject: [PATCH 081/117] hpsa: Add IRQF_SHARED back in for the non-MSI(X)
+ interrupt handler
+
+commit 45bcf018d1a4779d592764ef57517c92589d55d7 upstream.
+
+IRQF_SHARED is required for older controllers that don't support MSI(X)
+and which may end up sharing an interrupt.  All the controllers hpsa
+normally supports have MSI(X) capability, but older controllers may be
+encountered via the hpsa_allow_any=1 module parameter.
+
+Also remove deprecated IRQF_DISABLED.
+
+Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/scsi/hpsa.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
+index dc9dea3..b4d2c86 100644
+--- a/drivers/scsi/hpsa.c
++++ b/drivers/scsi/hpsa.c
+@@ -4068,10 +4068,10 @@ static int hpsa_request_irq(struct ctlr_info *h,
+ 
+ 	if (h->msix_vector || h->msi_vector)
+ 		rc = request_irq(h->intr[h->intr_mode], msixhandler,
+-				IRQF_DISABLED, h->devname, h);
++				0, h->devname, h);
+ 	else
+ 		rc = request_irq(h->intr[h->intr_mode], intxhandler,
+-				IRQF_DISABLED, h->devname, h);
++				IRQF_SHARED, h->devname, h);
+ 	if (rc) {
+ 		dev_err(&h->pdev->dev, "unable to get irq %d for %s\n",
+ 		       h->intr[h->intr_mode], h->devname);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0082-wake-up-s_wait_unfrozen-when-freeze_fs-fails.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0082-wake-up-s_wait_unfrozen-when-freeze_fs-fails.patch
new file mode 100644
index 0000000..b25a680
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0082-wake-up-s_wait_unfrozen-when-freeze_fs-fails.patch
@@ -0,0 +1,42 @@
+From ab66f47089f09bceebe3bee38d5e76e08ec748d0 Mon Sep 17 00:00:00 2001
+From: Kazuya Mio <k-mio@sx.jp.nec.com>
+Date: Thu, 1 Dec 2011 16:51:07 +0900
+Subject: [PATCH 082/117] wake up s_wait_unfrozen when ->freeze_fs fails
+
+commit e1616300a20c80396109c1cf013ba9a36055a3da upstream.
+
+dd slept infinitely when fsfeeze failed because of EIO.
+To fix this problem, if ->freeze_fs fails, freeze_super() wakes up
+the tasks waiting for the filesystem to become unfrozen.
+
+When s_frozen isn't SB_UNFROZEN in __generic_file_aio_write(),
+the function sleeps until FITHAW ioctl wakes up s_wait_unfrozen.
+
+However, if ->freeze_fs fails, s_frozen is set to SB_UNFROZEN and then
+freeze_super() returns an error number. In this case, FITHAW ioctl returns
+EINVAL because s_frozen is already SB_UNFROZEN. There is no way to wake up
+s_wait_unfrozen, so __generic_file_aio_write() sleeps infinitely.
+
+Signed-off-by: Kazuya Mio <k-mio@sx.jp.nec.com>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/super.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/fs/super.c b/fs/super.c
+index afd0f1a..2a698f6 100644
+--- a/fs/super.c
++++ b/fs/super.c
+@@ -1166,6 +1166,8 @@ int freeze_super(struct super_block *sb)
+ 			printk(KERN_ERR
+ 				"VFS:Filesystem freeze failed\n");
+ 			sb->s_frozen = SB_UNFROZEN;
++			smp_wmb();
++			wake_up(&sb->s_wait_unfrozen);
+ 			deactivate_locked_super(sb);
+ 			return ret;
+ 		}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0083-cifs-fix-revalidation-test-in-cifs_llseek.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0083-cifs-fix-revalidation-test-in-cifs_llseek.patch
new file mode 100644
index 0000000..0d16878
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0083-cifs-fix-revalidation-test-in-cifs_llseek.patch
@@ -0,0 +1,35 @@
+From 3f974a0efbf9480d3a540a029f5a98da92ce772e Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Mon, 30 Apr 2012 17:36:21 +0300
+Subject: [PATCH 083/117] cifs: fix revalidation test in cifs_llseek()
+
+commit 48a5730e5b71201e226ff06e245bf308feba5f10 upstream.
+
+This test is always true so it means we revalidate the length every
+time, which generates more network traffic.  When it is SEEK_SET or
+SEEK_CUR, then we don't need to revalidate.
+
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Reviewed-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/cifs/cifsfs.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
+index b4c2c99..b1451af 100644
+--- a/fs/cifs/cifsfs.c
++++ b/fs/cifs/cifsfs.c
+@@ -703,7 +703,7 @@ static loff_t cifs_llseek(struct file *file, loff_t offset, int origin)
+ 	 * origin == SEEK_END || SEEK_DATA || SEEK_HOLE => we must revalidate
+ 	 * the cached file length
+ 	 */
+-	if (origin != SEEK_SET || origin != SEEK_CUR) {
++	if (origin != SEEK_SET && origin != SEEK_CUR) {
+ 		int rc;
+ 		struct inode *inode = file->f_path.dentry->d_inode;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0084-dl2k-Clean-up-rio_ioctl.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0084-dl2k-Clean-up-rio_ioctl.patch
new file mode 100644
index 0000000..d3a6229
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0084-dl2k-Clean-up-rio_ioctl.patch
@@ -0,0 +1,123 @@
+From 69fa22d4b635612c73cb0427447c5916e18a217e Mon Sep 17 00:00:00 2001
+From: Jeff Mahoney <jeffm@suse.com>
+Date: Wed, 25 Apr 2012 14:32:09 +0000
+Subject: [PATCH 084/117] dl2k: Clean up rio_ioctl
+
+commit 1bb57e940e1958e40d51f2078f50c3a96a9b2d75 upstream.
+
+The dl2k driver's rio_ioctl call has a few issues:
+- No permissions checking
+- Implements SIOCGMIIREG and SIOCGMIIREG using the SIOCDEVPRIVATE numbers
+- Has a few ioctls that may have been used for debugging at one point
+  but have no place in the kernel proper.
+
+This patch removes all but the MII ioctls, renumbers them to use the
+standard ones, and adds the proper permission check for SIOCSMIIREG.
+
+We can also get rid of the dl2k-specific struct mii_data in favor of
+the generic struct mii_ioctl_data.
+
+Since we have the phyid on hand, we can add the SIOCGMIIPHY ioctl too.
+
+Most of the MII code for the driver could probably be converted to use
+the generic MII library but I don't have a device to test the results.
+
+Reported-by: Stephan Mueller <stephan.mueller@atsec.com>
+Signed-off-by: Jeff Mahoney <jeffm@suse.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/dlink/dl2k.c |   52 +++++++------------------------------
+ drivers/net/ethernet/dlink/dl2k.h |    7 -----
+ 2 files changed, 9 insertions(+), 50 deletions(-)
+
+diff --git a/drivers/net/ethernet/dlink/dl2k.c b/drivers/net/ethernet/dlink/dl2k.c
+index b2dc2c8..2e09edb 100644
+--- a/drivers/net/ethernet/dlink/dl2k.c
++++ b/drivers/net/ethernet/dlink/dl2k.c
+@@ -1259,55 +1259,21 @@ rio_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
+ {
+ 	int phy_addr;
+ 	struct netdev_private *np = netdev_priv(dev);
+-	struct mii_data *miidata = (struct mii_data *) &rq->ifr_ifru;
+-
+-	struct netdev_desc *desc;
+-	int i;
++	struct mii_ioctl_data *miidata = if_mii(rq);
+ 
+ 	phy_addr = np->phy_addr;
+ 	switch (cmd) {
+-	case SIOCDEVPRIVATE:
+-		break;
+-
+-	case SIOCDEVPRIVATE + 1:
+-		miidata->out_value = mii_read (dev, phy_addr, miidata->reg_num);
++	case SIOCGMIIPHY:
++		miidata->phy_id = phy_addr;
+ 		break;
+-	case SIOCDEVPRIVATE + 2:
+-		mii_write (dev, phy_addr, miidata->reg_num, miidata->in_value);
++	case SIOCGMIIREG:
++		miidata->val_out = mii_read (dev, phy_addr, miidata->reg_num);
+ 		break;
+-	case SIOCDEVPRIVATE + 3:
+-		break;
+-	case SIOCDEVPRIVATE + 4:
+-		break;
+-	case SIOCDEVPRIVATE + 5:
+-		netif_stop_queue (dev);
++	case SIOCSMIIREG:
++		if (!capable(CAP_NET_ADMIN))
++			return -EPERM;
++		mii_write (dev, phy_addr, miidata->reg_num, miidata->val_in);
+ 		break;
+-	case SIOCDEVPRIVATE + 6:
+-		netif_wake_queue (dev);
+-		break;
+-	case SIOCDEVPRIVATE + 7:
+-		printk
+-		    ("tx_full=%x cur_tx=%lx old_tx=%lx cur_rx=%lx old_rx=%lx\n",
+-		     netif_queue_stopped(dev), np->cur_tx, np->old_tx, np->cur_rx,
+-		     np->old_rx);
+-		break;
+-	case SIOCDEVPRIVATE + 8:
+-		printk("TX ring:\n");
+-		for (i = 0; i < TX_RING_SIZE; i++) {
+-			desc = &np->tx_ring[i];
+-			printk
+-			    ("%02x:cur:%08x next:%08x status:%08x frag1:%08x frag0:%08x",
+-			     i,
+-			     (u32) (np->tx_ring_dma + i * sizeof (*desc)),
+-			     (u32)le64_to_cpu(desc->next_desc),
+-			     (u32)le64_to_cpu(desc->status),
+-			     (u32)(le64_to_cpu(desc->fraginfo) >> 32),
+-			     (u32)le64_to_cpu(desc->fraginfo));
+-			printk ("\n");
+-		}
+-		printk ("\n");
+-		break;
+-
+ 	default:
+ 		return -EOPNOTSUPP;
+ 	}
+diff --git a/drivers/net/ethernet/dlink/dl2k.h b/drivers/net/ethernet/dlink/dl2k.h
+index ba0adca..30c2da3 100644
+--- a/drivers/net/ethernet/dlink/dl2k.h
++++ b/drivers/net/ethernet/dlink/dl2k.h
+@@ -365,13 +365,6 @@ struct ioctl_data {
+ 	char *data;
+ };
+ 
+-struct mii_data {
+-	__u16 reserved;
+-	__u16 reg_num;
+-	__u16 in_value;
+-	__u16 out_value;
+-};
+-
+ /* The Rx and Tx buffer descriptors. */
+ struct netdev_desc {
+ 	__le64 next_desc;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0085-OMAPDSS-VENC-fix-NULL-pointer-dereference-in-DSS2-VE.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0085-OMAPDSS-VENC-fix-NULL-pointer-dereference-in-DSS2-VE.patch
new file mode 100644
index 0000000..0c09aac
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0085-OMAPDSS-VENC-fix-NULL-pointer-dereference-in-DSS2-VE.patch
@@ -0,0 +1,41 @@
+From ad7129ee930fa9b9efd04490a4ddcd5d5a9039a9 Mon Sep 17 00:00:00 2001
+From: Danny Kukawka <danny.kukawka@bisect.de>
+Date: Tue, 24 Jan 2012 16:44:42 +0100
+Subject: [PATCH 085/117] OMAPDSS: VENC: fix NULL pointer dereference in DSS2
+ VENC sysfs debug attr on OMAP4
+
+commit cc1d3e032df53d83d0ca4d537d8eb67eb5b3e808 upstream.
+
+Commit ba02fa37de80bea10d706f39f076dd848348320a disabled the
+venc driver registration on OMAP4. Since the driver never gets
+probed/initialised your get a dereferenceed NULL pointer if you
+try to get info from /sys/kernel/debug/omapdss/venc
+
+Return info message about disabled venc if venc_dump_regs() gets called.
+
+Signed-off-by: Danny Kukawka <danny.kukawka@bisect.de>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/video/omap2/dss/venc.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
+index 7533458..7152b53 100644
+--- a/drivers/video/omap2/dss/venc.c
++++ b/drivers/video/omap2/dss/venc.c
+@@ -679,6 +679,11 @@ void venc_dump_regs(struct seq_file *s)
+ {
+ #define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, venc_read_reg(r))
+ 
++	if (cpu_is_omap44xx()) {
++		seq_printf(s, "VENC currently disabled on OMAP44xx\n");
++		return;
++	}
++
+ 	if (venc_runtime_get())
+ 		return;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0086-i2c-eg20t-change-timeout-value-50msec-to-1000msec.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0086-i2c-eg20t-change-timeout-value-50msec-to-1000msec.patch
new file mode 100644
index 0000000..f2be4cd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0086-i2c-eg20t-change-timeout-value-50msec-to-1000msec.patch
@@ -0,0 +1,36 @@
+From 64affee5c2afb0dff67a4c3669e3c44c98575809 Mon Sep 17 00:00:00 2001
+From: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+Date: Mon, 26 Mar 2012 14:55:25 +0900
+Subject: [PATCH 086/117] i2c-eg20t: change timeout value 50msec to 1000msec
+
+commit 8a52f9f347da721b199b7f9dcc0168bbe7d0baae upstream.
+
+Currently, during i2c works alone, wait-event timeout is not occurred.
+However, as CPU load increases, timeout occurs frequently.
+So, I modified like this patch.
+Modifying like this patch, I've never seen the timeout event with high
+load test.
+
+Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/i2c/busses/i2c-eg20t.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/i2c/busses/i2c-eg20t.c b/drivers/i2c/busses/i2c-eg20t.c
+index 730215e..2cda65bf 100644
+--- a/drivers/i2c/busses/i2c-eg20t.c
++++ b/drivers/i2c/busses/i2c-eg20t.c
+@@ -315,7 +315,7 @@ static s32 pch_i2c_wait_for_xfer_complete(struct i2c_algo_pch_data *adap)
+ {
+ 	long ret;
+ 	ret = wait_event_timeout(pch_event,
+-			(adap->pch_event_flag != 0), msecs_to_jiffies(50));
++			(adap->pch_event_flag != 0), msecs_to_jiffies(1000));
+ 
+ 	if (ret == 0) {
+ 		pch_err(adap, "timeout: %x\n", adap->pch_event_flag);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0087-drm-i915-GEN7-Use-HW-scheduler-for-fixed-function-sh.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0087-drm-i915-GEN7-Use-HW-scheduler-for-fixed-function-sh.patch
new file mode 100644
index 0000000..d48f0e0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0087-drm-i915-GEN7-Use-HW-scheduler-for-fixed-function-sh.patch
@@ -0,0 +1,100 @@
+From b8fd6d0d306fe861b9a5d692b5d14c169a14bc7e Mon Sep 17 00:00:00 2001
+From: Ben Widawsky <ben@bwidawsk.net>
+Date: Sat, 14 Apr 2012 18:41:32 -0700
+Subject: [PATCH 087/117] drm/i915: [GEN7] Use HW scheduler for fixed function
+ shaders
+
+commit a1e969e0332de7a430e62822cee8f2ec8d83cd7c upstream.
+
+This originally started as a patch from Bernard as a way of simply
+setting the VS scheduler. After submitting the RFC patch, we decided to
+also modify the DS scheduler. To be most explicit, I've made the patch
+explicitly set all scheduler modes, and included the defines for other
+modes (in case someone feels frisky later).
+
+The rest of the story gets a bit weird. The first version of the patch
+showed an almost unbelievable performance improvement. Since rebasing my
+branch it appears the performance improvement has gone, unfortunately.
+But setting these bits seem to be the right thing to do given that the
+docs describe corruption that can occur with the default settings.
+
+In summary, I am seeing no more perf improvements (or regressions) in my
+limited testing, but we believe this should be set to prevent rendering
+corruption, therefore cc stable.
+
+v1: Clear bit 4 also (Ken + Eugeni)
+Do a full clear + set of the bits we want (Me).
+
+Cc: Bernard Kilarski <bernard.r.kilarski@intel.com>
+Reviewed-by (RFC): Kenneth Graunke <kenneth@whitecape.org>
+Signed-off-by: Ben Widawsky <benjamin.widawsky@intel.com>
+Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_reg.h      |   15 +++++++++++++++
+ drivers/gpu/drm/i915/intel_display.c |   14 ++++++++++++++
+ 2 files changed, 29 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+index cbe5a88..a1d53b6 100644
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
+@@ -570,6 +570,21 @@
+ 
+ #define GEN6_BSD_RNCID			0x12198
+ 
++#define GEN7_FF_THREAD_MODE		0x20a0
++#define   GEN7_FF_SCHED_MASK		0x0077070
++#define   GEN7_FF_TS_SCHED_HS1		(0x5<<16)
++#define   GEN7_FF_TS_SCHED_HS0		(0x3<<16)
++#define   GEN7_FF_TS_SCHED_LOAD_BALANCE	(0x1<<16)
++#define   GEN7_FF_TS_SCHED_HW		(0x0<<16) /* Default */
++#define   GEN7_FF_VS_SCHED_HS1		(0x5<<12)
++#define   GEN7_FF_VS_SCHED_HS0		(0x3<<12)
++#define   GEN7_FF_VS_SCHED_LOAD_BALANCE	(0x1<<12) /* Default */
++#define   GEN7_FF_VS_SCHED_HW		(0x0<<12)
++#define   GEN7_FF_DS_SCHED_HS1		(0x5<<4)
++#define   GEN7_FF_DS_SCHED_HS0		(0x3<<4)
++#define   GEN7_FF_DS_SCHED_LOAD_BALANCE	(0x1<<4)  /* Default */
++#define   GEN7_FF_DS_SCHED_HW		(0x0<<4)
++
+ /*
+  * Framebuffer compression (915+ only)
+  */
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 390768f..68fa8f8 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -8245,6 +8245,18 @@ static void gen6_init_clock_gating(struct drm_device *dev)
+ 	}
+ }
+ 
++static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
++{
++	uint32_t reg = I915_READ(GEN7_FF_THREAD_MODE);
++
++	reg &= ~GEN7_FF_SCHED_MASK;
++	reg |= GEN7_FF_TS_SCHED_HW;
++	reg |= GEN7_FF_VS_SCHED_HW;
++	reg |= GEN7_FF_DS_SCHED_HW;
++
++	I915_WRITE(GEN7_FF_THREAD_MODE, reg);
++}
++
+ static void ivybridge_init_clock_gating(struct drm_device *dev)
+ {
+ 	struct drm_i915_private *dev_priv = dev->dev_private;
+@@ -8285,6 +8297,8 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
+ 			   DISPPLANE_TRICKLE_FEED_DISABLE);
+ 		intel_flush_display_plane(dev_priv, pipe);
+ 	}
++
++	gen7_setup_fixed_func_scheduler(dev_priv);
+ }
+ 
+ static void g4x_init_clock_gating(struct drm_device *dev)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0088-mmc-sdio-avoid-spurious-calls-to-interrupt-handlers.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0088-mmc-sdio-avoid-spurious-calls-to-interrupt-handlers.patch
new file mode 100644
index 0000000..4fcc89e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0088-mmc-sdio-avoid-spurious-calls-to-interrupt-handlers.patch
@@ -0,0 +1,99 @@
+From 418111eaa285eb1418ef4634eb2a24e955d0c0a4 Mon Sep 17 00:00:00 2001
+From: Nicolas Pitre <nicolas.pitre@linaro.org>
+Date: Mon, 16 Apr 2012 19:16:54 -0400
+Subject: [PATCH 088/117] mmc: sdio: avoid spurious calls to interrupt
+ handlers
+
+commit bbbc4c4d8c5face097d695f9bf3a39647ba6b7e7 upstream.
+
+Commit 06e8935feb ("optimized SDIO IRQ handling for single irq")
+introduced some spurious calls to SDIO function interrupt handlers,
+such as when the SDIO IRQ thread is started, or the safety check
+performed upon a system resume.  Let's add a flag to perform the
+optimization only when a real interrupt is signaled by the host
+driver and we know there is no point confirming it.
+
+Reported-by: Sujit Reddy Thumma <sthumma@codeaurora.org>
+Signed-off-by: Nicolas Pitre <nico@linaro.org>
+Signed-off-by: Chris Ball <cjb@laptop.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/mmc/core/sdio.c     |    2 +-
+ drivers/mmc/core/sdio_irq.c |   11 +++++++----
+ include/linux/mmc/host.h    |    2 ++
+ 3 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
+index 3ab565e..558a495 100644
+--- a/drivers/mmc/core/sdio.c
++++ b/drivers/mmc/core/sdio.c
+@@ -663,7 +663,7 @@ static int mmc_sdio_resume(struct mmc_host *host)
+ 	}
+ 
+ 	if (!err && host->sdio_irqs)
+-		mmc_signal_sdio_irq(host);
++		wake_up_process(host->sdio_irq_thread);
+ 	mmc_release_host(host);
+ 
+ 	/*
+diff --git a/drivers/mmc/core/sdio_irq.c b/drivers/mmc/core/sdio_irq.c
+index 68f81b9..9dd0462 100644
+--- a/drivers/mmc/core/sdio_irq.c
++++ b/drivers/mmc/core/sdio_irq.c
+@@ -28,18 +28,20 @@
+ 
+ #include "sdio_ops.h"
+ 
+-static int process_sdio_pending_irqs(struct mmc_card *card)
++static int process_sdio_pending_irqs(struct mmc_host *host)
+ {
++	struct mmc_card *card = host->card;
+ 	int i, ret, count;
+ 	unsigned char pending;
+ 	struct sdio_func *func;
+ 
+ 	/*
+ 	 * Optimization, if there is only 1 function interrupt registered
+-	 * call irq handler directly
++	 * and we know an IRQ was signaled then call irq handler directly.
++	 * Otherwise do the full probe.
+ 	 */
+ 	func = card->sdio_single_irq;
+-	if (func) {
++	if (func && host->sdio_irq_pending) {
+ 		func->irq_handler(func);
+ 		return 1;
+ 	}
+@@ -116,7 +118,8 @@ static int sdio_irq_thread(void *_host)
+ 		ret = __mmc_claim_host(host, &host->sdio_irq_thread_abort);
+ 		if (ret)
+ 			break;
+-		ret = process_sdio_pending_irqs(host->card);
++		ret = process_sdio_pending_irqs(host);
++		host->sdio_irq_pending = false;
+ 		mmc_release_host(host);
+ 
+ 		/*
+diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
+index a3ac9c4..deb6282 100644
+--- a/include/linux/mmc/host.h
++++ b/include/linux/mmc/host.h
+@@ -303,6 +303,7 @@ struct mmc_host {
+ 
+ 	unsigned int		sdio_irqs;
+ 	struct task_struct	*sdio_irq_thread;
++	bool			sdio_irq_pending;
+ 	atomic_t		sdio_irq_thread_abort;
+ 
+ 	mmc_pm_flag_t		pm_flags;	/* requested pm features */
+@@ -356,6 +357,7 @@ extern int mmc_cache_ctrl(struct mmc_host *, u8);
+ static inline void mmc_signal_sdio_irq(struct mmc_host *host)
+ {
+ 	host->ops->enable_sdio_irq(host, 0);
++	host->sdio_irq_pending = true;
+ 	wake_up_process(host->sdio_irq_thread);
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0089-smsusb-add-autodetection-support-for-USB-ID-2040-c0a.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0089-smsusb-add-autodetection-support-for-USB-ID-2040-c0a.patch
new file mode 100644
index 0000000..a1606fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0089-smsusb-add-autodetection-support-for-USB-ID-2040-c0a.patch
@@ -0,0 +1,31 @@
+From f408079974e4190a820716d82a01af3f3201cd56 Mon Sep 17 00:00:00 2001
+From: Michael Krufky <mkrufky@linuxtv.org>
+Date: Thu, 22 Mar 2012 13:55:05 -0300
+Subject: [PATCH 089/117] smsusb: add autodetection support for USB ID
+ 2040:c0a0
+
+commit 4d1b58b84472d1d300a66e1c5fd765b21e74ba15 upstream.
+
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/media/dvb/siano/smsusb.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/media/dvb/siano/smsusb.c b/drivers/media/dvb/siano/smsusb.c
+index 51c7121..b7d1e3e 100644
+--- a/drivers/media/dvb/siano/smsusb.c
++++ b/drivers/media/dvb/siano/smsusb.c
+@@ -542,6 +542,8 @@ static const struct usb_device_id smsusb_id_table[] __devinitconst = {
+ 		.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
+ 	{ USB_DEVICE(0x2040, 0xc090),
+ 		.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
++	{ USB_DEVICE(0x2040, 0xc0a0),
++		.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
+ 	{ } /* Terminating entry */
+ 	};
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0090-uvcvideo-Fix-ENUMINPUT-handling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0090-uvcvideo-Fix-ENUMINPUT-handling.patch
new file mode 100644
index 0000000..08a9b59
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0090-uvcvideo-Fix-ENUMINPUT-handling.patch
@@ -0,0 +1,34 @@
+From 1565ef649160b0fb7c0911ce172ecc475db2741e Mon Sep 17 00:00:00 2001
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Date: Wed, 21 Mar 2012 09:50:36 -0300
+Subject: [PATCH 090/117] uvcvideo: Fix ENUMINPUT handling
+
+commit 31c5f0c5e25ed71eeced170f113bb590f2f1f6f3 upstream.
+
+Properly validate the user-supplied index against the number of inputs.
+The code used the pin local variable instead of the index by mistake.
+
+Reported-by: Jozef Vesely <vesely@gjh.sk>
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/media/video/uvc/uvc_v4l2.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/media/video/uvc/uvc_v4l2.c b/drivers/media/video/uvc/uvc_v4l2.c
+index cf7788f..1030479 100644
+--- a/drivers/media/video/uvc/uvc_v4l2.c
++++ b/drivers/media/video/uvc/uvc_v4l2.c
+@@ -689,7 +689,7 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
+ 					break;
+ 			}
+ 			pin = iterm->id;
+-		} else if (pin < selector->bNrInPins) {
++		} else if (index < selector->bNrInPins) {
+ 			pin = selector->baSourceID[index];
+ 			list_for_each_entry(iterm, &chain->entities, chain) {
+ 				if (!UVC_ENTITY_IS_ITERM(iterm))
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0091-drm-i915-Avoid-a-double-read-of-PCH_IIR-during-inter.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0091-drm-i915-Avoid-a-double-read-of-PCH_IIR-during-inter.patch
new file mode 100644
index 0000000..41055a0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0091-drm-i915-Avoid-a-double-read-of-PCH_IIR-during-inter.patch
@@ -0,0 +1,63 @@
+From e7fcb3c81686f5853ff08909c0f580536291be51 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Wed, 9 May 2012 21:45:43 +0100
+Subject: [PATCH 091/117] drm/i915: Avoid a double-read of PCH_IIR during
+ interrupt handling
+
+commit 9adab8b5a7fde248504f484e197589f3e3c922e2 upstream.
+
+Currently the code re-reads PCH_IIR during the hotplug interrupt
+processing. Not only is this a wasted read, but introduces a potential
+for handling a spurious interrupt as we then may not clear all the
+interrupts processed (since the re-read IIR may contains more interrupts
+asserted than we clear using the result of the original read).
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_irq.c |    9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+index d47a53b..d3820c2 100644
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -424,14 +424,11 @@ static void gen6_pm_rps_work(struct work_struct *work)
+ 	mutex_unlock(&dev_priv->dev->struct_mutex);
+ }
+ 
+-static void pch_irq_handler(struct drm_device *dev)
++static void pch_irq_handler(struct drm_device *dev, u32 pch_iir)
+ {
+ 	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+-	u32 pch_iir;
+ 	int pipe;
+ 
+-	pch_iir = I915_READ(SDEIIR);
+-
+ 	if (pch_iir & SDE_AUDIO_POWER_MASK)
+ 		DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
+ 				 (pch_iir & SDE_AUDIO_POWER_MASK) >>
+@@ -529,7 +526,7 @@ static irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS)
+ 	if (de_iir & DE_PCH_EVENT_IVB) {
+ 		if (pch_iir & SDE_HOTPLUG_MASK_CPT)
+ 			queue_work(dev_priv->wq, &dev_priv->hotplug_work);
+-		pch_irq_handler(dev);
++		pch_irq_handler(dev, pch_iir);
+ 	}
+ 
+ 	if (pm_iir & GEN6_PM_DEFERRED_EVENTS) {
+@@ -629,7 +626,7 @@ static irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS)
+ 	if (de_iir & DE_PCH_EVENT) {
+ 		if (pch_iir & hotplug_mask)
+ 			queue_work(dev_priv->wq, &dev_priv->hotplug_work);
+-		pch_irq_handler(dev);
++		pch_irq_handler(dev, pch_iir);
+ 	}
+ 
+ 	if (de_iir & DE_PCU_EVENT) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0092-b43legacy-Fix-error-due-to-MMIO-access-with-SSB-unpo.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0092-b43legacy-Fix-error-due-to-MMIO-access-with-SSB-unpo.patch
new file mode 100644
index 0000000..2a97b80
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0092-b43legacy-Fix-error-due-to-MMIO-access-with-SSB-unpo.patch
@@ -0,0 +1,35 @@
+From 6f8ba55029ac1a15f55de85122401036a08d6b89 Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Sun, 6 May 2012 16:01:05 -0500
+Subject: [PATCH 092/117] b43legacy: Fix error due to MMIO access with SSB
+ unpowered
+
+commit 8f4b20388fa77226a3605627a33a23f90d559e50 upstream.
+
+There is a dummy read of a PCI MMIO register that occurs before the SSB bus
+has been powered, which is an error. This bug has not been seen earlier,
+but was apparently exposed when udev was updated to version 182.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/b43legacy/main.c |    2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
+index 20f0243..c5ce163 100644
+--- a/drivers/net/wireless/b43legacy/main.c
++++ b/drivers/net/wireless/b43legacy/main.c
+@@ -1564,8 +1564,6 @@ static int b43legacy_request_firmware(struct b43legacy_wldev *dev)
+ 	const char *filename;
+ 	int err;
+ 
+-	/* do dummy read */
+-	ssb_read32(dev->dev, SSB_TMSHIGH);
+ 	if (!fw->ucode) {
+ 		if (rev == 2)
+ 			filename = "ucode2";
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0093-gpio-mpc8xxx-Prevent-NULL-pointer-deref-in-demux-han.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0093-gpio-mpc8xxx-Prevent-NULL-pointer-deref-in-demux-han.patch
new file mode 100644
index 0000000..b3e3fa6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0093-gpio-mpc8xxx-Prevent-NULL-pointer-deref-in-demux-han.patch
@@ -0,0 +1,45 @@
+From 3a36f1d3f5cc6f221848df7c4cdc1269fc2085e9 Mon Sep 17 00:00:00 2001
+From: Thomas Gleixner <tglx@linutronix.de>
+Date: Thu, 3 May 2012 12:22:06 +0200
+Subject: [PATCH 093/117] gpio: mpc8xxx: Prevent NULL pointer deref in demux
+ handler
+
+commit d6de85e85edcc38c9edcde45a0a568818fcddc13 upstream.
+
+commit cfadd838(powerpc/8xxx: Fix interrupt handling in MPC8xxx GPIO
+driver) added an unconditional call of chip->irq_eoi() to the demux
+handler.
+
+This leads to a NULL pointer derefernce on MPC512x platforms which use
+this driver as well.
+
+Make it conditional.
+
+Reported-by: Thomas Wucher <thwucher@linutronix.de>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Felix Radensky <felix@embedded-sol.com>
+Cc: Kumar Gala <galak@kernel.crashing.org>
+Cc: Grant Likely <grant.likely@secretlab.ca>
+Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpio/gpio-mpc8xxx.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
+index 5cd04b6..edcffd6 100644
+--- a/drivers/gpio/gpio-mpc8xxx.c
++++ b/drivers/gpio/gpio-mpc8xxx.c
+@@ -163,7 +163,8 @@ static void mpc8xxx_gpio_irq_cascade(unsigned int irq, struct irq_desc *desc)
+ 	if (mask)
+ 		generic_handle_irq(irq_linear_revmap(mpc8xxx_gc->irq,
+ 						     32 - ffs(mask)));
+-	chip->irq_eoi(&desc->irq_data);
++	if (chip->irq_eoi)
++		chip->irq_eoi(&desc->irq_data);
+ }
+ 
+ static void mpc8xxx_irq_unmask(struct irq_data *d)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0094-drm-i915-don-t-clobber-the-pipe-param-in-sanitize_mo.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0094-drm-i915-don-t-clobber-the-pipe-param-in-sanitize_mo.patch
new file mode 100644
index 0000000..9e3e30e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0094-drm-i915-don-t-clobber-the-pipe-param-in-sanitize_mo.patch
@@ -0,0 +1,52 @@
+From 031b0156d47e41f3815fcee8b2043c0b7d21dba0 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Sun, 13 May 2012 22:29:25 +0200
+Subject: [PATCH 094/117] drm/i915: don't clobber the pipe param in
+ sanitize_modesetting
+
+commit a9dcf84b14ef4e9a609910367576995e6f32f3dc upstream.
+
+... we need it later on in the function to clean up pipe <-> plane
+associations. This regression has been introduced in
+
+commit f47166d2b0001fcb752b40c5a2d4db986dfbea68
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:   Thu Mar 22 15:00:50 2012 +0000
+
+    drm/i915: Sanitize BIOS debugging bits from PIPECONF
+
+Spotted by staring at debug output of an (as it turns out) totally
+unrelated bug.
+
+v2: I've totally failed to do the s/pipe/i/ correctly, spotted by
+Chris Wilson.
+
+Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_display.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 68fa8f8..3ff980d 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -7280,10 +7280,11 @@ static void intel_sanitize_modesetting(struct drm_device *dev,
+ {
+ 	struct drm_i915_private *dev_priv = dev->dev_private;
+ 	u32 reg, val;
++	int i;
+ 
+ 	/* Clear any frame start delays used for debugging left by the BIOS */
+-	for_each_pipe(pipe) {
+-		reg = PIPECONF(pipe);
++	for_each_pipe(i) {
++		reg = PIPECONF(i);
+ 		I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
+ 	}
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0095-spi-spi-fsl-spi-reference-correct-pdata-in-fsl_spi_c.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0095-spi-spi-fsl-spi-reference-correct-pdata-in-fsl_spi_c.patch
new file mode 100644
index 0000000..3dc340b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0095-spi-spi-fsl-spi-reference-correct-pdata-in-fsl_spi_c.patch
@@ -0,0 +1,42 @@
+From ee003c924af5accb5545a0f07b09f488cdd16e76 Mon Sep 17 00:00:00 2001
+From: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
+Date: Fri, 11 May 2012 15:29:50 -0700
+Subject: [PATCH 095/117] spi/spi-fsl-spi: reference correct pdata in
+ fsl_spi_cs_control
+
+commit 067aa4815a9bc12a569d8a06afef50ba5773afbf upstream.
+
+Commit 178db7d3, "spi: Fix device unregistration when unregistering
+the bus master", changed spi device initialization of dev.parent pointer
+to be the master's device pointer instead of his parent.
+
+This introduced a bug in spi-fsl-spi, since its usage of spi device
+pointer was not updated accordingly. This was later fixed by commit
+5039a86, "spi/mpc83xx: fix NULL pdata dereference bug", but it missed
+another spot on fsl_spi_cs_control function where we also need to update
+usage of spi device pointer. This change address that.
+
+Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
+Acked-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
+Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/spi/spi-fsl-spi.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
+index 5f748c0..6a62934 100644
+--- a/drivers/spi/spi-fsl-spi.c
++++ b/drivers/spi/spi-fsl-spi.c
+@@ -933,7 +933,7 @@ err:
+ 
+ static void fsl_spi_cs_control(struct spi_device *spi, bool on)
+ {
+-	struct device *dev = spi->dev.parent;
++	struct device *dev = spi->dev.parent->parent;
+ 	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
+ 	u16 cs = spi->chip_select;
+ 	int gpio = pinfo->gpios[cs];
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0096-xen-do-not-map-the-same-GSI-twice-in-PVHVM-guests.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0096-xen-do-not-map-the-same-GSI-twice-in-PVHVM-guests.patch
new file mode 100644
index 0000000..64f01ae
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0096-xen-do-not-map-the-same-GSI-twice-in-PVHVM-guests.patch
@@ -0,0 +1,90 @@
+From ccee9896b442dd46dc0fd4c7ae4b9e8e470fab2b Mon Sep 17 00:00:00 2001
+From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
+Date: Mon, 21 May 2012 16:54:10 +0100
+Subject: [PATCH 096/117] xen: do not map the same GSI twice in PVHVM guests.
+
+commit 68c2c39a76b094e9b2773e5846424ea674bf2c46 upstream.
+
+PV on HVM guests map GSIs into event channels. At restore time the
+event channels are resumed by restore_pirqs.
+
+Device drivers might try to register the same GSI again through ACPI at
+restore time, but the GSI has already been mapped and bound by
+restore_pirqs. This patch detects these situations and avoids
+ mapping the same GSI multiple times.
+
+Without this patch we get:
+(XEN) irq.c:2235: dom4: pirq 23 or emuirq 28 already mapped
+and waste a pirq.
+
+Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/pci/xen.c   |    4 ++++
+ drivers/xen/events.c |    5 +++--
+ include/xen/events.h |    3 +++
+ 3 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
+index d99346e..4c262f6 100644
+--- a/arch/x86/pci/xen.c
++++ b/arch/x86/pci/xen.c
+@@ -64,6 +64,10 @@ static int xen_register_pirq(u32 gsi, int gsi_override, int triggering,
+ 	int shareable = 0;
+ 	char *name;
+ 
++	irq = xen_irq_from_gsi(gsi);
++	if (irq > 0)
++		return irq;
++
+ 	if (set_pirq)
+ 		pirq = gsi;
+ 
+diff --git a/drivers/xen/events.c b/drivers/xen/events.c
+index 6e075cd..fec1204 100644
+--- a/drivers/xen/events.c
++++ b/drivers/xen/events.c
+@@ -600,7 +600,7 @@ static void disable_pirq(struct irq_data *data)
+ 	disable_dynirq(data);
+ }
+ 
+-static int find_irq_by_gsi(unsigned gsi)
++int xen_irq_from_gsi(unsigned gsi)
+ {
+ 	struct irq_info *info;
+ 
+@@ -614,6 +614,7 @@ static int find_irq_by_gsi(unsigned gsi)
+ 
+ 	return -1;
+ }
++EXPORT_SYMBOL_GPL(xen_irq_from_gsi);
+ 
+ /*
+  * Do not make any assumptions regarding the relationship between the
+@@ -633,7 +634,7 @@ int xen_bind_pirq_gsi_to_irq(unsigned gsi,
+ 
+ 	mutex_lock(&irq_mapping_update_lock);
+ 
+-	irq = find_irq_by_gsi(gsi);
++	irq = xen_irq_from_gsi(gsi);
+ 	if (irq != -1) {
+ 		printk(KERN_INFO "xen_map_pirq_gsi: returning irq %d for gsi %u\n",
+ 		       irq, gsi);
+diff --git a/include/xen/events.h b/include/xen/events.h
+index d287997..8f3d622 100644
+--- a/include/xen/events.h
++++ b/include/xen/events.h
+@@ -96,6 +96,9 @@ int xen_irq_from_pirq(unsigned pirq);
+ /* Return the pirq allocated to the irq. */
+ int xen_pirq_from_irq(unsigned irq);
+ 
++/* Return the irq allocated to the gsi */
++int xen_irq_from_gsi(unsigned gsi);
++
+ /* Determine whether to ignore this IRQ if it is passed to a guest. */
+ int xen_test_irq_shared(int irq);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0097-nouveau-nouveau_set_bo_placement-takes-TTM-flags.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0097-nouveau-nouveau_set_bo_placement-takes-TTM-flags.patch
new file mode 100644
index 0000000..7698a84
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0097-nouveau-nouveau_set_bo_placement-takes-TTM-flags.patch
@@ -0,0 +1,32 @@
+From 49228e195ea0ed24fe598a16c8721ee019df508d Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Fri, 18 May 2012 15:31:12 +0100
+Subject: [PATCH 097/117] nouveau: nouveau_set_bo_placement takes TTM flags
+
+commit c284815debba2f14ee2fd07b1b4cc972ab116110 upstream.
+
+This seems to be wrong to me, spotted while thinking about dma-buf.
+
+Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/nouveau/nouveau_bo.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
+index 7cc37e6..d5af089 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
++++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
+@@ -1024,7 +1024,7 @@ nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
+ 
+ 	nvbo->placement.fpfn = 0;
+ 	nvbo->placement.lpfn = dev_priv->fb_mappable_pages;
+-	nouveau_bo_placement_set(nvbo, TTM_PL_VRAM, 0);
++	nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_VRAM, 0);
+ 	return nouveau_bo_validate(nvbo, false, true, false);
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0098-MCE-Fix-vm86-handling-for-32bit-mce-handler.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0098-MCE-Fix-vm86-handling-for-32bit-mce-handler.patch
new file mode 100644
index 0000000..4d21aff
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0098-MCE-Fix-vm86-handling-for-32bit-mce-handler.patch
@@ -0,0 +1,43 @@
+From 7a3402ddb979d26b777cc6f99824881af9362e8d Mon Sep 17 00:00:00 2001
+From: Andi Kleen <andi@firstfloor.org>
+Date: Fri, 19 Nov 2010 13:16:22 +0100
+Subject: [PATCH 098/117] MCE: Fix vm86 handling for 32bit mce handler
+
+commit a129a7c84582629741e5fa6f40026efcd7a65bd4 upstream.
+
+When running on 32bit the mce handler could misinterpret
+vm86 mode as ring 0. This can affect whether it does recovery
+or not; it was possible to panic when recovery was actually
+possible.
+
+Fix this by always forcing vm86 to look like ring 3.
+
+Signed-off-by: Andi Kleen <ak@linux.intel.com>
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kernel/cpu/mcheck/mce.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
+index 2af127d..b0f1271 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce.c
++++ b/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -389,6 +389,14 @@ static inline void mce_gather_info(struct mce *m, struct pt_regs *regs)
+ 		if (m->mcgstatus & (MCG_STATUS_RIPV|MCG_STATUS_EIPV)) {
+ 			m->ip = regs->ip;
+ 			m->cs = regs->cs;
++
++			/*
++			 * When in VM86 mode make the cs look like ring 3
++			 * always. This is a lie, but it's better than passing
++			 * the additional vm86 bit around everywhere.
++			 */
++			if (v8086_mode(regs))
++				m->cs |= 3;
+ 		}
+ 		/* Use accurate RIP reporting if available. */
+ 		if (rip_msr)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0099-x86-mce-Fix-check-for-processor-context-when-machine.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0099-x86-mce-Fix-check-for-processor-context-when-machine.patch
new file mode 100644
index 0000000..05cd8cf
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0099-x86-mce-Fix-check-for-processor-context-when-machine.patch
@@ -0,0 +1,53 @@
+From 7938ffb57366a0e5f4b878955148f515d9940453 Mon Sep 17 00:00:00 2001
+From: Tony Luck <tony.luck@intel.com>
+Date: Wed, 23 May 2012 14:14:22 -0700
+Subject: [PATCH 099/117] x86/mce: Fix check for processor context when
+ machine check was taken.
+
+commit 875e26648cf9b6db9d8dc07b7959d7c61fb3f49c upstream.
+
+Linus pointed out that there was no value is checking whether m->ip
+was zero - because zero is a legimate value.  If we have a reliable
+(or faked in the VM86 case) "m->cs" we can use it to tell whether we
+were in user mode or kernelwhen the machine check hit.
+
+Reported-by: Linus Torvalds <torvalds@linuxfoundation.org>
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kernel/cpu/mcheck/mce-severity.c |   16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
+index 7395d5f..c9c9cfe 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
++++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
+@@ -145,15 +145,19 @@ static struct severity {
+ };
+ 
+ /*
+- * If the EIPV bit is set, it means the saved IP is the
+- * instruction which caused the MCE.
++ * If mcgstatus indicated that ip/cs on the stack were
++ * no good, then "m->cs" will be zero and we will have
++ * to assume the worst case (IN_KERNEL) as we actually
++ * have no idea what we were executing when the machine
++ * check hit.
++ * If we do have a good "m->cs" (or a faked one in the
++ * case we were executing in VM86 mode) we can use it to
++ * distinguish an exception taken in user from from one
++ * taken in the kernel.
+  */
+ static int error_context(struct mce *m)
+ {
+-	if (m->mcgstatus & MCG_STATUS_EIPV)
+-		return (m->ip && (m->cs & 3) == 3) ? IN_USER : IN_KERNEL;
+-	/* Unknown, assume kernel */
+-	return IN_KERNEL;
++	return ((m->cs & 3) == 3) ? IN_USER : IN_KERNEL;
+ }
+ 
+ int mce_severity(struct mce *m, int tolerant, char **msg)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0100-tile-fix-bug-where-fls-0-was-not-returning-0.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0100-tile-fix-bug-where-fls-0-was-not-returning-0.patch
new file mode 100644
index 0000000..26aba7e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0100-tile-fix-bug-where-fls-0-was-not-returning-0.patch
@@ -0,0 +1,50 @@
+From 91587d2e157874620dcdb8378b2512b809605c26 Mon Sep 17 00:00:00 2001
+From: Chris Metcalf <cmetcalf@tilera.com>
+Date: Fri, 25 May 2012 12:32:09 -0400
+Subject: [PATCH 100/117] tile: fix bug where fls(0) was not returning 0
+
+commit 9f1d62bed7f015d11b9164078b7fea433b474114 upstream.
+
+This is because __builtin_clz(0) returns 64 for the "undefined" case
+of 0, since the builtin just does a right-shift 32 and "clz" instruction.
+So, use the alpha approach of casting to u32 and using __builtin_clzll().
+
+Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/tile/include/asm/bitops.h |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/arch/tile/include/asm/bitops.h b/arch/tile/include/asm/bitops.h
+index 16f1fa5..bd186c4 100644
+--- a/arch/tile/include/asm/bitops.h
++++ b/arch/tile/include/asm/bitops.h
+@@ -77,6 +77,11 @@ static inline int ffs(int x)
+ 	return __builtin_ffs(x);
+ }
+ 
++static inline int fls64(__u64 w)
++{
++	return (sizeof(__u64) * 8) - __builtin_clzll(w);
++}
++
+ /**
+  * fls - find last set bit in word
+  * @x: the word to search
+@@ -90,12 +95,7 @@ static inline int ffs(int x)
+  */
+ static inline int fls(int x)
+ {
+-	return (sizeof(int) * 8) - __builtin_clz(x);
+-}
+-
+-static inline int fls64(__u64 w)
+-{
+-	return (sizeof(__u64) * 8) - __builtin_clzll(w);
++	return fls64((unsigned int) x);
+ }
+ 
+ static inline unsigned int __arch_hweight32(unsigned int w)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0101-intel-iommu-Add-device-info-into-list-before-doing-c.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0101-intel-iommu-Add-device-info-into-list-before-doing-c.patch
new file mode 100644
index 0000000..8ab6c6e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0101-intel-iommu-Add-device-info-into-list-before-doing-c.patch
@@ -0,0 +1,63 @@
+From 7049f47a9ae3e01f50957ed9349d850579905544 Mon Sep 17 00:00:00 2001
+From: David Woodhouse <dwmw2@infradead.org>
+Date: Fri, 25 May 2012 17:42:54 +0100
+Subject: [PATCH 101/117] intel-iommu: Add device info into list before doing
+ context mapping
+
+commit e2ad23d04c1304431ab5176c89b7b476ded2d995 upstream.
+
+Add device info into list before doing context mapping, because device
+info will be used by iommu_enable_dev_iotlb(). Without it, ATS won't get
+enabled as it should be.
+
+ATS, while a dubious decision from a security point of view, can be very
+important for performance.
+
+Signed-off-by: Xudong Hao <xudong.hao@intel.com>
+Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
+Acked-by: Chris Wright <chrisw@sous-sol.org>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/iommu/intel-iommu.c |   17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
+index bdc447f..ccf347f 100644
+--- a/drivers/iommu/intel-iommu.c
++++ b/drivers/iommu/intel-iommu.c
+@@ -2267,12 +2267,6 @@ static int domain_add_dev_info(struct dmar_domain *domain,
+ 	if (!info)
+ 		return -ENOMEM;
+ 
+-	ret = domain_context_mapping(domain, pdev, translation);
+-	if (ret) {
+-		free_devinfo_mem(info);
+-		return ret;
+-	}
+-
+ 	info->segment = pci_domain_nr(pdev->bus);
+ 	info->bus = pdev->bus->number;
+ 	info->devfn = pdev->devfn;
+@@ -2285,6 +2279,17 @@ static int domain_add_dev_info(struct dmar_domain *domain,
+ 	pdev->dev.archdata.iommu = info;
+ 	spin_unlock_irqrestore(&device_domain_lock, flags);
+ 
++	ret = domain_context_mapping(domain, pdev, translation);
++	if (ret) {
++		spin_lock_irqsave(&device_domain_lock, flags);
++		list_del(&info->link);
++		list_del(&info->global);
++		pdev->dev.archdata.iommu = NULL;
++		spin_unlock_irqrestore(&device_domain_lock, flags);
++		free_devinfo_mem(info);
++		return ret;
++	}
++
+ 	return 0;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0102-ethtool-Null-terminate-filename-passed-to-ethtool_op.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0102-ethtool-Null-terminate-filename-passed-to-ethtool_op.patch
new file mode 100644
index 0000000..0a655d2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0102-ethtool-Null-terminate-filename-passed-to-ethtool_op.patch
@@ -0,0 +1,55 @@
+From 79bd1de9faf5778df943c48022550d78a85d18d5 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <bhutchings@solarflare.com>
+Date: Wed, 1 Feb 2012 09:32:25 +0000
+Subject: [PATCH 102/117] ethtool: Null-terminate filename passed to
+ ethtool_ops::flash_device
+
+commit 786f528119722f564a22ad953411374e06116333 upstream.
+
+The parameters for ETHTOOL_FLASHDEV include a filename, which ought to
+be null-terminated.  Currently the only driver that implements
+ethtool_ops::flash_device attempts to add a null terminator if
+necessary, but does it wrongly.  Do it in the ethtool core instead.
+
+Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/emulex/benet/be_ethtool.c |    6 +-----
+ net/core/ethtool.c                             |    2 ++
+ 2 files changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c
+index bf8153e..7570c1a 100644
+--- a/drivers/net/ethernet/emulex/benet/be_ethtool.c
++++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c
+@@ -649,12 +649,8 @@ static int
+ be_do_flash(struct net_device *netdev, struct ethtool_flash *efl)
+ {
+ 	struct be_adapter *adapter = netdev_priv(netdev);
+-	char file_name[ETHTOOL_FLASH_MAX_FILENAME];
+ 
+-	file_name[ETHTOOL_FLASH_MAX_FILENAME - 1] = 0;
+-	strcpy(file_name, efl->data);
+-
+-	return be_load_fw(adapter, file_name);
++	return be_load_fw(adapter, efl->data);
+ }
+ 
+ static int
+diff --git a/net/core/ethtool.c b/net/core/ethtool.c
+index f444817..2b587ec 100644
+--- a/net/core/ethtool.c
++++ b/net/core/ethtool.c
+@@ -1549,6 +1549,8 @@ static noinline_for_stack int ethtool_flash_device(struct net_device *dev,
+ 	if (!dev->ethtool_ops->flash_device)
+ 		return -EOPNOTSUPP;
+ 
++	efl.data[ETHTOOL_FLASH_MAX_FILENAME - 1] = 0;
++
+ 	return dev->ethtool_ops->flash_device(dev, &efl);
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0103-block-don-t-mark-buffers-beyond-end-of-disk-as-mappe.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0103-block-don-t-mark-buffers-beyond-end-of-disk-as-mappe.patch
new file mode 100644
index 0000000..143e752
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0103-block-don-t-mark-buffers-beyond-end-of-disk-as-mappe.patch
@@ -0,0 +1,157 @@
+From 27066ac72b55b4402110f19a0897cc67d2b514d3 Mon Sep 17 00:00:00 2001
+From: Jeff Moyer <jmoyer@redhat.com>
+Date: Fri, 11 May 2012 16:34:10 +0200
+Subject: [PATCH 103/117] block: don't mark buffers beyond end of disk as
+ mapped
+
+commit 080399aaaf3531f5b8761ec0ac30ff98891e8686 upstream.
+
+Hi,
+
+We have a bug report open where a squashfs image mounted on ppc64 would
+exhibit errors due to trying to read beyond the end of the disk.  It can
+easily be reproduced by doing the following:
+
+[root@ibm-p750e-02-lp3 ~]# ls -l install.img
+-rw-r--r-- 1 root root 142032896 Apr 30 16:46 install.img
+[root@ibm-p750e-02-lp3 ~]# mount -o loop ./install.img /mnt/test
+[root@ibm-p750e-02-lp3 ~]# dd if=/dev/loop0 of=/dev/null
+dd: reading `/dev/loop0': Input/output error
+277376+0 records in
+277376+0 records out
+142016512 bytes (142 MB) copied, 0.9465 s, 150 MB/s
+
+In dmesg, you'll find the following:
+
+squashfs: version 4.0 (2009/01/31) Phillip Lougher
+[   43.106012] attempt to access beyond end of device
+[   43.106029] loop0: rw=0, want=277410, limit=277408
+[   43.106039] Buffer I/O error on device loop0, logical block 138704
+[   43.106053] attempt to access beyond end of device
+[   43.106057] loop0: rw=0, want=277412, limit=277408
+[   43.106061] Buffer I/O error on device loop0, logical block 138705
+[   43.106066] attempt to access beyond end of device
+[   43.106070] loop0: rw=0, want=277414, limit=277408
+[   43.106073] Buffer I/O error on device loop0, logical block 138706
+[   43.106078] attempt to access beyond end of device
+[   43.106081] loop0: rw=0, want=277416, limit=277408
+[   43.106085] Buffer I/O error on device loop0, logical block 138707
+[   43.106089] attempt to access beyond end of device
+[   43.106093] loop0: rw=0, want=277418, limit=277408
+[   43.106096] Buffer I/O error on device loop0, logical block 138708
+[   43.106101] attempt to access beyond end of device
+[   43.106104] loop0: rw=0, want=277420, limit=277408
+[   43.106108] Buffer I/O error on device loop0, logical block 138709
+[   43.106112] attempt to access beyond end of device
+[   43.106116] loop0: rw=0, want=277422, limit=277408
+[   43.106120] Buffer I/O error on device loop0, logical block 138710
+[   43.106124] attempt to access beyond end of device
+[   43.106128] loop0: rw=0, want=277424, limit=277408
+[   43.106131] Buffer I/O error on device loop0, logical block 138711
+[   43.106135] attempt to access beyond end of device
+[   43.106139] loop0: rw=0, want=277426, limit=277408
+[   43.106143] Buffer I/O error on device loop0, logical block 138712
+[   43.106147] attempt to access beyond end of device
+[   43.106151] loop0: rw=0, want=277428, limit=277408
+[   43.106154] Buffer I/O error on device loop0, logical block 138713
+[   43.106158] attempt to access beyond end of device
+[   43.106162] loop0: rw=0, want=277430, limit=277408
+[   43.106166] attempt to access beyond end of device
+[   43.106169] loop0: rw=0, want=277432, limit=277408
+...
+[   43.106307] attempt to access beyond end of device
+[   43.106311] loop0: rw=0, want=277470, limit=2774
+
+Squashfs manages to read in the end block(s) of the disk during the
+mount operation.  Then, when dd reads the block device, it leads to
+block_read_full_page being called with buffers that are beyond end of
+disk, but are marked as mapped.  Thus, it would end up submitting read
+I/O against them, resulting in the errors mentioned above.  I fixed the
+problem by modifying init_page_buffers to only set the buffer mapped if
+it fell inside of i_size.
+
+Cheers,
+Jeff
+
+Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
+Acked-by: Nick Piggin <npiggin@kernel.dk>
+
+--
+
+Changes from v1->v2: re-used max_block, as suggested by Nick Piggin.
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/block_dev.c     |    6 +++---
+ fs/buffer.c        |    4 +++-
+ include/linux/fs.h |    1 +
+ 3 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/fs/block_dev.c b/fs/block_dev.c
+index abe9b48..9b98987 100644
+--- a/fs/block_dev.c
++++ b/fs/block_dev.c
+@@ -68,7 +68,7 @@ static void bdev_inode_switch_bdi(struct inode *inode,
+ 	spin_unlock(&dst->wb.list_lock);
+ }
+ 
+-static sector_t max_block(struct block_device *bdev)
++sector_t blkdev_max_block(struct block_device *bdev)
+ {
+ 	sector_t retval = ~((sector_t)0);
+ 	loff_t sz = i_size_read(bdev->bd_inode);
+@@ -139,7 +139,7 @@ static int
+ blkdev_get_block(struct inode *inode, sector_t iblock,
+ 		struct buffer_head *bh, int create)
+ {
+-	if (iblock >= max_block(I_BDEV(inode))) {
++	if (iblock >= blkdev_max_block(I_BDEV(inode))) {
+ 		if (create)
+ 			return -EIO;
+ 
+@@ -161,7 +161,7 @@ static int
+ blkdev_get_blocks(struct inode *inode, sector_t iblock,
+ 		struct buffer_head *bh, int create)
+ {
+-	sector_t end_block = max_block(I_BDEV(inode));
++	sector_t end_block = blkdev_max_block(I_BDEV(inode));
+ 	unsigned long max_blocks = bh->b_size >> inode->i_blkbits;
+ 
+ 	if ((iblock + max_blocks) > end_block) {
+diff --git a/fs/buffer.c b/fs/buffer.c
+index 19d8eb7..c807931 100644
+--- a/fs/buffer.c
++++ b/fs/buffer.c
+@@ -971,6 +971,7 @@ init_page_buffers(struct page *page, struct block_device *bdev,
+ 	struct buffer_head *head = page_buffers(page);
+ 	struct buffer_head *bh = head;
+ 	int uptodate = PageUptodate(page);
++	sector_t end_block = blkdev_max_block(I_BDEV(bdev->bd_inode));
+ 
+ 	do {
+ 		if (!buffer_mapped(bh)) {
+@@ -979,7 +980,8 @@ init_page_buffers(struct page *page, struct block_device *bdev,
+ 			bh->b_blocknr = block;
+ 			if (uptodate)
+ 				set_buffer_uptodate(bh);
+-			set_buffer_mapped(bh);
++			if (block < end_block)
++				set_buffer_mapped(bh);
+ 		}
+ 		block++;
+ 		bh = bh->b_this_page;
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 11f1951..43d36b7 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -2094,6 +2094,7 @@ extern void unregister_blkdev(unsigned int, const char *);
+ extern struct block_device *bdget(dev_t);
+ extern struct block_device *bdgrab(struct block_device *bdev);
+ extern void bd_set_size(struct block_device *, loff_t size);
++extern sector_t blkdev_max_block(struct block_device *bdev);
+ extern void bd_forget(struct inode *inode);
+ extern void bdput(struct block_device *);
+ extern void invalidate_bdev(struct block_device *);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0104-drivers-rtc-rtc-pl031.c-configure-correct-wday-for-2.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0104-drivers-rtc-rtc-pl031.c-configure-correct-wday-for-2.patch
new file mode 100644
index 0000000..1362765
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0104-drivers-rtc-rtc-pl031.c-configure-correct-wday-for-2.patch
@@ -0,0 +1,63 @@
+From 39c43ea9fecaddcfddd03787b920b8accdb87884 Mon Sep 17 00:00:00 2001
+From: Rajkumar Kasirajan <rajkumar.kasirajan@stericsson.com>
+Date: Thu, 17 May 2012 17:03:24 -0700
+Subject: [PATCH 104/117] drivers/rtc/rtc-pl031.c: configure correct wday for
+ 2000-01-01
+
+commit c0a5f4a05af588a0f9951f8d24e2564b09501918 upstream.
+
+The reset date of the ST Micro version of PL031 is 2000-01-01.  The
+correct weekday for 2000-01-01 is saturday, but pl031 is initialized to
+sunday.  This may lead to alarm malfunction, so configure the correct
+wday if RTC_DR indicates reset.
+
+Signed-off-by: Rajkumar Kasirajan <rajkumar.kasirajan@stericsson.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Cc: Mattias Wallin <mattias.wallin@stericsson.com>
+Cc: Alessandro Zummo <a.zummo@towertech.it>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/rtc/rtc-pl031.c |   18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c
+index e86edfc..1e80a48 100644
+--- a/drivers/rtc/rtc-pl031.c
++++ b/drivers/rtc/rtc-pl031.c
+@@ -312,6 +312,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
+ 	int ret;
+ 	struct pl031_local *ldata;
+ 	struct rtc_class_ops *ops = id->data;
++	unsigned long time;
+ 
+ 	ret = amba_request_regions(adev, NULL);
+ 	if (ret)
+@@ -343,6 +344,23 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
+ 		writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN,
+ 		       ldata->base + RTC_CR);
+ 
++	/*
++	 * On ST PL031 variants, the RTC reset value does not provide correct
++	 * weekday for 2000-01-01. Correct the erroneous sunday to saturday.
++	 */
++	if (ldata->hw_designer == AMBA_VENDOR_ST) {
++		if (readl(ldata->base + RTC_YDR) == 0x2000) {
++			time = readl(ldata->base + RTC_DR);
++			if ((time &
++			     (RTC_MON_MASK | RTC_MDAY_MASK | RTC_WDAY_MASK))
++			    == 0x02120000) {
++				time = time | (0x7 << RTC_WDAY_SHIFT);
++				writel(0x2000, ldata->base + RTC_YLR);
++				writel(time, ldata->base + RTC_LR);
++			}
++		}
++	}
++
+ 	ldata->rtc = rtc_device_register("pl031", &adev->dev, ops,
+ 					THIS_MODULE);
+ 	if (IS_ERR(ldata->rtc)) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0105-rtlwifi-Preallocate-USB-read-buffers-and-eliminate-k.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0105-rtlwifi-Preallocate-USB-read-buffers-and-eliminate-k.patch
new file mode 100644
index 0000000..67b25e2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0105-rtlwifi-Preallocate-USB-read-buffers-and-eliminate-k.patch
@@ -0,0 +1,136 @@
+From 91ccd8364ff45f06a05715225583247c09be4bbc Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Mon, 19 Mar 2012 15:44:31 -0500
+Subject: [PATCH 105/117] rtlwifi: Preallocate USB read buffers and eliminate
+ kalloc in read routine
+
+commit a7959c1394d4126a70a53b914ce4105f5173d0aa upstream.
+
+The current version of rtlwifi for USB operations uses kmalloc to
+acquire a 32-bit buffer for each read of the device. When
+_usb_read_sync() is called with the rcu_lock held, the result is
+a "sleeping function called from invalid context" BUG. This is
+reported for two cases in https://bugzilla.kernel.org/show_bug.cgi?id=42775.
+The first case has the lock originating from within rtlwifi and could
+be fixed by rearranging the locking; however, the second originates from
+within mac80211. The kmalloc() call is removed from _usb_read_sync()
+by creating a ring buffer pointer in the private area and
+allocating the buffer data in the probe routine.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[This version will apply to 3.2 and earlier. - Larry]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/rtlwifi/usb.c  |   34 ++++++++++++++++------------------
+ drivers/net/wireless/rtlwifi/wifi.h |    6 +++++-
+ 2 files changed, 21 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c
+index 2b7bcc8..db34db6 100644
+--- a/drivers/net/wireless/rtlwifi/usb.c
++++ b/drivers/net/wireless/rtlwifi/usb.c
+@@ -113,46 +113,38 @@ static int _usbctrl_vendorreq_sync_read(struct usb_device *udev, u8 request,
+ 	return status;
+ }
+ 
+-static u32 _usb_read_sync(struct usb_device *udev, u32 addr, u16 len)
++static u32 _usb_read_sync(struct rtl_priv *rtlpriv, u32 addr, u16 len)
+ {
++	struct device *dev = rtlpriv->io.dev;
++	struct usb_device *udev = to_usb_device(dev);
+ 	u8 request;
+ 	u16 wvalue;
+ 	u16 index;
+-	u32 *data;
+-	u32 ret;
++	__le32 *data = &rtlpriv->usb_data[rtlpriv->usb_data_index];
+ 
+-	data = kmalloc(sizeof(u32), GFP_KERNEL);
+-	if (!data)
+-		return -ENOMEM;
+ 	request = REALTEK_USB_VENQT_CMD_REQ;
+ 	index = REALTEK_USB_VENQT_CMD_IDX; /* n/a */
+ 
+ 	wvalue = (u16)addr;
+ 	_usbctrl_vendorreq_sync_read(udev, request, wvalue, index, data, len);
+-	ret = *data;
+-	kfree(data);
+-	return ret;
++	if (++rtlpriv->usb_data_index >= RTL_USB_MAX_RX_COUNT)
++		rtlpriv->usb_data_index = 0;
++	return le32_to_cpu(*data);
+ }
+ 
+ static u8 _usb_read8_sync(struct rtl_priv *rtlpriv, u32 addr)
+ {
+-	struct device *dev = rtlpriv->io.dev;
+-
+-	return (u8)_usb_read_sync(to_usb_device(dev), addr, 1);
++	return (u8)_usb_read_sync(rtlpriv, addr, 1);
+ }
+ 
+ static u16 _usb_read16_sync(struct rtl_priv *rtlpriv, u32 addr)
+ {
+-	struct device *dev = rtlpriv->io.dev;
+-
+-	return (u16)_usb_read_sync(to_usb_device(dev), addr, 2);
++	return (u16)_usb_read_sync(rtlpriv, addr, 2);
+ }
+ 
+ static u32 _usb_read32_sync(struct rtl_priv *rtlpriv, u32 addr)
+ {
+-	struct device *dev = rtlpriv->io.dev;
+-
+-	return _usb_read_sync(to_usb_device(dev), addr, 4);
++	return _usb_read_sync(rtlpriv, addr, 4);
+ }
+ 
+ static void _usb_write_async(struct usb_device *udev, u32 addr, u32 val,
+@@ -913,6 +905,11 @@ int __devinit rtl_usb_probe(struct usb_interface *intf,
+ 		return -ENOMEM;
+ 	}
+ 	rtlpriv = hw->priv;
++	rtlpriv->usb_data = kzalloc(RTL_USB_MAX_RX_COUNT * sizeof(u32),
++				    GFP_KERNEL);
++	if (!rtlpriv->usb_data)
++		return -ENOMEM;
++	rtlpriv->usb_data_index = 0;
+ 	SET_IEEE80211_DEV(hw, &intf->dev);
+ 	udev = interface_to_usbdev(intf);
+ 	usb_get_dev(udev);
+@@ -990,6 +987,7 @@ void rtl_usb_disconnect(struct usb_interface *intf)
+ 	/* rtl_deinit_rfkill(hw); */
+ 	rtl_usb_deinit(hw);
+ 	rtl_deinit_core(hw);
++	kfree(rtlpriv->usb_data);
+ 	rtlpriv->cfg->ops->deinit_sw_leds(hw);
+ 	rtlpriv->cfg->ops->deinit_sw_vars(hw);
+ 	_rtl_usb_io_handler_release(hw);
+diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
+index 713c7dd..b1e9deb 100644
+--- a/drivers/net/wireless/rtlwifi/wifi.h
++++ b/drivers/net/wireless/rtlwifi/wifi.h
+@@ -63,7 +63,7 @@
+ #define AC_MAX					4
+ #define QOS_QUEUE_NUM				4
+ #define RTL_MAC80211_NUM_QUEUE			5
+-
++#define RTL_USB_MAX_RX_COUNT			100
+ #define QBSS_LOAD_SIZE				5
+ #define MAX_WMMELE_LENGTH			64
+ 
+@@ -1621,6 +1621,10 @@ struct rtl_priv {
+ 	   interface or hardware */
+ 	unsigned long status;
+ 
++	/* data buffer pointer for USB reads */
++	__le32 *usb_data;
++	int usb_data_index;
++
+ 	/*This must be the last item so
+ 	   that it points to the data allocated
+ 	   beyond  this structure like:
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0106-NFS4-fix-compile-warnings-in-nfs4proc.c.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0106-NFS4-fix-compile-warnings-in-nfs4proc.c.patch
new file mode 100644
index 0000000..678add0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0106-NFS4-fix-compile-warnings-in-nfs4proc.c.patch
@@ -0,0 +1,39 @@
+From 697781d208d92b5998815e584411f29c34048cd6 Mon Sep 17 00:00:00 2001
+From: Peng Tao <bergwolf@gmail.com>
+Date: Tue, 10 Jan 2012 22:42:47 +0800
+Subject: [PATCH 106/117] NFS4: fix compile warnings in nfs4proc.c
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit de040beccd52bb5fcac90031505384d037b1111c upstream.
+
+compile in nfs-for-3.3 branch shows following warnings. Fix it here.
+
+fs/nfs/nfs4proc.c: In function ‘__nfs4_get_acl_uncached’:
+fs/nfs/nfs4proc.c:3589: warning: format ‘%ld’ expects type ‘long int’, but argument 4 has type ‘size_t’
+fs/nfs/nfs4proc.c:3589: warning: format ‘%ld’ expects type ‘long int’, but argument 6 has type ‘size_t’
+
+Signed-off-by: Peng Tao <peng_tao@emc.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/nfs/nfs4proc.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index bab7c58..065f82e 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -3601,7 +3601,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
+ 		res.acl_flags |= NFS4_ACL_LEN_REQUEST;
+ 	resp_buf = page_address(pages[0]);
+ 
+-	dprintk("%s  buf %p buflen %ld npages %d args.acl_len %ld\n",
++	dprintk("%s  buf %p buflen %zu npages %d args.acl_len %zu\n",
+ 		__func__, buf, buflen, npages, args.acl_len);
+ 	ret = nfs4_call_sync(NFS_SERVER(inode)->client, NFS_SERVER(inode),
+ 			     &msg, &args.seq_args, &res.seq_res, 0);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0107-Avoid-reading-past-buffer-when-calling-GETACL.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0107-Avoid-reading-past-buffer-when-calling-GETACL.patch
new file mode 100644
index 0000000..6859029
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0107-Avoid-reading-past-buffer-when-calling-GETACL.patch
@@ -0,0 +1,123 @@
+From c47d1a5a922ddebee44945d665affd7214f2dbf3 Mon Sep 17 00:00:00 2001
+From: Sachin Prabhu <sprabhu@redhat.com>
+Date: Tue, 17 Apr 2012 14:35:39 +0100
+Subject: [PATCH 107/117] Avoid reading past buffer when calling GETACL
+
+commit 5a00689930ab975fdd1b37b034475017e460cf2a upstream.
+
+Bug noticed in commit
+bf118a342f10dafe44b14451a1392c3254629a1f
+
+When calling GETACL, if the size of the bitmap array, the length
+attribute and the acl returned by the server is greater than the
+allocated buffer(args.acl_len), we can Oops with a General Protection
+fault at _copy_from_pages() when we attempt to read past the pages
+allocated.
+
+This patch allocates an extra PAGE for the bitmap and checks to see that
+the bitmap + attribute_length + ACLs don't exceed the buffer space
+allocated to it.
+
+Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
+Reported-by: Jian Li <jiali@redhat.com>
+[Trond: Fixed a size_t vs unsigned int printk() warning]
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/nfs/nfs4proc.c |   16 ++++++++++------
+ fs/nfs/nfs4xdr.c  |   18 +++++++++++-------
+ 2 files changed, 21 insertions(+), 13 deletions(-)
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index 065f82e..39e5341 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -3582,19 +3582,23 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
+ 	if (npages == 0)
+ 		npages = 1;
+ 
++	/* Add an extra page to handle the bitmap returned */
++	npages++;
++
+ 	for (i = 0; i < npages; i++) {
+ 		pages[i] = alloc_page(GFP_KERNEL);
+ 		if (!pages[i])
+ 			goto out_free;
+ 	}
+-	if (npages > 1) {
+-		/* for decoding across pages */
+-		res.acl_scratch = alloc_page(GFP_KERNEL);
+-		if (!res.acl_scratch)
+-			goto out_free;
+-	}
++
++	/* for decoding across pages */
++	res.acl_scratch = alloc_page(GFP_KERNEL);
++	if (!res.acl_scratch)
++		goto out_free;
++
+ 	args.acl_len = npages * PAGE_SIZE;
+ 	args.acl_pgbase = 0;
++
+ 	/* Let decode_getfacl know not to fail if the ACL data is larger than
+ 	 * the page we send as a guess */
+ 	if (buf == NULL)
+diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
+index 68adab4..d7e6f7b 100644
+--- a/fs/nfs/nfs4xdr.c
++++ b/fs/nfs/nfs4xdr.c
+@@ -4965,11 +4965,19 @@ static int decode_getacl(struct xdr_stream *xdr, struct rpc_rqst *req,
+ 		 bitmap[3] = {0};
+ 	struct kvec *iov = req->rq_rcv_buf.head;
+ 	int status;
++	size_t page_len = xdr->buf->page_len;
+ 
+ 	res->acl_len = 0;
+ 	if ((status = decode_op_hdr(xdr, OP_GETATTR)) != 0)
+ 		goto out;
++
+ 	bm_p = xdr->p;
++	res->acl_data_offset = be32_to_cpup(bm_p) + 2;
++	res->acl_data_offset <<= 2;
++	/* Check if the acl data starts beyond the allocated buffer */
++	if (res->acl_data_offset > page_len)
++		return -ERANGE;
++
+ 	if ((status = decode_attr_bitmap(xdr, bitmap)) != 0)
+ 		goto out;
+ 	if ((status = decode_attr_length(xdr, &attrlen, &savep)) != 0)
+@@ -4979,28 +4987,24 @@ static int decode_getacl(struct xdr_stream *xdr, struct rpc_rqst *req,
+ 		return -EIO;
+ 	if (likely(bitmap[0] & FATTR4_WORD0_ACL)) {
+ 		size_t hdrlen;
+-		u32 recvd;
+ 
+ 		/* The bitmap (xdr len + bitmaps) and the attr xdr len words
+ 		 * are stored with the acl data to handle the problem of
+ 		 * variable length bitmaps.*/
+ 		xdr->p = bm_p;
+-		res->acl_data_offset = be32_to_cpup(bm_p) + 2;
+-		res->acl_data_offset <<= 2;
+ 
+ 		/* We ignore &savep and don't do consistency checks on
+ 		 * the attr length.  Let userspace figure it out.... */
+ 		hdrlen = (u8 *)xdr->p - (u8 *)iov->iov_base;
+ 		attrlen += res->acl_data_offset;
+-		recvd = req->rq_rcv_buf.len - hdrlen;
+-		if (attrlen > recvd) {
++		if (attrlen > page_len) {
+ 			if (res->acl_flags & NFS4_ACL_LEN_REQUEST) {
+ 				/* getxattr interface called with a NULL buf */
+ 				res->acl_len = attrlen;
+ 				goto out;
+ 			}
+-			dprintk("NFS: acl reply: attrlen %u > recvd %u\n",
+-					attrlen, recvd);
++			dprintk("NFS: acl reply: attrlen %zu > page_len %u\n",
++					attrlen, page_len);
+ 			return -EINVAL;
+ 		}
+ 		xdr_read_pages(xdr, attrlen);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0108-Avoid-beyond-bounds-copy-while-caching-ACL.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0108-Avoid-beyond-bounds-copy-while-caching-ACL.patch
new file mode 100644
index 0000000..4334d5c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0108-Avoid-beyond-bounds-copy-while-caching-ACL.patch
@@ -0,0 +1,88 @@
+From 883e739eda3448cf83266a155d8ad39b1fe7ac6e Mon Sep 17 00:00:00 2001
+From: Sachin Prabhu <sprabhu@redhat.com>
+Date: Tue, 17 Apr 2012 14:36:40 +0100
+Subject: [PATCH 108/117] Avoid beyond bounds copy while caching ACL
+
+commit 5794d21ef4639f0e33440927bb903f9598c21e92 upstream.
+
+When attempting to cache ACLs returned from the server, if the bitmap
+size + the ACL size is greater than a PAGE_SIZE but the ACL size itself
+is smaller than a PAGE_SIZE, we can read past the buffer page boundary.
+
+Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
+Reported-by: Jian Li <jiali@redhat.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/nfs/nfs4proc.c |   12 +++++-------
+ fs/nfs/nfs4xdr.c  |    2 +-
+ 2 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index 39e5341..03d9b90 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -3526,16 +3526,16 @@ out:
+ 	return ret;
+ }
+ 
+-static void nfs4_write_cached_acl(struct inode *inode, const char *buf, size_t acl_len)
++static void nfs4_write_cached_acl(struct inode *inode, struct page **pages, size_t pgbase, size_t acl_len)
+ {
+ 	struct nfs4_cached_acl *acl;
+ 
+-	if (buf && acl_len <= PAGE_SIZE) {
++	if (pages && acl_len <= PAGE_SIZE) {
+ 		acl = kmalloc(sizeof(*acl) + acl_len, GFP_KERNEL);
+ 		if (acl == NULL)
+ 			goto out;
+ 		acl->cached = 1;
+-		memcpy(acl->data, buf, acl_len);
++		_copy_from_pages(acl->data, pages, pgbase, acl_len);
+ 	} else {
+ 		acl = kmalloc(sizeof(*acl), GFP_KERNEL);
+ 		if (acl == NULL)
+@@ -3568,7 +3568,6 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
+ 	struct nfs_getaclres res = {
+ 		.acl_len = buflen,
+ 	};
+-	void *resp_buf;
+ 	struct rpc_message msg = {
+ 		.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_GETACL],
+ 		.rpc_argp = &args,
+@@ -3603,7 +3602,6 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
+ 	 * the page we send as a guess */
+ 	if (buf == NULL)
+ 		res.acl_flags |= NFS4_ACL_LEN_REQUEST;
+-	resp_buf = page_address(pages[0]);
+ 
+ 	dprintk("%s  buf %p buflen %zu npages %d args.acl_len %zu\n",
+ 		__func__, buf, buflen, npages, args.acl_len);
+@@ -3614,9 +3612,9 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
+ 
+ 	acl_len = res.acl_len - res.acl_data_offset;
+ 	if (acl_len > args.acl_len)
+-		nfs4_write_cached_acl(inode, NULL, acl_len);
++		nfs4_write_cached_acl(inode, NULL, 0, acl_len);
+ 	else
+-		nfs4_write_cached_acl(inode, resp_buf + res.acl_data_offset,
++		nfs4_write_cached_acl(inode, pages, res.acl_data_offset,
+ 				      acl_len);
+ 	if (buf) {
+ 		ret = -ERANGE;
+diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
+index d7e6f7b..bdd5bdc 100644
+--- a/fs/nfs/nfs4xdr.c
++++ b/fs/nfs/nfs4xdr.c
+@@ -5003,7 +5003,7 @@ static int decode_getacl(struct xdr_stream *xdr, struct rpc_rqst *req,
+ 				res->acl_len = attrlen;
+ 				goto out;
+ 			}
+-			dprintk("NFS: acl reply: attrlen %zu > page_len %u\n",
++			dprintk("NFS: acl reply: attrlen %u > page_len %zu\n",
+ 					attrlen, page_len);
+ 			return -EINVAL;
+ 		}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0109-i2c-tegra-notify-transfer-complete-after-clearing-st.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0109-i2c-tegra-notify-transfer-complete-after-clearing-st.patch
new file mode 100644
index 0000000..e6899f5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0109-i2c-tegra-notify-transfer-complete-after-clearing-st.patch
@@ -0,0 +1,73 @@
+From 0f8821cf8d7d8c94c8d29d8d32c02d90363ffe9b Mon Sep 17 00:00:00 2001
+From: Laxman Dewangan <ldewangan@nvidia.com>
+Date: Mon, 7 May 2012 12:16:19 +0530
+Subject: [PATCH 109/117] i2c: tegra: notify transfer-complete after clearing
+ status.
+
+commit c889e91d2cc22123f20f40dde0c0a91856a20eea upstream.
+
+The notification of the transfer complete by calling complete()
+should be done after clearing all interrupt status.
+This avoids the race condition of misconfigure the i2c controller
+in multi-core environment.
+
+Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
+Acked-by: Stephen Warren <swarren@wwwdotorg.org>
+Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/i2c/busses/i2c-tegra.c |   13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
+index 46b6500..3d7885a 100644
+--- a/drivers/i2c/busses/i2c-tegra.c
++++ b/drivers/i2c/busses/i2c-tegra.c
+@@ -401,8 +401,6 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id)
+ 			disable_irq_nosync(i2c_dev->irq);
+ 			i2c_dev->irq_disabled = 1;
+ 		}
+-
+-		complete(&i2c_dev->msg_complete);
+ 		goto err;
+ 	}
+ 
+@@ -411,7 +409,6 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id)
+ 			i2c_dev->msg_err |= I2C_ERR_NO_ACK;
+ 		if (status & I2C_INT_ARBITRATION_LOST)
+ 			i2c_dev->msg_err |= I2C_ERR_ARBITRATION_LOST;
+-		complete(&i2c_dev->msg_complete);
+ 		goto err;
+ 	}
+ 
+@@ -429,14 +426,14 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id)
+ 			tegra_i2c_mask_irq(i2c_dev, I2C_INT_TX_FIFO_DATA_REQ);
+ 	}
+ 
++	i2c_writel(i2c_dev, status, I2C_INT_STATUS);
++	if (i2c_dev->is_dvc)
++		dvc_writel(i2c_dev, DVC_STATUS_I2C_DONE_INTR, DVC_STATUS);
++
+ 	if (status & I2C_INT_PACKET_XFER_COMPLETE) {
+ 		BUG_ON(i2c_dev->msg_buf_remaining);
+ 		complete(&i2c_dev->msg_complete);
+ 	}
+-
+-	i2c_writel(i2c_dev, status, I2C_INT_STATUS);
+-	if (i2c_dev->is_dvc)
+-		dvc_writel(i2c_dev, DVC_STATUS_I2C_DONE_INTR, DVC_STATUS);
+ 	return IRQ_HANDLED;
+ err:
+ 	/* An error occurred, mask all interrupts */
+@@ -446,6 +443,8 @@ err:
+ 	i2c_writel(i2c_dev, status, I2C_INT_STATUS);
+ 	if (i2c_dev->is_dvc)
+ 		dvc_writel(i2c_dev, DVC_STATUS_I2C_DONE_INTR, DVC_STATUS);
++
++	complete(&i2c_dev->msg_complete);
+ 	return IRQ_HANDLED;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0110-i2c-davinci-Free-requested-IRQ-in-remove.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0110-i2c-davinci-Free-requested-IRQ-in-remove.patch
new file mode 100644
index 0000000..7b921ac
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0110-i2c-davinci-Free-requested-IRQ-in-remove.patch
@@ -0,0 +1,33 @@
+From 38de7136cb639352d20e39a90c41bb93f63a03e6 Mon Sep 17 00:00:00 2001
+From: Marcus Folkesson <marcus.folkesson@gmail.com>
+Date: Thu, 3 May 2012 15:56:36 +0200
+Subject: [PATCH 110/117] i2c: davinci: Free requested IRQ in remove
+
+commit 9868a060ccf769c08ec378a9829137e272e9a92c upstream.
+
+The freed IRQ is not necessary the one requested in probe.
+Even if it was, with two or more i2c-controllers it will fails anyway.
+
+Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
+Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/i2c/busses/i2c-davinci.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
+index a76d85f..79b4bcb 100644
+--- a/drivers/i2c/busses/i2c-davinci.c
++++ b/drivers/i2c/busses/i2c-davinci.c
+@@ -755,7 +755,7 @@ static int davinci_i2c_remove(struct platform_device *pdev)
+ 	dev->clk = NULL;
+ 
+ 	davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0);
+-	free_irq(IRQ_I2C, dev);
++	free_irq(dev->irq, dev);
+ 	iounmap(dev->base);
+ 	kfree(dev);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0111-x86-realmode-16-bit-real-mode-code-support-for-reloc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0111-x86-realmode-16-bit-real-mode-code-support-for-reloc.patch
new file mode 100644
index 0000000..dfd1310
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0111-x86-realmode-16-bit-real-mode-code-support-for-reloc.patch
@@ -0,0 +1,1651 @@
+From 873824542d50e967bda4a3526b4aceec80641c6d Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@linux.intel.com>
+Date: Tue, 8 May 2012 21:22:24 +0300
+Subject: [PATCH 111/117] x86, realmode: 16-bit real-mode code support for
+ relocs tool
+
+commit 6520fe5564acf07ade7b18a1272db1184835c487 upstream.
+
+A new option is added to the relocs tool called '--realmode'.
+This option causes the generation of 16-bit segment relocations
+and 32-bit linear relocations for the real-mode code. When
+the real-mode code is moved to the low-memory during kernel
+initialization, these relocation entries can be used to
+relocate the code properly.
+
+In the assembly code 16-bit segment relocations must be relative
+to the 'real_mode_seg' absolute symbol. Linear relocations must be
+relative to a symbol prefixed with 'pa_'.
+
+16-bit segment relocation is used to load cs:ip in 16-bit code.
+Linear relocations are used in the 32-bit code for relocatable
+data references. They are declared in the linker script of the
+real-mode code.
+
+The relocs tool is moved to arch/x86/tools/relocs.c, and added new
+target archscripts that can be used to build scripts needed building
+an architecture.  be compiled before building the arch/x86 tree.
+
+[ hpa: accelerating this because it detects invalid absolute
+  relocations, a serious bug in binutils 2.22.52.0.x which currently
+  produces bad kernels. ]
+
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+Link: http://lkml.kernel.org/r/1336501366-28617-2-git-send-email-jarkko.sakkinen@intel.com
+Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+Cc: <stable@vger.kernel.org>
+[bwh: Backported to 3.2:
+ - Adjust context (no archheaders; no insn_sanity)
+ - Expand put_unaligned_le32()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ Makefile                          |    9 +-
+ arch/x86/Makefile                 |    3 +
+ arch/x86/boot/compressed/Makefile |    9 +-
+ arch/x86/boot/compressed/relocs.c |  680 -------------------------------
+ arch/x86/tools/.gitignore         |    1 +
+ arch/x86/tools/Makefile           |    3 +
+ arch/x86/tools/relocs.c           |  799 +++++++++++++++++++++++++++++++++++++
+ scripts/Makefile                  |    2 +
+ 8 files changed, 818 insertions(+), 688 deletions(-)
+ delete mode 100644 arch/x86/boot/compressed/relocs.c
+ create mode 100644 arch/x86/tools/.gitignore
+ create mode 100644 arch/x86/tools/relocs.c
+
+diff --git a/Makefile b/Makefile
+index add68f1..0226da5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -442,7 +442,7 @@ asm-generic:
+ 
+ no-dot-config-targets := clean mrproper distclean \
+ 			 cscope gtags TAGS tags help %docs check% coccicheck \
+-			 include/linux/version.h headers_% \
++			 include/linux/version.h headers_% archscripts \
+ 			 kernelversion %src-pkg
+ 
+ config-targets := 0
+@@ -979,7 +979,7 @@ prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \
+                    include/config/auto.conf
+ 	$(cmd_crmodverdir)
+ 
+-archprepare: prepare1 scripts_basic
++archprepare: archscripts prepare1 scripts_basic
+ 
+ prepare0: archprepare FORCE
+ 	$(Q)$(MAKE) $(build)=.
+@@ -1046,8 +1046,11 @@ hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
+ # If we do an all arch process set dst to asm-$(hdr-arch)
+ hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm)
+ 
++PHONY += archscripts
++archscripts:
++
+ PHONY += __headers
+-__headers: include/linux/version.h scripts_basic asm-generic FORCE
++__headers: include/linux/version.h scripts_basic asm-generic archscripts FORCE
+ 	$(Q)$(MAKE) $(build)=scripts build_unifdef
+ 
+ PHONY += headers_install_all
+diff --git a/arch/x86/Makefile b/arch/x86/Makefile
+index b02e509..774fd16 100644
+--- a/arch/x86/Makefile
++++ b/arch/x86/Makefile
+@@ -117,6 +117,9 @@ KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
+ KBUILD_CFLAGS += $(mflags-y)
+ KBUILD_AFLAGS += $(mflags-y)
+ 
++archscripts:
++	$(Q)$(MAKE) $(build)=arch/x86/tools relocs
++
+ ###
+ # Kernel objects
+ 
+diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
+index 09664ef..77453c6 100644
+--- a/arch/x86/boot/compressed/Makefile
++++ b/arch/x86/boot/compressed/Makefile
+@@ -31,13 +31,12 @@ OBJCOPYFLAGS_vmlinux.bin :=  -R .comment -S
+ $(obj)/vmlinux.bin: vmlinux FORCE
+ 	$(call if_changed,objcopy)
+ 
++targets += vmlinux.bin.all vmlinux.relocs
+ 
+-targets += vmlinux.bin.all vmlinux.relocs relocs
+-hostprogs-$(CONFIG_X86_NEED_RELOCS) += relocs
+-
++CMD_RELOCS = arch/x86/tools/relocs
+ quiet_cmd_relocs = RELOCS  $@
+-      cmd_relocs = $(obj)/relocs $< > $@;$(obj)/relocs --abs-relocs $<
+-$(obj)/vmlinux.relocs: vmlinux $(obj)/relocs FORCE
++      cmd_relocs = $(CMD_RELOCS) $< > $@;$(CMD_RELOCS) --abs-relocs $<
++$(obj)/vmlinux.relocs: vmlinux FORCE
+ 	$(call if_changed,relocs)
+ 
+ vmlinux.bin.all-y := $(obj)/vmlinux.bin
+diff --git a/arch/x86/boot/compressed/relocs.c b/arch/x86/boot/compressed/relocs.c
+deleted file mode 100644
+index e77f4e4..0000000
+--- a/arch/x86/boot/compressed/relocs.c
++++ /dev/null
+@@ -1,680 +0,0 @@
+-#include <stdio.h>
+-#include <stdarg.h>
+-#include <stdlib.h>
+-#include <stdint.h>
+-#include <string.h>
+-#include <errno.h>
+-#include <unistd.h>
+-#include <elf.h>
+-#include <byteswap.h>
+-#define USE_BSD
+-#include <endian.h>
+-#include <regex.h>
+-
+-static void die(char *fmt, ...);
+-
+-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+-static Elf32_Ehdr ehdr;
+-static unsigned long reloc_count, reloc_idx;
+-static unsigned long *relocs;
+-
+-struct section {
+-	Elf32_Shdr     shdr;
+-	struct section *link;
+-	Elf32_Sym      *symtab;
+-	Elf32_Rel      *reltab;
+-	char           *strtab;
+-};
+-static struct section *secs;
+-
+-/*
+- * Following symbols have been audited. There values are constant and do
+- * not change if bzImage is loaded at a different physical address than
+- * the address for which it has been compiled. Don't warn user about
+- * absolute relocations present w.r.t these symbols.
+- */
+-static const char abs_sym_regex[] =
+-	"^(xen_irq_disable_direct_reloc$|"
+-	"xen_save_fl_direct_reloc$|"
+-	"VDSO|"
+-	"__crc_)";
+-static regex_t abs_sym_regex_c;
+-static int is_abs_reloc(const char *sym_name)
+-{
+-	return !regexec(&abs_sym_regex_c, sym_name, 0, NULL, 0);
+-}
+-
+-/*
+- * These symbols are known to be relative, even if the linker marks them
+- * as absolute (typically defined outside any section in the linker script.)
+- */
+-static const char rel_sym_regex[] =
+-	"^_end$";
+-static regex_t rel_sym_regex_c;
+-static int is_rel_reloc(const char *sym_name)
+-{
+-	return !regexec(&rel_sym_regex_c, sym_name, 0, NULL, 0);
+-}
+-
+-static void regex_init(void)
+-{
+-        char errbuf[128];
+-        int err;
+-	
+-        err = regcomp(&abs_sym_regex_c, abs_sym_regex,
+-                      REG_EXTENDED|REG_NOSUB);
+-        if (err) {
+-                regerror(err, &abs_sym_regex_c, errbuf, sizeof errbuf);
+-                die("%s", errbuf);
+-        }
+-
+-        err = regcomp(&rel_sym_regex_c, rel_sym_regex,
+-                      REG_EXTENDED|REG_NOSUB);
+-        if (err) {
+-                regerror(err, &rel_sym_regex_c, errbuf, sizeof errbuf);
+-                die("%s", errbuf);
+-        }
+-}
+-
+-static void die(char *fmt, ...)
+-{
+-	va_list ap;
+-	va_start(ap, fmt);
+-	vfprintf(stderr, fmt, ap);
+-	va_end(ap);
+-	exit(1);
+-}
+-
+-static const char *sym_type(unsigned type)
+-{
+-	static const char *type_name[] = {
+-#define SYM_TYPE(X) [X] = #X
+-		SYM_TYPE(STT_NOTYPE),
+-		SYM_TYPE(STT_OBJECT),
+-		SYM_TYPE(STT_FUNC),
+-		SYM_TYPE(STT_SECTION),
+-		SYM_TYPE(STT_FILE),
+-		SYM_TYPE(STT_COMMON),
+-		SYM_TYPE(STT_TLS),
+-#undef SYM_TYPE
+-	};
+-	const char *name = "unknown sym type name";
+-	if (type < ARRAY_SIZE(type_name)) {
+-		name = type_name[type];
+-	}
+-	return name;
+-}
+-
+-static const char *sym_bind(unsigned bind)
+-{
+-	static const char *bind_name[] = {
+-#define SYM_BIND(X) [X] = #X
+-		SYM_BIND(STB_LOCAL),
+-		SYM_BIND(STB_GLOBAL),
+-		SYM_BIND(STB_WEAK),
+-#undef SYM_BIND
+-	};
+-	const char *name = "unknown sym bind name";
+-	if (bind < ARRAY_SIZE(bind_name)) {
+-		name = bind_name[bind];
+-	}
+-	return name;
+-}
+-
+-static const char *sym_visibility(unsigned visibility)
+-{
+-	static const char *visibility_name[] = {
+-#define SYM_VISIBILITY(X) [X] = #X
+-		SYM_VISIBILITY(STV_DEFAULT),
+-		SYM_VISIBILITY(STV_INTERNAL),
+-		SYM_VISIBILITY(STV_HIDDEN),
+-		SYM_VISIBILITY(STV_PROTECTED),
+-#undef SYM_VISIBILITY
+-	};
+-	const char *name = "unknown sym visibility name";
+-	if (visibility < ARRAY_SIZE(visibility_name)) {
+-		name = visibility_name[visibility];
+-	}
+-	return name;
+-}
+-
+-static const char *rel_type(unsigned type)
+-{
+-	static const char *type_name[] = {
+-#define REL_TYPE(X) [X] = #X
+-		REL_TYPE(R_386_NONE),
+-		REL_TYPE(R_386_32),
+-		REL_TYPE(R_386_PC32),
+-		REL_TYPE(R_386_GOT32),
+-		REL_TYPE(R_386_PLT32),
+-		REL_TYPE(R_386_COPY),
+-		REL_TYPE(R_386_GLOB_DAT),
+-		REL_TYPE(R_386_JMP_SLOT),
+-		REL_TYPE(R_386_RELATIVE),
+-		REL_TYPE(R_386_GOTOFF),
+-		REL_TYPE(R_386_GOTPC),
+-#undef REL_TYPE
+-	};
+-	const char *name = "unknown type rel type name";
+-	if (type < ARRAY_SIZE(type_name) && type_name[type]) {
+-		name = type_name[type];
+-	}
+-	return name;
+-}
+-
+-static const char *sec_name(unsigned shndx)
+-{
+-	const char *sec_strtab;
+-	const char *name;
+-	sec_strtab = secs[ehdr.e_shstrndx].strtab;
+-	name = "<noname>";
+-	if (shndx < ehdr.e_shnum) {
+-		name = sec_strtab + secs[shndx].shdr.sh_name;
+-	}
+-	else if (shndx == SHN_ABS) {
+-		name = "ABSOLUTE";
+-	}
+-	else if (shndx == SHN_COMMON) {
+-		name = "COMMON";
+-	}
+-	return name;
+-}
+-
+-static const char *sym_name(const char *sym_strtab, Elf32_Sym *sym)
+-{
+-	const char *name;
+-	name = "<noname>";
+-	if (sym->st_name) {
+-		name = sym_strtab + sym->st_name;
+-	}
+-	else {
+-		name = sec_name(secs[sym->st_shndx].shdr.sh_name);
+-	}
+-	return name;
+-}
+-
+-
+-
+-#if BYTE_ORDER == LITTLE_ENDIAN
+-#define le16_to_cpu(val) (val)
+-#define le32_to_cpu(val) (val)
+-#endif
+-#if BYTE_ORDER == BIG_ENDIAN
+-#define le16_to_cpu(val) bswap_16(val)
+-#define le32_to_cpu(val) bswap_32(val)
+-#endif
+-
+-static uint16_t elf16_to_cpu(uint16_t val)
+-{
+-	return le16_to_cpu(val);
+-}
+-
+-static uint32_t elf32_to_cpu(uint32_t val)
+-{
+-	return le32_to_cpu(val);
+-}
+-
+-static void read_ehdr(FILE *fp)
+-{
+-	if (fread(&ehdr, sizeof(ehdr), 1, fp) != 1) {
+-		die("Cannot read ELF header: %s\n",
+-			strerror(errno));
+-	}
+-	if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0) {
+-		die("No ELF magic\n");
+-	}
+-	if (ehdr.e_ident[EI_CLASS] != ELFCLASS32) {
+-		die("Not a 32 bit executable\n");
+-	}
+-	if (ehdr.e_ident[EI_DATA] != ELFDATA2LSB) {
+-		die("Not a LSB ELF executable\n");
+-	}
+-	if (ehdr.e_ident[EI_VERSION] != EV_CURRENT) {
+-		die("Unknown ELF version\n");
+-	}
+-	/* Convert the fields to native endian */
+-	ehdr.e_type      = elf16_to_cpu(ehdr.e_type);
+-	ehdr.e_machine   = elf16_to_cpu(ehdr.e_machine);
+-	ehdr.e_version   = elf32_to_cpu(ehdr.e_version);
+-	ehdr.e_entry     = elf32_to_cpu(ehdr.e_entry);
+-	ehdr.e_phoff     = elf32_to_cpu(ehdr.e_phoff);
+-	ehdr.e_shoff     = elf32_to_cpu(ehdr.e_shoff);
+-	ehdr.e_flags     = elf32_to_cpu(ehdr.e_flags);
+-	ehdr.e_ehsize    = elf16_to_cpu(ehdr.e_ehsize);
+-	ehdr.e_phentsize = elf16_to_cpu(ehdr.e_phentsize);
+-	ehdr.e_phnum     = elf16_to_cpu(ehdr.e_phnum);
+-	ehdr.e_shentsize = elf16_to_cpu(ehdr.e_shentsize);
+-	ehdr.e_shnum     = elf16_to_cpu(ehdr.e_shnum);
+-	ehdr.e_shstrndx  = elf16_to_cpu(ehdr.e_shstrndx);
+-
+-	if ((ehdr.e_type != ET_EXEC) && (ehdr.e_type != ET_DYN)) {
+-		die("Unsupported ELF header type\n");
+-	}
+-	if (ehdr.e_machine != EM_386) {
+-		die("Not for x86\n");
+-	}
+-	if (ehdr.e_version != EV_CURRENT) {
+-		die("Unknown ELF version\n");
+-	}
+-	if (ehdr.e_ehsize != sizeof(Elf32_Ehdr)) {
+-		die("Bad Elf header size\n");
+-	}
+-	if (ehdr.e_phentsize != sizeof(Elf32_Phdr)) {
+-		die("Bad program header entry\n");
+-	}
+-	if (ehdr.e_shentsize != sizeof(Elf32_Shdr)) {
+-		die("Bad section header entry\n");
+-	}
+-	if (ehdr.e_shstrndx >= ehdr.e_shnum) {
+-		die("String table index out of bounds\n");
+-	}
+-}
+-
+-static void read_shdrs(FILE *fp)
+-{
+-	int i;
+-	Elf32_Shdr shdr;
+-
+-	secs = calloc(ehdr.e_shnum, sizeof(struct section));
+-	if (!secs) {
+-		die("Unable to allocate %d section headers\n",
+-		    ehdr.e_shnum);
+-	}
+-	if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) {
+-		die("Seek to %d failed: %s\n",
+-			ehdr.e_shoff, strerror(errno));
+-	}
+-	for (i = 0; i < ehdr.e_shnum; i++) {
+-		struct section *sec = &secs[i];
+-		if (fread(&shdr, sizeof shdr, 1, fp) != 1)
+-			die("Cannot read ELF section headers %d/%d: %s\n",
+-			    i, ehdr.e_shnum, strerror(errno));
+-		sec->shdr.sh_name      = elf32_to_cpu(shdr.sh_name);
+-		sec->shdr.sh_type      = elf32_to_cpu(shdr.sh_type);
+-		sec->shdr.sh_flags     = elf32_to_cpu(shdr.sh_flags);
+-		sec->shdr.sh_addr      = elf32_to_cpu(shdr.sh_addr);
+-		sec->shdr.sh_offset    = elf32_to_cpu(shdr.sh_offset);
+-		sec->shdr.sh_size      = elf32_to_cpu(shdr.sh_size);
+-		sec->shdr.sh_link      = elf32_to_cpu(shdr.sh_link);
+-		sec->shdr.sh_info      = elf32_to_cpu(shdr.sh_info);
+-		sec->shdr.sh_addralign = elf32_to_cpu(shdr.sh_addralign);
+-		sec->shdr.sh_entsize   = elf32_to_cpu(shdr.sh_entsize);
+-		if (sec->shdr.sh_link < ehdr.e_shnum)
+-			sec->link = &secs[sec->shdr.sh_link];
+-	}
+-
+-}
+-
+-static void read_strtabs(FILE *fp)
+-{
+-	int i;
+-	for (i = 0; i < ehdr.e_shnum; i++) {
+-		struct section *sec = &secs[i];
+-		if (sec->shdr.sh_type != SHT_STRTAB) {
+-			continue;
+-		}
+-		sec->strtab = malloc(sec->shdr.sh_size);
+-		if (!sec->strtab) {
+-			die("malloc of %d bytes for strtab failed\n",
+-				sec->shdr.sh_size);
+-		}
+-		if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) {
+-			die("Seek to %d failed: %s\n",
+-				sec->shdr.sh_offset, strerror(errno));
+-		}
+-		if (fread(sec->strtab, 1, sec->shdr.sh_size, fp)
+-		    != sec->shdr.sh_size) {
+-			die("Cannot read symbol table: %s\n",
+-				strerror(errno));
+-		}
+-	}
+-}
+-
+-static void read_symtabs(FILE *fp)
+-{
+-	int i,j;
+-	for (i = 0; i < ehdr.e_shnum; i++) {
+-		struct section *sec = &secs[i];
+-		if (sec->shdr.sh_type != SHT_SYMTAB) {
+-			continue;
+-		}
+-		sec->symtab = malloc(sec->shdr.sh_size);
+-		if (!sec->symtab) {
+-			die("malloc of %d bytes for symtab failed\n",
+-				sec->shdr.sh_size);
+-		}
+-		if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) {
+-			die("Seek to %d failed: %s\n",
+-				sec->shdr.sh_offset, strerror(errno));
+-		}
+-		if (fread(sec->symtab, 1, sec->shdr.sh_size, fp)
+-		    != sec->shdr.sh_size) {
+-			die("Cannot read symbol table: %s\n",
+-				strerror(errno));
+-		}
+-		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Sym); j++) {
+-			Elf32_Sym *sym = &sec->symtab[j];
+-			sym->st_name  = elf32_to_cpu(sym->st_name);
+-			sym->st_value = elf32_to_cpu(sym->st_value);
+-			sym->st_size  = elf32_to_cpu(sym->st_size);
+-			sym->st_shndx = elf16_to_cpu(sym->st_shndx);
+-		}
+-	}
+-}
+-
+-
+-static void read_relocs(FILE *fp)
+-{
+-	int i,j;
+-	for (i = 0; i < ehdr.e_shnum; i++) {
+-		struct section *sec = &secs[i];
+-		if (sec->shdr.sh_type != SHT_REL) {
+-			continue;
+-		}
+-		sec->reltab = malloc(sec->shdr.sh_size);
+-		if (!sec->reltab) {
+-			die("malloc of %d bytes for relocs failed\n",
+-				sec->shdr.sh_size);
+-		}
+-		if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) {
+-			die("Seek to %d failed: %s\n",
+-				sec->shdr.sh_offset, strerror(errno));
+-		}
+-		if (fread(sec->reltab, 1, sec->shdr.sh_size, fp)
+-		    != sec->shdr.sh_size) {
+-			die("Cannot read symbol table: %s\n",
+-				strerror(errno));
+-		}
+-		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) {
+-			Elf32_Rel *rel = &sec->reltab[j];
+-			rel->r_offset = elf32_to_cpu(rel->r_offset);
+-			rel->r_info   = elf32_to_cpu(rel->r_info);
+-		}
+-	}
+-}
+-
+-
+-static void print_absolute_symbols(void)
+-{
+-	int i;
+-	printf("Absolute symbols\n");
+-	printf(" Num:    Value Size  Type       Bind        Visibility  Name\n");
+-	for (i = 0; i < ehdr.e_shnum; i++) {
+-		struct section *sec = &secs[i];
+-		char *sym_strtab;
+-		int j;
+-
+-		if (sec->shdr.sh_type != SHT_SYMTAB) {
+-			continue;
+-		}
+-		sym_strtab = sec->link->strtab;
+-		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Sym); j++) {
+-			Elf32_Sym *sym;
+-			const char *name;
+-			sym = &sec->symtab[j];
+-			name = sym_name(sym_strtab, sym);
+-			if (sym->st_shndx != SHN_ABS) {
+-				continue;
+-			}
+-			printf("%5d %08x %5d %10s %10s %12s %s\n",
+-				j, sym->st_value, sym->st_size,
+-				sym_type(ELF32_ST_TYPE(sym->st_info)),
+-				sym_bind(ELF32_ST_BIND(sym->st_info)),
+-				sym_visibility(ELF32_ST_VISIBILITY(sym->st_other)),
+-				name);
+-		}
+-	}
+-	printf("\n");
+-}
+-
+-static void print_absolute_relocs(void)
+-{
+-	int i, printed = 0;
+-
+-	for (i = 0; i < ehdr.e_shnum; i++) {
+-		struct section *sec = &secs[i];
+-		struct section *sec_applies, *sec_symtab;
+-		char *sym_strtab;
+-		Elf32_Sym *sh_symtab;
+-		int j;
+-		if (sec->shdr.sh_type != SHT_REL) {
+-			continue;
+-		}
+-		sec_symtab  = sec->link;
+-		sec_applies = &secs[sec->shdr.sh_info];
+-		if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) {
+-			continue;
+-		}
+-		sh_symtab  = sec_symtab->symtab;
+-		sym_strtab = sec_symtab->link->strtab;
+-		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) {
+-			Elf32_Rel *rel;
+-			Elf32_Sym *sym;
+-			const char *name;
+-			rel = &sec->reltab[j];
+-			sym = &sh_symtab[ELF32_R_SYM(rel->r_info)];
+-			name = sym_name(sym_strtab, sym);
+-			if (sym->st_shndx != SHN_ABS) {
+-				continue;
+-			}
+-
+-			/* Absolute symbols are not relocated if bzImage is
+-			 * loaded at a non-compiled address. Display a warning
+-			 * to user at compile time about the absolute
+-			 * relocations present.
+-			 *
+-			 * User need to audit the code to make sure
+-			 * some symbols which should have been section
+-			 * relative have not become absolute because of some
+-			 * linker optimization or wrong programming usage.
+-			 *
+-			 * Before warning check if this absolute symbol
+-			 * relocation is harmless.
+-			 */
+-			if (is_abs_reloc(name) || is_rel_reloc(name))
+-				continue;
+-
+-			if (!printed) {
+-				printf("WARNING: Absolute relocations"
+-					" present\n");
+-				printf("Offset     Info     Type     Sym.Value "
+-					"Sym.Name\n");
+-				printed = 1;
+-			}
+-
+-			printf("%08x %08x %10s %08x  %s\n",
+-				rel->r_offset,
+-				rel->r_info,
+-				rel_type(ELF32_R_TYPE(rel->r_info)),
+-				sym->st_value,
+-				name);
+-		}
+-	}
+-
+-	if (printed)
+-		printf("\n");
+-}
+-
+-static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym))
+-{
+-	int i;
+-	/* Walk through the relocations */
+-	for (i = 0; i < ehdr.e_shnum; i++) {
+-		char *sym_strtab;
+-		Elf32_Sym *sh_symtab;
+-		struct section *sec_applies, *sec_symtab;
+-		int j;
+-		struct section *sec = &secs[i];
+-
+-		if (sec->shdr.sh_type != SHT_REL) {
+-			continue;
+-		}
+-		sec_symtab  = sec->link;
+-		sec_applies = &secs[sec->shdr.sh_info];
+-		if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) {
+-			continue;
+-		}
+-		sh_symtab = sec_symtab->symtab;
+-		sym_strtab = sec_symtab->link->strtab;
+-		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) {
+-			Elf32_Rel *rel;
+-			Elf32_Sym *sym;
+-			unsigned r_type;
+-			rel = &sec->reltab[j];
+-			sym = &sh_symtab[ELF32_R_SYM(rel->r_info)];
+-			r_type = ELF32_R_TYPE(rel->r_info);
+-			/* Don't visit relocations to absolute symbols */
+-			if (sym->st_shndx == SHN_ABS &&
+-			    !is_rel_reloc(sym_name(sym_strtab, sym))) {
+-				continue;
+-			}
+-			switch (r_type) {
+-			case R_386_NONE:
+-			case R_386_PC32:
+-				/*
+-				 * NONE can be ignored and and PC relative
+-				 * relocations don't need to be adjusted.
+-				 */
+-				break;
+-			case R_386_32:
+-				/* Visit relocations that need to be adjusted */
+-				visit(rel, sym);
+-				break;
+-			default:
+-				die("Unsupported relocation type: %s (%d)\n",
+-				    rel_type(r_type), r_type);
+-				break;
+-			}
+-		}
+-	}
+-}
+-
+-static void count_reloc(Elf32_Rel *rel, Elf32_Sym *sym)
+-{
+-	reloc_count += 1;
+-}
+-
+-static void collect_reloc(Elf32_Rel *rel, Elf32_Sym *sym)
+-{
+-	/* Remember the address that needs to be adjusted. */
+-	relocs[reloc_idx++] = rel->r_offset;
+-}
+-
+-static int cmp_relocs(const void *va, const void *vb)
+-{
+-	const unsigned long *a, *b;
+-	a = va; b = vb;
+-	return (*a == *b)? 0 : (*a > *b)? 1 : -1;
+-}
+-
+-static void emit_relocs(int as_text)
+-{
+-	int i;
+-	/* Count how many relocations I have and allocate space for them. */
+-	reloc_count = 0;
+-	walk_relocs(count_reloc);
+-	relocs = malloc(reloc_count * sizeof(relocs[0]));
+-	if (!relocs) {
+-		die("malloc of %d entries for relocs failed\n",
+-			reloc_count);
+-	}
+-	/* Collect up the relocations */
+-	reloc_idx = 0;
+-	walk_relocs(collect_reloc);
+-
+-	/* Order the relocations for more efficient processing */
+-	qsort(relocs, reloc_count, sizeof(relocs[0]), cmp_relocs);
+-
+-	/* Print the relocations */
+-	if (as_text) {
+-		/* Print the relocations in a form suitable that
+-		 * gas will like.
+-		 */
+-		printf(".section \".data.reloc\",\"a\"\n");
+-		printf(".balign 4\n");
+-		for (i = 0; i < reloc_count; i++) {
+-			printf("\t .long 0x%08lx\n", relocs[i]);
+-		}
+-		printf("\n");
+-	}
+-	else {
+-		unsigned char buf[4];
+-		/* Print a stop */
+-		fwrite("\0\0\0\0", 4, 1, stdout);
+-		/* Now print each relocation */
+-		for (i = 0; i < reloc_count; i++) {
+-			buf[0] = (relocs[i] >>  0) & 0xff;
+-			buf[1] = (relocs[i] >>  8) & 0xff;
+-			buf[2] = (relocs[i] >> 16) & 0xff;
+-			buf[3] = (relocs[i] >> 24) & 0xff;
+-			fwrite(buf, 4, 1, stdout);
+-		}
+-	}
+-}
+-
+-static void usage(void)
+-{
+-	die("relocs [--abs-syms |--abs-relocs | --text] vmlinux\n");
+-}
+-
+-int main(int argc, char **argv)
+-{
+-	int show_absolute_syms, show_absolute_relocs;
+-	int as_text;
+-	const char *fname;
+-	FILE *fp;
+-	int i;
+-
+-	regex_init();
+-
+-	show_absolute_syms = 0;
+-	show_absolute_relocs = 0;
+-	as_text = 0;
+-	fname = NULL;
+-	for (i = 1; i < argc; i++) {
+-		char *arg = argv[i];
+-		if (*arg == '-') {
+-			if (strcmp(argv[1], "--abs-syms") == 0) {
+-				show_absolute_syms = 1;
+-				continue;
+-			}
+-
+-			if (strcmp(argv[1], "--abs-relocs") == 0) {
+-				show_absolute_relocs = 1;
+-				continue;
+-			}
+-			else if (strcmp(argv[1], "--text") == 0) {
+-				as_text = 1;
+-				continue;
+-			}
+-		}
+-		else if (!fname) {
+-			fname = arg;
+-			continue;
+-		}
+-		usage();
+-	}
+-	if (!fname) {
+-		usage();
+-	}
+-	fp = fopen(fname, "r");
+-	if (!fp) {
+-		die("Cannot open %s: %s\n",
+-			fname, strerror(errno));
+-	}
+-	read_ehdr(fp);
+-	read_shdrs(fp);
+-	read_strtabs(fp);
+-	read_symtabs(fp);
+-	read_relocs(fp);
+-	if (show_absolute_syms) {
+-		print_absolute_symbols();
+-		return 0;
+-	}
+-	if (show_absolute_relocs) {
+-		print_absolute_relocs();
+-		return 0;
+-	}
+-	emit_relocs(as_text);
+-	return 0;
+-}
+diff --git a/arch/x86/tools/.gitignore b/arch/x86/tools/.gitignore
+new file mode 100644
+index 0000000..be0ed06
+--- /dev/null
++++ b/arch/x86/tools/.gitignore
+@@ -0,0 +1 @@
++relocs
+diff --git a/arch/x86/tools/Makefile b/arch/x86/tools/Makefile
+index f820826..162a34a 100644
+--- a/arch/x86/tools/Makefile
++++ b/arch/x86/tools/Makefile
+@@ -29,3 +29,6 @@ HOSTCFLAGS_test_get_len.o := -Wall -I$(objtree)/arch/x86/lib/ -I$(srctree)/arch/
+ # Dependencies are also needed.
+ $(obj)/test_get_len.o: $(srctree)/arch/x86/lib/insn.c $(srctree)/arch/x86/lib/inat.c $(srctree)/arch/x86/include/asm/inat_types.h $(srctree)/arch/x86/include/asm/inat.h $(srctree)/arch/x86/include/asm/insn.h $(objtree)/arch/x86/lib/inat-tables.c
+ 
++HOST_EXTRACFLAGS += -I$(srctree)/tools/include
++hostprogs-y	+= relocs
++relocs: $(obj)/relocs
+diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
+new file mode 100644
+index 0000000..2071bad
+--- /dev/null
++++ b/arch/x86/tools/relocs.c
+@@ -0,0 +1,799 @@
++#include <stdio.h>
++#include <stdarg.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <string.h>
++#include <errno.h>
++#include <unistd.h>
++#include <elf.h>
++#include <byteswap.h>
++#define USE_BSD
++#include <endian.h>
++#include <regex.h>
++
++static void die(char *fmt, ...);
++
++#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
++static Elf32_Ehdr ehdr;
++static unsigned long reloc_count, reloc_idx;
++static unsigned long *relocs;
++static unsigned long reloc16_count, reloc16_idx;
++static unsigned long *relocs16;
++
++struct section {
++	Elf32_Shdr     shdr;
++	struct section *link;
++	Elf32_Sym      *symtab;
++	Elf32_Rel      *reltab;
++	char           *strtab;
++};
++static struct section *secs;
++
++enum symtype {
++	S_ABS,
++	S_REL,
++	S_SEG,
++	S_LIN,
++	S_NSYMTYPES
++};
++
++static const char * const sym_regex_kernel[S_NSYMTYPES] = {
++/*
++ * Following symbols have been audited. There values are constant and do
++ * not change if bzImage is loaded at a different physical address than
++ * the address for which it has been compiled. Don't warn user about
++ * absolute relocations present w.r.t these symbols.
++ */
++	[S_ABS] =
++	"^(xen_irq_disable_direct_reloc$|"
++	"xen_save_fl_direct_reloc$|"
++	"VDSO|"
++	"__crc_)",
++
++/*
++ * These symbols are known to be relative, even if the linker marks them
++ * as absolute (typically defined outside any section in the linker script.)
++ */
++	[S_REL] =
++	"^_end$",
++};
++
++
++static const char * const sym_regex_realmode[S_NSYMTYPES] = {
++/*
++ * These are 16-bit segment symbols when compiling 16-bit code.
++ */
++	[S_SEG] =
++	"^real_mode_seg$",
++
++/*
++ * These are offsets belonging to segments, as opposed to linear addresses,
++ * when compiling 16-bit code.
++ */
++	[S_LIN] =
++	"^pa_",
++};
++
++static const char * const *sym_regex;
++
++static regex_t sym_regex_c[S_NSYMTYPES];
++static int is_reloc(enum symtype type, const char *sym_name)
++{
++	return sym_regex[type] &&
++		!regexec(&sym_regex_c[type], sym_name, 0, NULL, 0);
++}
++
++static void regex_init(int use_real_mode)
++{
++        char errbuf[128];
++        int err;
++	int i;
++
++	if (use_real_mode)
++		sym_regex = sym_regex_realmode;
++	else
++		sym_regex = sym_regex_kernel;
++
++	for (i = 0; i < S_NSYMTYPES; i++) {
++		if (!sym_regex[i])
++			continue;
++
++		err = regcomp(&sym_regex_c[i], sym_regex[i],
++			      REG_EXTENDED|REG_NOSUB);
++
++		if (err) {
++			regerror(err, &sym_regex_c[i], errbuf, sizeof errbuf);
++			die("%s", errbuf);
++		}
++        }
++}
++
++static void die(char *fmt, ...)
++{
++	va_list ap;
++	va_start(ap, fmt);
++	vfprintf(stderr, fmt, ap);
++	va_end(ap);
++	exit(1);
++}
++
++static const char *sym_type(unsigned type)
++{
++	static const char *type_name[] = {
++#define SYM_TYPE(X) [X] = #X
++		SYM_TYPE(STT_NOTYPE),
++		SYM_TYPE(STT_OBJECT),
++		SYM_TYPE(STT_FUNC),
++		SYM_TYPE(STT_SECTION),
++		SYM_TYPE(STT_FILE),
++		SYM_TYPE(STT_COMMON),
++		SYM_TYPE(STT_TLS),
++#undef SYM_TYPE
++	};
++	const char *name = "unknown sym type name";
++	if (type < ARRAY_SIZE(type_name)) {
++		name = type_name[type];
++	}
++	return name;
++}
++
++static const char *sym_bind(unsigned bind)
++{
++	static const char *bind_name[] = {
++#define SYM_BIND(X) [X] = #X
++		SYM_BIND(STB_LOCAL),
++		SYM_BIND(STB_GLOBAL),
++		SYM_BIND(STB_WEAK),
++#undef SYM_BIND
++	};
++	const char *name = "unknown sym bind name";
++	if (bind < ARRAY_SIZE(bind_name)) {
++		name = bind_name[bind];
++	}
++	return name;
++}
++
++static const char *sym_visibility(unsigned visibility)
++{
++	static const char *visibility_name[] = {
++#define SYM_VISIBILITY(X) [X] = #X
++		SYM_VISIBILITY(STV_DEFAULT),
++		SYM_VISIBILITY(STV_INTERNAL),
++		SYM_VISIBILITY(STV_HIDDEN),
++		SYM_VISIBILITY(STV_PROTECTED),
++#undef SYM_VISIBILITY
++	};
++	const char *name = "unknown sym visibility name";
++	if (visibility < ARRAY_SIZE(visibility_name)) {
++		name = visibility_name[visibility];
++	}
++	return name;
++}
++
++static const char *rel_type(unsigned type)
++{
++	static const char *type_name[] = {
++#define REL_TYPE(X) [X] = #X
++		REL_TYPE(R_386_NONE),
++		REL_TYPE(R_386_32),
++		REL_TYPE(R_386_PC32),
++		REL_TYPE(R_386_GOT32),
++		REL_TYPE(R_386_PLT32),
++		REL_TYPE(R_386_COPY),
++		REL_TYPE(R_386_GLOB_DAT),
++		REL_TYPE(R_386_JMP_SLOT),
++		REL_TYPE(R_386_RELATIVE),
++		REL_TYPE(R_386_GOTOFF),
++		REL_TYPE(R_386_GOTPC),
++		REL_TYPE(R_386_8),
++		REL_TYPE(R_386_PC8),
++		REL_TYPE(R_386_16),
++		REL_TYPE(R_386_PC16),
++#undef REL_TYPE
++	};
++	const char *name = "unknown type rel type name";
++	if (type < ARRAY_SIZE(type_name) && type_name[type]) {
++		name = type_name[type];
++	}
++	return name;
++}
++
++static const char *sec_name(unsigned shndx)
++{
++	const char *sec_strtab;
++	const char *name;
++	sec_strtab = secs[ehdr.e_shstrndx].strtab;
++	name = "<noname>";
++	if (shndx < ehdr.e_shnum) {
++		name = sec_strtab + secs[shndx].shdr.sh_name;
++	}
++	else if (shndx == SHN_ABS) {
++		name = "ABSOLUTE";
++	}
++	else if (shndx == SHN_COMMON) {
++		name = "COMMON";
++	}
++	return name;
++}
++
++static const char *sym_name(const char *sym_strtab, Elf32_Sym *sym)
++{
++	const char *name;
++	name = "<noname>";
++	if (sym->st_name) {
++		name = sym_strtab + sym->st_name;
++	}
++	else {
++		name = sec_name(sym->st_shndx);
++	}
++	return name;
++}
++
++
++
++#if BYTE_ORDER == LITTLE_ENDIAN
++#define le16_to_cpu(val) (val)
++#define le32_to_cpu(val) (val)
++#endif
++#if BYTE_ORDER == BIG_ENDIAN
++#define le16_to_cpu(val) bswap_16(val)
++#define le32_to_cpu(val) bswap_32(val)
++#endif
++
++static uint16_t elf16_to_cpu(uint16_t val)
++{
++	return le16_to_cpu(val);
++}
++
++static uint32_t elf32_to_cpu(uint32_t val)
++{
++	return le32_to_cpu(val);
++}
++
++static void read_ehdr(FILE *fp)
++{
++	if (fread(&ehdr, sizeof(ehdr), 1, fp) != 1) {
++		die("Cannot read ELF header: %s\n",
++			strerror(errno));
++	}
++	if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0) {
++		die("No ELF magic\n");
++	}
++	if (ehdr.e_ident[EI_CLASS] != ELFCLASS32) {
++		die("Not a 32 bit executable\n");
++	}
++	if (ehdr.e_ident[EI_DATA] != ELFDATA2LSB) {
++		die("Not a LSB ELF executable\n");
++	}
++	if (ehdr.e_ident[EI_VERSION] != EV_CURRENT) {
++		die("Unknown ELF version\n");
++	}
++	/* Convert the fields to native endian */
++	ehdr.e_type      = elf16_to_cpu(ehdr.e_type);
++	ehdr.e_machine   = elf16_to_cpu(ehdr.e_machine);
++	ehdr.e_version   = elf32_to_cpu(ehdr.e_version);
++	ehdr.e_entry     = elf32_to_cpu(ehdr.e_entry);
++	ehdr.e_phoff     = elf32_to_cpu(ehdr.e_phoff);
++	ehdr.e_shoff     = elf32_to_cpu(ehdr.e_shoff);
++	ehdr.e_flags     = elf32_to_cpu(ehdr.e_flags);
++	ehdr.e_ehsize    = elf16_to_cpu(ehdr.e_ehsize);
++	ehdr.e_phentsize = elf16_to_cpu(ehdr.e_phentsize);
++	ehdr.e_phnum     = elf16_to_cpu(ehdr.e_phnum);
++	ehdr.e_shentsize = elf16_to_cpu(ehdr.e_shentsize);
++	ehdr.e_shnum     = elf16_to_cpu(ehdr.e_shnum);
++	ehdr.e_shstrndx  = elf16_to_cpu(ehdr.e_shstrndx);
++
++	if ((ehdr.e_type != ET_EXEC) && (ehdr.e_type != ET_DYN)) {
++		die("Unsupported ELF header type\n");
++	}
++	if (ehdr.e_machine != EM_386) {
++		die("Not for x86\n");
++	}
++	if (ehdr.e_version != EV_CURRENT) {
++		die("Unknown ELF version\n");
++	}
++	if (ehdr.e_ehsize != sizeof(Elf32_Ehdr)) {
++		die("Bad Elf header size\n");
++	}
++	if (ehdr.e_phentsize != sizeof(Elf32_Phdr)) {
++		die("Bad program header entry\n");
++	}
++	if (ehdr.e_shentsize != sizeof(Elf32_Shdr)) {
++		die("Bad section header entry\n");
++	}
++	if (ehdr.e_shstrndx >= ehdr.e_shnum) {
++		die("String table index out of bounds\n");
++	}
++}
++
++static void read_shdrs(FILE *fp)
++{
++	int i;
++	Elf32_Shdr shdr;
++
++	secs = calloc(ehdr.e_shnum, sizeof(struct section));
++	if (!secs) {
++		die("Unable to allocate %d section headers\n",
++		    ehdr.e_shnum);
++	}
++	if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) {
++		die("Seek to %d failed: %s\n",
++			ehdr.e_shoff, strerror(errno));
++	}
++	for (i = 0; i < ehdr.e_shnum; i++) {
++		struct section *sec = &secs[i];
++		if (fread(&shdr, sizeof shdr, 1, fp) != 1)
++			die("Cannot read ELF section headers %d/%d: %s\n",
++			    i, ehdr.e_shnum, strerror(errno));
++		sec->shdr.sh_name      = elf32_to_cpu(shdr.sh_name);
++		sec->shdr.sh_type      = elf32_to_cpu(shdr.sh_type);
++		sec->shdr.sh_flags     = elf32_to_cpu(shdr.sh_flags);
++		sec->shdr.sh_addr      = elf32_to_cpu(shdr.sh_addr);
++		sec->shdr.sh_offset    = elf32_to_cpu(shdr.sh_offset);
++		sec->shdr.sh_size      = elf32_to_cpu(shdr.sh_size);
++		sec->shdr.sh_link      = elf32_to_cpu(shdr.sh_link);
++		sec->shdr.sh_info      = elf32_to_cpu(shdr.sh_info);
++		sec->shdr.sh_addralign = elf32_to_cpu(shdr.sh_addralign);
++		sec->shdr.sh_entsize   = elf32_to_cpu(shdr.sh_entsize);
++		if (sec->shdr.sh_link < ehdr.e_shnum)
++			sec->link = &secs[sec->shdr.sh_link];
++	}
++
++}
++
++static void read_strtabs(FILE *fp)
++{
++	int i;
++	for (i = 0; i < ehdr.e_shnum; i++) {
++		struct section *sec = &secs[i];
++		if (sec->shdr.sh_type != SHT_STRTAB) {
++			continue;
++		}
++		sec->strtab = malloc(sec->shdr.sh_size);
++		if (!sec->strtab) {
++			die("malloc of %d bytes for strtab failed\n",
++				sec->shdr.sh_size);
++		}
++		if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) {
++			die("Seek to %d failed: %s\n",
++				sec->shdr.sh_offset, strerror(errno));
++		}
++		if (fread(sec->strtab, 1, sec->shdr.sh_size, fp)
++		    != sec->shdr.sh_size) {
++			die("Cannot read symbol table: %s\n",
++				strerror(errno));
++		}
++	}
++}
++
++static void read_symtabs(FILE *fp)
++{
++	int i,j;
++	for (i = 0; i < ehdr.e_shnum; i++) {
++		struct section *sec = &secs[i];
++		if (sec->shdr.sh_type != SHT_SYMTAB) {
++			continue;
++		}
++		sec->symtab = malloc(sec->shdr.sh_size);
++		if (!sec->symtab) {
++			die("malloc of %d bytes for symtab failed\n",
++				sec->shdr.sh_size);
++		}
++		if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) {
++			die("Seek to %d failed: %s\n",
++				sec->shdr.sh_offset, strerror(errno));
++		}
++		if (fread(sec->symtab, 1, sec->shdr.sh_size, fp)
++		    != sec->shdr.sh_size) {
++			die("Cannot read symbol table: %s\n",
++				strerror(errno));
++		}
++		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Sym); j++) {
++			Elf32_Sym *sym = &sec->symtab[j];
++			sym->st_name  = elf32_to_cpu(sym->st_name);
++			sym->st_value = elf32_to_cpu(sym->st_value);
++			sym->st_size  = elf32_to_cpu(sym->st_size);
++			sym->st_shndx = elf16_to_cpu(sym->st_shndx);
++		}
++	}
++}
++
++
++static void read_relocs(FILE *fp)
++{
++	int i,j;
++	for (i = 0; i < ehdr.e_shnum; i++) {
++		struct section *sec = &secs[i];
++		if (sec->shdr.sh_type != SHT_REL) {
++			continue;
++		}
++		sec->reltab = malloc(sec->shdr.sh_size);
++		if (!sec->reltab) {
++			die("malloc of %d bytes for relocs failed\n",
++				sec->shdr.sh_size);
++		}
++		if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) {
++			die("Seek to %d failed: %s\n",
++				sec->shdr.sh_offset, strerror(errno));
++		}
++		if (fread(sec->reltab, 1, sec->shdr.sh_size, fp)
++		    != sec->shdr.sh_size) {
++			die("Cannot read symbol table: %s\n",
++				strerror(errno));
++		}
++		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) {
++			Elf32_Rel *rel = &sec->reltab[j];
++			rel->r_offset = elf32_to_cpu(rel->r_offset);
++			rel->r_info   = elf32_to_cpu(rel->r_info);
++		}
++	}
++}
++
++
++static void print_absolute_symbols(void)
++{
++	int i;
++	printf("Absolute symbols\n");
++	printf(" Num:    Value Size  Type       Bind        Visibility  Name\n");
++	for (i = 0; i < ehdr.e_shnum; i++) {
++		struct section *sec = &secs[i];
++		char *sym_strtab;
++		int j;
++
++		if (sec->shdr.sh_type != SHT_SYMTAB) {
++			continue;
++		}
++		sym_strtab = sec->link->strtab;
++		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Sym); j++) {
++			Elf32_Sym *sym;
++			const char *name;
++			sym = &sec->symtab[j];
++			name = sym_name(sym_strtab, sym);
++			if (sym->st_shndx != SHN_ABS) {
++				continue;
++			}
++			printf("%5d %08x %5d %10s %10s %12s %s\n",
++				j, sym->st_value, sym->st_size,
++				sym_type(ELF32_ST_TYPE(sym->st_info)),
++				sym_bind(ELF32_ST_BIND(sym->st_info)),
++				sym_visibility(ELF32_ST_VISIBILITY(sym->st_other)),
++				name);
++		}
++	}
++	printf("\n");
++}
++
++static void print_absolute_relocs(void)
++{
++	int i, printed = 0;
++
++	for (i = 0; i < ehdr.e_shnum; i++) {
++		struct section *sec = &secs[i];
++		struct section *sec_applies, *sec_symtab;
++		char *sym_strtab;
++		Elf32_Sym *sh_symtab;
++		int j;
++		if (sec->shdr.sh_type != SHT_REL) {
++			continue;
++		}
++		sec_symtab  = sec->link;
++		sec_applies = &secs[sec->shdr.sh_info];
++		if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) {
++			continue;
++		}
++		sh_symtab  = sec_symtab->symtab;
++		sym_strtab = sec_symtab->link->strtab;
++		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) {
++			Elf32_Rel *rel;
++			Elf32_Sym *sym;
++			const char *name;
++			rel = &sec->reltab[j];
++			sym = &sh_symtab[ELF32_R_SYM(rel->r_info)];
++			name = sym_name(sym_strtab, sym);
++			if (sym->st_shndx != SHN_ABS) {
++				continue;
++			}
++
++			/* Absolute symbols are not relocated if bzImage is
++			 * loaded at a non-compiled address. Display a warning
++			 * to user at compile time about the absolute
++			 * relocations present.
++			 *
++			 * User need to audit the code to make sure
++			 * some symbols which should have been section
++			 * relative have not become absolute because of some
++			 * linker optimization or wrong programming usage.
++			 *
++			 * Before warning check if this absolute symbol
++			 * relocation is harmless.
++			 */
++			if (is_reloc(S_ABS, name) || is_reloc(S_REL, name))
++				continue;
++
++			if (!printed) {
++				printf("WARNING: Absolute relocations"
++					" present\n");
++				printf("Offset     Info     Type     Sym.Value "
++					"Sym.Name\n");
++				printed = 1;
++			}
++
++			printf("%08x %08x %10s %08x  %s\n",
++				rel->r_offset,
++				rel->r_info,
++				rel_type(ELF32_R_TYPE(rel->r_info)),
++				sym->st_value,
++				name);
++		}
++	}
++
++	if (printed)
++		printf("\n");
++}
++
++static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
++			int use_real_mode)
++{
++	int i;
++	/* Walk through the relocations */
++	for (i = 0; i < ehdr.e_shnum; i++) {
++		char *sym_strtab;
++		Elf32_Sym *sh_symtab;
++		struct section *sec_applies, *sec_symtab;
++		int j;
++		struct section *sec = &secs[i];
++
++		if (sec->shdr.sh_type != SHT_REL) {
++			continue;
++		}
++		sec_symtab  = sec->link;
++		sec_applies = &secs[sec->shdr.sh_info];
++		if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) {
++			continue;
++		}
++		sh_symtab = sec_symtab->symtab;
++		sym_strtab = sec_symtab->link->strtab;
++		for (j = 0; j < sec->shdr.sh_size/sizeof(Elf32_Rel); j++) {
++			Elf32_Rel *rel;
++			Elf32_Sym *sym;
++			unsigned r_type;
++			const char *symname;
++			rel = &sec->reltab[j];
++			sym = &sh_symtab[ELF32_R_SYM(rel->r_info)];
++			r_type = ELF32_R_TYPE(rel->r_info);
++
++			switch (r_type) {
++			case R_386_NONE:
++			case R_386_PC32:
++			case R_386_PC16:
++			case R_386_PC8:
++				/*
++				 * NONE can be ignored and and PC relative
++				 * relocations don't need to be adjusted.
++				 */
++				break;
++
++			case R_386_16:
++				symname = sym_name(sym_strtab, sym);
++				if (!use_real_mode)
++					goto bad;
++				if (sym->st_shndx == SHN_ABS) {
++					if (is_reloc(S_ABS, symname))
++						break;
++					else if (!is_reloc(S_SEG, symname))
++						goto bad;
++				} else {
++					if (is_reloc(S_LIN, symname))
++						goto bad;
++					else
++						break;
++				}
++				visit(rel, sym);
++				break;
++
++			case R_386_32:
++				symname = sym_name(sym_strtab, sym);
++				if (sym->st_shndx == SHN_ABS) {
++					if (is_reloc(S_ABS, symname))
++						break;
++					else if (!is_reloc(S_REL, symname))
++						goto bad;
++				} else {
++					if (use_real_mode &&
++					    !is_reloc(S_LIN, symname))
++						break;
++				}
++				visit(rel, sym);
++				break;
++			default:
++				die("Unsupported relocation type: %s (%d)\n",
++				    rel_type(r_type), r_type);
++				break;
++			bad:
++				symname = sym_name(sym_strtab, sym);
++				die("Invalid %s relocation: %s\n",
++				    rel_type(r_type), symname);
++			}
++		}
++	}
++}
++
++static void count_reloc(Elf32_Rel *rel, Elf32_Sym *sym)
++{
++	if (ELF32_R_TYPE(rel->r_info) == R_386_16)
++		reloc16_count++;
++	else
++		reloc_count++;
++}
++
++static void collect_reloc(Elf32_Rel *rel, Elf32_Sym *sym)
++{
++	/* Remember the address that needs to be adjusted. */
++	if (ELF32_R_TYPE(rel->r_info) == R_386_16)
++		relocs16[reloc16_idx++] = rel->r_offset;
++	else
++		relocs[reloc_idx++] = rel->r_offset;
++}
++
++static int cmp_relocs(const void *va, const void *vb)
++{
++	const unsigned long *a, *b;
++	a = va; b = vb;
++	return (*a == *b)? 0 : (*a > *b)? 1 : -1;
++}
++
++static int write32(unsigned int v, FILE *f)
++{
++	unsigned char buf[4];
++
++	buf[0] = (v >>  0) & 0xff;
++	buf[1] = (v >>  8) & 0xff;
++	buf[2] = (v >> 16) & 0xff;
++	buf[3] = (v >> 24) & 0xff;
++	return fwrite(buf, 1, 4, f) == 4 ? 0 : -1;
++}
++
++static void emit_relocs(int as_text, int use_real_mode)
++{
++	int i;
++	/* Count how many relocations I have and allocate space for them. */
++	reloc_count = 0;
++	walk_relocs(count_reloc, use_real_mode);
++	relocs = malloc(reloc_count * sizeof(relocs[0]));
++	if (!relocs) {
++		die("malloc of %d entries for relocs failed\n",
++			reloc_count);
++	}
++
++	relocs16 = malloc(reloc16_count * sizeof(relocs[0]));
++	if (!relocs16) {
++		die("malloc of %d entries for relocs16 failed\n",
++			reloc16_count);
++	}
++	/* Collect up the relocations */
++	reloc_idx = 0;
++	walk_relocs(collect_reloc, use_real_mode);
++
++	if (reloc16_count && !use_real_mode)
++		die("Segment relocations found but --realmode not specified\n");
++
++	/* Order the relocations for more efficient processing */
++	qsort(relocs, reloc_count, sizeof(relocs[0]), cmp_relocs);
++	qsort(relocs16, reloc16_count, sizeof(relocs16[0]), cmp_relocs);
++
++	/* Print the relocations */
++	if (as_text) {
++		/* Print the relocations in a form suitable that
++		 * gas will like.
++		 */
++		printf(".section \".data.reloc\",\"a\"\n");
++		printf(".balign 4\n");
++		if (use_real_mode) {
++			printf("\t.long %lu\n", reloc16_count);
++			for (i = 0; i < reloc16_count; i++)
++				printf("\t.long 0x%08lx\n", relocs16[i]);
++			printf("\t.long %lu\n", reloc_count);
++			for (i = 0; i < reloc_count; i++) {
++				printf("\t.long 0x%08lx\n", relocs[i]);
++			}
++		} else {
++			/* Print a stop */
++			printf("\t.long 0x%08lx\n", (unsigned long)0);
++			for (i = 0; i < reloc_count; i++) {
++				printf("\t.long 0x%08lx\n", relocs[i]);
++			}
++		}
++
++		printf("\n");
++	}
++	else {
++		if (use_real_mode) {
++			write32(reloc16_count, stdout);
++			for (i = 0; i < reloc16_count; i++)
++				write32(relocs16[i], stdout);
++			write32(reloc_count, stdout);
++
++			/* Now print each relocation */
++			for (i = 0; i < reloc_count; i++)
++				write32(relocs[i], stdout);
++		} else {
++			/* Print a stop */
++			write32(0, stdout);
++
++			/* Now print each relocation */
++			for (i = 0; i < reloc_count; i++) {
++				write32(relocs[i], stdout);
++			}
++		}
++	}
++}
++
++static void usage(void)
++{
++	die("relocs [--abs-syms|--abs-relocs|--text|--realmode] vmlinux\n");
++}
++
++int main(int argc, char **argv)
++{
++	int show_absolute_syms, show_absolute_relocs;
++	int as_text, use_real_mode;
++	const char *fname;
++	FILE *fp;
++	int i;
++
++	show_absolute_syms = 0;
++	show_absolute_relocs = 0;
++	as_text = 0;
++	use_real_mode = 0;
++	fname = NULL;
++	for (i = 1; i < argc; i++) {
++		char *arg = argv[i];
++		if (*arg == '-') {
++			if (strcmp(arg, "--abs-syms") == 0) {
++				show_absolute_syms = 1;
++				continue;
++			}
++			if (strcmp(arg, "--abs-relocs") == 0) {
++				show_absolute_relocs = 1;
++				continue;
++			}
++			if (strcmp(arg, "--text") == 0) {
++				as_text = 1;
++				continue;
++			}
++			if (strcmp(arg, "--realmode") == 0) {
++				use_real_mode = 1;
++				continue;
++			}
++		}
++		else if (!fname) {
++			fname = arg;
++			continue;
++		}
++		usage();
++	}
++	if (!fname) {
++		usage();
++	}
++	regex_init(use_real_mode);
++	fp = fopen(fname, "r");
++	if (!fp) {
++		die("Cannot open %s: %s\n",
++			fname, strerror(errno));
++	}
++	read_ehdr(fp);
++	read_shdrs(fp);
++	read_strtabs(fp);
++	read_symtabs(fp);
++	read_relocs(fp);
++	if (show_absolute_syms) {
++		print_absolute_symbols();
++		return 0;
++	}
++	if (show_absolute_relocs) {
++		print_absolute_relocs();
++		return 0;
++	}
++	emit_relocs(as_text, use_real_mode);
++	return 0;
++}
+diff --git a/scripts/Makefile b/scripts/Makefile
+index df7678f..3626666 100644
+--- a/scripts/Makefile
++++ b/scripts/Makefile
+@@ -8,6 +8,8 @@
+ # conmakehash:	 Create arrays for initializing the kernel console tables
+ # docproc:       Used in Documentation/DocBook
+ 
++HOST_EXTRACFLAGS += -I$(srctree)/tools/include
++
+ hostprogs-$(CONFIG_KALLSYMS)     += kallsyms
+ hostprogs-$(CONFIG_LOGO)         += pnmtologo
+ hostprogs-$(CONFIG_VT)           += conmakehash
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0112-x86-relocs-Workaround-for-binutils-2.22.52.0.1-secti.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0112-x86-relocs-Workaround-for-binutils-2.22.52.0.1-secti.patch
new file mode 100644
index 0000000..870616f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0112-x86-relocs-Workaround-for-binutils-2.22.52.0.1-secti.patch
@@ -0,0 +1,43 @@
+From 41c3afdbac5e0d6a1dd88fcffb21e0916a517409 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@linux.intel.com>
+Date: Fri, 18 May 2012 00:24:09 -0700
+Subject: [PATCH 112/117] x86, relocs: Workaround for binutils 2.22.52.0.1
+ section bug
+
+commit a3e854d95a76862cd37937e0b0438f540536771a upstream.
+
+GNU ld 2.22.52.0.1 has a bug that it blindly changes symbols from
+section-relative to absolute if they are in a section of zero length.
+This turns the symbols __init_begin and __init_end into absolute
+symbols.  Let the relocs program know that those should be treated as
+relative symbols.
+
+Reported-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Cc: H.J. Lu <hjl.tools@gmail.com>
+Cc: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/tools/relocs.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
+index 2071bad..c218b07 100644
+--- a/arch/x86/tools/relocs.c
++++ b/arch/x86/tools/relocs.c
+@@ -55,7 +55,11 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = {
+  * as absolute (typically defined outside any section in the linker script.)
+  */
+ 	[S_REL] =
+-	"^_end$",
++	"^(__init_(begin|end)|"
++	"__x86_cpu_dev_(start|end)|"
++	"(__parainstructions|__alt_instructions)(|_end)|"
++	"(__iommu_table|__apicdrivers|__smp_locks)(|_end)|"
++	"_end)$"
+ };
+ 
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0113-x86-relocs-When-printing-an-error-say-relative-or-ab.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0113-x86-relocs-When-printing-an-error-say-relative-or-ab.patch
new file mode 100644
index 0000000..1908b5f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0113-x86-relocs-When-printing-an-error-say-relative-or-ab.patch
@@ -0,0 +1,69 @@
+From 4deb87f411769d6a601fa0994480b83e2b39e49c Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@linux.intel.com>
+Date: Fri, 18 May 2012 09:52:01 -0700
+Subject: [PATCH 113/117] x86, relocs: When printing an error, say relative or
+ absolute
+
+commit 24ab82bd9bf18f3efc69a131d73577940941e1b7 upstream.
+
+When the relocs tool throws an error, let the error message say if it
+is an absolute or relative symbol.  This should make it a lot more
+clear what action the programmer needs to take and should help us find
+the reason if additional symbol bugs show up.
+
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/tools/relocs.c |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
+index c218b07..c075507 100644
+--- a/arch/x86/tools/relocs.c
++++ b/arch/x86/tools/relocs.c
+@@ -562,10 +562,14 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
+ 			Elf32_Sym *sym;
+ 			unsigned r_type;
+ 			const char *symname;
++			int shn_abs;
++
+ 			rel = &sec->reltab[j];
+ 			sym = &sh_symtab[ELF32_R_SYM(rel->r_info)];
+ 			r_type = ELF32_R_TYPE(rel->r_info);
+ 
++			shn_abs = sym->st_shndx == SHN_ABS;
++
+ 			switch (r_type) {
+ 			case R_386_NONE:
+ 			case R_386_PC32:
+@@ -581,7 +585,7 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
+ 				symname = sym_name(sym_strtab, sym);
+ 				if (!use_real_mode)
+ 					goto bad;
+-				if (sym->st_shndx == SHN_ABS) {
++				if (shn_abs) {
+ 					if (is_reloc(S_ABS, symname))
+ 						break;
+ 					else if (!is_reloc(S_SEG, symname))
+@@ -597,7 +601,7 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
+ 
+ 			case R_386_32:
+ 				symname = sym_name(sym_strtab, sym);
+-				if (sym->st_shndx == SHN_ABS) {
++				if (shn_abs) {
+ 					if (is_reloc(S_ABS, symname))
+ 						break;
+ 					else if (!is_reloc(S_REL, symname))
+@@ -615,7 +619,8 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym),
+ 				break;
+ 			bad:
+ 				symname = sym_name(sym_strtab, sym);
+-				die("Invalid %s relocation: %s\n",
++				die("Invalid %s %s relocation: %s\n",
++				    shn_abs ? "absolute" : "relative",
+ 				    rel_type(r_type), symname);
+ 			}
+ 		}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0114-x86-relocs-Build-clean-fix.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0114-x86-relocs-Build-clean-fix.patch
new file mode 100644
index 0000000..e05d5e0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0114-x86-relocs-Build-clean-fix.patch
@@ -0,0 +1,33 @@
+From fcc41e2fb71499938dcbeef7614bb60e1d3be391 Mon Sep 17 00:00:00 2001
+From: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
+Date: Mon, 21 May 2012 20:51:24 +0300
+Subject: [PATCH 114/117] x86, relocs: Build clean fix
+
+commit b2d668da9307c4c163dd603d2bb3cadb10f9fd37 upstream.
+
+relocs was not cleaned up when "make clean" is issued. This
+patch fixes the issue.
+
+Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
+Link: http://lkml.kernel.org/r/1337622684-6834-1-git-send-email-jarkko.sakkinen@intel.com
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/Makefile |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/x86/Makefile b/arch/x86/Makefile
+index 774fd16..03dbc7f5b 100644
+--- a/arch/x86/Makefile
++++ b/arch/x86/Makefile
+@@ -183,6 +183,7 @@ archclean:
+ 	$(Q)rm -rf $(objtree)/arch/i386
+ 	$(Q)rm -rf $(objtree)/arch/x86_64
+ 	$(Q)$(MAKE) $(clean)=$(boot)
++	$(Q)$(MAKE) $(clean)=arch/x86/tools
+ 
+ define archhelp
+   echo  '* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)'
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0115-x86-32-relocs-Whitelist-more-symbols-for-ld-bug-work.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0115-x86-32-relocs-Whitelist-more-symbols-for-ld-bug-work.patch
new file mode 100644
index 0000000..da90c19
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0115-x86-32-relocs-Whitelist-more-symbols-for-ld-bug-work.patch
@@ -0,0 +1,73 @@
+From 4cef8ea9c2bb186461b7f50c806d2e1ecfb81ceb Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@zytor.com>
+Date: Wed, 23 May 2012 14:02:34 -0700
+Subject: [PATCH 115/117] x86-32, relocs: Whitelist more symbols for ld bug
+ workaround
+
+commit fd952815307f0f272bf49fd364a7fd2f9992bc42 upstream.
+
+As noted in checkin:
+
+a3e854d95 x86, relocs: Workaround for binutils 2.22.52.0.1 section bug
+
+ld version 2.22.52.0.[12] can incorrectly promote relative symbols to
+absolute, if the output section they appear in is otherwise empty.
+
+Since checkin:
+
+6520fe55 x86, realmode: 16-bit real-mode code support for relocs tool
+
+we actually check for this and error out rather than silently creating
+a kernel which will malfunction if relocated.
+
+Ingo found a configuration in which __start_builtin_fw triggered the
+warning.
+
+Go through the linker script sources and look for more symbols that
+could plausibly get bogusly promoted to absolute, and add them to the
+whitelist.
+
+In general, if the following error triggers:
+
+	Invalid absolute R_386_32 relocation: <symbol>
+
+... then we should verify that <symbol> is really meant to be
+relocated, and add it and any related symbols manually to the S_REL
+regexp.
+
+Please note that 6520fe55 does not introduce the error, only the check
+for the error -- without 6520fe55 this version of ld will simply
+produce a corrupt kernel if CONFIG_RELOCATABLE is set on x86-32.
+
+Reported-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/tools/relocs.c |   11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
+index c075507..eb1ad63 100644
+--- a/arch/x86/tools/relocs.c
++++ b/arch/x86/tools/relocs.c
+@@ -59,6 +59,17 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = {
+ 	"__x86_cpu_dev_(start|end)|"
+ 	"(__parainstructions|__alt_instructions)(|_end)|"
+ 	"(__iommu_table|__apicdrivers|__smp_locks)(|_end)|"
++	"__(start|end)_pci_.*|"
++	"__(start|end)_builtin_fw|"
++	"__(start|stop)___ksymtab(|_gpl|_unused|_unused_gpl|_gpl_future)|"
++	"__(start|stop)___kcrctab(|_gpl|_unused|_unused_gpl|_gpl_future)|"
++	"__(start|stop)___param|"
++	"__(start|stop)___modver|"
++	"__(start|stop)___bug_table|"
++	"__tracedata_(start|end)|"
++	"__(start|stop)_notes|"
++	"__end_rodata|"
++	"__initramfs_start|"
+ 	"_end)$"
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0116-x86-relocs-Add-jiffies-and-jiffies_64-to-the-relativ.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0116-x86-relocs-Add-jiffies-and-jiffies_64-to-the-relativ.patch
new file mode 100644
index 0000000..ad47cac
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0116-x86-relocs-Add-jiffies-and-jiffies_64-to-the-relativ.patch
@@ -0,0 +1,42 @@
+From 31885c2e45d56acc14aff8d0fafe4b0bee3be940 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@zytor.com>
+Date: Thu, 24 May 2012 07:01:38 -0700
+Subject: [PATCH 116/117] x86, relocs: Add jiffies and jiffies_64 to the
+ relative whitelist
+
+commit ea17e7414bc62e8d3bde8d08e3df1d921c518c17 upstream.
+
+The symbol jiffies is created in the linker script as an alias to
+jiffies_64.  Unfortunately this is done outside any section, and
+apparently GNU ld 2.21 doesn't carry the section with it, so we end up
+with an absolute symbol and therefore a broken kernel.
+
+Add jiffies and jiffies_64 to the whitelist.
+
+The most disturbing bit with this discovery is that it shows that we
+have had multiple linker bugs in this area crossing multiple
+generations, and have been silently building bad kernels for some time.
+
+Link: http://lkml.kernel.org/r/20120524171604.0d98284f3affc643e9714470@canb.auug.org.au
+Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/tools/relocs.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
+index eb1ad63..e529730 100644
+--- a/arch/x86/tools/relocs.c
++++ b/arch/x86/tools/relocs.c
+@@ -70,6 +70,7 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = {
+ 	"__(start|stop)_notes|"
+ 	"__end_rodata|"
+ 	"__initramfs_start|"
++	"(jiffies|jiffies_64)|"
+ 	"_end)$"
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0117-Linux-3.2.19.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0117-Linux-3.2.19.patch
new file mode 100644
index 0000000..e71638b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.19/0117-Linux-3.2.19.patch
@@ -0,0 +1,24 @@
+From 6ffcfc07eaa7389cee6c647a604b444e3b890a21 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 31 May 2012 00:44:12 +0100
+Subject: [PATCH 117/117] Linux 3.2.19
+
+---
+ Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 0226da5..c291184 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 2
+-SUBLEVEL = 18
++SUBLEVEL = 19
+ EXTRAVERSION =
+ NAME = Saber-toothed Squirrel
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0001-mtdoops-fix-the-oops_page_used-array-size.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0001-mtdoops-fix-the-oops_page_used-array-size.patch
index 733bacd..ed10e3a 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0001-mtdoops-fix-the-oops_page_used-array-size.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0001-mtdoops-fix-the-oops_page_used-array-size.patch
@@ -1,7 +1,7 @@
-From 47779e5a9fdb39f5cbe51d214a548c2c877d82c0 Mon Sep 17 00:00:00 2001
+From 8ca3e7c57df66813802542ce347e79ba5537f303 Mon Sep 17 00:00:00 2001
 From: Roman Tereshonkov <roman.tereshonkov@nokia.com>
 Date: Tue, 29 Nov 2011 12:49:18 +0200
-Subject: [PATCH 001/130] mtdoops: fix the oops_page_used array size
+Subject: [PATCH 001/129] mtdoops: fix the oops_page_used array size
 
 commit 556f063580db2953a7e53cd46b47724246320f60 upstream.
 
@@ -35,5 +35,5 @@ index 1e2fa62..0782b31 100644
  		printk(KERN_ERR "mtdoops: could not allocate page array\n");
  		return;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0002-mtd-mtdoops-skip-reading-initially-bad-blocks.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0002-mtd-mtdoops-skip-reading-initially-bad-blocks.patch
index 669ebc4..3933c59 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0002-mtd-mtdoops-skip-reading-initially-bad-blocks.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0002-mtd-mtdoops-skip-reading-initially-bad-blocks.patch
@@ -1,7 +1,7 @@
-From 485b51057dd6e8de3541b41d9369a2791889ac65 Mon Sep 17 00:00:00 2001
+From bfaedde2c4ae9dcab0aabf7dc7172999df5669ec Mon Sep 17 00:00:00 2001
 From: Roman Tereshonkov <roman.tereshonkov@nokia.com>
 Date: Fri, 2 Dec 2011 15:07:17 +0200
-Subject: [PATCH 002/130] mtd: mtdoops: skip reading initially bad blocks
+Subject: [PATCH 002/129] mtd: mtdoops: skip reading initially bad blocks
 
 commit 3538c56329936c78f7d356889908790006d0124c upstream.
 
@@ -32,5 +32,5 @@ index 0782b31..f3cdce9 100644
  		mark_page_used(cxt, page);
  		ret = mtd->read(mtd, page * record_size, MTDOOPS_HEADER_SIZE,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0003-mtd-mtd_blkdevs-don-t-increase-open-count-on-error-p.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0003-mtd-mtd_blkdevs-don-t-increase-open-count-on-error-p.patch
index 27b7487..11ea583 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0003-mtd-mtd_blkdevs-don-t-increase-open-count-on-error-p.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0003-mtd-mtd_blkdevs-don-t-increase-open-count-on-error-p.patch
@@ -1,7 +1,7 @@
-From 9e050cc5ce9a3890b8bcd2ec63b81921719cba83 Mon Sep 17 00:00:00 2001
+From 1e5cac540c54d687fea366251cc0ddf9266c0685 Mon Sep 17 00:00:00 2001
 From: Brian Norris <computersforpeace@gmail.com>
 Date: Mon, 7 Nov 2011 15:51:05 -0800
-Subject: [PATCH 003/130] mtd: mtd_blkdevs: don't increase 'open' count on
+Subject: [PATCH 003/129] mtd: mtd_blkdevs: don't increase 'open' count on
  error path
 
 commit 342ff28f5a2e5aa3236617bd2bddf6c749677ef2 upstream.
@@ -81,5 +81,5 @@ index ed8b5e7..424ca5f 100644
  	blktrans_dev_put(dev);
  	return ret;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0004-mtd-tests-stresstest-bail-out-if-device-has-not-enou.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0004-mtd-tests-stresstest-bail-out-if-device-has-not-enou.patch
index a205a86..6a4a0e0 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0004-mtd-tests-stresstest-bail-out-if-device-has-not-enou.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0004-mtd-tests-stresstest-bail-out-if-device-has-not-enou.patch
@@ -1,7 +1,7 @@
-From 8d9f0b4614ddd61c2dc00c8de8865d75c1226860 Mon Sep 17 00:00:00 2001
+From 401f9918c9daf754c70eb65a895c8ef3bde5b441 Mon Sep 17 00:00:00 2001
 From: Wolfram Sang <w.sang@pengutronix.de>
 Date: Tue, 29 Nov 2011 15:34:08 +0100
-Subject: [PATCH 004/130] mtd: tests: stresstest: bail out if device has not
+Subject: [PATCH 004/129] mtd: tests: stresstest: bail out if device has not
  enough eraseblocks
 
 commit 2f4478ccff7df845dc9c0f8996a96373122c4417 upstream.
@@ -56,5 +56,5 @@ index 52ffd91..811642f 100644
  	if (err)
  		printk(PRINT_PREF "error %d occurred\n", err);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0005-drivers-rtc-interface.c-fix-alarm-rollover-when-day-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0005-drivers-rtc-interface.c-fix-alarm-rollover-when-day-.patch
index 5363d48..26ba973 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0005-drivers-rtc-interface.c-fix-alarm-rollover-when-day-.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0005-drivers-rtc-interface.c-fix-alarm-rollover-when-day-.patch
@@ -1,7 +1,7 @@
-From ad9ec9a5123245692aeb7027beffcb35eeeb5bde Mon Sep 17 00:00:00 2001
+From 4795aa3e23be426bc3971ce821f37983dcee409f Mon Sep 17 00:00:00 2001
 From: Ben Hutchings <ben@decadent.org.uk>
 Date: Tue, 10 Jan 2012 15:11:02 -0800
-Subject: [PATCH 005/130] drivers/rtc/interface.c: fix alarm rollover when day
+Subject: [PATCH 005/129] drivers/rtc/interface.c: fix alarm rollover when day
  or month is out-of-range
 
 commit e74a8f2edb92cb690b467cea0ab652c509e9f624 upstream.
@@ -49,5 +49,5 @@ index 8e28625..8a1c031 100644
  		if (missing == none)
  			missing = month;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0006-ext4-add-missing-ext4_resize_end-on-error-paths.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0006-ext4-add-missing-ext4_resize_end-on-error-paths.patch
index d4bac4e..31d7359 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0006-ext4-add-missing-ext4_resize_end-on-error-paths.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0006-ext4-add-missing-ext4_resize_end-on-error-paths.patch
@@ -1,7 +1,7 @@
-From e67a0d3a73760b3c5eb0a93784a6f690b8dcf766 Mon Sep 17 00:00:00 2001
+From e6f3a0306b95afbc5965b42a05d85c102401b48c Mon Sep 17 00:00:00 2001
 From: Djalal Harouni <tixxdz@opendz.org>
 Date: Wed, 4 Jan 2012 17:09:52 -0500
-Subject: [PATCH 006/130] ext4: add missing ext4_resize_end on error paths
+Subject: [PATCH 006/129] ext4: add missing ext4_resize_end on error paths
 
 commit 014a1770371a028d22f364718c805f4216911ecd upstream.
 
@@ -105,5 +105,5 @@ index a567968..ab25f57 100644
  	}
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0007-ext4-fix-undefined-behavior-in-ext4_fill_flex_info.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0007-ext4-fix-undefined-behavior-in-ext4_fill_flex_info.patch
index e4f9861..8d8449f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0007-ext4-fix-undefined-behavior-in-ext4_fill_flex_info.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0007-ext4-fix-undefined-behavior-in-ext4_fill_flex_info.patch
@@ -1,7 +1,7 @@
-From 448f3344b91e15d4f94a9e687bd95157c5dcc7e2 Mon Sep 17 00:00:00 2001
+From 7105c77677c92d13510d38fd5dd085944464015e Mon Sep 17 00:00:00 2001
 From: Xi Wang <xi.wang@gmail.com>
 Date: Tue, 10 Jan 2012 11:51:10 -0500
-Subject: [PATCH 007/130] ext4: fix undefined behavior in
+Subject: [PATCH 007/129] ext4: fix undefined behavior in
  ext4_fill_flex_info()
 
 commit d50f2ab6f050311dbf7b8f5501b25f0bf64a439b upstream.
@@ -70,5 +70,5 @@ index 3e1329e..9281dbe 100644
  	/* We allocate both existing and potentially added groups */
  	flex_group_count = ((sbi->s_groups_count + groups_per_flex - 1) +
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0008-ALSA-snd-usb-us122l-Delete-calls-to-preempt_disable.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0008-ALSA-snd-usb-us122l-Delete-calls-to-preempt_disable.patch
index a4ada73..bf1692b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0008-ALSA-snd-usb-us122l-Delete-calls-to-preempt_disable.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0008-ALSA-snd-usb-us122l-Delete-calls-to-preempt_disable.patch
@@ -1,7 +1,7 @@
-From 60bad6c7d409471b8e5dc3febe12a48a98ee1e98 Mon Sep 17 00:00:00 2001
+From 14f05d5692c7431710f71ea914ad07dc0b60d2a2 Mon Sep 17 00:00:00 2001
 From: Karsten Wiese <fzu@wemgehoertderstaat.de>
 Date: Fri, 30 Dec 2011 01:42:01 +0100
-Subject: [PATCH 008/130] ALSA: snd-usb-us122l: Delete calls to
+Subject: [PATCH 008/129] ALSA: snd-usb-us122l: Delete calls to
  preempt_disable
 
 commit d0f3a2eb9062560bebca8b923424f3ca02a331ba upstream.
@@ -50,5 +50,5 @@ index c400ade..1e7a47a 100644
  			snd_printd(KERN_DEBUG
  				   "u[%i] start_frames differ in:%u out:%u\n",
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0009-ALSA-HDA-Fix-master-control-for-Cirrus-Logic-421X.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0009-ALSA-HDA-Fix-master-control-for-Cirrus-Logic-421X.patch
index ad1cc60..17e9a30 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0009-ALSA-HDA-Fix-master-control-for-Cirrus-Logic-421X.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0009-ALSA-HDA-Fix-master-control-for-Cirrus-Logic-421X.patch
@@ -1,7 +1,7 @@
-From b619b7c91e4294d2be0c1f5a61f068bb759bcce2 Mon Sep 17 00:00:00 2001
+From 78e0e9b19b4202874115f3a2745dad208dad51e2 Mon Sep 17 00:00:00 2001
 From: David Henningsson <david.henningsson@canonical.com>
 Date: Mon, 2 Jan 2012 12:40:15 +0100
-Subject: [PATCH 009/130] ALSA: HDA: Fix master control for Cirrus Logic 421X
+Subject: [PATCH 009/129] ALSA: HDA: Fix master control for Cirrus Logic 421X
 
 commit 40d03e63e91af8ddccdfd5a536cc2a6e51433e1d upstream.
 
@@ -53,5 +53,5 @@ index 70a7abd..f55ceb6 100644
  	if (cfg->speaker_outs) {
  		err = snd_hda_ctl_add(codec, 0,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0010-ALSA-HDA-Fix-automute-for-Cirrus-Logic-421x.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0010-ALSA-HDA-Fix-automute-for-Cirrus-Logic-421x.patch
index d0dde2c..4d0d47a 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0010-ALSA-HDA-Fix-automute-for-Cirrus-Logic-421x.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0010-ALSA-HDA-Fix-automute-for-Cirrus-Logic-421x.patch
@@ -1,7 +1,7 @@
-From 80e0a3cf0ce88d6e335dc18017e1733e11361c22 Mon Sep 17 00:00:00 2001
+From d16d6a4af51d31f0b7a1a0109c99fd926416cd1f Mon Sep 17 00:00:00 2001
 From: David Henningsson <david.henningsson@canonical.com>
 Date: Mon, 2 Jan 2012 12:40:16 +0100
-Subject: [PATCH 010/130] ALSA: HDA: Fix automute for Cirrus Logic 421x
+Subject: [PATCH 010/129] ALSA: HDA: Fix automute for Cirrus Logic 421x
 
 commit 78e2a928e377d5124932d4399c6c581908b027a0 upstream.
 
@@ -44,5 +44,5 @@ index f55ceb6..5b0a9bb 100644
  	if (spec->gpio_eapd_hp) {
  		unsigned int gpio = hp_present ?
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0011-ALSA-ice1724-Check-for-ac97-to-avoid-kernel-oops.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0011-ALSA-ice1724-Check-for-ac97-to-avoid-kernel-oops.patch
index 248dca3..4187528 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0011-ALSA-ice1724-Check-for-ac97-to-avoid-kernel-oops.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0011-ALSA-ice1724-Check-for-ac97-to-avoid-kernel-oops.patch
@@ -1,7 +1,7 @@
-From e6eeafa7a6932f54162e6412135d5ff6e3aabe9b Mon Sep 17 00:00:00 2001
+From 97a18462c03b9c0c3e22aaec73045024f198aacc Mon Sep 17 00:00:00 2001
 From: Pavel Hofman <pavel.hofman@ivitera.com>
 Date: Thu, 5 Jan 2012 23:05:18 +0100
-Subject: [PATCH 011/130] ALSA: ice1724 - Check for ac97 to avoid kernel oops
+Subject: [PATCH 011/129] ALSA: ice1724 - Check for ac97 to avoid kernel oops
 
 commit e7848163aa2a649d9065f230fadff80dc3519775 upstream.
 
@@ -34,5 +34,5 @@ index e328cfb..e525da2 100644
  }
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0012-ALSA-usb-audio-Avoid-flood-of-frame-active-debug-mes.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0012-ALSA-usb-audio-Avoid-flood-of-frame-active-debug-mes.patch
index 7c269c0..1fe6016 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0012-ALSA-usb-audio-Avoid-flood-of-frame-active-debug-mes.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0012-ALSA-usb-audio-Avoid-flood-of-frame-active-debug-mes.patch
@@ -1,7 +1,7 @@
-From 36a7bfaea157421f78e92f5ef8ccecb961cb6f35 Mon Sep 17 00:00:00 2001
+From fc0b965ed3b89f9f6cacff2dcd472f473b82ed99 Mon Sep 17 00:00:00 2001
 From: Takashi Iwai <tiwai@suse.de>
 Date: Mon, 9 Jan 2012 11:37:20 +0100
-Subject: [PATCH 012/130] ALSA: usb-audio - Avoid flood of frame-active debug
+Subject: [PATCH 012/129] ALSA: usb-audio - Avoid flood of frame-active debug
  messages
 
 commit 80c8a2a372599e604b04a9c568952fe39cd1851d upstream.
@@ -42,5 +42,5 @@ index 81c6ede..08dcce5 100644
  		}
  		bytes = urb->iso_frame_desc[i].actual_length;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0013-ALSA-hda-Use-auto-parser-for-HP-laptops-with-cx20459.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0013-ALSA-hda-Use-auto-parser-for-HP-laptops-with-cx20459.patch
index d63ca07..5ab9509 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0013-ALSA-hda-Use-auto-parser-for-HP-laptops-with-cx20459.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0013-ALSA-hda-Use-auto-parser-for-HP-laptops-with-cx20459.patch
@@ -1,7 +1,7 @@
-From 04e2d5556696dd62a2573c478118e7c4bedc9fba Mon Sep 17 00:00:00 2001
+From 0f951c7e3066c834b47172ee36435129c7c1d978 Mon Sep 17 00:00:00 2001
 From: Takashi Iwai <tiwai@suse.de>
 Date: Tue, 10 Jan 2012 08:59:56 +0100
-Subject: [PATCH 013/130] ALSA: hda - Use auto-parser for HP laptops with
+Subject: [PATCH 013/129] ALSA: hda - Use auto-parser for HP laptops with
  cx20459 codec
 
 commit de4da59e480cdf1075b33dbaf8078fc87bc52241 upstream.
@@ -33,5 +33,5 @@ index 0de2119..7072251 100644
  	SND_PCI_QUIRK(0x152d, 0x0753, "Benq R55E", CXT5045_BENQ),
  	SND_PCI_QUIRK(0x1734, 0x10ad, "Fujitsu Si1520", CXT5045_LAPTOP_MICSENSE),
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0014-ALSA-hda-Return-the-error-from-get_wcaps_type-for-in.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0014-ALSA-hda-Return-the-error-from-get_wcaps_type-for-in.patch
index f3aedb3..5278905 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0014-ALSA-hda-Return-the-error-from-get_wcaps_type-for-in.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0014-ALSA-hda-Return-the-error-from-get_wcaps_type-for-in.patch
@@ -1,7 +1,7 @@
-From b0b4fe32da41718cd4989aa2c29bc0e8806d3d6f Mon Sep 17 00:00:00 2001
+From 244e54a801fd96fbe05447599832c9eb110debeb Mon Sep 17 00:00:00 2001
 From: Takashi Iwai <tiwai@suse.de>
 Date: Tue, 10 Jan 2012 12:41:22 +0100
-Subject: [PATCH 014/130] ALSA: hda - Return the error from get_wcaps_type()
+Subject: [PATCH 014/129] ALSA: hda - Return the error from get_wcaps_type()
  for invalid NIDs
 
 commit 3a90274de3548ebb2aabfbf488cea8e275a73dc6 upstream.
@@ -54,5 +54,5 @@ index 2c981b5..254ab52 100644
  	if (names[wid_value])
  		return names[wid_value];
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0015-ALSA-hda-Fix-the-detection-of-Loopback-Mixing-contro.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0015-ALSA-hda-Fix-the-detection-of-Loopback-Mixing-contro.patch
index b80cfc2..5284246 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0015-ALSA-hda-Fix-the-detection-of-Loopback-Mixing-contro.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0015-ALSA-hda-Fix-the-detection-of-Loopback-Mixing-contro.patch
@@ -1,7 +1,7 @@
-From 1bbf40a55f2df6d045b872384e8b7de72bce4c63 Mon Sep 17 00:00:00 2001
+From cf6e92f0c3bbf4cdbd62a8838b9b8f2153d9607a Mon Sep 17 00:00:00 2001
 From: Takashi Iwai <tiwai@suse.de>
 Date: Tue, 10 Jan 2012 15:16:02 +0100
-Subject: [PATCH 015/130] ALSA: hda - Fix the detection of "Loopback Mixing"
+Subject: [PATCH 015/129] ALSA: hda - Fix the detection of "Loopback Mixing"
  control for VIA codecs
 
 commit 4808d12d1dddb046ec86425e5f6766f02e950292 upstream.
@@ -38,5 +38,5 @@ index b513762..8d69e59 100644
  	if (!via_clone_control(spec, &via_aamix_ctl_enum))
  		return -ENOMEM;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0016-ALSA-hda-Fix-the-lost-power-setup-of-seconary-pins-a.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0016-ALSA-hda-Fix-the-lost-power-setup-of-seconary-pins-a.patch
index 3c6db91..457ebc2 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0016-ALSA-hda-Fix-the-lost-power-setup-of-seconary-pins-a.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0016-ALSA-hda-Fix-the-lost-power-setup-of-seconary-pins-a.patch
@@ -1,7 +1,7 @@
-From 6b60ca2b5f516c2ccb9e8b9bb6044f911f8707b3 Mon Sep 17 00:00:00 2001
+From 2fb2fe7e67d82706d84fdcf8876c28958c69998b Mon Sep 17 00:00:00 2001
 From: Takashi Iwai <tiwai@suse.de>
 Date: Wed, 11 Jan 2012 12:34:11 +0100
-Subject: [PATCH 016/130] ALSA: hda - Fix the lost power-setup of seconary
+Subject: [PATCH 016/129] ALSA: hda - Fix the lost power-setup of seconary
  pins after PM resume
 
 commit f2cbba7602383cd9cdd21f0a5d0b8bd1aad47b33 upstream.
@@ -88,5 +88,5 @@ index 616678f..a87b260 100644
  }
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0017-drm-radeon-kms-workaround-invalid-AVI-infoframe-chec.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0017-drm-radeon-kms-workaround-invalid-AVI-infoframe-chec.patch
index 316cb50..f39bef5 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0017-drm-radeon-kms-workaround-invalid-AVI-infoframe-chec.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0017-drm-radeon-kms-workaround-invalid-AVI-infoframe-chec.patch
@@ -1,7 +1,7 @@
-From c57372d1bf1128cd5d5c6371bdc53470ff00d10d Mon Sep 17 00:00:00 2001
+From 27ce68d3d7c9f0815bb269da0495aa675eebf846 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
 Date: Fri, 23 Dec 2011 20:32:18 +0100
-Subject: [PATCH 017/130] drm/radeon/kms: workaround invalid AVI infoframe
+Subject: [PATCH 017/129] drm/radeon/kms: workaround invalid AVI infoframe
  checksum issue
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
@@ -39,5 +39,5 @@ index f5ac7e7..c45d921 100644
  	WREG32(offset+R600_HDMI_VIDEOINFOFRAME_0,
  		frame[0x0] | (frame[0x1] << 8) | (frame[0x2] << 16) | (frame[0x3] << 24));
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0018-drm-radeon-kms-disable-writeback-on-pre-R300-asics.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0018-drm-radeon-kms-disable-writeback-on-pre-R300-asics.patch
index d6608b9..8eb632d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0018-drm-radeon-kms-disable-writeback-on-pre-R300-asics.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0018-drm-radeon-kms-disable-writeback-on-pre-R300-asics.patch
@@ -1,7 +1,7 @@
-From f021f7ff80f10b57d44b122e655a8b8b32de0391 Mon Sep 17 00:00:00 2001
+From 4080c93fb98e70e64d31c2ab2bd036a940c0807b Mon Sep 17 00:00:00 2001
 From: Alex Deucher <alexander.deucher@amd.com>
 Date: Tue, 3 Jan 2012 09:48:38 -0500
-Subject: [PATCH 018/130] drm/radeon/kms: disable writeback on pre-R300 asics
+Subject: [PATCH 018/129] drm/radeon/kms: disable writeback on pre-R300 asics
 
 commit 28eebb703e28bc455ba704adb1026f76649b768c upstream.
 
@@ -36,5 +36,5 @@ index c4d00a1..9b39145 100644
  		} else {
  			rdev->wb.enabled = true;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0019-radeon-Fix-disabling-PCI-bus-mastering-on-big-endian.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0019-radeon-Fix-disabling-PCI-bus-mastering-on-big-endian.patch
index 7424646..64a0b20 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0019-radeon-Fix-disabling-PCI-bus-mastering-on-big-endian.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0019-radeon-Fix-disabling-PCI-bus-mastering-on-big-endian.patch
@@ -1,7 +1,7 @@
-From 8eb079554654f8de6153fa79f38b2cafcaaa6843 Mon Sep 17 00:00:00 2001
+From 73267cb0dea18d38a023f20c110e79b742c030c9 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com>
 Date: Thu, 5 Jan 2012 18:42:17 +0100
-Subject: [PATCH 019/130] radeon: Fix disabling PCI bus mastering on big
+Subject: [PATCH 019/129] radeon: Fix disabling PCI bus mastering on big
  endian hosts.
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
@@ -66,5 +66,5 @@ index b1053d6..c259e21 100644
  	mdelay(1);
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0020-pnfs-obj-pNFS-errors-are-communicated-on-iodata-pnfs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0020-pnfs-obj-pNFS-errors-are-communicated-on-iodata-pnfs.patch
index 7b37b61..68ba056 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0020-pnfs-obj-pNFS-errors-are-communicated-on-iodata-pnfs.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0020-pnfs-obj-pNFS-errors-are-communicated-on-iodata-pnfs.patch
@@ -1,7 +1,7 @@
-From 10d32d7599943b0209facd8ac9d12ce5024225d2 Mon Sep 17 00:00:00 2001
+From 873440a8680a5cf108ce5372f065fec762b7f73c Mon Sep 17 00:00:00 2001
 From: Boaz Harrosh <bharrosh@panasas.com>
 Date: Fri, 6 Jan 2012 09:28:12 +0200
-Subject: [PATCH 020/130] pnfs-obj: pNFS errors are communicated on
+Subject: [PATCH 020/129] pnfs-obj: pNFS errors are communicated on
  iodata->pnfs_error
 
 commit 5c0b4129c07b902b27d3f3ebc087757f534a3abd upstream.
@@ -46,5 +46,5 @@ index 72074e3..b3c2903 100644
  	objlayout_iodone(oir);
  	/* must not use oir after this point */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0021-pnfs-obj-Must-return-layout-on-IO-error.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0021-pnfs-obj-Must-return-layout-on-IO-error.patch
index 38e28ee..b05bc19 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0021-pnfs-obj-Must-return-layout-on-IO-error.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0021-pnfs-obj-Must-return-layout-on-IO-error.patch
@@ -1,7 +1,7 @@
-From 26cc5985abb44928985dd7def7aace0f33b29644 Mon Sep 17 00:00:00 2001
+From e20497d523b9954e6fe3a3cd333d1286e3c241ed Mon Sep 17 00:00:00 2001
 From: Boaz Harrosh <bharrosh@panasas.com>
 Date: Fri, 6 Jan 2012 09:31:20 +0200
-Subject: [PATCH 021/130] pnfs-obj: Must return layout on IO error
+Subject: [PATCH 021/129] pnfs-obj: Must return layout on IO error
 
 commit fe0fe83585f88346557868a803a479dfaaa0688a upstream.
 
@@ -88,5 +88,5 @@ index 1509530..53d593a 100644
  
  struct nfs4_deviceid_node;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0022-NFS-Retry-mounting-NFSROOT.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0022-NFS-Retry-mounting-NFSROOT.patch
index 80051a8..ceac5a9 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0022-NFS-Retry-mounting-NFSROOT.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0022-NFS-Retry-mounting-NFSROOT.patch
@@ -1,7 +1,7 @@
-From f55f86c3cb2a10b64e696c740b7945d8669d0d46 Mon Sep 17 00:00:00 2001
+From 51a699a0c53b199599fe16688248143ee98a167e Mon Sep 17 00:00:00 2001
 From: Chuck Lever <chuck.lever@oracle.com>
 Date: Mon, 5 Dec 2011 15:40:30 -0500
-Subject: [PATCH 022/130] NFS: Retry mounting NFSROOT
+Subject: [PATCH 022/129] NFS: Retry mounting NFSROOT
 
 commit 43717c7daebf10b43f12e68512484b3095bb1ba5 upstream.
 
@@ -90,5 +90,5 @@ index 0f6e1d9..db6e5ee 100644
  #endif
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0023-NFSv4.1-fix-backchannel-slotid-off-by-one-bug.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0023-NFSv4.1-fix-backchannel-slotid-off-by-one-bug.patch
index 17062e0..34ea494 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0023-NFSv4.1-fix-backchannel-slotid-off-by-one-bug.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0023-NFSv4.1-fix-backchannel-slotid-off-by-one-bug.patch
@@ -1,7 +1,7 @@
-From ae6644f8572872abad3082d4ecf29fa7c48f20d5 Mon Sep 17 00:00:00 2001
+From 4d12390d5a9b1c151416e0fbef4702455f4a2626 Mon Sep 17 00:00:00 2001
 From: Andy Adamson <andros@netapp.com>
 Date: Wed, 9 Nov 2011 13:58:20 -0500
-Subject: [PATCH 023/130] NFSv4.1: fix backchannel slotid off-by-one bug
+Subject: [PATCH 023/129] NFSv4.1: fix backchannel slotid off-by-one bug
 
 commit 61f2e5106582d02f30b6807e3f9c07463c572ccb upstream.
 
@@ -26,5 +26,5 @@ index 43926ad..54cea8a 100644
  
  	slot = tbl->slots + args->csa_slotid;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0024-NFS-fix-recent-breakage-to-NFS-error-handling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0024-NFS-fix-recent-breakage-to-NFS-error-handling.patch
index 7ac8cca..70d96b3 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0024-NFS-fix-recent-breakage-to-NFS-error-handling.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0024-NFS-fix-recent-breakage-to-NFS-error-handling.patch
@@ -1,7 +1,7 @@
-From 7738b871ed07b550480b1b26d7bb6349f54c3d55 Mon Sep 17 00:00:00 2001
+From 7aab7b372a174e80233a74ff10d55ded1ea28c2f Mon Sep 17 00:00:00 2001
 From: NeilBrown <neilb@suse.de>
 Date: Wed, 16 Nov 2011 11:46:31 +1100
-Subject: [PATCH 024/130] NFS - fix recent breakage to NFS error handling.
+Subject: [PATCH 024/129] NFS - fix recent breakage to NFS error handling.
 
 commit 2edb6bc3852c681c0d948245bd55108dc6407604 upstream.
 
@@ -56,5 +56,5 @@ index 606ef0f..c43a452 100644
  	if (have_error)
  		ret = xchg(&ctx->error, 0);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0025-NFSv4-include-bitmap-in-nfsv4-get-acl-data.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0025-NFSv4-include-bitmap-in-nfsv4-get-acl-data.patch
index 208b0a7..f57d732 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0025-NFSv4-include-bitmap-in-nfsv4-get-acl-data.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0025-NFSv4-include-bitmap-in-nfsv4-get-acl-data.patch
@@ -1,7 +1,7 @@
-From 02df7d0ce33039c06e2be9a446ed816f3d9c9177 Mon Sep 17 00:00:00 2001
+From 0ae2afe3f515d5e56beeefa0f0e5fd23cb358f4a Mon Sep 17 00:00:00 2001
 From: Andy Adamson <andros@netapp.com>
 Date: Wed, 7 Dec 2011 11:55:27 -0500
-Subject: [PATCH 025/130] NFSv4: include bitmap in nfsv4 get acl data
+Subject: [PATCH 025/129] NFSv4: include bitmap in nfsv4 get acl data
 
 commit bf118a342f10dafe44b14451a1392c3254629a1f upstream.
 
@@ -309,5 +309,5 @@ index 277ebd4..593f4c6 100644
  /*
   * xdr_shrink_bufhead
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0026-nfs-fix-regression-in-handling-of-context-option-in-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0026-nfs-fix-regression-in-handling-of-context-option-in-.patch
index 34d00b6..ccc04bd 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0026-nfs-fix-regression-in-handling-of-context-option-in-.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0026-nfs-fix-regression-in-handling-of-context-option-in-.patch
@@ -1,7 +1,7 @@
-From e89768f97b1d5faa0cb6335e46558f889320621e Mon Sep 17 00:00:00 2001
+From 116cbe8665b2a7fd6538b2d92e04f016317fee84 Mon Sep 17 00:00:00 2001
 From: Jeff Layton <jlayton@redhat.com>
 Date: Tue, 20 Dec 2011 06:57:45 -0500
-Subject: [PATCH 026/130] nfs: fix regression in handling of context= option
+Subject: [PATCH 026/129] nfs: fix regression in handling of context= option
  in NFSv4
 
 commit 8a0d551a59ac92d8ff048d6cb29d3a02073e81e8 upstream.
@@ -143,5 +143,5 @@ index 1347774..3ada13c 100644
  			error != 0 ? " [error]" : "");
  	return res;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0027-HID-bump-maximum-global-item-tag-report-size-to-96-b.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0027-HID-bump-maximum-global-item-tag-report-size-to-96-b.patch
index 24664dc..22df17c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0027-HID-bump-maximum-global-item-tag-report-size-to-96-b.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0027-HID-bump-maximum-global-item-tag-report-size-to-96-b.patch
@@ -1,7 +1,7 @@
-From b362c0e865aececc1f7e47a96ed390b4407e92e1 Mon Sep 17 00:00:00 2001
+From b475e4ad0950706030ae96b367c2dbb065a785be Mon Sep 17 00:00:00 2001
 From: Chase Douglas <chase.douglas@canonical.com>
 Date: Mon, 7 Nov 2011 11:08:05 -0800
-Subject: [PATCH 027/130] HID: bump maximum global item tag report size to 96
+Subject: [PATCH 027/129] HID: bump maximum global item tag report size to 96
  bytes
 
 commit e46e927b9b7e8d95526e69322855243882b7e1a3 upstream.
@@ -31,5 +31,5 @@ index af35384..1473067 100644
  					parser->global.report_size);
  			return -1;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0028-HID-wiimote-Select-INPUT_FF_MEMLESS.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0028-HID-wiimote-Select-INPUT_FF_MEMLESS.patch
index 6a82539..0216672 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0028-HID-wiimote-Select-INPUT_FF_MEMLESS.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0028-HID-wiimote-Select-INPUT_FF_MEMLESS.patch
@@ -1,7 +1,7 @@
-From 36ef51ce1bd874fab45b938646866fe76878d759 Mon Sep 17 00:00:00 2001
+From 2cfaf0fb0c2b2fb54ecae98d34df27d549a6e92c Mon Sep 17 00:00:00 2001
 From: David Herrmann <dh.herrmann@googlemail.com>
 Date: Wed, 7 Dec 2011 21:33:59 +0100
-Subject: [PATCH 028/130] HID: wiimote: Select INPUT_FF_MEMLESS
+Subject: [PATCH 028/129] HID: wiimote: Select INPUT_FF_MEMLESS
 
 commit ef6f41157f3864d9bf42671b2ed66062dcafb72e upstream.
 
@@ -29,5 +29,5 @@ index 22a4a05..332c22a 100644
  	Support for the Nintendo Wii Remote bluetooth device.
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0029-UBI-fix-missing-scrub-when-there-is-a-bit-flip.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0029-UBI-fix-missing-scrub-when-there-is-a-bit-flip.patch
index ffda65f..75dbf57 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0029-UBI-fix-missing-scrub-when-there-is-a-bit-flip.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0029-UBI-fix-missing-scrub-when-there-is-a-bit-flip.patch
@@ -1,7 +1,7 @@
-From 7c9f37ae89d2e888e7be2c0b23b96765670bf00f Mon Sep 17 00:00:00 2001
+From 68ff23dc67132bf9668c4e7dab105f7d8a83937f Mon Sep 17 00:00:00 2001
 From: Bhavesh Parekh <bparekh@nvidia.com>
 Date: Wed, 30 Nov 2011 17:43:42 +0530
-Subject: [PATCH 029/130] UBI: fix missing scrub when there is a bit-flip
+Subject: [PATCH 029/129] UBI: fix missing scrub when there is a bit-flip
 
 commit e801e128b2200c40a0ec236cf2330b2586b6e05a upstream.
 
@@ -77,5 +77,5 @@ index 42c684c..277c429 100644
  		    err == MOVE_TARGET_RD_ERR) {
  			/*
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0030-UBI-fix-use-after-free-on-error-path.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0030-UBI-fix-use-after-free-on-error-path.patch
index c317d73..ee5d64c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0030-UBI-fix-use-after-free-on-error-path.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0030-UBI-fix-use-after-free-on-error-path.patch
@@ -1,7 +1,7 @@
-From d28f4336976d7994bca4de5d2eb3a4b6cc003be8 Mon Sep 17 00:00:00 2001
+From 917c71669ddf01983d843f8fc19bbdc296748a9c Mon Sep 17 00:00:00 2001
 From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
 Date: Thu, 5 Jan 2012 10:47:18 +0200
-Subject: [PATCH 030/130] UBI: fix use-after-free on error path
+Subject: [PATCH 030/129] UBI: fix use-after-free on error path
 
 commit e57e0d8e818512047fe379157c3f77f1b9fabffb upstream.
 
@@ -48,5 +48,5 @@ index 277c429..0696e36 100644
  	/* It is %-EIO, the PEB went bad */
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0031-PCI-Fix-PCI_EXP_TYPE_RC_EC-value.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0031-PCI-Fix-PCI_EXP_TYPE_RC_EC-value.patch
index 7c925b7..ab3d2d4 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0031-PCI-Fix-PCI_EXP_TYPE_RC_EC-value.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0031-PCI-Fix-PCI_EXP_TYPE_RC_EC-value.patch
@@ -1,7 +1,7 @@
-From b55d48c7cec81071f13dc9e88a657b507573a4ec Mon Sep 17 00:00:00 2001
+From 9e38af95ee520c7c6ffa8b4fcc976a3437ef8103 Mon Sep 17 00:00:00 2001
 From: Alex Williamson <alex.williamson@redhat.com>
 Date: Wed, 16 Nov 2011 09:24:16 -0700
-Subject: [PATCH 031/130] PCI: Fix PCI_EXP_TYPE_RC_EC value
+Subject: [PATCH 031/129] PCI: Fix PCI_EXP_TYPE_RC_EC value
 
 commit 1830ea91c20b06608f7cdb2455ce05ba834b3214 upstream.
 
@@ -28,5 +28,5 @@ index b5d9657..411c412 100644
  #define PCI_EXP_FLAGS_IRQ	0x3e00	/* Interrupt message number */
  #define PCI_EXP_DEVCAP		4	/* Device capabilities */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0032-PCI-msi-Disable-msi-interrupts-when-we-initialize-a-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0032-PCI-msi-Disable-msi-interrupts-when-we-initialize-a-.patch
index 8525a50..6da8ef8 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0032-PCI-msi-Disable-msi-interrupts-when-we-initialize-a-.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0032-PCI-msi-Disable-msi-interrupts-when-we-initialize-a-.patch
@@ -1,7 +1,7 @@
-From 5b5be8901badfd9baec5d13fec6be5c942f2bf71 Mon Sep 17 00:00:00 2001
+From 948a5d9ea80dfda0b40581e02217f30ffefd8e60 Mon Sep 17 00:00:00 2001
 From: "Eric W. Biederman" <ebiederm@xmission.com>
 Date: Mon, 17 Oct 2011 11:46:06 -0700
-Subject: [PATCH 032/130] PCI: msi: Disable msi interrupts when we initialize
+Subject: [PATCH 032/129] PCI: msi: Disable msi interrupts when we initialize
  a pci device
 
 commit a776c491ca5e38c26d9f66923ff574d041e747f4 upstream.
@@ -49,5 +49,5 @@ index 0e6d04d..e3efb43 100644
 +	msix_set_enable(dev, 0);
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0033-x86-PCI-Ignore-CPU-non-addressable-_CRS-reserved-mem.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0033-x86-PCI-Ignore-CPU-non-addressable-_CRS-reserved-mem.patch
index 9381af2..b7dc6e8 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0033-x86-PCI-Ignore-CPU-non-addressable-_CRS-reserved-mem.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0033-x86-PCI-Ignore-CPU-non-addressable-_CRS-reserved-mem.patch
@@ -1,7 +1,7 @@
-From 18329c64230886275000c9f9e4ff499d15ca7fb4 Mon Sep 17 00:00:00 2001
+From 08ba39eb25bcf540f859e7204c3307ee43b52eff Mon Sep 17 00:00:00 2001
 From: Gary Hade <garyhade@us.ibm.com>
 Date: Mon, 14 Nov 2011 15:42:16 -0800
-Subject: [PATCH 033/130] x86/PCI: Ignore CPU non-addressable _CRS reserved
+Subject: [PATCH 033/129] x86/PCI: Ignore CPU non-addressable _CRS reserved
  memory resources
 
 commit ae5cd86455381282ece162966183d3f208c6fad7 upstream.
@@ -61,5 +61,5 @@ index 404f21a..f8348ab 100644
  	res = &info->res[info->res_num];
  	res->name = info->name;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0034-x86-PCI-amd-factor-out-MMCONFIG-discovery.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0034-x86-PCI-amd-factor-out-MMCONFIG-discovery.patch
index 891c47a..8d30b65 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0034-x86-PCI-amd-factor-out-MMCONFIG-discovery.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0034-x86-PCI-amd-factor-out-MMCONFIG-discovery.patch
@@ -1,7 +1,7 @@
-From 4d9bd6414c035d82f217aaee1cfa52079fdd7e0e Mon Sep 17 00:00:00 2001
+From 64525bdf1bbff67faf88ccd7bc83ef856489ed24 Mon Sep 17 00:00:00 2001
 From: Bjorn Helgaas <bhelgaas@google.com>
 Date: Thu, 5 Jan 2012 14:27:19 -0700
-Subject: [PATCH 034/130] x86/PCI: amd: factor out MMCONFIG discovery
+Subject: [PATCH 034/129] x86/PCI: amd: factor out MMCONFIG discovery
 
 commit 24d25dbfa63c376323096660bfa9ad45a08870ce upstream.
 
@@ -156,5 +156,5 @@ index 026e493..385a940 100644
  
  	/* mmio resource */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0035-x86-PCI-build-amd_bus.o-only-when-CONFIG_AMD_NB-y.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0035-x86-PCI-build-amd_bus.o-only-when-CONFIG_AMD_NB-y.patch
index 48b1c0e..3fd79be 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0035-x86-PCI-build-amd_bus.o-only-when-CONFIG_AMD_NB-y.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0035-x86-PCI-build-amd_bus.o-only-when-CONFIG_AMD_NB-y.patch
@@ -1,7 +1,7 @@
-From 388420a808ce95390d4555b15d22731d247a1a1e Mon Sep 17 00:00:00 2001
+From ab624504467af8cf207855de15bc8b835605ba88 Mon Sep 17 00:00:00 2001
 From: Bjorn Helgaas <bhelgaas@google.com>
 Date: Thu, 12 Jan 2012 08:01:40 -0700
-Subject: [PATCH 035/130] x86/PCI: build amd_bus.o only when CONFIG_AMD_NB=y
+Subject: [PATCH 035/129] x86/PCI: build amd_bus.o only when CONFIG_AMD_NB=y
 
 commit 5cf9a4e69c1ff0ccdd1d2b7404f95c0531355274 upstream.
 
@@ -33,5 +33,5 @@ index 6b8759f..d24d3da 100644
  
  ifeq ($(CONFIG_PCI_DEBUG),y)
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0036-SCSI-mpt2sas-Release-spinlock-for-the-raid-device-li.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0036-SCSI-mpt2sas-Release-spinlock-for-the-raid-device-li.patch
index a00e4ad..411ca8b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0036-SCSI-mpt2sas-Release-spinlock-for-the-raid-device-li.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0036-SCSI-mpt2sas-Release-spinlock-for-the-raid-device-li.patch
@@ -1,7 +1,7 @@
-From 5e3db86029f0b96de1fdd1a320c93a0a48301371 Mon Sep 17 00:00:00 2001
+From b76617ff2fa38409d3065f944359e5e47b290014 Mon Sep 17 00:00:00 2001
 From: "nagalakshmi.nandigama@lsi.com" <nagalakshmi.nandigama@lsi.com>
 Date: Thu, 1 Dec 2011 07:52:56 +0530
-Subject: [PATCH 036/130] SCSI: mpt2sas: Release spinlock for the raid device
+Subject: [PATCH 036/129] SCSI: mpt2sas: Release spinlock for the raid device
  list before blocking it
 
 commit 30c43282f3d347f47f9e05199d2b14f56f3f2837 upstream.
@@ -52,5 +52,5 @@ index d570573..3a4f666 100644
  }
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0037-SCSI-mpt2sas-Fix-for-memory-allocation-error-for-lar.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0037-SCSI-mpt2sas-Fix-for-memory-allocation-error-for-lar.patch
index 53aaf44..d58ff27 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0037-SCSI-mpt2sas-Fix-for-memory-allocation-error-for-lar.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0037-SCSI-mpt2sas-Fix-for-memory-allocation-error-for-lar.patch
@@ -1,7 +1,7 @@
-From 9ebea3b971f454ee2d1c0970ac76636d2fa4f5a2 Mon Sep 17 00:00:00 2001
+From c987e1592482d819fd950fbaad9a1405f892c39e Mon Sep 17 00:00:00 2001
 From: "nagalakshmi.nandigama@lsi.com" <nagalakshmi.nandigama@lsi.com>
 Date: Thu, 1 Dec 2011 07:53:08 +0530
-Subject: [PATCH 037/130] SCSI: mpt2sas : Fix for memory allocation error for
+Subject: [PATCH 037/129] SCSI: mpt2sas : Fix for memory allocation error for
  large host credits
 
 commit aff132d95ffe14eca96cab90597cdd010b457af7 upstream.
@@ -173,5 +173,5 @@ index 3a4f666..9bc6fb2 100644
  	}
  	chain_req = list_entry(ioc->free_chain_list.next,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0038-xen-xenbus-Reject-replies-with-payload-XENSTORE_PAYL.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0038-xen-xenbus-Reject-replies-with-payload-XENSTORE_PAYL.patch
index 5e06293..ce8871b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0038-xen-xenbus-Reject-replies-with-payload-XENSTORE_PAYL.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0038-xen-xenbus-Reject-replies-with-payload-XENSTORE_PAYL.patch
@@ -1,7 +1,7 @@
-From 5a9209c05e1082f2394f483b7326cbf0efeb2ed2 Mon Sep 17 00:00:00 2001
+From 60ff826ed445ff093db42fd2e5ac97839c3c43d4 Mon Sep 17 00:00:00 2001
 From: Ian Campbell <Ian.Campbell@citrix.com>
 Date: Wed, 4 Jan 2012 09:34:49 +0000
-Subject: [PATCH 038/130] xen/xenbus: Reject replies with payload >
+Subject: [PATCH 038/129] xen/xenbus: Reject replies with payload >
  XENSTORE_PAYLOAD_MAX.
 
 commit 9e7860cee18241633eddb36a4c34c7b61d8cecbc upstream.
@@ -74,5 +74,5 @@ index f6f07aa..7cdfca2 100644
 +
  #endif /* _XS_WIRE_H */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0039-md-raid1-perform-bad-block-tests-for-WriteMostly-dev.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0039-md-raid1-perform-bad-block-tests-for-WriteMostly-dev.patch
index 9931fbe..a6df906 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0039-md-raid1-perform-bad-block-tests-for-WriteMostly-dev.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0039-md-raid1-perform-bad-block-tests-for-WriteMostly-dev.patch
@@ -1,7 +1,7 @@
-From 1a8506bc77390a1f7e67a4176c6d4c5b05a18920 Mon Sep 17 00:00:00 2001
+From 4f2bf4b7d712836951cdbfa4807ae0309711487c Mon Sep 17 00:00:00 2001
 From: NeilBrown <neilb@suse.de>
 Date: Mon, 9 Jan 2012 01:41:51 +1100
-Subject: [PATCH 039/130] md/raid1: perform bad-block tests for WriteMostly
+Subject: [PATCH 039/129] md/raid1: perform bad-block tests for WriteMostly
  devices too.
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
@@ -52,5 +52,5 @@ index ede2461..7d9e071 100644
  		}
  		/* This is a reasonable device to use.  It might
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0040-ima-free-duplicate-measurement-memory.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0040-ima-free-duplicate-measurement-memory.patch
index 5237e81..221f3df 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0040-ima-free-duplicate-measurement-memory.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0040-ima-free-duplicate-measurement-memory.patch
@@ -1,7 +1,7 @@
-From 20da29ae3a7382bd51c44de1e5f5e8220b9f21b0 Mon Sep 17 00:00:00 2001
+From 5800ae9277818c4ce77d7efd4a1035738ec40400 Mon Sep 17 00:00:00 2001
 From: Roberto Sassu <roberto.sassu@polito.it>
 Date: Mon, 19 Dec 2011 15:57:27 +0100
-Subject: [PATCH 040/130] ima: free duplicate measurement memory
+Subject: [PATCH 040/129] ima: free duplicate measurement memory
 
 commit 45fae7493970d7c45626ccd96d4a74f5f1eea5a9 upstream.
 
@@ -48,5 +48,5 @@ index 8e28f04..e1a5062 100644
  		}
  	}
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0041-ima-fix-invalid-memory-reference.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0041-ima-fix-invalid-memory-reference.patch
index de3d14b..3f30fe2 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0041-ima-fix-invalid-memory-reference.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0041-ima-fix-invalid-memory-reference.patch
@@ -1,7 +1,7 @@
-From 52428cef38a83932b588b3ceff080a7411780dc9 Mon Sep 17 00:00:00 2001
+From 2c5908ebba650537dda1db47220afc062e7d61bd Mon Sep 17 00:00:00 2001
 From: Roberto Sassu <roberto.sassu@polito.it>
 Date: Mon, 19 Dec 2011 15:57:28 +0100
-Subject: [PATCH 041/130] ima: fix invalid memory reference
+Subject: [PATCH 041/129] ima: fix invalid memory reference
 
 commit 7b7e5916aa2f46e57f8bd8cb89c34620ebfda5da upstream.
 
@@ -64,5 +64,5 @@ index e1a5062..55a6271 100644
  	}
  out:
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0042-slub-fix-a-possible-memleak-in-__slab_alloc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0042-slub-fix-a-possible-memleak-in-__slab_alloc.patch
index 1a2116f..2af89dd 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0042-slub-fix-a-possible-memleak-in-__slab_alloc.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0042-slub-fix-a-possible-memleak-in-__slab_alloc.patch
@@ -1,7 +1,7 @@
-From 7942ee2ec78601a85bc491a0b63dc2e45dfec3a6 Mon Sep 17 00:00:00 2001
+From 71490e8f6f58ec56533554888983ce09d6ee5cb1 Mon Sep 17 00:00:00 2001
 From: Eric Dumazet <eric.dumazet@gmail.com>
 Date: Tue, 13 Dec 2011 04:57:06 +0100
-Subject: [PATCH 042/130] slub: fix a possible memleak in __slab_alloc()
+Subject: [PATCH 042/129] slub: fix a possible memleak in __slab_alloc()
 
 commit 73736e0387ba0e6d2b703407b4d26168d31516a7 upstream.
 
@@ -43,5 +43,5 @@ index ed3334d..1a919f0 100644
  
  	do {
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0043-PNP-work-around-Dell-1536-1546-BIOS-MMCONFIG-bug-tha.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0043-PNP-work-around-Dell-1536-1546-BIOS-MMCONFIG-bug-tha.patch
index 0b3b154..c8c5bd7 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0043-PNP-work-around-Dell-1536-1546-BIOS-MMCONFIG-bug-tha.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0043-PNP-work-around-Dell-1536-1546-BIOS-MMCONFIG-bug-tha.patch
@@ -1,7 +1,7 @@
-From b984f94bf34a9df2d49b84ff3a723c968e8e8c35 Mon Sep 17 00:00:00 2001
+From ac901f18d34bc2bf1be5e6b56cf6eeb045c0bbee Mon Sep 17 00:00:00 2001
 From: Bjorn Helgaas <bhelgaas@google.com>
 Date: Thu, 5 Jan 2012 14:27:24 -0700
-Subject: [PATCH 043/130] PNP: work around Dell 1536/1546 BIOS MMCONFIG bug
+Subject: [PATCH 043/129] PNP: work around Dell 1536/1546 BIOS MMCONFIG bug
  that breaks USB
 
 commit eb31aae8cb5eb54e234ed2d857ddac868195d911 upstream.
@@ -97,5 +97,5 @@ index dfbd5a6..258fef2 100644
  };
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0044-asix-fix-setting-custom-MAC-address-on-Asix-88178-de.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0044-asix-fix-setting-custom-MAC-address-on-Asix-88178-de.patch
index 72134df..ec9189d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0044-asix-fix-setting-custom-MAC-address-on-Asix-88178-de.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0044-asix-fix-setting-custom-MAC-address-on-Asix-88178-de.patch
@@ -1,7 +1,7 @@
-From f4da550957683d2b4f271d222e936a79866c6242 Mon Sep 17 00:00:00 2001
+From 45268a6d90150936994e8b3e21eb91a54586685e Mon Sep 17 00:00:00 2001
 From: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
 Date: Tue, 10 Jan 2012 06:40:23 +0000
-Subject: [PATCH 044/130] asix: fix setting custom MAC address on Asix 88178
+Subject: [PATCH 044/129] asix: fix setting custom MAC address on Asix 88178
  devices
 
 commit 71bc5d94061516c4e70303570128797bcf768b10 upstream.
@@ -41,5 +41,5 @@ index dd2625a..b495821 100644
  	if (ret < 0)
  		return ret;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0045-asix-fix-setting-custom-MAC-address-on-Asix-88772-de.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0045-asix-fix-setting-custom-MAC-address-on-Asix-88772-de.patch
index e4a46e5..b39ee83 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0045-asix-fix-setting-custom-MAC-address-on-Asix-88772-de.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0045-asix-fix-setting-custom-MAC-address-on-Asix-88772-de.patch
@@ -1,7 +1,7 @@
-From d36c9125fa5835e571dcd975e20833450ff04b4f Mon Sep 17 00:00:00 2001
+From fa83c408b16aae1d3d85868c528caf491e14af76 Mon Sep 17 00:00:00 2001
 From: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
 Date: Tue, 10 Jan 2012 06:40:17 +0000
-Subject: [PATCH 045/130] asix: fix setting custom MAC address on Asix 88772
+Subject: [PATCH 045/129] asix: fix setting custom MAC address on Asix 88772
  devices
 
 commit 8ef66bdc4bda6aac2dae73b84d79dc8c2db33637 upstream.
@@ -49,5 +49,5 @@ index b495821..f5e063a 100644
  	ret = asix_write_rx_ctl(dev, AX_DEFAULT_RX_CTL);
  	if (ret < 0)
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0046-include-linux-crash_dump.h-needs-elf.h.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0046-include-linux-crash_dump.h-needs-elf.h.patch
index dbc03e2..3fe1fc7 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0046-include-linux-crash_dump.h-needs-elf.h.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0046-include-linux-crash_dump.h-needs-elf.h.patch
@@ -1,7 +1,7 @@
-From 5a7217fdd8cbda3e7d44d33a51c077ab84e6437d Mon Sep 17 00:00:00 2001
+From a509baa477542eca7e6f6d8d23dc1ba04248a62f Mon Sep 17 00:00:00 2001
 From: Fabio Estevam <festevam@gmail.com>
 Date: Thu, 12 Jan 2012 17:20:20 -0800
-Subject: [PATCH 046/130] include/linux/crash_dump.h needs elf.h
+Subject: [PATCH 046/129] include/linux/crash_dump.h needs elf.h
 
 commit 1f536b9e9f85456df93614b3c2f6a1a2b7d7cb9b upstream.
 
@@ -50,5 +50,5 @@ index 5c4abce..b936763 100644
  #define ELFCORE_ADDR_MAX	(-1ULL)
  #define ELFCORE_ADDR_ERR	(-2ULL)
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0047-rtl8192se-Fix-BUG-caused-by-failure-to-check-skb-all.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0047-rtl8192se-Fix-BUG-caused-by-failure-to-check-skb-all.patch
index c9702c6..083f876 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0047-rtl8192se-Fix-BUG-caused-by-failure-to-check-skb-all.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0047-rtl8192se-Fix-BUG-caused-by-failure-to-check-skb-all.patch
@@ -1,7 +1,7 @@
-From ee971ad4b1a94e768465a27de0357ed71d7e2b97 Mon Sep 17 00:00:00 2001
+From b12320439e84a510f0043ea4b2540080c8bbb9a7 Mon Sep 17 00:00:00 2001
 From: Larry Finger <Larry.Finger@lwfinger.net>
 Date: Wed, 4 Jan 2012 20:50:47 -0600
-Subject: [PATCH 047/130] rtl8192se: Fix BUG caused by failure to check skb
+Subject: [PATCH 047/129] rtl8192se: Fix BUG caused by failure to check skb
  allocation
 
 commit d90db4b12bc1b9b8a787ef28550fdb767ee25a49 upstream.
@@ -40,5 +40,5 @@ index 6f91a14..3fda6b1 100644
  	cb_desc->queue_index = TXCMD_QUEUE;
  	cb_desc->cmd_or_init = DESC_PACKET_TYPE_NORMAL;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0048-mac80211-fix-rx-key-NULL-pointer-dereference-in-prom.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0048-mac80211-fix-rx-key-NULL-pointer-dereference-in-prom.patch
index e6bd10f..e7063df 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0048-mac80211-fix-rx-key-NULL-pointer-dereference-in-prom.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0048-mac80211-fix-rx-key-NULL-pointer-dereference-in-prom.patch
@@ -1,7 +1,7 @@
-From 967087957c3661dc97da0f17d3be6d7b105d8d0e Mon Sep 17 00:00:00 2001
+From 12b3ec5c806e2daef619f068f80115f4dc0aa6bb Mon Sep 17 00:00:00 2001
 From: Stanislaw Gruszka <sgruszka@redhat.com>
 Date: Wed, 11 Jan 2012 09:26:54 +0100
-Subject: [PATCH 048/130] mac80211: fix rx->key NULL pointer dereference in
+Subject: [PATCH 048/129] mac80211: fix rx->key NULL pointer dereference in
  promiscuous mode
 
 commit 1140afa862842ac3e56678693050760edc4ecde9 upstream.
@@ -48,5 +48,5 @@ index f614ce7..28a39bb 100644
  
  		return RX_CONTINUE;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0049-ath9k-Fix-regression-in-channelwidth-switch-at-the-s.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0049-ath9k-Fix-regression-in-channelwidth-switch-at-the-s.patch
index ac047ab..1313103 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0049-ath9k-Fix-regression-in-channelwidth-switch-at-the-s.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0049-ath9k-Fix-regression-in-channelwidth-switch-at-the-s.patch
@@ -1,7 +1,7 @@
-From 83f574499fed31e6824e7c77f16353bc8a2e2cb4 Mon Sep 17 00:00:00 2001
+From f7938357cefb08ed00118138736f4d475fbc6578 Mon Sep 17 00:00:00 2001
 From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
 Date: Mon, 9 Jan 2012 15:37:53 +0530
-Subject: [PATCH 049/130] ath9k: Fix regression in channelwidth switch at the
+Subject: [PATCH 049/129] ath9k: Fix regression in channelwidth switch at the
  same channel
 
 commit 1a19f77f3642b8194ad9cf55548cc5d92e841766 upstream.
@@ -64,5 +64,5 @@ index a9c5ae7..f76a814 100644
  		ath9k_cmn_update_ichannel(&sc->sc_ah->channels[pos],
  					  curchan, conf->channel_type);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0050-memcg-add-mem_cgroup_replace_page_cache-to-fix-LRU-i.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0050-memcg-add-mem_cgroup_replace_page_cache-to-fix-LRU-i.patch
index 0be7af5..a3cc188 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0050-memcg-add-mem_cgroup_replace_page_cache-to-fix-LRU-i.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0050-memcg-add-mem_cgroup_replace_page_cache-to-fix-LRU-i.patch
@@ -1,7 +1,7 @@
-From 650ad91dac98e319ac975a625b9cab24ebd132ce Mon Sep 17 00:00:00 2001
+From 3a43cb3518148d31838d97bff3e6fcc29487499d Mon Sep 17 00:00:00 2001
 From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
 Date: Thu, 12 Jan 2012 17:17:44 -0800
-Subject: [PATCH 050/130] memcg: add mem_cgroup_replace_page_cache() to fix
+Subject: [PATCH 050/129] memcg: add mem_cgroup_replace_page_cache() to fix
  LRU issue
 
 commit ab936cbcd02072a34b60d268f94440fd5cf1970b upstream.
@@ -175,5 +175,5 @@ index b63f5f7..f538e9b 100644
  static struct page_cgroup *lookup_page_cgroup_used(struct page *page)
  {
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0051-x86-Fix-mmap-random-address-range.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0051-x86-Fix-mmap-random-address-range.patch
index c9d9568..fce1568 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0051-x86-Fix-mmap-random-address-range.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0051-x86-Fix-mmap-random-address-range.patch
@@ -1,7 +1,7 @@
-From 441972dde2baf1369a136fcaa27c06881d6ef013 Mon Sep 17 00:00:00 2001
+From 65ce587697fd360eea3dc06a3a1422d63a159fd1 Mon Sep 17 00:00:00 2001
 From: Ludwig Nussel <ludwig.nussel@suse.de>
 Date: Tue, 15 Nov 2011 14:46:46 -0800
-Subject: [PATCH 051/130] x86: Fix mmap random address range
+Subject: [PATCH 051/129] x86: Fix mmap random address range
 
 commit 9af0c7a6fa860698d080481f24a342ba74b68982 upstream.
 
@@ -43,5 +43,5 @@ index 4b5ba85..845df68 100644
  	return rnd << PAGE_SHIFT;
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0052-UBI-fix-nameless-volumes-handling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0052-UBI-fix-nameless-volumes-handling.patch
index c11f120..5d261cc 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0052-UBI-fix-nameless-volumes-handling.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0052-UBI-fix-nameless-volumes-handling.patch
@@ -1,7 +1,7 @@
-From e267c0b024968875114941870843e03aed277585 Mon Sep 17 00:00:00 2001
+From addbb632cd11d02b5386a9ebf040b0f89b6e2c84 Mon Sep 17 00:00:00 2001
 From: Richard Weinberger <richard@nod.at>
 Date: Fri, 13 Jan 2012 15:07:40 +0100
-Subject: [PATCH 052/130] UBI: fix nameless volumes handling
+Subject: [PATCH 052/129] UBI: fix nameless volumes handling
 
 commit 4a59c797a18917a5cf3ff7ade296b46134d91e6a upstream.
 
@@ -33,5 +33,5 @@ index 3320a50..ad76592 100644
  		err = -ENAMETOOLONG;
  		goto bad;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0053-UBI-fix-debugging-messages.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0053-UBI-fix-debugging-messages.patch
index cb230bc..83cd1b1 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0053-UBI-fix-debugging-messages.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0053-UBI-fix-debugging-messages.patch
@@ -1,7 +1,7 @@
-From a28e25b364a1ed96a8a19fbf5328bb750af80342 Mon Sep 17 00:00:00 2001
+From 96bd5436400b64fe57b0be756f9424b1e1d1e430 Mon Sep 17 00:00:00 2001
 From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
 Date: Tue, 10 Jan 2012 19:32:30 +0200
-Subject: [PATCH 053/130] UBI: fix debugging messages
+Subject: [PATCH 053/129] UBI: fix debugging messages
 
 commit 72f0d453d81d35087b1d3ad7c8285628c2be6e1d upstream.
 
@@ -38,5 +38,5 @@ index 64fbb00..ead2cd1 100644
  #define dbg_gen(fmt, ...) ubi_dbg_msg("gen", fmt, ##__VA_ARGS__)
  /* Messages from the eraseblock association sub-system */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0054-UBI-make-vid_hdr-non-static.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0054-UBI-make-vid_hdr-non-static.patch
index f64141e..2790744 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0054-UBI-make-vid_hdr-non-static.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0054-UBI-make-vid_hdr-non-static.patch
@@ -1,7 +1,7 @@
-From 1abfab7c1e994f5b4419387491666091141f9dbf Mon Sep 17 00:00:00 2001
+From f767fd8bc40accebf74bdee01946ed6452a626df Mon Sep 17 00:00:00 2001
 From: Richard Weinberger <rw@linutronix.de>
 Date: Thu, 22 Dec 2011 16:12:57 +0100
-Subject: [PATCH 054/130] UBI: make vid_hdr non-static
+Subject: [PATCH 054/129] UBI: make vid_hdr non-static
 
 commit 6bdccffe8c4268d02f71873102131fb6ed37ed9a upstream.
 
@@ -32,5 +32,5 @@ index 9ad18da..890754c 100644
  
  	ubi_msg("create volume table (copy #%d)", copy + 1);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0055-UBIFS-fix-debugging-messages.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0055-UBIFS-fix-debugging-messages.patch
index 6b5fbd6..9c45712 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0055-UBIFS-fix-debugging-messages.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0055-UBIFS-fix-debugging-messages.patch
@@ -1,7 +1,7 @@
-From 45ed8ba5d25772dde8ca17b50a3f5f64ceb9633e Mon Sep 17 00:00:00 2001
+From 6c07a86a7e8ac8231be518705c91ba4b32da1813 Mon Sep 17 00:00:00 2001
 From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
 Date: Tue, 10 Jan 2012 19:32:30 +0200
-Subject: [PATCH 055/130] UBIFS: fix debugging messages
+Subject: [PATCH 055/129] UBIFS: fix debugging messages
 
 commit d34315da9146253351146140ea4b277193ee5e5f upstream.
 
@@ -37,5 +37,5 @@ index 8d9c468..3f65829 100644
  #define dbg_gen(fmt, ...)   ubifs_dbg_msg("gen", fmt, ##__VA_ARGS__)
  /* Additional journal messages */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0056-UBIFS-make-debugging-messages-light-again.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0056-UBIFS-make-debugging-messages-light-again.patch
index 2f8c6fa..8ad2285 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0056-UBIFS-make-debugging-messages-light-again.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0056-UBIFS-make-debugging-messages-light-again.patch
@@ -1,7 +1,7 @@
-From a5db2eaeb04f9d74c9f7655cc87b4a41597a9878 Mon Sep 17 00:00:00 2001
+From 400fba6cfdfd168d550113f665c3b168cf9214cf Mon Sep 17 00:00:00 2001
 From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
 Date: Wed, 11 Jan 2012 15:13:27 +0200
-Subject: [PATCH 056/130] UBIFS: make debugging messages light again
+Subject: [PATCH 056/129] UBIFS: make debugging messages light again
 
 commit 1f5d78dc4823a85f112aaa2d0f17624f8c2a6c52 upstream.
 
@@ -53,5 +53,5 @@ index 3f65829..c9d2941 100644
  /* Just a debugging messages not related to any specific UBIFS subsystem */
  #define dbg_msg(fmt, ...)                                                     \
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0057-i2c-Fix-error-value-returned-by-several-bus-drivers.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0057-i2c-Fix-error-value-returned-by-several-bus-drivers.patch
index a369394..528fc93 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0057-i2c-Fix-error-value-returned-by-several-bus-drivers.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0057-i2c-Fix-error-value-returned-by-several-bus-drivers.patch
@@ -1,7 +1,7 @@
-From 87147adea587be2efe99757f6e8a87c585da9799 Mon Sep 17 00:00:00 2001
+From c9f51b32db94ab1e2dc628cc379f7cc7013801f5 Mon Sep 17 00:00:00 2001
 From: Jean Delvare <khali@linux-fr.org>
 Date: Thu, 12 Jan 2012 20:32:03 +0100
-Subject: [PATCH 057/130] i2c: Fix error value returned by several bus drivers
+Subject: [PATCH 057/129] i2c: Fix error value returned by several bus drivers
 
 commit 7c1f59c9d5caf3a84f35549b5d58f3c055a68da5 upstream.
 
@@ -193,5 +193,5 @@ index 0b012f1..58261d4 100644
  
  	/* Always return failure here.  This is to allow other drivers to bind
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0058-mmc-core-Fix-voltage-select-in-DDR-mode.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0058-mmc-core-Fix-voltage-select-in-DDR-mode.patch
index 7715694..db3a0d0 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0058-mmc-core-Fix-voltage-select-in-DDR-mode.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0058-mmc-core-Fix-voltage-select-in-DDR-mode.patch
@@ -1,7 +1,7 @@
-From 92ea9daee26a54bdae410e9361d5059506278450 Mon Sep 17 00:00:00 2001
+From 4272b6efe99cd197257777ddeaff1b2bf5428a13 Mon Sep 17 00:00:00 2001
 From: Girish K S <girish.shivananjappa@linaro.org>
 Date: Thu, 15 Dec 2011 17:27:42 +0530
-Subject: [PATCH 058/130] mmc: core: Fix voltage select in DDR mode
+Subject: [PATCH 058/129] mmc: core: Fix voltage select in DDR mode
 
 commit 913047e9e5787a90696533a9f109552b7694ecc9 upstream.
 
@@ -35,5 +35,5 @@ index d240427..fb7c27f 100644
  					MMC_SIGNAL_VOLTAGE_120, 0);
  				if (err)
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0059-mmc-sdhci-Fix-tuning-timer-incorrect-setting-when-su.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0059-mmc-sdhci-Fix-tuning-timer-incorrect-setting-when-su.patch
index 7b0bf1f..2d01133 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0059-mmc-sdhci-Fix-tuning-timer-incorrect-setting-when-su.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0059-mmc-sdhci-Fix-tuning-timer-incorrect-setting-when-su.patch
@@ -1,7 +1,7 @@
-From 4e6fa28c494b5482b5ec4516a53c7c0961350788 Mon Sep 17 00:00:00 2001
+From 5fda16f987c13e470fd4a4ae87dd3ed6b4f5be46 Mon Sep 17 00:00:00 2001
 From: Aaron Lu <aaron.lu@amd.com>
 Date: Wed, 28 Dec 2011 11:11:12 +0800
-Subject: [PATCH 059/130] mmc: sdhci: Fix tuning timer incorrect setting when
+Subject: [PATCH 059/129] mmc: sdhci: Fix tuning timer incorrect setting when
  suspending host
 
 commit c6ced0db08010ed75df221a2946c5228454b38d5 upstream.
@@ -35,5 +35,5 @@ index 19ed580..9279c1b 100644
  
  	ret = mmc_suspend_host(host->mmc);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0060-mmc-sd-Fix-SDR12-timing-regression.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0060-mmc-sd-Fix-SDR12-timing-regression.patch
index a861903..0760c62 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0060-mmc-sd-Fix-SDR12-timing-regression.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0060-mmc-sd-Fix-SDR12-timing-regression.patch
@@ -1,7 +1,7 @@
-From 0fdade2c65ed31702e3babf8dd5df4caafe44aa4 Mon Sep 17 00:00:00 2001
+From 54914e0a2c7c46dd863ba4ca2f530591c8cea37f Mon Sep 17 00:00:00 2001
 From: Alexander Elbs <alex@segv.de>
 Date: Tue, 3 Jan 2012 23:26:53 -0500
-Subject: [PATCH 060/130] mmc: sd: Fix SDR12 timing regression
+Subject: [PATCH 060/129] mmc: sd: Fix SDR12 timing regression
 
 commit dd8df17fe83483d7ea06ff229895e35a42071599 upstream.
 
@@ -34,5 +34,5 @@ index 9279c1b..6ce32a7 100644
  
  		ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0061-V4L-DVB-v4l2-ioctl-integer-overflow-in-video_usercop.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0061-V4L-DVB-v4l2-ioctl-integer-overflow-in-video_usercop.patch
index 78fece9..293dd52 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0061-V4L-DVB-v4l2-ioctl-integer-overflow-in-video_usercop.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0061-V4L-DVB-v4l2-ioctl-integer-overflow-in-video_usercop.patch
@@ -1,7 +1,7 @@
-From e0a32f416043d1d3dde8fccfacaaaf1dbaa07ea8 Mon Sep 17 00:00:00 2001
+From 51aa88e66716df0c5b5df5b8815cbf0b7b50ac35 Mon Sep 17 00:00:00 2001
 From: Dan Carpenter <dan.carpenter@oracle.com>
 Date: Thu, 5 Jan 2012 02:27:57 -0300
-Subject: [PATCH 061/130] V4L/DVB: v4l2-ioctl: integer overflow in
+Subject: [PATCH 061/129] V4L/DVB: v4l2-ioctl: integer overflow in
  video_usercopy()
 
 commit 6c06108be53ca5e94d8b0e93883d534dd9079646 upstream.
@@ -50,5 +50,5 @@ index 4b752d5..45a7698 100644
  #define V4L2_CID_USER_BASE 		V4L2_CID_BASE
  /*  IDs reserved for driver specific controls */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0062-Unused-iocbs-in-a-batch-should-not-be-accounted-as-a.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0062-Unused-iocbs-in-a-batch-should-not-be-accounted-as-a.patch
index 6c6b7a7..1ca3eae 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0062-Unused-iocbs-in-a-batch-should-not-be-accounted-as-a.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0062-Unused-iocbs-in-a-batch-should-not-be-accounted-as-a.patch
@@ -1,7 +1,7 @@
-From f7ba035a0f785d27f10fbd779056a8fb6b615b1c Mon Sep 17 00:00:00 2001
+From 0eeb9347d25c283bdbdd1a9e4d7d4881852887d1 Mon Sep 17 00:00:00 2001
 From: Gleb Natapov <gleb@redhat.com>
 Date: Sun, 8 Jan 2012 17:07:28 +0200
-Subject: [PATCH 062/130] Unused iocbs in a batch should not be accounted as
+Subject: [PATCH 062/129] Unused iocbs in a batch should not be accounted as
  active.
 
 commit 69e4747ee9727d660b88d7e1efe0f4afcb35db1b upstream.
@@ -67,5 +67,5 @@ index 78c514c..969beb0 100644
  	return i ? i : ret;
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0063-ftrace-Fix-unregister-ftrace_ops-accounting.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0063-ftrace-Fix-unregister-ftrace_ops-accounting.patch
index 849d07b..4a0cf7b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0063-ftrace-Fix-unregister-ftrace_ops-accounting.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0063-ftrace-Fix-unregister-ftrace_ops-accounting.patch
@@ -1,7 +1,7 @@
-From a440374ae75fd885b2b2d0c2fd932affa09ca0e9 Mon Sep 17 00:00:00 2001
+From 87a8f79b24eaa28f865547dc85b9c10b97a80686 Mon Sep 17 00:00:00 2001
 From: Jiri Olsa <jolsa@redhat.com>
 Date: Mon, 5 Dec 2011 18:22:48 +0100
-Subject: [PATCH 063/130] ftrace: Fix unregister ftrace_ops accounting
+Subject: [PATCH 063/129] ftrace: Fix unregister ftrace_ops accounting
 
 commit 30fb6aa74011dcf595f306ca2727254d708b786e upstream.
 
@@ -223,5 +223,5 @@ index b1e8943..25b4f4d 100644
  		mutex_unlock(&ftrace_lock);
  	}
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0064-kconfig-streamline-config.pl-Simplify-backslash-line.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0064-kconfig-streamline-config.pl-Simplify-backslash-line.patch
index a58d2e6..383b3f8 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0064-kconfig-streamline-config.pl-Simplify-backslash-line.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0064-kconfig-streamline-config.pl-Simplify-backslash-line.patch
@@ -1,7 +1,7 @@
-From d52eba613a8cd0e74e52248bff0ed579f3e801bc Mon Sep 17 00:00:00 2001
+From a3bca61c4e149d9e00102d41a0b81cae4fbca06f Mon Sep 17 00:00:00 2001
 From: Steven Rostedt <srostedt@redhat.com>
 Date: Fri, 13 Jan 2012 17:50:39 -0500
-Subject: [PATCH 064/130] kconfig/streamline-config.pl: Simplify backslash
+Subject: [PATCH 064/129] kconfig/streamline-config.pl: Simplify backslash
  line concatination
 
 commit d060d963e88f3e990cec2fe5214de49de9a49eca upstream.
@@ -64,5 +64,5 @@ index ec7afce..42ef5ea 100644
  		$obj =~ s/-/_/g;
  		if ($obj =~ /(.*)\.o$/) {
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0065-kconfig-streamline-config.pl-Fix-parsing-Makefile-wi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0065-kconfig-streamline-config.pl-Fix-parsing-Makefile-wi.patch
index 161c053..141754e 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0065-kconfig-streamline-config.pl-Fix-parsing-Makefile-wi.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0065-kconfig-streamline-config.pl-Fix-parsing-Makefile-wi.patch
@@ -1,7 +1,7 @@
-From 8b26929b86cded7fa66cc9074a4090e14ebb0c4b Mon Sep 17 00:00:00 2001
+From ac774661d11eb00497542857681b22c652d3d67c Mon Sep 17 00:00:00 2001
 From: Steven Rostedt <srostedt@redhat.com>
 Date: Fri, 13 Jan 2012 17:53:40 -0500
-Subject: [PATCH 065/130] kconfig/streamline-config.pl: Fix parsing Makefile
+Subject: [PATCH 065/129] kconfig/streamline-config.pl: Fix parsing Makefile
  with variables
 
 commit 364212fddaaa60c5a64f67a0f5624ad996ecc8a0 upstream.
@@ -39,7 +39,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  1 file changed, 29 insertions(+)
 
 diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
-index 42ef5ea..bccf07d 100644
+index 42ef5ea..bccf07dd 100644
 --- a/scripts/kconfig/streamline_config.pl
 +++ b/scripts/kconfig/streamline_config.pl
 @@ -250,10 +250,33 @@ if ($kconfig) {
@@ -94,5 +94,5 @@ index 42ef5ea..bccf07d 100644
  	if (defined($objs)) {
  	    foreach my $obj (split /\s+/,$objs) {
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0066-svcrpc-fix-double-free-on-shutdown-of-nfsd-after-cha.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0066-svcrpc-fix-double-free-on-shutdown-of-nfsd-after-cha.patch
index b029800..76168fb 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0066-svcrpc-fix-double-free-on-shutdown-of-nfsd-after-cha.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0066-svcrpc-fix-double-free-on-shutdown-of-nfsd-after-cha.patch
@@ -1,7 +1,7 @@
-From d3c9b9c72a382b9a4b8516e80896c278611b4f8a Mon Sep 17 00:00:00 2001
+From 184eee2d8b585d5e2a0ec3f2c50f682e91ef769a Mon Sep 17 00:00:00 2001
 From: "J. Bruce Fields" <bfields@redhat.com>
 Date: Thu, 22 Dec 2011 18:22:49 -0700
-Subject: [PATCH 066/130] svcrpc: fix double-free on shutdown of nfsd after
+Subject: [PATCH 066/129] svcrpc: fix double-free on shutdown of nfsd after
  changing pool mode
 
 commit 61c8504c428edcebf23b97775a129c5b393a302b upstream.
@@ -56,5 +56,5 @@ index 6e03888..5443ffd 100644
  	}
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0067-svcrpc-destroy-server-sockets-all-at-once.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0067-svcrpc-destroy-server-sockets-all-at-once.patch
index ab58b1d..23264ca 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0067-svcrpc-destroy-server-sockets-all-at-once.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0067-svcrpc-destroy-server-sockets-all-at-once.patch
@@ -1,7 +1,7 @@
-From d6eeab4595a510bd2e02a2e3055e02e9a70229de Mon Sep 17 00:00:00 2001
+From 7bbbb974406d83275664903d43b9e9bf4b99c131 Mon Sep 17 00:00:00 2001
 From: "J. Bruce Fields" <bfields@redhat.com>
 Date: Tue, 29 Nov 2011 11:35:35 -0500
-Subject: [PATCH 067/130] svcrpc: destroy server sockets all at once
+Subject: [PATCH 067/129] svcrpc: destroy server sockets all at once
 
 commit 2fefb8a09e7ed251ae8996e0c69066e74c5aa560 upstream.
 
@@ -81,5 +81,5 @@ index 447cd0e..dcdc8df 100644
   * Handle defer and revisit of requests
   */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0068-svcrpc-avoid-memory-corruption-on-pool-shutdown.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0068-svcrpc-avoid-memory-corruption-on-pool-shutdown.patch
index f66761f..494d909 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0068-svcrpc-avoid-memory-corruption-on-pool-shutdown.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0068-svcrpc-avoid-memory-corruption-on-pool-shutdown.patch
@@ -1,7 +1,7 @@
-From a8f0e6b90652d17d0c024d07c2b2bebe5193fc38 Mon Sep 17 00:00:00 2001
+From 5faa65a4101dc292e7d43c525e87f4f2acae40e3 Mon Sep 17 00:00:00 2001
 From: "J. Bruce Fields" <bfields@redhat.com>
 Date: Tue, 29 Nov 2011 17:00:26 -0500
-Subject: [PATCH 068/130] svcrpc: avoid memory-corruption on pool shutdown
+Subject: [PATCH 068/129] svcrpc: avoid memory-corruption on pool shutdown
 
 commit b4f36f88b3ee7cf26bf0be84e6c7fc15f84dcb71 upstream.
 
@@ -152,5 +152,5 @@ index dcdc8df..9ed2cd0 100644
  
  /*
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0069-nfsd4-fix-lockowner-matching.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0069-nfsd4-fix-lockowner-matching.patch
index 47afe62..06f300b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0069-nfsd4-fix-lockowner-matching.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0069-nfsd4-fix-lockowner-matching.patch
@@ -1,7 +1,7 @@
-From f106681ab48d6ab554c724d829c7440ba7b02385 Mon Sep 17 00:00:00 2001
+From 041400912607efd62cf9aa6ad4e5ad6baf957f1a Mon Sep 17 00:00:00 2001
 From: "J. Bruce Fields" <bfields@redhat.com>
 Date: Mon, 7 Nov 2011 16:37:57 -0500
-Subject: [PATCH 069/130] nfsd4: fix lockowner matching
+Subject: [PATCH 069/129] nfsd4: fix lockowner matching
 
 commit b93d87c19821ba7d3ee11557403d782e541071ad upstream.
 
@@ -55,5 +55,5 @@ index 47e94e3..5abced7 100644
  	return NULL;
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0070-nfsd-Fix-oops-when-parsing-a-0-length-export.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0070-nfsd-Fix-oops-when-parsing-a-0-length-export.patch
index 7e39e91..42f3853 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0070-nfsd-Fix-oops-when-parsing-a-0-length-export.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0070-nfsd-Fix-oops-when-parsing-a-0-length-export.patch
@@ -1,7 +1,7 @@
-From 5e9cbf662652df0e31bfe68d1e490b59946903aa Mon Sep 17 00:00:00 2001
+From 57a7686869f3ca7dfb8694583c88b5dfd510e4f6 Mon Sep 17 00:00:00 2001
 From: Sasha Levin <levinsasha928@gmail.com>
 Date: Fri, 18 Nov 2011 12:14:49 +0200
-Subject: [PATCH 070/130] nfsd: Fix oops when parsing a 0 length export
+Subject: [PATCH 070/129] nfsd: Fix oops when parsing a 0 length export
 
 commit b2ea70afade7080360ac55c4e64ff7a5fafdb67b upstream.
 
@@ -78,5 +78,5 @@ index 62f3b90..5f312ab 100644
  	mesg[mlen-1] = 0;
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0071-fsnotify-don-t-BUG-in-fsnotify_destroy_mark.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0071-fsnotify-don-t-BUG-in-fsnotify_destroy_mark.patch
index 77dc981..b320467 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0071-fsnotify-don-t-BUG-in-fsnotify_destroy_mark.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0071-fsnotify-don-t-BUG-in-fsnotify_destroy_mark.patch
@@ -1,7 +1,7 @@
-From 02b345f49fe190f76c4191d6f189ce6ba1c86a1f Mon Sep 17 00:00:00 2001
+From 25778654573b3763a5f34e694b17ec9ff43fb3bb Mon Sep 17 00:00:00 2001
 From: Miklos Szeredi <mszeredi@suse.cz>
 Date: Thu, 12 Jan 2012 17:59:46 +0100
-Subject: [PATCH 071/130] fsnotify: don't BUG in fsnotify_destroy_mark()
+Subject: [PATCH 071/129] fsnotify: don't BUG in fsnotify_destroy_mark()
 
 commit fed474857efbed79cd390d0aee224231ca718f63 upstream.
 
@@ -57,5 +57,5 @@ index e14587d..f104d56 100644
  	 * this mark was simultaneously being freed by inode.  If that's the
  	 * case, we finish freeing the group here.
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0072-x86-UV-Update-Boot-messages-for-SGI-UV2-platform.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0072-x86-UV-Update-Boot-messages-for-SGI-UV2-platform.patch
index 80e9a73..fc5632b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0072-x86-UV-Update-Boot-messages-for-SGI-UV2-platform.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0072-x86-UV-Update-Boot-messages-for-SGI-UV2-platform.patch
@@ -1,7 +1,7 @@
-From bf48d4506f72e6b2d8d6bd950aa5d32349f67d1d Mon Sep 17 00:00:00 2001
+From 76df9b14b1edf95a3f1194c0b08547e50931fefd Mon Sep 17 00:00:00 2001
 From: Jack Steiner <steiner@sgi.com>
 Date: Fri, 6 Jan 2012 13:19:00 -0600
-Subject: [PATCH 072/130] x86, UV: Update Boot messages for SGI UV2 platform
+Subject: [PATCH 072/129] x86, UV: Update Boot messages for SGI UV2 platform
 
 commit da517a08ac5913cd80ce3507cddd00f2a091b13c upstream.
 
@@ -40,5 +40,5 @@ index 9d59bba..79b05b8 100644
  	bytes = sizeof(struct uv_blade_info) * uv_num_possible_blades();
  	uv_blade_info = kzalloc(bytes, GFP_KERNEL);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0073-recordmcount-Fix-handling-of-elf64-big-endian-object.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0073-recordmcount-Fix-handling-of-elf64-big-endian-object.patch
index f919b97..06552c0 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0073-recordmcount-Fix-handling-of-elf64-big-endian-object.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0073-recordmcount-Fix-handling-of-elf64-big-endian-object.patch
@@ -1,7 +1,7 @@
-From 44ee897aa3824a1e070fc8b307ece4d3e03fb1c6 Mon Sep 17 00:00:00 2001
+From 4b493a169e4e0955d63015a30910a15d4d2cefed Mon Sep 17 00:00:00 2001
 From: David Daney <david.daney@cavium.com>
 Date: Mon, 19 Dec 2011 17:42:42 -0800
-Subject: [PATCH 073/130] recordmcount: Fix handling of elf64 big-endian
+Subject: [PATCH 073/129] recordmcount: Fix handling of elf64 big-endian
  objects.
 
 commit 2e885057b7f75035f0b85e02f737891482815a81 upstream.
@@ -42,5 +42,5 @@ index f40a6af6..54e35c1 100644
  	return txtname;
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0074-uvcvideo-Fix-integer-overflow-in-uvc_ioctl_ctrl_map.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0074-uvcvideo-Fix-integer-overflow-in-uvc_ioctl_ctrl_map.patch
index 6692b99..d9a8f19 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0074-uvcvideo-Fix-integer-overflow-in-uvc_ioctl_ctrl_map.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0074-uvcvideo-Fix-integer-overflow-in-uvc_ioctl_ctrl_map.patch
@@ -1,7 +1,7 @@
-From 237564961047194a9d952292197ccc794264cab7 Mon Sep 17 00:00:00 2001
+From ea50d13fefca15eb7d541f1830b2361943090063 Mon Sep 17 00:00:00 2001
 From: Haogang Chen <haogangchen@gmail.com>
 Date: Tue, 29 Nov 2011 18:32:25 -0300
-Subject: [PATCH 074/130] uvcvideo: Fix integer overflow in
+Subject: [PATCH 074/129] uvcvideo: Fix integer overflow in
  uvc_ioctl_ctrl_map()
 
 commit 806e23e95f94a27ee445022d724060b9b45cb64a upstream.
@@ -58,5 +58,5 @@ index 4c1392e..bc446ba 100644
  /* Devices quirks */
  #define UVC_QUIRK_STATUS_INTERVAL	0x00000001
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0075-dcache-use-a-dispose-list-in-select_parent.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0075-dcache-use-a-dispose-list-in-select_parent.patch
index 4905db2..9ab9f3d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0075-dcache-use-a-dispose-list-in-select_parent.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0075-dcache-use-a-dispose-list-in-select_parent.patch
@@ -1,7 +1,7 @@
-From 396e27ebad49960c3fc3871b5d3204433c68228a Mon Sep 17 00:00:00 2001
+From 4289e10c1a424c39e50bb4c44447da025fdf37b9 Mon Sep 17 00:00:00 2001
 From: Dave Chinner <david@fromorbit.com>
 Date: Tue, 23 Aug 2011 18:56:24 +1000
-Subject: [PATCH 075/130] dcache: use a dispose list in select_parent
+Subject: [PATCH 075/129] dcache: use a dispose list in select_parent
 
 commit b48f03b319ba78f3abf9a7044d1f436d8d90f4f9 upstream.
 
@@ -168,5 +168,5 @@ index 89509b5..108116e 100644
  EXPORT_SYMBOL(shrink_dcache_parent);
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0076-fix-shrink_dcache_parent-livelock.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0076-fix-shrink_dcache_parent-livelock.patch
index 1f4dc36..7d33d3c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0076-fix-shrink_dcache_parent-livelock.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0076-fix-shrink_dcache_parent-livelock.patch
@@ -1,7 +1,7 @@
-From 6eab425273195281f84409f2d6dcc004b528d42c Mon Sep 17 00:00:00 2001
+From 72a350429f61098d46984c13e8da293ec7a8ffe4 Mon Sep 17 00:00:00 2001
 From: Miklos Szeredi <miklos@szeredi.hu>
 Date: Tue, 10 Jan 2012 18:22:25 +0100
-Subject: [PATCH 076/130] fix shrink_dcache_parent() livelock
+Subject: [PATCH 076/129] fix shrink_dcache_parent() livelock
 
 commit eaf5f9073533cde21c7121c136f1c3f072d9cf59 upstream.
 
@@ -126,5 +126,5 @@ index ed9f74f..4eb8c80 100644
  #define DCACHE_NFSFS_RENAMED	0x1000
       /* this dentry has been "silly renamed" and has to be deleted on the last
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch
index 03f3cfd..50c770c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch
@@ -1,7 +1,7 @@
-From d09a2f22bfced52dcccd53ccc62d2cd5d9f194b7 Mon Sep 17 00:00:00 2001
+From ff2123e28998f18ebfddf17f1babbc0db77e9857 Mon Sep 17 00:00:00 2001
 From: Peng Tao <bergwolf@gmail.com>
 Date: Thu, 12 Jan 2012 23:18:41 +0800
-Subject: [PATCH 077/130] pnfsblock: acquire im_lock in _preload_range
+Subject: [PATCH 077/129] pnfsblock: acquire im_lock in _preload_range
 
 commit 39e567ae36fe03c2b446e1b83ee3d39bea08f90b upstream.
 
@@ -60,5 +60,5 @@ index 19fa7b0..c69682a 100644
  
  	spin_lock(&marks->im_lock);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch
index 5896cb3..bc8b40d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch
@@ -1,7 +1,7 @@
-From 0a4609957e5bbe4572cf9ace9e5011281295f296 Mon Sep 17 00:00:00 2001
+From c483f16efb181ee2384aa9d5672ebebfc714ab1d Mon Sep 17 00:00:00 2001
 From: Peng Tao <bergwolf@gmail.com>
 Date: Thu, 12 Jan 2012 23:18:47 +0800
-Subject: [PATCH 078/130] pnfsblock: don't spinlock when freeing block_dev
+Subject: [PATCH 078/129] pnfsblock: don't spinlock when freeing block_dev
 
 commit 93a3844ee0f843b05a1df4b52e1a19ff26b98d24 upstream.
 
@@ -42,5 +42,5 @@ index 281ae95..ce8129d 100644
  	}
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch
index 7adc892..f003ff0 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch
@@ -1,7 +1,7 @@
-From c4fcaffd613b46fc4257023138c60d8f164bf584 Mon Sep 17 00:00:00 2001
+From a9de14f6624613210b273a24046142495f745038 Mon Sep 17 00:00:00 2001
 From: Peng Tao <bergwolf@gmail.com>
 Date: Thu, 12 Jan 2012 23:18:48 +0800
-Subject: [PATCH 079/130] pnfsblock: limit bio page count
+Subject: [PATCH 079/129] pnfsblock: limit bio page count
 
 commit 74a6eeb44ca6174d9cc93b9b8b4d58211c57bc80 upstream.
 
@@ -47,5 +47,5 @@ index ce8129d..3db6b82 100644
  }
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0080-mac80211-revert-on-channel-work-optimisations.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0080-mac80211-revert-on-channel-work-optimisations.patch
index 7437cf4..77b753d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0080-mac80211-revert-on-channel-work-optimisations.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0080-mac80211-revert-on-channel-work-optimisations.patch
@@ -1,7 +1,7 @@
-From f3c55c9f0c6182e6a455ae406406e280ac34544c Mon Sep 17 00:00:00 2001
+From 785fae0af79dd35416a44469930c2cbe87ff2c48 Mon Sep 17 00:00:00 2001
 From: Johannes Berg <johannes.berg@intel.com>
 Date: Tue, 29 Nov 2011 10:20:02 +0100
-Subject: [PATCH 080/130] mac80211: revert on-channel work optimisations
+Subject: [PATCH 080/129] mac80211: revert on-channel work optimisations
 
 commit e76aadc572288a158ae18ae1c10fe395c7bca066 upstream.
 
@@ -631,5 +631,5 @@ index 6c53b6d..99165ef 100644
  		/* give connection some time to breathe */
  		run_again(local, jiffies + HZ/2);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0081-HID-hid-multitouch-add-another-eGalax-id.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0081-HID-hid-multitouch-add-another-eGalax-id.patch
index a03602e..5db3fea 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0081-HID-hid-multitouch-add-another-eGalax-id.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0081-HID-hid-multitouch-add-another-eGalax-id.patch
@@ -1,7 +1,7 @@
-From 461b534b6a695034c7554b2bdf163b2ecb73b80d Mon Sep 17 00:00:00 2001
+From 15efaf9be89966a57b4d147511de686976e4a4eb Mon Sep 17 00:00:00 2001
 From: Chris Bagwell <chris@cnpbagwell.com>
 Date: Wed, 23 Nov 2011 10:54:27 +0100
-Subject: [PATCH 081/130] HID: hid-multitouch - add another eGalax id
+Subject: [PATCH 081/129] HID: hid-multitouch - add another eGalax id
 
 commit 1fd8f047490dd0ec4e4db710fcbc1bd4798d944c upstream.
 
@@ -56,5 +56,5 @@ index f1c909f..a59d939 100644
  	/* Elo TouchSystems IntelliTouch Plus panel */
  	{ .driver_data = MT_CLS_DUAL_NSMU_CONTACTID,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0082-HID-multitouch-cleanup-with-eGalax-PID-definitions.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0082-HID-multitouch-cleanup-with-eGalax-PID-definitions.patch
index 1b523b8..807223b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0082-HID-multitouch-cleanup-with-eGalax-PID-definitions.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0082-HID-multitouch-cleanup-with-eGalax-PID-definitions.patch
@@ -1,7 +1,7 @@
-From c5c78207f8bd4e2613d6c132d92d53e7de9f2cba Mon Sep 17 00:00:00 2001
+From 13e475d4826aa0be579632fd2a7473aee213e82b Mon Sep 17 00:00:00 2001
 From: Benjamin Tissoires <benjamin.tissoires@enac.fr>
 Date: Wed, 23 Nov 2011 10:54:31 +0100
-Subject: [PATCH 082/130] HID: multitouch: cleanup with eGalax PID definitions
+Subject: [PATCH 082/129] HID: multitouch: cleanup with eGalax PID definitions
 
 commit e36f690b37945e0a9bb1554e1546eeec93f7d1f6 upstream.
 
@@ -108,5 +108,5 @@ index a59d939..815bd22 100644
  	/* Elo TouchSystems IntelliTouch Plus panel */
  	{ .driver_data = MT_CLS_DUAL_NSMU_CONTACTID,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0083-HID-multitouch-Add-egalax-ID-for-Acer-Iconia-W500.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0083-HID-multitouch-Add-egalax-ID-for-Acer-Iconia-W500.patch
index 7479c06..f038705 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0083-HID-multitouch-Add-egalax-ID-for-Acer-Iconia-W500.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0083-HID-multitouch-Add-egalax-ID-for-Acer-Iconia-W500.patch
@@ -1,7 +1,7 @@
-From d920b5798c0d85998e5dae9304bef77c59320f12 Mon Sep 17 00:00:00 2001
+From d92a1f3e6dbdf628dec0f2a37f3920f89ef304fa Mon Sep 17 00:00:00 2001
 From: Marek Vasut <marek.vasut@gmail.com>
 Date: Wed, 23 Nov 2011 10:54:32 +0100
-Subject: [PATCH 083/130] HID: multitouch: Add egalax ID for Acer Iconia W500
+Subject: [PATCH 083/129] HID: multitouch: Add egalax ID for Acer Iconia W500
 
 commit bb9ff21072043634f147c05ac65dbf8185d4af6d upstream.
 
@@ -58,5 +58,5 @@ index 815bd22..c77d495 100644
  
  	/* Elo TouchSystems IntelliTouch Plus panel */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0084-HID-multitouch-add-support-for-the-MSI-Windpad-110W.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0084-HID-multitouch-add-support-for-the-MSI-Windpad-110W.patch
index 8494df7..94eb6c3 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0084-HID-multitouch-add-support-for-the-MSI-Windpad-110W.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0084-HID-multitouch-add-support-for-the-MSI-Windpad-110W.patch
@@ -1,7 +1,7 @@
-From 9bd4b771e9f598f5cebad5146585eb30ececf118 Mon Sep 17 00:00:00 2001
+From a68c39aa3ae77996cb2f2cefe21ad1e62e1767a5 Mon Sep 17 00:00:00 2001
 From: Benjamin Tissoires <benjamin.tissoires@enac.fr>
 Date: Wed, 23 Nov 2011 10:54:33 +0100
-Subject: [PATCH 084/130] HID: multitouch: add support for the MSI Windpad
+Subject: [PATCH 084/129] HID: multitouch: add support for the MSI Windpad
  110W
 
 commit 66f06127f34ad6e8a1b24a2c03144b694d19f99f upstream.
@@ -45,5 +45,5 @@ index c77d495..6f6b1d9 100644
  	{ .driver_data = MT_CLS_EGALAX,
  		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0085-HID-hid-multitouch-add-support-for-new-Hanvon-panels.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0085-HID-hid-multitouch-add-support-for-new-Hanvon-panels.patch
index ea172f6..f04d3ee 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0085-HID-hid-multitouch-add-support-for-new-Hanvon-panels.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0085-HID-hid-multitouch-add-support-for-new-Hanvon-panels.patch
@@ -1,7 +1,7 @@
-From 76fe9c37d75b5754a02958dfaa415b24e88e79f6 Mon Sep 17 00:00:00 2001
+From 4ed2fc990faee86390129e45efc3a3538bbac92b Mon Sep 17 00:00:00 2001
 From: Benjamin Tissoires <benjamin.tissoires@enac.fr>
 Date: Tue, 29 Nov 2011 13:13:12 +0100
-Subject: [PATCH 085/130] HID: hid-multitouch: add support for new Hanvon
+Subject: [PATCH 085/129] HID: hid-multitouch: add support for new Hanvon
  panels
 
 commit 545803651da8dde248eeb8ce3ed1e547e9e4ac0a upstream.
@@ -59,5 +59,5 @@ index 6f6b1d9..ea20c8e 100644
  	{ .driver_data = MT_CLS_SERIAL,
  		HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0086-HID-multitouch-add-support-of-Atmel-multitouch-panel.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0086-HID-multitouch-add-support-of-Atmel-multitouch-panel.patch
index a461325..4298a32 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0086-HID-multitouch-add-support-of-Atmel-multitouch-panel.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0086-HID-multitouch-add-support-of-Atmel-multitouch-panel.patch
@@ -1,7 +1,7 @@
-From 865db49262c7496029b756c88a64a274d22dcf08 Mon Sep 17 00:00:00 2001
+From e554f29a63f8eae08e42cb59b1bc715fbf91b340 Mon Sep 17 00:00:00 2001
 From: Benjamin Tissoires <benjamin.tissoires@gmail.com>
 Date: Fri, 23 Dec 2011 15:40:59 +0100
-Subject: [PATCH 086/130] HID: multitouch: add support of Atmel multitouch
+Subject: [PATCH 086/129] HID: multitouch: add support of Atmel multitouch
  panels
 
 commit b105712469d957cf1ab223c1ea72b7ba88edb926 upstream.
@@ -59,5 +59,5 @@ index ea20c8e..7f83024 100644
  	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
  		HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0087-HID-multitouch-add-support-for-3M-32.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0087-HID-multitouch-add-support-for-3M-32.patch
index d0701b6..f3afca5 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0087-HID-multitouch-add-support-for-3M-32.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0087-HID-multitouch-add-support-for-3M-32.patch
@@ -1,7 +1,7 @@
-From a3e4bd3ab18fd8f60692869405d89513fa7caecc Mon Sep 17 00:00:00 2001
+From 40fd7506c85fcb799dedb54d4bce3118a56078cc Mon Sep 17 00:00:00 2001
 From: Benjamin Tissoires <benjamin.tissoires@gmail.com>
 Date: Fri, 23 Dec 2011 15:41:00 +0100
-Subject: [PATCH 087/130] HID: multitouch: add support for 3M 32"
+Subject: [PATCH 087/129] HID: multitouch: add support for 3M 32"
 
 commit c4fad877cd0efb51d8180ae2eaa791c99c92051c upstream.
 
@@ -41,5 +41,5 @@ index 7f83024..4a63dee 100644
  	/* ActionStar panels */
  	{ .driver_data = MT_CLS_DEFAULT,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0088-HID-hid-multitouch-add-support-9-new-Xiroku-devices.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0088-HID-hid-multitouch-add-support-9-new-Xiroku-devices.patch
index 666029c..8d2bfef 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0088-HID-hid-multitouch-add-support-9-new-Xiroku-devices.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0088-HID-hid-multitouch-add-support-9-new-Xiroku-devices.patch
@@ -1,7 +1,7 @@
-From 8b47318c07c10fa562d0e62a9d1b5d89d5338aa1 Mon Sep 17 00:00:00 2001
+From 7d63e2bd6f004a4c99c40f9768efe4fa3bef6d28 Mon Sep 17 00:00:00 2001
 From: Masatoshi Hoshikawa <hoshikawa@xiroku.com>
 Date: Thu, 5 Jan 2012 11:53:46 +0900
-Subject: [PATCH 088/130] HID: hid-multitouch: add support 9 new Xiroku
+Subject: [PATCH 088/129] HID: hid-multitouch: add support 9 new Xiroku
  devices
 
 commit 11576c6114c3b6505aea2e0c988bedb856a0e20c upstream.
@@ -113,5 +113,5 @@ index 4a63dee..995fc4c 100644
  };
  MODULE_DEVICE_TABLE(hid, mt_devices);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0089-fix-cputime-overflow-in-uptime_proc_show.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0089-fix-cputime-overflow-in-uptime_proc_show.patch
index 1bd7ad2..94a3da3 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0089-fix-cputime-overflow-in-uptime_proc_show.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0089-fix-cputime-overflow-in-uptime_proc_show.patch
@@ -1,7 +1,7 @@
-From 5f8cae871c99479c79aa493512b31ad830e8eaaa Mon Sep 17 00:00:00 2001
+From 36934c4efd11c4f65dd956b2a6649d99ccf5bd86 Mon Sep 17 00:00:00 2001
 From: Martin Schwidefsky <schwidefsky@de.ibm.com>
 Date: Thu, 15 Dec 2011 14:56:10 +0100
-Subject: [PATCH 089/130] fix cputime overflow in uptime_proc_show
+Subject: [PATCH 089/129] fix cputime overflow in uptime_proc_show
 
 commit c3e0ef9a298e028a82ada28101ccd5cf64d209ee upstream.
 
@@ -45,5 +45,5 @@ index 766b1d4..29166ec 100644
  			(unsigned long) uptime.tv_sec,
  			(uptime.tv_nsec / (NSEC_PER_SEC / 100)),
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0090-block-add-and-use-scsi_blk_cmd_ioctl.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0090-block-add-and-use-scsi_blk_cmd_ioctl.patch
index 02ee936..e9a2e70 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0090-block-add-and-use-scsi_blk_cmd_ioctl.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0090-block-add-and-use-scsi_blk_cmd_ioctl.patch
@@ -1,7 +1,7 @@
-From fd9b7416ae26e584935f0a1fdf215fb318c54b07 Mon Sep 17 00:00:00 2001
+From 151de2f79ddb7f437ada87d5f204be82db004f9d Mon Sep 17 00:00:00 2001
 From: Paolo Bonzini <pbonzini@redhat.com>
 Date: Thu, 12 Jan 2012 16:01:27 +0100
-Subject: [PATCH 090/130] block: add and use scsi_blk_cmd_ioctl
+Subject: [PATCH 090/129] block: add and use scsi_blk_cmd_ioctl
 
 commit 577ebb374c78314ac4617242f509e2f5e7156649 upstream.
 
@@ -162,5 +162,5 @@ index 94acd81..ca7b869 100644
  			  unsigned int, void __user *);
  extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0091-block-fail-SCSI-passthrough-ioctls-on-partition-devi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0091-block-fail-SCSI-passthrough-ioctls-on-partition-devi.patch
index 96a4a59..1fa4e50 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0091-block-fail-SCSI-passthrough-ioctls-on-partition-devi.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0091-block-fail-SCSI-passthrough-ioctls-on-partition-devi.patch
@@ -1,7 +1,7 @@
-From 5c9da4628ea28104cb0ec862b8564e413e7615db Mon Sep 17 00:00:00 2001
+From 8dbedb00985bf3ed9848b179a45bb399a733d311 Mon Sep 17 00:00:00 2001
 From: Paolo Bonzini <pbonzini@redhat.com>
 Date: Thu, 12 Jan 2012 16:01:28 +0100
-Subject: [PATCH 091/130] block: fail SCSI passthrough ioctls on partition
+Subject: [PATCH 091/129] block: fail SCSI passthrough ioctls on partition
  devices
 
 commit 0bfc96cb77224736dfa35c3c555d37b3646ef35e upstream.
@@ -162,5 +162,5 @@ index ca7b869..0ed1eb0 100644
  			      unsigned int, void __user *);
  extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0092-dm-do-not-forward-ioctls-from-logical-volumes-to-the.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0092-dm-do-not-forward-ioctls-from-logical-volumes-to-the.patch
index de870c2..044086f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0092-dm-do-not-forward-ioctls-from-logical-volumes-to-the.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0092-dm-do-not-forward-ioctls-from-logical-volumes-to-the.patch
@@ -1,7 +1,7 @@
-From 8b2ef9bc1880287a083605e630413a47e3a2f436 Mon Sep 17 00:00:00 2001
+From 3d35ea93b3f19f86a464814e7b59464ec3832e9c Mon Sep 17 00:00:00 2001
 From: Paolo Bonzini <pbonzini@redhat.com>
 Date: Thu, 12 Jan 2012 16:01:29 +0100
-Subject: [PATCH 092/130] dm: do not forward ioctls from logical volumes to
+Subject: [PATCH 092/129] dm: do not forward ioctls from logical volumes to
  the underlying device
 
 commit ec8013beddd717d1740cfefb1a9b900deef85462 upstream.
@@ -86,5 +86,5 @@ index 5e0090e..801d92d 100644
  }
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0093-proc-clean-up-and-fix-proc-pid-mem-handling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0093-proc-clean-up-and-fix-proc-pid-mem-handling.patch
index 534e2e0..5c2c566 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0093-proc-clean-up-and-fix-proc-pid-mem-handling.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0093-proc-clean-up-and-fix-proc-pid-mem-handling.patch
@@ -1,7 +1,7 @@
-From 7d09634d53fa1f102121d718ca837ebae0fdce18 Mon Sep 17 00:00:00 2001
+From b1eff256d4110a894a3a70a224d3581136645ada Mon Sep 17 00:00:00 2001
 From: Linus Torvalds <torvalds@linux-foundation.org>
 Date: Tue, 17 Jan 2012 15:21:19 -0800
-Subject: [PATCH 093/130] proc: clean up and fix /proc/<pid>/mem handling
+Subject: [PATCH 093/129] proc: clean up and fix /proc/<pid>/mem handling
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
@@ -267,5 +267,5 @@ index 851ba3d..1fc1dca 100644
  
  static ssize_t environ_read(struct file *file, char __user *buf,
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0094-ALSA-HDA-Use-LPIB-position-fix-for-Macbook-Pro-7-1.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0094-ALSA-HDA-Use-LPIB-position-fix-for-Macbook-Pro-7-1.patch
index a22e6a5..92722cf 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0094-ALSA-HDA-Use-LPIB-position-fix-for-Macbook-Pro-7-1.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0094-ALSA-HDA-Use-LPIB-position-fix-for-Macbook-Pro-7-1.patch
@@ -1,7 +1,7 @@
-From 718c5470bcef49ad7edc9674a4e96a222a2f4512 Mon Sep 17 00:00:00 2001
+From a8cd5ec584f74044ccca71a50312fac4e69f4d64 Mon Sep 17 00:00:00 2001
 From: David Henningsson <david.henningsson@canonical.com>
 Date: Thu, 12 Jan 2012 16:31:14 +0100
-Subject: [PATCH 094/130] ALSA: HDA: Use LPIB position fix for Macbook Pro 7,1
+Subject: [PATCH 094/129] ALSA: HDA: Use LPIB position fix for Macbook Pro 7,1
 
 commit b01de4fb40137fbda7530550ff0cd37171dafb0c upstream.
 
@@ -31,5 +31,5 @@ index c2f79e6..5b2b75b 100644
  	SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
  	SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0095-ALSA-virtuoso-Xonar-DS-fix-polarity-of-front-output.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0095-ALSA-virtuoso-Xonar-DS-fix-polarity-of-front-output.patch
index 670db94..5e1651f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0095-ALSA-virtuoso-Xonar-DS-fix-polarity-of-front-output.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0095-ALSA-virtuoso-Xonar-DS-fix-polarity-of-front-output.patch
@@ -1,7 +1,7 @@
-From 569face0953213dc1e6f92c6371d3246effc9404 Mon Sep 17 00:00:00 2001
+From 142a4939e76aa02d8e2d8338a63dabf59bc83f1b Mon Sep 17 00:00:00 2001
 From: Clemens Ladisch <clemens@ladisch.de>
 Date: Sat, 14 Jan 2012 16:42:24 +0100
-Subject: [PATCH 095/130] ALSA: virtuoso: Xonar DS: fix polarity of front
+Subject: [PATCH 095/129] ALSA: virtuoso: Xonar DS: fix polarity of front
  output
 
 commit f0e48b6bd4e407459715240cd241ddb6b89bdf81 upstream.
@@ -33,5 +33,5 @@ index 42d1ab1..915546a 100644
  		     WM8776_PL_LEFT_LEFT | WM8776_PL_RIGHT_RIGHT);
  	wm8776_write(chip, WM8776_DACMUTE, chip->dac_mute ? WM8776_DMUTE : 0);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0096-ALSA-HDA-Fix-internal-microphone-on-Dell-Studio-16-X.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0096-ALSA-HDA-Fix-internal-microphone-on-Dell-Studio-16-X.patch
index 82d8935..6bad4a4 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0096-ALSA-HDA-Fix-internal-microphone-on-Dell-Studio-16-X.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0096-ALSA-HDA-Fix-internal-microphone-on-Dell-Studio-16-X.patch
@@ -1,7 +1,7 @@
-From d790354ebeffb41bfe1fb34572c258a7a5fdb475 Mon Sep 17 00:00:00 2001
+From c46905cc61a1b5ff0500d15d79ba8110283e6c58 Mon Sep 17 00:00:00 2001
 From: David Henningsson <david.henningsson@canonical.com>
 Date: Mon, 16 Jan 2012 10:52:20 +0100
-Subject: [PATCH 096/130] ALSA: HDA: Fix internal microphone on Dell Studio 16
+Subject: [PATCH 096/129] ALSA: HDA: Fix internal microphone on Dell Studio 16
  XPS 1645
 
 commit ffe535edb9a9c5b4d5fe03dfa3d89a1495580f1b upstream.
@@ -32,5 +32,5 @@ index a87b260..f3c73a9 100644
  				"Dell Studio 1558", STAC_DELL_M6_DMIC),
  	{} /* terminator */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0097-TOMOYO-Accept-000-as-a-valid-character.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0097-TOMOYO-Accept-000-as-a-valid-character.patch
index fba28aa..3393f76 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0097-TOMOYO-Accept-000-as-a-valid-character.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0097-TOMOYO-Accept-000-as-a-valid-character.patch
@@ -1,7 +1,7 @@
-From b85512a847012899a22246572d01a7d223bd3222 Mon Sep 17 00:00:00 2001
+From df8b89ac669c66d219a762da1ba79151acce2bf1 Mon Sep 17 00:00:00 2001
 From: Tetsuo Handa <from-tomoyo-users-en@I-love.SAKURA.ne.jp>
 Date: Sun, 15 Jan 2012 11:05:59 +0900
-Subject: [PATCH 097/130] TOMOYO: Accept \000 as a valid character.
+Subject: [PATCH 097/129] TOMOYO: Accept \000 as a valid character.
 
 commit 25add8cf99c9ec8b8dc0acd8b9241e963fc0d29c upstream.
 
@@ -39,5 +39,5 @@ index 4a9b4b2..867558c 100644
  		}
  	}
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0098-intel-idle-Make-idle-driver-more-robust.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0098-intel-idle-Make-idle-driver-more-robust.patch
index d7a7611..410dc4f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0098-intel-idle-Make-idle-driver-more-robust.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0098-intel-idle-Make-idle-driver-more-robust.patch
@@ -1,7 +1,7 @@
-From ea9646e5ea87fd6140ed54f3b09ca46475ce6a2e Mon Sep 17 00:00:00 2001
+From 0e193a44b182c4d14fd4ec0eda63e1cba9e4a0a7 Mon Sep 17 00:00:00 2001
 From: Thomas Renninger <trenn@suse.de>
 Date: Sun, 4 Dec 2011 22:17:29 +0100
-Subject: [PATCH 098/130] intel idle: Make idle driver more robust
+Subject: [PATCH 098/129] intel idle: Make idle driver more robust
 
 commit 5c2a9f06a9cd7194f884cdc88144866235dec07d upstream.
 
@@ -49,5 +49,5 @@ index 5d2f8e1..1dafcc3 100644
  
  	pr_debug(PREFIX "MWAIT substates: 0x%x\n", mwait_substates);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0099-intel_idle-fix-API-misuse.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0099-intel_idle-fix-API-misuse.patch
index e6b1697..cbebf3b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0099-intel_idle-fix-API-misuse.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0099-intel_idle-fix-API-misuse.patch
@@ -1,7 +1,7 @@
-From 6fc773be070e8390d544439896111359f7ad5d5e Mon Sep 17 00:00:00 2001
+From c8fa4b79449fe6d516847fc308c7126e65d5eec1 Mon Sep 17 00:00:00 2001
 From: Shaohua Li <shaohua.li@intel.com>
 Date: Tue, 10 Jan 2012 15:48:19 -0800
-Subject: [PATCH 099/130] intel_idle: fix API misuse
+Subject: [PATCH 099/129] intel_idle: fix API misuse
 
 commit 39a74fdedd1c1461d6fb6d330b5266886513c98f upstream.
 
@@ -52,5 +52,5 @@ index 1dafcc3..5b39216 100644
  	}
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0100-ACPI-Store-SRAT-table-revision.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0100-ACPI-Store-SRAT-table-revision.patch
index 0517a28..5f6eb01 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0100-ACPI-Store-SRAT-table-revision.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0100-ACPI-Store-SRAT-table-revision.patch
@@ -1,7 +1,7 @@
-From 728b80c9d9c824758d199b30badeede283997288 Mon Sep 17 00:00:00 2001
+From 8f15cb284e8a758b4040fd87729b365bb7805dbb Mon Sep 17 00:00:00 2001
 From: Kurt Garloff <kurt@garloff.de>
 Date: Tue, 17 Jan 2012 04:18:02 -0500
-Subject: [PATCH 100/130] ACPI: Store SRAT table revision
+Subject: [PATCH 100/129] ACPI: Store SRAT table revision
 
 commit 8df0eb7c9d96f9e82f233ee8b74e0f0c8471f868 upstream.
 
@@ -62,5 +62,5 @@ index 1739726..451823c 100644
  #endif				/* CONFIG_ACPI_NUMA */
  #endif				/* __ACP_NUMA_H */
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0101-ACPI-x86-Use-SRAT-table-rev-to-use-8bit-or-32bit-PXM.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0101-ACPI-x86-Use-SRAT-table-rev-to-use-8bit-or-32bit-PXM.patch
index e388bd8..2209860 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0101-ACPI-x86-Use-SRAT-table-rev-to-use-8bit-or-32bit-PXM.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0101-ACPI-x86-Use-SRAT-table-rev-to-use-8bit-or-32bit-PXM.patch
@@ -1,7 +1,7 @@
-From a3f5e6cdc32940c2bb38883fbf59310e3f47562b Mon Sep 17 00:00:00 2001
+From 63a87105c14ecf9a81f741a3864b775901237f53 Mon Sep 17 00:00:00 2001
 From: Kurt Garloff <kurt@garloff.de>
 Date: Tue, 17 Jan 2012 04:20:31 -0500
-Subject: [PATCH 101/130] ACPI, x86: Use SRAT table rev to use 8bit or 32bit
+Subject: [PATCH 101/129] ACPI, x86: Use SRAT table rev to use 8bit or 32bit
  PXM fields (x86/x86-64)
 
 commit cd298f60a2451a16e0f077404bf69b62ec868733 upstream.
@@ -46,5 +46,5 @@ index 81dbfde..7efd0c6 100644
  	if (node < 0) {
  		printk(KERN_ERR "SRAT: Too many proximity domains.\n");
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0102-ACPI-ia64-Use-SRAT-table-rev-to-use-8bit-or-16-32bit.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0102-ACPI-ia64-Use-SRAT-table-rev-to-use-8bit-or-16-32bit.patch
index 9db21e7..9aa68af 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0102-ACPI-ia64-Use-SRAT-table-rev-to-use-8bit-or-16-32bit.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0102-ACPI-ia64-Use-SRAT-table-rev-to-use-8bit-or-16-32bit.patch
@@ -1,7 +1,7 @@
-From 4e2cabc871e43094be5d5e2968cf2759bfc42446 Mon Sep 17 00:00:00 2001
+From d9beea03fc99ab5df65264a47802449c6630a8bf Mon Sep 17 00:00:00 2001
 From: Kurt Garloff <kurt@garloff.de>
 Date: Tue, 17 Jan 2012 04:21:49 -0500
-Subject: [PATCH 102/130] ACPI, ia64: Use SRAT table rev to use 8bit or
+Subject: [PATCH 102/129] ACPI, ia64: Use SRAT table rev to use 8bit or
  16/32bit PXM fields (ia64)
 
 commit 9f10f6a520deb3639fac78d81151a3ade88b4e7f upstream.
@@ -62,5 +62,5 @@ index bfb4d01..5207035 100644
  
  	return pxm;
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0103-ACPICA-Put-back-the-call-to-acpi_os_validate_address.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0103-ACPICA-Put-back-the-call-to-acpi_os_validate_address.patch
index 28e650a..66d9672 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0103-ACPICA-Put-back-the-call-to-acpi_os_validate_address.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0103-ACPICA-Put-back-the-call-to-acpi_os_validate_address.patch
@@ -1,7 +1,7 @@
-From 1d0cc972d03315012d34ed57d5929597fe16513d Mon Sep 17 00:00:00 2001
+From 0279b040f1dafa5f545c9ef255b39a99f9490750 Mon Sep 17 00:00:00 2001
 From: Lin Ming <ming.m.lin@intel.com>
 Date: Tue, 29 Nov 2011 22:13:35 +0800
-Subject: [PATCH 103/130] ACPICA: Put back the call to
+Subject: [PATCH 103/129] ACPICA: Put back the call to
  acpi_os_validate_address
 
 commit da4d8b287abe783d30e968155614531a0937d090 upstream.
@@ -55,5 +55,5 @@ index 8c7b997..42163d8 100644
  	return_ACPI_STATUS(status);
  }
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0104-ACPI-processor-fix-acpi_get_cpuid-for-UP-processor.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0104-ACPI-processor-fix-acpi_get_cpuid-for-UP-processor.patch
index 9a2227c..edd3fc3 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0104-ACPI-processor-fix-acpi_get_cpuid-for-UP-processor.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0104-ACPI-processor-fix-acpi_get_cpuid-for-UP-processor.patch
@@ -1,7 +1,7 @@
-From 9a808d369e4ff2dea161f009f81fa4daf32218ad Mon Sep 17 00:00:00 2001
+From 639adc94e82ece74d00c447a2e5d9180bdfd5355 Mon Sep 17 00:00:00 2001
 From: Lin Ming <ming.m.lin@intel.com>
 Date: Tue, 13 Dec 2011 09:36:03 +0800
-Subject: [PATCH 104/130] ACPI: processor: fix acpi_get_cpuid for UP processor
+Subject: [PATCH 104/129] ACPI: processor: fix acpi_get_cpuid for UP processor
 
 commit d640113fe80e45ebd4a5b420b220d3f6bf37f682 upstream.
 
@@ -71,5 +71,5 @@ index 3a0428e..c850de4 100644
  #ifdef CONFIG_SMP
  	for_each_possible_cpu(i) {
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0105-sym53c8xx-Fix-NULL-pointer-dereference-in-slave_dest.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0105-sym53c8xx-Fix-NULL-pointer-dereference-in-slave_dest.patch
index 4d3dd26..e91b360 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0105-sym53c8xx-Fix-NULL-pointer-dereference-in-slave_dest.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0105-sym53c8xx-Fix-NULL-pointer-dereference-in-slave_dest.patch
@@ -1,7 +1,7 @@
-From 2d67bed9e2fee02c9cca9582ed2719394bcbc124 Mon Sep 17 00:00:00 2001
+From af1ad4d4ecbbfca6424c1f8fa40e1aec8fae4836 Mon Sep 17 00:00:00 2001
 From: Stratos Psomadakis <psomas@gentoo.org>
 Date: Sun, 4 Dec 2011 02:23:54 +0200
-Subject: [PATCH 105/130] sym53c8xx: Fix NULL pointer dereference in
+Subject: [PATCH 105/129] sym53c8xx: Fix NULL pointer dereference in
  slave_destroy
 
 commit cced5041ed5a2d1352186510944b0ddfbdbe4c0b upstream.
@@ -33,5 +33,5 @@ index b4543f5..36d1ed7 100644
  
  	if (lp->busy_itlq || lp->busy_itl) {
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0106-target-Set-response-format-in-INQUIRY-response.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0106-target-Set-response-format-in-INQUIRY-response.patch
index 4d00f5e..22c0c37 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0106-target-Set-response-format-in-INQUIRY-response.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0106-target-Set-response-format-in-INQUIRY-response.patch
@@ -1,7 +1,7 @@
-From ce97634c9e0f76ad9e01acc6bc4d5d7c92e2cb52 Mon Sep 17 00:00:00 2001
+From 860d8eb163f67712acbcc072e5362e3ca01ef2b8 Mon Sep 17 00:00:00 2001
 From: Roland Dreier <roland@purestorage.com>
 Date: Tue, 6 Dec 2011 10:02:09 -0800
-Subject: [PATCH 106/130] target: Set response format in INQUIRY response
+Subject: [PATCH 106/129] target: Set response format in INQUIRY response
 
 commit ce136176fea522fc8f4c16dcae7e8ed1d890ca39 upstream.
 
@@ -40,5 +40,5 @@ index 831468b..2e8c1be 100644
  	 */
  	if (dev->se_sub_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED)
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0107-target-Set-additional-sense-length-field-in-sense-da.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0107-target-Set-additional-sense-length-field-in-sense-da.patch
index 89cf1cb..2d2bff5 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0107-target-Set-additional-sense-length-field-in-sense-da.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0107-target-Set-additional-sense-length-field-in-sense-da.patch
@@ -1,7 +1,7 @@
-From 02773707d85c4c5d94d7e75eec75a111dae1bf8b Mon Sep 17 00:00:00 2001
+From ae86c4561c40068ef81f484829a47512c99853d0 Mon Sep 17 00:00:00 2001
 From: Roland Dreier <roland@purestorage.com>
 Date: Tue, 13 Dec 2011 14:55:33 -0800
-Subject: [PATCH 107/130] target: Set additional sense length field in sense
+Subject: [PATCH 107/129] target: Set additional sense length field in sense
  data
 
 commit 895f3022523361e9b383cf48f51feb1f7d5e7e53 upstream.
@@ -173,5 +173,5 @@ index 6873c7d..a79886c 100644
  #define SPC_ASCQ_KEY_OFFSET			13
  #define TRANSPORT_IQN_LEN			224
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0108-bcma-invalidate-the-mapped-core-over-suspend-resume.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0108-bcma-invalidate-the-mapped-core-over-suspend-resume.patch
index 0a95caa..1d681ad 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0108-bcma-invalidate-the-mapped-core-over-suspend-resume.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0108-bcma-invalidate-the-mapped-core-over-suspend-resume.patch
@@ -1,7 +1,7 @@
-From f247747caad5d93e854a4ebab125e97e119a7c94 Mon Sep 17 00:00:00 2001
+From 744b53e5115a140039ef4e7834bb84797b4db37e Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
 Date: Fri, 13 Jan 2012 23:58:38 +0100
-Subject: [PATCH 108/130] bcma: invalidate the mapped core over suspend/resume
+Subject: [PATCH 108/129] bcma: invalidate the mapped core over suspend/resume
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
@@ -40,5 +40,5 @@ index 990f5a8..48e06be 100644
  }
  
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0109-cx23885-dvb-check-if-dvb_attach-succeded.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0109-cx23885-dvb-check-if-dvb_attach-succeded.patch
index 68e70fa..281a380 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0109-cx23885-dvb-check-if-dvb_attach-succeded.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0109-cx23885-dvb-check-if-dvb_attach-succeded.patch
@@ -1,7 +1,7 @@
-From eba71ad513d0aaab1592c2a0f96689fb99e84358 Mon Sep 17 00:00:00 2001
+From 3fcecb64e1ce21bda3d69718f0fefa1ed0d7f06b Mon Sep 17 00:00:00 2001
 From: Miroslav Slugen <thunder.mmm@gmail.com>
 Date: Sun, 11 Dec 2011 18:57:58 -0300
-Subject: [PATCH 109/130] cx23885-dvb: check if dvb_attach() succeded
+Subject: [PATCH 109/129] cx23885-dvb: check if dvb_attach() succeded
 
 commit a7c8aadad39428b64d26c3971d967f8314e2397d upstream.
 
@@ -32,5 +32,5 @@ index bcb45be..f0482b2 100644
  		break;
  	case CX23885_BOARD_TBS_6920:
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0110-cx88-fix-don-t-duplicate-xc4000-entry-for-radio.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0110-cx88-fix-don-t-duplicate-xc4000-entry-for-radio.patch
index 41af993..3bb70b8 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0110-cx88-fix-don-t-duplicate-xc4000-entry-for-radio.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0110-cx88-fix-don-t-duplicate-xc4000-entry-for-radio.patch
@@ -1,7 +1,7 @@
-From 4cdd59d625b7597263d5bf1420baf29dda1dbcf9 Mon Sep 17 00:00:00 2001
+From dedbeeab016e8baaeed49bae9f4a0dab47da8a54 Mon Sep 17 00:00:00 2001
 From: Miroslav Slugen <thunder.mmm@gmail.com>
 Date: Sun, 11 Dec 2011 19:00:06 -0300
-Subject: [PATCH 110/130] cx88: fix: don't duplicate xc4000 entry for radio
+Subject: [PATCH 110/129] cx88: fix: don't duplicate xc4000 entry for radio
 
 commit b6854e3f31402476bcc9d2f41570389fa491de17 upstream.
 
@@ -91,5 +91,5 @@ index 0d719fa..3929d93 100644
  		 * GPIO
  		 *   2: 1: mute audio
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0111-tuner-Fix-numberspace-conflict-between-xc4000-and-pt.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0111-tuner-Fix-numberspace-conflict-between-xc4000-and-pt.patch
index 8eacbca..ca03460 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0111-tuner-Fix-numberspace-conflict-between-xc4000-and-pt.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0111-tuner-Fix-numberspace-conflict-between-xc4000-and-pt.patch
@@ -1,7 +1,7 @@
-From 9f3c2f09e3c5ffbbbb98cb248b423cbdd8a86a9e Mon Sep 17 00:00:00 2001
+From 5af871e87d37ab57459c6c7244aa4837993ee9eb Mon Sep 17 00:00:00 2001
 From: Miroslav Slugen <thunder.mmm@gmail.com>
 Date: Sun, 11 Dec 2011 18:47:32 -0300
-Subject: [PATCH 111/130] tuner: Fix numberspace conflict between xc4000 and
+Subject: [PATCH 111/129] tuner: Fix numberspace conflict between xc4000 and
  pti 5nf05 tuners
 
 commit cd4ca7afc61d3b18fcd635002459fb6b1d701099 upstream.
@@ -38,5 +38,5 @@ index 89c290b..29e1920 100644
  #define TDA9887_PRESENT 		(1<<0)
  #define TDA9887_PORT1_INACTIVE 		(1<<1)
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0112-tracepoints-module-Fix-disabling-tracepoints-with-ta.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0112-tracepoints-module-Fix-disabling-tracepoints-with-ta.patch
index 484a59a..fa68a22 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0112-tracepoints-module-Fix-disabling-tracepoints-with-ta.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0112-tracepoints-module-Fix-disabling-tracepoints-with-ta.patch
@@ -1,7 +1,7 @@
-From f346bd3ef355be96371b53ec2e93f072618bdce7 Mon Sep 17 00:00:00 2001
+From 1c99223cf33c02c8f79d74bda8a0f4352bd4d7f6 Mon Sep 17 00:00:00 2001
 From: Steven Rostedt <srostedt@redhat.com>
 Date: Fri, 13 Jan 2012 21:40:59 -0500
-Subject: [PATCH 112/130] tracepoints/module: Fix disabling tracepoints with
+Subject: [PATCH 112/129] tracepoints/module: Fix disabling tracepoints with
  taint CRAP or OOT
 
 commit c10076c4304083af15a41f6bc5e657e781c1f9a6 upstream.
@@ -46,5 +46,5 @@ index db110b8..f1539de 100644
  	mutex_lock(&tracepoints_mutex);
  	tp_mod = kmalloc(sizeof(struct tp_module), GFP_KERNEL);
 -- 
-1.7.9.4
+1.7.9.5
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0113-x86-UV2-Fix-new-UV2-hardware-by-using-native-UV2-bro.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0113-x86-UV2-Fix-new-UV2-hardware-by-using-native-UV2-bro.patch
index 29557a4..aec3465 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0113-x86-UV2-Fix-new-UV2-hardware-by-using-native-UV2-bro.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0113-x86-UV2-Fix-new-UV2-hardware-by-using-native-UV2-bro.patch
@@ -1,4 +1,4 @@
-From ec2a416f6ce2e5b896074a6e8c86fda4d1d21466 Mon Sep 17 00:00:00 2001
+From ebde7b91a72ac0cc014d021051f8a46a786dbb00 Mon Sep 17 00:00:00 2001
 From: Cliff Wickman <cpw@sgi.com>
 Date: Mon, 16 Jan 2012 15:17:50 -0600
 Subject: [PATCH 113/129] x86/UV2: Fix new UV2 hardware by using native UV2
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0114-x86-UV2-Fix-BAU-destination-timeout-initialization.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0114-x86-UV2-Fix-BAU-destination-timeout-initialization.patch
index a750251..02118c9 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0114-x86-UV2-Fix-BAU-destination-timeout-initialization.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0114-x86-UV2-Fix-BAU-destination-timeout-initialization.patch
@@ -1,4 +1,4 @@
-From 0b3a1f5aefb71777fec89809de87c49b917a88e7 Mon Sep 17 00:00:00 2001
+From dcca45052472bcbd331d0451777cb947588e1dd5 Mon Sep 17 00:00:00 2001
 From: Cliff Wickman <cpw@sgi.com>
 Date: Mon, 16 Jan 2012 15:18:48 -0600
 Subject: [PATCH 114/129] x86/UV2: Fix BAU destination timeout initialization
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0115-x86-UV2-Work-around-BAU-bug.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0115-x86-UV2-Work-around-BAU-bug.patch
index bfcab13..11d610c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0115-x86-UV2-Work-around-BAU-bug.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0115-x86-UV2-Work-around-BAU-bug.patch
@@ -1,4 +1,4 @@
-From d1eaa067ea8545101d57f6d484519722ee8c3783 Mon Sep 17 00:00:00 2001
+From 3ebb4a034dca1cd312f42c9ff1ff47c873f211b6 Mon Sep 17 00:00:00 2001
 From: Cliff Wickman <cpw@sgi.com>
 Date: Mon, 16 Jan 2012 15:19:47 -0600
 Subject: [PATCH 115/129] x86/UV2: Work around BAU bug
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0116-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0116-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch
index bde74d7..33c2028 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0116-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0116-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch
@@ -1,4 +1,4 @@
-From 28cfb4fe93728e07bee3b360682f3a4b2ca6f1f0 Mon Sep 17 00:00:00 2001
+From 36fed113f3b66718282151fa962f644e793520f5 Mon Sep 17 00:00:00 2001
 From: Felix Fietkau <nbd@openwrt.org>
 Date: Sat, 14 Jan 2012 15:08:34 +0100
 Subject: [PATCH 116/129] ath9k_hw: fix interpretation of the rx KeyMiss flag
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-rt2800pci-fix-spurious-interrupts-generation.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-rt2800pci-fix-spurious-interrupts-generation.patch
index 2911ced..9fc97d7 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-rt2800pci-fix-spurious-interrupts-generation.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-rt2800pci-fix-spurious-interrupts-generation.patch
@@ -1,4 +1,4 @@
-From 021083c5844b20210ced59ad5b760d2a7cb97cd2 Mon Sep 17 00:00:00 2001
+From a84e0b6f2dfb09db9a5cb66bb913f619d8973a62 Mon Sep 17 00:00:00 2001
 From: Stanislaw Gruszka <sgruszka@redhat.com>
 Date: Fri, 13 Jan 2012 12:59:32 +0100
 Subject: [PATCH 117/129] rt2800pci: fix spurious interrupts generation
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0118-xfs-fix-endian-conversion-issue-in-discard-code.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0118-xfs-fix-endian-conversion-issue-in-discard-code.patch
index fda910b..6a0feaa 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0118-xfs-fix-endian-conversion-issue-in-discard-code.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0118-xfs-fix-endian-conversion-issue-in-discard-code.patch
@@ -1,4 +1,4 @@
-From 40713843ccb84ed06d4799763c3832376d6cd5cb Mon Sep 17 00:00:00 2001
+From 1075b6106024e51af7a5108626091322d2e91710 Mon Sep 17 00:00:00 2001
 From: Dave Chinner <dchinner@redhat.com>
 Date: Wed, 18 Jan 2012 14:41:45 -0600
 Subject: [PATCH 118/129] xfs: fix endian conversion issue in discard code
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0119-i2c-eg20t-modified-the-setting-of-transfer-rate.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0119-i2c-eg20t-modified-the-setting-of-transfer-rate.patch
index 839253c..1539167 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0119-i2c-eg20t-modified-the-setting-of-transfer-rate.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0119-i2c-eg20t-modified-the-setting-of-transfer-rate.patch
@@ -1,4 +1,4 @@
-From 072d0e473d1a1d4adc67a7d39be9f71fea4fadad Mon Sep 17 00:00:00 2001
+From d73358012ed5ac74a1f51fa250d221be5e3ca304 Mon Sep 17 00:00:00 2001
 From: Toshiharu Okada <toshiharu-linux@dsn.okisemi.com>
 Date: Mon, 26 Sep 2011 16:16:23 +0900
 Subject: [PATCH 119/129] i2c-eg20t: modified the setting of transfer rate.
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0120-score-fix-off-by-one-index-into-syscall-table.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0120-score-fix-off-by-one-index-into-syscall-table.patch
index 32a8d96..7926f22 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0120-score-fix-off-by-one-index-into-syscall-table.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0120-score-fix-off-by-one-index-into-syscall-table.patch
@@ -1,4 +1,4 @@
-From 9ed6d95eba2ead578e1fa4e5be8cb16b185c8c97 Mon Sep 17 00:00:00 2001
+From 9391ba8a34c0947af9b6c756387fc8bf70959648 Mon Sep 17 00:00:00 2001
 From: Dan Rosenberg <drosenberg@vsecurity.com>
 Date: Fri, 20 Jan 2012 14:34:27 -0800
 Subject: [PATCH 120/129] score: fix off-by-one index into syscall table
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0121-cifs-lower-default-wsize-when-unix-extensions-are-no.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0121-cifs-lower-default-wsize-when-unix-extensions-are-no.patch
index fb4af96..f857485 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0121-cifs-lower-default-wsize-when-unix-extensions-are-no.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0121-cifs-lower-default-wsize-when-unix-extensions-are-no.patch
@@ -1,4 +1,4 @@
-From ac9426f8233d76fd80412576fb53a26a7b1bd7ea Mon Sep 17 00:00:00 2001
+From 95b45505920a18fb705ad35e9144aaf94ea01421 Mon Sep 17 00:00:00 2001
 From: Jeff Layton <jlayton@redhat.com>
 Date: Tue, 17 Jan 2012 16:08:51 -0500
 Subject: [PATCH 121/129] cifs: lower default wsize when unix extensions are
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0122-kprobes-initialize-before-using-a-hlist.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0122-kprobes-initialize-before-using-a-hlist.patch
index 3d055c3..ff82995 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0122-kprobes-initialize-before-using-a-hlist.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0122-kprobes-initialize-before-using-a-hlist.patch
@@ -1,4 +1,4 @@
-From d159bea43eb9f0ba806a4ddc7e03dbb218b88136 Mon Sep 17 00:00:00 2001
+From b15b8b5f7a9cfc20c2e68ba4a6a402ff44bb6c4a Mon Sep 17 00:00:00 2001
 From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
 Date: Fri, 20 Jan 2012 14:34:04 -0800
 Subject: [PATCH 122/129] kprobes: initialize before using a hlist
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0123-proc-clear_refs-do-not-clear-reserved-pages.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0123-proc-clear_refs-do-not-clear-reserved-pages.patch
index 23678bd..521c3d5 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0123-proc-clear_refs-do-not-clear-reserved-pages.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0123-proc-clear_refs-do-not-clear-reserved-pages.patch
@@ -1,4 +1,4 @@
-From 1740c878a52dd4afc5b6e927d9b157d6db230184 Mon Sep 17 00:00:00 2001
+From 8077f2d3611dd0c75c64f018c7e01dc2a4948a27 Mon Sep 17 00:00:00 2001
 From: Will Deacon <will.deacon@arm.com>
 Date: Fri, 20 Jan 2012 14:34:09 -0800
 Subject: [PATCH 123/129] proc: clear_refs: do not clear reserved pages
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0124-mm-fix-NULL-ptr-dereference-in-__count_immobile_page.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0124-mm-fix-NULL-ptr-dereference-in-__count_immobile_page.patch
index ca05e3e..1d4d2f8 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0124-mm-fix-NULL-ptr-dereference-in-__count_immobile_page.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0124-mm-fix-NULL-ptr-dereference-in-__count_immobile_page.patch
@@ -1,4 +1,4 @@
-From ddcb13eadda3bcb23d81672ea705d6bfa313bbf8 Mon Sep 17 00:00:00 2001
+From e4131b26d39c1bf1f739fd09451ade0906252661 Mon Sep 17 00:00:00 2001
 From: Michal Hocko <mhocko@suse.cz>
 Date: Fri, 20 Jan 2012 14:33:55 -0800
 Subject: [PATCH 124/129] mm: fix NULL ptr dereference in
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0125-iwlagn-check-for-SMPS-mode.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0125-iwlagn-check-for-SMPS-mode.patch
index a3fffd5..b0cda03 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0125-iwlagn-check-for-SMPS-mode.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0125-iwlagn-check-for-SMPS-mode.patch
@@ -1,4 +1,4 @@
-From cd3b4541cb6b11e119007268e0890a1a38e68f8e Mon Sep 17 00:00:00 2001
+From 70fd986c5b5171460831de5af79b0d62af90411f Mon Sep 17 00:00:00 2001
 From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
 Date: Thu, 10 Nov 2011 06:55:04 -0800
 Subject: [PATCH 125/129] iwlagn: check for SMPS mode
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0126-iwlegacy-3945-fix-hw-passive-scan-on-radar-channels.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0126-iwlegacy-3945-fix-hw-passive-scan-on-radar-channels.patch
index 7cbd3d8..b00ae5c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0126-iwlegacy-3945-fix-hw-passive-scan-on-radar-channels.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0126-iwlegacy-3945-fix-hw-passive-scan-on-radar-channels.patch
@@ -1,4 +1,4 @@
-From 98214e3fab80dbfdf54c908de2ae0c9730d6430d Mon Sep 17 00:00:00 2001
+From 2daa9185b2ac519603743cbc902f00633947e878 Mon Sep 17 00:00:00 2001
 From: Stanislaw Gruszka <sgruszka@redhat.com>
 Date: Fri, 23 Dec 2011 08:13:50 +0100
 Subject: [PATCH 126/129] iwlegacy: 3945: fix hw passive scan on radar
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0127-SHM_UNLOCK-fix-long-unpreemptible-section.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0127-SHM_UNLOCK-fix-long-unpreemptible-section.patch
index 3731f65..dfab752 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0127-SHM_UNLOCK-fix-long-unpreemptible-section.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0127-SHM_UNLOCK-fix-long-unpreemptible-section.patch
@@ -1,4 +1,4 @@
-From 5e2208d9c6ce1c5e57ad5fe56adc5b8f349ce23a Mon Sep 17 00:00:00 2001
+From e74be920e142da39a0824238a5031649fbec2890 Mon Sep 17 00:00:00 2001
 From: Hugh Dickins <hughd@google.com>
 Date: Fri, 20 Jan 2012 14:34:19 -0800
 Subject: [PATCH 127/129] SHM_UNLOCK: fix long unpreemptible section
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0128-SHM_UNLOCK-fix-Unevictable-pages-stranded-after-swap.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0128-SHM_UNLOCK-fix-Unevictable-pages-stranded-after-swap.patch
index e7adafc..70d0fee 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0128-SHM_UNLOCK-fix-Unevictable-pages-stranded-after-swap.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0128-SHM_UNLOCK-fix-Unevictable-pages-stranded-after-swap.patch
@@ -1,4 +1,4 @@
-From 8704b3941de0865d7c11921ee2dd7abbc04a0081 Mon Sep 17 00:00:00 2001
+From 67890984571f0de5f3d975ef1d67643d89d92174 Mon Sep 17 00:00:00 2001
 From: Hugh Dickins <hughd@google.com>
 Date: Fri, 20 Jan 2012 14:34:21 -0800
 Subject: [PATCH 128/129] SHM_UNLOCK: fix Unevictable pages stranded after
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0129-Linux-3.2.2.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0129-Linux-3.2.2.patch
index f4e3ff5..191a68f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0129-Linux-3.2.2.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0129-Linux-3.2.2.patch
@@ -1,4 +1,4 @@
-From 8e03b0ed729407fef72578c24148208a079e7f2c Mon Sep 17 00:00:00 2001
+From 9c4bad0da47e7a8597bf0135088e482b1a970ba7 Mon Sep 17 00:00:00 2001
 From: Greg Kroah-Hartman <gregkh@suse.de>
 Date: Wed, 25 Jan 2012 16:39:32 -0800
 Subject: [PATCH 129/129] Linux 3.2.2
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0001-iommu-amd-Add-workaround-for-event-log-erratum.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0001-iommu-amd-Add-workaround-for-event-log-erratum.patch
new file mode 100644
index 0000000..fbb8207
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0001-iommu-amd-Add-workaround-for-event-log-erratum.patch
@@ -0,0 +1,68 @@
+From d08904adc2bdce433151a95add376e5446af13de Mon Sep 17 00:00:00 2001
+From: Joerg Roedel <joerg.roedel@amd.com>
+Date: Thu, 12 Apr 2012 14:12:00 +0200
+Subject: [PATCH 01/86] iommu/amd: Add workaround for event log erratum
+
+commit 3d06fca8d2aa3543030e40b95f1d62f9f5a03540 upstream.
+
+Due to a recent erratum it can happen that the head pointer
+of the event-log is updated before the actual event-log
+entry is written. This patch implements the recommended
+workaround.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/iommu/amd_iommu.c |   29 +++++++++++++++++++++++------
+ 1 file changed, 23 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
+index 966a6e7..f1d5408 100644
+--- a/drivers/iommu/amd_iommu.c
++++ b/drivers/iommu/amd_iommu.c
+@@ -381,12 +381,27 @@ static void dump_command(unsigned long phys_addr)
+ 
+ static void iommu_print_event(struct amd_iommu *iommu, void *__evt)
+ {
+-	u32 *event = __evt;
+-	int type  = (event[1] >> EVENT_TYPE_SHIFT)  & EVENT_TYPE_MASK;
+-	int devid = (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK;
+-	int domid = (event[1] >> EVENT_DOMID_SHIFT) & EVENT_DOMID_MASK;
+-	int flags = (event[1] >> EVENT_FLAGS_SHIFT) & EVENT_FLAGS_MASK;
+-	u64 address = (u64)(((u64)event[3]) << 32) | event[2];
++	int type, devid, domid, flags;
++	volatile u32 *event = __evt;
++	int count = 0;
++	u64 address;
++
++retry:
++	type    = (event[1] >> EVENT_TYPE_SHIFT)  & EVENT_TYPE_MASK;
++	devid   = (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK;
++	domid   = (event[1] >> EVENT_DOMID_SHIFT) & EVENT_DOMID_MASK;
++	flags   = (event[1] >> EVENT_FLAGS_SHIFT) & EVENT_FLAGS_MASK;
++	address = (u64)(((u64)event[3]) << 32) | event[2];
++
++	if (type == 0) {
++		/* Did we hit the erratum? */
++		if (++count == LOOP_TIMEOUT) {
++			pr_err("AMD-Vi: No event written to event log\n");
++			return;
++		}
++		udelay(1);
++		goto retry;
++	}
+ 
+ 	printk(KERN_ERR "AMD-Vi: Event logged [");
+ 
+@@ -439,6 +454,8 @@ static void iommu_print_event(struct amd_iommu *iommu, void *__evt)
+ 	default:
+ 		printk(KERN_ERR "UNKNOWN type=0x%02x]\n", type);
+ 	}
++
++	memset(__evt, 0, 4 * sizeof(u32));
+ }
+ 
+ static void iommu_poll_events(struct amd_iommu *iommu)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0002-MIPS-BCM63XX-Add-missing-include-for-bcm63xx_gpio.h.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0002-MIPS-BCM63XX-Add-missing-include-for-bcm63xx_gpio.h.patch
new file mode 100644
index 0000000..33c5e4c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0002-MIPS-BCM63XX-Add-missing-include-for-bcm63xx_gpio.h.patch
@@ -0,0 +1,52 @@
+From 46955a5e45c31c112caee68f0b31b6caac294ce0 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jonas.gorski@gmail.com>
+Date: Tue, 15 May 2012 17:47:52 +0200
+Subject: [PATCH 02/86] MIPS: BCM63XX: Add missing include for bcm63xx_gpio.h
+
+commit 442209f31dafef9fde852858e1ce566b675b720d upstream.
+
+bcm63xx_gpio.h uses macros defined in bcm63xx_cpu.h without including it,
+leading to the following build failure:
+
+  CC [M]  drivers/mmc/core/cd-gpio.o
+In file included from arch/mips/include/asm/mach-bcm63xx/gpio.h:4:0,
+                 from arch/mips/include/asm/gpio.h:4,
+                 from include/linux/gpio.h:30,
+                 from drivers/mmc/core/cd-gpio.c:12:
+
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h: In function 'bcm63xx_gpio_count':
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h:10:2: error: implicit declaration of function 'bcm63xx_get_cpu_id'
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h:11:7: error: 'BCM6358_CPU_ID' undeclared (first use in this function)
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h:11:7: note: each undeclared identifier is reported only once for each function it appears in
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h:13:7: error: 'BCM6338_CPU_ID' undeclared (first use in this function)
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h:15:7: error: 'BCM6345_CPU_ID' undeclared (first use in this function)
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h:17:7: error: 'BCM6368_CPU_ID' undeclared (first use in this function)
+arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h:19:7: error: 'BCM6348_CPU_ID' undeclared (first use in this function)
+
+make[7]: *** [drivers/mmc/core/cd-gpio.o] Error 1
+
+Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
+Cc: linux-mips@linux-mips.org
+Cc: Maxime Bizon <mbizon@freebox.fr>
+Cc: Florian Fainelli <florian@openwrt.org>
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h
+index 3999ec0..67d1ce0 100644
+--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h
+@@ -2,6 +2,7 @@
+ #define BCM63XX_GPIO_H
+ 
+ #include <linux/init.h>
++#include <bcm63xx_cpu.h>
+ 
+ int __init bcm63xx_gpio_init(void);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0003-cifs-Include-backup-intent-search-flags-during-searc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0003-cifs-Include-backup-intent-search-flags-during-searc.patch
new file mode 100644
index 0000000..33f7854
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0003-cifs-Include-backup-intent-search-flags-during-searc.patch
@@ -0,0 +1,152 @@
+From 173ad16c027991780b0eb74f6ad49ae7621647f5 Mon Sep 17 00:00:00 2001
+From: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
+Date: Tue, 15 May 2012 10:19:16 -0500
+Subject: [PATCH 03/86] cifs: Include backup intent search flags during
+ searches {try #2)
+
+commit 2608bee744a92d60d15ff4e6e0b913d8b406aedd upstream.
+
+As observed and suggested by Tushar Gosavi...
+
+---------
+readdir calls these function to send TRANS2_FIND_FIRST and
+TRANS2_FIND_NEXT command to the server. The current cifs module is
+not specifying CIFS_SEARCH_BACKUP_SEARCH flag while sending these
+command when backupuid/backupgid is specified. This can be resolved
+by specifying CIFS_SEARCH_BACKUP_SEARCH flag.
+---------
+
+Reported-and-Tested-by: Tushar Gosavi <tugosavi@in.ibm.com>
+Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
+Acked-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/cifs/cifsproto.h |    6 ++++--
+ fs/cifs/cifssmb.c   |   12 +++++-------
+ fs/cifs/readdir.c   |   15 +++++++++++++--
+ 3 files changed, 22 insertions(+), 11 deletions(-)
+
+diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
+index 6f4e243..26917d3 100644
+--- a/fs/cifs/cifsproto.h
++++ b/fs/cifs/cifsproto.h
+@@ -184,11 +184,13 @@ extern int CIFSTCon(unsigned int xid, struct cifs_ses *ses,
+ 
+ extern int CIFSFindFirst(const int xid, struct cifs_tcon *tcon,
+ 		const char *searchName, const struct nls_table *nls_codepage,
+-		__u16 *searchHandle, struct cifs_search_info *psrch_inf,
++		__u16 *searchHandle, __u16 search_flags,
++		struct cifs_search_info *psrch_inf,
+ 		int map, const char dirsep);
+ 
+ extern int CIFSFindNext(const int xid, struct cifs_tcon *tcon,
+-		__u16 searchHandle, struct cifs_search_info *psrch_inf);
++		__u16 searchHandle, __u16 search_flags,
++		struct cifs_search_info *psrch_inf);
+ 
+ extern int CIFSFindClose(const int, struct cifs_tcon *tcon,
+ 			const __u16 search_handle);
+diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
+index e89803b..6aa7457 100644
+--- a/fs/cifs/cifssmb.c
++++ b/fs/cifs/cifssmb.c
+@@ -4327,7 +4327,7 @@ int
+ CIFSFindFirst(const int xid, struct cifs_tcon *tcon,
+ 	      const char *searchName,
+ 	      const struct nls_table *nls_codepage,
+-	      __u16 *pnetfid,
++	      __u16 *pnetfid, __u16 search_flags,
+ 	      struct cifs_search_info *psrch_inf, int remap, const char dirsep)
+ {
+ /* level 257 SMB_ */
+@@ -4399,8 +4399,7 @@ findFirstRetry:
+ 	    cpu_to_le16(ATTR_READONLY | ATTR_HIDDEN | ATTR_SYSTEM |
+ 			ATTR_DIRECTORY);
+ 	pSMB->SearchCount = cpu_to_le16(CIFSMaxBufSize/sizeof(FILE_UNIX_INFO));
+-	pSMB->SearchFlags = cpu_to_le16(CIFS_SEARCH_CLOSE_AT_END |
+-		CIFS_SEARCH_RETURN_RESUME);
++	pSMB->SearchFlags = cpu_to_le16(search_flags);
+ 	pSMB->InformationLevel = cpu_to_le16(psrch_inf->info_level);
+ 
+ 	/* BB what should we set StorageType to? Does it matter? BB */
+@@ -4470,8 +4469,8 @@ findFirstRetry:
+ 	return rc;
+ }
+ 
+-int CIFSFindNext(const int xid, struct cifs_tcon *tcon,
+-		 __u16 searchHandle, struct cifs_search_info *psrch_inf)
++int CIFSFindNext(const int xid, struct cifs_tcon *tcon, __u16 searchHandle,
++		 __u16 search_flags, struct cifs_search_info *psrch_inf)
+ {
+ 	TRANSACTION2_FNEXT_REQ *pSMB = NULL;
+ 	TRANSACTION2_FNEXT_RSP *pSMBr = NULL;
+@@ -4514,8 +4513,7 @@ int CIFSFindNext(const int xid, struct cifs_tcon *tcon,
+ 		cpu_to_le16(CIFSMaxBufSize / sizeof(FILE_UNIX_INFO));
+ 	pSMB->InformationLevel = cpu_to_le16(psrch_inf->info_level);
+ 	pSMB->ResumeKey = psrch_inf->resume_key;
+-	pSMB->SearchFlags =
+-	      cpu_to_le16(CIFS_SEARCH_CLOSE_AT_END | CIFS_SEARCH_RETURN_RESUME);
++	pSMB->SearchFlags = cpu_to_le16(search_flags);
+ 
+ 	name_len = psrch_inf->resume_name_len;
+ 	params += name_len;
+diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
+index a090bbe..db4a138 100644
+--- a/fs/cifs/readdir.c
++++ b/fs/cifs/readdir.c
+@@ -219,6 +219,7 @@ int get_symlink_reparse_path(char *full_path, struct cifs_sb_info *cifs_sb,
+ 
+ static int initiate_cifs_search(const int xid, struct file *file)
+ {
++	__u16 search_flags;
+ 	int rc = 0;
+ 	char *full_path = NULL;
+ 	struct cifsFileInfo *cifsFile;
+@@ -270,8 +271,12 @@ ffirst_retry:
+ 		cifsFile->srch_inf.info_level = SMB_FIND_FILE_DIRECTORY_INFO;
+ 	}
+ 
++	search_flags = CIFS_SEARCH_CLOSE_AT_END | CIFS_SEARCH_RETURN_RESUME;
++	if (backup_cred(cifs_sb))
++		search_flags |= CIFS_SEARCH_BACKUP_SEARCH;
++
+ 	rc = CIFSFindFirst(xid, pTcon, full_path, cifs_sb->local_nls,
+-		&cifsFile->netfid, &cifsFile->srch_inf,
++		&cifsFile->netfid, search_flags, &cifsFile->srch_inf,
+ 		cifs_sb->mnt_cifs_flags &
+ 			CIFS_MOUNT_MAP_SPECIAL_CHR, CIFS_DIR_SEP(cifs_sb));
+ 	if (rc == 0)
+@@ -502,11 +507,13 @@ static int cifs_save_resume_key(const char *current_entry,
+ static int find_cifs_entry(const int xid, struct cifs_tcon *pTcon,
+ 	struct file *file, char **ppCurrentEntry, int *num_to_ret)
+ {
++	__u16 search_flags;
+ 	int rc = 0;
+ 	int pos_in_buf = 0;
+ 	loff_t first_entry_in_buffer;
+ 	loff_t index_to_find = file->f_pos;
+ 	struct cifsFileInfo *cifsFile = file->private_data;
++	struct cifs_sb_info *cifs_sb = CIFS_SB(file->f_path.dentry->d_sb);
+ 	/* check if index in the buffer */
+ 
+ 	if ((cifsFile == NULL) || (ppCurrentEntry == NULL) ||
+@@ -560,10 +567,14 @@ static int find_cifs_entry(const int xid, struct cifs_tcon *pTcon,
+ 						cifsFile);
+ 	}
+ 
++	search_flags = CIFS_SEARCH_CLOSE_AT_END | CIFS_SEARCH_RETURN_RESUME;
++	if (backup_cred(cifs_sb))
++		search_flags |= CIFS_SEARCH_BACKUP_SEARCH;
++
+ 	while ((index_to_find >= cifsFile->srch_inf.index_of_last_entry) &&
+ 	      (rc == 0) && !cifsFile->srch_inf.endOfSearch) {
+ 		cFYI(1, "calling findnext2");
+-		rc = CIFSFindNext(xid, pTcon, cifsFile->netfid,
++		rc = CIFSFindNext(xid, pTcon, cifsFile->netfid, search_flags,
+ 				  &cifsFile->srch_inf);
+ 		/* FindFirst/Next set last_entry to NULL on malformed reply */
+ 		if (cifsFile->srch_inf.last_entry)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0004-sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-ca.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0004-sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-ca.patch
new file mode 100644
index 0000000..f3aea62
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0004-sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-ca.patch
@@ -0,0 +1,63 @@
+From 0a5a9dc98eefca8c849daa43b5763fc53d672ebf Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Sat, 19 May 2012 12:12:53 -0400
+Subject: [PATCH 04/86] sunrpc: fix loss of task->tk_status after rpc_delay
+ call in xprt_alloc_slot
+
+commit 1afeaf5c29aa07db25760d2fbed5c08a3aec3498 upstream.
+
+xprt_alloc_slot will call rpc_delay() to make the task wait a bit before
+retrying when it gets back an -ENOMEM error from xprt_dynamic_alloc_slot.
+The problem is that rpc_delay will clear the task->tk_status, causing
+call_reserveresult to abort the task.
+
+The solution is simply to let call_reserveresult handle the ENOMEM error
+directly.
+
+Reported-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/sunrpc/clnt.c |    2 ++
+ net/sunrpc/xprt.c |    5 +++--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
+index f0268ea..b2250da 100644
+--- a/net/sunrpc/clnt.c
++++ b/net/sunrpc/clnt.c
+@@ -959,6 +959,8 @@ call_reserveresult(struct rpc_task *task)
+ 	}
+ 
+ 	switch (status) {
++	case -ENOMEM:
++		rpc_delay(task, HZ >> 2);
+ 	case -EAGAIN:	/* woken up; retry */
+ 		task->tk_action = call_reserve;
+ 		return;
+diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
+index c64c0ef..3ac9789 100644
+--- a/net/sunrpc/xprt.c
++++ b/net/sunrpc/xprt.c
+@@ -977,15 +977,16 @@ static void xprt_alloc_slot(struct rpc_task *task)
+ 		goto out_init_req;
+ 	switch (PTR_ERR(req)) {
+ 	case -ENOMEM:
+-		rpc_delay(task, HZ >> 2);
+ 		dprintk("RPC:       dynamic allocation of request slot "
+ 				"failed! Retrying\n");
++		task->tk_status = -ENOMEM;
+ 		break;
+ 	case -EAGAIN:
+ 		rpc_sleep_on(&xprt->backlog, task, NULL);
+ 		dprintk("RPC:       waiting for request slot\n");
++	default:
++		task->tk_status = -EAGAIN;
+ 	}
+-	task->tk_status = -EAGAIN;
+ 	return;
+ out_init_req:
+ 	task->tk_status = 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0005-exofs-Fix-CRASH-on-very-early-IO-errors.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0005-exofs-Fix-CRASH-on-very-early-IO-errors.patch
new file mode 100644
index 0000000..0b0abbd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0005-exofs-Fix-CRASH-on-very-early-IO-errors.patch
@@ -0,0 +1,49 @@
+From afd117116e98d0444a0ace7d152207a54cc15ff5 Mon Sep 17 00:00:00 2001
+From: Boaz Harrosh <bharrosh@panasas.com>
+Date: Wed, 16 May 2012 14:22:21 +0300
+Subject: [PATCH 05/86] exofs: Fix CRASH on very early IO errors.
+
+commit 6abe4a87f7bc7978705c386dbba0ca0c7790b3ec upstream.
+
+If at exofs_fill_super() we had an early termination
+do to any error, like an IO error while reading the
+super-block. We would crash inside exofs_free_sbi().
+
+This is because sbi->oc.numdevs was set to 1, before
+we actually have a device table at all.
+
+Fix it by moving the sbi->oc.numdevs = 1 to after the
+allocation of the device table.
+
+Reported-by: Johannes Schild <JSchild@gmx.de>
+
+Stable: This is a bug since v3.2.0
+Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/exofs/super.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/exofs/super.c b/fs/exofs/super.c
+index e6085ec..7ed5000 100644
+--- a/fs/exofs/super.c
++++ b/fs/exofs/super.c
+@@ -745,7 +745,6 @@ static int exofs_fill_super(struct super_block *sb, void *data, int silent)
+ 	sbi->one_comp.obj.partition = opts->pid;
+ 	sbi->one_comp.obj.id = 0;
+ 	exofs_make_credential(sbi->one_comp.cred, &sbi->one_comp.obj);
+-	sbi->oc.numdevs = 1;
+ 	sbi->oc.single_comp = EC_SINGLE_COMP;
+ 	sbi->oc.comps = &sbi->one_comp;
+ 
+@@ -803,6 +802,7 @@ static int exofs_fill_super(struct super_block *sb, void *data, int silent)
+ 			goto free_sbi;
+ 
+ 		ore_comp_set_dev(&sbi->oc, 0, od);
++		sbi->oc.numdevs = 1;
+ 	}
+ 
+ 	__sbi_read_stats(sbi);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0006-cifs-fix-oops-while-traversing-open-file-list-try-4.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0006-cifs-fix-oops-while-traversing-open-file-list-try-4.patch
new file mode 100644
index 0000000..d54b0cd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0006-cifs-fix-oops-while-traversing-open-file-list-try-4.patch
@@ -0,0 +1,141 @@
+From 4efa0e1388965846f96dfa4afd84b6ee7560eec7 Mon Sep 17 00:00:00 2001
+From: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
+Date: Mon, 21 May 2012 09:20:12 -0500
+Subject: [PATCH 06/86] cifs: fix oops while traversing open file list (try
+ #4)
+
+commit 2c0c2a08bed7a3b791f88d09d16ace56acb3dd98 upstream.
+
+While traversing the linked list of open file handles, if the identfied
+file handle is invalid, a reopen is attempted and if it fails, we
+resume traversing where we stopped and cifs can oops while accessing
+invalid next element, for list might have changed.
+
+So mark the invalid file handle and attempt reopen if no
+valid file handle is found in rest of the list.
+If reopen fails, move the invalid file handle to the end of the list
+and start traversing the list again from the begining.
+Repeat this four times before giving up and returning an error if
+file reopen keeps failing.
+
+Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
+Reviewed-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/cifs/cifsglob.h |    1 +
+ fs/cifs/file.c     |   57 ++++++++++++++++++++++++++++++----------------------
+ 2 files changed, 34 insertions(+), 24 deletions(-)
+
+diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
+index c467ac8..2f3ff59 100644
+--- a/fs/cifs/cifsglob.h
++++ b/fs/cifs/cifsglob.h
+@@ -43,6 +43,7 @@
+ 
+ #define CIFS_MIN_RCV_POOL 4
+ 
++#define MAX_REOPEN_ATT	5 /* these many maximum attempts to reopen a file */
+ /*
+  * default attribute cache timeout (jiffies)
+  */
+diff --git a/fs/cifs/file.c b/fs/cifs/file.c
+index 0f7dc22..0bb785f 100644
+--- a/fs/cifs/file.c
++++ b/fs/cifs/file.c
+@@ -1534,10 +1534,11 @@ struct cifsFileInfo *find_readable_file(struct cifsInodeInfo *cifs_inode,
+ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
+ 					bool fsuid_only)
+ {
+-	struct cifsFileInfo *open_file;
++	struct cifsFileInfo *open_file, *inv_file = NULL;
+ 	struct cifs_sb_info *cifs_sb;
+ 	bool any_available = false;
+ 	int rc;
++	unsigned int refind = 0;
+ 
+ 	/* Having a null inode here (because mapping->host was set to zero by
+ 	the VFS or MM) should not happen but we had reports of on oops (due to
+@@ -1557,40 +1558,25 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode,
+ 
+ 	spin_lock(&cifs_file_list_lock);
+ refind_writable:
++	if (refind > MAX_REOPEN_ATT) {
++		spin_unlock(&cifs_file_list_lock);
++		return NULL;
++	}
+ 	list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
+ 		if (!any_available && open_file->pid != current->tgid)
+ 			continue;
+ 		if (fsuid_only && open_file->uid != current_fsuid())
+ 			continue;
+ 		if (OPEN_FMODE(open_file->f_flags) & FMODE_WRITE) {
+-			cifsFileInfo_get(open_file);
+-
+ 			if (!open_file->invalidHandle) {
+ 				/* found a good writable file */
++				cifsFileInfo_get(open_file);
+ 				spin_unlock(&cifs_file_list_lock);
+ 				return open_file;
++			} else {
++				if (!inv_file)
++					inv_file = open_file;
+ 			}
+-
+-			spin_unlock(&cifs_file_list_lock);
+-
+-			/* Had to unlock since following call can block */
+-			rc = cifs_reopen_file(open_file, false);
+-			if (!rc)
+-				return open_file;
+-
+-			/* if it fails, try another handle if possible */
+-			cFYI(1, "wp failed on reopen file");
+-			cifsFileInfo_put(open_file);
+-
+-			spin_lock(&cifs_file_list_lock);
+-
+-			/* else we simply continue to the next entry. Thus
+-			   we do not loop on reopen errors.  If we
+-			   can not reopen the file, for example if we
+-			   reconnected to a server with another client
+-			   racing to delete or lock the file we would not
+-			   make progress if we restarted before the beginning
+-			   of the loop here. */
+ 		}
+ 	}
+ 	/* couldn't find useable FH with same pid, try any available */
+@@ -1598,7 +1584,30 @@ refind_writable:
+ 		any_available = true;
+ 		goto refind_writable;
+ 	}
++
++	if (inv_file) {
++		any_available = false;
++		cifsFileInfo_get(inv_file);
++	}
++
+ 	spin_unlock(&cifs_file_list_lock);
++
++	if (inv_file) {
++		rc = cifs_reopen_file(inv_file, false);
++		if (!rc)
++			return inv_file;
++		else {
++			spin_lock(&cifs_file_list_lock);
++			list_move_tail(&inv_file->flist,
++					&cifs_inode->openFileList);
++			spin_unlock(&cifs_file_list_lock);
++			cifsFileInfo_put(inv_file);
++			spin_lock(&cifs_file_list_lock);
++			++refind;
++			goto refind_writable;
++		}
++	}
++
+ 	return NULL;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0007-Fix-dm-multipath-starvation-when-scsi-host-is-busy.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0007-Fix-dm-multipath-starvation-when-scsi-host-is-busy.patch
new file mode 100644
index 0000000..abd3752
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0007-Fix-dm-multipath-starvation-when-scsi-host-is-busy.patch
@@ -0,0 +1,61 @@
+From 49f60fdaf9a6a36e04829a74b3b1f28ab99dc96a Mon Sep 17 00:00:00 2001
+From: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
+Date: Tue, 22 May 2012 18:57:17 +0900
+Subject: [PATCH 07/86] Fix dm-multipath starvation when scsi host is busy
+
+commit b7e94a1686c5daef4f649f7f4f839cc294f07710 upstream.
+
+block congestion control doesn't have any concept of fairness across
+multiple queues.  This means that if SCSI reports the host as busy in
+the queue congestion control it can result in an unfair starvation
+situation in dm-mp if there are multiple multipath devices on the same
+host.  For example:
+http://www.redhat.com/archives/dm-devel/2012-May/msg00123.html
+
+The fix for this is to report only the sdev busy state (and ignore the
+host busy state) in the block congestion control call back.
+The host is still congested, but the SCSI subsystem will sort out the
+congestion in a fair way because it knows the relation between the
+queues and the host.
+
+[jejb: fixed up trailing whitespace]
+Reported-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
+Tested-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
+Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/scsi/scsi_lib.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
+index f85cfa6..f0ab58e 100644
+--- a/drivers/scsi/scsi_lib.c
++++ b/drivers/scsi/scsi_lib.c
+@@ -1382,16 +1382,19 @@ static int scsi_lld_busy(struct request_queue *q)
+ {
+ 	struct scsi_device *sdev = q->queuedata;
+ 	struct Scsi_Host *shost;
+-	struct scsi_target *starget;
+ 
+ 	if (!sdev)
+ 		return 0;
+ 
+ 	shost = sdev->host;
+-	starget = scsi_target(sdev);
+ 
+-	if (scsi_host_in_recovery(shost) || scsi_host_is_busy(shost) ||
+-	    scsi_target_is_busy(starget) || scsi_device_is_busy(sdev))
++	/*
++	 * Ignore host/starget busy state.
++	 * Since block layer does not have a concept of fairness across
++	 * multiple queues, congestion of host/starget needs to be handled
++	 * in SCSI layer.
++	 */
++	if (scsi_host_in_recovery(shost) || scsi_device_is_busy(sdev))
+ 		return 1;
+ 
+ 	return 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0008-ixp4xx-fix-compilation-by-adding-gpiolib-support.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0008-ixp4xx-fix-compilation-by-adding-gpiolib-support.patch
new file mode 100644
index 0000000..57522bf
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0008-ixp4xx-fix-compilation-by-adding-gpiolib-support.patch
@@ -0,0 +1,210 @@
+From ee8e09be6e0d533351740fc80d291bab8e2686c3 Mon Sep 17 00:00:00 2001
+From: Richard Cochran <richardcochran@gmail.com>
+Date: Wed, 23 May 2012 18:19:51 +0200
+Subject: [PATCH 08/86] ixp4xx: fix compilation by adding gpiolib support
+
+commit 9dde0ae3769875ec1370cb316e50c54b57d52c1a upstream.
+
+Once again, ixp4xx no longer even compiles. This patch fixes the issue
+by converting over to gpiolib. This patch was first made by Imre and
+posted by Marc, and I added in Russell's suggestion to empty the gpio
+header file.
+
+This fix should also go for 3.1, 3.2, 3.3, and 3.4.
+
+Signed-off-by: Richard Cochran <richardcochran@gmail.com>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/Kconfig                         |    2 +-
+ arch/arm/mach-ixp4xx/common.c            |   48 +++++++++++++++++-
+ arch/arm/mach-ixp4xx/include/mach/gpio.h |   79 +-----------------------------
+ 3 files changed, 48 insertions(+), 81 deletions(-)
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 26574f0..cad2ec2 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -520,7 +520,7 @@ config ARCH_IXP4XX
+ 	depends on MMU
+ 	select CLKSRC_MMIO
+ 	select CPU_XSCALE
+-	select GENERIC_GPIO
++	select ARCH_REQUIRE_GPIOLIB
+ 	select GENERIC_CLOCKEVENTS
+ 	select HAVE_SCHED_CLOCK
+ 	select MIGHT_HAVE_PCI
+diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
+index b86a005..caf28fc 100644
+--- a/arch/arm/mach-ixp4xx/common.c
++++ b/arch/arm/mach-ixp4xx/common.c
+@@ -29,6 +29,7 @@
+ #include <linux/clockchips.h>
+ #include <linux/io.h>
+ #include <linux/export.h>
++#include <linux/gpio.h>
+ 
+ #include <mach/udc.h>
+ #include <mach/hardware.h>
+@@ -106,7 +107,7 @@ static signed char irq2gpio[32] = {
+ 	 7,  8,  9, 10, 11, 12, -1, -1,
+ };
+ 
+-int gpio_to_irq(int gpio)
++static int ixp4xx_gpio_to_irq(struct gpio_chip *chip, unsigned gpio)
+ {
+ 	int irq;
+ 
+@@ -116,7 +117,6 @@ int gpio_to_irq(int gpio)
+ 	}
+ 	return -EINVAL;
+ }
+-EXPORT_SYMBOL(gpio_to_irq);
+ 
+ int irq_to_gpio(unsigned int irq)
+ {
+@@ -376,12 +376,56 @@ static struct platform_device *ixp46x_devices[] __initdata = {
+ unsigned long ixp4xx_exp_bus_size;
+ EXPORT_SYMBOL(ixp4xx_exp_bus_size);
+ 
++static int ixp4xx_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
++{
++	gpio_line_config(gpio, IXP4XX_GPIO_IN);
++
++	return 0;
++}
++
++static int ixp4xx_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,
++					int level)
++{
++	gpio_line_set(gpio, level);
++	gpio_line_config(gpio, IXP4XX_GPIO_OUT);
++
++	return 0;
++}
++
++static int ixp4xx_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
++{
++	int value;
++
++	gpio_line_get(gpio, &value);
++
++	return value;
++}
++
++static void ixp4xx_gpio_set_value(struct gpio_chip *chip, unsigned gpio,
++				  int value)
++{
++	gpio_line_set(gpio, value);
++}
++
++static struct gpio_chip ixp4xx_gpio_chip = {
++	.label			= "IXP4XX_GPIO_CHIP",
++	.direction_input	= ixp4xx_gpio_direction_input,
++	.direction_output	= ixp4xx_gpio_direction_output,
++	.get			= ixp4xx_gpio_get_value,
++	.set			= ixp4xx_gpio_set_value,
++	.to_irq			= ixp4xx_gpio_to_irq,
++	.base			= 0,
++	.ngpio			= 16,
++};
++
+ void __init ixp4xx_sys_init(void)
+ {
+ 	ixp4xx_exp_bus_size = SZ_16M;
+ 
+ 	platform_add_devices(ixp4xx_devices, ARRAY_SIZE(ixp4xx_devices));
+ 
++	gpiochip_add(&ixp4xx_gpio_chip);
++
+ 	if (cpu_is_ixp46x()) {
+ 		int region;
+ 
+diff --git a/arch/arm/mach-ixp4xx/include/mach/gpio.h b/arch/arm/mach-ixp4xx/include/mach/gpio.h
+index 83d6b4e..ef37f26 100644
+--- a/arch/arm/mach-ixp4xx/include/mach/gpio.h
++++ b/arch/arm/mach-ixp4xx/include/mach/gpio.h
+@@ -1,79 +1,2 @@
+-/*
+- * arch/arm/mach-ixp4xx/include/mach/gpio.h
+- *
+- * IXP4XX GPIO wrappers for arch-neutral GPIO calls
+- *
+- * Written by Milan Svoboda <msvoboda@ra.rockwell.com>
+- * Based on PXA implementation by Philipp Zabel <philipp.zabel@gmail.com>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- *
+- */
+-
+-#ifndef __ASM_ARCH_IXP4XX_GPIO_H
+-#define __ASM_ARCH_IXP4XX_GPIO_H
+-
+-#include <linux/kernel.h>
+-#include <mach/hardware.h>
+-
+-#define __ARM_GPIOLIB_COMPLEX
+-
+-static inline int gpio_request(unsigned gpio, const char *label)
+-{
+-	return 0;
+-}
+-
+-static inline void gpio_free(unsigned gpio)
+-{
+-	might_sleep();
+-
+-	return;
+-}
+-
+-static inline int gpio_direction_input(unsigned gpio)
+-{
+-	gpio_line_config(gpio, IXP4XX_GPIO_IN);
+-	return 0;
+-}
+-
+-static inline int gpio_direction_output(unsigned gpio, int level)
+-{
+-	gpio_line_set(gpio, level);
+-	gpio_line_config(gpio, IXP4XX_GPIO_OUT);
+-	return 0;
+-}
+-
+-static inline int gpio_get_value(unsigned gpio)
+-{
+-	int value;
+-
+-	gpio_line_get(gpio, &value);
+-
+-	return value;
+-}
+-
+-static inline void gpio_set_value(unsigned gpio, int value)
+-{
+-	gpio_line_set(gpio, value);
+-}
+-
+-#include <asm-generic/gpio.h>			/* cansleep wrappers */
+-
+-extern int gpio_to_irq(int gpio);
+-#define gpio_to_irq gpio_to_irq
+-extern int irq_to_gpio(unsigned int irq);
+-
+-#endif
++/* empty */
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0009-drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0009-drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd.patch
new file mode 100644
index 0000000..c470feb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0009-drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd.patch
@@ -0,0 +1,78 @@
+From b519a21cd90e7ce2e8e8474c5beb3671862018b3 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Sat, 12 May 2012 22:22:58 +0200
+Subject: [PATCH 09/86] drm/i915: properly handle interlaced bit for sdvo dtd
+ conversion
+
+commit 59d92bfa5f0cdf57f82f5181b0ad6af75c3fdf41 upstream.
+
+We've simply ignored this, which isn't too great. With this, interlaced
+1080i works on my HDMI screen connected through sdvo. For no apparent
+reason anything else still doesn't work as it should.
+
+While at it, give these magic numbers in the dtd proper names and
+add a comment that they match with EDID detailed timings.
+
+v2: Actually use the right bit for interlaced.
+
+Tested-by: Peter Ross <pross@xvid.org>
+Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_sdvo.c      |   12 ++++++++----
+ drivers/gpu/drm/i915/intel_sdvo_regs.h |    5 +++++
+ 2 files changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
+index 8eddcca..a8d8ee5 100644
+--- a/drivers/gpu/drm/i915/intel_sdvo.c
++++ b/drivers/gpu/drm/i915/intel_sdvo.c
+@@ -769,10 +769,12 @@ static void intel_sdvo_get_dtd_from_mode(struct intel_sdvo_dtd *dtd,
+ 		((v_sync_len & 0x30) >> 4);
+ 
+ 	dtd->part2.dtd_flags = 0x18;
++	if (mode->flags & DRM_MODE_FLAG_INTERLACE)
++		dtd->part2.dtd_flags |= DTD_FLAG_INTERLACE;
+ 	if (mode->flags & DRM_MODE_FLAG_PHSYNC)
+-		dtd->part2.dtd_flags |= 0x2;
++		dtd->part2.dtd_flags |= DTD_FLAG_HSYNC_POSITIVE;
+ 	if (mode->flags & DRM_MODE_FLAG_PVSYNC)
+-		dtd->part2.dtd_flags |= 0x4;
++		dtd->part2.dtd_flags |= DTD_FLAG_VSYNC_POSITIVE;
+ 
+ 	dtd->part2.sdvo_flags = 0;
+ 	dtd->part2.v_sync_off_high = v_sync_offset & 0xc0;
+@@ -806,9 +808,11 @@ static void intel_sdvo_get_mode_from_dtd(struct drm_display_mode * mode,
+ 	mode->clock = dtd->part1.clock * 10;
+ 
+ 	mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
+-	if (dtd->part2.dtd_flags & 0x2)
++	if (dtd->part2.dtd_flags & DTD_FLAG_INTERLACE)
++		mode->flags |= DRM_MODE_FLAG_INTERLACE;
++	if (dtd->part2.dtd_flags & DTD_FLAG_HSYNC_POSITIVE)
+ 		mode->flags |= DRM_MODE_FLAG_PHSYNC;
+-	if (dtd->part2.dtd_flags & 0x4)
++	if (dtd->part2.dtd_flags & DTD_FLAG_VSYNC_POSITIVE)
+ 		mode->flags |= DRM_MODE_FLAG_PVSYNC;
+ }
+ 
+diff --git a/drivers/gpu/drm/i915/intel_sdvo_regs.h b/drivers/gpu/drm/i915/intel_sdvo_regs.h
+index 4aa6f34..372f33b 100644
+--- a/drivers/gpu/drm/i915/intel_sdvo_regs.h
++++ b/drivers/gpu/drm/i915/intel_sdvo_regs.h
+@@ -61,6 +61,11 @@ struct intel_sdvo_caps {
+ 	u16 output_flags;
+ } __attribute__((packed));
+ 
++/* Note: SDVO detailed timing flags match EDID misc flags. */
++#define DTD_FLAG_HSYNC_POSITIVE (1 << 1)
++#define DTD_FLAG_VSYNC_POSITIVE (1 << 2)
++#define DTD_FLAG_INTERLACE	(1 << 7)
++
+ /** This matches the EDID DTD structure, more or less */
+ struct intel_sdvo_dtd {
+ 	struct {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0010-drm-i915-enable-vdd-when-switching-off-the-eDP-panel.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0010-drm-i915-enable-vdd-when-switching-off-the-eDP-panel.patch
new file mode 100644
index 0000000..78fa10a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0010-drm-i915-enable-vdd-when-switching-off-the-eDP-panel.patch
@@ -0,0 +1,97 @@
+From d915c2455a13d5067c95770d33dd71dae5fdabf0 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Sun, 20 May 2012 17:14:50 +0200
+Subject: [PATCH 10/86] drm/i915: enable vdd when switching off the eDP panel
+
+commit 6cb49835da0426f69a2931bc2a0a8156344b0e41 upstream.
+
+We have one bug report from a validation team that we get the eDP
+panel sequencing still somewhat wrong: We need to enable VDD while
+switching off the panel and backlight. Unfortunately that reporter
+seems to have fallen off the earth :(
+
+For another reporter this actually fixes a black panel issue because
+without this the backlight/panel gets confused and doesn't light up
+again.
+
+v2: I've forgotten to remove the vdd_off call in panel_off which is
+now bogus. This essentially reverts
+
+commit 17038de5f16569a25343cf68668f3b657eafb00e
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:   Mon Apr 16 22:43:42 2012 +0100
+
+    drm/i915/dp: Flush any outstanding work to turn the VDD off
+
+v3: the current panel_off code forces off the vdd power, too. Which is
+bogus and resulted in some funny warnings later on when we've tried to
+do aux channel communications with just the vdd forced on. Fix this,
+too.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=46312
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=43163
+Tested-by: Vincent Frentzel <zcecc22@gmail.com>
+Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2: nothing to revert here]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_dp.c |   17 ++++++++---------
+ 1 file changed, 8 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
+index 12eb789..d4c4937 100644
+--- a/drivers/gpu/drm/i915/intel_dp.c
++++ b/drivers/gpu/drm/i915/intel_dp.c
+@@ -1149,10 +1149,10 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
+ 
+ 	DRM_DEBUG_KMS("Turn eDP power off\n");
+ 
+-	WARN(intel_dp->want_panel_vdd, "Cannot turn power off while VDD is on\n");
++	WARN(!intel_dp->want_panel_vdd, "Need VDD to turn off panel\n");
+ 
+ 	pp = ironlake_get_pp_control(dev_priv);
+-	pp &= ~(POWER_TARGET_ON | EDP_FORCE_VDD | PANEL_POWER_RESET | EDP_BLC_ENABLE);
++	pp &= ~(POWER_TARGET_ON | PANEL_POWER_RESET | EDP_BLC_ENABLE);
+ 	I915_WRITE(PCH_PP_CONTROL, pp);
+ 	POSTING_READ(PCH_PP_CONTROL);
+ 
+@@ -1260,18 +1260,16 @@ static void intel_dp_prepare(struct drm_encoder *encoder)
+ {
+ 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ 
++
++	/* Make sure the panel is off before trying to change the mode. But also
++	 * ensure that we have vdd while we switch off the panel. */
++	ironlake_edp_panel_vdd_on(intel_dp);
+ 	ironlake_edp_backlight_off(intel_dp);
+ 	ironlake_edp_panel_off(intel_dp);
+ 
+-	/* Wake up the sink first */
+-	ironlake_edp_panel_vdd_on(intel_dp);
+ 	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
+ 	intel_dp_link_down(intel_dp);
+ 	ironlake_edp_panel_vdd_off(intel_dp, false);
+-
+-	/* Make sure the panel is off before trying to
+-	 * change the mode
+-	 */
+ }
+ 
+ static void intel_dp_commit(struct drm_encoder *encoder)
+@@ -1303,10 +1301,11 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)
+ 	uint32_t dp_reg = I915_READ(intel_dp->output_reg);
+ 
+ 	if (mode != DRM_MODE_DPMS_ON) {
++		/* Switching the panel off requires vdd. */
++		ironlake_edp_panel_vdd_on(intel_dp);
+ 		ironlake_edp_backlight_off(intel_dp);
+ 		ironlake_edp_panel_off(intel_dp);
+ 
+-		ironlake_edp_panel_vdd_on(intel_dp);
+ 		intel_dp_sink_dpms(intel_dp, mode);
+ 		intel_dp_link_down(intel_dp);
+ 		ironlake_edp_panel_vdd_off(intel_dp, false);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0011-drm-i915-Add-Clientron-E830-to-the-ignore-LVDS-list.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0011-drm-i915-Add-Clientron-E830-to-the-ignore-LVDS-list.patch
new file mode 100644
index 0000000..ad6ab9f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0011-drm-i915-Add-Clientron-E830-to-the-ignore-LVDS-list.patch
@@ -0,0 +1,37 @@
+From ef4b47456ac4610f22bb2920e5562a6f854193d6 Mon Sep 17 00:00:00 2001
+From: Joel Sass <jsass@disklessworkstations.com>
+Date: Tue, 10 Jan 2012 13:03:55 -0500
+Subject: [PATCH 11/86] drm/i915: Add Clientron E830 to the ignore LVDS list
+
+commit 44306ab302687b519a31aa498b954c1e26f95a6b upstream.
+
+Signed-off-by: Joel Sass <jsass@disklessworkstations.com>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Signed-off-by: Keith Packard <keithp@keithp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_lvds.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
+index 583c2d0..8b42354 100644
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -716,6 +716,14 @@ static const struct dmi_system_id intel_no_lvds[] = {
+ 		},
+ 	},
+ 	{
++                .callback = intel_no_lvds_dmi_callback,
++                .ident = "Clientron E830",
++                .matches = {
++                        DMI_MATCH(DMI_SYS_VENDOR, "Clientron"),
++                        DMI_MATCH(DMI_PRODUCT_NAME, "E830"),
++                },
++        },
++        {
+ 		.callback = intel_no_lvds_dmi_callback,
+ 		.ident = "Asus EeeBox PC EB1007",
+ 		.matches = {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0012-drm-i915-Ignore-LVDS-on-hp-t5745-and-hp-st5747-thin-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0012-drm-i915-Ignore-LVDS-on-hp-t5745-and-hp-st5747-thin-.patch
new file mode 100644
index 0000000..8ffca2f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0012-drm-i915-Ignore-LVDS-on-hp-t5745-and-hp-st5747-thin-.patch
@@ -0,0 +1,54 @@
+From 6beb441393de6232df05c7850c99d26dd5ebbded Mon Sep 17 00:00:00 2001
+From: Marc Gariepy <mgariepy@ubuntu.com>
+Date: Thu, 9 Feb 2012 09:35:21 -0500
+Subject: [PATCH 12/86] drm/i915: Ignore LVDS on hp t5745 and hp st5747 thin
+ client
+
+commit f5b8a7ed0405d48fd096acce48fbefbed77fb055 upstream.
+
+Add a no_lvds quirk for the HP t5745 and HP st5747 thin clients
+
+dmidecode for those thin clients are attached in thoses bugs:
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/911916
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/911920
+
+Signed-off-by: Marc Gariepy <mgariepy@ubuntu.com>
+Acked-by: Adam Jackson <ajax@redhat.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2: adjust context because these quirk entries aren't
+ consistently cc'd to stable and are now being applied out of order]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_lvds.c |   16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
+index 8b42354..8c8a242 100644
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -741,6 +741,22 @@ static const struct dmi_system_id intel_no_lvds[] = {
+ 	},
+ 	{
+ 		.callback = intel_no_lvds_dmi_callback,
++		.ident = "Hewlett-Packard t5745",
++		.matches = {
++			DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
++			DMI_MATCH(DMI_BOARD_NAME, "hp t5745"),
++		},
++	},
++	{
++		.callback = intel_no_lvds_dmi_callback,
++		.ident = "Hewlett-Packard st5747",
++		.matches = {
++			DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
++			DMI_MATCH(DMI_BOARD_NAME, "hp st5747"),
++		},
++	},
++	{
++		.callback = intel_no_lvds_dmi_callback,
+ 		.ident = "MSI Wind Box DC500",
+ 		.matches = {
+ 			DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0013-drm-i915-no-lvds-quirk-for-HP-t5740e-Thin-Client.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0013-drm-i915-no-lvds-quirk-for-HP-t5740e-Thin-Client.patch
new file mode 100644
index 0000000..dc269a7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0013-drm-i915-no-lvds-quirk-for-HP-t5740e-Thin-Client.patch
@@ -0,0 +1,40 @@
+From f2171756e0e65d51316644162826fd3c64774734 Mon Sep 17 00:00:00 2001
+From: Jan-Benedict Glaw <jan-benedict.glaw@getslash.de>
+Date: Tue, 22 May 2012 15:21:53 +0200
+Subject: [PATCH 13/86] drm/i915: no lvds quirk for HP t5740e Thin Client
+
+commit 3347111999870c37eab1b969e90af9fdaf0334ba upstream.
+
+This box has DisplayPort and VGA, but no LVDS. Product specs are at
+http://h10010.www1.hp.com/wwpc/us/en/sm/WF25a/12454-12454-321959-338927-3640406-4282707.html?dnr=1
+and dmidecode output can be found at http://www.getslash.de/bug_attachments/dmidecode-t5740e.txt
+
+Signed-off-by: Jan-Benedict Glaw <jbglaw@getslash.de>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_lvds.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
+index 8c8a242..ceec71b 100644
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -741,6 +741,14 @@ static const struct dmi_system_id intel_no_lvds[] = {
+ 	},
+ 	{
+ 		.callback = intel_no_lvds_dmi_callback,
++		.ident = "Hewlett-Packard HP t5740e Thin Client",
++		.matches = {
++			DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
++			DMI_MATCH(DMI_PRODUCT_NAME, "HP t5740e Thin Client"),
++		},
++	},
++	{
++		.callback = intel_no_lvds_dmi_callback,
+ 		.ident = "Hewlett-Packard t5745",
+ 		.matches = {
+ 			DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0014-drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0014-drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch
new file mode 100644
index 0000000..8a83f69
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0014-drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch
@@ -0,0 +1,66 @@
+From f3a0b43b245485fb298eac1ba14679bf95a2a88b Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Tue, 22 May 2012 21:41:25 +0200
+Subject: [PATCH 14/86] drm/i915: wait for a vblank to pass after tv detect
+
+commit bf2125e2f7e931b50a6c76ba0435ba001409ccbf upstream.
+
+Otherwise the hw will get confused and result in a black screen.
+
+This regression has been most likely introduce in
+
+commit 974b93315b2213b74a42a87e8a9d4fc8c0dbe90c
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:   Sun Sep 5 00:44:20 2010 +0100
+
+    drm/i915/tv: Poll for DAC state change
+
+That commit replace the first msleep(20) with a busy-loop, but failed
+to keep the 2nd msleep around. Later on we've replaced all these
+msleep(20) by proper vblanks.
+
+For reference also see the commit in xf86-video-intel:
+
+commit 1142be53eb8d2ee8a9b60ace5d49f0ba27332275
+Author: Jesse Barnes <jbarnes@hobbes.lan>
+Date:   Mon Jun 9 08:52:59 2008 -0700
+
+    Fix TV programming:  add vblank wait after TV_CTL writes
+
+    Fxies FDO bug #14000; we need to wait for vblank after
+    writing TV_CTL or following "DPMS on" calls may not actually enable the output.
+
+v2: As suggested by Chris Wilson, add a small comment to ensure that
+no one accidentally removes this vblank wait again - there really
+seems to be no sane explanation for why we need it, but it is
+required.
+
+Launchpad: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/763688
+Reported-and-Tested-by: Robert Lowery <rglowery@exemail.com.au>
+Cc: Rodrigo Vivi <rodrigo.vivi@gmail.com>
+Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_tv.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
+index 2b1fcad..12041fa 100644
+--- a/drivers/gpu/drm/i915/intel_tv.c
++++ b/drivers/gpu/drm/i915/intel_tv.c
+@@ -1307,6 +1307,11 @@ intel_tv_detect_type(struct intel_tv *intel_tv,
+ 
+ 	I915_WRITE(TV_DAC, save_tv_dac & ~TVDAC_STATE_CHG_EN);
+ 	I915_WRITE(TV_CTL, save_tv_ctl);
++	POSTING_READ(TV_CTL);
++
++	/* For unknown reasons the hw barfs if we don't do this vblank wait. */
++	intel_wait_for_vblank(intel_tv->base.base.dev,
++			      to_intel_crtc(intel_tv->base.base.crtc)->pipe);
+ 
+ 	/* Restore interrupt config */
+ 	if (connector->polled & DRM_CONNECTOR_POLL_HPD) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0015-drm-i915-Update-GEN6_RP_CONTROL-definitions.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0015-drm-i915-Update-GEN6_RP_CONTROL-definitions.patch
new file mode 100644
index 0000000..74edb53
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0015-drm-i915-Update-GEN6_RP_CONTROL-definitions.patch
@@ -0,0 +1,55 @@
+From f303698996052a0fcd44d1fbfbfa58a20d59a1e1 Mon Sep 17 00:00:00 2001
+From: Ben Widawsky <ben@bwidawsk.net>
+Date: Mon, 12 Dec 2011 19:21:59 -0800
+Subject: [PATCH 15/86] drm/i915: Update GEN6_RP_CONTROL definitions
+
+commit 6ed55ee7da15329476174bc5821dbc723f671f44 upstream.
+
+This matches the modern specs more accurately.
+
+This will be used by the following patch to fix the way we display RC
+status.
+
+Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
+Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Signed-off-by: Keith Packard <keithp@keithp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_reg.h      |    6 +++++-
+ drivers/gpu/drm/i915/intel_display.c |    2 +-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+index a1d53b6..06ec1e5 100644
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
+@@ -3533,7 +3533,11 @@
+ #define   GEN6_CAGF_MASK			(0x7f << GEN6_CAGF_SHIFT)
+ #define GEN6_RP_CONTROL				0xA024
+ #define   GEN6_RP_MEDIA_TURBO			(1<<11)
+-#define   GEN6_RP_USE_NORMAL_FREQ		(1<<9)
++#define   GEN6_RP_MEDIA_MODE_MASK		(3<<9)
++#define   GEN6_RP_MEDIA_HW_TURBO_MODE		(3<<9)
++#define   GEN6_RP_MEDIA_HW_NORMAL_MODE		(2<<9)
++#define   GEN6_RP_MEDIA_HW_MODE			(1<<9)
++#define   GEN6_RP_MEDIA_SW_MODE			(0<<9)
+ #define   GEN6_RP_MEDIA_IS_GFX			(1<<8)
+ #define   GEN6_RP_ENABLE			(1<<7)
+ #define   GEN6_RP_UP_IDLE_MIN			(0x1<<3)
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 3ff980d..ed27fbc 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -8005,7 +8005,7 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
+ 	I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10);
+ 	I915_WRITE(GEN6_RP_CONTROL,
+ 		   GEN6_RP_MEDIA_TURBO |
+-		   GEN6_RP_USE_NORMAL_FREQ |
++		   GEN6_RP_MEDIA_HW_MODE |
+ 		   GEN6_RP_MEDIA_IS_GFX |
+ 		   GEN6_RP_ENABLE |
+ 		   GEN6_RP_UP_BUSY_AVG |
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0016-drm-i915-always-use-RPNSWREQ-for-turbo-change-reques.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0016-drm-i915-always-use-RPNSWREQ-for-turbo-change-reques.patch
new file mode 100644
index 0000000..5a9ce7b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0016-drm-i915-always-use-RPNSWREQ-for-turbo-change-reques.patch
@@ -0,0 +1,39 @@
+From f3c8f039e644d5ce7961567174a9d5b8ebb4b447 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Tue, 22 May 2012 09:30:33 -0700
+Subject: [PATCH 16/86] drm/i915: always use RPNSWREQ for turbo change
+ requests
+
+commit 89ba829e38bd500f438bc08af4229204c8ed7f35 upstream.
+
+Media turbo requests can either use RPVSWREQ or RPNSWREQ to indicate
+what the interrupt handler should do.  Since we only deal with the
+latter in our turbo code, make the media engine use that for turbo
+requests.
+
+Tested-by: Joe Bloggsian <joebloggsian@gmail.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2: adjust filename]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_display.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index ed27fbc..41bbe78 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -8005,7 +8005,7 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv)
+ 	I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10);
+ 	I915_WRITE(GEN6_RP_CONTROL,
+ 		   GEN6_RP_MEDIA_TURBO |
+-		   GEN6_RP_MEDIA_HW_MODE |
++		   GEN6_RP_MEDIA_HW_NORMAL_MODE |
+ 		   GEN6_RP_MEDIA_IS_GFX |
+ 		   GEN6_RP_ENABLE |
+ 		   GEN6_RP_UP_BUSY_AVG |
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0017-solos-pci-Fix-DMA-support.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0017-solos-pci-Fix-DMA-support.patch
new file mode 100644
index 0000000..8767291
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0017-solos-pci-Fix-DMA-support.patch
@@ -0,0 +1,51 @@
+From 44882d3e1cf0d691b04f438f70a32e6b918961d7 Mon Sep 17 00:00:00 2001
+From: David Woodhouse <dwmw2@infradead.org>
+Date: Thu, 24 May 2012 04:58:27 +0000
+Subject: [PATCH 17/86] solos-pci: Fix DMA support
+
+commit b4bd8ad9bb311e8536f726f7a633620ccd358cde upstream.
+
+DMA support has finally made its way to the top of the TODO list, having
+realised that a Geode using MMIO can't keep up with two ADSL2+ lines
+each running at 21Mb/s.
+
+This patch fixes a couple of bugs in the DMA support in the driver, so
+once the corresponding FPGA update is complete and tested everything
+should work properly.
+
+We weren't storing the currently-transmitting skb, so we were never
+unmapping it and never freeing/popping it when the TX was done.
+And the addition of pci_set_master() is fairly self-explanatory.
+
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/atm/solos-pci.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
+index 5d1d076..d452592 100644
+--- a/drivers/atm/solos-pci.c
++++ b/drivers/atm/solos-pci.c
+@@ -984,6 +984,7 @@ static uint32_t fpga_tx(struct solos_card *card)
+ 			} else if (skb && card->using_dma) {
+ 				SKB_CB(skb)->dma_addr = pci_map_single(card->dev, skb->data,
+ 								       skb->len, PCI_DMA_TODEVICE);
++				card->tx_skb[port] = skb;
+ 				iowrite32(SKB_CB(skb)->dma_addr,
+ 					  card->config_regs + TX_DMA_ADDR(port));
+ 			}
+@@ -1152,7 +1153,8 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
+ 		db_fpga_upgrade = db_firmware_upgrade = 0;
+ 	}
+ 
+-	if (card->fpga_version >= DMA_SUPPORTED){
++	if (card->fpga_version >= DMA_SUPPORTED) {
++		pci_set_master(dev);
+ 		card->using_dma = 1;
+ 	} else {
+ 		card->using_dma = 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0018-microblaze-Do-not-select-GENERIC_GPIO-by-default.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0018-microblaze-Do-not-select-GENERIC_GPIO-by-default.patch
new file mode 100644
index 0000000..0aa2bca
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0018-microblaze-Do-not-select-GENERIC_GPIO-by-default.patch
@@ -0,0 +1,42 @@
+From d821eff0a262c36772be73973e20aea13568911e Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Mon, 9 Apr 2012 15:05:44 +0200
+Subject: [PATCH 18/86] microblaze: Do not select GENERIC_GPIO by default
+
+commit 59516b07b4ffa7e607a5787674ea3c405f1b390c upstream.
+
+The microblaze architecture does not provide a native GPIO API implementation
+nor requires GPIOLIB, but still selects GENERIC_GPIO by default. As a result the
+following build error occurs, if GPIOLIB is not selected:
+
+	include/asm-generic/gpio.h: In function 'gpio_get_value_cansleep':
+	include/asm-generic/gpio.h:218: error: implicit declaration of function '__gpio_get_value'
+	include/asm-generic/gpio.h: In function 'gpio_set_value_cansleep':
+	include/asm-generic/gpio.h:224: error: implicit declaration of function '__gpio_set_value'
+
+This patch addresses the issue by not selecting GENERIC_GPIO by default. This
+causes the GPIO API to be stubbed out if no implementation is provided.
+
+Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
+Tested-by: Michal Simek <monstr@monstr.eu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/microblaze/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
+index e446bab..a93ed04 100644
+--- a/arch/microblaze/Kconfig
++++ b/arch/microblaze/Kconfig
+@@ -46,7 +46,7 @@ config GENERIC_CLOCKEVENTS
+ 	def_bool y
+ 
+ config GENERIC_GPIO
+-	def_bool y
++	bool
+ 
+ config GENERIC_CSUM
+ 	def_bool y
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0019-fix-boot-failure-on-32-bit-systems-caused-by-branch-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0019-fix-boot-failure-on-32-bit-systems-caused-by-branch-.patch
new file mode 100644
index 0000000..5bf5053
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0019-fix-boot-failure-on-32-bit-systems-caused-by-branch-.patch
@@ -0,0 +1,49 @@
+From c3697804cdbf0ae3b5ae49ce49abea593e03e08c Mon Sep 17 00:00:00 2001
+From: John David Anglin <dave.anglin@bell.net>
+Date: Thu, 17 May 2012 10:34:34 -0400
+Subject: [PATCH 19/86] fix boot failure on 32-bit systems caused by branch
+ stubs placed before .text
+
+commit ed5fb2471b7060767957fb964eb1aaec71533ab1 upstream.
+
+In certain configurations, the resulting kernel becomes too large to boot
+because the linker places the long branch stubs for the merged .text section
+at the very start of the image.  As a result, the initial transfer of control
+jumps to an unexpected location.  Fix this by placing the head text in a
+separate section so the stubs for .text are not at the start of the image.
+
+Signed-off-by: John David Anglin <dave.anglin@bell.net>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/parisc/kernel/vmlinux.lds.S |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S
+index fa6f2b8..64a9998 100644
+--- a/arch/parisc/kernel/vmlinux.lds.S
++++ b/arch/parisc/kernel/vmlinux.lds.S
+@@ -50,8 +50,10 @@ SECTIONS
+ 	. = KERNEL_BINARY_TEXT_START;
+ 
+ 	_text = .;		/* Text and read-only data */
+-	.text ALIGN(16) : {
++	.head ALIGN(16) : {
+ 		HEAD_TEXT
++	} = 0
++	.text ALIGN(16) : {
+ 		TEXT_TEXT
+ 		SCHED_TEXT
+ 		LOCK_TEXT
+@@ -65,7 +67,7 @@ SECTIONS
+ 		*(.fixup)
+ 		*(.lock.text)		/* out-of-line lock text */
+ 		*(.gnu.warning)
+-	} = 0
++	}
+ 	/* End of text section */
+ 	_etext = .;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0020-fix-TLB-fault-path-on-PA2.0-narrow-systems.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0020-fix-TLB-fault-path-on-PA2.0-narrow-systems.patch
new file mode 100644
index 0000000..45a00c5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0020-fix-TLB-fault-path-on-PA2.0-narrow-systems.patch
@@ -0,0 +1,142 @@
+From 4eb3b7f46aefa5899d72767e3bf1a826fd563a7a Mon Sep 17 00:00:00 2001
+From: James Bottomley <JBottomley@Parallels.com>
+Date: Mon, 21 May 2012 07:49:01 +0100
+Subject: [PATCH 20/86] fix TLB fault path on PA2.0 narrow systems
+
+commit 2f649c1f6f0fef445ce79a19b79e5ce8fe9d7f19 upstream.
+
+commit 5e185581d7c46ddd33cd9c01106d1fc86efb9376
+Author: James Bottomley <JBottomley@Parallels.com>
+
+    [PARISC] fix PA1.1 oops on boot
+
+Didn't quite fix the crash on boot.  It moved it from PA1.1 processors to
+PA2.0 narrow kernels.  The final fix is to make sure the [id]tlb_miss_20 paths
+also work.  Even on narrow systems, these paths require using the wide
+instructions becuase the tlb insertion format is wide.  Fix this by
+conditioning the dep[wd],z on whether we're being called from _11 or _20[w]
+paths.
+
+Tested-by: Helge Deller <deller@gmx.de>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/parisc/kernel/entry.S |   30 +++++++++++++++++-------------
+ 1 file changed, 17 insertions(+), 13 deletions(-)
+
+diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S
+index 5350342..07ef351 100644
+--- a/arch/parisc/kernel/entry.S
++++ b/arch/parisc/kernel/entry.S
+@@ -552,7 +552,7 @@
+ 	 * entry (identifying the physical page) and %r23 up with
+ 	 * the from tlb entry (or nothing if only a to entry---for
+ 	 * clear_user_page_asm) */
+-	.macro		do_alias	spc,tmp,tmp1,va,pte,prot,fault
++	.macro		do_alias	spc,tmp,tmp1,va,pte,prot,fault,patype
+ 	cmpib,COND(<>),n 0,\spc,\fault
+ 	ldil		L%(TMPALIAS_MAP_START),\tmp
+ #if defined(CONFIG_64BIT) && (TMPALIAS_MAP_START >= 0x80000000)
+@@ -581,11 +581,15 @@
+ 	 */
+ 	cmpiclr,=	0x01,\tmp,%r0
+ 	ldi		(_PAGE_DIRTY|_PAGE_READ|_PAGE_WRITE),\prot
+-#ifdef CONFIG_64BIT
++.ifc \patype,20
+ 	depd,z		\prot,8,7,\prot
+-#else
++.else
++.ifc \patype,11
+ 	depw,z		\prot,8,7,\prot
+-#endif
++.else
++	.error "undefined PA type to do_alias"
++.endif
++.endif
+ 	/*
+ 	 * OK, it is in the temp alias region, check whether "from" or "to".
+ 	 * Check "subtle" note in pacache.S re: r23/r26.
+@@ -1189,7 +1193,7 @@ dtlb_miss_20w:
+ 	nop
+ 
+ dtlb_check_alias_20w:
+-	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault
++	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault,20
+ 
+ 	idtlbt          pte,prot
+ 
+@@ -1213,7 +1217,7 @@ nadtlb_miss_20w:
+ 	nop
+ 
+ nadtlb_check_alias_20w:
+-	do_alias	spc,t0,t1,va,pte,prot,nadtlb_emulate
++	do_alias	spc,t0,t1,va,pte,prot,nadtlb_emulate,20
+ 
+ 	idtlbt          pte,prot
+ 
+@@ -1245,7 +1249,7 @@ dtlb_miss_11:
+ 	nop
+ 
+ dtlb_check_alias_11:
+-	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault
++	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault,11
+ 
+ 	idtlba          pte,(va)
+ 	idtlbp          prot,(va)
+@@ -1277,7 +1281,7 @@ nadtlb_miss_11:
+ 	nop
+ 
+ nadtlb_check_alias_11:
+-	do_alias	spc,t0,t1,va,pte,prot,nadtlb_emulate
++	do_alias	spc,t0,t1,va,pte,prot,nadtlb_emulate,11
+ 
+ 	idtlba          pte,(va)
+ 	idtlbp          prot,(va)
+@@ -1304,7 +1308,7 @@ dtlb_miss_20:
+ 	nop
+ 
+ dtlb_check_alias_20:
+-	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault
++	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault,20
+ 	
+ 	idtlbt          pte,prot
+ 
+@@ -1330,7 +1334,7 @@ nadtlb_miss_20:
+ 	nop
+ 
+ nadtlb_check_alias_20:
+-	do_alias	spc,t0,t1,va,pte,prot,nadtlb_emulate
++	do_alias	spc,t0,t1,va,pte,prot,nadtlb_emulate,20
+ 
+ 	idtlbt          pte,prot
+ 
+@@ -1457,7 +1461,7 @@ naitlb_miss_20w:
+ 	nop
+ 
+ naitlb_check_alias_20w:
+-	do_alias	spc,t0,t1,va,pte,prot,naitlb_fault
++	do_alias	spc,t0,t1,va,pte,prot,naitlb_fault,20
+ 
+ 	iitlbt		pte,prot
+ 
+@@ -1511,7 +1515,7 @@ naitlb_miss_11:
+ 	nop
+ 
+ naitlb_check_alias_11:
+-	do_alias	spc,t0,t1,va,pte,prot,itlb_fault
++	do_alias	spc,t0,t1,va,pte,prot,itlb_fault,11
+ 
+ 	iitlba          pte,(%sr0, va)
+ 	iitlbp          prot,(%sr0, va)
+@@ -1557,7 +1561,7 @@ naitlb_miss_20:
+ 	nop
+ 
+ naitlb_check_alias_20:
+-	do_alias	spc,t0,t1,va,pte,prot,naitlb_fault
++	do_alias	spc,t0,t1,va,pte,prot,naitlb_fault,20
+ 
+ 	iitlbt          pte,prot
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0021-iwlwifi-update-BT-traffic-load-states-correctly.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0021-iwlwifi-update-BT-traffic-load-states-correctly.patch
new file mode 100644
index 0000000..ae85f30
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0021-iwlwifi-update-BT-traffic-load-states-correctly.patch
@@ -0,0 +1,43 @@
+From d6c8a717c65d6ffaf27d7eead214275785dfd47d Mon Sep 17 00:00:00 2001
+From: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
+Date: Wed, 16 May 2012 22:35:57 +0200
+Subject: [PATCH 21/86] iwlwifi: update BT traffic load states correctly
+
+commit 882dde8eb0d49ce0f853f8f4084dde56a21fe55f upstream.
+
+When BT traffic load changes from its
+previous state, a new LQ command needs to be
+sent down to the firmware. This needs to
+be done only once per change. The state
+variable that keeps track of this change is
+last_bt_traffic_load. However, it was not
+being updated when the change had been
+handled. Not updating this variable was
+causing a flood of advanced BT config
+commands to be sent to the firmware. Fix
+this.
+
+Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-agn-rs.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+index 66118ce..9ba2c1b 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+@@ -886,6 +886,7 @@ static void rs_bt_update_lq(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
+ 	if ((priv->bt_traffic_load != priv->last_bt_traffic_load) ||
+ 	    (priv->bt_full_concurrent != full_concurrent)) {
+ 		priv->bt_full_concurrent = full_concurrent;
++		priv->last_bt_traffic_load = priv->bt_traffic_load;
+ 
+ 		/* Update uCode's rate table. */
+ 		tbl = &(lq_sta->lq_info[lq_sta->active_tbl]);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0022-iwlwifi-do-not-use-shadow-registers-by-default.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0022-iwlwifi-do-not-use-shadow-registers-by-default.patch
new file mode 100644
index 0000000..e07210e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0022-iwlwifi-do-not-use-shadow-registers-by-default.patch
@@ -0,0 +1,84 @@
+From 1b2a3d0a7a21c97a9803bafe00e150d6b7d6b7c3 Mon Sep 17 00:00:00 2001
+From: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
+Date: Wed, 16 May 2012 22:35:59 +0200
+Subject: [PATCH 22/86] iwlwifi: do not use shadow registers by default
+
+commit 66a770729a5cdd24efed8afa5258f81232d8bba2 upstream.
+
+Shadow registers in the device are meant to
+allow the driver to update certain device
+registers without needing to wake up all
+components of the device. However, using
+this feature in the device causes
+communication between the driver and the
+device to become unreliable, resulting in
+host command timeouts.
+
+Disable this feature by default till a fix is
+available for the bug.
+
+Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-2000.c |    4 ++--
+ drivers/net/wireless/iwlwifi/iwl-6000.c |    6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-2000.c b/drivers/net/wireless/iwlwifi/iwl-2000.c
+index 9823e41..a97a52a 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-2000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-2000.c
+@@ -211,7 +211,7 @@ static struct iwl_base_params iwl2000_base_params = {
+ 	.chain_noise_scale = 1000,
+ 	.wd_timeout = IWL_DEF_WD_TIMEOUT,
+ 	.max_event_log_size = 512,
+-	.shadow_reg_enable = true,
++	.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
+ 	.hd_v2 = true,
+ };
+ 
+@@ -230,7 +230,7 @@ static struct iwl_base_params iwl2030_base_params = {
+ 	.chain_noise_scale = 1000,
+ 	.wd_timeout = IWL_LONG_WD_TIMEOUT,
+ 	.max_event_log_size = 512,
+-	.shadow_reg_enable = true,
++	.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
+ 	.hd_v2 = true,
+ };
+ 
+diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
+index b4f809c..0b9f797 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
+@@ -308,7 +308,7 @@ static struct iwl_base_params iwl6000_base_params = {
+ 	.chain_noise_scale = 1000,
+ 	.wd_timeout = IWL_DEF_WD_TIMEOUT,
+ 	.max_event_log_size = 512,
+-	.shadow_reg_enable = true,
++	.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
+ };
+ 
+ static struct iwl_base_params iwl6050_base_params = {
+@@ -325,7 +325,7 @@ static struct iwl_base_params iwl6050_base_params = {
+ 	.chain_noise_scale = 1500,
+ 	.wd_timeout = IWL_DEF_WD_TIMEOUT,
+ 	.max_event_log_size = 1024,
+-	.shadow_reg_enable = true,
++	.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
+ };
+ static struct iwl_base_params iwl6000_g2_base_params = {
+ 	.eeprom_size = OTP_LOW_IMAGE_SIZE,
+@@ -341,7 +341,7 @@ static struct iwl_base_params iwl6000_g2_base_params = {
+ 	.chain_noise_scale = 1000,
+ 	.wd_timeout = IWL_LONG_WD_TIMEOUT,
+ 	.max_event_log_size = 512,
+-	.shadow_reg_enable = true,
++	.shadow_reg_enable = false, /* TODO: fix bugs using this feature */
+ };
+ 
+ static struct iwl_ht_params iwl6000_ht_params = {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0023-wl1251-fix-oops-on-early-interrupt.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0023-wl1251-fix-oops-on-early-interrupt.patch
new file mode 100644
index 0000000..63e29df
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0023-wl1251-fix-oops-on-early-interrupt.patch
@@ -0,0 +1,69 @@
+From 430e704f68d8b8c21a7d764e1f0ea94614a303e2 Mon Sep 17 00:00:00 2001
+From: Grazvydas Ignotas <notasas@gmail.com>
+Date: Fri, 18 May 2012 03:04:08 +0300
+Subject: [PATCH 23/86] wl1251: fix oops on early interrupt
+
+commit f380f2c4a12e913356bd49f8790ec1063c4fe9f8 upstream.
+
+This driver disables interrupt just after requesting it and enables it
+later, after interface is up. However currently there is a time window
+between request_irq() and disable_irq() where if interrupt arrives, the
+driver oopses because it's not yet ready to process it. This can be
+reproduced by inserting the module, associating and removing the module
+multiple times.
+
+Eliminate this race by setting IRQF_NOAUTOEN flag before request_irq().
+
+Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2: adjust filename]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/wl1251/sdio.c |    2 +-
+ drivers/net/wireless/wl1251/spi.c  |    3 +--
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/wireless/wl1251/sdio.c b/drivers/net/wireless/wl1251/sdio.c
+index 1b851f6..e2750a1 100644
+--- a/drivers/net/wireless/wl1251/sdio.c
++++ b/drivers/net/wireless/wl1251/sdio.c
+@@ -260,6 +260,7 @@ static int wl1251_sdio_probe(struct sdio_func *func,
+ 	}
+ 
+ 	if (wl->irq) {
++		irq_set_status_flags(wl->irq, IRQ_NOAUTOEN);
+ 		ret = request_irq(wl->irq, wl1251_line_irq, 0, "wl1251", wl);
+ 		if (ret < 0) {
+ 			wl1251_error("request_irq() failed: %d", ret);
+@@ -267,7 +268,6 @@ static int wl1251_sdio_probe(struct sdio_func *func,
+ 		}
+ 
+ 		irq_set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
+-		disable_irq(wl->irq);
+ 
+ 		wl1251_sdio_ops.enable_irq = wl1251_enable_line_irq;
+ 		wl1251_sdio_ops.disable_irq = wl1251_disable_line_irq;
+diff --git a/drivers/net/wireless/wl1251/spi.c b/drivers/net/wireless/wl1251/spi.c
+index eaa5f95..134ae9c 100644
+--- a/drivers/net/wireless/wl1251/spi.c
++++ b/drivers/net/wireless/wl1251/spi.c
+@@ -281,6 +281,7 @@ static int __devinit wl1251_spi_probe(struct spi_device *spi)
+ 
+ 	wl->use_eeprom = pdata->use_eeprom;
+ 
++	irq_set_status_flags(wl->irq, IRQ_NOAUTOEN);
+ 	ret = request_irq(wl->irq, wl1251_irq, 0, DRIVER_NAME, wl);
+ 	if (ret < 0) {
+ 		wl1251_error("request_irq() failed: %d", ret);
+@@ -289,8 +290,6 @@ static int __devinit wl1251_spi_probe(struct spi_device *spi)
+ 
+ 	irq_set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
+ 
+-	disable_irq(wl->irq);
+-
+ 	ret = wl1251_init_ieee80211(wl);
+ 	if (ret)
+ 		goto out_irq;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0024-NFSv4-Map-NFS4ERR_SHARE_DENIED-into-an-EACCES-error-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0024-NFSv4-Map-NFS4ERR_SHARE_DENIED-into-an-EACCES-error-.patch
new file mode 100644
index 0000000..0eacfc1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0024-NFSv4-Map-NFS4ERR_SHARE_DENIED-into-an-EACCES-error-.patch
@@ -0,0 +1,37 @@
+From b93bea69232a6e245feb4094ffbb43181a057a31 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Mon, 28 May 2012 11:36:28 -0400
+Subject: [PATCH 24/86] NFSv4: Map NFS4ERR_SHARE_DENIED into an EACCES error
+ instead of EIO
+
+commit fb13bfa7e1bcfdcfdece47c24b62f1a1cad957e9 upstream.
+
+If a file OPEN is denied due to a share lock, the resulting
+NFS4ERR_SHARE_DENIED is currently mapped to the default EIO.
+This patch adds a more appropriate mapping, and brings Linux
+into line with what Solaris 10 does.
+
+See https://bugzilla.kernel.org/show_bug.cgi?id=43286
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/nfs/nfs4proc.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index 03d9b90..a3cae5d 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -96,6 +96,8 @@ static int nfs4_map_errors(int err)
+ 	case -NFS4ERR_BADOWNER:
+ 	case -NFS4ERR_BADNAME:
+ 		return -EINVAL;
++	case -NFS4ERR_SHARE_DENIED:
++		return -EACCES;
+ 	default:
+ 		dprintk("%s could not handle NFSv4 error %d\n",
+ 				__func__, -err);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0025-drm-radeon-fix-XFX-quirk.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0025-drm-radeon-fix-XFX-quirk.patch
new file mode 100644
index 0000000..4f3f165
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0025-drm-radeon-fix-XFX-quirk.patch
@@ -0,0 +1,40 @@
+From cce4054d32b88b0f9402746063937e36af798333 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 23 May 2012 11:48:59 -0400
+Subject: [PATCH 25/86] drm/radeon: fix XFX quirk
+
+commit 1ebf169ad4dc68f18cc0dab35163b0f324fc6c41 upstream.
+
+Only override the ddc bus if the connector doesn't have
+a valid one.  The existing code overrode the ddc bus for
+all connectors even if it had ddc bus.
+
+Fixes ddc on another XFX card with the same pci ids that
+was broken by the quirk overwriting the correct ddc bus.
+
+Reported-by: Mehdi Aqadjani Memar <m.aqadjanimemar@student.ru.nl>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/radeon/radeon_atombios.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
+index 8e1532f..9d2c369 100644
+--- a/drivers/gpu/drm/radeon/radeon_atombios.c
++++ b/drivers/gpu/drm/radeon/radeon_atombios.c
+@@ -438,7 +438,9 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
+ 	 */
+ 	if ((dev->pdev->device == 0x9498) &&
+ 	    (dev->pdev->subsystem_vendor == 0x1682) &&
+-	    (dev->pdev->subsystem_device == 0x2452)) {
++	    (dev->pdev->subsystem_device == 0x2452) &&
++	    (i2c_bus->valid == false) &&
++	    !(supported_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))) {
+ 		struct radeon_device *rdev = dev->dev_private;
+ 		*i2c_bus = radeon_lookup_i2c_gpio(rdev, 0x93);
+ 	}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0026-ath9k-fix-a-use-after-free-bug-when-ath_tx_setup_buf.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0026-ath9k-fix-a-use-after-free-bug-when-ath_tx_setup_buf.patch
new file mode 100644
index 0000000..ee6bd61
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0026-ath9k-fix-a-use-after-free-bug-when-ath_tx_setup_buf.patch
@@ -0,0 +1,92 @@
+From 1e0f99c0848ee2dfcc5a814f141c2c81c20a23ca Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Thu, 24 May 2012 14:32:20 +0200
+Subject: [PATCH 26/86] ath9k: fix a use-after-free-bug when
+ ath_tx_setup_buffer() fails
+
+commit 81357a281dcc454841532c46b30e6f2ba12b73ea upstream.
+
+ath_tx_setup_buffer() can fail if there is no ath_buf left, or if mapping DMA
+failed. In this case it frees the skb passed to it.
+If ath_tx_setup_buffer is called from ath_tx_form_aggr, the skb is still
+linked into the tid buffer list and must be dequeued before being released.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/ath/ath9k/xmit.c |   16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
+index 03b0a65..76fd277 100644
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -64,7 +64,8 @@ static void ath_tx_update_baw(struct ath_softc *sc, struct ath_atx_tid *tid,
+ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,
+ 					   struct ath_txq *txq,
+ 					   struct ath_atx_tid *tid,
+-					   struct sk_buff *skb);
++					   struct sk_buff *skb,
++					   bool dequeue);
+ 
+ enum {
+ 	MCS_HT20,
+@@ -761,7 +762,7 @@ static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc,
+ 		fi = get_frame_info(skb);
+ 		bf = fi->bf;
+ 		if (!fi->bf)
+-			bf = ath_tx_setup_buffer(sc, txq, tid, skb);
++			bf = ath_tx_setup_buffer(sc, txq, tid, skb, true);
+ 
+ 		if (!bf)
+ 			continue;
+@@ -1669,7 +1670,7 @@ static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
+ 		return;
+ 	}
+ 
+-	bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb);
++	bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false);
+ 	if (!bf)
+ 		return;
+ 
+@@ -1696,7 +1697,7 @@ static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq,
+ 
+ 	bf = fi->bf;
+ 	if (!bf)
+-		bf = ath_tx_setup_buffer(sc, txq, tid, skb);
++		bf = ath_tx_setup_buffer(sc, txq, tid, skb, false);
+ 
+ 	if (!bf)
+ 		return;
+@@ -1761,7 +1762,8 @@ u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate)
+ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,
+ 					   struct ath_txq *txq,
+ 					   struct ath_atx_tid *tid,
+-					   struct sk_buff *skb)
++					   struct sk_buff *skb,
++					   bool dequeue)
+ {
+ 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+ 	struct ath_frame_info *fi = get_frame_info(skb);
+@@ -1802,6 +1804,8 @@ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,
+ 	return bf;
+ 
+ error:
++	if (dequeue)
++		__skb_unlink(skb, &tid->buf_q);
+ 	dev_kfree_skb_any(skb);
+ 	return NULL;
+ }
+@@ -1833,7 +1837,7 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb,
+ 		 */
+ 		ath_tx_send_ampdu(sc, tid, skb, txctl);
+ 	} else {
+-		bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb);
++		bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb, false);
+ 		if (!bf)
+ 			goto out;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0027-mac80211-fix-ADDBA-declined-after-suspend-with-wowla.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0027-mac80211-fix-ADDBA-declined-after-suspend-with-wowla.patch
new file mode 100644
index 0000000..d357b19
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0027-mac80211-fix-ADDBA-declined-after-suspend-with-wowla.patch
@@ -0,0 +1,53 @@
+From 8446a84cc5885f2d4b3816dccac474f97fc047a9 Mon Sep 17 00:00:00 2001
+From: Eyal Shapira <eyal@wizery.com>
+Date: Tue, 29 May 2012 02:00:22 -0700
+Subject: [PATCH 27/86] mac80211: fix ADDBA declined after suspend with wowlan
+
+commit 7b21aea04d084916ac4e0e8852dcc9cd60ec0d1d upstream.
+
+WLAN_STA_BLOCK_BA is set while suspending but doesn't get cleared
+when resuming in case of wowlan. This causes further ADDBA requests
+received to be rejected. Fix it by clearing it in the wowlan path
+as well.
+
+Signed-off-by: Eyal Shapira <eyal@wizery.com>
+Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/mac80211/util.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/net/mac80211/util.c b/net/mac80211/util.c
+index d5230ec..7095ae5 100644
+--- a/net/mac80211/util.c
++++ b/net/mac80211/util.c
+@@ -1111,6 +1111,12 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+ 		}
+ 	}
+ 
++	/* add back keys */
++	list_for_each_entry(sdata, &local->interfaces, list)
++		if (ieee80211_sdata_running(sdata))
++			ieee80211_enable_keys(sdata);
++
++ wake_up:
+ 	/*
+ 	 * Clear the WLAN_STA_BLOCK_BA flag so new aggregation
+ 	 * sessions can be established after a resume.
+@@ -1132,12 +1138,6 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+ 		mutex_unlock(&local->sta_mtx);
+ 	}
+ 
+-	/* add back keys */
+-	list_for_each_entry(sdata, &local->interfaces, list)
+-		if (ieee80211_sdata_running(sdata))
+-			ieee80211_enable_keys(sdata);
+-
+- wake_up:
+ 	ieee80211_wake_queues_by_reason(hw,
+ 			IEEE80211_QUEUE_STOP_REASON_SUSPEND);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0028-mm-fork-fix-overflow-in-vma-length-when-copying-mmap.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0028-mm-fork-fix-overflow-in-vma-length-when-copying-mmap.patch
new file mode 100644
index 0000000..56441d0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0028-mm-fork-fix-overflow-in-vma-length-when-copying-mmap.patch
@@ -0,0 +1,81 @@
+From 078ef70fff8b069bb9bc4eb27aa649ee8aa977dd Mon Sep 17 00:00:00 2001
+From: Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com>
+Date: Tue, 29 May 2012 15:06:22 -0700
+Subject: [PATCH 28/86] mm/fork: fix overflow in vma length when copying mmap
+ on clone
+
+commit 7edc8b0ac16cbaed7cb4ea4c6b95ce98d2997e84 upstream.
+
+The vma length in dup_mmap is calculated and stored in a unsigned int,
+which is insufficient and hence overflows for very large maps (beyond
+16TB). The following program demonstrates this:
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/mman.h>
+
+#define GIG 1024 * 1024 * 1024L
+#define EXTENT 16393
+
+int main(void)
+{
+        int i, r;
+        void *m;
+        char buf[1024];
+
+        for (i = 0; i < EXTENT; i++) {
+                m = mmap(NULL, (size_t) 1 * 1024 * 1024 * 1024L,
+                         PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
+
+                if (m == (void *)-1)
+                        printf("MMAP Failed: %d\n", m);
+                else
+                        printf("%d : MMAP returned %p\n", i, m);
+
+                r = fork();
+
+                if (r == 0) {
+                        printf("%d: successed\n", i);
+                        return 0;
+                } else if (r < 0)
+                        printf("FORK Failed: %d\n", r);
+                else if (r > 0)
+                        wait(NULL);
+        }
+        return 0;
+}
+
+Increase the storage size of the result to unsigned long, which is
+sufficient for storing the difference between addresses.
+
+Signed-off-by: Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Oleg Nesterov <oleg@redhat.com>
+Cc: Jens Axboe <axboe@kernel.dk>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Acked-by: Hugh Dickins <hughd@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ kernel/fork.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/kernel/fork.c b/kernel/fork.c
+index 26f1ab0..79ee71f 100644
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -352,7 +352,8 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+ 		}
+ 		charge = 0;
+ 		if (mpnt->vm_flags & VM_ACCOUNT) {
+-			unsigned int len = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
++			unsigned long len;
++			len = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
+ 			if (security_vm_enough_memory(len))
+ 				goto fail_nomem;
+ 			charge = len;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0029-mm-consider-all-swapped-back-pages-in-used-once-logi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0029-mm-consider-all-swapped-back-pages-in-used-once-logi.patch
new file mode 100644
index 0000000..efa5eeb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0029-mm-consider-all-swapped-back-pages-in-used-once-logi.patch
@@ -0,0 +1,65 @@
+From cf8d6db03ffac6e6a8fa566942bb47d2cc2957bf Mon Sep 17 00:00:00 2001
+From: Michal Hocko <mhocko@suse.cz>
+Date: Tue, 29 May 2012 15:06:45 -0700
+Subject: [PATCH 29/86] mm: consider all swapped back pages in used-once logic
+
+commit e48982734ea0500d1eba4f9d96195acc5406cad6 upstream.
+
+Commit 645747462435 ("vmscan: detect mapped file pages used only once")
+made mapped pages have another round in inactive list because they might
+be just short lived and so we could consider them again next time.  This
+heuristic helps to reduce pressure on the active list with a streaming
+IO worklods.
+
+This patch fixes a regression introduced by this commit for heavy shmem
+based workloads because unlike Anon pages, which are excluded from this
+heuristic because they are usually long lived, shmem pages are handled
+as a regular page cache.
+
+This doesn't work quite well, unfortunately, if the workload is mostly
+backed by shmem (in memory database sitting on 80% of memory) with a
+streaming IO in the background (backup - up to 20% of memory).  Anon
+inactive list is full of (dirty) shmem pages when watermarks are hit.
+Shmem pages are kept in the inactive list (they are referenced) in the
+first round and it is hard to reclaim anything else so we reach lower
+scanning priorities very quickly which leads to an excessive swap out.
+
+Let's fix this by excluding all swap backed pages (they tend to be long
+lived wrt.  the regular page cache anyway) from used-once heuristic and
+rather activate them if they are referenced.
+
+The customer's workload is shmem backed database (80% of RAM) and they
+are measuring transactions/s with an IO in the background (20%).
+Transactions touch more or less random rows in the table.  The
+transaction rate fell by a factor of 3 (in the worst case) because of
+commit 64574746.  This patch restores the previous numbers.
+
+Signed-off-by: Michal Hocko <mhocko@suse.cz>
+Acked-by: Johannes Weiner <hannes@cmpxchg.org>
+Cc: Mel Gorman <mel@csn.ul.ie>
+Cc: Minchan Kim <minchan@kernel.org>
+Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Reviewed-by: Rik van Riel <riel@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/vmscan.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mm/vmscan.c b/mm/vmscan.c
+index cb33d9c..fbe2d2c 100644
+--- a/mm/vmscan.c
++++ b/mm/vmscan.c
+@@ -697,7 +697,7 @@ static enum page_references page_check_references(struct page *page,
+ 		return PAGEREF_RECLAIM;
+ 
+ 	if (referenced_ptes) {
+-		if (PageAnon(page))
++		if (PageSwapBacked(page))
+ 			return PAGEREF_ACTIVATE;
+ 		/*
+ 		 * All mapped pages start out with page table
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0030-hugetlb-fix-resv_map-leak-in-error-path.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0030-hugetlb-fix-resv_map-leak-in-error-path.patch
new file mode 100644
index 0000000..eb99e73
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0030-hugetlb-fix-resv_map-leak-in-error-path.patch
@@ -0,0 +1,101 @@
+From a82ac9b8fd3715f2bb17cd888fad25cfefa4bccb Mon Sep 17 00:00:00 2001
+From: Dave Hansen <dave@linux.vnet.ibm.com>
+Date: Fri, 18 May 2012 11:46:30 -0700
+Subject: [PATCH 30/86] hugetlb: fix resv_map leak in error path
+
+commit c50ac050811d6485616a193eb0f37bfbd191cc89 upstream.
+
+When called for anonymous (non-shared) mappings, hugetlb_reserve_pages()
+does a resv_map_alloc().  It depends on code in hugetlbfs's
+vm_ops->close() to release that allocation.
+
+However, in the mmap() failure path, we do a plain unmap_region() without
+the remove_vma() which actually calls vm_ops->close().
+
+This is a decent fix.  This leak could get reintroduced if new code (say,
+after hugetlb_reserve_pages() in hugetlbfs_file_mmap()) decides to return
+an error.  But, I think it would have to unroll the reservation anyway.
+
+Christoph's test case:
+
+	http://marc.info/?l=linux-mm&m=133728900729735
+
+Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
+[Christoph Lameter: I have rediffed the patch against 2.6.32 and 3.2.0.]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/hugetlb.c |   28 ++++++++++++++++++++++------
+ 1 file changed, 22 insertions(+), 6 deletions(-)
+
+diff --git a/mm/hugetlb.c b/mm/hugetlb.c
+index 7120c2e..c715bb9 100644
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -2068,6 +2068,15 @@ static void hugetlb_vm_op_open(struct vm_area_struct *vma)
+ 		kref_get(&reservations->refs);
+ }
+ 
++static void resv_map_put(struct vm_area_struct *vma)
++{
++	struct resv_map *reservations = vma_resv_map(vma);
++
++	if (!reservations)
++		return;
++	kref_put(&reservations->refs, resv_map_release);
++}
++
+ static void hugetlb_vm_op_close(struct vm_area_struct *vma)
+ {
+ 	struct hstate *h = hstate_vma(vma);
+@@ -2083,7 +2092,7 @@ static void hugetlb_vm_op_close(struct vm_area_struct *vma)
+ 		reserve = (end - start) -
+ 			region_count(&reservations->regions, start, end);
+ 
+-		kref_put(&reservations->refs, resv_map_release);
++		resv_map_put(vma);
+ 
+ 		if (reserve) {
+ 			hugetlb_acct_memory(h, -reserve);
+@@ -2884,12 +2893,16 @@ int hugetlb_reserve_pages(struct inode *inode,
+ 		set_vma_resv_flags(vma, HPAGE_RESV_OWNER);
+ 	}
+ 
+-	if (chg < 0)
+-		return chg;
++	if (chg < 0) {
++		ret = chg;
++		goto out_err;
++	}
+ 
+ 	/* There must be enough filesystem quota for the mapping */
+-	if (hugetlb_get_quota(inode->i_mapping, chg))
+-		return -ENOSPC;
++	if (hugetlb_get_quota(inode->i_mapping, chg)) {
++		ret = -ENOSPC;
++		goto out_err;
++	}
+ 
+ 	/*
+ 	 * Check enough hugepages are available for the reservation.
+@@ -2898,7 +2911,7 @@ int hugetlb_reserve_pages(struct inode *inode,
+ 	ret = hugetlb_acct_memory(h, chg);
+ 	if (ret < 0) {
+ 		hugetlb_put_quota(inode->i_mapping, chg);
+-		return ret;
++		goto out_err;
+ 	}
+ 
+ 	/*
+@@ -2915,6 +2928,9 @@ int hugetlb_reserve_pages(struct inode *inode,
+ 	if (!vma || vma->vm_flags & VM_MAYSHARE)
+ 		region_add(&inode->i_mapping->private_list, from, to);
+ 	return 0;
++out_err:
++	resv_map_put(vma);
++	return ret;
+ }
+ 
+ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0031-mm-vmalloc.c-change-void-into-explict-vm_struct.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0031-mm-vmalloc.c-change-void-into-explict-vm_struct.patch
new file mode 100644
index 0000000..002d8e8
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0031-mm-vmalloc.c-change-void-into-explict-vm_struct.patch
@@ -0,0 +1,63 @@
+From ac48cea598418be2acfa451a3488cdd51570641e Mon Sep 17 00:00:00 2001
+From: Minchan Kim <minchan@kernel.org>
+Date: Tue, 10 Jan 2012 15:08:39 -0800
+Subject: [PATCH 31/86] mm/vmalloc.c: change void* into explict vm_struct*
+
+commit db1aecafef58b5dda39c4228debe2c845e4a27ab upstream.
+
+vmap_area->private is void* but we don't use the field for various purpose
+but use only for vm_struct.  So change it to a vm_struct* with naming to
+improve for readability and type checking.
+
+Signed-off-by: Minchan Kim <minchan@kernel.org>
+Acked-by: David Rientjes <rientjes@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/vmalloc.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/mm/vmalloc.c b/mm/vmalloc.c
+index 21fdf46..877ca04 100644
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -256,7 +256,7 @@ struct vmap_area {
+ 	struct rb_node rb_node;		/* address sorted rbtree */
+ 	struct list_head list;		/* address sorted list */
+ 	struct list_head purge_list;	/* "lazy purge" list */
+-	void *private;
++	struct vm_struct *vm;
+ 	struct rcu_head rcu_head;
+ };
+ 
+@@ -1285,7 +1285,7 @@ static void setup_vmalloc_vm(struct vm_struct *vm, struct vmap_area *va,
+ 	vm->addr = (void *)va->va_start;
+ 	vm->size = va->va_end - va->va_start;
+ 	vm->caller = caller;
+-	va->private = vm;
++	va->vm = vm;
+ 	va->flags |= VM_VM_AREA;
+ }
+ 
+@@ -1408,7 +1408,7 @@ static struct vm_struct *find_vm_area(const void *addr)
+ 
+ 	va = find_vmap_area((unsigned long)addr);
+ 	if (va && va->flags & VM_VM_AREA)
+-		return va->private;
++		return va->vm;
+ 
+ 	return NULL;
+ }
+@@ -1427,7 +1427,7 @@ struct vm_struct *remove_vm_area(const void *addr)
+ 
+ 	va = find_vmap_area((unsigned long)addr);
+ 	if (va && va->flags & VM_VM_AREA) {
+-		struct vm_struct *vm = va->private;
++		struct vm_struct *vm = va->vm;
+ 
+ 		if (!(vm->flags & VM_UNLIST)) {
+ 			struct vm_struct *tmp, **p;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0032-mm-fix-faulty-initialization-in-vmalloc_init.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0032-mm-fix-faulty-initialization-in-vmalloc_init.patch
new file mode 100644
index 0000000..8018140
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0032-mm-fix-faulty-initialization-in-vmalloc_init.patch
@@ -0,0 +1,51 @@
+From 25ca214b138f89e6881a9fee029f1c55756bd8a3 Mon Sep 17 00:00:00 2001
+From: KyongHo <pullip.cho@samsung.com>
+Date: Tue, 29 May 2012 15:06:49 -0700
+Subject: [PATCH 32/86] mm: fix faulty initialization in vmalloc_init()
+
+commit dbda591d920b4c7692725b13e3f68ecb251e9080 upstream.
+
+The transfer of ->flags causes some of the static mapping virtual
+addresses to be prematurely freed (before the mapping is removed) because
+VM_LAZY_FREE gets "set" if tmp->flags has VM_IOREMAP set.  This might
+cause subsequent vmalloc/ioremap calls to fail because it might allocate
+one of the freed virtual address ranges that aren't unmapped.
+
+va->flags has different types of flags from tmp->flags.  If a region with
+VM_IOREMAP set is registered with vm_area_add_early(), it will be removed
+by __purge_vmap_area_lazy().
+
+Fix vmalloc_init() to correctly initialize vmap_area for the given
+vm_struct.
+
+Also initialise va->vm.  If it is not set, find_vm_area() for the early
+vm regions will always fail.
+
+Signed-off-by: KyongHo Cho <pullip.cho@samsung.com>
+Cc: "Olav Haugan" <ohaugan@codeaurora.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/vmalloc.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/mm/vmalloc.c b/mm/vmalloc.c
+index 877ca04..577e51d 100644
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -1185,9 +1185,10 @@ void __init vmalloc_init(void)
+ 	/* Import existing vmlist entries. */
+ 	for (tmp = vmlist; tmp; tmp = tmp->next) {
+ 		va = kzalloc(sizeof(struct vmap_area), GFP_NOWAIT);
+-		va->flags = tmp->flags | VM_VM_AREA;
++		va->flags = VM_VM_AREA;
+ 		va->va_start = (unsigned long)tmp->addr;
+ 		va->va_end = va->va_start + tmp->size;
++		va->vm = tmp;
+ 		__insert_vmap_area(va);
+ 	}
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0033-fix-scsi_wait_scan.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0033-fix-scsi_wait_scan.patch
new file mode 100644
index 0000000..e95f557
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0033-fix-scsi_wait_scan.patch
@@ -0,0 +1,44 @@
+From f7eda9338b67b376df9a1d42b9533035dde4bf80 Mon Sep 17 00:00:00 2001
+From: James Bottomley <jbottomley@parallels.com>
+Date: Wed, 30 May 2012 09:45:39 +0000
+Subject: [PATCH 33/86] fix scsi_wait_scan
+
+commit 1ff2f40305772b159a91c19590ee159d3a504afc upstream.
+
+Commit  c751085943362143f84346d274e0011419c84202
+Author: Rafael J. Wysocki <rjw@sisk.pl>
+Date:   Sun Apr 12 20:06:56 2009 +0200
+
+    PM/Hibernate: Wait for SCSI devices scan to complete during resume
+
+Broke the scsi_wait_scan module in 2.6.30.  Apparently debian still uses it so
+fix it and backport to stable before removing it in 3.6.
+
+The breakage is caused because the function template in
+include/scsi/scsi_scan.h is defined to be a nop unless SCSI is built in.
+That means that in the modular case (which is every distro), the
+scsi_wait_scan module does a simple async_synchronize_full() instead of
+waiting for scans.
+
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/scsi/scsi_wait_scan.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/scsi_wait_scan.c b/drivers/scsi/scsi_wait_scan.c
+index 74708fc..ae78148 100644
+--- a/drivers/scsi/scsi_wait_scan.c
++++ b/drivers/scsi/scsi_wait_scan.c
+@@ -12,7 +12,7 @@
+ 
+ #include <linux/module.h>
+ #include <linux/device.h>
+-#include <scsi/scsi_scan.h>
++#include "scsi_priv.h"
+ 
+ static int __init wait_scan_init(void)
+ {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0034-mm-fix-vma_resv_map-NULL-pointer.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0034-mm-fix-vma_resv_map-NULL-pointer.patch
new file mode 100644
index 0000000..df28752
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0034-mm-fix-vma_resv_map-NULL-pointer.patch
@@ -0,0 +1,70 @@
+From 17ceee89567f7c23b2f1eb1d44a323e20912dd59 Mon Sep 17 00:00:00 2001
+From: Dave Hansen <dave@linux.vnet.ibm.com>
+Date: Wed, 30 May 2012 07:51:07 -0700
+Subject: [PATCH 34/86] mm: fix vma_resv_map() NULL pointer
+
+commit 4523e1458566a0e8ecfaff90f380dd23acc44d27 upstream.
+
+hugetlb_reserve_pages() can be used for either normal file-backed
+hugetlbfs mappings, or MAP_HUGETLB.  In the MAP_HUGETLB, semi-anonymous
+mode, there is not a VMA around.  The new call to resv_map_put() assumed
+that there was, and resulted in a NULL pointer dereference:
+
+  BUG: unable to handle kernel NULL pointer dereference at 0000000000000030
+  IP: vma_resv_map+0x9/0x30
+  PGD 141453067 PUD 1421e1067 PMD 0
+  Oops: 0000 [#1] PREEMPT SMP
+  ...
+  Pid: 14006, comm: trinity-child6 Not tainted 3.4.0+ #36
+  RIP: vma_resv_map+0x9/0x30
+  ...
+  Process trinity-child6 (pid: 14006, threadinfo ffff8801414e0000, task ffff8801414f26b0)
+  Call Trace:
+    resv_map_put+0xe/0x40
+    hugetlb_reserve_pages+0xa6/0x1d0
+    hugetlb_file_setup+0x102/0x2c0
+    newseg+0x115/0x360
+    ipcget+0x1ce/0x310
+    sys_shmget+0x5a/0x60
+    system_call_fastpath+0x16/0x1b
+
+This was reported by Dave Jones, but was reproducible with the
+libhugetlbfs test cases, so shame on me for not running them in the
+first place.
+
+With this, the oops is gone, and the output of libhugetlbfs's
+run_tests.py is identical to plain 3.4 again.
+
+[ Marked for stable, since this was introduced by commit c50ac050811d
+  ("hugetlb: fix resv_map leak in error path") which was also marked for
+  stable ]
+
+Reported-by: Dave Jones <davej@redhat.com>
+Cc: Mel Gorman <mel@csn.ul.ie>
+Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
+Cc: Christoph Lameter <cl@linux.com>
+Cc: Andrea Arcangeli <aarcange@redhat.com>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/hugetlb.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/mm/hugetlb.c b/mm/hugetlb.c
+index c715bb9..5f5c545 100644
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -2929,7 +2929,8 @@ int hugetlb_reserve_pages(struct inode *inode,
+ 		region_add(&inode->i_mapping->private_list, from, to);
+ 	return 0;
+ out_err:
+-	resv_map_put(vma);
++	if (vma)
++		resv_map_put(vma);
+ 	return ret;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0035-x86-amd-xen-Avoid-NULL-pointer-paravirt-references.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0035-x86-amd-xen-Avoid-NULL-pointer-paravirt-references.patch
new file mode 100644
index 0000000..53bf549
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0035-x86-amd-xen-Avoid-NULL-pointer-paravirt-references.patch
@@ -0,0 +1,38 @@
+From 827eb1e22d5bbbd59b40cffc5d1e811c4d2e6a24 Mon Sep 17 00:00:00 2001
+From: Konrad Rzeszutek Wilk <konrad@darnok.org>
+Date: Wed, 30 May 2012 18:23:56 -0400
+Subject: [PATCH 35/86] x86, amd, xen: Avoid NULL pointer paravirt references
+
+commit 1ab46fd319bcf1fcd9fb6311727d532b580e4eba upstream.
+
+Stub out MSR methods that aren't actually needed.  This fixes a crash
+as Xen Dom0 on AMD Trinity systems.  A bigger patch should be added to
+remove the paravirt machinery completely for the methods which
+apparently have no users!
+
+Reported-by: Andre Przywara <andre.przywara@amd.com>
+Link: http://lkml.kernel.org/r/20120530222356.GA28417@andromeda.dapyr.net
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/xen/enlighten.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
+index e7c920b..cca659e 100644
+--- a/arch/x86/xen/enlighten.c
++++ b/arch/x86/xen/enlighten.c
+@@ -982,7 +982,10 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
+ 	.wbinvd = native_wbinvd,
+ 
+ 	.read_msr = native_read_msr_safe,
++	.rdmsr_regs = native_rdmsr_safe_regs,
+ 	.write_msr = xen_write_msr_safe,
++	.wrmsr_regs = native_wrmsr_safe_regs,
++
+ 	.read_tsc = native_read_tsc,
+ 	.read_pmc = native_read_pmc,
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0036-slub-fix-a-memory-leak-in-get_partial_node.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0036-slub-fix-a-memory-leak-in-get_partial_node.patch
new file mode 100644
index 0000000..e399e07
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0036-slub-fix-a-memory-leak-in-get_partial_node.patch
@@ -0,0 +1,86 @@
+From e03e067f960f7714ac98fdef365cafff22086a6b Mon Sep 17 00:00:00 2001
+From: Joonsoo Kim <js1304@gmail.com>
+Date: Thu, 17 May 2012 00:13:02 +0900
+Subject: [PATCH 36/86] slub: fix a memory leak in get_partial_node()
+
+commit 02d7633fa567be7bf55a993b79d2a31b95ce2227 upstream.
+
+In the case which is below,
+
+1. acquire slab for cpu partial list
+2. free object to it by remote cpu
+3. page->freelist = t
+
+then memory leak is occurred.
+
+Change acquire_slab() not to zap freelist when it works for cpu partial list.
+I think it is a sufficient solution for fixing a memory leak.
+
+Below is output of 'slabinfo -r kmalloc-256'
+when './perf stat -r 30 hackbench 50 process 4000 > /dev/null' is done.
+
+***Vanilla***
+Sizes (bytes)     Slabs              Debug                Memory
+------------------------------------------------------------------------
+Object :     256  Total  :     468   Sanity Checks : Off  Total: 3833856
+SlabObj:     256  Full   :     111   Redzoning     : Off  Used : 2004992
+SlabSiz:    8192  Partial:     302   Poisoning     : Off  Loss : 1828864
+Loss   :       0  CpuSlab:      55   Tracking      : Off  Lalig:       0
+Align  :       8  Objects:      32   Tracing       : Off  Lpadd:       0
+
+***Patched***
+Sizes (bytes)     Slabs              Debug                Memory
+------------------------------------------------------------------------
+Object :     256  Total  :     300   Sanity Checks : Off  Total: 2457600
+SlabObj:     256  Full   :     204   Redzoning     : Off  Used : 2348800
+SlabSiz:    8192  Partial:      33   Poisoning     : Off  Loss :  108800
+Loss   :       0  CpuSlab:      63   Tracking      : Off  Lalig:       0
+Align  :       8  Objects:      32   Tracing       : Off  Lpadd:       0
+
+Total and loss number is the impact of this patch.
+
+Acked-by: Christoph Lameter <cl@linux.com>
+Signed-off-by: Joonsoo Kim <js1304@gmail.com>
+Signed-off-by: Pekka Enberg <penberg@kernel.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/slub.c |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/mm/slub.c b/mm/slub.c
+index a99c785..af47188 100644
+--- a/mm/slub.c
++++ b/mm/slub.c
+@@ -1506,15 +1506,19 @@ static inline void *acquire_slab(struct kmem_cache *s,
+ 		freelist = page->freelist;
+ 		counters = page->counters;
+ 		new.counters = counters;
+-		if (mode)
++		if (mode) {
+ 			new.inuse = page->objects;
++			new.freelist = NULL;
++		} else {
++			new.freelist = freelist;
++		}
+ 
+ 		VM_BUG_ON(new.frozen);
+ 		new.frozen = 1;
+ 
+ 	} while (!__cmpxchg_double_slab(s, page,
+ 			freelist, counters,
+-			NULL, new.counters,
++			new.freelist, new.counters,
+ 			"lock and freeze"));
+ 
+ 	remove_partial(n, page);
+@@ -1556,7 +1560,6 @@ static void *get_partial_node(struct kmem_cache *s,
+ 			object = t;
+ 			available =  page->objects - page->inuse;
+ 		} else {
+-			page->freelist = t;
+ 			available = put_cpu_partial(s, page, 0);
+ 		}
+ 		if (kmem_cache_debug(s) || available > s->cpu_partial / 2)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0037-ext4-force-ro-mount-if-ext4_setup_super-fails.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0037-ext4-force-ro-mount-if-ext4_setup_super-fails.patch
new file mode 100644
index 0000000..6fbcfa0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0037-ext4-force-ro-mount-if-ext4_setup_super-fails.patch
@@ -0,0 +1,45 @@
+From ce325abe66432bbcf9d8dc2834d7c8c77f32ce52 Mon Sep 17 00:00:00 2001
+From: Eric Sandeen <sandeen@redhat.com>
+Date: Mon, 28 May 2012 14:17:25 -0400
+Subject: [PATCH 37/86] ext4: force ro mount if ext4_setup_super() fails
+
+commit 7e84b6216467b84cd332c8e567bf5aa113fd2f38 upstream.
+
+If ext4_setup_super() fails i.e. due to a too-high revision,
+the error is logged in dmesg but the fs is not mounted RO as
+indicated.
+
+Tested by:
+
+# mkfs.ext4 -r 4 /dev/sdb6
+# mount /dev/sdb6 /mnt/test
+# dmesg | grep "too high"
+[164919.759248] EXT4-fs (sdb6): revision level too high, forcing read-only mode
+# grep sdb6 /proc/mounts
+/dev/sdb6 /mnt/test2 ext4 rw,seclabel,relatime,data=ordered 0 0
+
+Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
+Signed-off-by: Eric Sandeen <sandeen@redhat.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/super.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index 961059b..c91811e 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -3727,7 +3727,8 @@ no_journal:
+ 		goto failed_mount4;
+ 	}
+ 
+-	ext4_setup_super(sb, es, sb->s_flags & MS_RDONLY);
++	if (ext4_setup_super(sb, es, sb->s_flags & MS_RDONLY))
++		sb->s_flags |= MS_RDONLY;
+ 
+ 	/* determine the minimum size of new large inodes, if present */
+ 	if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0038-ext4-disallow-hard-linked-directory-in-ext4_lookup.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0038-ext4-disallow-hard-linked-directory-in-ext4_lookup.patch
new file mode 100644
index 0000000..60e970a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0038-ext4-disallow-hard-linked-directory-in-ext4_lookup.patch
@@ -0,0 +1,38 @@
+From 7d7a4c4be4fc37041962a101a848c38bf13dc0c4 Mon Sep 17 00:00:00 2001
+From: Andreas Dilger <adilger@dilger.ca>
+Date: Mon, 28 May 2012 17:02:25 -0400
+Subject: [PATCH 38/86] ext4: disallow hard-linked directory in ext4_lookup
+
+commit 7e936b737211e6b54e34b71a827e56b872e958d8 upstream.
+
+A hard-linked directory to its parent can cause the VFS to deadlock,
+and is a sign of a corrupted file system.  So detect this case in
+ext4_lookup(), before the rmdir() lockup scenario can take place.
+
+Signed-off-by: Andreas Dilger <adilger@dilger.ca>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/namei.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index aa4c782..4dd0890 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -1037,6 +1037,12 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, stru
+ 			EXT4_ERROR_INODE(dir, "bad inode number: %u", ino);
+ 			return ERR_PTR(-EIO);
+ 		}
++		if (unlikely(ino == dir->i_ino)) {
++			EXT4_ERROR_INODE(dir, "'%.*s' linked to parent dir",
++					 dentry->d_name.len,
++					 dentry->d_name.name);
++			return ERR_PTR(-EIO);
++		}
+ 		inode = ext4_iget(dir->i_sb, ino);
+ 		if (inode == ERR_PTR(-ESTALE)) {
+ 			EXT4_ERROR_INODE(dir,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0039-mtd-nand-fix-scan_read_raw_oob.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0039-mtd-nand-fix-scan_read_raw_oob.patch
new file mode 100644
index 0000000..e2b0f24
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0039-mtd-nand-fix-scan_read_raw_oob.patch
@@ -0,0 +1,33 @@
+From ec329940d4991f4051c3b8cf971aa2e67ad9da20 Mon Sep 17 00:00:00 2001
+From: Dmitry Maluka <D.Maluka@adbglobal.com>
+Date: Fri, 11 May 2012 20:51:51 +0300
+Subject: [PATCH 39/86] mtd: nand: fix scan_read_raw_oob
+
+commit 34a5704d91d6f8376a4c0a0143a1dd3eb3ccb37e upstream.
+
+It seems there is a bug in scan_read_raw_oob() in nand_bbt.c which
+should cause wrong functioning of NAND_BBT_SCANALLPAGES option.
+
+Artem: the patch did not apply and I had to amend it a bit.
+
+Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/mtd/nand/nand_bbt.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c
+index 69148ae..f024375 100644
+--- a/drivers/mtd/nand/nand_bbt.c
++++ b/drivers/mtd/nand/nand_bbt.c
+@@ -324,6 +324,7 @@ static int scan_read_raw_oob(struct mtd_info *mtd, uint8_t *buf, loff_t offs,
+ 
+ 		buf += mtd->oobsize + mtd->writesize;
+ 		len -= mtd->writesize;
++		offs += mtd->writesize;
+ 	}
+ 	return 0;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0040-vfs-increment-iversion-when-a-file-is-truncated.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0040-vfs-increment-iversion-when-a-file-is-truncated.patch
new file mode 100644
index 0000000..cab17c9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0040-vfs-increment-iversion-when-a-file-is-truncated.patch
@@ -0,0 +1,48 @@
+From dcbd120f33b3df21a22bb7e09710f9f078c5b459 Mon Sep 17 00:00:00 2001
+From: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
+Date: Tue, 29 May 2012 11:02:21 -0700
+Subject: [PATCH 40/86] vfs: increment iversion when a file is truncated
+
+commit 799243a389bde0de10fa21ca1ca453d2fe538b85 upstream.
+
+When a file is truncated with truncate()/ftruncate() and then closed,
+iversion is not updated.  This patch uses ATTR_SIZE flag as an indication
+to increment iversion.
+
+Mimi said:
+
+On fput(), i_version is used to detect and flag files that have changed
+and need to be re-measured in the IMA measurement policy.  When a file
+is truncated with truncate()/ftruncate() and then closed, i_version is
+not updated.  As a result, although the file has changed, it will not be
+re-measured and added to the IMA measurement list on subsequent access.
+
+Signed-off-by: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
+Acked-by: Mimi Zohar <zohar@us.ibm.com>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/attr.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/fs/attr.c b/fs/attr.c
+index 7ee7ba4..b8f55c4 100644
+--- a/fs/attr.c
++++ b/fs/attr.c
+@@ -176,6 +176,11 @@ int notify_change(struct dentry * dentry, struct iattr * attr)
+ 			return -EPERM;
+ 	}
+ 
++	if ((ia_valid & ATTR_SIZE) && IS_I_VERSION(inode)) {
++		if (attr->ia_size != inode->i_size)
++			inode_inc_iversion(inode);
++	}
++
+ 	if ((ia_valid & ATTR_MODE)) {
+ 		mode_t amode = attr->ia_mode;
+ 		/* Flag setting protected by i_mutex */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0041-vfs-umount_tree-might-be-called-on-subtree-that-had-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0041-vfs-umount_tree-might-be-called-on-subtree-that-had-.patch
new file mode 100644
index 0000000..99722a5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0041-vfs-umount_tree-might-be-called-on-subtree-that-had-.patch
@@ -0,0 +1,37 @@
+From 7124b305f5c83709f41473a2cf6025bcdb9b88fe Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Tue, 29 May 2012 22:03:48 -0400
+Subject: [PATCH 41/86] vfs: umount_tree() might be called on subtree that had
+ never made it
+
+commit 63d37a84ab6004c235314ffd7a76c5eb28c2fae0 upstream.
+
+__mnt_make_shortterm() in there undoes the effect of __mnt_make_longterm()
+we'd done back when we set ->mnt_ns non-NULL; it should not be done to
+vfsmounts that had never gone through commit_tree() and friends.  Kudos to
+lczerner for catching that one...
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/namespace.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/fs/namespace.c b/fs/namespace.c
+index cfc6d44..ca4913a 100644
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -1244,8 +1244,9 @@ void umount_tree(struct vfsmount *mnt, int propagate, struct list_head *kill)
+ 		list_del_init(&p->mnt_expire);
+ 		list_del_init(&p->mnt_list);
+ 		__touch_mnt_namespace(p->mnt_ns);
++		if (p->mnt_ns)
++			__mnt_make_shortterm(p);
+ 		p->mnt_ns = NULL;
+-		__mnt_make_shortterm(p);
+ 		list_del_init(&p->mnt_child);
+ 		if (p->mnt_parent != p) {
+ 			p->mnt_parent->mnt_ghosts++;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0042-ext4-add-missing-save_error_info-to-ext4_error.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0042-ext4-add-missing-save_error_info-to-ext4_error.patch
new file mode 100644
index 0000000..e9720b2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0042-ext4-add-missing-save_error_info-to-ext4_error.patch
@@ -0,0 +1,36 @@
+From 1b72b00b0a3384ac8e6b2ddb6b06132e714e9441 Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Wed, 30 May 2012 23:00:16 -0400
+Subject: [PATCH 42/86] ext4: add missing save_error_info() to ext4_error()
+
+commit f3fc0210c0fc91900766c995f089c39170e68305 upstream.
+
+The ext4_error() function is missing a call to save_error_info().
+Since this is the function which marks the file system as containing
+an error, this oversight (which was introduced in 2.6.36) is quite
+significant, and should be backported to older stable kernels with
+high urgency.
+
+Reported-by: Ken Sumrall <ksumrall@google.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Cc: ksumrall@google.com
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/super.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index c91811e..ab7aa3f 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -480,6 +480,7 @@ void __ext4_error(struct super_block *sb, const char *function,
+ 	printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n",
+ 	       sb->s_id, function, line, current->comm, &vaf);
+ 	va_end(args);
++	save_error_info(sb, function, line);
+ 
+ 	ext4_handle_error(sb);
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0043-ALSA-usb-audio-fix-rate_list-memory-leak.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0043-ALSA-usb-audio-fix-rate_list-memory-leak.patch
new file mode 100644
index 0000000..7c69f66
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0043-ALSA-usb-audio-fix-rate_list-memory-leak.patch
@@ -0,0 +1,35 @@
+From 881cf192607e150b2843d5a504a6c05bd6be8136 Mon Sep 17 00:00:00 2001
+From: Clemens Ladisch <clemens@ladisch.de>
+Date: Fri, 18 May 2012 18:00:43 +0200
+Subject: [PATCH 43/86] ALSA: usb-audio: fix rate_list memory leak
+
+commit 5cd5d7c44990658df6ab49f6253c39617c53b03d upstream.
+
+The array of sample rates is reallocated every time when opening
+the PCM device, but was freed only once when unplugging the device.
+
+Reported-by: "Alexander E. Patrakov" <patrakov@gmail.com>
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/usb/pcm.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
+index 0220b0f..839165f 100644
+--- a/sound/usb/pcm.c
++++ b/sound/usb/pcm.c
+@@ -698,6 +698,9 @@ static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
+ 	int count = 0, needs_knot = 0;
+ 	int err;
+ 
++	kfree(subs->rate_list.list);
++	subs->rate_list.list = NULL;
++
+ 	list_for_each_entry(fp, &subs->fmt_list, list) {
+ 		if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)
+ 			return 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0044-ext4-add-ext4_mb_unload_buddy-in-the-error-path.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0044-ext4-add-ext4_mb_unload_buddy-in-the-error-path.patch
new file mode 100644
index 0000000..63a6bf4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0044-ext4-add-ext4_mb_unload_buddy-in-the-error-path.patch
@@ -0,0 +1,32 @@
+From 63234d728c49257d747db57d3dfeb9989b9d040a Mon Sep 17 00:00:00 2001
+From: Salman Qazi <sqazi@google.com>
+Date: Thu, 31 May 2012 23:51:27 -0400
+Subject: [PATCH 44/86] ext4: add ext4_mb_unload_buddy in the error path
+
+commit 02b7831019ea4e7994968c84b5826fa8b248ffc8 upstream.
+
+ext4_free_blocks fails to pair an ext4_mb_load_buddy with a matching
+ext4_mb_unload_buddy when it fails a memory allocation.
+
+Signed-off-by: Salman Qazi <sqazi@google.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/mballoc.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
+index e2d8be8..382e4fc 100644
+--- a/fs/ext4/mballoc.c
++++ b/fs/ext4/mballoc.c
+@@ -4693,6 +4693,7 @@ do_more:
+ 		 */
+ 		new_entry = kmem_cache_alloc(ext4_free_ext_cachep, GFP_NOFS);
+ 		if (!new_entry) {
++			ext4_mb_unload_buddy(&e4b);
+ 			err = -ENOMEM;
+ 			goto error_return;
+ 		}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0045-ext4-remove-mb_groups-before-tearing-down-the-buddy_.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0045-ext4-remove-mb_groups-before-tearing-down-the-buddy_.patch
new file mode 100644
index 0000000..0fc4e4b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0045-ext4-remove-mb_groups-before-tearing-down-the-buddy_.patch
@@ -0,0 +1,53 @@
+From 36ac3cf2860adbbe83743fd5ec6f89e54e67605c Mon Sep 17 00:00:00 2001
+From: Salman Qazi <sqazi@google.com>
+Date: Thu, 31 May 2012 23:52:14 -0400
+Subject: [PATCH 45/86] ext4: remove mb_groups before tearing down the
+ buddy_cache
+
+commit 95599968d19db175829fb580baa6b68939b320fb upstream.
+
+We can't have references held on pages in the s_buddy_cache while we are
+trying to truncate its pages and put the inode.  All the pages must be
+gone before we reach clear_inode.  This can only be gauranteed if we
+can prevent new users from grabbing references to s_buddy_cache's pages.
+
+The original bug can be reproduced and the bug fix can be verified by:
+
+while true; do mount -t ext4 /dev/ram0 /export/hda3/ram0; \
+	umount /export/hda3/ram0; done &
+
+while true; do cat /proc/fs/ext4/ram0/mb_groups; done
+
+Signed-off-by: Salman Qazi <sqazi@google.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/mballoc.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
+index 382e4fc..1d07c12 100644
+--- a/fs/ext4/mballoc.c
++++ b/fs/ext4/mballoc.c
+@@ -2567,6 +2567,9 @@ int ext4_mb_release(struct super_block *sb)
+ 	struct ext4_sb_info *sbi = EXT4_SB(sb);
+ 	struct kmem_cache *cachep = get_groupinfo_cache(sb->s_blocksize_bits);
+ 
++	if (sbi->s_proc)
++		remove_proc_entry("mb_groups", sbi->s_proc);
++
+ 	if (sbi->s_group_info) {
+ 		for (i = 0; i < ngroups; i++) {
+ 			grinfo = ext4_get_group_info(sb, i);
+@@ -2614,8 +2617,6 @@ int ext4_mb_release(struct super_block *sb)
+ 	}
+ 
+ 	free_percpu(sbi->s_locality_groups);
+-	if (sbi->s_proc)
+-		remove_proc_entry("mb_groups", sbi->s_proc);
+ 
+ 	return 0;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0046-drm-radeon-fix-bank-information-in-tiling-config.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0046-drm-radeon-fix-bank-information-in-tiling-config.patch
new file mode 100644
index 0000000..96c23ec
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0046-drm-radeon-fix-bank-information-in-tiling-config.patch
@@ -0,0 +1,84 @@
+From 08a5d338c177aeaff3fed888cf9a36feb07a033d Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 31 May 2012 18:53:36 -0400
+Subject: [PATCH 46/86] drm/radeon: fix bank information in tiling config
+
+commit 29d654067a98c1cb8874c774e5fd799a038af8a6 upstream.
+
+While there are cards with more than 8 mem banks, the max
+number of banks from a tiling perspective is 8, so cap
+the tiling config at 8 banks.
+
+Fixes:
+https://bugs.freedesktop.org/show_bug.cgi?id=43448
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+[bwh: Backported to 3.2: fix up context and indentation for missing
+ IGP condition in ni.c]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/radeon/evergreen.c |    9 ++++++---
+ drivers/gpu/drm/radeon/ni.c        |    6 ++++--
+ drivers/gpu/drm/radeon/rv770.c     |    8 ++++++--
+ 3 files changed, 16 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
+index 92c9628..88d080c 100644
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -2074,9 +2074,12 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
+ 	/* num banks is 8 on all fusion asics. 0 = 4, 1 = 8, 2 = 16 */
+ 	if (rdev->flags & RADEON_IS_IGP)
+ 		rdev->config.evergreen.tile_config |= 1 << 4;
+-	else
+-		rdev->config.evergreen.tile_config |=
+-			((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
++	else {
++		if ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT)
++			rdev->config.evergreen.tile_config |= 1 << 4;
++		else
++			rdev->config.evergreen.tile_config |= 0 << 4;
++	}
+ 	rdev->config.evergreen.tile_config |=
+ 		((mc_arb_ramcfg & BURSTLENGTH_MASK) >> BURSTLENGTH_SHIFT) << 8;
+ 	rdev->config.evergreen.tile_config |=
+diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
+index 0e57998..9e50814 100644
+--- a/drivers/gpu/drm/radeon/ni.c
++++ b/drivers/gpu/drm/radeon/ni.c
+@@ -804,8 +804,10 @@ static void cayman_gpu_init(struct radeon_device *rdev)
+ 		rdev->config.cayman.tile_config |= (3 << 0);
+ 		break;
+ 	}
+-	rdev->config.cayman.tile_config |=
+-		((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
++	if ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT)
++		rdev->config.cayman.tile_config |= 1 << 4;
++	else
++		rdev->config.cayman.tile_config |= 0 << 4;
+ 	rdev->config.cayman.tile_config |=
+ 		((gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK) >> PIPE_INTERLEAVE_SIZE_SHIFT) << 8;
+ 	rdev->config.cayman.tile_config |=
+diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
+index 23ae1c6..e3f01b8 100644
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -689,8 +689,12 @@ static void rv770_gpu_init(struct radeon_device *rdev)
+ 
+ 	if (rdev->family == CHIP_RV770)
+ 		gb_tiling_config |= BANK_TILING(1);
+-	else
+-		gb_tiling_config |= BANK_TILING((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT);
++	else {
++		if ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT)
++			gb_tiling_config |= BANK_TILING(1);
++		else
++			gb_tiling_config |= BANK_TILING(0);
++	}
+ 	rdev->config.rv770.tiling_nbanks = 4 << ((gb_tiling_config >> 4) & 0x3);
+ 	gb_tiling_config |= GROUP_SIZE((mc_arb_ramcfg & BURSTLENGTH_MASK) >> BURSTLENGTH_SHIFT);
+ 	if ((mc_arb_ramcfg & BURSTLENGTH_MASK) >> BURSTLENGTH_SHIFT)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0047-drm-radeon-properly-program-gart-on-rv740-juniper-cy.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0047-drm-radeon-properly-program-gart-on-rv740-juniper-cy.patch
new file mode 100644
index 0000000..51d41d9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0047-drm-radeon-properly-program-gart-on-rv740-juniper-cy.patch
@@ -0,0 +1,79 @@
+From b872949a1d4d4a7587bbbfa4adb1a69216c625a8 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 31 May 2012 18:54:43 -0400
+Subject: [PATCH 47/86] drm/radeon: properly program gart on rv740, juniper,
+ cypress, barts, hemlock
+
+commit 0b8c30bc4943137a4a36b9cb059b1cc684f5d702 upstream.
+
+Need to program an additional VM register.  This doesn't not currently
+cause any problems, but allows us to program the proper backend
+map in a subsequent patch which should improve performance on these
+asics.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/radeon/evergreen.c  |    5 +++++
+ drivers/gpu/drm/radeon/evergreend.h |    1 +
+ drivers/gpu/drm/radeon/rv770.c      |    2 ++
+ drivers/gpu/drm/radeon/rv770d.h     |    1 +
+ 4 files changed, 9 insertions(+)
+
+diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
+index 88d080c..7777c2f 100644
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -977,6 +977,11 @@ int evergreen_pcie_gart_enable(struct radeon_device *rdev)
+ 		WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
+ 		WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
+ 		WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
++		if ((rdev->family == CHIP_JUNIPER) ||
++		    (rdev->family == CHIP_CYPRESS) ||
++		    (rdev->family == CHIP_HEMLOCK) ||
++		    (rdev->family == CHIP_BARTS))
++			WREG32(MC_VM_MD_L1_TLB3_CNTL, tmp);
+ 	}
+ 	WREG32(MC_VM_MB_L1_TLB0_CNTL, tmp);
+ 	WREG32(MC_VM_MB_L1_TLB1_CNTL, tmp);
+diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h
+index e00039e..0128445 100644
+--- a/drivers/gpu/drm/radeon/evergreend.h
++++ b/drivers/gpu/drm/radeon/evergreend.h
+@@ -230,6 +230,7 @@
+ #define	MC_VM_MD_L1_TLB0_CNTL				0x2654
+ #define	MC_VM_MD_L1_TLB1_CNTL				0x2658
+ #define	MC_VM_MD_L1_TLB2_CNTL				0x265C
++#define	MC_VM_MD_L1_TLB3_CNTL				0x2698
+ 
+ #define	FUS_MC_VM_MD_L1_TLB0_CNTL			0x265C
+ #define	FUS_MC_VM_MD_L1_TLB1_CNTL			0x2660
+diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
+index e3f01b8..e36ba7f 100644
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -151,6 +151,8 @@ int rv770_pcie_gart_enable(struct radeon_device *rdev)
+ 	WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
+ 	WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
+ 	WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
++	if (rdev->family == CHIP_RV740)
++		WREG32(MC_VM_MD_L1_TLB3_CNTL, tmp);
+ 	WREG32(MC_VM_MB_L1_TLB0_CNTL, tmp);
+ 	WREG32(MC_VM_MB_L1_TLB1_CNTL, tmp);
+ 	WREG32(MC_VM_MB_L1_TLB2_CNTL, tmp);
+diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
+index 79fa588..7538092 100644
+--- a/drivers/gpu/drm/radeon/rv770d.h
++++ b/drivers/gpu/drm/radeon/rv770d.h
+@@ -174,6 +174,7 @@
+ #define	MC_VM_MD_L1_TLB0_CNTL				0x2654
+ #define	MC_VM_MD_L1_TLB1_CNTL				0x2658
+ #define	MC_VM_MD_L1_TLB2_CNTL				0x265C
++#define	MC_VM_MD_L1_TLB3_CNTL				0x2698
+ #define	MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR		0x203C
+ #define	MC_VM_SYSTEM_APERTURE_HIGH_ADDR			0x2038
+ #define	MC_VM_SYSTEM_APERTURE_LOW_ADDR			0x2034
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0048-drm-radeon-fix-HD6790-HD6570-backend-programming.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0048-drm-radeon-fix-HD6790-HD6570-backend-programming.patch
new file mode 100644
index 0000000..e4ec73c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0048-drm-radeon-fix-HD6790-HD6570-backend-programming.patch
@@ -0,0 +1,44 @@
+From 78a76c99190cb06c44e3432b33fa1641f6c75fa9 Mon Sep 17 00:00:00 2001
+From: Jerome Glisse <jglisse@redhat.com>
+Date: Thu, 31 May 2012 19:00:24 -0400
+Subject: [PATCH 48/86] drm/radeon: fix HD6790, HD6570 backend programming
+
+commit 95c4b23ec4e2fa5604df229ddf134e31d7b3b378 upstream.
+
+Without this bit sets we get broken rendering and
+lockups.
+
+fglrx sets this bit.
+
+Bugs that should be fixed by this patch :
+https://bugs.freedesktop.org/show_bug.cgi?id=49792
+https://bugzilla.kernel.org/show_bug.cgi?id=43207
+https://bugs.freedesktop.org/show_bug.cgi?id=39282
+
+Signed-off-by: Jerome Glisse <jglisse@redhat.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/radeon/evergreen.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
+index 7777c2f..dac178b 100644
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -2116,9 +2116,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
+ 		WREG32(CC_SYS_RB_BACKEND_DISABLE, rb);
+ 		WREG32(GC_USER_RB_BACKEND_DISABLE, rb);
+ 		WREG32(CC_GC_SHADER_PIPE_CONFIG, sp);
+-        }
++	}
+ 
+-	grbm_gfx_index |= SE_BROADCAST_WRITES;
++	grbm_gfx_index = INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES;
+ 	WREG32(GRBM_GFX_INDEX, grbm_gfx_index);
+ 	WREG32(RLC_GFX_INDEX, grbm_gfx_index);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0049-drm-ttm-Fix-spinlock-imbalance.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0049-drm-ttm-Fix-spinlock-imbalance.patch
new file mode 100644
index 0000000..6529366
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0049-drm-ttm-Fix-spinlock-imbalance.patch
@@ -0,0 +1,33 @@
+From 309af9e8861e14263a958a70779944d8208f4323 Mon Sep 17 00:00:00 2001
+From: Thomas Hellstrom <thellstrom@vmware.com>
+Date: Fri, 1 Jun 2012 15:39:11 +0200
+Subject: [PATCH 49/86] drm/ttm: Fix spinlock imbalance
+
+commit a8ff3ee211fccf708e1911bbc096625453ebf759 upstream.
+
+This imbalance may cause hangs when TTM is trying to swap out a buffer
+that is already on the delayed delete list.
+
+Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
+Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/ttm/ttm_bo.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
+index 0bb0f5f..0d27bff 100644
+--- a/drivers/gpu/drm/ttm/ttm_bo.c
++++ b/drivers/gpu/drm/ttm/ttm_bo.c
+@@ -1816,6 +1816,7 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
+ 			spin_unlock(&glob->lru_lock);
+ 			(void) ttm_bo_cleanup_refs(bo, false, false, false);
+ 			kref_put(&bo->list_kref, ttm_bo_release_list);
++			spin_lock(&glob->lru_lock);
+ 			continue;
+ 		}
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0050-drm-vmwgfx-Fix-nasty-write-past-alloced-memory-area.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0050-drm-vmwgfx-Fix-nasty-write-past-alloced-memory-area.patch
new file mode 100644
index 0000000..81726bb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0050-drm-vmwgfx-Fix-nasty-write-past-alloced-memory-area.patch
@@ -0,0 +1,31 @@
+From 345d5c3e9925e3a22b7974adfdb8bbb257432aee Mon Sep 17 00:00:00 2001
+From: Thomas Hellstrom <thellstrom@vmware.com>
+Date: Fri, 1 Jun 2012 15:48:04 +0200
+Subject: [PATCH 50/86] drm/vmwgfx: Fix nasty write past alloced memory area
+
+commit 0824db38e515644f8d1bfd64adbd7cb2c6ea7c62 upstream.
+
+Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
+Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c
+index f4e7763..c41226a 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c
+@@ -66,7 +66,7 @@ static int vmw_gmr2_bind(struct vmw_private *dev_priv,
+ 	cmd += sizeof(remap_cmd) / sizeof(uint32);
+ 
+ 	for (i = 0; i < num_pages; ++i) {
+-		if (VMW_PPN_SIZE > 4)
++		if (VMW_PPN_SIZE <= 4)
+ 			*cmd = page_to_pfn(*pages++);
+ 		else
+ 			*((uint64_t *)cmd) = page_to_pfn(*pages++);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0051-mtd-of_parts-fix-breakage-in-Kconfig.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0051-mtd-of_parts-fix-breakage-in-Kconfig.patch
new file mode 100644
index 0000000..f2451df
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0051-mtd-of_parts-fix-breakage-in-Kconfig.patch
@@ -0,0 +1,37 @@
+From a0ca2787e60cec97689e654987149ead8fa6253b Mon Sep 17 00:00:00 2001
+From: Frank Svendsboe <frank.svendsboe@gmail.com>
+Date: Thu, 17 May 2012 22:43:09 +0200
+Subject: [PATCH 51/86] mtd: of_parts: fix breakage in Kconfig
+
+commit 2e929d001e85126d9267de373d4b76014789661d upstream.
+
+MTD_OF_PARTS and the default setting is not working due to using 'Y'
+instead of 'y', introduced in commit
+d6137badeff1ef64b4e0092ec249ebdeaeb3ff37. This made our board, and
+possibly other boards using DTS defined partitions and not having
+CONFIG_MTD_OF_PARTS=y defined in the defconfig, fail to mount root.
+
+Signed-off-by: Frank Svendsboe <frank.svendsboe@gmail.com>
+Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/mtd/Kconfig |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig
+index 318a869..4035b6d 100644
+--- a/drivers/mtd/Kconfig
++++ b/drivers/mtd/Kconfig
+@@ -128,7 +128,7 @@ config MTD_AFS_PARTS
+ 
+ config MTD_OF_PARTS
+ 	tristate "OpenFirmware partitioning information support"
+-	default Y
++	default y
+ 	depends on OF
+ 	help
+ 	  This provides a partition parsing function which derives
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0052-fec_mpc52xx-fix-timestamp-filtering.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0052-fec_mpc52xx-fix-timestamp-filtering.patch
new file mode 100644
index 0000000..c808bfe
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0052-fec_mpc52xx-fix-timestamp-filtering.patch
@@ -0,0 +1,34 @@
+From cc0b272fadb6be36a03152cbd37a95725a5114d4 Mon Sep 17 00:00:00 2001
+From: Stephan Gatzka <stephan@gatzka.org>
+Date: Sat, 2 Jun 2012 03:04:06 +0000
+Subject: [PATCH 52/86] fec_mpc52xx: fix timestamp filtering
+
+commit 9ca3cc6f3026946ba655e863ca2096339e667639 upstream.
+
+skb_defer_rx_timestamp was called with a freshly allocated skb but must
+be called with rskb instead.
+
+Signed-off-by: Stephan Gatzka <stephan@gatzka.org>
+Acked-by: Richard Cochran <richardcochran@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/freescale/fec_mpc52xx.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/freescale/fec_mpc52xx.c b/drivers/net/ethernet/freescale/fec_mpc52xx.c
+index 30745b5..1e52736 100644
+--- a/drivers/net/ethernet/freescale/fec_mpc52xx.c
++++ b/drivers/net/ethernet/freescale/fec_mpc52xx.c
+@@ -437,7 +437,7 @@ static irqreturn_t mpc52xx_fec_rx_interrupt(int irq, void *dev_id)
+ 		length = status & BCOM_FEC_RX_BD_LEN_MASK;
+ 		skb_put(rskb, length - 4);	/* length without CRC32 */
+ 		rskb->protocol = eth_type_trans(rskb, dev);
+-		if (!skb_defer_rx_timestamp(skb))
++		if (!skb_defer_rx_timestamp(rskb))
+ 			netif_rx(rskb);
+ 
+ 		spin_lock(&priv->lock);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0053-Bluetooth-btusb-Add-vendor-specific-ID-0a5c-21f3-for.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0053-Bluetooth-btusb-Add-vendor-specific-ID-0a5c-21f3-for.patch
new file mode 100644
index 0000000..e8bb82b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0053-Bluetooth-btusb-Add-vendor-specific-ID-0a5c-21f3-for.patch
@@ -0,0 +1,44 @@
+From b57ea95f303c57eecda3fabdf246147ca9236cc3 Mon Sep 17 00:00:00 2001
+From: Manoj Iyer <manoj.iyer@canonical.com>
+Date: Thu, 2 Feb 2012 09:32:36 -0600
+Subject: [PATCH 53/86] Bluetooth: btusb: Add vendor specific ID (0a5c 21f3)
+ for BCM20702A0
+
+commit 37305cf649689a4d2341dd6fd89b091c6007f9ba upstream.
+
+T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#= 5 Spd=12 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=0a5c ProdID=21f3 Rev=01.12
+S: Manufacturer=Broadcom Corp
+S: Product=BCM20702A0
+S: SerialNumber=74DE2B344A7B
+C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
+I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
+Tested-by: Dennis Chua <dennis.chua@canonical.com>
+Acked-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/btusb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index e56da6a..1f8c8ca 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -102,6 +102,7 @@ static struct usb_device_id btusb_table[] = {
+ 
+ 	/* Broadcom BCM20702A0 */
+ 	{ USB_DEVICE(0x0a5c, 0x21e3) },
++	{ USB_DEVICE(0x0a5c, 0x21f3) },
+ 	{ USB_DEVICE(0x413c, 0x8197) },
+ 
+ 	{ }	/* Terminating entry */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0054-Bluetooth-btusb-add-support-for-BCM20702A0-0a5c-21e6.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0054-Bluetooth-btusb-add-support-for-BCM20702A0-0a5c-21e6.patch
new file mode 100644
index 0000000..4adefec
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0054-Bluetooth-btusb-add-support-for-BCM20702A0-0a5c-21e6.patch
@@ -0,0 +1,48 @@
+From c2b51905d0a995131d0e4ad248ebe4bc4a5c9470 Mon Sep 17 00:00:00 2001
+From: "James M. Leddy" <james.leddy@canonical.com>
+Date: Tue, 6 Mar 2012 02:41:33 +0200
+Subject: [PATCH 54/86] Bluetooth: btusb: add support for BCM20702A0
+ [0a5c:21e6]
+
+commit 0a4eaeeb993658a4d6cff054a863241f32d3d2fb upstream.
+
+Add another vendor specific ID for BCM20702A0.  This has been tested and
+works on hardware with this device.
+
+output of usb-devices:
+T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=04 Dev#= 6 Spd=12 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=0a5c ProdID=21e6 Rev=01.12
+S: Manufacturer=Broadcom Corp
+S: Product=BCM20702A0
+S: SerialNumber=D0DF9AFB227B
+C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
+I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Signed-off-by: James M. Leddy <james.leddy@canonical.com>
+Acked-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/btusb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 1f8c8ca..fde7512 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -102,6 +102,7 @@ static struct usb_device_id btusb_table[] = {
+ 
+ 	/* Broadcom BCM20702A0 */
+ 	{ USB_DEVICE(0x0a5c, 0x21e3) },
++	{ USB_DEVICE(0x0a5c, 0x21e6) },
+ 	{ USB_DEVICE(0x0a5c, 0x21f3) },
+ 	{ USB_DEVICE(0x413c, 0x8197) },
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0055-Bluetooth-btusb-Add-USB-device-ID-0a5c-21e8.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0055-Bluetooth-btusb-Add-USB-device-ID-0a5c-21e8.patch
new file mode 100644
index 0000000..65aed69
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0055-Bluetooth-btusb-Add-USB-device-ID-0a5c-21e8.patch
@@ -0,0 +1,47 @@
+From 67248cba79392f35493056ea7262d27fc1fe06f3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= <jprvita@openbossa.org>
+Date: Wed, 14 Mar 2012 21:45:16 +0200
+Subject: [PATCH 55/86] Bluetooth: btusb: Add USB device ID "0a5c 21e8"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 6dfc326f0605fd87e4c10ccde10de0ce4280d72d upstream.
+
+One more vendor-specific ID for BCM20702A0.
+
+T:  Bus=01 Lev=03 Prnt=05 Port=02 Cnt=01 Dev#=  9 Spd=12  MxCh= 0
+D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=0a5c ProdID=21e8 Rev=01.12
+S:  Manufacturer=Broadcom Corp
+S:  Product=BCM20702A0
+S:  SerialNumber=00027221F4E2
+C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
+I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Signed-off-by: João Paulo Rechi Vita <jprvita@openbossa.org>
+Acked-by: Gustavo F. Padovan <padovan@profusion.mobi>
+Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/btusb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index fde7512..d4859bf 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -103,6 +103,7 @@ static struct usb_device_id btusb_table[] = {
+ 	/* Broadcom BCM20702A0 */
+ 	{ USB_DEVICE(0x0a5c, 0x21e3) },
+ 	{ USB_DEVICE(0x0a5c, 0x21e6) },
++	{ USB_DEVICE(0x0a5c, 0x21e8) },
+ 	{ USB_DEVICE(0x0a5c, 0x21f3) },
+ 	{ USB_DEVICE(0x413c, 0x8197) },
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0056-Bluetooth-btusb-typo-in-Broadcom-SoftSailing-id.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0056-Bluetooth-btusb-typo-in-Broadcom-SoftSailing-id.patch
new file mode 100644
index 0000000..35c5c39
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0056-Bluetooth-btusb-typo-in-Broadcom-SoftSailing-id.patch
@@ -0,0 +1,66 @@
+From e109dadcc7d05181ac8e093311d8a242b0d58ca7 Mon Sep 17 00:00:00 2001
+From: Don Zickus <dzickus@redhat.com>
+Date: Wed, 28 Mar 2012 16:41:11 -0400
+Subject: [PATCH 56/86] Bluetooth: btusb: typo in Broadcom SoftSailing id
+
+commit 2e8b506310f6433d5558387fd568d4bfb1d6a799 upstream.
+
+I was trying to backport the following commit to RHEL-6
+
+    From 0cea73465cd22373c5cd43a3edd25fbd4bb532ef Mon Sep 17 00:00:00 2001
+    From: Oliver Neukum <oliver@neukum.org>
+    Date: Wed, 21 Sep 2011 11:37:15 +0200
+    Subject: [PATCH] btusb: add device entry for Broadcom SoftSailing
+
+and noticed it wasn't working on an HP Elitebook.  Looking into the patch I
+noticed a very subtle typo in the ids.  The patch has '0x05ac' instead of
+'0x0a5c'.  A snippet of the lsusb -v output also shows this:
+
+Bus 002 Device 003: ID 0a5c:21e1 Broadcom Corp.
+Device Descriptor:
+  bLength                18
+  bDescriptorType         1
+  bcdUSB               2.00
+  bDeviceClass          255 Vendor Specific Class
+  bDeviceSubClass         1
+  bDeviceProtocol         1
+  bMaxPacketSize0        64
+  idVendor           0x0a5c Broadcom Corp.
+  idProduct          0x21e1
+  bcdDevice            1.12
+  iManufacturer           1 Broadcom Corp
+  iProduct                2 BCM20702A0
+  iSerial                 3 60D819F0338C
+  bNumConfigurations      1
+
+Looking at other Broadcom ids, the fix matches them whereas the original patch
+matches Apple's ids.
+
+Tested on an HP Elitebook 8760w.  The btusb binds and the userspace stuff loads
+correctly.
+
+Cc: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: Don Zickus <dzickus@redhat.com>
+Acked-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/btusb.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index d4859bf..f8a0b7f 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -61,7 +61,7 @@ static struct usb_device_id btusb_table[] = {
+ 	{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
+ 
+ 	/* Broadcom SoftSailing reporting vendor specific */
+-	{ USB_DEVICE(0x05ac, 0x21e1) },
++	{ USB_DEVICE(0x0a5c, 0x21e1) },
+ 
+ 	/* Apple MacBookPro 7,1 */
+ 	{ USB_DEVICE(0x05ac, 0x8213) },
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0057-Bluetooth-btusb-Add-vendor-specific-ID-0489-e042-for.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0057-Bluetooth-btusb-Add-vendor-specific-ID-0489-e042-for.patch
new file mode 100644
index 0000000..4e9b6d6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0057-Bluetooth-btusb-Add-vendor-specific-ID-0489-e042-for.patch
@@ -0,0 +1,43 @@
+From d7988c4b2a641a23d6156b650616eada6ba6152a Mon Sep 17 00:00:00 2001
+From: Manoj Iyer <manoj.iyer@canonical.com>
+Date: Mon, 9 Apr 2012 09:22:28 -0500
+Subject: [PATCH 57/86] Bluetooth: btusb: Add vendor specific ID (0489 e042)
+ for BCM20702A0
+
+commit 79cd76022044f8177bb00e3fd590ec8d6b5f8c35 upstream.
+
+T: Bus=02 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=0489 ProdID=e042 Rev=01.12
+S: Manufacturer=Broadcom Corp
+S: Product=BCM20702A0
+S: SerialNumber=E4D53DCA61B5
+C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
+I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Reported-by: Dennis Chua <dennis.chua@canonical.com>
+Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
+Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/btusb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index f8a0b7f..41fe990 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -101,6 +101,7 @@ static struct usb_device_id btusb_table[] = {
+ 	{ USB_DEVICE(0x0c10, 0x0000) },
+ 
+ 	/* Broadcom BCM20702A0 */
++	{ USB_DEVICE(0x0489, 0xe042) },
+ 	{ USB_DEVICE(0x0a5c, 0x21e3) },
+ 	{ USB_DEVICE(0x0a5c, 0x21e6) },
+ 	{ USB_DEVICE(0x0a5c, 0x21e8) },
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0058-Bluetooth-Add-support-for-Atheros-13d3-3362.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0058-Bluetooth-Add-support-for-Atheros-13d3-3362.patch
new file mode 100644
index 0000000..f383af8
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0058-Bluetooth-Add-support-for-Atheros-13d3-3362.patch
@@ -0,0 +1,64 @@
+From e98b15f43ca380ca2d8adeae78da99222cf12f8a Mon Sep 17 00:00:00 2001
+From: AceLan Kao <acelan.kao@canonical.com>
+Date: Fri, 13 Apr 2012 17:39:57 +0800
+Subject: [PATCH 58/86] Bluetooth: Add support for Atheros [13d3:3362]
+
+commit 87522a433ba6886b5ccbb497e0a7cb8097def64e upstream.
+
+Add another vendor specific ID for Atheros AR3012 device.
+This chip is wrapped by IMC Networks.
+
+output of usb-devices:
+T:  Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  5 Spd=12  MxCh= 0
+D:  Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=13d3 ProdID=3362 Rev=00.02
+S:  Manufacturer=Atheros Communications
+S:  Product=Bluetooth USB Host Controller
+S:  SerialNumber=Alaska Day 2006
+C:  #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
+I:  If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+I:  If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+
+Signed-off-by: AceLan Kao <acelan.kao@canonical.com>
+Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/ath3k.c |    2 ++
+ drivers/bluetooth/btusb.c |    1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
+index 99fefbd..90482ef 100644
+--- a/drivers/bluetooth/ath3k.c
++++ b/drivers/bluetooth/ath3k.c
+@@ -74,6 +74,7 @@ static struct usb_device_id ath3k_table[] = {
+ 	{ USB_DEVICE(0x0CF3, 0x311D) },
+ 	{ USB_DEVICE(0x13d3, 0x3375) },
+ 	{ USB_DEVICE(0x04CA, 0x3005) },
++	{ USB_DEVICE(0x13d3, 0x3362) },
+ 
+ 	/* Atheros AR5BBU12 with sflash firmware */
+ 	{ USB_DEVICE(0x0489, 0xE02C) },
+@@ -93,6 +94,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
+ 	{ USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
++	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
+ 
+ 	{ }	/* Terminating entry */
+ };
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 41fe990..1329fa7 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -134,6 +134,7 @@ static struct usb_device_id blacklist_table[] = {
+ 	{ USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
++	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
+ 
+ 	/* Atheros AR5BBU12 with sflash firmware */
+ 	{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0059-Bluetooth-Add-support-for-AR3012-0cf3-e004.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0059-Bluetooth-Add-support-for-AR3012-0cf3-e004.patch
new file mode 100644
index 0000000..b52635a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0059-Bluetooth-Add-support-for-AR3012-0cf3-e004.patch
@@ -0,0 +1,65 @@
+From d86daa62c84ee4f586aed288307d8086ffd03db9 Mon Sep 17 00:00:00 2001
+From: AceLan Kao <acelan.kao@canonical.com>
+Date: Thu, 19 Apr 2012 14:53:45 +0800
+Subject: [PATCH 59/86] Bluetooth: Add support for AR3012 [0cf3:e004]
+
+commit ac71311e65e2c4c2dbac76db698fecbee755b016 upstream.
+
+Add another vendor specific ID for Atheros AR3012
+
+output of usb-devices:
+T:  Bus=02 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
+D:  Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=0cf3 ProdID=e004 Rev=00.02
+S:  Manufacturer=Atheros Communications
+S:  Product=Bluetooth USB Host Controller
+S:  SerialNumber=Alaska Day 2006
+C:  #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
+I:  If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+I:  If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+
+BugLink: https://bugs.launchpad.net/bugs/922715
+
+Signed-off-by: AceLan Kao <acelan.kao@canonical.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/ath3k.c |    2 ++
+ drivers/bluetooth/btusb.c |    1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
+index 90482ef..7e0b3c4 100644
+--- a/drivers/bluetooth/ath3k.c
++++ b/drivers/bluetooth/ath3k.c
+@@ -75,6 +75,7 @@ static struct usb_device_id ath3k_table[] = {
+ 	{ USB_DEVICE(0x13d3, 0x3375) },
+ 	{ USB_DEVICE(0x04CA, 0x3005) },
+ 	{ USB_DEVICE(0x13d3, 0x3362) },
++	{ USB_DEVICE(0x0CF3, 0xE004) },
+ 
+ 	/* Atheros AR5BBU12 with sflash firmware */
+ 	{ USB_DEVICE(0x0489, 0xE02C) },
+@@ -95,6 +96,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
+ 	{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
++	{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ 
+ 	{ }	/* Terminating entry */
+ };
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 1329fa7..d6217c2 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -135,6 +135,7 @@ static struct usb_device_id blacklist_table[] = {
+ 	{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
++	{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ 
+ 	/* Atheros AR5BBU12 with sflash firmware */
+ 	{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0060-Add-Foxconn-Hon-Hai-IDs-for-btusb-module.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0060-Add-Foxconn-Hon-Hai-IDs-for-btusb-module.patch
new file mode 100644
index 0000000..ca759ca
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0060-Add-Foxconn-Hon-Hai-IDs-for-btusb-module.patch
@@ -0,0 +1,71 @@
+From ebe49536c92d57d8147efb128bbd6e3aff2e9289 Mon Sep 17 00:00:00 2001
+From: Steven Harms <sjharms@gmail.com>
+Date: Fri, 13 Apr 2012 14:45:55 -0400
+Subject: [PATCH 60/86] Add Foxconn / Hon Hai IDs for btusb module
+
+commit 985140369be1e886754d8ac0375dd64e4f727311 upstream.
+
+This change adds 0x0489:0xe033 to the btusb module.
+
+This bluetooth usb device is integrated in the Acer TimelineX AS4830TG-6808 notebook.
+
+Output from /sys/kernel/debug/usb/devices:
+
+T:  Bus=01 Lev=02 Prnt=02 Port=05 Cnt=02 Dev#=  4 Spd=12   MxCh= 0
+D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=0489 ProdID=e033 Rev= 2.29
+S:  Manufacturer=Broadcom Corp
+S:  Product=Acer Module
+S:  SerialNumber=60D819F74101
+C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=  0mA
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
+E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
+E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+I:  If#= 1 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  32 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  32 Ivl=1ms
+I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  64 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  64 Ivl=1ms
+I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  64 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  64 Ivl=1ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E:  Ad=84(I) Atr=02(Bulk) MxPS=  32 Ivl=0ms
+E:  Ad=04(O) Atr=02(Bulk) MxPS=  32 Ivl=0ms
+I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Signed-off-by: Steven Harms <sjharms@gmail.com>
+Signed-off-by: Gustavo Padovan <gustavo@padovan.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/btusb.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index d6217c2..fdceeac 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -108,6 +108,9 @@ static struct usb_device_id btusb_table[] = {
+ 	{ USB_DEVICE(0x0a5c, 0x21f3) },
+ 	{ USB_DEVICE(0x413c, 0x8197) },
+ 
++	/* Foxconn - Hon Hai */
++	{ USB_DEVICE(0x0489, 0xe033) },
++
+ 	{ }	/* Terminating entry */
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0061-Bluetooth-Add-support-for-Foxconn-Hon-Hai-AR5BBU22-0.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0061-Bluetooth-Add-support-for-Foxconn-Hon-Hai-AR5BBU22-0.patch
new file mode 100644
index 0000000..f0c30e1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0061-Bluetooth-Add-support-for-Foxconn-Hon-Hai-AR5BBU22-0.patch
@@ -0,0 +1,94 @@
+From c28bcb8c3f6bdeb976832e0726872944c739ae6a Mon Sep 17 00:00:00 2001
+From: Michael Gruetzner <mgruetzn@gmx.de>
+Date: Wed, 2 May 2012 22:33:40 +0200
+Subject: [PATCH 61/86] Bluetooth: Add support for Foxconn/Hon Hai AR5BBU22
+ 0489:E03C
+
+commit 85d59726c5c66016a507f1f4a60db8e374dd284d upstream.
+
+Add Foxconn/Hon Hai AR5BBU22 Bluetooth Module( 0x489:0xE03C) to
+the blacklist of btusb module and add it to the ath3k module to properly
+load the firmware in Kernel 3.3.4
+The device is integrated in  e.g. some  Acer Aspire 7750G.
+
+Output from /sys/kernel/debug/usb/devices:
+
+T:  Bus=01 Lev=02 Prnt=02 Port=05 Cnt=02 Dev#=  6 Spd=12   MxCh= 0
+D:  Ver= 2.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
+P:  Vendor=0489 ProdID=e03c Rev= 0.02
+S:  Manufacturer=Atheros Communications
+S:  Product=Bluetooth USB Host Controller
+S:  SerialNumber=Alaska Day 2006
+C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
+E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
+E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
+I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
+I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
+I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
+I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
+I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
+
+Signed-off-by: Michael Gruetzner <mgruetzn@gmx.de>
+Signed-off-by: Gustavo Padovan <gustavo@padovan.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/bluetooth/ath3k.c |    6 ++++++
+ drivers/bluetooth/btusb.c |    3 +++
+ 2 files changed, 9 insertions(+)
+
+diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
+index 7e0b3c4..f1bd44f 100644
+--- a/drivers/bluetooth/ath3k.c
++++ b/drivers/bluetooth/ath3k.c
+@@ -80,6 +80,9 @@ static struct usb_device_id ath3k_table[] = {
+ 	/* Atheros AR5BBU12 with sflash firmware */
+ 	{ USB_DEVICE(0x0489, 0xE02C) },
+ 
++	/* Atheros AR5BBU22 with sflash firmware */
++	{ USB_DEVICE(0x0489, 0xE03C) },
++
+ 	{ }	/* Terminating entry */
+ };
+ 
+@@ -98,6 +101,9 @@ static struct usb_device_id ath3k_blist_tbl[] = {
+ 	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
+ 	{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ 
++	/* Atheros AR5BBU22 with sflash firmware */
++	{ USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 },
++
+ 	{ }	/* Terminating entry */
+ };
+ 
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index fdceeac..fc4bcd6 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -143,6 +143,9 @@ static struct usb_device_id blacklist_table[] = {
+ 	/* Atheros AR5BBU12 with sflash firmware */
+ 	{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
+ 
++	/* Atheros AR5BBU12 with sflash firmware */
++	{ USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
++
+ 	/* Broadcom BCM2035 */
+ 	{ USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
+ 	{ USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0062-drm-i915-Disable-FBC-on-SandyBridge.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0062-drm-i915-Disable-FBC-on-SandyBridge.patch
new file mode 100644
index 0000000..de38173
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0062-drm-i915-Disable-FBC-on-SandyBridge.patch
@@ -0,0 +1,34 @@
+From d23ccb0cbe37783fcfb8879480160ed840488bb2 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 8 Nov 2011 23:17:34 +0000
+Subject: [PATCH 62/86] drm/i915:: Disable FBC on SandyBridge
+
+commit d56d8b28e9247e7e35e02fbb12b12239a2c33ad1 upstream.
+
+Enabling FBC is causing the BLT ring to run between 10-100x slower than
+normal and frequently lockup. The interim solution is disable FBC once
+more until we know why.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Keith Packard <keithp@keithp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_display.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 41bbe78..4720397 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -1864,7 +1864,7 @@ static void intel_update_fbc(struct drm_device *dev)
+ 	if (enable_fbc < 0) {
+ 		DRM_DEBUG_KMS("fbc set to per-chip default\n");
+ 		enable_fbc = 1;
+-		if (INTEL_INFO(dev)->gen <= 5)
++		if (INTEL_INFO(dev)->gen <= 6)
+ 			enable_fbc = 0;
+ 	}
+ 	if (!enable_fbc) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0063-ipv4-Do-not-use-dead-fib_info-entries.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0063-ipv4-Do-not-use-dead-fib_info-entries.patch
new file mode 100644
index 0000000..71f8710
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0063-ipv4-Do-not-use-dead-fib_info-entries.patch
@@ -0,0 +1,36 @@
+From 1fc7ceff08329209e4c28263a5b545343d4cce19 Mon Sep 17 00:00:00 2001
+From: "David S. Miller" <davem@davemloft.net>
+Date: Thu, 10 May 2012 22:16:32 -0400
+Subject: [PATCH 63/86] ipv4: Do not use dead fib_info entries.
+
+[ Upstream commit dccd9ecc374462e5d6a5b8f8110415a86c2213d8 ]
+
+Due to RCU lookups and RCU based release, fib_info objects can
+be found during lookup which have fi->fib_dead set.
+
+We must ignore these entries, otherwise we risk dereferencing
+the parts of the entry which are being torn down.
+
+Reported-by: Yevgen Pronenko <yevgen.pronenko@sonymobile.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/ipv4/fib_trie.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
+index 3ce23f9..cd2d639 100644
+--- a/net/ipv4/fib_trie.c
++++ b/net/ipv4/fib_trie.c
+@@ -1372,6 +1372,8 @@ static int check_leaf(struct fib_table *tb, struct trie *t, struct leaf *l,
+ 
+ 			if (fa->fa_tos && fa->fa_tos != flp->flowi4_tos)
+ 				continue;
++			if (fi->fib_dead)
++				continue;
+ 			if (fa->fa_info->fib_scope < flp->flowi4_scope)
+ 				continue;
+ 			fib_alias_accessed(fa);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0064-ipv4-fix-the-rcu-race-between-free_fib_info-and-ip_r.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0064-ipv4-fix-the-rcu-race-between-free_fib_info-and-ip_r.patch
new file mode 100644
index 0000000..80f8f2c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0064-ipv4-fix-the-rcu-race-between-free_fib_info-and-ip_r.patch
@@ -0,0 +1,92 @@
+From 5d360e327490263d01b60ed06f9c48ec923e93c4 Mon Sep 17 00:00:00 2001
+From: Yanmin Zhang <yanmin_zhang@linux.intel.com>
+Date: Wed, 23 May 2012 15:39:45 +0000
+Subject: [PATCH 64/86] ipv4: fix the rcu race between free_fib_info and
+ ip_route_output_slow
+
+[ Upstream commit e49cc0da7283088c5e03d475ffe2fdcb24a6d5b1 ]
+
+We hit a kernel OOPS.
+
+<3>[23898.789643] BUG: sleeping function called from invalid context at
+/data/buildbot/workdir/ics/hardware/intel/linux-2.6/arch/x86/mm/fault.c:1103
+<3>[23898.862215] in_atomic(): 0, irqs_disabled(): 0, pid: 10526, name:
+Thread-6683
+<4>[23898.967805] HSU serial 0000:00:05.1: 0000:00:05.2:HSU serial prevented me
+to suspend...
+<4>[23899.258526] Pid: 10526, comm: Thread-6683 Tainted: G        W
+3.0.8-137685-ge7742f9 #1
+<4>[23899.357404] HSU serial 0000:00:05.1: 0000:00:05.2:HSU serial prevented me
+to suspend...
+<4>[23899.904225] Call Trace:
+<4>[23899.989209]  [<c1227f50>] ? pgtable_bad+0x130/0x130
+<4>[23900.000416]  [<c1238c2a>] __might_sleep+0x10a/0x110
+<4>[23900.007357]  [<c1228021>] do_page_fault+0xd1/0x3c0
+<4>[23900.013764]  [<c18e9ba9>] ? restore_all+0xf/0xf
+<4>[23900.024024]  [<c17c007b>] ? napi_complete+0x8b/0x690
+<4>[23900.029297]  [<c1227f50>] ? pgtable_bad+0x130/0x130
+<4>[23900.123739]  [<c1227f50>] ? pgtable_bad+0x130/0x130
+<4>[23900.128955]  [<c18ea0c3>] error_code+0x5f/0x64
+<4>[23900.133466]  [<c1227f50>] ? pgtable_bad+0x130/0x130
+<4>[23900.138450]  [<c17f6298>] ? __ip_route_output_key+0x698/0x7c0
+<4>[23900.144312]  [<c17f5f8d>] ? __ip_route_output_key+0x38d/0x7c0
+<4>[23900.150730]  [<c17f63df>] ip_route_output_flow+0x1f/0x60
+<4>[23900.156261]  [<c181de58>] ip4_datagram_connect+0x188/0x2b0
+<4>[23900.161960]  [<c18e981f>] ? _raw_spin_unlock_bh+0x1f/0x30
+<4>[23900.167834]  [<c18298d6>] inet_dgram_connect+0x36/0x80
+<4>[23900.173224]  [<c14f9e88>] ? _copy_from_user+0x48/0x140
+<4>[23900.178817]  [<c17ab9da>] sys_connect+0x9a/0xd0
+<4>[23900.183538]  [<c132e93c>] ? alloc_file+0xdc/0x240
+<4>[23900.189111]  [<c123925d>] ? sub_preempt_count+0x3d/0x50
+
+Function free_fib_info resets nexthop_nh->nh_dev to NULL before releasing
+fi. Other cpu might be accessing fi. Fixing it by delaying the releasing.
+
+With the patch, we ran MTBF testing on Android mobile for 12 hours
+and didn't trigger the issue.
+
+Thank Eric for very detailed review/checking the issue.
+
+Signed-off-by: Yanmin Zhang <yanmin_zhang@linux.intel.com>
+Signed-off-by: Kun Jiang <kunx.jiang@intel.com>
+Acked-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/ipv4/fib_semantics.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
+index 80106d8..d01f9c6 100644
+--- a/net/ipv4/fib_semantics.c
++++ b/net/ipv4/fib_semantics.c
+@@ -146,6 +146,12 @@ static void free_fib_info_rcu(struct rcu_head *head)
+ {
+ 	struct fib_info *fi = container_of(head, struct fib_info, rcu);
+ 
++	change_nexthops(fi) {
++		if (nexthop_nh->nh_dev)
++			dev_put(nexthop_nh->nh_dev);
++	} endfor_nexthops(fi);
++
++	release_net(fi->fib_net);
+ 	if (fi->fib_metrics != (u32 *) dst_default_metrics)
+ 		kfree(fi->fib_metrics);
+ 	kfree(fi);
+@@ -157,13 +163,7 @@ void free_fib_info(struct fib_info *fi)
+ 		pr_warning("Freeing alive fib_info %p\n", fi);
+ 		return;
+ 	}
+-	change_nexthops(fi) {
+-		if (nexthop_nh->nh_dev)
+-			dev_put(nexthop_nh->nh_dev);
+-		nexthop_nh->nh_dev = NULL;
+-	} endfor_nexthops(fi);
+ 	fib_info_cnt--;
+-	release_net(fi->fib_net);
+ 	call_rcu(&fi->rcu, free_fib_info_rcu);
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0065-set-fake_rtable-s-dst-to-NULL-to-avoid-kernel-Oops.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0065-set-fake_rtable-s-dst-to-NULL-to-avoid-kernel-Oops.patch
new file mode 100644
index 0000000..2d13453
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0065-set-fake_rtable-s-dst-to-NULL-to-avoid-kernel-Oops.patch
@@ -0,0 +1,110 @@
+From aebe9f30c2e54be6030a3a5a25c005053d1e26ef Mon Sep 17 00:00:00 2001
+From: "Peter Huang (Peng)" <peter.huangpeng@huawei.com>
+Date: Thu, 19 Apr 2012 20:12:51 +0000
+Subject: [PATCH 65/86] set fake_rtable's dst to NULL to avoid kernel Oops
+
+[ Upstream commit a881e963c7fe1f226e991ee9bbe8907acda93294 ]
+
+bridge: set fake_rtable's dst to NULL to avoid kernel Oops
+
+when bridge is deleted before tap/vif device's delete, kernel may
+encounter an oops because of NULL reference to fake_rtable's dst.
+Set fake_rtable's dst to NULL before sending packets out can solve
+this problem.
+
+v4 reformat, change br_drop_fake_rtable(skb) to {}
+
+v3 enrich commit header
+
+v2 introducing new flag DST_FAKE_RTABLE to dst_entry struct.
+
+[ Use "do { } while (0)" for nop br_drop_fake_rtable()
+  implementation -DaveM ]
+
+Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
+Signed-off-by: Peter Huang <peter.huangpeng@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/linux/netfilter_bridge.h |    9 +++++++++
+ include/net/dst.h                |    1 +
+ net/bridge/br_forward.c          |    1 +
+ net/bridge/br_netfilter.c        |    8 ++------
+ 4 files changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h
+index 0ddd161..31d2844 100644
+--- a/include/linux/netfilter_bridge.h
++++ b/include/linux/netfilter_bridge.h
+@@ -104,9 +104,18 @@ struct bridge_skb_cb {
+ 	} daddr;
+ };
+ 
++static inline void br_drop_fake_rtable(struct sk_buff *skb)
++{
++	struct dst_entry *dst = skb_dst(skb);
++
++	if (dst && (dst->flags & DST_FAKE_RTABLE))
++		skb_dst_drop(skb);
++}
++
+ #else
+ #define nf_bridge_maybe_copy_header(skb)	(0)
+ #define nf_bridge_pad(skb)			(0)
++#define br_drop_fake_rtable(skb)	        do { } while (0)
+ #endif /* CONFIG_BRIDGE_NETFILTER */
+ 
+ #endif /* __KERNEL__ */
+diff --git a/include/net/dst.h b/include/net/dst.h
+index 75766b4..65bca65 100644
+--- a/include/net/dst.h
++++ b/include/net/dst.h
+@@ -54,6 +54,7 @@ struct dst_entry {
+ #define DST_NOCACHE		0x0010
+ #define DST_NOCOUNT		0x0020
+ #define DST_NOPEER		0x0040
++#define DST_FAKE_RTABLE		0x0080
+ 
+ 	short			error;
+ 	short			obsolete;
+diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
+index ee64287..e221f88 100644
+--- a/net/bridge/br_forward.c
++++ b/net/bridge/br_forward.c
+@@ -47,6 +47,7 @@ int br_dev_queue_push_xmit(struct sk_buff *skb)
+ 		kfree_skb(skb);
+ 	} else {
+ 		skb_push(skb, ETH_HLEN);
++		br_drop_fake_rtable(skb);
+ 		dev_queue_xmit(skb);
+ 	}
+ 
+diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
+index fa8b8f7..577ea5d 100644
+--- a/net/bridge/br_netfilter.c
++++ b/net/bridge/br_netfilter.c
+@@ -147,7 +147,7 @@ void br_netfilter_rtable_init(struct net_bridge *br)
+ 	rt->dst.dev = br->dev;
+ 	rt->dst.path = &rt->dst;
+ 	dst_init_metrics(&rt->dst, br_dst_default_metrics, true);
+-	rt->dst.flags	= DST_NOXFRM | DST_NOPEER;
++	rt->dst.flags	= DST_NOXFRM | DST_NOPEER | DST_FAKE_RTABLE;
+ 	rt->dst.ops = &fake_dst_ops;
+ }
+ 
+@@ -687,11 +687,7 @@ static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff *skb,
+ 				   const struct net_device *out,
+ 				   int (*okfn)(struct sk_buff *))
+ {
+-	struct rtable *rt = skb_rtable(skb);
+-
+-	if (rt && rt == bridge_parent_rtable(in))
+-		skb_dst_drop(skb);
+-
++	br_drop_fake_rtable(skb);
+ 	return NF_ACCEPT;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0066-ipv6-fix-incorrect-ipsec-fragment.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0066-ipv6-fix-incorrect-ipsec-fragment.patch
new file mode 100644
index 0000000..c9b4d22
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0066-ipv6-fix-incorrect-ipsec-fragment.patch
@@ -0,0 +1,181 @@
+From 8e6278442fffb4bfa735336a954144198fd7d778 Mon Sep 17 00:00:00 2001
+From: Gao feng <gaofeng@cn.fujitsu.com>
+Date: Sat, 26 May 2012 01:30:53 +0000
+Subject: [PATCH 66/86] ipv6: fix incorrect ipsec fragment
+
+[ Upstream commit 0c1833797a5a6ec23ea9261d979aa18078720b74 ]
+
+Since commit ad0081e43a
+"ipv6: Fragment locally generated tunnel-mode IPSec6 packets as needed"
+the fragment of packets is incorrect.
+because tunnel mode needs IPsec headers and trailer for all fragments,
+while on transport mode it is sufficient to add the headers to the
+first fragment and the trailer to the last.
+
+so modify mtu and maxfraglen base on ipsec mode and if fragment is first
+or last.
+
+with my test,it work well(every fragment's size is the mtu)
+and does not trigger slow fragment path.
+
+Changes from v1:
+	though optimization, mtu_prev and maxfraglen_prev can be delete.
+	replace xfrm mode codes with dst_entry's new frag DST_XFRM_TUNNEL.
+	add fuction ip6_append_data_mtu to make codes clearer.
+
+Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/net/dst.h      |    1 +
+ net/ipv6/ip6_output.c  |   68 +++++++++++++++++++++++++++++++++++-------------
+ net/xfrm/xfrm_policy.c |    3 +++
+ 3 files changed, 54 insertions(+), 18 deletions(-)
+
+diff --git a/include/net/dst.h b/include/net/dst.h
+index 65bca65..16010d1 100644
+--- a/include/net/dst.h
++++ b/include/net/dst.h
+@@ -55,6 +55,7 @@ struct dst_entry {
+ #define DST_NOCOUNT		0x0020
+ #define DST_NOPEER		0x0040
+ #define DST_FAKE_RTABLE		0x0080
++#define DST_XFRM_TUNNEL		0x0100
+ 
+ 	short			error;
+ 	short			obsolete;
+diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
+index f7f07e2..ae98e09 100644
+--- a/net/ipv6/ip6_output.c
++++ b/net/ipv6/ip6_output.c
+@@ -1178,6 +1178,29 @@ static inline struct ipv6_rt_hdr *ip6_rthdr_dup(struct ipv6_rt_hdr *src,
+ 	return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
+ }
+ 
++static void ip6_append_data_mtu(int *mtu,
++				int *maxfraglen,
++				unsigned int fragheaderlen,
++				struct sk_buff *skb,
++				struct rt6_info *rt)
++{
++	if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
++		if (skb == NULL) {
++			/* first fragment, reserve header_len */
++			*mtu = *mtu - rt->dst.header_len;
++
++		} else {
++			/*
++			 * this fragment is not first, the headers
++			 * space is regarded as data space.
++			 */
++			*mtu = dst_mtu(rt->dst.path);
++		}
++		*maxfraglen = ((*mtu - fragheaderlen) & ~7)
++			      + fragheaderlen - sizeof(struct frag_hdr);
++	}
++}
++
+ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
+ 	int offset, int len, int odd, struct sk_buff *skb),
+ 	void *from, int length, int transhdrlen,
+@@ -1187,7 +1210,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
+ 	struct inet_sock *inet = inet_sk(sk);
+ 	struct ipv6_pinfo *np = inet6_sk(sk);
+ 	struct inet_cork *cork;
+-	struct sk_buff *skb;
++	struct sk_buff *skb, *skb_prev = NULL;
+ 	unsigned int maxfraglen, fragheaderlen;
+ 	int exthdrlen;
+ 	int dst_exthdrlen;
+@@ -1245,8 +1268,12 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
+ 		inet->cork.fl.u.ip6 = *fl6;
+ 		np->cork.hop_limit = hlimit;
+ 		np->cork.tclass = tclass;
+-		mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ?
+-		      rt->dst.dev->mtu : dst_mtu(&rt->dst);
++		if (rt->dst.flags & DST_XFRM_TUNNEL)
++			mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ?
++			      rt->dst.dev->mtu : dst_mtu(&rt->dst);
++		else
++			mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ?
++			      rt->dst.dev->mtu : dst_mtu(rt->dst.path);
+ 		if (np->frag_size < mtu) {
+ 			if (np->frag_size)
+ 				mtu = np->frag_size;
+@@ -1342,25 +1369,27 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
+ 			unsigned int fraglen;
+ 			unsigned int fraggap;
+ 			unsigned int alloclen;
+-			struct sk_buff *skb_prev;
+ alloc_new_skb:
+-			skb_prev = skb;
+-
+ 			/* There's no room in the current skb */
+-			if (skb_prev)
+-				fraggap = skb_prev->len - maxfraglen;
++			if (skb)
++				fraggap = skb->len - maxfraglen;
+ 			else
+ 				fraggap = 0;
++			/* update mtu and maxfraglen if necessary */
++			if (skb == NULL || skb_prev == NULL)
++				ip6_append_data_mtu(&mtu, &maxfraglen,
++						    fragheaderlen, skb, rt);
++
++			skb_prev = skb;
+ 
+ 			/*
+ 			 * If remaining data exceeds the mtu,
+ 			 * we know we need more fragment(s).
+ 			 */
+ 			datalen = length + fraggap;
+-			if (datalen > (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen)
+-				datalen = maxfraglen - fragheaderlen;
+ 
+-			fraglen = datalen + fragheaderlen;
++			if (datalen > (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen)
++				datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len;
+ 			if ((flags & MSG_MORE) &&
+ 			    !(rt->dst.dev->features&NETIF_F_SG))
+ 				alloclen = mtu;
+@@ -1369,13 +1398,16 @@ alloc_new_skb:
+ 
+ 			alloclen += dst_exthdrlen;
+ 
+-			/*
+-			 * The last fragment gets additional space at tail.
+-			 * Note: we overallocate on fragments with MSG_MODE
+-			 * because we have no idea if we're the last one.
+-			 */
+-			if (datalen == length + fraggap)
+-				alloclen += rt->dst.trailer_len;
++			if (datalen != length + fraggap) {
++				/*
++				 * this is not the last fragment, the trailer
++				 * space is regarded as data space.
++				 */
++				datalen += rt->dst.trailer_len;
++			}
++
++			alloclen += rt->dst.trailer_len;
++			fraglen = datalen + fragheaderlen;
+ 
+ 			/*
+ 			 * We just reserve space for fragment header.
+diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
+index 9049a5c..0174034 100644
+--- a/net/xfrm/xfrm_policy.c
++++ b/net/xfrm/xfrm_policy.c
+@@ -1919,6 +1919,9 @@ no_transform:
+ 	}
+ ok:
+ 	xfrm_pols_put(pols, drop_pols);
++	if (dst && dst->xfrm &&
++	    dst->xfrm->props.mode == XFRM_MODE_TUNNEL)
++		dst->flags |= DST_XFRM_TUNNEL;
+ 	return dst;
+ 
+ nopol:
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0067-l2tp-fix-oops-in-L2TP-IP-sockets-for-connect-AF_UNSP.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0067-l2tp-fix-oops-in-L2TP-IP-sockets-for-connect-AF_UNSP.patch
new file mode 100644
index 0000000..258e412
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0067-l2tp-fix-oops-in-L2TP-IP-sockets-for-connect-AF_UNSP.patch
@@ -0,0 +1,113 @@
+From d1517b97762180b241f3e888abb8c1ec72e760be Mon Sep 17 00:00:00 2001
+From: James Chapman <jchapman@katalix.com>
+Date: Tue, 29 May 2012 23:13:23 +0000
+Subject: [PATCH 67/86] l2tp: fix oops in L2TP IP sockets for connect()
+ AF_UNSPEC case
+
+[ Upstream commit c51ce49735c183ef2592db70f918ee698716276b ]
+
+An application may call connect() to disconnect a socket using an
+address with family AF_UNSPEC. The L2TP IP sockets were not handling
+this case when the socket is not bound and an attempt to connect()
+using AF_UNSPEC in such cases would result in an oops. This patch
+addresses the problem by protecting the sk_prot->disconnect() call
+against trying to unhash the socket before it is bound.
+
+The patch also adds more checks that the sockaddr supplied to bind()
+and connect() calls is valid.
+
+ RIP: 0010:[<ffffffff82e133b0>]  [<ffffffff82e133b0>] inet_unhash+0x50/0xd0
+ RSP: 0018:ffff88001989be28  EFLAGS: 00010293
+ Stack:
+  ffff8800407a8000 0000000000000000 ffff88001989be78 ffffffff82e3a249
+  ffffffff82e3a050 ffff88001989bec8 ffff88001989be88 ffff8800407a8000
+  0000000000000010 ffff88001989bec8 ffff88001989bea8 ffffffff82e42639
+ Call Trace:
+ [<ffffffff82e3a249>] udp_disconnect+0x1f9/0x290
+ [<ffffffff82e42639>] inet_dgram_connect+0x29/0x80
+ [<ffffffff82d012fc>] sys_connect+0x9c/0x100
+
+Reported-by: Sasha Levin <levinsasha928@gmail.com>
+Signed-off-by: James Chapman <jchapman@katalix.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/l2tp/l2tp_ip.c |   30 ++++++++++++++++++++++++------
+ 1 file changed, 24 insertions(+), 6 deletions(-)
+
+diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
+index 2a2a3e7..2fbbe1f 100644
+--- a/net/l2tp/l2tp_ip.c
++++ b/net/l2tp/l2tp_ip.c
+@@ -251,9 +251,16 @@ static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
+ {
+ 	struct inet_sock *inet = inet_sk(sk);
+ 	struct sockaddr_l2tpip *addr = (struct sockaddr_l2tpip *) uaddr;
+-	int ret = -EINVAL;
++	int ret;
+ 	int chk_addr_ret;
+ 
++	if (!sock_flag(sk, SOCK_ZAPPED))
++		return -EINVAL;
++	if (addr_len < sizeof(struct sockaddr_l2tpip))
++		return -EINVAL;
++	if (addr->l2tp_family != AF_INET)
++		return -EINVAL;
++
+ 	ret = -EADDRINUSE;
+ 	read_lock_bh(&l2tp_ip_lock);
+ 	if (__l2tp_ip_bind_lookup(&init_net, addr->l2tp_addr.s_addr, sk->sk_bound_dev_if, addr->l2tp_conn_id))
+@@ -283,6 +290,8 @@ static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
+ 	sk_del_node_init(sk);
+ 	write_unlock_bh(&l2tp_ip_lock);
+ 	ret = 0;
++	sock_reset_flag(sk, SOCK_ZAPPED);
++
+ out:
+ 	release_sock(sk);
+ 
+@@ -303,13 +312,14 @@ static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len
+ 	__be32 saddr;
+ 	int oif, rc;
+ 
+-	rc = -EINVAL;
++	if (sock_flag(sk, SOCK_ZAPPED)) /* Must bind first - autobinding does not work */
++		return -EINVAL;
++
+ 	if (addr_len < sizeof(*lsa))
+-		goto out;
++		return -EINVAL;
+ 
+-	rc = -EAFNOSUPPORT;
+ 	if (lsa->l2tp_family != AF_INET)
+-		goto out;
++		return -EAFNOSUPPORT;
+ 
+ 	lock_sock(sk);
+ 
+@@ -363,6 +373,14 @@ out:
+ 	return rc;
+ }
+ 
++static int l2tp_ip_disconnect(struct sock *sk, int flags)
++{
++	if (sock_flag(sk, SOCK_ZAPPED))
++		return 0;
++
++	return udp_disconnect(sk, flags);
++}
++
+ static int l2tp_ip_getname(struct socket *sock, struct sockaddr *uaddr,
+ 			   int *uaddr_len, int peer)
+ {
+@@ -598,7 +616,7 @@ static struct proto l2tp_ip_prot = {
+ 	.close		   = l2tp_ip_close,
+ 	.bind		   = l2tp_ip_bind,
+ 	.connect	   = l2tp_ip_connect,
+-	.disconnect	   = udp_disconnect,
++	.disconnect	   = l2tp_ip_disconnect,
+ 	.ioctl		   = udp_ioctl,
+ 	.destroy	   = l2tp_ip_destroy_sock,
+ 	.setsockopt	   = ip_setsockopt,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0068-r8169-missing-barriers.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0068-r8169-missing-barriers.patch
new file mode 100644
index 0000000..3cc1e86
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0068-r8169-missing-barriers.patch
@@ -0,0 +1,47 @@
+From c354bf6217e04a41a963b465634ff37450c68c1e Mon Sep 17 00:00:00 2001
+From: Francois Romieu <romieu@fr.zoreil.com>
+Date: Fri, 27 Jan 2012 15:05:38 +0100
+Subject: [PATCH 68/86] r8169: missing barriers.
+
+[ Upstream commit 1e874e041fc7c222cbd85b20c4406070be1f687a ]
+
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Cc: Hayes Wang <hayeswang@realtek.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/realtek/r8169.c |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
+index 697cae3..5104d76 100644
+--- a/drivers/net/ethernet/realtek/r8169.c
++++ b/drivers/net/ethernet/realtek/r8169.c
+@@ -5562,7 +5562,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
+ 
+ 	if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
+ 		netif_stop_queue(dev);
+-		smp_rmb();
++		smp_mb();
+ 		if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
+ 			netif_wake_queue(dev);
+ 	}
+@@ -5663,7 +5663,7 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
+ 
+ 	if (tp->dirty_tx != dirty_tx) {
+ 		tp->dirty_tx = dirty_tx;
+-		smp_wmb();
++		smp_mb();
+ 		if (netif_queue_stopped(dev) &&
+ 		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
+ 			netif_wake_queue(dev);
+@@ -5674,7 +5674,6 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
+ 		 * of start_xmit activity is detected (if it is not detected,
+ 		 * it is slow enough). -- FR
+ 		 */
+-		smp_rmb();
+ 		if (tp->cur_tx != dirty_tx)
+ 			RTL_W8(TxPoll, NPQ);
+ 	}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0069-r8169-fix-early-queue-wake-up.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0069-r8169-fix-early-queue-wake-up.patch
new file mode 100644
index 0000000..e8e1ad5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0069-r8169-fix-early-queue-wake-up.patch
@@ -0,0 +1,58 @@
+From 88d5ff14a80522c59577194a954942feefd47d67 Mon Sep 17 00:00:00 2001
+From: Francois Romieu <romieu@fr.zoreil.com>
+Date: Tue, 31 Jan 2012 00:00:19 +0100
+Subject: [PATCH 69/86] r8169: fix early queue wake-up.
+
+[ Upstream commit ae1f23fb433ac0aaff8aeaa5a7b14348e9aa8277 ]
+
+With infinite gratitude to Eric Dumazet for allowing me to identify
+the error.
+
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
+Cc: Hayes Wang <hayeswang@realtek.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/realtek/r8169.c |   18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
+index 5104d76..5f3fa32 100644
+--- a/drivers/net/ethernet/realtek/r8169.c
++++ b/drivers/net/ethernet/realtek/r8169.c
+@@ -5561,7 +5561,18 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
+ 	RTL_W8(TxPoll, NPQ);
+ 
+ 	if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
++		/* Avoid wrongly optimistic queue wake-up: rtl_tx thread must
++		 * not miss a ring update when it notices a stopped queue.
++		 */
++		smp_wmb();
+ 		netif_stop_queue(dev);
++		/* Sync with rtl_tx:
++		 * - publish queue status and cur_tx ring index (write barrier)
++		 * - refresh dirty_tx ring index (read barrier).
++		 * May the current thread have a pessimistic view of the ring
++		 * status and forget to wake up queue, a racing rtl_tx thread
++		 * can't.
++		 */
+ 		smp_mb();
+ 		if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
+ 			netif_wake_queue(dev);
+@@ -5663,6 +5674,13 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
+ 
+ 	if (tp->dirty_tx != dirty_tx) {
+ 		tp->dirty_tx = dirty_tx;
++		/* Sync with rtl8169_start_xmit:
++		 * - publish dirty_tx ring index (write barrier)
++		 * - refresh cur_tx ring index and queue status (read barrier)
++		 * May the current thread miss the stopped queue condition,
++		 * a racing xmit thread can only have a right view of the
++		 * ring status.
++		 */
+ 		smp_mb();
+ 		if (netif_queue_stopped(dev) &&
+ 		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0070-r8169-fix-unsigned-int-wraparound-with-TSO.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0070-r8169-fix-unsigned-int-wraparound-with-TSO.patch
new file mode 100644
index 0000000..c124fb6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0070-r8169-fix-unsigned-int-wraparound-with-TSO.patch
@@ -0,0 +1,82 @@
+From 70031dbb0e0a38f332ddb13359f9984bd25eb8c2 Mon Sep 17 00:00:00 2001
+From: Julien Ducourthial <jducourt@free.fr>
+Date: Wed, 9 May 2012 00:00:06 +0200
+Subject: [PATCH 70/86] r8169: fix unsigned int wraparound with TSO
+
+[ Upstream commit 477206a018f902895bfcd069dd820bfe94c187b1 ]
+
+The r8169 may get stuck or show bad behaviour after activating TSO :
+the net_device is not stopped when it has no more TX descriptors.
+This problem comes from TX_BUFS_AVAIL which may reach -1 when all
+transmit descriptors are in use. The patch simply tries to keep positive
+values.
+
+Tested with 8111d(onboard) on a D510MO, and with 8111e(onboard) on a
+Zotac 890GXITX.
+
+Signed-off-by: Julien Ducourthial <jducourt@free.fr>
+Acked-by: Francois Romieu <romieu@fr.zoreil.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/realtek/r8169.c |   16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
+index 5f3fa32..cc2565c 100644
+--- a/drivers/net/ethernet/realtek/r8169.c
++++ b/drivers/net/ethernet/realtek/r8169.c
+@@ -62,8 +62,12 @@
+ #define R8169_MSG_DEFAULT \
+ 	(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
+ 
+-#define TX_BUFFS_AVAIL(tp) \
+-	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx - 1)
++#define TX_SLOTS_AVAIL(tp) \
++	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx)
++
++/* A skbuff with nr_frags needs nr_frags+1 entries in the tx queue */
++#define TX_FRAGS_READY_FOR(tp,nr_frags) \
++	(TX_SLOTS_AVAIL(tp) >= (nr_frags + 1))
+ 
+ /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
+    The RTL chips use a 64 element hash table based on the Ethernet CRC. */
+@@ -5512,7 +5516,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
+ 	u32 opts[2];
+ 	int frags;
+ 
+-	if (unlikely(TX_BUFFS_AVAIL(tp) < skb_shinfo(skb)->nr_frags)) {
++	if (unlikely(!TX_FRAGS_READY_FOR(tp, skb_shinfo(skb)->nr_frags))) {
+ 		netif_err(tp, drv, dev, "BUG! Tx Ring full when queue awake!\n");
+ 		goto err_stop_0;
+ 	}
+@@ -5560,7 +5564,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
+ 
+ 	RTL_W8(TxPoll, NPQ);
+ 
+-	if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
++	if (!TX_FRAGS_READY_FOR(tp, MAX_SKB_FRAGS)) {
+ 		/* Avoid wrongly optimistic queue wake-up: rtl_tx thread must
+ 		 * not miss a ring update when it notices a stopped queue.
+ 		 */
+@@ -5574,7 +5578,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
+ 		 * can't.
+ 		 */
+ 		smp_mb();
+-		if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
++		if (TX_FRAGS_READY_FOR(tp, MAX_SKB_FRAGS))
+ 			netif_wake_queue(dev);
+ 	}
+ 
+@@ -5683,7 +5687,7 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
+ 		 */
+ 		smp_mb();
+ 		if (netif_queue_stopped(dev) &&
+-		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
++		    TX_FRAGS_READY_FOR(tp, MAX_SKB_FRAGS)) {
+ 			netif_wake_queue(dev);
+ 		}
+ 		/*
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0071-Revert-net-maintain-namespace-isolation-between-vlan.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0071-Revert-net-maintain-namespace-isolation-between-vlan.patch
new file mode 100644
index 0000000..53583ee
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0071-Revert-net-maintain-namespace-isolation-between-vlan.patch
@@ -0,0 +1,138 @@
+From 8094a25020703041f42a531dfac0a2ee24319119 Mon Sep 17 00:00:00 2001
+From: "David S. Miller" <davem@davemloft.net>
+Date: Thu, 10 May 2012 23:03:34 -0400
+Subject: [PATCH 71/86] Revert "net: maintain namespace isolation between vlan
+ and real device"
+
+[ Upstream commit 59b9997baba5242997ddc7bd96b1391f5275a5a4 ]
+
+This reverts commit 8a83a00b0735190384a348156837918271034144.
+
+It causes regressions for S390 devices, because it does an
+unconditional DST drop on SKBs for vlans and the QETH device
+needs the neighbour entry hung off the DST for certain things
+on transmit.
+
+Arnd can't remember exactly why he even needed this change.
+
+Conflicts:
+
+	drivers/net/macvlan.c
+	net/8021q/vlan_dev.c
+	net/core/dev.c
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/macvlan.c     |    2 +-
+ include/linux/netdevice.h |    9 ---------
+ net/8021q/vlan_dev.c      |    2 +-
+ net/core/dev.c            |   36 +++++-------------------------------
+ 4 files changed, 7 insertions(+), 42 deletions(-)
+
+diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
+index 959d448..97f342e 100644
+--- a/drivers/net/macvlan.c
++++ b/drivers/net/macvlan.c
+@@ -258,7 +258,7 @@ static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
+ 
+ xmit_world:
+ 	skb->ip_summed = ip_summed;
+-	skb_set_dev(skb, vlan->lowerdev);
++	skb->dev = vlan->lowerdev;
+ 	return dev_queue_xmit(skb);
+ }
+ 
+diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
+index cbeb586..cb52340 100644
+--- a/include/linux/netdevice.h
++++ b/include/linux/netdevice.h
+@@ -1420,15 +1420,6 @@ static inline bool netdev_uses_dsa_tags(struct net_device *dev)
+ 	return 0;
+ }
+ 
+-#ifndef CONFIG_NET_NS
+-static inline void skb_set_dev(struct sk_buff *skb, struct net_device *dev)
+-{
+-	skb->dev = dev;
+-}
+-#else /* CONFIG_NET_NS */
+-void skb_set_dev(struct sk_buff *skb, struct net_device *dev);
+-#endif
+-
+ static inline bool netdev_uses_trailer_tags(struct net_device *dev)
+ {
+ #ifdef CONFIG_NET_DSA_TAG_TRAILER
+diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
+index bc25286..0cccca8 100644
+--- a/net/8021q/vlan_dev.c
++++ b/net/8021q/vlan_dev.c
+@@ -156,7 +156,7 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
+ 		skb = __vlan_hwaccel_put_tag(skb, vlan_tci);
+ 	}
+ 
+-	skb_set_dev(skb, vlan_dev_info(dev)->real_dev);
++	skb->dev = vlan_dev_info(dev)->real_dev;
+ 	len = skb->len;
+ 	ret = dev_queue_xmit(skb);
+ 
+diff --git a/net/core/dev.c b/net/core/dev.c
+index 61a7baa..1cbddc9 100644
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -1607,10 +1607,14 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
+ 		kfree_skb(skb);
+ 		return NET_RX_DROP;
+ 	}
+-	skb_set_dev(skb, dev);
++	skb->dev = dev;
++	skb_dst_drop(skb);
+ 	skb->tstamp.tv64 = 0;
+ 	skb->pkt_type = PACKET_HOST;
+ 	skb->protocol = eth_type_trans(skb, dev);
++	skb->mark = 0;
++	secpath_reset(skb);
++	nf_reset(skb);
+ 	return netif_rx(skb);
+ }
+ EXPORT_SYMBOL_GPL(dev_forward_skb);
+@@ -1865,36 +1869,6 @@ void netif_device_attach(struct net_device *dev)
+ }
+ EXPORT_SYMBOL(netif_device_attach);
+ 
+-/**
+- * skb_dev_set -- assign a new device to a buffer
+- * @skb: buffer for the new device
+- * @dev: network device
+- *
+- * If an skb is owned by a device already, we have to reset
+- * all data private to the namespace a device belongs to
+- * before assigning it a new device.
+- */
+-#ifdef CONFIG_NET_NS
+-void skb_set_dev(struct sk_buff *skb, struct net_device *dev)
+-{
+-	skb_dst_drop(skb);
+-	if (skb->dev && !net_eq(dev_net(skb->dev), dev_net(dev))) {
+-		secpath_reset(skb);
+-		nf_reset(skb);
+-		skb_init_secmark(skb);
+-		skb->mark = 0;
+-		skb->priority = 0;
+-		skb->nf_trace = 0;
+-		skb->ipvs_property = 0;
+-#ifdef CONFIG_NET_SCHED
+-		skb->tc_index = 0;
+-#endif
+-	}
+-	skb->dev = dev;
+-}
+-EXPORT_SYMBOL(skb_set_dev);
+-#endif /* CONFIG_NET_NS */
+-
+ /*
+  * Invalidate hardware checksum when packet is to be mangled, and
+  * complete checksum manually on outgoing path.
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0072-sctp-check-cached-dst-before-using-it.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0072-sctp-check-cached-dst-before-using-it.patch
new file mode 100644
index 0000000..6cb2e1a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0072-sctp-check-cached-dst-before-using-it.patch
@@ -0,0 +1,88 @@
+From 23c5783d07dcd62f8b86c4eaefef08f2892cbbd0 Mon Sep 17 00:00:00 2001
+From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
+Date: Fri, 4 May 2012 05:24:54 +0000
+Subject: [PATCH 72/86] sctp: check cached dst before using it
+
+[ Upstream commit e0268868ba064980488fc8c194db3d8e9fb2959c ]
+
+dst_check() will take care of SA (and obsolete field), hence
+IPsec rekeying scenario is taken into account.
+
+Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
+Acked-by: Vlad Yaseivch <vyasevich@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/net/sctp/sctp.h |   13 +++++++++++++
+ net/sctp/output.c       |    4 +---
+ net/sctp/transport.c    |   17 -----------------
+ 3 files changed, 14 insertions(+), 20 deletions(-)
+
+diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
+index 6a72a58..ad03988 100644
+--- a/include/net/sctp/sctp.h
++++ b/include/net/sctp/sctp.h
+@@ -703,4 +703,17 @@ static inline void sctp_v4_map_v6(union sctp_addr *addr)
+ 	addr->v6.sin6_addr.s6_addr32[2] = htonl(0x0000ffff);
+ }
+ 
++/* The cookie is always 0 since this is how it's used in the
++ * pmtu code.
++ */
++static inline struct dst_entry *sctp_transport_dst_check(struct sctp_transport *t)
++{
++	if (t->dst && !dst_check(t->dst, 0)) {
++		dst_release(t->dst);
++		t->dst = NULL;
++	}
++
++	return t->dst;
++}
++
+ #endif /* __net_sctp_h__ */
+diff --git a/net/sctp/output.c b/net/sctp/output.c
+index 817174e..8fc4dcd 100644
+--- a/net/sctp/output.c
++++ b/net/sctp/output.c
+@@ -377,9 +377,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
+ 	 */
+ 	skb_set_owner_w(nskb, sk);
+ 
+-	/* The 'obsolete' field of dst is set to 2 when a dst is freed. */
+-	if (!dst || (dst->obsolete > 1)) {
+-		dst_release(dst);
++	if (!sctp_transport_dst_check(tp)) {
+ 		sctp_transport_route(tp, NULL, sctp_sk(sk));
+ 		if (asoc && (asoc->param_flags & SPP_PMTUD_ENABLE)) {
+ 			sctp_assoc_sync_pmtu(asoc);
+diff --git a/net/sctp/transport.c b/net/sctp/transport.c
+index 394c57c..8da4481 100644
+--- a/net/sctp/transport.c
++++ b/net/sctp/transport.c
+@@ -226,23 +226,6 @@ void sctp_transport_pmtu(struct sctp_transport *transport, struct sock *sk)
+ 		transport->pathmtu = SCTP_DEFAULT_MAXSEGMENT;
+ }
+ 
+-/* this is a complete rip-off from __sk_dst_check
+- * the cookie is always 0 since this is how it's used in the
+- * pmtu code
+- */
+-static struct dst_entry *sctp_transport_dst_check(struct sctp_transport *t)
+-{
+-	struct dst_entry *dst = t->dst;
+-
+-	if (dst && dst->obsolete && dst->ops->check(dst, 0) == NULL) {
+-		dst_release(t->dst);
+-		t->dst = NULL;
+-		return NULL;
+-	}
+-
+-	return dst;
+-}
+-
+ void sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu)
+ {
+ 	struct dst_entry *dst;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0073-skb-avoid-unnecessary-reallocations-in-__skb_cow.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0073-skb-avoid-unnecessary-reallocations-in-__skb_cow.patch
new file mode 100644
index 0000000..797dd94
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0073-skb-avoid-unnecessary-reallocations-in-__skb_cow.patch
@@ -0,0 +1,42 @@
+From 102f9a70f2f084fe0380f1df716f89427cf5f965 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Tue, 29 May 2012 03:35:08 +0000
+Subject: [PATCH 73/86] skb: avoid unnecessary reallocations in __skb_cow
+
+[ Upstream commit 617c8c11236716dcbda877e764b7bf37c6fd8063 ]
+
+At the beginning of __skb_cow, headroom gets set to a minimum of
+NET_SKB_PAD. This causes unnecessary reallocations if the buffer was not
+cloned and the headroom is just below NET_SKB_PAD, but still more than the
+amount requested by the caller.
+This was showing up frequently in my tests on VLAN tx, where
+vlan_insert_tag calls skb_cow_head(skb, VLAN_HLEN).
+
+Locally generated packets should have enough headroom, and for forward
+paths, we already have NET_SKB_PAD bytes of headroom, so we don't need to
+add any extra space here.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/linux/skbuff.h |    2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
+index e689b47..bdb4590 100644
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -1866,8 +1866,6 @@ static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom,
+ {
+ 	int delta = 0;
+ 
+-	if (headroom < NET_SKB_PAD)
+-		headroom = NET_SKB_PAD;
+ 	if (headroom > skb_headroom(skb))
+ 		delta = headroom - skb_headroom(skb);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0074-xfrm-take-net-hdr-len-into-account-for-esp-payload-s.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0074-xfrm-take-net-hdr-len-into-account-for-esp-payload-s.patch
new file mode 100644
index 0000000..421e97a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0074-xfrm-take-net-hdr-len-into-account-for-esp-payload-s.patch
@@ -0,0 +1,100 @@
+From f7088713900622e33404d09b3b16e44d780ea515 Mon Sep 17 00:00:00 2001
+From: Benjamin Poirier <bpoirier@suse.de>
+Date: Thu, 24 May 2012 11:32:38 +0000
+Subject: [PATCH 74/86] xfrm: take net hdr len into account for esp payload
+ size calculation
+
+[ Upstream commit 91657eafb64b4cb53ec3a2fbc4afc3497f735788 ]
+
+Corrects the function that determines the esp payload size. The calculations
+done in esp{4,6}_get_mtu() lead to overlength frames in transport mode for
+certain mtu values and suboptimal frames for others.
+
+According to what is done, mainly in esp{,6}_output() and tcp_mtu_to_mss(),
+net_header_len must be taken into account before doing the alignment
+calculation.
+
+Signed-off-by: Benjamin Poirier <bpoirier@suse.de>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/ipv4/esp4.c |   24 +++++++++---------------
+ net/ipv6/esp6.c |   18 +++++++-----------
+ 2 files changed, 16 insertions(+), 26 deletions(-)
+
+diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
+index a5b4134..530787b 100644
+--- a/net/ipv4/esp4.c
++++ b/net/ipv4/esp4.c
+@@ -457,28 +457,22 @@ static u32 esp4_get_mtu(struct xfrm_state *x, int mtu)
+ 	struct esp_data *esp = x->data;
+ 	u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4);
+ 	u32 align = max_t(u32, blksize, esp->padlen);
+-	u32 rem;
+-
+-	mtu -= x->props.header_len + crypto_aead_authsize(esp->aead);
+-	rem = mtu & (align - 1);
+-	mtu &= ~(align - 1);
++	unsigned int net_adj;
+ 
+ 	switch (x->props.mode) {
+-	case XFRM_MODE_TUNNEL:
+-		break;
+-	default:
+ 	case XFRM_MODE_TRANSPORT:
+-		/* The worst case */
+-		mtu -= blksize - 4;
+-		mtu += min_t(u32, blksize - 4, rem);
+-		break;
+ 	case XFRM_MODE_BEET:
+-		/* The worst case. */
+-		mtu += min_t(u32, IPV4_BEET_PHMAXLEN, rem);
++		net_adj = sizeof(struct iphdr);
+ 		break;
++	case XFRM_MODE_TUNNEL:
++		net_adj = 0;
++		break;
++	default:
++		BUG();
+ 	}
+ 
+-	return mtu - 2;
++	return ((mtu - x->props.header_len - crypto_aead_authsize(esp->aead) -
++		 net_adj) & ~(align - 1)) + (net_adj - 2);
+ }
+ 
+ static void esp4_err(struct sk_buff *skb, u32 info)
+diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c
+index 1ac7938..65dd543 100644
+--- a/net/ipv6/esp6.c
++++ b/net/ipv6/esp6.c
+@@ -411,19 +411,15 @@ static u32 esp6_get_mtu(struct xfrm_state *x, int mtu)
+ 	struct esp_data *esp = x->data;
+ 	u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4);
+ 	u32 align = max_t(u32, blksize, esp->padlen);
+-	u32 rem;
++	unsigned int net_adj;
+ 
+-	mtu -= x->props.header_len + crypto_aead_authsize(esp->aead);
+-	rem = mtu & (align - 1);
+-	mtu &= ~(align - 1);
+-
+-	if (x->props.mode != XFRM_MODE_TUNNEL) {
+-		u32 padsize = ((blksize - 1) & 7) + 1;
+-		mtu -= blksize - padsize;
+-		mtu += min_t(u32, blksize - padsize, rem);
+-	}
++	if (x->props.mode != XFRM_MODE_TUNNEL)
++		net_adj = sizeof(struct ipv6hdr);
++	else
++		net_adj = 0;
+ 
+-	return mtu - 2;
++	return ((mtu - x->props.header_len - crypto_aead_authsize(esp->aead) -
++		 net_adj) & ~(align - 1)) + (net_adj - 2);
+ }
+ 
+ static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0075-ACPI-battery-only-refresh-the-sysfs-files-when-perti.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0075-ACPI-battery-only-refresh-the-sysfs-files-when-perti.patch
new file mode 100644
index 0000000..868bcce
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0075-ACPI-battery-only-refresh-the-sysfs-files-when-perti.patch
@@ -0,0 +1,51 @@
+From f01aa357417f413fff9af7ef10496ece02d2c8d7 Mon Sep 17 00:00:00 2001
+From: Andy Whitcroft <apw@canonical.com>
+Date: Thu, 3 May 2012 14:48:26 +0100
+Subject: [PATCH 75/86] ACPI battery: only refresh the sysfs files when
+ pertinent information changes
+
+commit c5971456964290da7e98222892797b71ef793e62 upstream.
+
+We only need to regenerate the sysfs files when the capacity units
+change, avoid the update otherwise.
+
+The origin of this issue is dates way back to 2.6.38:
+da8aeb92d4853f37e281f11fddf61f9c7d84c3cd
+(ACPI / Battery: Update information on info notification and resume)
+
+Signed-off-by: Andy Whitcroft <apw@canonical.com>
+Tested-by: Ralf Jung <post@ralfj.de>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/acpi/battery.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
+index 7711d94..5535477 100644
+--- a/drivers/acpi/battery.c
++++ b/drivers/acpi/battery.c
+@@ -643,11 +643,19 @@ static int acpi_battery_update(struct acpi_battery *battery)
+ 
+ static void acpi_battery_refresh(struct acpi_battery *battery)
+ {
++	int power_unit;
++
+ 	if (!battery->bat.dev)
+ 		return;
+ 
++	power_unit = battery->power_unit;
++
+ 	acpi_battery_get_info(battery);
+-	/* The battery may have changed its reporting units. */
++
++	if (power_unit == battery->power_unit)
++		return;
++
++	/* The battery has changed its reporting units. */
+ 	sysfs_remove_battery(battery);
+ 	sysfs_add_battery(battery);
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0076-target-file-Use-O_DSYNC-by-default-for-FILEIO-backen.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0076-target-file-Use-O_DSYNC-by-default-for-FILEIO-backen.patch
new file mode 100644
index 0000000..7c0a003
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0076-target-file-Use-O_DSYNC-by-default-for-FILEIO-backen.patch
@@ -0,0 +1,188 @@
+From f959a45c2bfd20be1435dee828b7e4eadd862b45 Mon Sep 17 00:00:00 2001
+From: Nicholas Bellinger <nab@linux-iscsi.org>
+Date: Wed, 30 May 2012 16:25:41 -0700
+Subject: [PATCH 76/86] target/file: Use O_DSYNC by default for FILEIO
+ backends
+
+commit a4dff3043c231d57f982af635c9d2192ee40e5ae upstream.
+
+Convert to use O_DSYNC for all cases at FILEIO backend creation time to
+avoid the extra syncing of pure timestamp updates with legacy O_SYNC during
+default operation as recommended by hch.  Continue to do this independently of
+Write Cache Enable (WCE) bit, as WCE=0 is currently the default for all backend
+devices and enabled by user on per device basis via attrib/emulate_write_cache.
+
+This patch drops the now unnecessary fd_buffered_io= token usage that was
+originally signalling when to explictly disable O_SYNC at backend creation
+time for buffered I/O operation.  This can end up being dangerous for a number
+of reasons during physical node failure, so go ahead and drop this option
+for now when O_DSYNC is used as the default.
+
+Also allow explict FUA WRITEs -> vfs_fsync_range() call to function in
+fd_execute_cmd() independently of WCE bit setting.
+
+Reported-by: Christoph Hellwig <hch@lst.de>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+[bwh: Backported to 3.2:
+ - We have fd_do_task() and not fd_execute_cmd()
+ - Various fields are in struct se_task rather than struct se_cmd
+ - fd_create_virtdevice() flags initialisation hasn't been cleaned up]
+---
+ drivers/target/target_core_file.c |   78 ++++++++-----------------------------
+ drivers/target/target_core_file.h |    1 -
+ 2 files changed, 17 insertions(+), 62 deletions(-)
+
+diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
+index cad8b92..455a251 100644
+--- a/drivers/target/target_core_file.c
++++ b/drivers/target/target_core_file.c
+@@ -134,21 +134,11 @@ static struct se_device *fd_create_virtdevice(
+ 		ret = PTR_ERR(dev_p);
+ 		goto fail;
+ 	}
+-#if 0
+-	if (di->no_create_file)
+-		flags = O_RDWR | O_LARGEFILE;
+-	else
+-		flags = O_RDWR | O_CREAT | O_LARGEFILE;
+-#else
+-	flags = O_RDWR | O_CREAT | O_LARGEFILE;
+-#endif
+-/*	flags |= O_DIRECT; */
+ 	/*
+-	 * If fd_buffered_io=1 has not been set explicitly (the default),
+-	 * use O_SYNC to force FILEIO writes to disk.
++	 * Use O_DSYNC by default instead of O_SYNC to forgo syncing
++	 * of pure timestamp updates.
+ 	 */
+-	if (!(fd_dev->fbd_flags & FDBD_USE_BUFFERED_IO))
+-		flags |= O_SYNC;
++	flags = O_RDWR | O_CREAT | O_LARGEFILE | O_DSYNC;
+ 
+ 	file = filp_open(dev_p, flags, 0600);
+ 	if (IS_ERR(file)) {
+@@ -400,26 +390,6 @@ static void fd_emulate_sync_cache(struct se_task *task)
+ 		transport_complete_sync_cache(cmd, ret == 0);
+ }
+ 
+-/*
+- * WRITE Force Unit Access (FUA) emulation on a per struct se_task
+- * LBA range basis..
+- */
+-static void fd_emulate_write_fua(struct se_cmd *cmd, struct se_task *task)
+-{
+-	struct se_device *dev = cmd->se_dev;
+-	struct fd_dev *fd_dev = dev->dev_ptr;
+-	loff_t start = task->task_lba * dev->se_sub_dev->se_dev_attrib.block_size;
+-	loff_t end = start + task->task_size;
+-	int ret;
+-
+-	pr_debug("FILEIO: FUA WRITE LBA: %llu, bytes: %u\n",
+-			task->task_lba, task->task_size);
+-
+-	ret = vfs_fsync_range(fd_dev->fd_file, start, end, 1);
+-	if (ret != 0)
+-		pr_err("FILEIO: vfs_fsync_range() failed: %d\n", ret);
+-}
+-
+ static int fd_do_task(struct se_task *task)
+ {
+ 	struct se_cmd *cmd = task->task_se_cmd;
+@@ -434,19 +404,21 @@ static int fd_do_task(struct se_task *task)
+ 		ret = fd_do_readv(task);
+ 	} else {
+ 		ret = fd_do_writev(task);
+-
++		/*
++		 * Perform implict vfs_fsync_range() for fd_do_writev() ops
++		 * for SCSI WRITEs with Forced Unit Access (FUA) set.
++		 * Allow this to happen independent of WCE=0 setting.
++		 */
+ 		if (ret > 0 &&
+-		    dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0 &&
+ 		    dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0 &&
+ 		    (cmd->se_cmd_flags & SCF_FUA)) {
+-			/*
+-			 * We might need to be a bit smarter here
+-			 * and return some sense data to let the initiator
+-			 * know the FUA WRITE cache sync failed..?
+-			 */
+-			fd_emulate_write_fua(cmd, task);
+-		}
++			struct fd_dev *fd_dev = dev->dev_ptr;
++			loff_t start = task->task_lba *
++				dev->se_sub_dev->se_dev_attrib.block_size;
++			loff_t end = start + task->task_size;
+ 
++			vfs_fsync_range(fd_dev->fd_file, start, end, 1);
++		}
+ 	}
+ 
+ 	if (ret < 0) {
+@@ -478,7 +450,6 @@ enum {
+ static match_table_t tokens = {
+ 	{Opt_fd_dev_name, "fd_dev_name=%s"},
+ 	{Opt_fd_dev_size, "fd_dev_size=%s"},
+-	{Opt_fd_buffered_io, "fd_buffered_io=%d"},
+ 	{Opt_err, NULL}
+ };
+ 
+@@ -490,7 +461,7 @@ static ssize_t fd_set_configfs_dev_params(
+ 	struct fd_dev *fd_dev = se_dev->se_dev_su_ptr;
+ 	char *orig, *ptr, *arg_p, *opts;
+ 	substring_t args[MAX_OPT_ARGS];
+-	int ret = 0, arg, token;
++	int ret = 0, token;
+ 
+ 	opts = kstrdup(page, GFP_KERNEL);
+ 	if (!opts)
+@@ -534,19 +505,6 @@ static ssize_t fd_set_configfs_dev_params(
+ 					" bytes\n", fd_dev->fd_dev_size);
+ 			fd_dev->fbd_flags |= FBDF_HAS_SIZE;
+ 			break;
+-		case Opt_fd_buffered_io:
+-			match_int(args, &arg);
+-			if (arg != 1) {
+-				pr_err("bogus fd_buffered_io=%d value\n", arg);
+-				ret = -EINVAL;
+-				goto out;
+-			}
+-
+-			pr_debug("FILEIO: Using buffered I/O"
+-				" operations for struct fd_dev\n");
+-
+-			fd_dev->fbd_flags |= FDBD_USE_BUFFERED_IO;
+-			break;
+ 		default:
+ 			break;
+ 		}
+@@ -578,10 +536,8 @@ static ssize_t fd_show_configfs_dev_params(
+ 	ssize_t bl = 0;
+ 
+ 	bl = sprintf(b + bl, "TCM FILEIO ID: %u", fd_dev->fd_dev_id);
+-	bl += sprintf(b + bl, "        File: %s  Size: %llu  Mode: %s\n",
+-		fd_dev->fd_dev_name, fd_dev->fd_dev_size,
+-		(fd_dev->fbd_flags & FDBD_USE_BUFFERED_IO) ?
+-		"Buffered" : "Synchronous");
++	bl += sprintf(b + bl, "        File: %s  Size: %llu  Mode: O_DSYNC\n",
++		fd_dev->fd_dev_name, fd_dev->fd_dev_size);
+ 	return bl;
+ }
+ 
+diff --git a/drivers/target/target_core_file.h b/drivers/target/target_core_file.h
+index 59e6e73..53ece69 100644
+--- a/drivers/target/target_core_file.h
++++ b/drivers/target/target_core_file.h
+@@ -18,7 +18,6 @@ struct fd_request {
+ 
+ #define FBDF_HAS_PATH		0x01
+ #define FBDF_HAS_SIZE		0x02
+-#define FDBD_USE_BUFFERED_IO	0x04
+ 
+ struct fd_dev {
+ 	u32		fbd_flags;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0077-iommu-amd-Cache-pdev-pointer-to-root-bridge.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0077-iommu-amd-Cache-pdev-pointer-to-root-bridge.patch
new file mode 100644
index 0000000..5d13500
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0077-iommu-amd-Cache-pdev-pointer-to-root-bridge.patch
@@ -0,0 +1,84 @@
+From 24791636a8052063d0f0ee3df30d8fce92e59398 Mon Sep 17 00:00:00 2001
+From: Joerg Roedel <joerg.roedel@amd.com>
+Date: Thu, 31 May 2012 17:38:11 +0200
+Subject: [PATCH 77/86] iommu/amd: Cache pdev pointer to root-bridge
+
+commit c1bf94ec1e12d76838ad485158aecf208ebd8fb9 upstream.
+
+At some point pci_get_bus_and_slot started to enable
+interrupts. Since this function is used in the
+amd_iommu_resume path it will enable interrupts on resume
+which causes a warning. The fix will use a cached pointer
+to the root-bridge to re-enable the IOMMU in case the BIOS
+is broken.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/iommu/amd_iommu_init.c  |   13 +++++--------
+ drivers/iommu/amd_iommu_types.h |    3 +++
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
+index 20d5852..6269eb0 100644
+--- a/drivers/iommu/amd_iommu_init.c
++++ b/drivers/iommu/amd_iommu_init.c
+@@ -943,6 +943,9 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h)
+ 	if (!iommu->dev)
+ 		return 1;
+ 
++	iommu->root_pdev = pci_get_bus_and_slot(iommu->dev->bus->number,
++						PCI_DEVFN(0, 0));
++
+ 	iommu->cap_ptr = h->cap_ptr;
+ 	iommu->pci_seg = h->pci_seg;
+ 	iommu->mmio_phys = h->mmio_phys;
+@@ -1225,20 +1228,16 @@ static void iommu_apply_resume_quirks(struct amd_iommu *iommu)
+ {
+ 	int i, j;
+ 	u32 ioc_feature_control;
+-	struct pci_dev *pdev = NULL;
++	struct pci_dev *pdev = iommu->root_pdev;
+ 
+ 	/* RD890 BIOSes may not have completely reconfigured the iommu */
+-	if (!is_rd890_iommu(iommu->dev))
++	if (!is_rd890_iommu(iommu->dev) || !pdev)
+ 		return;
+ 
+ 	/*
+ 	 * First, we need to ensure that the iommu is enabled. This is
+ 	 * controlled by a register in the northbridge
+ 	 */
+-	pdev = pci_get_bus_and_slot(iommu->dev->bus->number, PCI_DEVFN(0, 0));
+-
+-	if (!pdev)
+-		return;
+ 
+ 	/* Select Northbridge indirect register 0x75 and enable writing */
+ 	pci_write_config_dword(pdev, 0x60, 0x75 | (1 << 7));
+@@ -1248,8 +1247,6 @@ static void iommu_apply_resume_quirks(struct amd_iommu *iommu)
+ 	if (!(ioc_feature_control & 0x1))
+ 		pci_write_config_dword(pdev, 0x64, ioc_feature_control | 1);
+ 
+-	pci_dev_put(pdev);
+-
+ 	/* Restore the iommu BAR */
+ 	pci_write_config_dword(iommu->dev, iommu->cap_ptr + 4,
+ 			       iommu->stored_addr_lo);
+diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h
+index 5b9c507..40ab83b 100644
+--- a/drivers/iommu/amd_iommu_types.h
++++ b/drivers/iommu/amd_iommu_types.h
+@@ -385,6 +385,9 @@ struct amd_iommu {
+ 	/* Pointer to PCI device of this IOMMU */
+ 	struct pci_dev *dev;
+ 
++	/* Cache pdev to root device for resume quirks */
++	struct pci_dev *root_pdev;
++
+ 	/* physical address of MMIO space */
+ 	u64 mmio_phys;
+ 	/* virtual address of MMIO space */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0078-drm-radeon-kms-add-new-Palm-Sumo-PCI-ids.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0078-drm-radeon-kms-add-new-Palm-Sumo-PCI-ids.patch
new file mode 100644
index 0000000..70ca675
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0078-drm-radeon-kms-add-new-Palm-Sumo-PCI-ids.patch
@@ -0,0 +1,38 @@
+From eec9a1ae19fea9a7eeab32de2371932e845f8486 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 5 Jun 2012 09:50:29 -0400
+Subject: [PATCH 78/86] drm/radeon/kms: add new Palm, Sumo PCI ids
+
+commit 4a6991cc1fad514745b79181df3ace72d561e7aa upstream.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/drm/drm_pciids.h |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
+index 14b6cd0..78654ca 100644
+--- a/include/drm/drm_pciids.h
++++ b/include/drm/drm_pciids.h
+@@ -493,6 +493,7 @@
+ 	{0x1002, 0x9645, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO2|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+ 	{0x1002, 0x9647, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\
+ 	{0x1002, 0x9648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\
++	{0x1002, 0x9649, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP},\
+ 	{0x1002, 0x964a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+ 	{0x1002, 0x964b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+ 	{0x1002, 0x964c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SUMO|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+@@ -512,6 +513,7 @@
+ 	{0x1002, 0x9807, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+ 	{0x1002, 0x9808, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+ 	{0x1002, 0x9809, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
++	{0x1002, 0x980A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \
+ 	{0, 0, 0}
+ 
+ #define r128_PCI_IDS \
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0079-drm-radeon-kms-add-new-BTC-PCI-ids.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0079-drm-radeon-kms-add-new-BTC-PCI-ids.patch
new file mode 100644
index 0000000..024015e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0079-drm-radeon-kms-add-new-BTC-PCI-ids.patch
@@ -0,0 +1,37 @@
+From 3ed59dee924ffa272751ccbb5d84c57cef96a779 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 5 Jun 2012 09:50:30 -0400
+Subject: [PATCH 79/86] drm/radeon/kms: add new BTC PCI ids
+
+commit a2bef8ce826dd1e787fd8ad9b6e0566ba59dab43 upstream.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/drm/drm_pciids.h |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
+index 78654ca..def807c 100644
+--- a/include/drm/drm_pciids.h
++++ b/include/drm/drm_pciids.h
+@@ -181,6 +181,7 @@
+ 	{0x1002, 0x6747, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6748, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6749, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
++	{0x1002, 0x674A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6751, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6758, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \
+@@ -198,6 +199,7 @@
+ 	{0x1002, 0x6767, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6768, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6770, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
++	{0x1002, 0x6771, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6772, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6778, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
+ 	{0x1002, 0x6779, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0080-btree-fix-tree-corruption-in-btree_get_prev.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0080-btree-fix-tree-corruption-in-btree_get_prev.patch
new file mode 100644
index 0000000..7314c7d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0080-btree-fix-tree-corruption-in-btree_get_prev.patch
@@ -0,0 +1,56 @@
+From b209359cc7df5f400a4c1cd342bf19afc377961e Mon Sep 17 00:00:00 2001
+From: Roland Dreier <roland@purestorage.com>
+Date: Thu, 7 Jun 2012 14:21:13 -0700
+Subject: [PATCH 80/86] btree: fix tree corruption in btree_get_prev()
+
+commit cbf8ae32f66a9ceb8907ad9e16663c2a29e48990 upstream.
+
+The memory the parameter __key points to is used as an iterator in
+btree_get_prev(), so if we save off a bkey() pointer in retry_key and
+then assign that to __key, we'll end up corrupting the btree internals
+when we do eg
+
+	longcpy(__key, bkey(geo, node, i), geo->keylen);
+
+to return the key value.  What we should do instead is use longcpy() to
+copy the key value that retry_key points to __key.
+
+This can cause a btree to get corrupted by seemingly read-only
+operations such as btree_for_each_safe.
+
+[akpm@linux-foundation.org: avoid the double longcpy()]
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Acked-by: Joern Engel <joern@logfs.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ lib/btree.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/btree.c b/lib/btree.c
+index 2a34392..297124d 100644
+--- a/lib/btree.c
++++ b/lib/btree.c
+@@ -319,8 +319,8 @@ void *btree_get_prev(struct btree_head *head, struct btree_geo *geo,
+ 
+ 	if (head->height == 0)
+ 		return NULL;
+-retry:
+ 	longcpy(key, __key, geo->keylen);
++retry:
+ 	dec_key(geo, key);
+ 
+ 	node = head->node;
+@@ -351,7 +351,7 @@ retry:
+ 	}
+ miss:
+ 	if (retry_key) {
+-		__key = retry_key;
++		longcpy(key, retry_key, geo->keylen);
+ 		retry_key = NULL;
+ 		goto retry;
+ 	}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0081-kbuild-install-kernel-page-flags.h.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0081-kbuild-install-kernel-page-flags.h.patch
new file mode 100644
index 0000000..0c34a7d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0081-kbuild-install-kernel-page-flags.h.patch
@@ -0,0 +1,62 @@
+From 5e25d4d8ce731b609f1be874fd76f66bc03de441 Mon Sep 17 00:00:00 2001
+From: Ulrich Drepper <drepper@akkadia.org>
+Date: Tue, 29 May 2012 15:06:30 -0700
+Subject: [PATCH 81/86] kbuild: install kernel-page-flags.h
+
+commit 9295b7a07c859a42346221b5839be0ae612333b0 upstream.
+
+Programs using /proc/kpageflags need to know about the various flags.  The
+<linux/kernel-page-flags.h> provides them and the comments in the file
+indicate that it is supposed to be used by user-level code.  But the file
+is not installed.
+
+Install the headers and mark the unstable flags as out-of-bounds.  The
+page-type tool is also adjusted to not duplicate the definitions
+
+Signed-off-by: Ulrich Drepper <drepper@gmail.com>
+Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
+Acked-by: Fengguang Wu <fengguang.wu@intel.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+[bwh: Backported to 3.2: adjust context; drop change to missing tools/vm/]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/linux/Kbuild              |    1 +
+ include/linux/kernel-page-flags.h |    4 ++++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/include/linux/Kbuild b/include/linux/Kbuild
+index 619b565..bd21ecd 100644
+--- a/include/linux/Kbuild
++++ b/include/linux/Kbuild
+@@ -224,6 +224,7 @@ header-y += kd.h
+ header-y += kdev_t.h
+ header-y += kernel.h
+ header-y += kernelcapi.h
++header-y += kernel-page-flags.h
+ header-y += keyboard.h
+ header-y += keyctl.h
+ header-y += l2tp.h
+diff --git a/include/linux/kernel-page-flags.h b/include/linux/kernel-page-flags.h
+index bd92a89..096b05d 100644
+--- a/include/linux/kernel-page-flags.h
++++ b/include/linux/kernel-page-flags.h
+@@ -31,6 +31,8 @@
+ 
+ #define KPF_KSM			21
+ 
++#ifdef __KERNEL__
++
+ /* kernel hacking assistances
+  * WARNING: subject to change, never rely on them!
+  */
+@@ -43,4 +45,6 @@
+ #define KPF_ARCH		38
+ #define KPF_UNCACHED		39
+ 
++#endif /* __KERNEL__ */
++
+ #endif /* LINUX_KERNEL_PAGE_FLAGS_H */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0082-asix-allow-full-size-8021Q-frames-to-be-received.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0082-asix-allow-full-size-8021Q-frames-to-be-received.patch
new file mode 100644
index 0000000..a55d8f9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0082-asix-allow-full-size-8021Q-frames-to-be-received.patch
@@ -0,0 +1,49 @@
+From 7d6dc5bd5f0608f96ec3d12d9eaecf45b053ccb8 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Mon, 28 May 2012 22:31:41 +0000
+Subject: [PATCH 82/86] asix: allow full size 8021Q frames to be received
+
+commit 9dae31009b1a00d926c6fe032d5a88099620adc3 upstream.
+
+asix driver drops 8021Q full size frames because it doesn't take into
+account VLAN header size.
+
+Tested on AX88772 adapter.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+CC: Allan Chou <allan@asix.com.tw>
+CC: Trond Wuellner <trond@chromium.org>
+CC: Grant Grundler <grundler@chromium.org>
+CC: Paul Stewart <pstew@chromium.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+[bwh: Backported to 3.2: no offset used in asix_rx_fixup()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/usb/asix.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c
+index a9abee8..fc147a5 100644
+--- a/drivers/net/usb/asix.c
++++ b/drivers/net/usb/asix.c
+@@ -35,6 +35,7 @@
+ #include <linux/crc32.h>
+ #include <linux/usb/usbnet.h>
+ #include <linux/slab.h>
++#include <linux/if_vlan.h>
+ 
+ #define DRIVER_VERSION "08-Nov-2011"
+ #define DRIVER_NAME "asix"
+@@ -348,7 +349,7 @@ static int asix_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+ 			return 2;
+ 		}
+ 
+-		if (size > dev->net->mtu + ETH_HLEN) {
++		if (size > dev->net->mtu + ETH_HLEN + VLAN_HLEN) {
+ 			netdev_err(dev->net, "asix_rx_fixup() Bad RX Length %d\n",
+ 				   size);
+ 			return 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0083-ext4-don-t-trash-state-flags-in-EXT4_IOC_SETFLAGS.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0083-ext4-don-t-trash-state-flags-in-EXT4_IOC_SETFLAGS.patch
new file mode 100644
index 0000000..b306294
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0083-ext4-don-t-trash-state-flags-in-EXT4_IOC_SETFLAGS.patch
@@ -0,0 +1,54 @@
+From 2060683e126ab7d9bb0ed4a089f572d6f1563015 Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Thu, 31 May 2012 23:46:01 -0400
+Subject: [PATCH 83/86] ext4: don't trash state flags in EXT4_IOC_SETFLAGS
+
+commit 79906964a187c405db72a3abc60eb9b50d804fbc upstream.
+
+In commit 353eb83c we removed i_state_flags with 64-bit longs, But
+when handling the EXT4_IOC_SETFLAGS ioctl, we replace i_flags
+directly, which trashes the state flags which are stored in the high
+32-bits of i_flags on 64-bit platforms.  So use the the
+ext4_{set,clear}_inode_flags() functions which use atomic bit
+manipulation functions instead.
+
+Reported-by: Tao Ma <boyu.mt@taobao.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/ioctl.c |   12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
+index ab25f57..1b7bc39 100644
+--- a/fs/ext4/ioctl.c
++++ b/fs/ext4/ioctl.c
+@@ -36,7 +36,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+ 		handle_t *handle = NULL;
+ 		int err, migrate = 0;
+ 		struct ext4_iloc iloc;
+-		unsigned int oldflags;
++		unsigned int oldflags, mask, i;
+ 		unsigned int jflag;
+ 
+ 		if (!inode_owner_or_capable(inode))
+@@ -113,8 +113,14 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+ 		if (err)
+ 			goto flags_err;
+ 
+-		flags = flags & EXT4_FL_USER_MODIFIABLE;
+-		flags |= oldflags & ~EXT4_FL_USER_MODIFIABLE;
++		for (i = 0, mask = 1; i < 32; i++, mask <<= 1) {
++			if (!(mask & EXT4_FL_USER_MODIFIABLE))
++				continue;
++			if (mask & flags)
++				ext4_set_inode_flag(inode, i);
++			else
++				ext4_clear_inode_flag(inode, i);
++		}
+ 		ei->i_flags = flags;
+ 
+ 		ext4_set_inode_flags(inode);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0084-ext4-don-t-set-i_flags-in-EXT4_IOC_SETFLAGS.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0084-ext4-don-t-set-i_flags-in-EXT4_IOC_SETFLAGS.patch
new file mode 100644
index 0000000..1529c65
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0084-ext4-don-t-set-i_flags-in-EXT4_IOC_SETFLAGS.patch
@@ -0,0 +1,34 @@
+From 829f95bac40b76e3eb7d26d5bab4a156d749ae33 Mon Sep 17 00:00:00 2001
+From: Tao Ma <boyu.mt@taobao.com>
+Date: Thu, 7 Jun 2012 19:04:19 -0400
+Subject: [PATCH 84/86] ext4: don't set i_flags in EXT4_IOC_SETFLAGS
+
+commit b22b1f178f6799278d3178d894f37facb2085765 upstream.
+
+Commit 7990696 uses the ext4_{set,clear}_inode_flags() functions to
+change the i_flags automatically but fails to remove the error setting
+of i_flags.  So we still have the problem of trashing state flags.
+Fix this by removing the assignment.
+
+Signed-off-by: Tao Ma <boyu.mt@taobao.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/ioctl.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
+index 1b7bc39..76a6e3b 100644
+--- a/fs/ext4/ioctl.c
++++ b/fs/ext4/ioctl.c
+@@ -121,7 +121,6 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+ 			else
+ 				ext4_clear_inode_flag(inode, i);
+ 		}
+-		ei->i_flags = flags;
+ 
+ 		ext4_set_inode_flags(inode);
+ 		inode->i_ctime = ext4_current_time(inode);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0085-ext4-fix-the-free-blocks-calculation-for-ext3-file-s.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0085-ext4-fix-the-free-blocks-calculation-for-ext3-file-s.patch
new file mode 100644
index 0000000..3d05f08
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0085-ext4-fix-the-free-blocks-calculation-for-ext3-file-s.patch
@@ -0,0 +1,76 @@
+From f83716d6c669e13a5c79262a51a267a752559c5d Mon Sep 17 00:00:00 2001
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Thu, 7 Jun 2012 18:56:06 -0400
+Subject: [PATCH 85/86] ext4: fix the free blocks calculation for ext3 file
+ systems w/ uninit_bg
+
+commit b0dd6b70f0fda17ae9762fbb72d98e40a4f66556 upstream.
+
+Ext3 filesystems that are converted to use as many ext4 file system
+features as possible will enable uninit_bg to speed up e2fsck times.
+These file systems will have a native ext3 layout of inode tables and
+block allocation bitmaps (as opposed to ext4's flex_bg layout).
+Unfortunately, in these cases, when first allocating a block in an
+uninitialized block group, ext4 would incorrectly calculate the number
+of free blocks in that block group, and then errorneously report that
+the file system was corrupt:
+
+EXT4-fs error (device vdd): ext4_mb_generate_buddy:741: group 30, 32254 clusters in bitmap, 32258 in gd
+
+This problem can be reproduced via:
+
+    mke2fs -q -t ext4 -O ^flex_bg /dev/vdd 5g
+    mount -t ext4 /dev/vdd /mnt
+    fallocate -l 4600m /mnt/test
+
+The problem was caused by a bone headed mistake in the check to see if a
+particular metadata block was part of the block group.
+
+Many thanks to Kees Cook for finding and bisecting the buggy commit
+which introduced this bug (commit fd034a84e1, present since v3.2).
+
+Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
+Reported-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Tested-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ext4/balloc.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
+index 12ccacd..914bf9e 100644
+--- a/fs/ext4/balloc.c
++++ b/fs/ext4/balloc.c
+@@ -88,8 +88,8 @@ unsigned ext4_num_overhead_clusters(struct super_block *sb,
+ 	 * unusual file system layouts.
+ 	 */
+ 	if (ext4_block_in_group(sb, ext4_block_bitmap(sb, gdp), block_group)) {
+-		block_cluster = EXT4_B2C(sbi, (start -
+-					       ext4_block_bitmap(sb, gdp)));
++		block_cluster = EXT4_B2C(sbi,
++					 ext4_block_bitmap(sb, gdp) - start);
+ 		if (block_cluster < num_clusters)
+ 			block_cluster = -1;
+ 		else if (block_cluster == num_clusters) {
+@@ -100,7 +100,7 @@ unsigned ext4_num_overhead_clusters(struct super_block *sb,
+ 
+ 	if (ext4_block_in_group(sb, ext4_inode_bitmap(sb, gdp), block_group)) {
+ 		inode_cluster = EXT4_B2C(sbi,
+-					 start - ext4_inode_bitmap(sb, gdp));
++					 ext4_inode_bitmap(sb, gdp) - start);
+ 		if (inode_cluster < num_clusters)
+ 			inode_cluster = -1;
+ 		else if (inode_cluster == num_clusters) {
+@@ -112,7 +112,7 @@ unsigned ext4_num_overhead_clusters(struct super_block *sb,
+ 	itbl_blk = ext4_inode_table(sb, gdp);
+ 	for (i = 0; i < sbi->s_itb_per_group; i++) {
+ 		if (ext4_block_in_group(sb, itbl_blk + i, block_group)) {
+-			c = EXT4_B2C(sbi, start - itbl_blk + i);
++			c = EXT4_B2C(sbi, itbl_blk + i - start);
+ 			if ((c < num_clusters) || (c == inode_cluster) ||
+ 			    (c == block_cluster) || (c == itbl_cluster))
+ 				continue;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0086-Linux-3.2.20.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0086-Linux-3.2.20.patch
new file mode 100644
index 0000000..58597da
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.20/0086-Linux-3.2.20.patch
@@ -0,0 +1,24 @@
+From 12056d4d781913f38e7d7a05fbf7c1b48a1f7d4d Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 10 Jun 2012 14:42:13 +0100
+Subject: [PATCH 86/86] Linux 3.2.20
+
+---
+ Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index c291184..c7e9cc4 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 2
+-SUBLEVEL = 19
++SUBLEVEL = 20
+ EXTRAVERSION =
+ NAME = Saber-toothed Squirrel
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0001-drm-i915-Mark-the-ringbuffers-as-being-in-the-GTT-do.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0001-drm-i915-Mark-the-ringbuffers-as-being-in-the-GTT-do.patch
new file mode 100644
index 0000000..f55f3ea
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0001-drm-i915-Mark-the-ringbuffers-as-being-in-the-GTT-do.patch
@@ -0,0 +1,44 @@
+From 70a948c214a99cc13d1258bee77c13ca8a430c3d Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Mon, 4 Jun 2012 17:05:40 +0100
+Subject: [PATCH 01/67] drm/i915: Mark the ringbuffers as being in the GTT
+ domain
+
+commit 3eef8918ff440837f6af791942d8dd07e1a268ee upstream.
+
+By correctly describing the rinbuffers as being in the GTT domain, it
+appears that we are more careful with the management of the CPU cache
+upon resume and so prevent some coherency issue when submitting commands
+to the GPU later. A secondary effect is that the debug logs are then
+consistent with the actual usage (i.e. they no longer describe the
+ringbuffers as being in the CPU write domain when we are accessing them
+through an wc iomapping.)
+
+Reported-and-tested-by: Daniel Gnoutcheff <daniel@gnoutcheff.name>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41092
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_ringbuffer.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
+index 62f9ac5..83da6e5 100644
+--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
++++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
+@@ -1045,6 +1045,10 @@ int intel_init_ring_buffer(struct drm_device *dev,
+ 	if (ret)
+ 		goto err_unref;
+ 
++	ret = i915_gem_object_set_to_gtt_domain(obj, true);
++	if (ret)
++		goto err_unpin;
++
+ 	ring->map.size = ring->size;
+ 	ring->map.offset = dev->agp->base + obj->gtt_offset;
+ 	ring->map.type = 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0002-drm-i915-hold-forcewake-around-ring-hw-init.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0002-drm-i915-hold-forcewake-around-ring-hw-init.patch
new file mode 100644
index 0000000..14782bd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0002-drm-i915-hold-forcewake-around-ring-hw-init.patch
@@ -0,0 +1,158 @@
+From 56894d493cca01018bd2f3222a8a20b87abc1edd Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Mon, 4 Jun 2012 11:18:15 +0200
+Subject: [PATCH 02/67] drm/i915: hold forcewake around ring hw init
+
+commit b7884eb45ec98c0d34c7f49005ae9d4b4b4e38f6 upstream.
+
+Empirical evidence suggests that we need to: On at least one ivb
+machine when running the hangman i-g-t test, the rings don't properly
+initialize properly - the RING_START registers seems to be stuck at
+all zeros.
+
+Holding forcewake around this register init sequences makes chip reset
+reliable again. Note that this is not the first such issue:
+
+commit f01db988ef6f6c70a6cc36ee71e4a98a68901229
+Author: Sean Paul <seanpaul@chromium.org>
+Date:   Fri Mar 16 12:43:22 2012 -0400
+
+    drm/i915: Add wait_for in init_ring_common
+
+added delay loops to make RING_START and RING_CTL initialization
+reliable on the blt ring at boot-up. So I guess it won't hurt if we do
+this unconditionally for all force_wake needing gpus.
+
+To avoid copy&pasting of the HAS_FORCE_WAKE check I've added a new
+intel_info bit for that.
+
+v2: Fixup missing commas in static struct and properly handling the
+error case in init_ring_common, both noticed by Jani Nikula.
+
+Reported-and-tested-by: Yang Guang <guang.a.yang@intel.com>
+Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50522
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2:
+ - drop changes to Haswell device information
+ - NEEDS_FORCE_WAKE didn't refer to Valley View anyway]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_drv.c         |    6 +++++-
+ drivers/gpu/drm/i915/i915_drv.h         |    3 +++
+ drivers/gpu/drm/i915/intel_ringbuffer.c |   16 +++++++++++++---
+ 3 files changed, 21 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index d0f8830..3a1bfd7 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -214,6 +214,7 @@ static const struct intel_device_info intel_sandybridge_d_info = {
+ 	.need_gfx_hws = 1, .has_hotplug = 1,
+ 	.has_bsd_ring = 1,
+ 	.has_blt_ring = 1,
++	.has_force_wake = 1,
+ };
+ 
+ static const struct intel_device_info intel_sandybridge_m_info = {
+@@ -222,6 +223,7 @@ static const struct intel_device_info intel_sandybridge_m_info = {
+ 	.has_fbc = 1,
+ 	.has_bsd_ring = 1,
+ 	.has_blt_ring = 1,
++	.has_force_wake = 1,
+ };
+ 
+ static const struct intel_device_info intel_ivybridge_d_info = {
+@@ -229,6 +231,7 @@ static const struct intel_device_info intel_ivybridge_d_info = {
+ 	.need_gfx_hws = 1, .has_hotplug = 1,
+ 	.has_bsd_ring = 1,
+ 	.has_blt_ring = 1,
++	.has_force_wake = 1,
+ };
+ 
+ static const struct intel_device_info intel_ivybridge_m_info = {
+@@ -237,6 +240,7 @@ static const struct intel_device_info intel_ivybridge_m_info = {
+ 	.has_fbc = 0,	/* FBC is not enabled on Ivybridge mobile yet */
+ 	.has_bsd_ring = 1,
+ 	.has_blt_ring = 1,
++	.has_force_wake = 1,
+ };
+ 
+ static const struct pci_device_id pciidlist[] = {		/* aka */
+@@ -939,7 +943,7 @@ MODULE_LICENSE("GPL and additional rights");
+ 
+ /* We give fast paths for the really cool registers */
+ #define NEEDS_FORCE_WAKE(dev_priv, reg) \
+-	(((dev_priv)->info->gen >= 6) && \
++	((HAS_FORCE_WAKE((dev_priv)->dev)) && \
+ 	 ((reg) < 0x40000) &&		 \
+ 	 ((reg) != FORCEWAKE) &&	 \
+ 	 ((reg) != ECOBUS))
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index ae294a0..d62c731 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -244,6 +244,7 @@ struct intel_device_info {
+ 	u8 is_broadwater:1;
+ 	u8 is_crestline:1;
+ 	u8 is_ivybridge:1;
++	u8 has_force_wake:1;
+ 	u8 has_fbc:1;
+ 	u8 has_pipe_cxsr:1;
+ 	u8 has_hotplug:1;
+@@ -1001,6 +1002,8 @@ struct drm_i915_file_private {
+ #define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT)
+ #define HAS_PCH_IBX(dev) (INTEL_PCH_TYPE(dev) == PCH_IBX)
+ 
++#define HAS_FORCE_WAKE(dev) (INTEL_INFO(dev)->has_force_wake)
++
+ #include "i915_trace.h"
+ 
+ extern struct drm_ioctl_desc i915_ioctls[];
+diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
+index 83da6e5..933e66b 100644
+--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
++++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
+@@ -263,10 +263,15 @@ u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
+ 
+ static int init_ring_common(struct intel_ring_buffer *ring)
+ {
+-	drm_i915_private_t *dev_priv = ring->dev->dev_private;
++	struct drm_device *dev = ring->dev;
++	drm_i915_private_t *dev_priv = dev->dev_private;
+ 	struct drm_i915_gem_object *obj = ring->obj;
++	int ret = 0;
+ 	u32 head;
+ 
++	if (HAS_FORCE_WAKE(dev))
++		gen6_gt_force_wake_get(dev_priv);
++
+ 	/* Stop the ring if it's running. */
+ 	I915_WRITE_CTL(ring, 0);
+ 	I915_WRITE_HEAD(ring, 0);
+@@ -314,7 +319,8 @@ static int init_ring_common(struct intel_ring_buffer *ring)
+ 				I915_READ_HEAD(ring),
+ 				I915_READ_TAIL(ring),
+ 				I915_READ_START(ring));
+-		return -EIO;
++		ret = -EIO;
++		goto out;
+ 	}
+ 
+ 	if (!drm_core_check_feature(ring->dev, DRIVER_MODESET))
+@@ -325,7 +331,11 @@ static int init_ring_common(struct intel_ring_buffer *ring)
+ 		ring->space = ring_space(ring);
+ 	}
+ 
+-	return 0;
++out:
++	if (HAS_FORCE_WAKE(dev))
++		gen6_gt_force_wake_put(dev_priv);
++
++	return ret;
+ }
+ 
+ static int
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0003-drm-i915-Unpin-the-flip-target-if-we-fail-to-queue-t.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0003-drm-i915-Unpin-the-flip-target-if-we-fail-to-queue-t.patch
new file mode 100644
index 0000000..9593526
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0003-drm-i915-Unpin-the-flip-target-if-we-fail-to-queue-t.patch
@@ -0,0 +1,166 @@
+From d2d41b738ccb89bf3e5903fdf04bb43a712dd5d3 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 17 Apr 2012 19:35:53 +0100
+Subject: [PATCH 03/67] drm/i915: Unpin the flip target if we fail to queue
+ the flip
+
+commit 83d4092b0381e5dd6f312b2ec57121dcf0fcbade upstream.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2:
+ - adjust context
+ - we don't have intel_unpin_fb_obj(); use i915_gem_object_unpin()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_display.c |   50 ++++++++++++++++++++++++----------
+ 1 file changed, 35 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 4720397..1f43ae5 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -7009,14 +7009,14 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
+ 
+ 	ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ 	if (ret)
+-		goto out;
++		goto err;
+ 
+ 	/* Offset into the new buffer for cases of shared fbs between CRTCs */
+ 	offset = crtc->y * fb->pitch + crtc->x * fb->bits_per_pixel/8;
+ 
+ 	ret = BEGIN_LP_RING(6);
+ 	if (ret)
+-		goto out;
++		goto err_unpin;
+ 
+ 	/* Can't queue multiple flips, so wait for the previous
+ 	 * one to finish before executing the next.
+@@ -7033,7 +7033,11 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
+ 	OUT_RING(obj->gtt_offset + offset);
+ 	OUT_RING(MI_NOOP);
+ 	ADVANCE_LP_RING();
+-out:
++	return 0;
++
++err_unpin:
++	i915_gem_object_unpin(obj);
++err:
+ 	return ret;
+ }
+ 
+@@ -7050,14 +7054,14 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
+ 
+ 	ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ 	if (ret)
+-		goto out;
++		goto err;
+ 
+ 	/* Offset into the new buffer for cases of shared fbs between CRTCs */
+ 	offset = crtc->y * fb->pitch + crtc->x * fb->bits_per_pixel/8;
+ 
+ 	ret = BEGIN_LP_RING(6);
+ 	if (ret)
+-		goto out;
++		goto err_unpin;
+ 
+ 	if (intel_crtc->plane)
+ 		flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
+@@ -7072,7 +7076,11 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
+ 	OUT_RING(MI_NOOP);
+ 
+ 	ADVANCE_LP_RING();
+-out:
++	return 0;
++
++err_unpin:
++	i915_gem_object_unpin(obj);
++err:
+ 	return ret;
+ }
+ 
+@@ -7088,11 +7096,11 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
+ 
+ 	ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ 	if (ret)
+-		goto out;
++		goto err;
+ 
+ 	ret = BEGIN_LP_RING(4);
+ 	if (ret)
+-		goto out;
++		goto err_unpin;
+ 
+ 	/* i965+ uses the linear or tiled offsets from the
+ 	 * Display Registers (which do not change across a page-flip)
+@@ -7111,7 +7119,11 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
+ 	pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
+ 	OUT_RING(pf | pipesrc);
+ 	ADVANCE_LP_RING();
+-out:
++	return 0;
++
++err_unpin:
++	i915_gem_object_unpin(obj);
++err:
+ 	return ret;
+ }
+ 
+@@ -7127,11 +7139,11 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
+ 
+ 	ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ 	if (ret)
+-		goto out;
++		goto err;
+ 
+ 	ret = BEGIN_LP_RING(4);
+ 	if (ret)
+-		goto out;
++		goto err_unpin;
+ 
+ 	OUT_RING(MI_DISPLAY_FLIP |
+ 		 MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
+@@ -7142,7 +7154,11 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
+ 	pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
+ 	OUT_RING(pf | pipesrc);
+ 	ADVANCE_LP_RING();
+-out:
++	return 0;
++
++err_unpin:
++	i915_gem_object_unpin(obj);
++err:
+ 	return ret;
+ }
+ 
+@@ -7164,18 +7180,22 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
+ 
+ 	ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
+ 	if (ret)
+-		goto out;
++		goto err;
+ 
+ 	ret = intel_ring_begin(ring, 4);
+ 	if (ret)
+-		goto out;
++		goto err_unpin;
+ 
+ 	intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19));
+ 	intel_ring_emit(ring, (fb->pitch | obj->tiling_mode));
+ 	intel_ring_emit(ring, (obj->gtt_offset));
+ 	intel_ring_emit(ring, (MI_NOOP));
+ 	intel_ring_advance(ring);
+-out:
++	return 0;
++
++err_unpin:
++	i915_gem_object_unpin(obj);
++err:
+ 	return ret;
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0004-drm-i915-fix-up-ivb-plane-3-pageflips.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0004-drm-i915-fix-up-ivb-plane-3-pageflips.patch
new file mode 100644
index 0000000..33031c7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0004-drm-i915-fix-up-ivb-plane-3-pageflips.patch
@@ -0,0 +1,93 @@
+From e76a063bd6b6038a0fd3ab502ae6f14ebc145944 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Wed, 23 May 2012 14:02:00 +0200
+Subject: [PATCH 04/67] drm/i915: fix up ivb plane 3 pageflips
+
+commit cb05d8dedefa3066bf5d74ef88c6ca6cf4bd1c87 upstream.
+
+Or at least plug another gapping hole. Apparrently hw desingers only
+moved the bit field, but did not bother ot re-enumerate the planes
+when adding support for a 3rd pipe.
+
+Discovered by i-g-t/flip_test.
+
+This may or may not fix the reference bugzilla, because that one
+smells like we have still larger fish to fry.
+
+v2: Fixup the impossible case to catch programming errors, noticed by
+Chris Wilson.
+
+References: https://bugs.freedesktop.org/show_bug.cgi?id=50069
+Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
+Tested-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Eugeni Dodonov <eugeni.dodonov@intel.com>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_reg.h      |    8 ++++++++
+ drivers/gpu/drm/i915/intel_display.c |   19 ++++++++++++++++++-
+ 2 files changed, 26 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+index 06ec1e5..fd53122 100644
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
+@@ -164,6 +164,14 @@
+ #define MI_DISPLAY_FLIP		MI_INSTR(0x14, 2)
+ #define MI_DISPLAY_FLIP_I915	MI_INSTR(0x14, 1)
+ #define   MI_DISPLAY_FLIP_PLANE(n) ((n) << 20)
++/* IVB has funny definitions for which plane to flip. */
++#define   MI_DISPLAY_FLIP_IVB_PLANE_A  (0 << 19)
++#define   MI_DISPLAY_FLIP_IVB_PLANE_B  (1 << 19)
++#define   MI_DISPLAY_FLIP_IVB_SPRITE_A (2 << 19)
++#define   MI_DISPLAY_FLIP_IVB_SPRITE_B (3 << 19)
++#define   MI_DISPLAY_FLIP_IVB_PLANE_C  (4 << 19)
++#define   MI_DISPLAY_FLIP_IVB_SPRITE_C (5 << 19)
++
+ #define MI_SET_CONTEXT		MI_INSTR(0x18, 0)
+ #define   MI_MM_SPACE_GTT		(1<<8)
+ #define   MI_MM_SPACE_PHYSICAL		(0<<8)
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 1f43ae5..5c1cdb8 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -7176,17 +7176,34 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
+ 	struct drm_i915_private *dev_priv = dev->dev_private;
+ 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ 	struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
++	uint32_t plane_bit = 0;
+ 	int ret;
+ 
+ 	ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
+ 	if (ret)
+ 		goto err;
+ 
++	switch(intel_crtc->plane) {
++	case PLANE_A:
++		plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_A;
++		break;
++	case PLANE_B:
++		plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_B;
++		break;
++	case PLANE_C:
++		plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_C;
++		break;
++	default:
++		WARN_ONCE(1, "unknown plane in flip command\n");
++		ret = -ENODEV;
++		goto err;
++	}
++
+ 	ret = intel_ring_begin(ring, 4);
+ 	if (ret)
+ 		goto err_unpin;
+ 
+-	intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19));
++	intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | plane_bit);
+ 	intel_ring_emit(ring, (fb->pitch | obj->tiling_mode));
+ 	intel_ring_emit(ring, (obj->gtt_offset));
+ 	intel_ring_emit(ring, (MI_NOOP));
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0005-char-agp-add-another-Ironlake-host-bridge.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0005-char-agp-add-another-Ironlake-host-bridge.patch
new file mode 100644
index 0000000..8b303d2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0005-char-agp-add-another-Ironlake-host-bridge.patch
@@ -0,0 +1,46 @@
+From afd5d9b3973b65b15dd6c48f3f403c4809f71b66 Mon Sep 17 00:00:00 2001
+From: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Date: Wed, 6 Jun 2012 11:59:06 -0300
+Subject: [PATCH 05/67] char/agp: add another Ironlake host bridge
+
+commit 67384fe3fd450536342330f684ea1f7dcaef8130 upstream.
+
+This seems to come on Gigabyte H55M-S2V and was discovered through the
+https://bugs.freedesktop.org/show_bug.cgi?id=50381 debugging.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50381
+Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/char/agp/intel-agp.c |    1 +
+ drivers/char/agp/intel-agp.h |    1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
+index b427711..58b49d1 100644
+--- a/drivers/char/agp/intel-agp.c
++++ b/drivers/char/agp/intel-agp.c
+@@ -897,6 +897,7 @@ static struct pci_device_id agp_intel_pci_table[] = {
+ 	ID(PCI_DEVICE_ID_INTEL_B43_HB),
+ 	ID(PCI_DEVICE_ID_INTEL_B43_1_HB),
+ 	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB),
++	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_D2_HB),
+ 	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB),
+ 	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB),
+ 	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB),
+diff --git a/drivers/char/agp/intel-agp.h b/drivers/char/agp/intel-agp.h
+index 5da67f1..6f24604 100644
+--- a/drivers/char/agp/intel-agp.h
++++ b/drivers/char/agp/intel-agp.h
+@@ -211,6 +211,7 @@
+ #define PCI_DEVICE_ID_INTEL_G41_HB          0x2E30
+ #define PCI_DEVICE_ID_INTEL_G41_IG          0x2E32
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB	    0x0040
++#define PCI_DEVICE_ID_INTEL_IRONLAKE_D2_HB	    0x0069
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_D_IG	    0x0042
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB	    0x0044
+ #define PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB	    0x0062
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0006-x86-uv-Fix-UV2-BAU-legacy-mode.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0006-x86-uv-Fix-UV2-BAU-legacy-mode.patch
new file mode 100644
index 0000000..26dc10f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0006-x86-uv-Fix-UV2-BAU-legacy-mode.patch
@@ -0,0 +1,53 @@
+From ccfbdd3321d88685a0c3a2f69838a7a4706e32ef Mon Sep 17 00:00:00 2001
+From: Cliff Wickman <cpw@sgi.com>
+Date: Thu, 7 Jun 2012 08:31:40 -0500
+Subject: [PATCH 06/67] x86/uv: Fix UV2 BAU legacy mode
+
+commit d5d2d2eea84b0d8450b082edbc3dbde41fb8bfd8 upstream.
+
+The SGI Altix UV2 BAU (Broadcast Assist Unit) as used for
+tlb-shootdown (selective broadcast mode) always uses UV2
+broadcast descriptor format. There is no need to clear the
+'legacy' (UV1) mode, because the hardware always uses UV2 mode
+for selective broadcast.
+
+But the BIOS uses general broadcast and legacy mode, and the
+hardware pays attention to the legacy mode bit for general
+broadcast. So the kernel must not clear that mode bit.
+
+Signed-off-by: Cliff Wickman <cpw@sgi.com>
+Link: http://lkml.kernel.org/r/E1SccoO-0002Lh-Cb@eag09.americas.sgi.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/include/asm/uv/uv_bau.h |    1 -
+ arch/x86/platform/uv/tlb_uv.c    |    1 -
+ 2 files changed, 2 deletions(-)
+
+diff --git a/arch/x86/include/asm/uv/uv_bau.h b/arch/x86/include/asm/uv/uv_bau.h
+index 1b82f7e..679229f 100644
+--- a/arch/x86/include/asm/uv/uv_bau.h
++++ b/arch/x86/include/asm/uv/uv_bau.h
+@@ -149,7 +149,6 @@
+ /* 4 bits of software ack period */
+ #define UV2_ACK_MASK			0x7UL
+ #define UV2_ACK_UNITS_SHFT		3
+-#define UV2_LEG_SHFT UV2H_LB_BAU_MISC_CONTROL_USE_LEGACY_DESCRIPTOR_FORMATS_SHFT
+ #define UV2_EXT_SHFT UV2H_LB_BAU_MISC_CONTROL_ENABLE_EXTENDED_SB_STATUS_SHFT
+ 
+ /*
+diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
+index 81aee5a..29a69550 100644
+--- a/arch/x86/platform/uv/tlb_uv.c
++++ b/arch/x86/platform/uv/tlb_uv.c
+@@ -1304,7 +1304,6 @@ static void __init enable_timeouts(void)
+ 		 */
+ 		mmr_image |= (1L << SOFTACK_MSHIFT);
+ 		if (is_uv2_hub()) {
+-			mmr_image &= ~(1L << UV2_LEG_SHFT);
+ 			mmr_image |= (1L << UV2_EXT_SHFT);
+ 		}
+ 		write_mmr_misc_control(pnode, mmr_image);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0007-powerpc-Fix-kernel-panic-during-kernel-module-load.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0007-powerpc-Fix-kernel-panic-during-kernel-module-load.patch
new file mode 100644
index 0000000..3076ce9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0007-powerpc-Fix-kernel-panic-during-kernel-module-load.patch
@@ -0,0 +1,70 @@
+From 5c6f8c50fe40cec7015a6bfa9762bf76d52211d6 Mon Sep 17 00:00:00 2001
+From: Steffen Rumler <steffen.rumler.ext@nsn.com>
+Date: Wed, 6 Jun 2012 16:37:17 +0200
+Subject: [PATCH 07/67] powerpc: Fix kernel panic during kernel module load
+
+commit 3c75296562f43e6fbc6cddd3de948a7b3e4e9bcf upstream.
+
+This fixes a problem which can causes kernel oopses while loading
+a kernel module.
+
+According to the PowerPC EABI specification, GPR r11 is assigned
+the dedicated function to point to the previous stack frame.
+In the powerpc-specific kernel module loader, do_plt_call()
+(in arch/powerpc/kernel/module_32.c), GPR r11 is also used
+to generate trampoline code.
+
+This combination crashes the kernel, in the case where the compiler
+chooses to use a helper function for saving GPRs on entry, and the
+module loader has placed the .init.text section far away from the
+.text section, meaning that it has to generate a trampoline for
+functions in the .init.text section to call the GPR save helper.
+Because the trampoline trashes r11, references to the stack frame
+using r11 can cause an oops.
+
+The fix just uses GPR r12 instead of GPR r11 for generating the
+trampoline code.  According to the statements from Freescale, this is
+safe from an EABI perspective.
+
+I've tested the fix for kernel 2.6.33 on MPC8541.
+
+Signed-off-by: Steffen Rumler <steffen.rumler.ext@nsn.com>
+[paulus@samba.org: reworded the description]
+Signed-off-by: Paul Mackerras <paulus@samba.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/powerpc/kernel/module_32.c |   11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c
+index 0b6d796..2e3200c 100644
+--- a/arch/powerpc/kernel/module_32.c
++++ b/arch/powerpc/kernel/module_32.c
+@@ -176,8 +176,8 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr,
+ 
+ static inline int entry_matches(struct ppc_plt_entry *entry, Elf32_Addr val)
+ {
+-	if (entry->jump[0] == 0x3d600000 + ((val + 0x8000) >> 16)
+-	    && entry->jump[1] == 0x396b0000 + (val & 0xffff))
++	if (entry->jump[0] == 0x3d800000 + ((val + 0x8000) >> 16)
++	    && entry->jump[1] == 0x398c0000 + (val & 0xffff))
+ 		return 1;
+ 	return 0;
+ }
+@@ -204,10 +204,9 @@ static uint32_t do_plt_call(void *location,
+ 		entry++;
+ 	}
+ 
+-	/* Stolen from Paul Mackerras as well... */
+-	entry->jump[0] = 0x3d600000+((val+0x8000)>>16);	/* lis r11,sym@ha */
+-	entry->jump[1] = 0x396b0000 + (val&0xffff);	/* addi r11,r11,sym@l*/
+-	entry->jump[2] = 0x7d6903a6;			/* mtctr r11 */
++	entry->jump[0] = 0x3d800000+((val+0x8000)>>16); /* lis r12,sym@ha */
++	entry->jump[1] = 0x398c0000 + (val&0xffff);     /* addi r12,r12,sym@l*/
++	entry->jump[2] = 0x7d8903a6;                    /* mtctr r12 */
+ 	entry->jump[3] = 0x4e800420;			/* bctr */
+ 
+ 	DEBUGP("Initialized plt for 0x%x at %p\n", val, entry);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0008-drm-nouveau-determine-a-value-for-display_info.bpc-i.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0008-drm-nouveau-determine-a-value-for-display_info.bpc-i.patch
new file mode 100644
index 0000000..4b3559b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0008-drm-nouveau-determine-a-value-for-display_info.bpc-i.patch
@@ -0,0 +1,81 @@
+From ac9d749e3f0fcf7e8ce73cf00cf3a7d91debdc89 Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Mon, 17 Oct 2011 10:24:49 +1000
+Subject: [PATCH 08/67] drm/nouveau: determine a value for display_info.bpc if
+ edid doesn't
+
+commit 6322175530c89ab719cea28202f96a3660491727 upstream.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/nouveau/nouveau_connector.c |   46 +++++++++++++++++++++++++++
+ 1 file changed, 46 insertions(+)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
+index cea6696..e2c50d8 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
++++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
+@@ -602,6 +602,46 @@ nouveau_connector_scaler_modes_add(struct drm_connector *connector)
+ 	return modes;
+ }
+ 
++static void
++nouveau_connector_detect_depth(struct drm_connector *connector)
++{
++	struct drm_nouveau_private *dev_priv = connector->dev->dev_private;
++	struct nouveau_connector *nv_connector = nouveau_connector(connector);
++	struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder;
++	struct nvbios *bios = &dev_priv->vbios;
++	struct drm_display_mode *mode = nv_connector->native_mode;
++	bool duallink;
++
++	/* if the edid is feeling nice enough to provide this info, use it */
++	if (nv_connector->edid && connector->display_info.bpc)
++		return;
++
++	/* if not, we're out of options unless we're LVDS, default to 6bpc */
++	connector->display_info.bpc = 6;
++	if (nv_encoder->dcb->type != OUTPUT_LVDS)
++		return;
++
++	/* LVDS: panel straps */
++	if (bios->fp_no_ddc) {
++		if (bios->fp.if_is_24bit)
++			connector->display_info.bpc = 8;
++		return;
++	}
++
++	/* LVDS: DDC panel, need to first determine the number of links to
++	 * know which if_is_24bit flag to check...
++	 */
++	if (nv_connector->edid &&
++	    nv_connector->dcb->type == DCB_CONNECTOR_LVDS_SPWG)
++		duallink = ((u8 *)nv_connector->edid)[121] == 2;
++	else
++		duallink = mode->clock >= bios->fp.duallink_transition_clk;
++
++	if ((!duallink && (bios->fp.strapless_is_24bit & 1)) ||
++	    ( duallink && (bios->fp.strapless_is_24bit & 2)))
++		connector->display_info.bpc = 8;
++}
++
+ static int
+ nouveau_connector_get_modes(struct drm_connector *connector)
+ {
+@@ -646,6 +686,12 @@ nouveau_connector_get_modes(struct drm_connector *connector)
+ 		ret = 1;
+ 	}
+ 
++	/* Attempt to determine display colour depth, this has to happen after
++	 * we've determined the "native" mode for LVDS, as the VBIOS tables
++	 * require us to compare against a pixel clock in some cases..
++	 */
++	nouveau_connector_detect_depth(connector);
++
+ 	if (nv_encoder->dcb->type == OUTPUT_TV)
+ 		ret = get_slave_funcs(encoder)->get_modes(encoder, connector);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0009-drm-nouveau-default-to-8bpc-for-non-LVDS-panels-if-E.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0009-drm-nouveau-default-to-8bpc-for-non-LVDS-panels-if-E.patch
new file mode 100644
index 0000000..eeb07d1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0009-drm-nouveau-default-to-8bpc-for-non-LVDS-panels-if-E.patch
@@ -0,0 +1,42 @@
+From 672b73575b5fb47166e255cc9a374b858d5f59da Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Sat, 24 Mar 2012 16:26:13 +1000
+Subject: [PATCH 09/67] drm/nouveau: default to 8bpc for non-LVDS panels if
+ EDID isn't useful
+
+commit c8435362f2211086b34ce871fa9c3fcc7ca79ff9 upstream.
+
+A few reports of bad behaviour since the autodetection defaulted to 6bpc,
+lets fix this.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/nouveau/nouveau_connector.c |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
+index e2c50d8..eeaa8ca 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
++++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
+@@ -616,10 +616,13 @@ nouveau_connector_detect_depth(struct drm_connector *connector)
+ 	if (nv_connector->edid && connector->display_info.bpc)
+ 		return;
+ 
+-	/* if not, we're out of options unless we're LVDS, default to 6bpc */
+-	connector->display_info.bpc = 6;
+-	if (nv_encoder->dcb->type != OUTPUT_LVDS)
++	/* if not, we're out of options unless we're LVDS, default to 8bpc */
++	if (nv_encoder->dcb->type != OUTPUT_LVDS) {
++		connector->display_info.bpc = 8;
+ 		return;
++	}
++
++	connector->display_info.bpc = 6;
+ 
+ 	/* LVDS: panel straps */
+ 	if (bios->fp_no_ddc) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0010-drm-nouveau-disp-fix-dithering-not-being-enabled-on-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0010-drm-nouveau-disp-fix-dithering-not-being-enabled-on-.patch
new file mode 100644
index 0000000..f9a2041
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0010-drm-nouveau-disp-fix-dithering-not-being-enabled-on-.patch
@@ -0,0 +1,38 @@
+From 1c16b668a8c284025dc8c639a1b760eccaed3864 Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Sat, 5 May 2012 00:39:21 +1000
+Subject: [PATCH 10/67] drm/nouveau/disp: fix dithering not being enabled on
+ some eDP macbooks
+
+commit a6a17859f1bdf607650ee055101f54c5f207762b upstream.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+[Maarten Lankhorst backported to 3.2,
+ changing nv_connector->type to nv_connector->dcb->type]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/nouveau/nouveau_connector.c |    8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
+index eeaa8ca..1e72db5 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
++++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
+@@ -616,7 +616,13 @@ nouveau_connector_detect_depth(struct drm_connector *connector)
+ 	if (nv_connector->edid && connector->display_info.bpc)
+ 		return;
+ 
+-	/* if not, we're out of options unless we're LVDS, default to 8bpc */
++	/* EDID 1.4 is *supposed* to be supported on eDP, but, Apple... */
++	if (nv_connector->dcb->type == DCB_CONNECTOR_eDP) {
++		connector->display_info.bpc = 6;
++		return;
++	}
++
++	/* we're out of options unless we're LVDS, default to 8bpc */
+ 	if (nv_encoder->dcb->type != OUTPUT_LVDS) {
+ 		connector->display_info.bpc = 8;
+ 		return;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0011-fuse-fix-stat-call-on-32-bit-platforms.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0011-fuse-fix-stat-call-on-32-bit-platforms.patch
new file mode 100644
index 0000000..041098a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0011-fuse-fix-stat-call-on-32-bit-platforms.patch
@@ -0,0 +1,103 @@
+From 16bebb9a3715d7d06a3bcc4b4ec1c1209251d494 Mon Sep 17 00:00:00 2001
+From: Pavel Shilovsky <piastry@etersoft.ru>
+Date: Thu, 10 May 2012 19:49:38 +0400
+Subject: [PATCH 11/67] fuse: fix stat call on 32 bit platforms
+
+commit 45c72cd73c788dd18c8113d4a404d6b4a01decf1 upstream.
+
+Now we store attr->ino at inode->i_ino, return attr->ino at the
+first time and then return inode->i_ino if the attribute timeout
+isn't expired. That's wrong on 32 bit platforms because attr->ino
+is 64 bit and inode->i_ino is 32 bit in this case.
+
+Fix this by saving 64 bit ino in fuse_inode structure and returning
+it every time we call getattr. Also squash attr->ino into inode->i_ino
+explicitly.
+
+Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru>
+Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/fuse/dir.c    |    1 +
+ fs/fuse/fuse_i.h |    3 +++
+ fs/fuse/inode.c  |   17 ++++++++++++++++-
+ 3 files changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
+index 9f63e49..5ef7afb 100644
+--- a/fs/fuse/dir.c
++++ b/fs/fuse/dir.c
+@@ -858,6 +858,7 @@ int fuse_update_attributes(struct inode *inode, struct kstat *stat,
+ 		if (stat) {
+ 			generic_fillattr(inode, stat);
+ 			stat->mode = fi->orig_i_mode;
++			stat->ino = fi->orig_ino;
+ 		}
+ 	}
+ 
+diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
+index cf6db0a..89c4a58 100644
+--- a/fs/fuse/fuse_i.h
++++ b/fs/fuse/fuse_i.h
+@@ -82,6 +82,9 @@ struct fuse_inode {
+ 	    preserve the original mode */
+ 	mode_t orig_i_mode;
+ 
++	/** 64 bit inode number */
++	u64 orig_ino;
++
+ 	/** Version of last attribute change */
+ 	u64 attr_version;
+ 
+diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
+index aa83109..1f82d95 100644
+--- a/fs/fuse/inode.c
++++ b/fs/fuse/inode.c
+@@ -91,6 +91,7 @@ static struct inode *fuse_alloc_inode(struct super_block *sb)
+ 	fi->nlookup = 0;
+ 	fi->attr_version = 0;
+ 	fi->writectr = 0;
++	fi->orig_ino = 0;
+ 	INIT_LIST_HEAD(&fi->write_files);
+ 	INIT_LIST_HEAD(&fi->queued_writes);
+ 	INIT_LIST_HEAD(&fi->writepages);
+@@ -140,6 +141,18 @@ static int fuse_remount_fs(struct super_block *sb, int *flags, char *data)
+ 	return 0;
+ }
+ 
++/*
++ * ino_t is 32-bits on 32-bit arch. We have to squash the 64-bit value down
++ * so that it will fit.
++ */
++static ino_t fuse_squash_ino(u64 ino64)
++{
++	ino_t ino = (ino_t) ino64;
++	if (sizeof(ino_t) < sizeof(u64))
++		ino ^= ino64 >> (sizeof(u64) - sizeof(ino_t)) * 8;
++	return ino;
++}
++
+ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
+ 				   u64 attr_valid)
+ {
+@@ -149,7 +162,7 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
+ 	fi->attr_version = ++fc->attr_version;
+ 	fi->i_time = attr_valid;
+ 
+-	inode->i_ino     = attr->ino;
++	inode->i_ino     = fuse_squash_ino(attr->ino);
+ 	inode->i_mode    = (inode->i_mode & S_IFMT) | (attr->mode & 07777);
+ 	set_nlink(inode, attr->nlink);
+ 	inode->i_uid     = attr->uid;
+@@ -175,6 +188,8 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
+ 	fi->orig_i_mode = inode->i_mode;
+ 	if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS))
+ 		inode->i_mode &= ~S_ISVTX;
++
++	fi->orig_ino = attr->ino;
+ }
+ 
+ void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0012-x86-MCE-AMD-Make-APIC-LVT-thresholding-interrupt-opt.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0012-x86-MCE-AMD-Make-APIC-LVT-thresholding-interrupt-opt.patch
new file mode 100644
index 0000000..29c6318
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0012-x86-MCE-AMD-Make-APIC-LVT-thresholding-interrupt-opt.patch
@@ -0,0 +1,146 @@
+From 558e69f643c0c8492df4bb6898cbf3caf3e1e160 Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <borislav.petkov@amd.com>
+Date: Sun, 10 Jun 2012 00:50:15 +0900
+Subject: [PATCH 12/67] x86, MCE, AMD: Make APIC LVT thresholding interrupt
+ optional
+
+commit f227d4306cf30e1d5b6f231e8ef9006c34f3d186 upstream.
+
+Currently, the APIC LVT interrupt for error thresholding is implicitly
+enabled. However, there are models in the F15h range which do not enable
+it. Make the code machinery which sets up the APIC interrupt support
+an optional setting and add an ->interrupt_capable member to the bank
+representation mirroring that capability and enable the interrupt offset
+programming only if it is true.
+
+Simplify code and fixup comment style while at it.
+
+This patch is for stable kernels v3.0 to v3.2.
+
+Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
+Signed-off-by: Robert Richter <robert.richter@amd.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kernel/cpu/mcheck/mce_amd.c |   55 +++++++++++++++++++++++++++-------
+ 1 file changed, 44 insertions(+), 11 deletions(-)
+
+diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
+index f547421..445a61c 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
++++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
+@@ -52,6 +52,7 @@ struct threshold_block {
+ 	unsigned int		cpu;
+ 	u32			address;
+ 	u16			interrupt_enable;
++	bool			interrupt_capable;
+ 	u16			threshold_limit;
+ 	struct kobject		kobj;
+ 	struct list_head	miscj;
+@@ -86,6 +87,21 @@ struct thresh_restart {
+ 	u16			old_limit;
+ };
+ 
++static bool lvt_interrupt_supported(unsigned int bank, u32 msr_high_bits)
++{
++	/*
++	 * bank 4 supports APIC LVT interrupts implicitly since forever.
++	 */
++	if (bank == 4)
++		return true;
++
++	/*
++	 * IntP: interrupt present; if this bit is set, the thresholding
++	 * bank can generate APIC LVT interrupts
++	 */
++	return msr_high_bits & BIT(28);
++}
++
+ static int lvt_off_valid(struct threshold_block *b, int apic, u32 lo, u32 hi)
+ {
+ 	int msr = (hi & MASK_LVTOFF_HI) >> 20;
+@@ -107,8 +123,10 @@ static int lvt_off_valid(struct threshold_block *b, int apic, u32 lo, u32 hi)
+ 	return 1;
+ };
+ 
+-/* must be called with correct cpu affinity */
+-/* Called via smp_call_function_single() */
++/*
++ * Called via smp_call_function_single(), must be called with correct
++ * cpu affinity.
++ */
+ static void threshold_restart_bank(void *_tr)
+ {
+ 	struct thresh_restart *tr = _tr;
+@@ -131,6 +149,12 @@ static void threshold_restart_bank(void *_tr)
+ 		    (new_count & THRESHOLD_MAX);
+ 	}
+ 
++	/* clear IntType */
++	hi &= ~MASK_INT_TYPE_HI;
++
++	if (!tr->b->interrupt_capable)
++		goto done;
++
+ 	if (tr->set_lvt_off) {
+ 		if (lvt_off_valid(tr->b, tr->lvt_off, lo, hi)) {
+ 			/* set new lvt offset */
+@@ -139,9 +163,10 @@ static void threshold_restart_bank(void *_tr)
+ 		}
+ 	}
+ 
+-	tr->b->interrupt_enable ?
+-	    (hi = (hi & ~MASK_INT_TYPE_HI) | INT_TYPE_APIC) :
+-	    (hi &= ~MASK_INT_TYPE_HI);
++	if (tr->b->interrupt_enable)
++		hi |= INT_TYPE_APIC;
++
++ done:
+ 
+ 	hi |= MASK_COUNT_EN_HI;
+ 	wrmsr(tr->b->address, lo, hi);
+@@ -206,14 +231,18 @@ void mce_amd_feature_init(struct cpuinfo_x86 *c)
+ 			if (shared_bank[bank] && c->cpu_core_id)
+ 				break;
+ #endif
+-			offset = setup_APIC_mce(offset,
+-						(high & MASK_LVTOFF_HI) >> 20);
+ 
+ 			memset(&b, 0, sizeof(b));
+-			b.cpu		= cpu;
+-			b.bank		= bank;
+-			b.block		= block;
+-			b.address	= address;
++			b.cpu			= cpu;
++			b.bank			= bank;
++			b.block			= block;
++			b.address		= address;
++			b.interrupt_capable	= lvt_interrupt_supported(bank, high);
++
++			if (b.interrupt_capable) {
++				int new = (high & MASK_LVTOFF_HI) >> 20;
++				offset  = setup_APIC_mce(offset, new);
++			}
+ 
+ 			mce_threshold_block_init(&b, offset);
+ 			mce_threshold_vector = amd_threshold_interrupt;
+@@ -313,6 +342,9 @@ store_interrupt_enable(struct threshold_block *b, const char *buf, size_t size)
+ 	struct thresh_restart tr;
+ 	unsigned long new;
+ 
++	if (!b->interrupt_capable)
++		return -EINVAL;
++
+ 	if (strict_strtoul(buf, 0, &new) < 0)
+ 		return -EINVAL;
+ 
+@@ -471,6 +503,7 @@ static __cpuinit int allocate_threshold_blocks(unsigned int cpu,
+ 	b->cpu			= cpu;
+ 	b->address		= address;
+ 	b->interrupt_enable	= 0;
++	b->interrupt_capable	= lvt_interrupt_supported(bank, high);
+ 	b->threshold_limit	= THRESHOLD_MAX;
+ 
+ 	INIT_LIST_HEAD(&b->miscj);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0013-x86-amd-Re-enable-CPU-topology-extensions-in-case-BI.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0013-x86-amd-Re-enable-CPU-topology-extensions-in-case-BI.patch
new file mode 100644
index 0000000..e453609
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0013-x86-amd-Re-enable-CPU-topology-extensions-in-case-BI.patch
@@ -0,0 +1,60 @@
+From ab8b86f7a27c50219b82e9dfc92a21d8715403bf Mon Sep 17 00:00:00 2001
+From: Andreas Herrmann <andreas.herrmann3@amd.com>
+Date: Tue, 3 Apr 2012 12:13:07 +0200
+Subject: [PATCH 13/67] x86/amd: Re-enable CPU topology extensions in case
+ BIOS has disabled it
+
+BIOS will switch off the corresponding feature flag on family
+15h models 10h-1fh non-desktop CPUs.
+
+The topology extension CPUID leafs are required to detect which
+cores belong to the same compute unit. (thread siblings mask is
+set accordingly and also correct information about L1i and L2
+cache sharing depends on this).
+
+W/o this patch we wouldn't see which cores belong to the same
+compute unit and also cache sharing information for L1i and L2
+would be incorrect on such systems.
+
+Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+(cherry picked from commit f7f286a910221ae18b21c18d9d0f4cd88965829f)
+
+Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/kernel/cpu/amd.c |   18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
+index 0bab2b1..3524e1f 100644
+--- a/arch/x86/kernel/cpu/amd.c
++++ b/arch/x86/kernel/cpu/amd.c
+@@ -571,6 +571,24 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
+ 		}
+ 	}
+ 
++	/* re-enable TopologyExtensions if switched off by BIOS */
++	if ((c->x86 == 0x15) &&
++	    (c->x86_model >= 0x10) && (c->x86_model <= 0x1f) &&
++	    !cpu_has(c, X86_FEATURE_TOPOEXT)) {
++		u64 val;
++
++		if (!rdmsrl_amd_safe(0xc0011005, &val)) {
++			val |= 1ULL << 54;
++			wrmsrl_amd_safe(0xc0011005, val);
++			rdmsrl(0xc0011005, val);
++			if (val & (1ULL << 54)) {
++				set_cpu_cap(c, X86_FEATURE_TOPOEXT);
++				printk(KERN_INFO FW_INFO "CPU: Re-enabling "
++				  "disabled Topology Extensions Support\n");
++			}
++		}
++	}
++
+ 	cpu_detect_cache_sizes(c);
+ 
+ 	/* Multi core CPU? */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0014-hwmon-fam15h_power-Increase-output-resolution.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0014-hwmon-fam15h_power-Increase-output-resolution.patch
new file mode 100644
index 0000000..cf74ee5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0014-hwmon-fam15h_power-Increase-output-resolution.patch
@@ -0,0 +1,56 @@
+From e88182a80fd1abfed0a667c28fd70632c728b9b0 Mon Sep 17 00:00:00 2001
+From: Andre Przywara <andre.przywara@amd.com>
+Date: Fri, 23 Mar 2012 10:02:17 +0100
+Subject: [PATCH 14/67] hwmon: (fam15h_power) Increase output resolution
+
+On high CPU load the accumulating values in the running_avg_cap
+register are very low (below 10), so averaging them too early leads
+to unnecessary poor output resolution. Since we pretend to output
+micro-Watt we better keep all the bits we have as long as possible.
+
+Signed-off-by: Andre Przywara <andre.przywara@amd.com>
+Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
+Acked-by: Guenter Roeck <guenter.roeck@ericsson.com>
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+(cherry picked from commit 941a956b0e387b21f385f486c34ef67576775cfc)
+
+Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/hwmon/fam15h_power.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c
+index 9a4c3ab..e8e18ca 100644
+--- a/drivers/hwmon/fam15h_power.c
++++ b/drivers/hwmon/fam15h_power.c
+@@ -61,14 +61,14 @@ static ssize_t show_power(struct device *dev,
+ 				  REG_TDP_RUNNING_AVERAGE, &val);
+ 	running_avg_capture = (val >> 4) & 0x3fffff;
+ 	running_avg_capture = sign_extend32(running_avg_capture, 21);
+-	running_avg_range = val & 0xf;
++	running_avg_range = (val & 0xf) + 1;
+ 
+ 	pci_bus_read_config_dword(f4->bus, PCI_DEVFN(PCI_SLOT(f4->devfn), 5),
+ 				  REG_TDP_LIMIT3, &val);
+ 
+ 	tdp_limit = val >> 16;
+-	curr_pwr_watts = tdp_limit + data->base_tdp -
+-		(s32)(running_avg_capture >> (running_avg_range + 1));
++	curr_pwr_watts = (tdp_limit + data->base_tdp) << running_avg_range;
++	curr_pwr_watts -= running_avg_capture;
+ 	curr_pwr_watts *= data->tdp_to_watts;
+ 
+ 	/*
+@@ -78,7 +78,7 @@ static ssize_t show_power(struct device *dev,
+ 	 * scaling factor 1/(2^16).  For conversion we use
+ 	 * (10^6)/(2^16) = 15625/(2^10)
+ 	 */
+-	curr_pwr_watts = (curr_pwr_watts * 15625) >> 10;
++	curr_pwr_watts = (curr_pwr_watts * 15625) >> (10 + running_avg_range);
+ 	return sprintf(buf, "%u\n", (unsigned int) curr_pwr_watts);
+ }
+ static DEVICE_ATTR(power1_input, S_IRUGO, show_power, NULL);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0015-sched-Fix-the-relax_domain_level-boot-parameter.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0015-sched-Fix-the-relax_domain_level-boot-parameter.patch
new file mode 100644
index 0000000..ea7a120
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0015-sched-Fix-the-relax_domain_level-boot-parameter.patch
@@ -0,0 +1,65 @@
+From 701bbc54cf5b05f981bd595a0662317d4d7576fc Mon Sep 17 00:00:00 2001
+From: Dimitri Sivanich <sivanich@sgi.com>
+Date: Tue, 5 Jun 2012 13:44:36 -0500
+Subject: [PATCH 15/67] sched: Fix the relax_domain_level boot parameter
+
+commit a841f8cef4bb124f0f5563314d0beaf2e1249d72 upstream.
+
+It does not get processed because sched_domain_level_max is 0 at the
+time that setup_relax_domain_level() is run.
+
+Simply accept the value as it is, as we don't know the value of
+sched_domain_level_max until sched domain construction is completed.
+
+Fix sched_relax_domain_level in cpuset.  The build_sched_domain() routine calls
+the set_domain_attribute() routine prior to setting the sd->level, however,
+the set_domain_attribute() routine relies on the sd->level to decide whether
+idle load balancing will be off/on.
+
+Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Link: http://lkml.kernel.org/r/20120605184436.GA15668@sgi.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+[bwh: Backported to 3.2: adjust the filename]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ kernel/sched.c |    9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/kernel/sched.c b/kernel/sched.c
+index 299f55c..576a27f 100644
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -7429,11 +7429,8 @@ int sched_domain_level_max;
+ 
+ static int __init setup_relax_domain_level(char *str)
+ {
+-	unsigned long val;
+-
+-	val = simple_strtoul(str, NULL, 0);
+-	if (val < sched_domain_level_max)
+-		default_relax_domain_level = val;
++	if (kstrtoint(str, 0, &default_relax_domain_level))
++		pr_warn("Unable to set relax_domain_level\n");
+ 
+ 	return 1;
+ }
+@@ -7636,7 +7633,6 @@ struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl,
+ 	if (!sd)
+ 		return child;
+ 
+-	set_domain_attribute(sd, attr);
+ 	cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu));
+ 	if (child) {
+ 		sd->level = child->level + 1;
+@@ -7644,6 +7640,7 @@ struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl,
+ 		child->parent = sd;
+ 	}
+ 	sd->child = child;
++	set_domain_attribute(sd, attr);
+ 
+ 	return sd;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0016-iwlwifi-don-t-mess-up-the-SCD-when-removing-a-key.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0016-iwlwifi-don-t-mess-up-the-SCD-when-removing-a-key.patch
new file mode 100644
index 0000000..01d143e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0016-iwlwifi-don-t-mess-up-the-SCD-when-removing-a-key.patch
@@ -0,0 +1,47 @@
+From 9dfeca7b52fe58b2a49b59834a976405a424b622 Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Wed, 6 Jun 2012 09:13:36 +0200
+Subject: [PATCH 16/67] iwlwifi: don't mess up the SCD when removing a key
+
+commit d6ee27eb13beab94056e0de52d81220058ca2297 upstream.
+
+When we remove a key, we put a key index which was supposed
+to tell the fw that we are actually removing the key. But
+instead the fw took that index as a valid index and messed
+up the SRAM of the device.
+
+This memory corruption on the device mangled the data of
+the SCD. The impact on the user is that SCD queue 2 got
+stuck after having removed keys.
+The message is the log that was printed is:
+
+Queue 2 stuck for 10000ms
+
+This doesn't seem to fix the higher queues that get stuck
+from time to time.
+
+Reviewed-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-agn-sta.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+index 5cfb3d1..ccf1524 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+@@ -1245,7 +1245,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
+ 		key_flags |= STA_KEY_MULTICAST_MSK;
+ 
+ 	sta_cmd.key.key_flags = key_flags;
+-	sta_cmd.key.key_offset = WEP_INVALID_OFFSET;
++	sta_cmd.key.key_offset = keyconf->hw_key_idx;
+ 	sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK;
+ 	sta_cmd.mode = STA_CONTROL_MODIFY_MSK;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0017-hwrng-atmel-rng-fix-race-condition-leading-to-repeat.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0017-hwrng-atmel-rng-fix-race-condition-leading-to-repeat.patch
new file mode 100644
index 0000000..24e1bed
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0017-hwrng-atmel-rng-fix-race-condition-leading-to-repeat.patch
@@ -0,0 +1,85 @@
+From 1468193368592ea5ed063093a7f776a19af2a131 Mon Sep 17 00:00:00 2001
+From: Peter Korsgaard <jacmet@sunsite.dk>
+Date: Thu, 31 May 2012 20:53:08 +1000
+Subject: [PATCH 17/67] hwrng: atmel-rng - fix race condition leading to
+ repeated bits
+
+commit 121daad8fd1dce63076fa55aaedd5dc3f981b334 upstream.
+
+Data valid gets cleared by reading the ISR (status register) and NOT from
+reading ODATA (data register). A new data word can become available between
+checking ISR and reading ODATA, causing us to reuse the same data word next
+time atmel_trng_read() gets called, if that happens before the following
+data word is ready.
+
+With this fixed, rngtest no longer complains of 'Continous run' errors.
+Before:
+
+rngtest -c 1000 < /dev/hwrng
+rngtest 3
+Copyright (c) 2004 by Henrique de Moraes Holschuh
+This is free software; see the source for copying conditions.  There is NO warr.
+
+rngtest: starting FIPS tests...
+rngtest: bits received from input: 20000032
+rngtest: FIPS 140-2 successes: 923
+rngtest: FIPS 140-2 failures: 77
+rngtest: FIPS 140-2(2001-10-10) Monobit: 0
+rngtest: FIPS 140-2(2001-10-10) Poker: 0
+rngtest: FIPS 140-2(2001-10-10) Runs: 1
+rngtest: FIPS 140-2(2001-10-10) Long run: 0
+rngtest: FIPS 140-2(2001-10-10) Continuous run: 76
+rngtest: input channel speed: (min=721.402; avg=46003.510; max=49321.338)Kibitss
+rngtest: FIPS tests speed: (min=11.442; avg=12.714; max=12.801)Mibits/s
+rngtest: Program run time: 1931860 microseconds
+
+After:
+
+rngtest -c 1000 < /dev/hwrng
+rngtest 3
+Copyright (c) 2004 by Henrique de Moraes Holschuh
+This is free software; see the source for copying conditions.  There is NO warr.
+
+rngtest: starting FIPS tests...
+rngtest: bits received from input: 20000032
+rngtest: FIPS 140-2 successes: 1000
+rngtest: FIPS 140-2 failures: 0
+rngtest: FIPS 140-2(2001-10-10) Monobit: 0
+rngtest: FIPS 140-2(2001-10-10) Poker: 0
+rngtest: FIPS 140-2(2001-10-10) Runs: 0
+rngtest: FIPS 140-2(2001-10-10) Long run: 0
+rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
+rngtest: input channel speed: (min=777.518; avg=36988.482; max=43115.342)Kibitss
+rngtest: FIPS tests speed: (min=11.951; avg=12.715; max=12.887)Mibits/s
+rngtest: Program run time: 2035543 microseconds
+
+Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
+Reported-by: George Pontis <GPontis@z9.com>
+Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/char/hw_random/atmel-rng.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
+index 241df2e..0477982 100644
+--- a/drivers/char/hw_random/atmel-rng.c
++++ b/drivers/char/hw_random/atmel-rng.c
+@@ -36,6 +36,13 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
+ 	/* data ready? */
+ 	if (readl(trng->base + TRNG_ODATA) & 1) {
+ 		*data = readl(trng->base + TRNG_ODATA);
++		/*
++		  ensure data ready is only set again AFTER the next data
++		  word is ready in case it got set between checking ISR
++		  and reading ODATA, so we don't risk re-reading the
++		  same word
++		*/
++		readl(trng->base + TRNG_ISR);
+ 		return 4;
+ 	} else
+ 		return 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0018-crypto-aesni-intel-fix-unaligned-cbc-decrypt-for-x86.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0018-crypto-aesni-intel-fix-unaligned-cbc-decrypt-for-x86.patch
new file mode 100644
index 0000000..fa13f31
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0018-crypto-aesni-intel-fix-unaligned-cbc-decrypt-for-x86.patch
@@ -0,0 +1,46 @@
+From e7814580e8b3d8f81dac54f4919f7f3b75b40c0d Mon Sep 17 00:00:00 2001
+From: Mathias Krause <minipli@googlemail.com>
+Date: Wed, 30 May 2012 01:43:08 +0200
+Subject: [PATCH 18/67] crypto: aesni-intel - fix unaligned cbc decrypt for
+ x86-32
+
+commit 7c8d51848a88aafdb68f42b6b650c83485ea2f84 upstream.
+
+The 32 bit variant of cbc(aes) decrypt is using instructions requiring
+128 bit aligned memory locations but fails to ensure this constraint in
+the code. Fix this by loading the data into intermediate registers with
+load unaligned instructions.
+
+This fixes reported general protection faults related to aesni.
+
+References: https://bugzilla.kernel.org/show_bug.cgi?id=43223
+Reported-by: Daniel <garkein@mailueberfall.de>
+Signed-off-by: Mathias Krause <minipli@googlemail.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/crypto/aesni-intel_asm.S |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S
+index be6d9e3..3470624 100644
+--- a/arch/x86/crypto/aesni-intel_asm.S
++++ b/arch/x86/crypto/aesni-intel_asm.S
+@@ -2460,10 +2460,12 @@ ENTRY(aesni_cbc_dec)
+ 	pxor IN3, STATE4
+ 	movaps IN4, IV
+ #else
+-	pxor (INP), STATE2
+-	pxor 0x10(INP), STATE3
+ 	pxor IN1, STATE4
+ 	movaps IN2, IV
++	movups (INP), IN1
++	pxor IN1, STATE2
++	movups 0x10(INP), IN2
++	pxor IN2, STATE3
+ #endif
+ 	movups STATE1, (OUTP)
+ 	movups STATE2, 0x10(OUTP)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0019-xen-setup-filter-APERFMPERF-cpuid-feature-out.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0019-xen-setup-filter-APERFMPERF-cpuid-feature-out.patch
new file mode 100644
index 0000000..7135b15
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0019-xen-setup-filter-APERFMPERF-cpuid-feature-out.patch
@@ -0,0 +1,58 @@
+From 88d89048f346736a57637924307749c8cc782751 Mon Sep 17 00:00:00 2001
+From: Andre Przywara <andre.przywara@amd.com>
+Date: Tue, 29 May 2012 13:07:31 +0200
+Subject: [PATCH 19/67] xen/setup: filter APERFMPERF cpuid feature out
+
+commit 5e626254206a709c6e937f3dda69bf26c7344f6f upstream.
+
+Xen PV kernels allow access to the APERF/MPERF registers to read the
+effective frequency. Access to the MSRs is however redirected to the
+currently scheduled physical CPU, making consecutive read and
+compares unreliable. In addition each rdmsr traps into the hypervisor.
+So to avoid bogus readouts and expensive traps, disable the kernel
+internal feature flag for APERF/MPERF if running under Xen.
+This will
+a) remove the aperfmperf flag from /proc/cpuinfo
+b) not mislead the power scheduler (arch/x86/kernel/cpu/sched.c) to
+   use the feature to improve scheduling (by default disabled)
+c) not mislead the cpufreq driver to use the MSRs
+
+This does not cover userland programs which access the MSRs via the
+device file interface, but this will be addressed separately.
+
+Signed-off-by: Andre Przywara <andre.przywara@amd.com>
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/xen/enlighten.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
+index cca659e..44d4393 100644
+--- a/arch/x86/xen/enlighten.c
++++ b/arch/x86/xen/enlighten.c
+@@ -198,6 +198,9 @@ static void __init xen_banner(void)
+ 	       xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : "");
+ }
+ 
++#define CPUID_THERM_POWER_LEAF 6
++#define APERFMPERF_PRESENT 0
++
+ static __read_mostly unsigned int cpuid_leaf1_edx_mask = ~0;
+ static __read_mostly unsigned int cpuid_leaf1_ecx_mask = ~0;
+ 
+@@ -218,6 +221,11 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx,
+ 		maskedx = cpuid_leaf1_edx_mask;
+ 		break;
+ 
++	case CPUID_THERM_POWER_LEAF:
++		/* Disabling APERFMPERF for kernel usage */
++		maskecx = ~(1 << APERFMPERF_PRESENT);
++		break;
++
+ 	case 0xb:
+ 		/* Suppress extended topology stuff */
+ 		maskebx = 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0020-NFSv4.1-Fix-a-request-leak-on-the-back-channel.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0020-NFSv4.1-Fix-a-request-leak-on-the-back-channel.patch
new file mode 100644
index 0000000..8d9f08c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0020-NFSv4.1-Fix-a-request-leak-on-the-back-channel.patch
@@ -0,0 +1,33 @@
+From 11e050e0bcf1f48f656630c0e603752e8d537126 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Thu, 31 May 2012 15:26:38 -0400
+Subject: [PATCH 20/67] NFSv4.1: Fix a request leak on the back channel
+
+commit b3b02ae5865c2dcd506322e0fc6def59a042e72f upstream.
+
+If the call to svc_process_common() fails, then the request
+needs to be freed before we can exit bc_svc_process.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/sunrpc/svc.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
+index d4ad50e..c80c162 100644
+--- a/net/sunrpc/svc.c
++++ b/net/sunrpc/svc.c
+@@ -1358,7 +1358,8 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req,
+ 						sizeof(req->rq_snd_buf));
+ 		return bc_send(req);
+ 	} else {
+-		/* Nothing to do to drop request */
++		/* drop request */
++		xprt_free_bc_request(req);
+ 		return 0;
+ 	}
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0021-can-c_can-fix-BUG-echo_skb-is-occupied-during-transm.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0021-can-c_can-fix-BUG-echo_skb-is-occupied-during-transm.patch
new file mode 100644
index 0000000..b2ff99b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0021-can-c_can-fix-BUG-echo_skb-is-occupied-during-transm.patch
@@ -0,0 +1,70 @@
+From a17c423f5b57ba5a2c6dc959b6259d07f7d32741 Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Wed, 23 May 2012 17:45:09 +0530
+Subject: [PATCH 21/67] can: c_can: fix "BUG! echo_skb is occupied!" during
+ transmit
+
+commit 617caccebe451716df21c069b079d5936ed7b0f3 upstream.
+
+This patch fixes an issue with transmit routine, which causes
+"can_put_echo_skb: BUG! echo_skb is occupied!" message when
+using "cansequence -p" on D_CAN controller.
+
+In c_can driver, while transmitting packets tx_echo flag holds
+the no of can frames put for transmission into the hardware.
+
+As the comment above c_can_do_tx() indicates, if we find any packet
+which is not transmitted then we should stop looking for more.
+In the current implementation this is not taken care of causing the
+said message.
+
+Also, fix the condition used to find if the packet is transmitted
+or not. Current code skips the first tx message object and ends up
+checking one extra invalid object.
+
+While at it, fix the comment on top of c_can_do_tx() to use the
+terminology "packet" instead of "package" since it is more
+standard.
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+Acked-by: Wolfgang Grandegger <wg@grandegger.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/can/c_can/c_can.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
+index 536bda0..9ac28df 100644
+--- a/drivers/net/can/c_can/c_can.c
++++ b/drivers/net/can/c_can/c_can.c
+@@ -686,7 +686,7 @@ static int c_can_get_berr_counter(const struct net_device *dev,
+  *
+  * We iterate from priv->tx_echo to priv->tx_next and check if the
+  * packet has been transmitted, echo it back to the CAN framework.
+- * If we discover a not yet transmitted package, stop looking for more.
++ * If we discover a not yet transmitted packet, stop looking for more.
+  */
+ static void c_can_do_tx(struct net_device *dev)
+ {
+@@ -698,7 +698,7 @@ static void c_can_do_tx(struct net_device *dev)
+ 	for (/* nix */; (priv->tx_next - priv->tx_echo) > 0; priv->tx_echo++) {
+ 		msg_obj_no = get_tx_echo_msg_obj(priv);
+ 		val = c_can_read_reg32(priv, &priv->regs->txrqst1);
+-		if (!(val & (1 << msg_obj_no))) {
++		if (!(val & (1 << (msg_obj_no - 1)))) {
+ 			can_get_echo_skb(dev,
+ 					msg_obj_no - C_CAN_MSG_OBJ_TX_FIRST);
+ 			stats->tx_bytes += priv->read_reg(priv,
+@@ -706,6 +706,8 @@ static void c_can_do_tx(struct net_device *dev)
+ 					& IF_MCONT_DLC_MASK;
+ 			stats->tx_packets++;
+ 			c_can_inval_msg_object(dev, 0, msg_obj_no);
++		} else {
++			break;
+ 		}
+ 	}
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0022-can-c_can-fix-an-interrupt-thrash-issue-with-c_can-d.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0022-can-c_can-fix-an-interrupt-thrash-issue-with-c_can-d.patch
new file mode 100644
index 0000000..34b220e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0022-can-c_can-fix-an-interrupt-thrash-issue-with-c_can-d.patch
@@ -0,0 +1,73 @@
+From b030affc0fa9283e4ee79a349f6b41d3217c0dc7 Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Wed, 23 May 2012 17:45:10 +0530
+Subject: [PATCH 22/67] can: c_can: fix an interrupt thrash issue with c_can
+ driver
+
+commit 148c87c89e1a8863d3d965179f3ab1a06490569e upstream.
+
+This patch fixes an interrupt thrash issue with c_can driver.
+
+In c_can_isr() function interrupts are disabled and enabled only in
+c_can_poll() function. c_can_isr() & c_can_poll() both read the
+irqstatus flag. However, irqstatus is always read as 0 in c_can_poll()
+because all C_CAN interrupts are disabled in c_can_isr(). This causes
+all interrupts to be re-enabled in c_can_poll() which in turn causes
+another interrupt since the event is not really handled. This keeps
+happening causing a flood of interrupts.
+
+To fix this, read the irqstatus register in isr and use the same cached
+value in the poll function.
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+Acked-by: Wolfgang Grandegger <wg@grandegger.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/can/c_can/c_can.c |    7 +++----
+ drivers/net/can/c_can/c_can.h |    1 +
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
+index 9ac28df..fa01621 100644
+--- a/drivers/net/can/c_can/c_can.c
++++ b/drivers/net/can/c_can/c_can.c
+@@ -952,7 +952,7 @@ static int c_can_poll(struct napi_struct *napi, int quota)
+ 	struct net_device *dev = napi->dev;
+ 	struct c_can_priv *priv = netdev_priv(dev);
+ 
+-	irqstatus = priv->read_reg(priv, &priv->regs->interrupt);
++	irqstatus = priv->irqstatus;
+ 	if (!irqstatus)
+ 		goto end;
+ 
+@@ -1030,12 +1030,11 @@ end:
+ 
+ static irqreturn_t c_can_isr(int irq, void *dev_id)
+ {
+-	u16 irqstatus;
+ 	struct net_device *dev = (struct net_device *)dev_id;
+ 	struct c_can_priv *priv = netdev_priv(dev);
+ 
+-	irqstatus = priv->read_reg(priv, &priv->regs->interrupt);
+-	if (!irqstatus)
++	priv->irqstatus = priv->read_reg(priv, &priv->regs->interrupt);
++	if (!priv->irqstatus)
+ 		return IRQ_NONE;
+ 
+ 	/* disable all interrupts and schedule the NAPI */
+diff --git a/drivers/net/can/c_can/c_can.h b/drivers/net/can/c_can/c_can.h
+index 9b7fbef..5f32d34 100644
+--- a/drivers/net/can/c_can/c_can.h
++++ b/drivers/net/can/c_can/c_can.h
+@@ -76,6 +76,7 @@ struct c_can_priv {
+ 	unsigned int tx_next;
+ 	unsigned int tx_echo;
+ 	void *priv;		/* for board-specific data */
++	u16 irqstatus;
+ };
+ 
+ struct net_device *alloc_c_can_dev(void);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0023-can-c_can-fix-race-condition-in-c_can_open.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0023-can-c_can-fix-race-condition-in-c_can_open.patch
new file mode 100644
index 0000000..8baf6c3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0023-can-c_can-fix-race-condition-in-c_can_open.patch
@@ -0,0 +1,47 @@
+From cf14ce22ab2b0faada7f120865c7970a07a0d06d Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Wed, 23 May 2012 17:45:11 +0530
+Subject: [PATCH 23/67] can: c_can: fix race condition in c_can_open()
+
+commit f461f27a4436dbe691908fe08b867ef888848cc3 upstream.
+
+Fix the issue of C_CAN interrupts getting disabled forever when canconfig
+utility is used multiple times. According to NAPI usage we disable all
+the hardware interrupts in ISR and re-enable them in poll(). Current
+implementation calls napi_enable() after hardware interrupts are enabled.
+If we get any interrupts between these two steps then we do not process
+those interrupts because napi is not enabled. Mostly these interrupts
+come because of STATUS is not 0x7 or ERROR interrupts. If napi_enable()
+happens before HW interrupts enabled then c_can_poll() function will be
+called eventual re-enabling.
+
+This patch moves the napi_enable() call before interrupts enabled.
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+Acked-by: Wolfgang Grandegger <wg@grandegger.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/can/c_can/c_can.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
+index fa01621..8dc84d6 100644
+--- a/drivers/net/can/c_can/c_can.c
++++ b/drivers/net/can/c_can/c_can.c
+@@ -1064,10 +1064,11 @@ static int c_can_open(struct net_device *dev)
+ 		goto exit_irq_fail;
+ 	}
+ 
++	napi_enable(&priv->napi);
++
+ 	/* start the c_can controller */
+ 	c_can_start(dev);
+ 
+-	napi_enable(&priv->napi);
+ 	netif_start_queue(dev);
+ 
+ 	return 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0024-ARM-i.MX53-Fix-PLL4-base-address.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0024-ARM-i.MX53-Fix-PLL4-base-address.patch
new file mode 100644
index 0000000..6714a86
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0024-ARM-i.MX53-Fix-PLL4-base-address.patch
@@ -0,0 +1,33 @@
+From 8b306e31b138a75a790c1f78f911714fee071ab8 Mon Sep 17 00:00:00 2001
+From: Sascha Hauer <s.hauer@pengutronix.de>
+Date: Mon, 4 Jun 2012 14:58:07 +0200
+Subject: [PATCH 24/67] ARM i.MX53: Fix PLL4 base address
+
+commit cdd781ab1906d039c2a93078385645d2d5af8491 upstream.
+
+MX53_DPLL4_BASE accidently returned the base address of PLL3.
+Fix this.
+
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+[bwh: Backported to 3.2: adjust filename]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/mach-mx5/crm_regs.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-mx5/crm_regs.h b/arch/arm/mach-mx5/crm_regs.h
+index 5e11ba7..5e3f1f0 100644
+--- a/arch/arm/mach-mx5/crm_regs.h
++++ b/arch/arm/mach-mx5/crm_regs.h
+@@ -23,7 +23,7 @@
+ #define MX53_DPLL1_BASE		MX53_IO_ADDRESS(MX53_PLL1_BASE_ADDR)
+ #define MX53_DPLL2_BASE		MX53_IO_ADDRESS(MX53_PLL2_BASE_ADDR)
+ #define MX53_DPLL3_BASE		MX53_IO_ADDRESS(MX53_PLL3_BASE_ADDR)
+-#define MX53_DPLL4_BASE		MX53_IO_ADDRESS(MX53_PLL3_BASE_ADDR)
++#define MX53_DPLL4_BASE		MX53_IO_ADDRESS(MX53_PLL4_BASE_ADDR)
+ 
+ /* PLL Register Offsets */
+ #define MXC_PLL_DP_CTL			0x00
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0025-usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0025-usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch
new file mode 100644
index 0000000..d7a896e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0025-usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch
@@ -0,0 +1,50 @@
+From cb8353a20faf8ec806f2e04848e1a8d2ba17194c Mon Sep 17 00:00:00 2001
+From: Grazvydas Ignotas <notasas@gmail.com>
+Date: Sat, 26 May 2012 00:21:33 +0300
+Subject: [PATCH 25/67] usb: musb_gadget: fix crash caused by dangling pointer
+
+commit 08f75bf14fadaa81fe362d5acda9b77b113dd0a2 upstream.
+
+usb_ep_ops.disable must clear external copy of the endpoint descriptor,
+otherwise musb crashes after loading/unloading several gadget modules
+in a row:
+
+Unable to handle kernel paging request at virtual address bf013730
+pgd = c0004000
+[bf013730] *pgd=8f26d811, *pte=00000000, *ppte=00000000
+Internal error: Oops: 7 [#1]
+Modules linked in: g_cdc [last unloaded: g_file_storage]
+CPU: 0    Not tainted  (3.2.17 #647)
+PC is at musb_gadget_enable+0x4c/0x24c
+LR is at _raw_spin_lock_irqsave+0x4c/0x58
+[<c027c030>] (musb_gadget_enable+0x4c/0x24c) from [<bf01b760>] (gether_connect+0x3c/0x19c [g_cdc])
+[<bf01b760>] (gether_connect+0x3c/0x19c [g_cdc]) from [<bf01ba1c>] (ecm_set_alt+0x15c/0x180 [g_cdc])
+[<bf01ba1c>] (ecm_set_alt+0x15c/0x180 [g_cdc]) from [<bf01ecd4>] (composite_setup+0x85c/0xac4 [g_cdc])
+[<bf01ecd4>] (composite_setup+0x85c/0xac4 [g_cdc]) from [<c027b744>] (musb_g_ep0_irq+0x844/0x924)
+[<c027b744>] (musb_g_ep0_irq+0x844/0x924) from [<c027a97c>] (musb_interrupt+0x79c/0x864)
+[<c027a97c>] (musb_interrupt+0x79c/0x864) from [<c027aaa8>] (generic_interrupt+0x64/0x7c)
+[<c027aaa8>] (generic_interrupt+0x64/0x7c) from [<c00797cc>] (handle_irq_event_percpu+0x28/0x178)
+...
+
+Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/musb/musb_gadget.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
+index 47349ca..28ea50c 100644
+--- a/drivers/usb/musb/musb_gadget.c
++++ b/drivers/usb/musb/musb_gadget.c
+@@ -1206,6 +1206,7 @@ static int musb_gadget_disable(struct usb_ep *ep)
+ 	}
+ 
+ 	musb_ep->desc = NULL;
++	musb_ep->end_point.desc = NULL;
+ 
+ 	/* abort all pending DMA and requests */
+ 	nuke(musb_ep, -ESHUTDOWN);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0026-mac80211-clean-up-remain-on-channel-on-interface-sto.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0026-mac80211-clean-up-remain-on-channel-on-interface-sto.patch
new file mode 100644
index 0000000..0829b27
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0026-mac80211-clean-up-remain-on-channel-on-interface-sto.patch
@@ -0,0 +1,80 @@
+From 7b2ac3203d120ea1afdf29bdcd5e99d59875e348 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Thu, 31 May 2012 15:09:27 +0200
+Subject: [PATCH 26/67] mac80211: clean up remain-on-channel on interface stop
+
+commit 71ecfa1893034eeb1c93e02e22ee2ad26d080858 upstream.
+
+When any interface goes down, it could be the one that we
+were doing a remain-on-channel with. We therefore need to
+cancel the remain-on-channel and flush the related work
+structs so they don't run after the interface has been
+removed or even destroyed.
+
+It's also possible in this case that an off-channel SKB
+was never transmitted, so free it if this is the case.
+Note that this can also happen if the driver finishes
+the off-channel period without ever starting it.
+
+Reported-by: Nirav Shah <nirav.j2.shah@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/mac80211/iface.c      |   12 ++++++++++++
+ net/mac80211/offchannel.c |   16 ++++++++++++++++
+ 2 files changed, 28 insertions(+)
+
+diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
+index 30d7355..f4ddf34 100644
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -495,6 +495,18 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+ 		ieee80211_configure_filter(local);
+ 		break;
+ 	default:
++		mutex_lock(&local->mtx);
++		if (local->hw_roc_dev == sdata->dev &&
++		    local->hw_roc_channel) {
++			/* ignore return value since this is racy */
++			drv_cancel_remain_on_channel(local);
++			ieee80211_queue_work(&local->hw, &local->hw_roc_done);
++		}
++		mutex_unlock(&local->mtx);
++
++		flush_work(&local->hw_roc_start);
++		flush_work(&local->hw_roc_done);
++
+ 		flush_work(&sdata->work);
+ 		/*
+ 		 * When we get here, the interface is marked down.
+diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
+index 1b239be..db2c215 100644
+--- a/net/mac80211/offchannel.c
++++ b/net/mac80211/offchannel.c
+@@ -246,6 +246,22 @@ static void ieee80211_hw_roc_done(struct work_struct *work)
+ 		return;
+ 	}
+ 
++	/* was never transmitted */
++	if (local->hw_roc_skb) {
++		u64 cookie;
++
++		cookie = local->hw_roc_cookie ^ 2;
++
++		cfg80211_mgmt_tx_status(local->hw_roc_dev, cookie,
++					local->hw_roc_skb->data,
++					local->hw_roc_skb->len, false,
++					GFP_KERNEL);
++
++		kfree_skb(local->hw_roc_skb);
++		local->hw_roc_skb = NULL;
++		local->hw_roc_skb_for_status = NULL;
++	}
++
+ 	if (!local->hw_roc_for_tx)
+ 		cfg80211_remain_on_channel_expired(local->hw_roc_dev,
+ 						   local->hw_roc_cookie,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0027-rt2x00-use-atomic-variable-for-seqno.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0027-rt2x00-use-atomic-variable-for-seqno.patch
new file mode 100644
index 0000000..892b6c2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0027-rt2x00-use-atomic-variable-for-seqno.patch
@@ -0,0 +1,174 @@
+From da83f4fb1b871f4b4398362b12ca03b82b223a2e Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Fri, 1 Jun 2012 11:29:40 +0200
+Subject: [PATCH 27/67] rt2x00: use atomic variable for seqno
+
+commit e5851dac2c95af7159716832300b9f50c62c648e upstream.
+
+Remove spinlock as atomic_t can be used instead. Note we use only 16
+lower bits, upper bits are changed but we impilcilty cast to u16.
+
+This fix possible deadlock on IBSS mode reproted by lockdep:
+
+=================================
+[ INFO: inconsistent lock state ]
+3.4.0-wl+ #4 Not tainted
+---------------------------------
+inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
+kworker/u:2/30374 [HC0[0]:SC0[0]:HE1:SE1] takes:
+ (&(&intf->seqlock)->rlock){+.?...}, at: [<f9979a20>] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+{IN-SOFTIRQ-W} state was registered at:
+  [<c04978ab>] __lock_acquire+0x47b/0x1050
+  [<c0498504>] lock_acquire+0x84/0xf0
+  [<c0835733>] _raw_spin_lock+0x33/0x40
+  [<f9979a20>] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+  [<f9979f2a>] rt2x00queue_write_tx_frame+0x1a/0x300 [rt2x00lib]
+  [<f997834f>] rt2x00mac_tx+0x7f/0x380 [rt2x00lib]
+  [<f98fe363>] __ieee80211_tx+0x1b3/0x300 [mac80211]
+  [<f98ffdf5>] ieee80211_tx+0x105/0x130 [mac80211]
+  [<f99000dd>] ieee80211_xmit+0xad/0x100 [mac80211]
+  [<f9900519>] ieee80211_subif_start_xmit+0x2d9/0x930 [mac80211]
+  [<c0782e87>] dev_hard_start_xmit+0x307/0x660
+  [<c079bb71>] sch_direct_xmit+0xa1/0x1e0
+  [<c0784bb3>] dev_queue_xmit+0x183/0x730
+  [<c078c27a>] neigh_resolve_output+0xfa/0x1e0
+  [<c07b436a>] ip_finish_output+0x24a/0x460
+  [<c07b4897>] ip_output+0xb7/0x100
+  [<c07b2d60>] ip_local_out+0x20/0x60
+  [<c07e01ff>] igmpv3_sendpack+0x4f/0x60
+  [<c07e108f>] igmp_ifc_timer_expire+0x29f/0x330
+  [<c04520fc>] run_timer_softirq+0x15c/0x2f0
+  [<c0449e3e>] __do_softirq+0xae/0x1e0
+irq event stamp: 18380437
+hardirqs last  enabled at (18380437): [<c0526027>] __slab_alloc.clone.3+0x67/0x5f0
+hardirqs last disabled at (18380436): [<c0525ff3>] __slab_alloc.clone.3+0x33/0x5f0
+softirqs last  enabled at (18377616): [<c0449eb3>] __do_softirq+0x123/0x1e0
+softirqs last disabled at (18377611): [<c041278d>] do_softirq+0x9d/0xe0
+
+other info that might help us debug this:
+ Possible unsafe locking scenario:
+
+       CPU0
+       ----
+  lock(&(&intf->seqlock)->rlock);
+  <Interrupt>
+    lock(&(&intf->seqlock)->rlock);
+
+ *** DEADLOCK ***
+
+4 locks held by kworker/u:2/30374:
+ #0:  (wiphy_name(local->hw.wiphy)){++++.+}, at: [<c045cf99>] process_one_work+0x109/0x3f0
+ #1:  ((&sdata->work)){+.+.+.}, at: [<c045cf99>] process_one_work+0x109/0x3f0
+ #2:  (&ifibss->mtx){+.+.+.}, at: [<f98f005b>] ieee80211_ibss_work+0x1b/0x470 [mac80211]
+ #3:  (&intf->beacon_skb_mutex){+.+...}, at: [<f997a644>] rt2x00queue_update_beacon+0x24/0x50 [rt2x00lib]
+
+stack backtrace:
+Pid: 30374, comm: kworker/u:2 Not tainted 3.4.0-wl+ #4
+Call Trace:
+ [<c04962a6>] print_usage_bug+0x1f6/0x220
+ [<c0496a12>] mark_lock+0x2c2/0x300
+ [<c0495ff0>] ? check_usage_forwards+0xc0/0xc0
+ [<c04978ec>] __lock_acquire+0x4bc/0x1050
+ [<c0527890>] ? __kmalloc_track_caller+0x1c0/0x1d0
+ [<c0777fb6>] ? copy_skb_header+0x26/0x90
+ [<c0498504>] lock_acquire+0x84/0xf0
+ [<f9979a20>] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+ [<c0835733>] _raw_spin_lock+0x33/0x40
+ [<f9979a20>] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+ [<f9979a20>] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
+ [<f997a5cf>] rt2x00queue_update_beacon_locked+0x5f/0xb0 [rt2x00lib]
+ [<f997a64d>] rt2x00queue_update_beacon+0x2d/0x50 [rt2x00lib]
+ [<f9977e3a>] rt2x00mac_bss_info_changed+0x1ca/0x200 [rt2x00lib]
+ [<f9977c70>] ? rt2x00mac_remove_interface+0x70/0x70 [rt2x00lib]
+ [<f98e4dd0>] ieee80211_bss_info_change_notify+0xe0/0x1d0 [mac80211]
+ [<f98ef7b8>] __ieee80211_sta_join_ibss+0x3b8/0x610 [mac80211]
+ [<c0496ab4>] ? mark_held_locks+0x64/0xc0
+ [<c0440012>] ? virt_efi_query_capsule_caps+0x12/0x50
+ [<f98efb09>] ieee80211_sta_join_ibss+0xf9/0x140 [mac80211]
+ [<f98f0456>] ieee80211_ibss_work+0x416/0x470 [mac80211]
+ [<c0496d8b>] ? trace_hardirqs_on+0xb/0x10
+ [<c077683b>] ? skb_dequeue+0x4b/0x70
+ [<f98f207f>] ieee80211_iface_work+0x13f/0x230 [mac80211]
+ [<c045cf99>] ? process_one_work+0x109/0x3f0
+ [<c045d015>] process_one_work+0x185/0x3f0
+ [<c045cf99>] ? process_one_work+0x109/0x3f0
+ [<f98f1f40>] ? ieee80211_teardown_sdata+0xa0/0xa0 [mac80211]
+ [<c045ed86>] worker_thread+0x116/0x270
+ [<c045ec70>] ? manage_workers+0x1e0/0x1e0
+ [<c0462f64>] kthread+0x84/0x90
+ [<c0462ee0>] ? __init_kthread_worker+0x60/0x60
+ [<c083d382>] kernel_thread_helper+0x6/0x10
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
+Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/rt2x00/rt2x00.h      |    3 +--
+ drivers/net/wireless/rt2x00/rt2x00mac.c   |    1 -
+ drivers/net/wireless/rt2x00/rt2x00queue.c |   13 ++++++-------
+ 3 files changed, 7 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
+index 99ff12d..c778164 100644
+--- a/drivers/net/wireless/rt2x00/rt2x00.h
++++ b/drivers/net/wireless/rt2x00/rt2x00.h
+@@ -390,8 +390,7 @@ struct rt2x00_intf {
+ 	 * for hardware which doesn't support hardware
+ 	 * sequence counting.
+ 	 */
+-	spinlock_t seqlock;
+-	u16 seqno;
++	atomic_t seqno;
+ };
+ 
+ static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
+diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c
+index 373dae1..921da9a 100644
+--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
++++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
+@@ -277,7 +277,6 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw,
+ 	else
+ 		rt2x00dev->intf_sta_count++;
+ 
+-	spin_lock_init(&intf->seqlock);
+ 	mutex_init(&intf->beacon_skb_mutex);
+ 	intf->beacon = entry;
+ 
+diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
+index 9b1b2b7..50f92d5 100644
+--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
++++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
+@@ -207,6 +207,7 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev,
+ 	struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
+ 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+ 	struct rt2x00_intf *intf = vif_to_intf(tx_info->control.vif);
++	u16 seqno;
+ 
+ 	if (!(tx_info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ))
+ 		return;
+@@ -227,15 +228,13 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev,
+ 	 * sequence counting per-frame, since those will override the
+ 	 * sequence counter given by mac80211.
+ 	 */
+-	spin_lock(&intf->seqlock);
+-
+ 	if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))
+-		intf->seqno += 0x10;
+-	hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
+-	hdr->seq_ctrl |= cpu_to_le16(intf->seqno);
+-
+-	spin_unlock(&intf->seqlock);
++		seqno = atomic_add_return(0x10, &intf->seqno);
++	else
++		seqno = atomic_read(&intf->seqno);
+ 
++	hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
++	hdr->seq_ctrl |= cpu_to_le16(seqno);
+ }
+ 
+ static void rt2x00queue_create_tx_descriptor_plcp(struct rt2x00_dev *rt2x00dev,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0028-iwlwifi-disable-WoWLAN-if-CONFIG_PM_SLEEP.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0028-iwlwifi-disable-WoWLAN-if-CONFIG_PM_SLEEP.patch
new file mode 100644
index 0000000..2902592
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0028-iwlwifi-disable-WoWLAN-if-CONFIG_PM_SLEEP.patch
@@ -0,0 +1,44 @@
+From 17276afbec2e85771fb30bc2ea9150e4d75ccc89 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Mon, 4 Jun 2012 13:43:11 +0200
+Subject: [PATCH 28/67] iwlwifi: disable WoWLAN if !CONFIG_PM_SLEEP
+
+commit fcb6ff5e2cb83e1de10631f6621f45ca3401bf61 upstream.
+
+If CONFIG_PM_SLEEP is disabled, then iwlwifi doesn't
+support suspend/resume handlers and thus mac80211
+(correctly) refuses advertising WoWLAN. Disable
+WoWLAN in the driver in this case.
+
+Reported-by: Sebastian Kemper <sebastian_ml@gmx.net>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2: adjust filename, context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
+index d7d2512..8b88e87 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -1696,6 +1696,7 @@ static int iwlagn_mac_setup_register(struct iwl_priv *priv,
+ 			    WIPHY_FLAG_DISABLE_BEACON_HINTS |
+ 			    WIPHY_FLAG_IBSS_RSN;
+ 
++#ifdef CONFIG_PM_SLEEP
+ 	if (priv->ucode_wowlan.code.len && device_can_wakeup(bus(priv)->dev)) {
+ 		hw->wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT |
+ 					  WIPHY_WOWLAN_DISCONNECT |
+@@ -1712,6 +1713,7 @@ static int iwlagn_mac_setup_register(struct iwl_priv *priv,
+ 		hw->wiphy->wowlan.pattern_max_len =
+ 					IWLAGN_WOWLAN_MAX_PATTERN_LEN;
+ 	}
++#endif
+ 
+ 	if (iwlagn_mod_params.power_save)
+ 		hw->wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0029-ASoC-wm8994-Ensure-all-AIFnCLK-events-are-run-from-t.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0029-ASoC-wm8994-Ensure-all-AIFnCLK-events-are-run-from-t.patch
new file mode 100644
index 0000000..4b600f2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0029-ASoC-wm8994-Ensure-all-AIFnCLK-events-are-run-from-t.patch
@@ -0,0 +1,66 @@
+From d3ca90f12aa66e72ccb2e1674664d498971f0d77 Mon Sep 17 00:00:00 2001
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Date: Tue, 5 Jun 2012 12:25:19 +0100
+Subject: [PATCH 29/67] ASoC: wm8994: Ensure all AIFnCLK events are run from
+ the _late variants
+
+commit c8fdc1b56611faa7b38eab6b99da5e20113661ff upstream.
+
+Ensure that all the actions get taken at appropriate times by calling the
+_PRE and _POST events for the aifNclk_ev functions explicitly.
+
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/soc/codecs/wm8994.c |   12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
+index 3e7aa22..3de9c6a 100644
+--- a/sound/soc/codecs/wm8994.c
++++ b/sound/soc/codecs/wm8994.c
+@@ -1090,17 +1090,19 @@ static int late_enable_ev(struct snd_soc_dapm_widget *w,
+ 	switch (event) {
+ 	case SND_SOC_DAPM_PRE_PMU:
+ 		if (wm8994->aif1clk_enable) {
+-			aif1clk_ev(w, kcontrol, event);
++			aif1clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMU);
+ 			snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
+ 					    WM8994_AIF1CLK_ENA_MASK,
+ 					    WM8994_AIF1CLK_ENA);
++			aif1clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMU);
+ 			wm8994->aif1clk_enable = 0;
+ 		}
+ 		if (wm8994->aif2clk_enable) {
+-			aif2clk_ev(w, kcontrol, event);
++			aif2clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMU);
+ 			snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
+ 					    WM8994_AIF2CLK_ENA_MASK,
+ 					    WM8994_AIF2CLK_ENA);
++			aif2clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMU);
+ 			wm8994->aif2clk_enable = 0;
+ 		}
+ 		break;
+@@ -1121,15 +1123,17 @@ static int late_disable_ev(struct snd_soc_dapm_widget *w,
+ 	switch (event) {
+ 	case SND_SOC_DAPM_POST_PMD:
+ 		if (wm8994->aif1clk_disable) {
++			aif1clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMD);
+ 			snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
+ 					    WM8994_AIF1CLK_ENA_MASK, 0);
+-			aif1clk_ev(w, kcontrol, event);
++			aif1clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMD);
+ 			wm8994->aif1clk_disable = 0;
+ 		}
+ 		if (wm8994->aif2clk_disable) {
++			aif2clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMD);
+ 			snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
+ 					    WM8994_AIF2CLK_ENA_MASK, 0);
+-			aif2clk_ev(w, kcontrol, event);
++			aif2clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMD);
+ 			wm8994->aif2clk_disable = 0;
+ 		}
+ 		break;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0030-ASoC-wm8994-Apply-volume-updates-with-clocks-enabled.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0030-ASoC-wm8994-Apply-volume-updates-with-clocks-enabled.patch
new file mode 100644
index 0000000..5d536db
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0030-ASoC-wm8994-Apply-volume-updates-with-clocks-enabled.patch
@@ -0,0 +1,170 @@
+From 35621bc53d008a89c20278c6bf5e049addcd4cd1 Mon Sep 17 00:00:00 2001
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Date: Tue, 5 Jun 2012 12:31:32 +0100
+Subject: [PATCH 30/67] ASoC: wm8994: Apply volume updates with clocks enabled
+
+commit bfd37bb5f681961e255fd2f346c20fdae2ef3f27 upstream.
+
+Volume updates may not be acted upon if there is no clock applied when
+the volume update is written. Ensure this doesn't happen by writing out
+registers with volume updates after we enable each of the clocks.
+
+There are more registers updated than before as previously we were
+relying on wm_hubs to set those for controls it manages.
+
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/soc/codecs/wm8994.c |   93 ++++++++++++++++++++++++++++-----------------
+ 1 file changed, 58 insertions(+), 35 deletions(-)
+
+diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
+index 3de9c6a..de61b8a 100644
+--- a/sound/soc/codecs/wm8994.c
++++ b/sound/soc/codecs/wm8994.c
+@@ -41,6 +41,39 @@
+ #define WM8994_NUM_DRC 3
+ #define WM8994_NUM_EQ  3
+ 
++static struct {
++	unsigned int reg;
++	unsigned int mask;
++} wm8994_vu_bits[] = {
++	{ WM8994_LEFT_LINE_INPUT_1_2_VOLUME, WM8994_IN1_VU },
++	{ WM8994_RIGHT_LINE_INPUT_1_2_VOLUME, WM8994_IN1_VU },
++	{ WM8994_LEFT_LINE_INPUT_3_4_VOLUME, WM8994_IN2_VU },
++	{ WM8994_RIGHT_LINE_INPUT_3_4_VOLUME, WM8994_IN2_VU },
++	{ WM8994_SPEAKER_VOLUME_LEFT, WM8994_SPKOUT_VU },
++	{ WM8994_SPEAKER_VOLUME_RIGHT, WM8994_SPKOUT_VU },
++	{ WM8994_LEFT_OUTPUT_VOLUME, WM8994_HPOUT1_VU },
++	{ WM8994_RIGHT_OUTPUT_VOLUME, WM8994_HPOUT1_VU },
++	{ WM8994_LEFT_OPGA_VOLUME, WM8994_MIXOUT_VU },
++	{ WM8994_RIGHT_OPGA_VOLUME, WM8994_MIXOUT_VU },
++
++	{ WM8994_AIF1_DAC1_LEFT_VOLUME, WM8994_AIF1DAC1_VU },
++	{ WM8994_AIF1_DAC1_RIGHT_VOLUME, WM8994_AIF1DAC1_VU },
++	{ WM8994_AIF1_DAC2_LEFT_VOLUME, WM8994_AIF1DAC2_VU },
++	{ WM8994_AIF1_DAC2_RIGHT_VOLUME, WM8994_AIF1DAC2_VU },
++	{ WM8994_AIF2_DAC_LEFT_VOLUME, WM8994_AIF2DAC_VU },
++	{ WM8994_AIF2_DAC_RIGHT_VOLUME, WM8994_AIF2DAC_VU },
++	{ WM8994_AIF1_ADC1_LEFT_VOLUME, WM8994_AIF1ADC1_VU },
++	{ WM8994_AIF1_ADC1_RIGHT_VOLUME, WM8994_AIF1ADC1_VU },
++	{ WM8994_AIF1_ADC2_LEFT_VOLUME, WM8994_AIF1ADC2_VU },
++	{ WM8994_AIF1_ADC2_RIGHT_VOLUME, WM8994_AIF1ADC2_VU },
++	{ WM8994_AIF2_ADC_LEFT_VOLUME, WM8994_AIF2ADC_VU },
++	{ WM8994_AIF2_ADC_RIGHT_VOLUME, WM8994_AIF1ADC2_VU },
++	{ WM8994_DAC1_LEFT_VOLUME, WM8994_DAC1_VU },
++	{ WM8994_DAC1_RIGHT_VOLUME, WM8994_DAC1_VU },
++	{ WM8994_DAC2_LEFT_VOLUME, WM8994_DAC2_VU },
++	{ WM8994_DAC2_RIGHT_VOLUME, WM8994_DAC2_VU },
++};
++
+ static int wm8994_drc_base[] = {
+ 	WM8994_AIF1_DRC1_1,
+ 	WM8994_AIF1_DRC2_1,
+@@ -889,6 +922,7 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w,
+ 	struct snd_soc_codec *codec = w->codec;
+ 	struct wm8994 *control = codec->control_data;
+ 	int mask = WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA;
++	int i;
+ 	int dac;
+ 	int adc;
+ 	int val;
+@@ -947,6 +981,13 @@ static int aif1clk_ev(struct snd_soc_dapm_widget *w,
+ 				    WM8994_AIF1DAC2L_ENA);
+ 		break;
+ 
++	case SND_SOC_DAPM_POST_PMU:
++		for (i = 0; i < ARRAY_SIZE(wm8994_vu_bits); i++)
++			snd_soc_write(codec, wm8994_vu_bits[i].reg,
++				      snd_soc_read(codec,
++						   wm8994_vu_bits[i].reg));
++		break;
++
+ 	case SND_SOC_DAPM_PRE_PMD:
+ 	case SND_SOC_DAPM_POST_PMD:
+ 		snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
+@@ -972,6 +1013,7 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w,
+ 		      struct snd_kcontrol *kcontrol, int event)
+ {
+ 	struct snd_soc_codec *codec = w->codec;
++	int i;
+ 	int dac;
+ 	int adc;
+ 	int val;
+@@ -1022,6 +1064,13 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w,
+ 				    WM8994_AIF2DACR_ENA);
+ 		break;
+ 
++	case SND_SOC_DAPM_POST_PMU:
++		for (i = 0; i < ARRAY_SIZE(wm8994_vu_bits); i++)
++			snd_soc_write(codec, wm8994_vu_bits[i].reg,
++				      snd_soc_read(codec,
++						   wm8994_vu_bits[i].reg));
++		break;
++
+ 	case SND_SOC_DAPM_PRE_PMD:
+ 	case SND_SOC_DAPM_POST_PMD:
+ 		snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
+@@ -1470,9 +1519,11 @@ SND_SOC_DAPM_POST("Late Disable PGA", late_disable_ev)
+ 
+ static const struct snd_soc_dapm_widget wm8994_lateclk_widgets[] = {
+ SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, aif1clk_ev,
+-		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
++		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
++		    SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, aif2clk_ev,
+-		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
++		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
++		    SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_PGA("Direct Voice", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_MIXER("SPKL", WM8994_POWER_MANAGEMENT_3, 8, 0,
+ 		   left_speaker_mixer, ARRAY_SIZE(left_speaker_mixer)),
+@@ -3486,39 +3537,11 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
+ 
+ 	wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+ 
+-	/* Latch volume updates (right only; we always do left then right). */
+-	snd_soc_update_bits(codec, WM8994_AIF1_DAC1_LEFT_VOLUME,
+-			    WM8994_AIF1DAC1_VU, WM8994_AIF1DAC1_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF1_DAC1_RIGHT_VOLUME,
+-			    WM8994_AIF1DAC1_VU, WM8994_AIF1DAC1_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF1_DAC2_LEFT_VOLUME,
+-			    WM8994_AIF1DAC2_VU, WM8994_AIF1DAC2_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF1_DAC2_RIGHT_VOLUME,
+-			    WM8994_AIF1DAC2_VU, WM8994_AIF1DAC2_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF2_DAC_LEFT_VOLUME,
+-			    WM8994_AIF2DAC_VU, WM8994_AIF2DAC_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF2_DAC_RIGHT_VOLUME,
+-			    WM8994_AIF2DAC_VU, WM8994_AIF2DAC_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF1_ADC1_LEFT_VOLUME,
+-			    WM8994_AIF1ADC1_VU, WM8994_AIF1ADC1_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF1_ADC1_RIGHT_VOLUME,
+-			    WM8994_AIF1ADC1_VU, WM8994_AIF1ADC1_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF1_ADC2_LEFT_VOLUME,
+-			    WM8994_AIF1ADC2_VU, WM8994_AIF1ADC2_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF1_ADC2_RIGHT_VOLUME,
+-			    WM8994_AIF1ADC2_VU, WM8994_AIF1ADC2_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF2_ADC_LEFT_VOLUME,
+-			    WM8994_AIF2ADC_VU, WM8994_AIF1ADC2_VU);
+-	snd_soc_update_bits(codec, WM8994_AIF2_ADC_RIGHT_VOLUME,
+-			    WM8994_AIF2ADC_VU, WM8994_AIF1ADC2_VU);
+-	snd_soc_update_bits(codec, WM8994_DAC1_LEFT_VOLUME,
+-			    WM8994_DAC1_VU, WM8994_DAC1_VU);
+-	snd_soc_update_bits(codec, WM8994_DAC1_RIGHT_VOLUME,
+-			    WM8994_DAC1_VU, WM8994_DAC1_VU);
+-	snd_soc_update_bits(codec, WM8994_DAC2_LEFT_VOLUME,
+-			    WM8994_DAC2_VU, WM8994_DAC2_VU);
+-	snd_soc_update_bits(codec, WM8994_DAC2_RIGHT_VOLUME,
+-			    WM8994_DAC2_VU, WM8994_DAC2_VU);
++	/* Latch volume update bits */
++	for (i = 0; i < ARRAY_SIZE(wm8994_vu_bits); i++)
++		snd_soc_update_bits(codec, wm8994_vu_bits[i].reg,
++				    wm8994_vu_bits[i].mask,
++				    wm8994_vu_bits[i].mask);
+ 
+ 	/* Set the low bit of the 3D stereo depth so TLV matches */
+ 	snd_soc_update_bits(codec, WM8994_AIF1_DAC1_FILTERS_2,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0031-iwlwifi-unregister-LEDs-if-mac80211-registration-fai.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0031-iwlwifi-unregister-LEDs-if-mac80211-registration-fai.patch
new file mode 100644
index 0000000..51d633b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0031-iwlwifi-unregister-LEDs-if-mac80211-registration-fai.patch
@@ -0,0 +1,35 @@
+From 95f7667f3af2005c125446c8a5d59f60a4d05ad7 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Tue, 5 Jun 2012 09:38:35 +0200
+Subject: [PATCH 31/67] iwlwifi: unregister LEDs if mac80211 registration
+ fails
+
+commit 0e1fa7ef25004b9c1a14147bce61c15c2f1c6744 upstream.
+
+Otherwise the LEDs stick around and cause issues the
+next time around since they're still there but not
+really hooked up.
+
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2: adjust filename]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-agn.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
+index 8b88e87..16cdd12 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -1741,6 +1741,7 @@ static int iwlagn_mac_setup_register(struct iwl_priv *priv,
+ 	ret = ieee80211_register_hw(priv->hw);
+ 	if (ret) {
+ 		IWL_ERR(priv, "Failed to register hw (error %d)\n", ret);
++		iwl_leds_exit(priv);
+ 		return ret;
+ 	}
+ 	priv->mac80211_registered = 1;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0032-cfg80211-fix-interface-combinations-check.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0032-cfg80211-fix-interface-combinations-check.patch
new file mode 100644
index 0000000..fd32445
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0032-cfg80211-fix-interface-combinations-check.patch
@@ -0,0 +1,81 @@
+From 5b6e7b80e2a121632158da46a21f6be9d561ce8c Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Tue, 5 Jun 2012 12:16:50 +0200
+Subject: [PATCH 32/67] cfg80211: fix interface combinations check
+
+commit 463454b5dbd8dbab6e2fc6c557329e5b811b9c32 upstream.
+
+If a given interface combination doesn't contain
+a required interface type then we missed checking
+that and erroneously allowed it even though iface
+type wasn't there at all. Add a check that makes
+sure that all interface types are accounted for.
+
+Reported-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/wireless/util.c |   19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/net/wireless/util.c b/net/wireless/util.c
+index 8bf8902..d38815d 100644
+--- a/net/wireless/util.c
++++ b/net/wireless/util.c
+@@ -943,6 +943,7 @@ int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev,
+ 				  enum nl80211_iftype iftype)
+ {
+ 	struct wireless_dev *wdev_iter;
++	u32 used_iftypes = BIT(iftype);
+ 	int num[NUM_NL80211_IFTYPES];
+ 	int total = 1;
+ 	int i, j;
+@@ -976,12 +977,14 @@ int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev,
+ 
+ 		num[wdev_iter->iftype]++;
+ 		total++;
++		used_iftypes |= BIT(wdev_iter->iftype);
+ 	}
+ 	mutex_unlock(&rdev->devlist_mtx);
+ 
+ 	for (i = 0; i < rdev->wiphy.n_iface_combinations; i++) {
+ 		const struct ieee80211_iface_combination *c;
+ 		struct ieee80211_iface_limit *limits;
++		u32 all_iftypes = 0;
+ 
+ 		c = &rdev->wiphy.iface_combinations[i];
+ 
+@@ -996,6 +999,7 @@ int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev,
+ 			if (rdev->wiphy.software_iftypes & BIT(iftype))
+ 				continue;
+ 			for (j = 0; j < c->n_limits; j++) {
++				all_iftypes |= limits[j].types;
+ 				if (!(limits[j].types & BIT(iftype)))
+ 					continue;
+ 				if (limits[j].max < num[iftype])
+@@ -1003,7 +1007,20 @@ int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev,
+ 				limits[j].max -= num[iftype];
+ 			}
+ 		}
+-		/* yay, it fits */
++
++		/*
++		 * Finally check that all iftypes that we're currently
++		 * using are actually part of this combination. If they
++		 * aren't then we can't use this combination and have
++		 * to continue to the next.
++		 */
++		if ((all_iftypes & used_iftypes) != used_iftypes)
++			goto cont;
++
++		/*
++		 * This combination covered all interface types and
++		 * supported the requested numbers, so we're good.
++		 */
+ 		kfree(limits);
+ 		return 0;
+  cont:
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0033-mpt2sas-Fix-unsafe-using-smp_processor_id-in-preempt.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0033-mpt2sas-Fix-unsafe-using-smp_processor_id-in-preempt.patch
new file mode 100644
index 0000000..d51719d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0033-mpt2sas-Fix-unsafe-using-smp_processor_id-in-preempt.patch
@@ -0,0 +1,36 @@
+From 3c997939218ed3d4fec3441eaea74d04392d2007 Mon Sep 17 00:00:00 2001
+From: "nagalakshmi.nandigama@lsi.com" <nagalakshmi.nandigama@lsi.com>
+Date: Tue, 17 Apr 2012 11:25:04 +0530
+Subject: [PATCH 33/67] mpt2sas: Fix unsafe using smp_processor_id() in
+ preemptible
+
+commit a2c658505bf5c75516ee0a79287223e86a2474af upstream.
+
+When CONFIG_DEBUG_PREEMPT is enabled, bug is observed in the smp_processor_id().
+This is because smp_processor_id() is not called in preempt safe condition.
+
+To fix this issue, use raw_smp_processor_id instead of smp_processor_id.
+
+Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@lsi.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/scsi/mpt2sas/mpt2sas_base.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
+index ac336e1..e903077 100644
+--- a/drivers/scsi/mpt2sas/mpt2sas_base.c
++++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
+@@ -1739,7 +1739,7 @@ static inline void _base_writeq(__u64 b, volatile void __iomem *addr,
+ static inline u8
+ _base_get_msix_index(struct MPT2SAS_ADAPTER *ioc)
+ {
+-	return ioc->cpu_msix_table[smp_processor_id()];
++	return ioc->cpu_msix_table[raw_smp_processor_id()];
+ }
+ 
+ /**
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0034-net-sierra_net-device-IDs-for-Aircard-320U.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0034-net-sierra_net-device-IDs-for-Aircard-320U.patch
new file mode 100644
index 0000000..797282b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0034-net-sierra_net-device-IDs-for-Aircard-320U.patch
@@ -0,0 +1,70 @@
+From a6d6029227b3b65257a974953df957d28ea190e7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Tue, 5 Jun 2012 21:18:10 +0000
+Subject: [PATCH 34/67] net: sierra_net: device IDs for Aircard 320U++
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit dd03cff23d694cfb0fdae80cb618e7ced05ea696 upstream.
+
+Adding device IDs for Aircard 320U and two other devices
+found in the out-of-tree version of this driver.
+
+Cc: linux@sierrawireless.com
+Cc: Autif Khan <autif.mlist@gmail.com>
+Cc: Tom Cassidy <tomas.cassidy@gmail.com>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/usb/sierra_net.c |   14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/usb/sierra_net.c b/drivers/net/usb/sierra_net.c
+index ed1b432..864448b 100644
+--- a/drivers/net/usb/sierra_net.c
++++ b/drivers/net/usb/sierra_net.c
+@@ -943,7 +943,7 @@ struct sk_buff *sierra_net_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
+ }
+ 
+ static const u8 sierra_net_ifnum_list[] = { 7, 10, 11 };
+-static const struct sierra_net_info_data sierra_net_info_data_68A3 = {
++static const struct sierra_net_info_data sierra_net_info_data_direct_ip = {
+ 	.rx_urb_size = 8 * 1024,
+ 	.whitelist = {
+ 		.infolen = ARRAY_SIZE(sierra_net_ifnum_list),
+@@ -951,7 +951,7 @@ static const struct sierra_net_info_data sierra_net_info_data_68A3 = {
+ 	}
+ };
+ 
+-static const struct driver_info sierra_net_info_68A3 = {
++static const struct driver_info sierra_net_info_direct_ip = {
+ 	.description = "Sierra Wireless USB-to-WWAN Modem",
+ 	.flags = FLAG_WWAN | FLAG_SEND_ZLP,
+ 	.bind = sierra_net_bind,
+@@ -959,12 +959,18 @@ static const struct driver_info sierra_net_info_68A3 = {
+ 	.status = sierra_net_status,
+ 	.rx_fixup = sierra_net_rx_fixup,
+ 	.tx_fixup = sierra_net_tx_fixup,
+-	.data = (unsigned long)&sierra_net_info_data_68A3,
++	.data = (unsigned long)&sierra_net_info_data_direct_ip,
+ };
+ 
+ static const struct usb_device_id products[] = {
+ 	{USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless USB-to-WWAN modem */
+-	.driver_info = (unsigned long) &sierra_net_info_68A3},
++	.driver_info = (unsigned long) &sierra_net_info_direct_ip},
++	{USB_DEVICE(0x0F3D, 0x68A3), /* AT&T Direct IP modem */
++	.driver_info = (unsigned long) &sierra_net_info_direct_ip},
++	{USB_DEVICE(0x1199, 0x68AA), /* Sierra Wireless Direct IP LTE modem */
++	.driver_info = (unsigned long) &sierra_net_info_direct_ip},
++	{USB_DEVICE(0x0F3D, 0x68AA), /* AT&T Direct IP LTE modem */
++	.driver_info = (unsigned long) &sierra_net_info_direct_ip},
+ 
+ 	{}, /* last item */
+ };
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0035-ARM-imx6-exit-coherency-when-shutting-down-a-cpu.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0035-ARM-imx6-exit-coherency-when-shutting-down-a-cpu.patch
new file mode 100644
index 0000000..e14a5f3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0035-ARM-imx6-exit-coherency-when-shutting-down-a-cpu.patch
@@ -0,0 +1,98 @@
+From 863d8967cf0028dc6f7ca98d88f4e93045ec143e Mon Sep 17 00:00:00 2001
+From: Shawn Guo <shawn.guo@linaro.org>
+Date: Tue, 22 May 2012 22:13:46 +0800
+Subject: [PATCH 35/67] ARM: imx6: exit coherency when shutting down a cpu
+
+commit 602bf40971d7f9a1ec0b7ba2b7e6427849828651 upstream.
+
+There is a system hang issue on imx6q which can easily be seen with
+running a cpu hotplug stress testing (hotplug secondary cores from
+user space via sysfs interface for thousands iterations).
+
+It turns out that the issue is caused by coherency of the cpu that
+is being shut down.  When shutting down a cpu, we need to have the
+cpu exit coherency to prevent it from receiving cache, TLB, or BTB
+maintenance operations broadcast by other CPUs in the cluster.
+
+Copy cpu_enter_lowpower() and cpu_leave_lowpower() from mach-vexpress
+to have coherency properly handled in platform_cpu_die(), thus fix
+the issue.
+
+Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/mach-imx/hotplug.c |   42 +++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 41 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c
+index 89493ab..20ed2d5 100644
+--- a/arch/arm/mach-imx/hotplug.c
++++ b/arch/arm/mach-imx/hotplug.c
+@@ -12,6 +12,7 @@
+ 
+ #include <linux/errno.h>
+ #include <asm/cacheflush.h>
++#include <asm/cp15.h>
+ #include <mach/common.h>
+ 
+ int platform_cpu_kill(unsigned int cpu)
+@@ -19,6 +20,44 @@ int platform_cpu_kill(unsigned int cpu)
+ 	return 1;
+ }
+ 
++static inline void cpu_enter_lowpower(void)
++{
++	unsigned int v;
++
++	flush_cache_all();
++	asm volatile(
++		"mcr	p15, 0, %1, c7, c5, 0\n"
++	"	mcr	p15, 0, %1, c7, c10, 4\n"
++	/*
++	 * Turn off coherency
++	 */
++	"	mrc	p15, 0, %0, c1, c0, 1\n"
++	"	bic	%0, %0, %3\n"
++	"	mcr	p15, 0, %0, c1, c0, 1\n"
++	"	mrc	p15, 0, %0, c1, c0, 0\n"
++	"	bic	%0, %0, %2\n"
++	"	mcr	p15, 0, %0, c1, c0, 0\n"
++	  : "=&r" (v)
++	  : "r" (0), "Ir" (CR_C), "Ir" (0x40)
++	  : "cc");
++}
++
++static inline void cpu_leave_lowpower(void)
++{
++	unsigned int v;
++
++	asm volatile(
++		"mrc	p15, 0, %0, c1, c0, 0\n"
++	"	orr	%0, %0, %1\n"
++	"	mcr	p15, 0, %0, c1, c0, 0\n"
++	"	mrc	p15, 0, %0, c1, c0, 1\n"
++	"	orr	%0, %0, %2\n"
++	"	mcr	p15, 0, %0, c1, c0, 1\n"
++	  : "=&r" (v)
++	  : "Ir" (CR_C), "Ir" (0x40)
++	  : "cc");
++}
++
+ /*
+  * platform-specific code to shutdown a CPU
+  *
+@@ -26,9 +65,10 @@ int platform_cpu_kill(unsigned int cpu)
+  */
+ void platform_cpu_die(unsigned int cpu)
+ {
+-	flush_cache_all();
++	cpu_enter_lowpower();
+ 	imx_enable_cpu(cpu, false);
+ 	cpu_do_idle();
++	cpu_leave_lowpower();
+ 
+ 	/* We should never return from idle */
+ 	panic("cpu %d unexpectedly exit from shutdown\n", cpu);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0036-ARM-i.MX-imx21ads-Fix-overlapping-static-i-o-mapping.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0036-ARM-i.MX-imx21ads-Fix-overlapping-static-i-o-mapping.patch
new file mode 100644
index 0000000..e0f48f5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0036-ARM-i.MX-imx21ads-Fix-overlapping-static-i-o-mapping.patch
@@ -0,0 +1,36 @@
+From b56e5718560c09bd064d57a3de17be1a329f2c65 Mon Sep 17 00:00:00 2001
+From: Jaccon Bastiaansen <jaccon.bastiaansen@gmail.com>
+Date: Mon, 30 Apr 2012 11:53:43 +0200
+Subject: [PATCH 36/67] ARM i.MX imx21ads: Fix overlapping static i/o mappings
+
+commit 350ab15bb2ffe7103bc6bf6c634f3c5b286eaf2a upstream.
+
+The statically defined I/O memory regions for the i.MX21 on chip
+peripherals and the on board I/O peripherals of the i.MX21ADS board
+overlap. This results in a kernel crash during startup. This is fixed
+by reducing the memory range for the on board I/O peripherals to the
+actually required range.
+
+Signed-off-by: Jaccon Bastiaansen <jaccon.bastiaansen@gmail.com>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/mach-imx/mach-mx21ads.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-imx/mach-mx21ads.c b/arch/arm/mach-imx/mach-mx21ads.c
+index 25f8402..ad994b3 100644
+--- a/arch/arm/mach-imx/mach-mx21ads.c
++++ b/arch/arm/mach-imx/mach-mx21ads.c
+@@ -32,7 +32,7 @@
+  * Memory-mapped I/O on MX21ADS base board
+  */
+ #define MX21ADS_MMIO_BASE_ADDR   0xf5000000
+-#define MX21ADS_MMIO_SIZE        SZ_16M
++#define MX21ADS_MMIO_SIZE        0xc00000
+ 
+ #define MX21ADS_REG_ADDR(offset)    (void __force __iomem *) \
+ 		(MX21ADS_MMIO_BASE_ADDR + (offset))
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0037-NFSv4-Fix-unnecessary-delegation-returns-in-nfs4_do_.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0037-NFSv4-Fix-unnecessary-delegation-returns-in-nfs4_do_.patch
new file mode 100644
index 0000000..9f00f9f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0037-NFSv4-Fix-unnecessary-delegation-returns-in-nfs4_do_.patch
@@ -0,0 +1,39 @@
+From 2b0262efb8720c3199a4fc4c119de05df5957bbc Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Fri, 8 Jun 2012 10:58:09 -0400
+Subject: [PATCH 37/67] NFSv4: Fix unnecessary delegation returns in
+ nfs4_do_open
+
+commit 2d0dbc6ae8a5194aaecb9cfffb9053f38fce8b86 upstream.
+
+While nfs4_do_open() expects the fmode argument to be restricted to
+combinations of FMODE_READ and FMODE_WRITE, both nfs4_atomic_open()
+and nfs4_proc_create will pass the nfs_open_context->mode,
+which contains the full fmode_t.
+
+This patch ensures that nfs4_do_open strips the other fmode_t bits,
+fixing a problem in which the nfs4_do_open call would result in an
+unnecessary delegation return.
+
+Reported-by: Fred Isaman <iisaman@netapp.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/nfs/nfs4proc.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index a3cae5d..8000459 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -1825,6 +1825,7 @@ static struct nfs4_state *nfs4_do_open(struct inode *dir, struct dentry *dentry,
+ 	struct nfs4_state *res;
+ 	int status;
+ 
++	fmode &= FMODE_READ|FMODE_WRITE;
+ 	do {
+ 		status = _nfs4_do_open(dir, dentry, fmode, flags, sattr, cred, &res);
+ 		if (status == 0)
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0038-iwlwifi-use-correct-supported-firmware-for-6035-and-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0038-iwlwifi-use-correct-supported-firmware-for-6035-and-.patch
new file mode 100644
index 0000000..0bc6ade
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0038-iwlwifi-use-correct-supported-firmware-for-6035-and-.patch
@@ -0,0 +1,88 @@
+From f4ef6f3f77fa0419a906d75f96c4dea111956872 Mon Sep 17 00:00:00 2001
+From: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
+Date: Tue, 5 Jun 2012 20:24:37 +0200
+Subject: [PATCH 38/67] iwlwifi: use correct supported firmware for 6035 and
+ 6000g2
+
+commit d2c8b15d0cb486f4938ba7f2af349d9d1220cb10 upstream.
+
+My patch
+
+   iwlwifi: use correct released ucode version
+
+did not correctly report supported firmware
+for the 6035 device. This patch fixes it. The
+minimum supported firmware version for 6035
+is v6.
+
+Also correct the minimum supported firmware
+version for the 6000g2 series of devices.
+
+Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
+Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2:
+ - adjust context
+ - make IWL_DEVICE_6035 identical for IWL_DEVICE_6030 except for the
+   ucode_api_* fields]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-6000.c |   22 ++++++++++++++++++++--
+ 1 file changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
+index 0b9f797..9b6b010 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
+@@ -49,17 +49,20 @@
+ #define IWL6000_UCODE_API_MAX 6
+ #define IWL6050_UCODE_API_MAX 5
+ #define IWL6000G2_UCODE_API_MAX 6
++#define IWL6035_UCODE_API_MAX 6
+ 
+ /* Oldest version we won't warn about */
+ #define IWL6000_UCODE_API_OK 4
+ #define IWL6000G2_UCODE_API_OK 5
+ #define IWL6050_UCODE_API_OK 5
+ #define IWL6000G2B_UCODE_API_OK 6
++#define IWL6035_UCODE_API_OK 6
+ 
+ /* Lowest firmware API version supported */
+ #define IWL6000_UCODE_API_MIN 4
+ #define IWL6050_UCODE_API_MIN 4
+-#define IWL6000G2_UCODE_API_MIN 4
++#define IWL6000G2_UCODE_API_MIN 5
++#define IWL6035_UCODE_API_MIN 6
+ 
+ #define IWL6000_FW_PRE "iwlwifi-6000-"
+ #define IWL6000_MODULE_FIRMWARE(api) IWL6000_FW_PRE __stringify(api) ".ucode"
+@@ -436,9 +439,24 @@ struct iwl_cfg iwl6030_2bg_cfg = {
+ 	IWL_DEVICE_6030,
+ };
+ 
++#define IWL_DEVICE_6035						\
++	.fw_name_pre = IWL6030_FW_PRE,				\
++	.ucode_api_max = IWL6035_UCODE_API_MAX,			\
++	.ucode_api_ok = IWL6035_UCODE_API_OK,			\
++	.ucode_api_min = IWL6035_UCODE_API_MIN,			\
++	.eeprom_ver = EEPROM_6030_EEPROM_VERSION,		\
++	.eeprom_calib_ver = EEPROM_6030_TX_POWER_VERSION,	\
++	.lib = &iwl6030_lib,					\
++	.base_params = &iwl6000_g2_base_params,			\
++	.bt_params = &iwl6000_bt_params,			\
++	.need_dc_calib = true,					\
++	.need_temp_offset_calib = true,				\
++	.led_mode = IWL_LED_RF_STATE,				\
++	.adv_pm = true
++
+ struct iwl_cfg iwl6035_2agn_cfg = {
+ 	.name = "6035 Series 2x2 AGN/BT",
+-	IWL_DEVICE_6030,
++	IWL_DEVICE_6035,
+ 	.ht_params = &iwl6000_ht_params,
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0039-iwlwifi-disable-the-buggy-chain-extension-feature-in.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0039-iwlwifi-disable-the-buggy-chain-extension-feature-in.patch
new file mode 100644
index 0000000..e13734b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0039-iwlwifi-disable-the-buggy-chain-extension-feature-in.patch
@@ -0,0 +1,52 @@
+From 0011758ae1822920fd9c6bcd18cafb780971a7b3 Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Wed, 6 Jun 2012 13:55:02 +0200
+Subject: [PATCH 39/67] iwlwifi: disable the buggy chain extension feature in
+ HW
+
+commit d012d04e4d6312ea157b6cf19e9689af934f5aa7 upstream.
+
+This feature has been reported to be buggy and enabled by
+default. We therefore need to disable it manually.
+
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2 as instructed: pass bus(trans) to iwl_write_prph()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-prph.h       |    1 +
+ drivers/net/wireless/iwlwifi/iwl-trans-pcie.c |    5 +++++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-prph.h b/drivers/net/wireless/iwlwifi/iwl-prph.h
+index d9b089e..0683006 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-prph.h
++++ b/drivers/net/wireless/iwlwifi/iwl-prph.h
+@@ -228,6 +228,7 @@
+ #define SCD_TXFACT		(SCD_BASE + 0x10)
+ #define SCD_ACTIVE		(SCD_BASE + 0x14)
+ #define SCD_QUEUECHAIN_SEL	(SCD_BASE + 0xe8)
++#define SCD_CHAINEXT_EN		(SCD_BASE + 0x244)
+ #define SCD_AGGR_SEL		(SCD_BASE + 0x248)
+ #define SCD_INTERRUPT_MASK	(SCD_BASE + 0x108)
+ 
+diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+index 5f17ab8..5815cf5 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
++++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+@@ -868,6 +868,11 @@ static void iwl_trans_pcie_tx_start(struct iwl_trans *trans)
+ 	iwl_write_prph(bus(trans), SCD_DRAM_BASE_ADDR,
+ 		       trans_pcie->scd_bc_tbls.dma >> 10);
+ 
++	/* The chain extension of the SCD doesn't work well. This feature is
++	 * enabled by default by the HW, so we need to disable it manually.
++	 */
++	iwl_write_prph(bus(trans), SCD_CHAINEXT_EN, 0);
++
+ 	/* Enable DMA channel */
+ 	for (chan = 0; chan < FH_TCSR_CHNL_NUM ; chan++)
+ 		iwl_write_direct32(bus(trans), FH_TCSR_CHNL_TX_CONFIG_REG(chan),
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0040-ALSA-hda-Add-codec-no_jack_detect-flag.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0040-ALSA-hda-Add-codec-no_jack_detect-flag.patch
new file mode 100644
index 0000000..619df98
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0040-ALSA-hda-Add-codec-no_jack_detect-flag.patch
@@ -0,0 +1,47 @@
+From 6b9a3be3e496ccc4125e0c6daded90e823864642 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 13 Feb 2012 11:55:02 +0100
+Subject: [PATCH 40/67] ALSA: hda - Add codec->no_jack_detect flag
+
+commit 71b1e9e43d5199f57c109e20c0f4dffc5c048130 upstream.
+
+Add a new flag to indicate that the codec has no jack-detection cap.
+This flag should be set for hardwares that have no jack-detect
+implementation although the codec chip itself supports it.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+[bwh: Backported to 3.2: adjust filename and context for is_jack_detectable()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/pci/hda/hda_codec.h |    1 +
+ sound/pci/hda/hda_local.h |    2 ++
+ 2 files changed, 3 insertions(+)
+
+diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
+index 71f6744..78b2223 100644
+--- a/sound/pci/hda/hda_codec.h
++++ b/sound/pci/hda/hda_codec.h
+@@ -858,6 +858,7 @@ struct hda_codec {
+ 	unsigned int pins_shutup:1;	/* pins are shut up */
+ 	unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */
+ 	unsigned int ignore_misc_bit:1; /* ignore MISC_NO_PRESENCE bit */
++	unsigned int no_jack_detect:1;	/* Machine has no jack-detection */
+ #ifdef CONFIG_SND_HDA_POWER_SAVE
+ 	unsigned int power_on :1;	/* current (global) power-state */
+ 	unsigned int power_transition :1; /* power-state in transition */
+diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
+index 368f0c5..c78b753 100644
+--- a/sound/pci/hda/hda_local.h
++++ b/sound/pci/hda/hda_local.h
+@@ -515,6 +515,8 @@ int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid);
+ 
+ static inline bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid)
+ {
++	if (codec->no_jack_detect)
++		return false;
+ 	if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT))
+ 		return false;
+ 	if (!codec->ignore_misc_bit &&
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0041-ALSA-hda-add-support-for-Uniwill-ECS-M31EI-notebook.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0041-ALSA-hda-add-support-for-Uniwill-ECS-M31EI-notebook.patch
new file mode 100644
index 0000000..f040ea2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0041-ALSA-hda-add-support-for-Uniwill-ECS-M31EI-notebook.patch
@@ -0,0 +1,32 @@
+From 0c29db802dc506ead06e7fac2b2d4d139e818ae3 Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex@perex.cz>
+Date: Tue, 7 Feb 2012 14:18:14 +0100
+Subject: [PATCH 41/67] ALSA: hda - add support for Uniwill ECS M31EI notebook
+
+commit 416846d2b31fc740ed9d5a5ec116964fb43c4358 upstream.
+
+This hardware requires same fixup for the node 0x0f like Asus A6Rp.
+More information: https://bugzilla.redhat.com/show_bug.cgi?id=785417
+
+Signed-off-by: Jaroslav Kysela <perex@perex.cz>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/pci/hda/patch_realtek.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 0bc5a46..7d304af 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5318,6 +5318,7 @@ static const struct alc_fixup alc861_fixups[] = {
+ 
+ static const struct snd_pci_quirk alc861_fixup_tbl[] = {
+ 	SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", PINFIX_ASUS_A6RP),
++	SND_PCI_QUIRK(0x1584, 0x0000, "Uniwill ECS M31EI", PINFIX_ASUS_A6RP),	
+ 	SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP),
+ 	SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505),
+ 	{}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0042-ALSA-hda-Suppress-auto-mute-feature-on-some-machines.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0042-ALSA-hda-Suppress-auto-mute-feature-on-some-machines.patch
new file mode 100644
index 0000000..588a0ed
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0042-ALSA-hda-Suppress-auto-mute-feature-on-some-machines.patch
@@ -0,0 +1,93 @@
+From bc9c3f7a38a28cba8ad0455548f064a81a8c9a69 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 13 Feb 2012 11:56:25 +0100
+Subject: [PATCH 42/67] ALSA: hda - Suppress auto-mute feature on some
+ machines with ALC861
+
+commit e652f4c861fb7f1f59ff0828db0d85578471932d upstream.
+
+A few machines with ALC861 & co are reported not to work properly with
+the auto-mute feature in software.  The auto-mute feature is implemented
+in the hardware level, and the jack-detection never works with them.
+
+Also, rename the fixup index as ALC861_FIXUP_* to follow the standard.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/pci/hda/patch_realtek.c |   38 ++++++++++++++++++++++++++++++--------
+ 1 file changed, 30 insertions(+), 8 deletions(-)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 7d304af..d4616fb 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5278,8 +5278,10 @@ static const struct hda_amp_list alc861_loopbacks[] = {
+ 
+ /* Pin config fixes */
+ enum {
+-	PINFIX_FSC_AMILO_PI1505,
+-	PINFIX_ASUS_A6RP,
++	ALC861_FIXUP_FSC_AMILO_PI1505,
++	ALC861_FIXUP_AMP_VREF_0F,
++	ALC861_FIXUP_NO_JACK_DETECT,
++	ALC861_FIXUP_ASUS_A6RP,
+ };
+ 
+ /* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */
+@@ -5301,8 +5303,16 @@ static void alc861_fixup_asus_amp_vref_0f(struct hda_codec *codec,
+ 	spec->keep_vref_in_automute = 1;
+ }
+ 
++/* suppress the jack-detection */
++static void alc_fixup_no_jack_detect(struct hda_codec *codec,
++				     const struct alc_fixup *fix, int action)
++{
++	if (action == ALC_FIXUP_ACT_PRE_PROBE)
++		codec->no_jack_detect = 1;
++}	
++
+ static const struct alc_fixup alc861_fixups[] = {
+-	[PINFIX_FSC_AMILO_PI1505] = {
++	[ALC861_FIXUP_FSC_AMILO_PI1505] = {
+ 		.type = ALC_FIXUP_PINS,
+ 		.v.pins = (const struct alc_pincfg[]) {
+ 			{ 0x0b, 0x0221101f }, /* HP */
+@@ -5310,17 +5320,29 @@ static const struct alc_fixup alc861_fixups[] = {
+ 			{ }
+ 		}
+ 	},
+-	[PINFIX_ASUS_A6RP] = {
++	[ALC861_FIXUP_AMP_VREF_0F] = {
+ 		.type = ALC_FIXUP_FUNC,
+ 		.v.func = alc861_fixup_asus_amp_vref_0f,
+ 	},
++	[ALC861_FIXUP_NO_JACK_DETECT] = {
++		.type = ALC_FIXUP_FUNC,
++		.v.func = alc_fixup_no_jack_detect,
++	},
++	[ALC861_FIXUP_ASUS_A6RP] = {
++		.type = ALC_FIXUP_FUNC,
++		.v.func = alc861_fixup_asus_amp_vref_0f,
++		.chained = true,
++		.chain_id = ALC861_FIXUP_NO_JACK_DETECT,
++	}
+ };
+ 
+ static const struct snd_pci_quirk alc861_fixup_tbl[] = {
+-	SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", PINFIX_ASUS_A6RP),
+-	SND_PCI_QUIRK(0x1584, 0x0000, "Uniwill ECS M31EI", PINFIX_ASUS_A6RP),	
+-	SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP),
+-	SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505),
++	SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", ALC861_FIXUP_ASUS_A6RP),
++	SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", ALC861_FIXUP_AMP_VREF_0F),
++	SND_PCI_QUIRK(0x1462, 0x7254, "HP DX2200", ALC861_FIXUP_NO_JACK_DETECT),
++	SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", ALC861_FIXUP_AMP_VREF_0F),
++	SND_PCI_QUIRK(0x1584, 0x0000, "Uniwill ECS M31EI", ALC861_FIXUP_AMP_VREF_0F),
++	SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", ALC861_FIXUP_FSC_AMILO_PI1505),
+ 	{}
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0043-ALSA-hda-Add-another-jack-detection-suppression-for-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0043-ALSA-hda-Add-another-jack-detection-suppression-for-.patch
new file mode 100644
index 0000000..bfbb148
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0043-ALSA-hda-Add-another-jack-detection-suppression-for-.patch
@@ -0,0 +1,52 @@
+From 5dadca9a4cd269970d942d9e235320f30c425b31 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 13 Feb 2012 12:03:25 +0100
+Subject: [PATCH 43/67] ALSA: hda - Add another jack-detection suppression for
+ ASUS ALC892
+
+commit 1565cc358585be40608b46f18f7ac431a1aae2bc upstream.
+
+Add the jack-detect suppression for an ASUS machine with ALC892 codec.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42655
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/pci/hda/patch_realtek.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index d4616fb..ba8a877 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5594,6 +5594,7 @@ enum {
+ 	ALC662_FIXUP_ASUS_MODE6,
+ 	ALC662_FIXUP_ASUS_MODE7,
+ 	ALC662_FIXUP_ASUS_MODE8,
++	ALC662_FIXUP_NO_JACK_DETECT,
+ };
+ 
+ static const struct alc_fixup alc662_fixups[] = {
+@@ -5739,6 +5740,10 @@ static const struct alc_fixup alc662_fixups[] = {
+ 		.chained = true,
+ 		.chain_id = ALC662_FIXUP_SKU_IGNORE
+ 	},
++	[ALC662_FIXUP_NO_JACK_DETECT] = {
++		.type = ALC_FIXUP_FUNC,
++		.v.func = alc_fixup_no_jack_detect,
++	},
+ };
+ 
+ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
+@@ -5747,6 +5752,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
+ 	SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE),
+ 	SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
+ 	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
++	SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
+ 	SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
+ 	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
+ 	SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0044-ALSA-HDA-Pin-fixup-for-Zotac-Z68-motherboard.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0044-ALSA-HDA-Pin-fixup-for-Zotac-Z68-motherboard.patch
new file mode 100644
index 0000000..925129a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0044-ALSA-HDA-Pin-fixup-for-Zotac-Z68-motherboard.patch
@@ -0,0 +1,56 @@
+From 733c9de011d1599e23402465b1bd33730bee4fc1 Mon Sep 17 00:00:00 2001
+From: David Henningsson <david.henningsson@canonical.com>
+Date: Tue, 12 Jun 2012 13:15:12 +0200
+Subject: [PATCH 44/67] ALSA: HDA: Pin fixup for Zotac Z68 motherboard
+
+commit edfe3bfc1b779ddda9bcff523eb022dda37b93c8 upstream.
+
+Pin 0x1b was connected to the front panel connector, which according to
+the HDA standard should contain a mic and a headphone. In this case,
+the headphone was listed as "line out" by BIOS.
+
+BugLink: https://bugs.launchpad.net/bugs/993162
+Signed-off-by: David Henningsson <david.henningsson@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/pci/hda/patch_realtek.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index ba8a877..0005bde 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5595,6 +5595,7 @@ enum {
+ 	ALC662_FIXUP_ASUS_MODE7,
+ 	ALC662_FIXUP_ASUS_MODE8,
+ 	ALC662_FIXUP_NO_JACK_DETECT,
++	ALC662_FIXUP_ZOTAC_Z68,
+ };
+ 
+ static const struct alc_fixup alc662_fixups[] = {
+@@ -5744,6 +5745,13 @@ static const struct alc_fixup alc662_fixups[] = {
+ 		.type = ALC_FIXUP_FUNC,
+ 		.v.func = alc_fixup_no_jack_detect,
+ 	},
++	[ALC662_FIXUP_ZOTAC_Z68] = {
++		.type = ALC_FIXUP_PINS,
++		.v.pins = (const struct alc_pincfg[]) {
++			{ 0x1b, 0x02214020 }, /* Front HP */
++			{ }
++		}
++	},
+ };
+ 
+ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
+@@ -5757,6 +5765,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
+ 	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
+ 	SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
+ 	SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD),
++	SND_PCI_QUIRK(0x19da, 0xa130, "Zotac Z68", ALC662_FIXUP_ZOTAC_Z68),
+ 	SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
+ 
+ #if 0
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0045-usb-cdc-wdm-Add-device-id-for-Huawei-3G-LTE-modems.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0045-usb-cdc-wdm-Add-device-id-for-Huawei-3G-LTE-modems.patch
new file mode 100644
index 0000000..940c459
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0045-usb-cdc-wdm-Add-device-id-for-Huawei-3G-LTE-modems.patch
@@ -0,0 +1,68 @@
+From 4b2cda453ae678e21afaa8d35cb77d670239e9cb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Wed, 25 Jan 2012 13:03:29 +0100
+Subject: [PATCH 45/67] usb: cdc-wdm: Add device-id for Huawei 3G/LTE modems
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit fec67b45bf045582c3172101970090d640cd56d9 upstream.
+
+[v2: Editorial changes suggested by Sergei Shtylyov]
+
+These modems use the Qualcomm MSM Interface (QMI) protocol for
+management of their CDC ECM like wwan interface.  This driver
+is perfect for exporting the protocol to userspace.
+
+The created character device will be indistinguishable from a
+common AT command based Device Management interface, so
+userspace applications must do some intelligent matching
+on the USB device.
+
+Cc: Sergei Shtylyov <sshtylyov@mvista.com>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Acked-by: Oliver Neukum <oneukum@suse.de>
+Acked-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/class/cdc-wdm.c |   16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
+index 554ac90..19fb5fa 100644
+--- a/drivers/usb/class/cdc-wdm.c
++++ b/drivers/usb/class/cdc-wdm.c
+@@ -31,6 +31,8 @@
+ #define DRIVER_AUTHOR "Oliver Neukum"
+ #define DRIVER_DESC "USB Abstract Control Model driver for USB WCM Device Management"
+ 
++#define HUAWEI_VENDOR_ID	0x12D1
++
+ static const struct usb_device_id wdm_ids[] = {
+ 	{
+ 		.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
+@@ -38,6 +40,20 @@ static const struct usb_device_id wdm_ids[] = {
+ 		.bInterfaceClass = USB_CLASS_COMM,
+ 		.bInterfaceSubClass = USB_CDC_SUBCLASS_DMM
+ 	},
++	{
++		/* 
++		 * Huawei E392, E398 and possibly other Qualcomm based modems
++		 * embed the Qualcomm QMI protocol inside CDC on CDC ECM like
++		 * control interfaces.  Userspace access to this is required
++		 * to configure the accompanying data interface
++		 */
++		.match_flags        = USB_DEVICE_ID_MATCH_VENDOR |
++					USB_DEVICE_ID_MATCH_INT_INFO,
++		.idVendor           = HUAWEI_VENDOR_ID,
++		.bInterfaceClass    = USB_CLASS_VENDOR_SPEC,
++		.bInterfaceSubClass = 1,
++		.bInterfaceProtocol = 9, /* NOTE: CDC ECM control interface! */
++	},
+ 	{ }
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0046-USB-qcserial-Add-Sierra-Wireless-device-IDs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0046-USB-qcserial-Add-Sierra-Wireless-device-IDs.patch
new file mode 100644
index 0000000..954ac8c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0046-USB-qcserial-Add-Sierra-Wireless-device-IDs.patch
@@ -0,0 +1,41 @@
+From 1fc193abca612fd776509b13f114254443d79300 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Thu, 24 May 2012 11:19:04 +0200
+Subject: [PATCH 46/67] USB: qcserial: Add Sierra Wireless device IDs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit c41444ccfa33a1c20efa319e554cb531576e64a2 upstream.
+
+Some additional IDs found in the BSD/GPL licensed out-of-tree
+GobiSerial driver from Sierra Wireless.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/qcserial.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
+index 3187d8b..6634477 100644
+--- a/drivers/usb/serial/qcserial.c
++++ b/drivers/usb/serial/qcserial.c
+@@ -105,7 +105,13 @@ static const struct usb_device_id id_table[] = {
+ 	{USB_DEVICE(0x1410, 0xa021)},	/* Novatel Gobi 3000 Composite */
+ 	{USB_DEVICE(0x413c, 0x8193)},	/* Dell Gobi 3000 QDL */
+ 	{USB_DEVICE(0x413c, 0x8194)},	/* Dell Gobi 3000 Composite */
++	{USB_DEVICE(0x1199, 0x9010)},	/* Sierra Wireless Gobi 3000 QDL */
++	{USB_DEVICE(0x1199, 0x9012)},	/* Sierra Wireless Gobi 3000 QDL */
+ 	{USB_DEVICE(0x1199, 0x9013)},	/* Sierra Wireless Gobi 3000 Modem device (MC8355) */
++	{USB_DEVICE(0x1199, 0x9014)},	/* Sierra Wireless Gobi 3000 QDL */
++	{USB_DEVICE(0x1199, 0x9015)},	/* Sierra Wireless Gobi 3000 Modem device */
++	{USB_DEVICE(0x1199, 0x9018)},	/* Sierra Wireless Gobi 3000 QDL */
++	{USB_DEVICE(0x1199, 0x9019)},	/* Sierra Wireless Gobi 3000 Modem device */
+ 	{USB_DEVICE(0x12D1, 0x14F0)},	/* Sony Gobi 3000 QDL */
+ 	{USB_DEVICE(0x12D1, 0x14F1)},	/* Sony Gobi 3000 Composite */
+ 	{ }				/* Terminating entry */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0047-USB-ftdi-sio-Add-support-for-RT-Systems-USB-RTS01-se.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0047-USB-ftdi-sio-Add-support-for-RT-Systems-USB-RTS01-se.patch
new file mode 100644
index 0000000..7d101e2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0047-USB-ftdi-sio-Add-support-for-RT-Systems-USB-RTS01-se.patch
@@ -0,0 +1,48 @@
+From 4303646551b97b4a9d0dfe195a85a32840e920b6 Mon Sep 17 00:00:00 2001
+From: Evan McNabb <evan@mcnabbs.org>
+Date: Fri, 25 May 2012 22:46:14 -0400
+Subject: [PATCH 47/67] USB: ftdi-sio: Add support for RT Systems USB-RTS01
+ serial adapter
+
+commit e00a54d772210d450e5c1a801534c3c8a448549f upstream.
+
+Add support for RT Systems USB-RTS01 USB to Serial adapter:
+http://www.rtsystemsinc.com/Photos/USBRTS01.html
+
+Tested by controlling Icom IC-718 amateur radio transceiver via hamlib.
+
+Signed-off-by: Evan McNabb <evan@mcnabbs.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/ftdi_sio.c     |    1 +
+ drivers/usb/serial/ftdi_sio_ids.h |    1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
+index 450bdfe..4045e39 100644
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -737,6 +737,7 @@ static struct usb_device_id id_table_combined [] = {
+ 	{ USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
+ 	{ USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) },
+ 	{ USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_CT29B_PID) },
++	{ USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_RTS01_PID) },
+ 	{ USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
+ 	{ USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) },
+ 	{ USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
+diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
+index 219b199..d27d7d7 100644
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -784,6 +784,7 @@
+ #define RTSYSTEMS_VID			0x2100	/* Vendor ID */
+ #define RTSYSTEMS_SERIAL_VX7_PID	0x9e52	/* Serial converter for VX-7 Radios using FT232RL */
+ #define RTSYSTEMS_CT29B_PID		0x9e54	/* CT29B Radio Cable */
++#define RTSYSTEMS_RTS01_PID		0x9e57	/* USB-RTS01 Radio Cable */
+ 
+ 
+ /*
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0048-USB-serial-cp210x-add-Optris-MS-Pro-usb-id.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0048-USB-serial-cp210x-add-Optris-MS-Pro-usb-id.patch
new file mode 100644
index 0000000..276c640
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0048-USB-serial-cp210x-add-Optris-MS-Pro-usb-id.patch
@@ -0,0 +1,29 @@
+From e7e29e6887d233e82b4dae59804228688370bcfa Mon Sep 17 00:00:00 2001
+From: Mikko Tuumanen <mikko.tuumanen@qemsoftware.com>
+Date: Fri, 1 Jun 2012 11:28:55 +0300
+Subject: [PATCH 48/67] USB: serial: cp210x: add Optris MS Pro usb id
+
+commit 5bbfa6f427c1d7244a5ee154ab8fa37265a5e049 upstream.
+
+Signed-off-by: Mikko Tuumanen <mikko.tuumanen@qemsoftware.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/cp210x.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
+index f2c57e0..aa0c43f 100644
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -82,6 +82,7 @@ static const struct usb_device_id id_table[] = {
+ 	{ USB_DEVICE(0x10C4, 0x8066) }, /* Argussoft In-System Programmer */
+ 	{ USB_DEVICE(0x10C4, 0x806F) }, /* IMS USB to RS422 Converter Cable */
+ 	{ USB_DEVICE(0x10C4, 0x807A) }, /* Crumb128 board */
++	{ USB_DEVICE(0x10C4, 0x80C4) }, /* Cygnal Integrated Products, Inc., Optris infrared thermometer */
+ 	{ USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */
+ 	{ USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */
+ 	{ USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0049-USB-serial-sierra-Add-support-for-Sierra-Wireless-Ai.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0049-USB-serial-sierra-Add-support-for-Sierra-Wireless-Ai.patch
new file mode 100644
index 0000000..2932333
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0049-USB-serial-sierra-Add-support-for-Sierra-Wireless-Ai.patch
@@ -0,0 +1,35 @@
+From 73b49603c6b6e058eeff4bea1866156fd35847d1 Mon Sep 17 00:00:00 2001
+From: Tom Cassidy <tomas.cassidy@gmail.com>
+Date: Wed, 6 Jun 2012 17:08:48 +1000
+Subject: [PATCH 49/67] USB: serial: sierra: Add support for Sierra Wireless
+ AirCard 320U modem
+
+commit 19a3dd1575e954e8c004413bee3e12d3962f2525 upstream.
+
+Add support for Sierra Wireless AirCard 320U modem
+
+Signed-off-by: Tomas Cassidy <tomas.cassidy@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/sierra.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
+index e093585..535d087 100644
+--- a/drivers/usb/serial/sierra.c
++++ b/drivers/usb/serial/sierra.c
+@@ -304,6 +304,10 @@ static const struct usb_device_id id_table[] = {
+ 	{ USB_DEVICE(0x1199, 0x68A3), 	/* Sierra Wireless Direct IP modems */
+ 	  .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
+ 	},
++	/* AT&T Direct IP LTE modems */
++	{ USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF),
++	  .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
++	},
+ 	{ USB_DEVICE(0x0f3d, 0x68A3), 	/* Airprime/Sierra Wireless Direct IP modems */
+ 	  .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
+ 	},
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0050-USB-option-Updated-Huawei-K4605-has-better-id.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0050-USB-option-Updated-Huawei-K4605-has-better-id.patch
new file mode 100644
index 0000000..0685a5c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0050-USB-option-Updated-Huawei-K4605-has-better-id.patch
@@ -0,0 +1,36 @@
+From 547f4fcdd71718e4522557b1d9210d11ef00d17e Mon Sep 17 00:00:00 2001
+From: Andrew Bird <ajb@spheresystems.co.uk>
+Date: Mon, 28 May 2012 12:43:06 +0100
+Subject: [PATCH 50/67] USB: option: Updated Huawei K4605 has better id
+
+commit 42ca7da1c2363dbef4ba1b6917c4c02274b6a5e2 upstream.
+
+Later firmwares for this device now have proper subclass and
+protocol info so we can identify it nicely without needing to use
+the blacklist. I'm not removing the old 0xff matching as there
+may be devices in the field that still need that.
+
+Signed-off-by: Andrew Bird <ajb@spheresystems.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/option.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index cbe3451..ef57b1e 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -666,6 +666,8 @@ static const struct usb_device_id option_ids[] = {
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3806, 0xff, 0xff, 0xff) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff),
+ 		.driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist },
++	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0x01, 0x31) },
++	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0x01, 0x32) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) },
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0051-USB-mct_u232-Fix-incorrect-TIOCMSET-return.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0051-USB-mct_u232-Fix-incorrect-TIOCMSET-return.patch
new file mode 100644
index 0000000..3c0c6a4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0051-USB-mct_u232-Fix-incorrect-TIOCMSET-return.patch
@@ -0,0 +1,48 @@
+From 1c51f7fd275092f5a0aa6063a04711bc5d0a2ede Mon Sep 17 00:00:00 2001
+From: Alan Cox <alan@linux.intel.com>
+Date: Tue, 22 May 2012 20:45:13 +0100
+Subject: [PATCH 51/67] USB: mct_u232: Fix incorrect TIOCMSET return
+
+commit 1aa3c63cf0a79153ee13c8f82e4eb6c40b66a161 upstream.
+
+The low level helper returns 1 on success. The ioctl should however return
+0. As this is the only user of the helper return, make the helper return 0 or
+an error code.
+
+Resolves-bug: https://bugzilla.kernel.org/show_bug.cgi?id=43009
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/mct_u232.c |   13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
+index ba0d287..42de17b 100644
+--- a/drivers/usb/serial/mct_u232.c
++++ b/drivers/usb/serial/mct_u232.c
+@@ -359,13 +359,16 @@ static int mct_u232_set_modem_ctrl(struct usb_serial *serial,
+ 			MCT_U232_SET_REQUEST_TYPE,
+ 			0, 0, buf, MCT_U232_SET_MODEM_CTRL_SIZE,
+ 			WDR_TIMEOUT);
+-	if (rc < 0)
+-		dev_err(&serial->dev->dev,
+-			"Set MODEM CTRL 0x%x failed (error = %d)\n", mcr, rc);
++	kfree(buf);
++
+ 	dbg("set_modem_ctrl: state=0x%x ==> mcr=0x%x", control_state, mcr);
+ 
+-	kfree(buf);
+-	return rc;
++	if (rc < 0) {
++		dev_err(&serial->dev->dev,
++			"Set MODEM CTRL 0x%x failed (error = %d)\n", mcr, rc);
++		return rc;
++	}
++	return 0;
+ } /* mct_u232_set_modem_ctrl */
+ 
+ static int mct_u232_get_modem_stat(struct usb_serial *serial,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0052-USB-option-fix-port-data-abuse.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0052-USB-option-fix-port-data-abuse.patch
new file mode 100644
index 0000000..7e8970a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0052-USB-option-fix-port-data-abuse.patch
@@ -0,0 +1,81 @@
+From 34491f4f5c53bc499adfe6eec7c146592f295bed Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Tue, 29 May 2012 17:57:52 +0200
+Subject: [PATCH 52/67] USB: option: fix port-data abuse
+
+commit 4273f9878b0a8271df055e3c8f2e7f08c6a4a2f4 upstream.
+
+Commit 8b4c6a3ab596961b78465 ("USB: option: Use generic USB wwan code")
+moved option port-data allocation to usb_wwan_startup but still cast the
+port data to the old struct...
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/option.c |   34 +++-------------------------------
+ 1 file changed, 3 insertions(+), 31 deletions(-)
+
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index ef57b1e..5be3915 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -1269,35 +1269,6 @@ static struct usb_serial_driver option_1port_device = {
+ 
+ static int debug;
+ 
+-/* per port private data */
+-
+-#define N_IN_URB 4
+-#define N_OUT_URB 4
+-#define IN_BUFLEN 4096
+-#define OUT_BUFLEN 4096
+-
+-struct option_port_private {
+-	/* Input endpoints and buffer for this port */
+-	struct urb *in_urbs[N_IN_URB];
+-	u8 *in_buffer[N_IN_URB];
+-	/* Output endpoints and buffer for this port */
+-	struct urb *out_urbs[N_OUT_URB];
+-	u8 *out_buffer[N_OUT_URB];
+-	unsigned long out_busy;		/* Bit vector of URBs in use */
+-	int opened;
+-	struct usb_anchor delayed;
+-
+-	/* Settings for the port */
+-	int rts_state;	/* Handshaking pins (outputs) */
+-	int dtr_state;
+-	int cts_state;	/* Handshaking pins (inputs) */
+-	int dsr_state;
+-	int dcd_state;
+-	int ri_state;
+-
+-	unsigned long tx_start_time[N_OUT_URB];
+-};
+-
+ /* Functions used by new usb-serial code. */
+ static int __init option_init(void)
+ {
+@@ -1400,7 +1371,8 @@ static void option_instat_callback(struct urb *urb)
+ 	int err;
+ 	int status = urb->status;
+ 	struct usb_serial_port *port =  urb->context;
+-	struct option_port_private *portdata = usb_get_serial_port_data(port);
++	struct usb_wwan_port_private *portdata =
++					usb_get_serial_port_data(port);
+ 
+ 	dbg("%s", __func__);
+ 	dbg("%s: urb %p port %p has data %p", __func__, urb, port, portdata);
+@@ -1461,7 +1433,7 @@ static int option_send_setup(struct usb_serial_port *port)
+ 	struct usb_serial *serial = port->serial;
+ 	struct usb_wwan_intf_private *intfdata =
+ 		(struct usb_wwan_intf_private *) serial->private;
+-	struct option_port_private *portdata;
++	struct usb_wwan_port_private *portdata;
+ 	int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
+ 	int val = 0;
+ 	dbg("%s", __func__);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0053-USB-option-fix-memory-leak.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0053-USB-option-fix-memory-leak.patch
new file mode 100644
index 0000000..3b0f86d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0053-USB-option-fix-memory-leak.patch
@@ -0,0 +1,58 @@
+From 84fb397f8fc0802c2f0422044a4c9cd34f480b44 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <jhovold@gmail.com>
+Date: Tue, 29 May 2012 18:22:48 +0200
+Subject: [PATCH 53/67] USB: option: fix memory leak
+
+commit b9c3aab315b51f81649a0d737c4c73783fbd8de0 upstream.
+
+Fix memory leak introduced by commit 383cedc3bb435de7a2 ("USB: serial:
+full autosuspend support for the option driver") which allocates
+usb-serial data but never frees it.
+
+Signed-off-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/option.c |   12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 5be3915..4bd2b85 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -47,6 +47,7 @@
+ /* Function prototypes */
+ static int  option_probe(struct usb_serial *serial,
+ 			const struct usb_device_id *id);
++static void option_release(struct usb_serial *serial);
+ static int option_send_setup(struct usb_serial_port *port);
+ static void option_instat_callback(struct urb *urb);
+ 
+@@ -1259,7 +1260,7 @@ static struct usb_serial_driver option_1port_device = {
+ 	.ioctl             = usb_wwan_ioctl,
+ 	.attach            = usb_wwan_startup,
+ 	.disconnect        = usb_wwan_disconnect,
+-	.release           = usb_wwan_release,
++	.release           = option_release,
+ 	.read_int_callback = option_instat_callback,
+ #ifdef CONFIG_PM
+ 	.suspend           = usb_wwan_suspend,
+@@ -1366,6 +1367,15 @@ static int option_probe(struct usb_serial *serial,
+ 	return 0;
+ }
+ 
++static void option_release(struct usb_serial *serial)
++{
++	struct usb_wwan_intf_private *priv = usb_get_serial_data(serial);
++
++	usb_wwan_release(serial);
++
++	kfree(priv);
++}
++
+ static void option_instat_callback(struct urb *urb)
+ {
+ 	int err;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0054-USB-option-add-more-YUGA-device-ids.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0054-USB-option-add-more-YUGA-device-ids.patch
new file mode 100644
index 0000000..750f0cc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0054-USB-option-add-more-YUGA-device-ids.patch
@@ -0,0 +1,94 @@
+From 8d06ef9e804169ec35e4b67ae24e8712b0fa87bb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=E8=AF=B4=E4=B8=8D=E5=BE=97?= <gavin.kx@qq.com>
+Date: Mon, 28 May 2012 21:31:29 +0800
+Subject: [PATCH 54/67] USB: option: add more YUGA device ids
+
+commit 0ef0be15fd2564767f114c249fc4af704d8e16f4 upstream.
+
+Signed-off-by: gavin zhu <gavin.zhu@qq.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/option.c |   44 ++++++++++++++++++++++++++-----------------
+ 1 file changed, 27 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 4bd2b85..61d6c31 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -426,7 +426,7 @@ static void option_instat_callback(struct urb *urb);
+ #define SAMSUNG_VENDOR_ID                       0x04e8
+ #define SAMSUNG_PRODUCT_GT_B3730                0x6889
+ 
+-/* YUGA products  www.yuga-info.com*/
++/* YUGA products  www.yuga-info.com gavin.kx@qq.com */
+ #define YUGA_VENDOR_ID				0x257A
+ #define YUGA_PRODUCT_CEM600			0x1601
+ #define YUGA_PRODUCT_CEM610			0x1602
+@@ -443,6 +443,8 @@ static void option_instat_callback(struct urb *urb);
+ #define YUGA_PRODUCT_CEU516			0x160C
+ #define YUGA_PRODUCT_CEU528			0x160D
+ #define YUGA_PRODUCT_CEU526			0x160F
++#define YUGA_PRODUCT_CEU881			0x161F
++#define YUGA_PRODUCT_CEU882			0x162F
+ 
+ #define YUGA_PRODUCT_CWM600			0x2601
+ #define YUGA_PRODUCT_CWM610			0x2602
+@@ -458,23 +460,26 @@ static void option_instat_callback(struct urb *urb);
+ #define YUGA_PRODUCT_CWU518			0x260B
+ #define YUGA_PRODUCT_CWU516			0x260C
+ #define YUGA_PRODUCT_CWU528			0x260D
++#define YUGA_PRODUCT_CWU581			0x260E
+ #define YUGA_PRODUCT_CWU526			0x260F
+-
+-#define YUGA_PRODUCT_CLM600			0x2601
+-#define YUGA_PRODUCT_CLM610			0x2602
+-#define YUGA_PRODUCT_CLM500			0x2603
+-#define YUGA_PRODUCT_CLM510			0x2604
+-#define YUGA_PRODUCT_CLM800			0x2605
+-#define YUGA_PRODUCT_CLM900			0x2606
+-
+-#define YUGA_PRODUCT_CLU718			0x2607
+-#define YUGA_PRODUCT_CLU716			0x2608
+-#define YUGA_PRODUCT_CLU728			0x2609
+-#define YUGA_PRODUCT_CLU726			0x260A
+-#define YUGA_PRODUCT_CLU518			0x260B
+-#define YUGA_PRODUCT_CLU516			0x260C
+-#define YUGA_PRODUCT_CLU528			0x260D
+-#define YUGA_PRODUCT_CLU526			0x260F
++#define YUGA_PRODUCT_CWU582			0x261F
++#define YUGA_PRODUCT_CWU583			0x262F
++
++#define YUGA_PRODUCT_CLM600			0x3601
++#define YUGA_PRODUCT_CLM610			0x3602
++#define YUGA_PRODUCT_CLM500			0x3603
++#define YUGA_PRODUCT_CLM510			0x3604
++#define YUGA_PRODUCT_CLM800			0x3605
++#define YUGA_PRODUCT_CLM900			0x3606
++
++#define YUGA_PRODUCT_CLU718			0x3607
++#define YUGA_PRODUCT_CLU716			0x3608
++#define YUGA_PRODUCT_CLU728			0x3609
++#define YUGA_PRODUCT_CLU726			0x360A
++#define YUGA_PRODUCT_CLU518			0x360B
++#define YUGA_PRODUCT_CLU516			0x360C
++#define YUGA_PRODUCT_CLU528			0x360D
++#define YUGA_PRODUCT_CLU526			0x360F
+ 
+ /* Viettel products */
+ #define VIETTEL_VENDOR_ID			0x2262
+@@ -1210,6 +1215,11 @@ static const struct usb_device_id option_ids[] = {
+ 	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU516) },
+ 	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU528) },
+ 	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU526) },
++	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU881) },
++	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU882) },
++	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU581) },
++	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU582) },
++	{ USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU583) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(VIETTEL_VENDOR_ID, VIETTEL_PRODUCT_VT1000, 0xff, 0xff, 0xff) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(ZD_VENDOR_ID, ZD_PRODUCT_7000, 0xff, 0xff, 0xff) },
+ 	{ USB_DEVICE(LG_VENDOR_ID, LG_PRODUCT_L02C) }, /* docomo L-02C modem */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0055-target-Return-error-to-initiator-if-SET-TARGET-PORT-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0055-target-Return-error-to-initiator-if-SET-TARGET-PORT-.patch
new file mode 100644
index 0000000..6102fca
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0055-target-Return-error-to-initiator-if-SET-TARGET-PORT-.patch
@@ -0,0 +1,55 @@
+From c9d1a254f6f1c91f6d43d9ec46d7d1d76f2f82ee Mon Sep 17 00:00:00 2001
+From: Roland Dreier <roland@purestorage.com>
+Date: Mon, 4 Jun 2012 23:24:51 -0700
+Subject: [PATCH 55/67] target: Return error to initiator if SET TARGET PORT
+ GROUPS emulation fails
+
+commit 59e4f541baf728dbb426949bfa9f6862387ffd0e upstream.
+
+The error paths in target_emulate_set_target_port_groups() are all
+essentially "rc = -EINVAL; goto out;" but the code at "out:" ignores
+rc and always returns success.  This means that even if eg explicit
+ALUA is turned off, the initiator will always see a good SCSI status
+for SET TARGET PORT GROUPS.
+
+Fix this by returning rc as is intended.  It appears this bug was
+added by the following patch:
+
+commit 05d1c7c0d0db4cc25548d9aadebb416888a82327
+Author: Andy Grover <agrover@redhat.com>
+Date:   Wed Jul 20 19:13:28 2011 +0000
+
+    target: Make all control CDBs scatter-gather
+
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Cc: Andy Grover <agrover@redhat.com>
+Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
+[bwh: Backported to 3.2: we have transport_complete_task()
+ and not target_complete_cmd()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/target/target_core_alua.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c
+index 5b05744..0364ca2 100644
+--- a/drivers/target/target_core_alua.c
++++ b/drivers/target/target_core_alua.c
+@@ -352,9 +352,11 @@ int target_emulate_set_target_port_groups(struct se_task *task)
+ 
+ out:
+ 	transport_kunmap_data_sg(cmd);
+-	task->task_scsi_status = GOOD;
+-	transport_complete_task(task, 1);
+-	return 0;
++	if (!rc) {
++		task->task_scsi_status = GOOD;
++		transport_complete_task(task, 1);
++	}
++	return rc;
+ }
+ 
+ static inline int core_alua_state_nonoptimized(
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0056-USB-add-NO_D3_DURING_SLEEP-flag-and-revert-151b61284.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0056-USB-add-NO_D3_DURING_SLEEP-flag-and-revert-151b61284.patch
new file mode 100644
index 0000000..1231863
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0056-USB-add-NO_D3_DURING_SLEEP-flag-and-revert-151b61284.patch
@@ -0,0 +1,179 @@
+From edf1db1d2784e8b11a07eb3e6b7efb3cb45291ae Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Wed, 13 Jun 2012 11:20:19 -0400
+Subject: [PATCH 56/67] USB: add NO_D3_DURING_SLEEP flag and revert
+ 151b61284776be2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit c2fb8a3fa25513de8fedb38509b1f15a5bbee47b upstream.
+
+This patch (as1558) fixes a problem affecting several ASUS computers:
+The machine crashes or corrupts memory when going into suspend if the
+ehci-hcd driver is bound to any controllers.  Users have been forced
+to unbind or unload ehci-hcd before putting their systems to sleep.
+
+After extensive testing, it was determined that the machines don't
+like going into suspend when any EHCI controllers are in the PCI D3
+power state.  Presumably this is a firmware bug, but there's nothing
+we can do about it except to avoid putting the controllers in D3
+during system sleep.
+
+The patch adds a new flag to indicate whether the problem is present,
+and avoids changing the controller's power state if the flag is set.
+Runtime suspend is unaffected; this matters only for system suspend.
+However as a side effect, the controller will not respond to remote
+wakeup requests while the system is asleep.  Hence USB wakeup is not
+functional -- but of course, this is already true in the current state
+of affairs.
+
+A similar patch has already been applied as commit
+151b61284776be2d6f02d48c23c3625678960b97 (USB: EHCI: fix crash during
+suspend on ASUS computers).  The patch supersedes that one and reverts
+it.  There are two differences:
+
+	The old patch added the flag at the USB level; this patch
+	adds it at the PCI level.
+
+	The old patch applied to all chipsets with the same vendor,
+	subsystem vendor, and product IDs; this patch makes an
+	exception for a known-good system (based on DMI information).
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Dâniel Fraga <fragabr@gmail.com>
+Tested-by: Andrey Rahmatullin <wrar@wrar.name>
+Tested-by: Steven Rostedt <rostedt@goodmis.org>
+Reviewed-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/pci/pci.c           |    5 +++++
+ drivers/pci/quirks.c        |   26 ++++++++++++++++++++++++++
+ drivers/usb/core/hcd-pci.c  |    9 ---------
+ drivers/usb/host/ehci-pci.c |    8 --------
+ include/linux/pci.h         |    2 ++
+ include/linux/usb/hcd.h     |    2 --
+ 6 files changed, 33 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
+index 6d4a531..e5b75eb 100644
+--- a/drivers/pci/pci.c
++++ b/drivers/pci/pci.c
+@@ -1689,6 +1689,11 @@ int pci_prepare_to_sleep(struct pci_dev *dev)
+ 	if (target_state == PCI_POWER_ERROR)
+ 		return -EIO;
+ 
++	/* Some devices mustn't be in D3 during system sleep */
++	if (target_state == PCI_D3hot &&
++			(dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP))
++		return 0;
++
+ 	pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));
+ 
+ 	error = pci_set_power_state(dev, target_state);
+diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
+index 78fda9c..3c56fec 100644
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -2940,6 +2940,32 @@ static void __devinit disable_igfx_irq(struct pci_dev *dev)
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
+ 
++/*
++ * The Intel 6 Series/C200 Series chipset's EHCI controllers on many
++ * ASUS motherboards will cause memory corruption or a system crash
++ * if they are in D3 while the system is put into S3 sleep.
++ */
++static void __devinit asus_ehci_no_d3(struct pci_dev *dev)
++{
++	const char *sys_info;
++	static const char good_Asus_board[] = "P8Z68-V";
++
++	if (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP)
++		return;
++	if (dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK)
++		return;
++	sys_info = dmi_get_system_info(DMI_BOARD_NAME);
++	if (sys_info && memcmp(sys_info, good_Asus_board,
++			sizeof(good_Asus_board) - 1) == 0)
++		return;
++
++	dev_info(&dev->dev, "broken D3 during system sleep on ASUS\n");
++	dev->dev_flags |= PCI_DEV_FLAGS_NO_D3_DURING_SLEEP;
++	device_set_wakeup_capable(&dev->dev, false);
++}
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c26, asus_ehci_no_d3);
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c2d, asus_ehci_no_d3);
++
+ static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
+ 			  struct pci_fixup *end)
+ {
+diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
+index 5f1404a..61d08dd 100644
+--- a/drivers/usb/core/hcd-pci.c
++++ b/drivers/usb/core/hcd-pci.c
+@@ -495,15 +495,6 @@ static int hcd_pci_suspend_noirq(struct device *dev)
+ 
+ 	pci_save_state(pci_dev);
+ 
+-	/*
+-	 * Some systems crash if an EHCI controller is in D3 during
+-	 * a sleep transition.  We have to leave such controllers in D0.
+-	 */
+-	if (hcd->broken_pci_sleep) {
+-		dev_dbg(dev, "Staying in PCI D0\n");
+-		return retval;
+-	}
+-
+ 	/* If the root hub is dead rather than suspended, disallow remote
+ 	 * wakeup.  usb_hc_died() should ensure that both hosts are marked as
+ 	 * dying, so we only need to check the primary roothub.
+diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
+index ee85e81..a79e64b 100644
+--- a/drivers/usb/host/ehci-pci.c
++++ b/drivers/usb/host/ehci-pci.c
+@@ -144,14 +144,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
+ 			hcd->has_tt = 1;
+ 			tdi_reset(ehci);
+ 		}
+-		if (pdev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK) {
+-			/* EHCI #1 or #2 on 6 Series/C200 Series chipset */
+-			if (pdev->device == 0x1c26 || pdev->device == 0x1c2d) {
+-				ehci_info(ehci, "broken D3 during system sleep on ASUS\n");
+-				hcd->broken_pci_sleep = 1;
+-				device_set_wakeup_capable(&pdev->dev, false);
+-			}
+-		}
+ 		break;
+ 	case PCI_VENDOR_ID_TDI:
+ 		if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) {
+diff --git a/include/linux/pci.h b/include/linux/pci.h
+index 7cda65b..c0cfa0d 100644
+--- a/include/linux/pci.h
++++ b/include/linux/pci.h
+@@ -176,6 +176,8 @@ enum pci_dev_flags {
+ 	PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2,
+ 	/* Provide indication device is assigned by a Virtual Machine Manager */
+ 	PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) 4,
++	/* Device causes system crash if in D3 during S3 sleep */
++	PCI_DEV_FLAGS_NO_D3_DURING_SLEEP = (__force pci_dev_flags_t) 8,
+ };
+ 
+ enum pci_irq_reroute_variant {
+diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
+index 64cec8d..03354d5 100644
+--- a/include/linux/usb/hcd.h
++++ b/include/linux/usb/hcd.h
+@@ -128,8 +128,6 @@ struct usb_hcd {
+ 	unsigned		wireless:1;	/* Wireless USB HCD */
+ 	unsigned		authorized_default:1;
+ 	unsigned		has_tt:1;	/* Integrated TT in root hub */
+-	unsigned		broken_pci_sleep:1;	/* Don't put the
+-			controller in PCI-D3 for system sleep */
+ 
+ 	int			irq;		/* irq allocated */
+ 	void __iomem		*regs;		/* device memory/io */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0057-USB-serial-Enforce-USB-driver-and-USB-serial-driver-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0057-USB-serial-Enforce-USB-driver-and-USB-serial-driver-.patch
new file mode 100644
index 0000000..abcb4c9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0057-USB-serial-Enforce-USB-driver-and-USB-serial-driver-.patch
@@ -0,0 +1,162 @@
+From 445ae7e401ef25e383d9784a4602b815b2a580e1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Wed, 30 May 2012 10:00:14 +0200
+Subject: [PATCH 57/67] USB: serial: Enforce USB driver and USB serial driver
+ match
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 954c3f8a5f1b7716be9eee978b3bc85bae92d7c8 upstream.
+
+We need to make sure that the USB serial driver we find
+matches the USB driver whose probe we are currently
+executing. Otherwise we will end up with USB serial
+devices bound to the correct serial driver but wrong
+USB driver.
+
+An example of such cross-probing, where the usbserial_generic
+USB driver has found the sierra serial driver:
+
+May 29 18:26:15 nemi kernel: [ 4442.559246] usbserial_generic 4-4:1.0: Sierra USB modem converter detected
+May 29 18:26:20 nemi kernel: [ 4447.556747] usbserial_generic 4-4:1.2: Sierra USB modem converter detected
+May 29 18:26:25 nemi kernel: [ 4452.557288] usbserial_generic 4-4:1.3: Sierra USB modem converter detected
+
+sysfs view of the same problem:
+
+bjorn@nemi:~$ ls -l /sys/bus/usb/drivers/sierra/
+total 0
+--w------- 1 root root 4096 May 29 18:23 bind
+lrwxrwxrwx 1 root root    0 May 29 18:23 module -> ../../../../module/usbserial
+--w------- 1 root root 4096 May 29 18:23 uevent
+--w------- 1 root root 4096 May 29 18:23 unbind
+bjorn@nemi:~$ ls -l /sys/bus/usb-serial/drivers/sierra/
+total 0
+--w------- 1 root root 4096 May 29 18:23 bind
+lrwxrwxrwx 1 root root    0 May 29 18:23 module -> ../../../../module/sierra
+-rw-r--r-- 1 root root 4096 May 29 18:23 new_id
+lrwxrwxrwx 1 root root    0 May 29 18:32 ttyUSB0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/ttyUSB0
+lrwxrwxrwx 1 root root    0 May 29 18:32 ttyUSB1 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.2/ttyUSB1
+lrwxrwxrwx 1 root root    0 May 29 18:32 ttyUSB2 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.3/ttyUSB2
+--w------- 1 root root 4096 May 29 18:23 uevent
+--w------- 1 root root 4096 May 29 18:23 unbind
+
+bjorn@nemi:~$ ls -l /sys/bus/usb/drivers/usbserial_generic/
+total 0
+lrwxrwxrwx 1 root root    0 May 29 18:33 4-4:1.0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0
+lrwxrwxrwx 1 root root    0 May 29 18:33 4-4:1.2 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.2
+lrwxrwxrwx 1 root root    0 May 29 18:33 4-4:1.3 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.3
+--w------- 1 root root 4096 May 29 18:33 bind
+lrwxrwxrwx 1 root root    0 May 29 18:33 module -> ../../../../module/usbserial
+--w------- 1 root root 4096 May 29 18:22 uevent
+--w------- 1 root root 4096 May 29 18:33 unbind
+bjorn@nemi:~$ ls -l /sys/bus/usb-serial/drivers/generic/
+total 0
+--w------- 1 root root 4096 May 29 18:33 bind
+lrwxrwxrwx 1 root root    0 May 29 18:33 module -> ../../../../module/usbserial
+-rw-r--r-- 1 root root 4096 May 29 18:33 new_id
+--w------- 1 root root 4096 May 29 18:22 uevent
+--w------- 1 root root 4096 May 29 18:33 unbind
+
+So we end up with a mismatch between the USB driver and the
+USB serial driver.  The reason for the above is simple: The
+USB driver probe will succeed if *any* registered serial
+driver matches, and will use that serial driver for all
+serial driver functions.
+
+This makes ref counting go wrong. We count the USB driver
+as used, but not the USB serial driver.  This may result
+in Oops'es as demonstrated by Johan Hovold <jhovold@gmail.com>:
+
+[11811.646396] drivers/usb/serial/usb-serial.c: get_free_serial 1
+[11811.646443] drivers/usb/serial/usb-serial.c: get_free_serial - minor base = 0
+[11811.646460] drivers/usb/serial/usb-serial.c: usb_serial_probe - registering ttyUSB0
+[11811.646766] usb 6-1: pl2303 converter now attached to ttyUSB0
+[11812.264197] USB Serial deregistering driver FTDI USB Serial Device
+[11812.264865] usbcore: deregistering interface driver ftdi_sio
+[11812.282180] USB Serial deregistering driver pl2303
+[11812.283141] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
+[11812.283272] usbcore: deregistering interface driver pl2303
+[11812.301056] USB Serial deregistering driver generic
+[11812.301186] usbcore: deregistering interface driver usbserial_generic
+[11812.301259] drivers/usb/serial/usb-serial.c: usb_serial_disconnect
+[11812.301823] BUG: unable to handle kernel paging request at f8e7438c
+[11812.301845] IP: [<f8e38445>] usb_serial_disconnect+0xb5/0x100 [usbserial]
+[11812.301871] *pde = 357ef067 *pte = 00000000
+[11812.301957] Oops: 0000 [#1] PREEMPT SMP
+[11812.301983] Modules linked in: usbserial(-) [last unloaded: pl2303]
+[11812.302008]
+[11812.302019] Pid: 1323, comm: modprobe Tainted: G        W    3.4.0-rc7+ #101 Dell Inc. Vostro 1520/0T816J
+[11812.302115] EIP: 0060:[<f8e38445>] EFLAGS: 00010246 CPU: 1
+[11812.302130] EIP is at usb_serial_disconnect+0xb5/0x100 [usbserial]
+[11812.302141] EAX: f508a180 EBX: f508a180 ECX: 00000000 EDX: f8e74300
+[11812.302151] ESI: f5050800 EDI: 00000001 EBP: f5141e78 ESP: f5141e58
+[11812.302160]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
+[11812.302170] CR0: 8005003b CR2: f8e7438c CR3: 34848000 CR4: 000007d0
+[11812.302180] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
+[11812.302189] DR6: ffff0ff0 DR7: 00000400
+[11812.302199] Process modprobe (pid: 1323, ti=f5140000 task=f61e2bc0 task.ti=f5140000)
+[11812.302209] Stack:
+[11812.302216]  f8e3be0f f8e3b29c f8e3ae00 00000000 f513641c f5136400 f513641c f507a540
+[11812.302325]  f5141e98 c133d2c1 00000000 00000000 f509c400 f513641c f507a590 f5136450
+[11812.302372]  f5141ea8 c12f0344 f513641c f507a590 f5141ebc c12f0c67 00000000 f507a590
+[11812.302419] Call Trace:
+[11812.302439]  [<c133d2c1>] usb_unbind_interface+0x51/0x190
+[11812.302456]  [<c12f0344>] __device_release_driver+0x64/0xb0
+[11812.302469]  [<c12f0c67>] driver_detach+0x97/0xa0
+[11812.302483]  [<c12f001c>] bus_remove_driver+0x6c/0xe0
+[11812.302500]  [<c145938d>] ? __mutex_unlock_slowpath+0xcd/0x140
+[11812.302514]  [<c12f0ff9>] driver_unregister+0x49/0x80
+[11812.302528]  [<c1457df6>] ? printk+0x1d/0x1f
+[11812.302540]  [<c133c50d>] usb_deregister+0x5d/0xb0
+[11812.302557]  [<f8e37c55>] ? usb_serial_deregister+0x45/0x50 [usbserial]
+[11812.302575]  [<f8e37c8d>] usb_serial_deregister_drivers+0x2d/0x40 [usbserial]
+[11812.302593]  [<f8e3a6e2>] usb_serial_generic_deregister+0x12/0x20 [usbserial]
+[11812.302611]  [<f8e3acf0>] usb_serial_exit+0x8/0x32 [usbserial]
+[11812.302716]  [<c1080b48>] sys_delete_module+0x158/0x260
+[11812.302730]  [<c110594e>] ? mntput+0x1e/0x30
+[11812.302746]  [<c145c3c3>] ? sysenter_exit+0xf/0x18
+[11812.302746]  [<c107777c>] ? trace_hardirqs_on_caller+0xec/0x170
+[11812.302746]  [<c145c390>] sysenter_do_call+0x12/0x36
+[11812.302746] Code: 24 02 00 00 e8 dd f3 20 c8 f6 86 74 02 00 00 02 74 b4 8d 86 4c 02 00 00 47 e8 78 55 4b c8 0f b6 43 0e 39 f8 7f a9 8b 53 04 89 d8 <ff> 92 8c 00 00 00 89 d8 e8 0e ff ff ff 8b 45 f0 c7 44 24 04 2f
+[11812.302746] EIP: [<f8e38445>] usb_serial_disconnect+0xb5/0x100 [usbserial] SS:ESP 0068:f5141e58
+[11812.302746] CR2: 00000000f8e7438c
+
+Fix by only evaluating serial drivers pointing back to the
+USB driver we are currently probing.  This still allows two
+or more drivers to match the same device, running their
+serial driver probes to sort out which one to use.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Reviewed-by: Felipe Balbi <balbi@ti.com>
+Tested-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/usb-serial.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
+index 38d7ebd..8bea45c 100644
+--- a/drivers/usb/serial/usb-serial.c
++++ b/drivers/usb/serial/usb-serial.c
+@@ -669,12 +669,14 @@ exit:
+ static struct usb_serial_driver *search_serial_device(
+ 					struct usb_interface *iface)
+ {
+-	const struct usb_device_id *id;
++	const struct usb_device_id *id = NULL;
+ 	struct usb_serial_driver *drv;
++	struct usb_driver *driver = to_usb_driver(iface->dev.driver);
+ 
+ 	/* Check if the usb id matches a known device */
+ 	list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
+-		id = get_iface_id(drv, iface);
++		if (drv->usb_driver == driver)
++			id = get_iface_id(drv, iface);
+ 		if (id)
+ 			return drv;
+ 	}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0058-xhci-Fix-invalid-loop-check-in-xhci_free_tt_info.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0058-xhci-Fix-invalid-loop-check-in-xhci_free_tt_info.patch
new file mode 100644
index 0000000..6243e98
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0058-xhci-Fix-invalid-loop-check-in-xhci_free_tt_info.patch
@@ -0,0 +1,89 @@
+From 6007e93797d693599661f4547d329258ec711a9f Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Fri, 1 Jun 2012 10:06:23 +0200
+Subject: [PATCH 58/67] xhci: Fix invalid loop check in xhci_free_tt_info()
+
+commit 46ed8f00d8982e49f8fe2c1a9cea192f640cb3ba upstream.
+
+xhci_free_tt_info() may access the invalid memory when it removes the
+last entry but the list is not empty.  Then tt_next reaches to the
+list head but it still tries to check the tt_info of that entry.
+
+This patch fixes the bug and cleans up the messy code by rewriting
+with a simple list_for_each_entry_safe().
+
+This patch should be backported to kernels as old as 3.2, that contain
+the commit 839c817ce67178ca3c7c7ad534c571bba1e69ebe "xhci: Store
+information about roothubs and TTs."
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Reviewed-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/xhci-mem.c |   39 ++++++++++-----------------------------
+ 1 file changed, 10 insertions(+), 29 deletions(-)
+
+diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
+index 4232e868..b85eb36 100644
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -693,10 +693,9 @@ static void xhci_free_tt_info(struct xhci_hcd *xhci,
+ 		struct xhci_virt_device *virt_dev,
+ 		int slot_id)
+ {
+-	struct list_head *tt;
+ 	struct list_head *tt_list_head;
+-	struct list_head *tt_next;
+-	struct xhci_tt_bw_info *tt_info;
++	struct xhci_tt_bw_info *tt_info, *next;
++	bool slot_found = false;
+ 
+ 	/* If the device never made it past the Set Address stage,
+ 	 * it may not have the real_port set correctly.
+@@ -708,34 +707,16 @@ static void xhci_free_tt_info(struct xhci_hcd *xhci,
+ 	}
+ 
+ 	tt_list_head = &(xhci->rh_bw[virt_dev->real_port - 1].tts);
+-	if (list_empty(tt_list_head))
+-		return;
+-
+-	list_for_each(tt, tt_list_head) {
+-		tt_info = list_entry(tt, struct xhci_tt_bw_info, tt_list);
+-		if (tt_info->slot_id == slot_id)
++	list_for_each_entry_safe(tt_info, next, tt_list_head, tt_list) {
++		/* Multi-TT hubs will have more than one entry */
++		if (tt_info->slot_id == slot_id) {
++			slot_found = true;
++			list_del(&tt_info->tt_list);
++			kfree(tt_info);
++		} else if (slot_found) {
+ 			break;
++		}
+ 	}
+-	/* Cautionary measure in case the hub was disconnected before we
+-	 * stored the TT information.
+-	 */
+-	if (tt_info->slot_id != slot_id)
+-		return;
+-
+-	tt_next = tt->next;
+-	tt_info = list_entry(tt, struct xhci_tt_bw_info,
+-			tt_list);
+-	/* Multi-TT hubs will have more than one entry */
+-	do {
+-		list_del(tt);
+-		kfree(tt_info);
+-		tt = tt_next;
+-		if (list_empty(tt_list_head))
+-			break;
+-		tt_next = tt->next;
+-		tt_info = list_entry(tt, struct xhci_tt_bw_info,
+-				tt_list);
+-	} while (tt_info->slot_id == slot_id);
+ }
+ 
+ int xhci_alloc_tt_info(struct xhci_hcd *xhci,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0059-xhci-Don-t-free-endpoints-in-xhci_mem_cleanup.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0059-xhci-Don-t-free-endpoints-in-xhci_mem_cleanup.patch
new file mode 100644
index 0000000..41ec5ed
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0059-xhci-Don-t-free-endpoints-in-xhci_mem_cleanup.patch
@@ -0,0 +1,94 @@
+From fcb37c126483592a507dafef265b134f975a749f Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Fri, 1 Jun 2012 10:06:24 +0200
+Subject: [PATCH 59/67] xhci: Don't free endpoints in xhci_mem_cleanup()
+
+commit 32f1d2c536d0c26c5814cb0e6a0606c42d02fac1 upstream.
+
+This patch fixes a few issues introduced in the recent fix
+[f8a9e72d: USB: fix resource leak in xhci power loss path]
+
+- The endpoints listed in bw table are just links and each entry is an
+ array member of dev->eps[].  But the commit above adds a kfree() call
+ to these instances, and thus it results in memory corruption.
+
+- It clears only the first entry of rh_bw[], but there can be multiple
+  ports.
+
+- It'd be safer to clear the list_head of ep as well, not only
+  removing from the list, as it's checked in
+  xhci_discover_or_reset_device().
+
+This patch should be backported to kernels as old as 3.2, that contain
+the commit 839c817ce67178ca3c7c7ad534c571bba1e69ebe "xhci: Store
+information about roothubs and TTs."
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Reviewed-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/xhci-mem.c |   35 ++++++++++++++---------------------
+ 1 file changed, 14 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
+index b85eb36..a40ab98 100644
+--- a/drivers/usb/host/xhci-mem.c
++++ b/drivers/usb/host/xhci-mem.c
+@@ -1680,17 +1680,9 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
+ {
+ 	struct pci_dev	*pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
+ 	struct dev_info	*dev_info, *next;
+-	struct list_head *tt_list_head;
+-	struct list_head *tt;
+-	struct list_head *endpoints;
+-	struct list_head *ep, *q;
+-	struct xhci_tt_bw_info *tt_info;
+-	struct xhci_interval_bw_table *bwt;
+-	struct xhci_virt_ep *virt_ep;
+-
+ 	unsigned long	flags;
+ 	int size;
+-	int i;
++	int i, j, num_ports;
+ 
+ 	/* Free the Event Ring Segment Table and the actual Event Ring */
+ 	size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
+@@ -1747,21 +1739,22 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
+ 	}
+ 	spin_unlock_irqrestore(&xhci->lock, flags);
+ 
+-	bwt = &xhci->rh_bw->bw_table;
+-	for (i = 0; i < XHCI_MAX_INTERVAL; i++) {
+-		endpoints = &bwt->interval_bw[i].endpoints;
+-		list_for_each_safe(ep, q, endpoints) {
+-			virt_ep = list_entry(ep, struct xhci_virt_ep, bw_endpoint_list);
+-			list_del(&virt_ep->bw_endpoint_list);
+-			kfree(virt_ep);
++	num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
++	for (i = 0; i < num_ports; i++) {
++		struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
++		for (j = 0; j < XHCI_MAX_INTERVAL; j++) {
++			struct list_head *ep = &bwt->interval_bw[j].endpoints;
++			while (!list_empty(ep))
++				list_del_init(ep->next);
+ 		}
+ 	}
+ 
+-	tt_list_head = &xhci->rh_bw->tts;
+-	list_for_each_safe(tt, q, tt_list_head) {
+-		tt_info = list_entry(tt, struct xhci_tt_bw_info, tt_list);
+-		list_del(tt);
+-		kfree(tt_info);
++	for (i = 0; i < num_ports; i++) {
++		struct xhci_tt_bw_info *tt, *n;
++		list_for_each_entry_safe(tt, n, &xhci->rh_bw[i].tts, tt_list) {
++			list_del(&tt->tt_list);
++			kfree(tt);
++		}
+ 	}
+ 
+ 	xhci->num_usb2_ports = 0;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0060-xHCI-Increase-the-timeout-for-controller-save-restor.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0060-xHCI-Increase-the-timeout-for-controller-save-restor.patch
new file mode 100644
index 0000000..6ca5f78
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0060-xHCI-Increase-the-timeout-for-controller-save-restor.patch
@@ -0,0 +1,66 @@
+From 989ee831bd73b7de3030e3d01068f4b115f277f9 Mon Sep 17 00:00:00 2001
+From: Andiry Xu <andiry.xu@gmail.com>
+Date: Wed, 13 Jun 2012 10:51:57 +0800
+Subject: [PATCH 60/67] xHCI: Increase the timeout for controller save/restore
+ state operation
+
+commit 622eb783fe6ff4c1baa47db16c3a5db97f9e6e50 upstream.
+
+When system software decides to power down the xHC with the intent of
+resuming operation at a later time, it will ask xHC to save the internal
+state and restore it when resume to correctly recover from a power event.
+Two bits are used to enable this operation: Save State and Restore State.
+
+xHCI spec 4.23.2 says software should "Set the Controller Save/Restore
+State flag in the USBCMD register and wait for the Save/Restore State
+Status flag in the USBSTS register to transition to '0'". However, it does
+not define how long software should wait for the SSS/RSS bit to transition
+to 0.
+
+Currently the timeout is set to 1ms. There is bug report
+(https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1002697)
+indicates that the timeout is too short for ASMedia ASM1042 host controller
+to save/restore the state successfully. Increase the timeout to 10ms helps to
+resolve the issue.
+
+This patch should be backported to stable kernels as old as 2.6.37, that
+contain the commit 5535b1d5f8885695c6ded783c692e3c0d0eda8ca "USB: xHCI:
+PCI power management implementation"
+
+Signed-off-by: Andiry Xu <andiry.xu@gmail.com>
+Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Cc: Ming Lei <ming.lei@canonical.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/xhci.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
+index 4c00606..05f82e9 100644
+--- a/drivers/usb/host/xhci.c
++++ b/drivers/usb/host/xhci.c
+@@ -783,8 +783,8 @@ int xhci_suspend(struct xhci_hcd *xhci)
+ 	command = xhci_readl(xhci, &xhci->op_regs->command);
+ 	command |= CMD_CSS;
+ 	xhci_writel(xhci, command, &xhci->op_regs->command);
+-	if (handshake(xhci, &xhci->op_regs->status, STS_SAVE, 0, 10*100)) {
+-		xhci_warn(xhci, "WARN: xHC CMD_CSS timeout\n");
++	if (handshake(xhci, &xhci->op_regs->status, STS_SAVE, 0, 10 * 1000)) {
++		xhci_warn(xhci, "WARN: xHC save state timeout\n");
+ 		spin_unlock_irq(&xhci->lock);
+ 		return -ETIMEDOUT;
+ 	}
+@@ -836,8 +836,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
+ 		command |= CMD_CRS;
+ 		xhci_writel(xhci, command, &xhci->op_regs->command);
+ 		if (handshake(xhci, &xhci->op_regs->status,
+-			      STS_RESTORE, 0, 10*100)) {
+-			xhci_dbg(xhci, "WARN: xHC CMD_CSS timeout\n");
++			      STS_RESTORE, 0, 10 * 1000)) {
++			xhci_warn(xhci, "WARN: xHC restore state timeout\n");
+ 			spin_unlock_irq(&xhci->lock);
+ 			return -ETIMEDOUT;
+ 		}
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0061-usb-PS3-EHCI-QH-read-work-around.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0061-usb-PS3-EHCI-QH-read-work-around.patch
new file mode 100644
index 0000000..940cd4c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0061-usb-PS3-EHCI-QH-read-work-around.patch
@@ -0,0 +1,36 @@
+From 8358979f2727e09ed8658dfbc95fa3ffdbbdac75 Mon Sep 17 00:00:00 2001
+From: Geoff Levand <geoff@infradead.org>
+Date: Tue, 8 Nov 2011 16:01:18 -0800
+Subject: [PATCH 61/67] usb: PS3 EHCI QH read work-around
+
+commit aaa0ef289afe9186f81e2340114ea413eef0492a upstream.
+
+PS3 EHCI HC errata fix 244.  The SCC EHCI HC will not correctly perform QH
+reads that occur near or span a micro-frame boundry.  This is due to a problem
+in the Nak Count Reload Control logic (EHCI Specification 1.0 Section 4.9.1).
+
+The work-around for this problem is for the HC driver to set I=1 (inactive) for
+QHs with H=1 (list head).
+
+Signed-off-by: Geoff Levand <geoff@infradead.org>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/ehci-hcd.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
+index da2f711..64c0d7b 100644
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -620,6 +620,7 @@ static int ehci_init(struct usb_hcd *hcd)
+ 	hw = ehci->async->hw;
+ 	hw->hw_next = QH_NEXT(ehci, ehci->async->qh_dma);
+ 	hw->hw_info1 = cpu_to_hc32(ehci, QH_HEAD);
++	hw->hw_info1 |= cpu_to_hc32(ehci, (1 << 7));	/* I = 1 */
+ 	hw->hw_token = cpu_to_hc32(ehci, QTD_STS_HALT);
+ 	hw->hw_qtd_next = EHCI_LIST_END(ehci);
+ 	ehci->async->qh_state = QH_STATE_LINKED;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0062-USB-fix-PS3-EHCI-systems.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0062-USB-fix-PS3-EHCI-systems.patch
new file mode 100644
index 0000000..d3476fc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0062-USB-fix-PS3-EHCI-systems.patch
@@ -0,0 +1,37 @@
+From 5ed14fb69997843bfb782a2f742ef8c583e44f4b Mon Sep 17 00:00:00 2001
+From: Ricardo Martins <rasm@fe.up.pt>
+Date: Tue, 22 May 2012 18:02:03 +0100
+Subject: [PATCH 62/67] USB: fix PS3 EHCI systems
+
+commit 4f7a67e2dd49fbfba002c453bc24bf00e701cc71 upstream.
+
+After commit aaa0ef289afe9186f81e2340114ea413eef0492a "PS3 EHCI QH
+read work-around", Terratec Grabby (em28xx) stopped working with AMD
+Geode LX 800 (USB controller AMD CS5536). Since this is a PS3 only
+fix, the following patch adds a conditional block around it.
+
+Signed-off-by: Ricardo Martins <rasm@fe.up.pt>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/host/ehci-hcd.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
+index 64c0d7b..339be10 100644
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -620,7 +620,9 @@ static int ehci_init(struct usb_hcd *hcd)
+ 	hw = ehci->async->hw;
+ 	hw->hw_next = QH_NEXT(ehci, ehci->async->qh_dma);
+ 	hw->hw_info1 = cpu_to_hc32(ehci, QH_HEAD);
++#if defined(CONFIG_PPC_PS3)
+ 	hw->hw_info1 |= cpu_to_hc32(ehci, (1 << 7));	/* I = 1 */
++#endif
+ 	hw->hw_token = cpu_to_hc32(ehci, QTD_STS_HALT);
+ 	hw->hw_qtd_next = EHCI_LIST_END(ehci);
+ 	ehci->async->qh_state = QH_STATE_LINKED;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0063-usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0063-usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch
new file mode 100644
index 0000000..8eab02a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0063-usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch
@@ -0,0 +1,43 @@
+From d48aade3b822cbd46666d0ef17a646bb5eba2bd3 Mon Sep 17 00:00:00 2001
+From: Otto Meta <otto.patches@sister-shadow.de>
+Date: Wed, 6 Jun 2012 18:46:21 +0200
+Subject: [PATCH 63/67] usb: cdc-acm: fix devices not unthrottled on open
+
+commit 6c4707f3f8c44ec18282e1c014c80e1c257042f9 upstream.
+
+Currently CDC-ACM devices stay throttled when their TTY is closed while
+throttled, stalling further communication attempts after the next open.
+
+Unthrottling during open/activate got lost starting with kernel
+3.0.0 and this patch reintroduces it.
+
+Signed-off-by: Otto Meta <otto.patches@sister-shadow.de>
+Acked-by: Johan Hovold <jhovold@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/class/cdc-acm.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
+index e61d9c4..1094469 100644
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -498,6 +498,14 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
+ 
+ 	usb_autopm_put_interface(acm->control);
+ 
++	/*
++	 * Unthrottle device in case the TTY was closed while throttled.
++	 */
++	spin_lock_irq(&acm->read_lock);
++	acm->throttled = 0;
++	acm->throttle_req = 0;
++	spin_unlock_irq(&acm->read_lock);
++
+ 	if (acm_submit_read_urbs(acm, GFP_KERNEL))
+ 		goto bail_out;
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0064-USB-fix-gathering-of-interface-associations.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0064-USB-fix-gathering-of-interface-associations.patch
new file mode 100644
index 0000000..8131498
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0064-USB-fix-gathering-of-interface-associations.patch
@@ -0,0 +1,88 @@
+From 88948e29878410f75f424d93c132dae0771bbb38 Mon Sep 17 00:00:00 2001
+From: Daniel Mack <zonque@gmail.com>
+Date: Tue, 12 Jun 2012 20:23:52 +0200
+Subject: [PATCH 64/67] USB: fix gathering of interface associations
+
+commit b3a3dd074f7053ef824ad077e5331b52220ceba1 upstream.
+
+TEAC's UD-H01 (and probably other devices) have a gap in the interface
+number allocation of their descriptors:
+
+  Configuration Descriptor:
+    bLength                 9
+    bDescriptorType         2
+    wTotalLength          220
+    bNumInterfaces          3
+    [...]
+    Interface Descriptor:
+      bLength                 9
+      bDescriptorType         4
+      bInterfaceNumber        0
+      bAlternateSetting       0
+      [...]
+    Interface Association:
+      bLength                 8
+      bDescriptorType        11
+      bFirstInterface         2
+      bInterfaceCount         2
+      bFunctionClass          1 Audio
+      bFunctionSubClass       0
+      bFunctionProtocol      32
+      iFunction               4
+    Interface Descriptor:
+      bLength                 9
+      bDescriptorType         4
+      bInterfaceNumber        2
+      bAlternateSetting       0
+      [...]
+
+Once a configuration is selected, usb_set_configuration() walks the
+known interfaces of a given configuration and calls find_iad() on
+each of them to set the interface association pointer the interface
+is included in.
+
+The problem here is that the loop variable is taken for the interface
+number in the comparison logic that gathers the association. Which is
+fine as long as the descriptors are sane.
+
+In the case above, however, the logic gets out of sync and the
+interface association fields of all interfaces beyond the interface
+number gap are wrong.
+
+Fix this by passing the interface's bInterfaceNumber to find_iad()
+instead.
+
+Signed-off-by: Daniel Mack <zonque@gmail.com>
+Reported-by: bEN <ml_all@circa.be>
+Reported-by: Ivan Perrone <ivanperrone@hotmail.com>
+Tested-by: ivan perrone <ivanperrone@hotmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/core/message.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
+index ca717da..ef116a5 100644
+--- a/drivers/usb/core/message.c
++++ b/drivers/usb/core/message.c
+@@ -1803,7 +1803,6 @@ free_interfaces:
+ 		intfc = cp->intf_cache[i];
+ 		intf->altsetting = intfc->altsetting;
+ 		intf->num_altsetting = intfc->num_altsetting;
+-		intf->intf_assoc = find_iad(dev, cp, i);
+ 		kref_get(&intfc->ref);
+ 
+ 		alt = usb_altnum_to_altsetting(intf, 0);
+@@ -1816,6 +1815,8 @@ free_interfaces:
+ 		if (!alt)
+ 			alt = &intf->altsetting[0];
+ 
++		intf->intf_assoc =
++			find_iad(dev, cp, alt->desc.bInterfaceNumber);
+ 		intf->cur_altsetting = alt;
+ 		usb_enable_interface(dev, intf, true);
+ 		intf->dev.parent = &dev->dev;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0065-swap-fix-shmem-swapping-when-more-than-8-areas.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0065-swap-fix-shmem-swapping-when-more-than-8-areas.patch
new file mode 100644
index 0000000..ebf34f1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0065-swap-fix-shmem-swapping-when-more-than-8-areas.patch
@@ -0,0 +1,102 @@
+From aa557a3d3043ce3af6fb9349fcb59db12972784d Mon Sep 17 00:00:00 2001
+From: Hugh Dickins <hughd@google.com>
+Date: Fri, 15 Jun 2012 17:55:50 -0700
+Subject: [PATCH 65/67] swap: fix shmem swapping when more than 8 areas
+
+commit 9b15b817f3d62409290fd56fe3cbb076a931bb0a upstream.
+
+Minchan Kim reports that when a system has many swap areas, and tmpfs
+swaps out to the ninth or more, shmem_getpage_gfp()'s attempts to read
+back the page cannot locate it, and the read fails with -ENOMEM.
+
+Whoops.  Yes, I blindly followed read_swap_header()'s pte_to_swp_entry(
+swp_entry_to_pte()) technique for determining maximum usable swap
+offset, without stopping to realize that that actually depends upon the
+pte swap encoding shifting swap offset to the higher bits and truncating
+it there.  Whereas our radix_tree swap encoding leaves offset in the
+lower bits: it's swap "type" (that is, index of swap area) that was
+truncated.
+
+Fix it by reducing the SWP_TYPE_SHIFT() in swapops.h, and removing the
+broken radix_to_swp_entry(swp_to_radix_entry()) from read_swap_header().
+
+This does not reduce the usable size of a swap area any further, it
+leaves it as claimed when making the original commit: no change from 3.0
+on x86_64, nor on i386 without PAE; but 3.0's 512GB is reduced to 128GB
+per swapfile on i386 with PAE.  It's not a change I would have risked
+five years ago, but with x86_64 supported for ten years, I believe it's
+appropriate now.
+
+Hmm, and what if some architecture implements its swap pte with offset
+encoded below type? That would equally break the maximum usable swap
+offset check.  Happily, they all follow the same tradition of encoding
+offset above type, but I'll prepare a check on that for next.
+
+Reported-and-Reviewed-and-Tested-by: Minchan Kim <minchan@kernel.org>
+Signed-off-by: Hugh Dickins <hughd@google.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/linux/swapops.h |    8 +++++---
+ mm/swapfile.c           |   12 ++++--------
+ 2 files changed, 9 insertions(+), 11 deletions(-)
+
+diff --git a/include/linux/swapops.h b/include/linux/swapops.h
+index 2189d3f..d6955607 100644
+--- a/include/linux/swapops.h
++++ b/include/linux/swapops.h
+@@ -8,13 +8,15 @@
+  * get good packing density in that tree, so the index should be dense in
+  * the low-order bits.
+  *
+- * We arrange the `type' and `offset' fields so that `type' is at the five
++ * We arrange the `type' and `offset' fields so that `type' is at the seven
+  * high-order bits of the swp_entry_t and `offset' is right-aligned in the
+- * remaining bits.
++ * remaining bits.  Although `type' itself needs only five bits, we allow for
++ * shmem/tmpfs to shift it all up a further two bits: see swp_to_radix_entry().
+  *
+  * swp_entry_t's are *never* stored anywhere in their arch-dependent format.
+  */
+-#define SWP_TYPE_SHIFT(e)	(sizeof(e.val) * 8 - MAX_SWAPFILES_SHIFT)
++#define SWP_TYPE_SHIFT(e)	((sizeof(e.val) * 8) - \
++			(MAX_SWAPFILES_SHIFT + RADIX_TREE_EXCEPTIONAL_SHIFT))
+ #define SWP_OFFSET_MASK(e)	((1UL << SWP_TYPE_SHIFT(e)) - 1)
+ 
+ /*
+diff --git a/mm/swapfile.c b/mm/swapfile.c
+index d3955f2..fad1830 100644
+--- a/mm/swapfile.c
++++ b/mm/swapfile.c
+@@ -1921,24 +1921,20 @@ static unsigned long read_swap_header(struct swap_info_struct *p,
+ 
+ 	/*
+ 	 * Find out how many pages are allowed for a single swap
+-	 * device. There are three limiting factors: 1) the number
++	 * device. There are two limiting factors: 1) the number
+ 	 * of bits for the swap offset in the swp_entry_t type, and
+ 	 * 2) the number of bits in the swap pte as defined by the
+-	 * the different architectures, and 3) the number of free bits
+-	 * in an exceptional radix_tree entry. In order to find the
++	 * different architectures. In order to find the
+ 	 * largest possible bit mask, a swap entry with swap type 0
+ 	 * and swap offset ~0UL is created, encoded to a swap pte,
+ 	 * decoded to a swp_entry_t again, and finally the swap
+ 	 * offset is extracted. This will mask all the bits from
+ 	 * the initial ~0UL mask that can't be encoded in either
+ 	 * the swp_entry_t or the architecture definition of a
+-	 * swap pte.  Then the same is done for a radix_tree entry.
++	 * swap pte.
+ 	 */
+ 	maxpages = swp_offset(pte_to_swp_entry(
+-			swp_entry_to_pte(swp_entry(0, ~0UL))));
+-	maxpages = swp_offset(radix_to_swp_entry(
+-			swp_to_radix_entry(swp_entry(0, maxpages)))) + 1;
+-
++			swp_entry_to_pte(swp_entry(0, ~0UL)))) + 1;
+ 	if (maxpages > swap_header->info.last_page) {
+ 		maxpages = swap_header->info.last_page + 1;
+ 		/* p->max is an unsigned int: don't overflow it */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0066-drm-radeon-add-some-additional-6xx-7xx-EG-register-i.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0066-drm-radeon-add-some-additional-6xx-7xx-EG-register-i.patch
new file mode 100644
index 0000000..8c259c2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0066-drm-radeon-add-some-additional-6xx-7xx-EG-register-i.patch
@@ -0,0 +1,121 @@
+From 5e599e218c67e5888e56cd171473ac988facb120 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 14 Jun 2012 22:06:36 +0200
+Subject: [PATCH 66/67] drm/radeon: add some additional 6xx/7xx/EG register
+ init
+
+commit b866d1334ba2d544bc575d75357dea6bdcdc7f46 upstream.
+
+- SMX_SAR_CTL0 needs to be programmed correctly to prevent
+problems with memory exports in certain cases.
+- VC_ENHANCE needs to be initialized on 6xx/7xx.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/radeon/evergreen.c  |    3 +++
+ drivers/gpu/drm/radeon/evergreend.h |    1 +
+ drivers/gpu/drm/radeon/r600.c       |    1 +
+ drivers/gpu/drm/radeon/r600d.h      |    1 +
+ drivers/gpu/drm/radeon/rv770.c      |    5 ++++-
+ drivers/gpu/drm/radeon/rv770d.h     |    3 +++
+ 6 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
+index dac178b..931f4df 100644
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -2148,6 +2148,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
+ 	smx_dc_ctl0 |= NUMBER_OF_SETS(rdev->config.evergreen.sx_num_of_sets);
+ 	WREG32(SMX_DC_CTL0, smx_dc_ctl0);
+ 
++	if (rdev->family <= CHIP_SUMO2)
++		WREG32(SMX_SAR_CTL0, 0x00010000);
++
+ 	WREG32(SX_EXPORT_BUFFER_SIZES, (COLOR_BUFFER_SIZE((rdev->config.evergreen.sx_max_export_size / 4) - 1) |
+ 					POSITION_BUFFER_SIZE((rdev->config.evergreen.sx_max_export_pos_size / 4) - 1) |
+ 					SMX_BUFFER_SIZE((rdev->config.evergreen.sx_max_export_smx_size / 4) - 1)));
+diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h
+index 0128445..6ecd23f 100644
+--- a/drivers/gpu/drm/radeon/evergreend.h
++++ b/drivers/gpu/drm/radeon/evergreend.h
+@@ -270,6 +270,7 @@
+ #define	SCRATCH_UMSK					0x8540
+ #define	SCRATCH_ADDR					0x8544
+ 
++#define	SMX_SAR_CTL0					0xA008
+ #define	SMX_DC_CTL0					0xA020
+ #define		USE_HASH_FUNCTION				(1 << 0)
+ #define		NUMBER_OF_SETS(x)				((x) << 1)
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index 9cdda0b..bdfa82a 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -1905,6 +1905,7 @@ void r600_gpu_init(struct radeon_device *rdev)
+ 	WREG32(PA_CL_ENHANCE, (CLIP_VTX_REORDER_ENA |
+ 			       NUM_CLIP_SEQ(3)));
+ 	WREG32(PA_SC_ENHANCE, FORCE_EOV_MAX_CLK_CNT(4095));
++	WREG32(VC_ENHANCE, 0);
+ }
+ 
+ 
+diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
+index bfe1b5d..d4d23a8d 100644
+--- a/drivers/gpu/drm/radeon/r600d.h
++++ b/drivers/gpu/drm/radeon/r600d.h
+@@ -461,6 +461,7 @@
+ #define		TC_L2_SIZE(x)					((x)<<5)
+ #define		L2_DISABLE_LATE_HIT				(1<<9)
+ 
++#define	VC_ENHANCE					0x9714
+ 
+ #define	VGT_CACHE_INVALIDATION				0x88C4
+ #define		CACHE_INVALIDATION(x)				((x)<<0)
+diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
+index e36ba7f..cc79449 100644
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -782,6 +782,9 @@ static void rv770_gpu_init(struct radeon_device *rdev)
+ 				       ACK_FLUSH_CTL(3) |
+ 				       SYNC_FLUSH_CTL));
+ 
++	if (rdev->family != CHIP_RV770)
++		WREG32(SMX_SAR_CTL0, 0x00003f3f);
++
+ 	db_debug3 = RREG32(DB_DEBUG3);
+ 	db_debug3 &= ~DB_CLK_OFF_DELAY(0x1f);
+ 	switch (rdev->family) {
+@@ -960,7 +963,7 @@ static void rv770_gpu_init(struct radeon_device *rdev)
+ 
+ 	WREG32(PA_CL_ENHANCE, (CLIP_VTX_REORDER_ENA |
+ 					  NUM_CLIP_SEQ(3)));
+-
++	WREG32(VC_ENHANCE, 0);
+ }
+ 
+ void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc)
+diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
+index 7538092..7095a71 100644
+--- a/drivers/gpu/drm/radeon/rv770d.h
++++ b/drivers/gpu/drm/radeon/rv770d.h
+@@ -208,6 +208,7 @@
+ #define	SCRATCH_UMSK					0x8540
+ #define	SCRATCH_ADDR					0x8544
+ 
++#define	SMX_SAR_CTL0					0xA008
+ #define	SMX_DC_CTL0					0xA020
+ #define		USE_HASH_FUNCTION				(1 << 0)
+ #define		CACHE_DEPTH(x)					((x) << 1)
+@@ -307,6 +308,8 @@
+ #define	TCP_CNTL					0x9610
+ #define	TCP_CHAN_STEER					0x9614
+ 
++#define	VC_ENHANCE					0x9714
++
+ #define	VGT_CACHE_INVALIDATION				0x88C4
+ #define		CACHE_INVALIDATION(x)				((x)<<0)
+ #define			VC_ONLY						0
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0067-Linux-3.2.21.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0067-Linux-3.2.21.patch
new file mode 100644
index 0000000..d9d9f9f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.21/0067-Linux-3.2.21.patch
@@ -0,0 +1,24 @@
+From 1eb1eabe86e7b13627d8f03d32a2e402e26d77a5 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 19 Jun 2012 23:18:30 +0100
+Subject: [PATCH 67/67] Linux 3.2.21
+
+---
+ Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index c7e9cc4..7eb465e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 2
+-SUBLEVEL = 20
++SUBLEVEL = 21
+ EXTRAVERSION =
+ NAME = Saber-toothed Squirrel
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch
new file mode 100644
index 0000000..7d796a7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch
@@ -0,0 +1,54 @@
+From fa18ca5c896696066349e2803dfeeda1fcd4a4e3 Mon Sep 17 00:00:00 2001
+From: Damian <damian.eppel@teleca.com>
+Date: Tue, 5 Jun 2012 23:14:58 +0200
+Subject: [PATCH 1/2] beaglebone: fix LCD3 led/key overlap
+
+Signed-off-by: Koen Kooi <koen@circuitco.com>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |    9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 7fd611f..a337bb3 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -639,7 +639,6 @@ static struct pinmux_config dvia2_pin_mux[] = {
+ /* Module pin mux for Beagleboardtoys 3.5" LCD cape */
+ static struct pinmux_config bbtoys35_pin_mux[] = {
+ 	{"gpmc_a2.gpio1_18", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR0 LED
+-	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR1 LED
+ 	{NULL, 0},
+ };
+ 
+@@ -1196,7 +1195,7 @@ static struct platform_device beaglebone_lcd3_keys = {
+ static struct pinmux_config lcd3a1_keys_pin_mux[] = {
+ 	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Left
+ 	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Right
+-	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Up
++	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Up
+ 	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Down
+ 	{"mcasp0_fsr.gpio3_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Enter
+ 	{NULL, 0},
+@@ -1424,7 +1423,6 @@ static struct platform_device dvi_leds_gpio = {
+ };
+ 
+ #define BEAGLEBONELCD3_USR0_LED  GPIO_TO_PIN(1, 18)
+-#define BEAGLEBONELCD3_USR1_LED  GPIO_TO_PIN(1, 19)
+ 
+ static struct gpio_led lcd3_gpio_leds[] = {
+ 	{
+@@ -1450,11 +1448,6 @@ static struct gpio_led lcd3_gpio_leds[] = {
+ 		.default_trigger	= "heartbeat",
+ 		.gpio			= BEAGLEBONELCD3_USR0_LED,
+ 	},
+-	{
+-		.name			= "lcd3::usr1",
+-		.default_trigger	= "mmc0",
+-		.gpio			= BEAGLEBONELCD3_USR1_LED,
+-	},
+ };
+ 
+ static struct gpio_led_platform_data lcd3_gpio_led_info = {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0001-USB-convert-drivers-net-to-use-module_usb_driver.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0001-USB-convert-drivers-net-to-use-module_usb_driver.patch
new file mode 100644
index 0000000..2ea9652
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0001-USB-convert-drivers-net-to-use-module_usb_driver.patch
@@ -0,0 +1,80 @@
+From d8e323a5bb24b2deefa6b80bb129b2d2d9db3184 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@suse.de>
+Date: Fri, 18 Nov 2011 09:44:20 -0800
+Subject: [PATCH 01/16] USB: convert drivers/net/* to use module_usb_driver()
+
+This converts the drivers in drivers/net/* to use the
+module_usb_driver() macro which makes the code smaller and a bit
+simpler.
+
+Added bonus is that it removes some unneeded kernel log messages about
+drivers loading and/or unloading.
+
+Cc: Wolfgang Grandegger <wg@grandegger.com>
+Cc: Samuel Ortiz <samuel@sortiz.org>
+Cc: Oliver Neukum <oliver@neukum.name>
+Cc: Peter Korsgaard <jacmet@sunsite.dk>
+Cc: Petko Manolov <petkan@users.sourceforge.net>
+Cc: Steve Glendinning <steve.glendinning@smsc.com>
+Cc: Christian Lamparter <chunkeey@googlemail.com>
+Cc: "John W. Linville" <linville@tuxdriver.com>
+Cc: Dan Williams <dcbw@redhat.com>
+Cc: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+Cc: Ivo van Doorn <IvDoorn@gmail.com>
+Cc: Gertjan van Wingerde <gwingerde@gmail.com>
+Cc: Helmut Schaa <helmut.schaa@googlemail.com>
+Cc: Herton Ronaldo Krzesinski <herton@canonical.com>
+Cc: Hin-Tak Leung <htl10@users.sourceforge.net>
+Cc: Larry Finger <Larry.Finger@lwfinger.net>
+Cc: Chaoming Li <chaoming_li@realsil.com.cn>
+Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
+Cc: "David S. Miller" <davem@davemloft.net>
+Cc: Roel Kluin <roel.kluin@gmail.com>
+Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
+Cc: Jiri Pirko <jpirko@redhat.com>
+Cc: Pavel Roskin <proski@gnu.org>
+Cc: Yoann DI-RUZZA <y.diruzza@lim.eu>
+Cc: George <george0505@realtek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ drivers/net/wireless/libertas/if_usb.c |   24 +-----------------------
+ 1 file changed, 1 insertion(+), 23 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
+index db879c3..b5fbbc7 100644
+--- a/drivers/net/wireless/libertas/if_usb.c
++++ b/drivers/net/wireless/libertas/if_usb.c
+@@ -1184,29 +1184,7 @@ static struct usb_driver if_usb_driver = {
+ 	.reset_resume = if_usb_resume,
+ };
+ 
+-static int __init if_usb_init_module(void)
+-{
+-	int ret = 0;
+-
+-	lbs_deb_enter(LBS_DEB_MAIN);
+-
+-	ret = usb_register(&if_usb_driver);
+-
+-	lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret);
+-	return ret;
+-}
+-
+-static void __exit if_usb_exit_module(void)
+-{
+-	lbs_deb_enter(LBS_DEB_MAIN);
+-
+-	usb_deregister(&if_usb_driver);
+-
+-	lbs_deb_leave(LBS_DEB_MAIN);
+-}
+-
+-module_init(if_usb_init_module);
+-module_exit(if_usb_exit_module);
++module_usb_driver(if_usb_driver);
+ 
+ MODULE_DESCRIPTION("8388 USB WLAN Driver");
+ MODULE_AUTHOR("Marvell International Ltd. and Red Hat, Inc.");
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0002-net-fix-assignment-of-0-1-to-bool-variables.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0002-net-fix-assignment-of-0-1-to-bool-variables.patch
new file mode 100644
index 0000000..80d84ed
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0002-net-fix-assignment-of-0-1-to-bool-variables.patch
@@ -0,0 +1,55 @@
+From f5bec38aff7e124933b0ad9b9c6bf0481d01bdfa Mon Sep 17 00:00:00 2001
+From: Rusty Russell <rusty@rustcorp.com.au>
+Date: Mon, 19 Dec 2011 13:56:45 +0000
+Subject: [PATCH 02/16] net: fix assignment of 0/1 to bool variables.
+
+DaveM said:
+   Please, this kind of stuff rots forever and not using bool properly
+   drives me crazy.
+
+Joe Perches <joe@perches.com> gave me the spatch script:
+
+	@@
+	bool b;
+	@@
+	-b = 0
+	+b = false
+	@@
+	bool b;
+	@@
+	-b = 1
+	+b = true
+
+I merely installed coccinelle, read the documentation and took credit.
+
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/wireless/libertas/if_cs.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
+index e269351..3f7bf4d 100644
+--- a/drivers/net/wireless/libertas/if_cs.c
++++ b/drivers/net/wireless/libertas/if_cs.c
+@@ -859,7 +859,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
+ 	 * Most of the libertas cards can do unaligned register access, but some
+ 	 * weird ones cannot. That's especially true for the CF8305 card.
+ 	 */
+-	card->align_regs = 0;
++	card->align_regs = false;
+ 
+ 	card->model = get_model(p_dev->manf_id, p_dev->card_id);
+ 	if (card->model == MODEL_UNKNOWN) {
+@@ -871,7 +871,7 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
+ 	/* Check if we have a current silicon */
+ 	prod_id = if_cs_read8(card, IF_CS_PRODUCT_ID);
+ 	if (card->model == MODEL_8305) {
+-		card->align_regs = 1;
++		card->align_regs = true;
+ 		if (prod_id < IF_CS_CF8305_B1_REV) {
+ 			pr_err("8305 rev B0 and older are not supported\n");
+ 			ret = -ENODEV;
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0003-switch-debugfs-to-umode_t.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0003-switch-debugfs-to-umode_t.patch
new file mode 100644
index 0000000..b60661c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0003-switch-debugfs-to-umode_t.patch
@@ -0,0 +1,26 @@
+From 5595b911189c8c9cac230dbe6f76c73352a57fcd Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Sun, 24 Jul 2011 04:33:43 -0400
+Subject: [PATCH 03/16] switch debugfs to umode_t
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+---
+ drivers/net/wireless/libertas/debugfs.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c
+index d8d8f0d..c192671 100644
+--- a/drivers/net/wireless/libertas/debugfs.c
++++ b/drivers/net/wireless/libertas/debugfs.c
+@@ -704,7 +704,7 @@ out_unlock:
+ 
+ struct lbs_debugfs_files {
+ 	const char *name;
+-	int perm;
++	umode_t perm;
+ 	struct file_operations fops;
+ };
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0004-drivers-net-Remove-unnecessary-k.alloc-v.alloc-OOM-m.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0004-drivers-net-Remove-unnecessary-k.alloc-v.alloc-OOM-m.patch
new file mode 100644
index 0000000..2f034d1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0004-drivers-net-Remove-unnecessary-k.alloc-v.alloc-OOM-m.patch
@@ -0,0 +1,54 @@
+From 018746aab6a8f31b27788607c0045489f2996424 Mon Sep 17 00:00:00 2001
+From: Joe Perches <joe@perches.com>
+Date: Sun, 29 Jan 2012 12:56:23 +0000
+Subject: [PATCH 04/16] drivers/net: Remove unnecessary k.alloc/v.alloc OOM
+ messages
+
+alloc failures use dump_stack so emitting an additional
+out-of-memory message is an unnecessary duplication.
+
+Remove the allocation failure messages.
+
+Signed-off-by: Joe Perches <joe@perches.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/wireless/libertas/if_cs.c  |    5 ++---
+ drivers/net/wireless/libertas/if_usb.c |    4 +---
+ 2 files changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
+index 3f7bf4d..234ee88 100644
+--- a/drivers/net/wireless/libertas/if_cs.c
++++ b/drivers/net/wireless/libertas/if_cs.c
+@@ -815,10 +815,9 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
+ 	lbs_deb_enter(LBS_DEB_CS);
+ 
+ 	card = kzalloc(sizeof(struct if_cs_card), GFP_KERNEL);
+-	if (!card) {
+-		pr_err("error in kzalloc\n");
++	if (!card)
+ 		goto out;
+-	}
++
+ 	card->p_dev = p_dev;
+ 	p_dev->priv = card;
+ 
+diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
+index b5fbbc7..74da5f1 100644
+--- a/drivers/net/wireless/libertas/if_usb.c
++++ b/drivers/net/wireless/libertas/if_usb.c
+@@ -261,10 +261,8 @@ static int if_usb_probe(struct usb_interface *intf,
+ 	udev = interface_to_usbdev(intf);
+ 
+ 	cardp = kzalloc(sizeof(struct if_usb_card), GFP_KERNEL);
+-	if (!cardp) {
+-		pr_err("Out of memory allocating private data\n");
++	if (!cardp)
+ 		goto error;
+-	}
+ 
+ 	setup_timer(&cardp->fw_timeout, if_usb_fw_timeo, (unsigned long)cardp);
+ 	init_waitqueue_head(&cardp->fw_wq);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0005-libertas-remove-dump_survey-implementation.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0005-libertas-remove-dump_survey-implementation.patch
new file mode 100644
index 0000000..d574fde
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0005-libertas-remove-dump_survey-implementation.patch
@@ -0,0 +1,80 @@
+From 5613011f4fa76a08aab30731557cc91699407d11 Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Wed, 14 Mar 2012 22:34:33 +0000
+Subject: [PATCH 05/16] libertas: remove dump_survey implementation
+
+libertas provides a dump_survey implementation based on reading of
+a RSSI value. However, this RSSI value is calculated based on the
+last received beacon from the associated AP - it is not a good
+way of surveying a channel in general, and even causes an error
+if the card is not associated to a network.
+
+As this is not appropriate as a survey, remove it. This fixes an
+issue where something in userspace is repeatedly calling site-survey
+during boot, resulting in many repeated errors as the RSSI value cannot
+be read before associating.
+
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/cfg.c |   37 -----------------------------------
+ 1 file changed, 37 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c
+index db64ef1..72e2c8e 100644
+--- a/drivers/net/wireless/libertas/cfg.c
++++ b/drivers/net/wireless/libertas/cfg.c
+@@ -1628,42 +1628,6 @@ static int lbs_cfg_get_station(struct wiphy *wiphy, struct net_device *dev,
+ 
+ 
+ /*
+- * "Site survey", here just current channel and noise level
+- */
+-
+-static int lbs_get_survey(struct wiphy *wiphy, struct net_device *dev,
+-	int idx, struct survey_info *survey)
+-{
+-	struct lbs_private *priv = wiphy_priv(wiphy);
+-	s8 signal, noise;
+-	int ret;
+-
+-	if (dev == priv->mesh_dev)
+-		return -EOPNOTSUPP;
+-
+-	if (idx != 0)
+-		ret = -ENOENT;
+-
+-	lbs_deb_enter(LBS_DEB_CFG80211);
+-
+-	survey->channel = ieee80211_get_channel(wiphy,
+-		ieee80211_channel_to_frequency(priv->channel,
+-					       IEEE80211_BAND_2GHZ));
+-
+-	ret = lbs_get_rssi(priv, &signal, &noise);
+-	if (ret == 0) {
+-		survey->filled = SURVEY_INFO_NOISE_DBM;
+-		survey->noise = noise;
+-	}
+-
+-	lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
+-	return ret;
+-}
+-
+-
+-
+-
+-/*
+  * Change interface
+  */
+ 
+@@ -2063,7 +2027,6 @@ static struct cfg80211_ops lbs_cfg80211_ops = {
+ 	.del_key = lbs_cfg_del_key,
+ 	.set_default_key = lbs_cfg_set_default_key,
+ 	.get_station = lbs_cfg_get_station,
+-	.dump_survey = lbs_get_survey,
+ 	.change_virtual_intf = lbs_change_intf,
+ 	.join_ibss = lbs_join_ibss,
+ 	.leave_ibss = lbs_leave_ibss,
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0006-wireless-libertas-remove-redundant-NULL-tests-before.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0006-wireless-libertas-remove-redundant-NULL-tests-before.patch
new file mode 100644
index 0000000..3927d6e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0006-wireless-libertas-remove-redundant-NULL-tests-before.patch
@@ -0,0 +1,95 @@
+From ae3df364b3ec34ab314bcd058e1d3ae86bb8c16f Mon Sep 17 00:00:00 2001
+From: Jesper Juhl <jj@chaosbits.net>
+Date: Mon, 9 Apr 2012 22:51:07 +0200
+Subject: [PATCH 06/16] wireless, libertas: remove redundant NULL tests before
+ calling release_firmware()
+
+release_firmware() tests for, and deals gracefully with, NULL
+pointers. Remove redundant explicit tests before calling the function.
+
+Signed-off-by: Jesper Juhl <jj@chaosbits.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/if_cs.c   |    6 ++----
+ drivers/net/wireless/libertas/if_sdio.c |    6 ++----
+ drivers/net/wireless/libertas/if_spi.c  |    6 ++----
+ drivers/net/wireless/libertas/main.c    |   12 ++++--------
+ 4 files changed, 10 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
+index 234ee88..171a06b 100644
+--- a/drivers/net/wireless/libertas/if_cs.c
++++ b/drivers/net/wireless/libertas/if_cs.c
+@@ -951,10 +951,8 @@ out2:
+ out1:
+ 	pcmcia_disable_device(p_dev);
+ out:
+-	if (helper)
+-		release_firmware(helper);
+-	if (mainfw)
+-		release_firmware(mainfw);
++	release_firmware(helper);
++	release_firmware(mainfw);
+ 
+ 	lbs_deb_leave_args(LBS_DEB_CS, "ret %d", ret);
+ 	return ret;
+diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
+index 9804ebc..15bfe2f 100644
+--- a/drivers/net/wireless/libertas/if_sdio.c
++++ b/drivers/net/wireless/libertas/if_sdio.c
+@@ -751,10 +751,8 @@ success:
+ 	ret = 0;
+ 
+ out:
+-	if (helper)
+-		release_firmware(helper);
+-	if (mainfw)
+-		release_firmware(mainfw);
++	release_firmware(helper);
++	release_firmware(mainfw);
+ 
+ 	lbs_deb_leave_args(LBS_DEB_SDIO, "ret %d", ret);
+ 	return ret;
+diff --git a/drivers/net/wireless/libertas/if_spi.c b/drivers/net/wireless/libertas/if_spi.c
+index 728baa4..46a668e 100644
+--- a/drivers/net/wireless/libertas/if_spi.c
++++ b/drivers/net/wireless/libertas/if_spi.c
+@@ -1095,10 +1095,8 @@ static int if_spi_init_card(struct if_spi_card *card)
+ 		goto out;
+ 
+ out:
+-	if (helper)
+-		release_firmware(helper);
+-	if (mainfw)
+-		release_firmware(mainfw);
++	release_firmware(helper);
++	release_firmware(mainfw);
+ 
+ 	lbs_deb_leave_args(LBS_DEB_SPI, "err %d\n", err);
+ 
+diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
+index 957681d..3b81b70 100644
+--- a/drivers/net/wireless/libertas/main.c
++++ b/drivers/net/wireless/libertas/main.c
+@@ -1269,14 +1269,10 @@ int lbs_get_firmware(struct device *dev, const char *user_helper,
+ 
+   fail:
+ 	/* Failed */
+-	if (*helper) {
+-		release_firmware(*helper);
+-		*helper = NULL;
+-	}
+-	if (*mainfw) {
+-		release_firmware(*mainfw);
+-		*mainfw = NULL;
+-	}
++	release_firmware(*helper);
++	*helper = NULL;
++	release_firmware(*mainfw);
++	*mainfw = NULL;
+ 
+ 	return -ENOENT;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0007-libertas-fix-signedness-bug-in-lbs_auth_to_authtype.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0007-libertas-fix-signedness-bug-in-lbs_auth_to_authtype.patch
new file mode 100644
index 0000000..3a31eb7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0007-libertas-fix-signedness-bug-in-lbs_auth_to_authtype.patch
@@ -0,0 +1,48 @@
+From 01e8e6be47e98db59320a593d2854b8bcaad7aca Mon Sep 17 00:00:00 2001
+From: Amitkumar Karwar <akarwar@marvell.com>
+Date: Wed, 28 Mar 2012 11:38:01 -0700
+Subject: [PATCH 07/16] libertas: fix signedness bug in lbs_auth_to_authtype()
+
+Return type for lbs_auth_to_authtype() is changed from "u8" to
+"int" to return negative error code correctly.
+Also an error check is added in connect handler for invalid auth
+type.
+
+Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
+Signed-off-by: Kiran Divekar <dkiran@marvell.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/cfg.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c
+index 72e2c8e..d5b2177 100644
+--- a/drivers/net/wireless/libertas/cfg.c
++++ b/drivers/net/wireless/libertas/cfg.c
+@@ -103,7 +103,7 @@ static const u32 cipher_suites[] = {
+  * Convert NL80211's auth_type to the one from Libertas, see chapter 5.9.1
+  * in the firmware spec
+  */
+-static u8 lbs_auth_to_authtype(enum nl80211_auth_type auth_type)
++static int lbs_auth_to_authtype(enum nl80211_auth_type auth_type)
+ {
+ 	int ret = -ENOTSUPP;
+ 
+@@ -1408,7 +1408,12 @@ static int lbs_cfg_connect(struct wiphy *wiphy, struct net_device *dev,
+ 		goto done;
+ 	}
+ 
+-	lbs_set_authtype(priv, sme);
++	ret = lbs_set_authtype(priv, sme);
++	if (ret == -ENOTSUPP) {
++		wiphy_err(wiphy, "unsupported authtype 0x%x\n", sme->auth_type);
++		goto done;
++	}
++
+ 	lbs_set_radio(priv, preamble, 1);
+ 
+ 	/* Do the actual association */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0008-drivers-net-wireless-libertas-if_usb.c-add-missing-d.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0008-drivers-net-wireless-libertas-if_usb.c-add-missing-d.patch
new file mode 100644
index 0000000..302d091
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0008-drivers-net-wireless-libertas-if_usb.c-add-missing-d.patch
@@ -0,0 +1,35 @@
+From c180cacfac2411fa690d5afbb983b53030102a3e Mon Sep 17 00:00:00 2001
+From: Julia Lawall <Julia.Lawall@lip6.fr>
+Date: Mon, 16 Apr 2012 17:44:00 +0200
+Subject: [PATCH 08/16] drivers/net/wireless/libertas/if_usb.c: add missing
+ debugging code
+
+Add a corresponding leave call on error failure.
+
+Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/if_usb.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
+index 74da5f1..ce4938d 100644
+--- a/drivers/net/wireless/libertas/if_usb.c
++++ b/drivers/net/wireless/libertas/if_usb.c
+@@ -1128,8 +1128,10 @@ static int if_usb_suspend(struct usb_interface *intf, pm_message_t message)
+ 
+ 	lbs_deb_enter(LBS_DEB_USB);
+ 
+-	if (priv->psstate != PS_STATE_FULL_POWER)
+-		return -1;
++	if (priv->psstate != PS_STATE_FULL_POWER) {
++		ret = -1;
++		goto out;
++	}
+ 
+ #ifdef CONFIG_OLPC
+ 	if (machine_is_olpc()) {
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0009-libertas-Firmware-loading-simplifications.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0009-libertas-Firmware-loading-simplifications.patch
new file mode 100644
index 0000000..0a97c96
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0009-libertas-Firmware-loading-simplifications.patch
@@ -0,0 +1,618 @@
+From d9087fc723bf7947eb149fb657072a8b3f96a532 Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Mon, 16 Apr 2012 23:52:42 +0100
+Subject: [PATCH 09/16] libertas: Firmware loading simplifications
+
+Remove the ability to pass module parameters with firmware filenames
+for USB and SDIO interfaces.
+
+Remove the ability to pass custom "user" filenames to lbs_get_firmware().
+
+Remove the ability to reprogram internal device memory with a different
+firmware from the USB driver (we don't know of any users), and simplify
+the OLPC firmware loading quirk to simply placing the OLPC firmware
+at the top of the list (we don't know of any users other than OLPC).
+
+Move lbs_get_firmware() into its own file.
+
+These simplifications should have no real-life effect but make the
+upcoming transition to asynchronous firmware loading considerably less
+painful.
+
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/Makefile   |    1 +
+ drivers/net/wireless/libertas/decl.h     |    3 +-
+ drivers/net/wireless/libertas/firmware.c |   79 ++++++++++++++
+ drivers/net/wireless/libertas/if_cs.c    |    4 +-
+ drivers/net/wireless/libertas/if_sdio.c  |   25 +----
+ drivers/net/wireless/libertas/if_spi.c   |    5 +-
+ drivers/net/wireless/libertas/if_usb.c   |  169 ++----------------------------
+ drivers/net/wireless/libertas/main.c     |  101 ------------------
+ 8 files changed, 94 insertions(+), 293 deletions(-)
+ create mode 100644 drivers/net/wireless/libertas/firmware.c
+
+diff --git a/drivers/net/wireless/libertas/Makefile b/drivers/net/wireless/libertas/Makefile
+index f7d01bf..eac72f7 100644
+--- a/drivers/net/wireless/libertas/Makefile
++++ b/drivers/net/wireless/libertas/Makefile
+@@ -6,6 +6,7 @@ libertas-y += ethtool.o
+ libertas-y += main.o
+ libertas-y += rx.o
+ libertas-y += tx.o
++libertas-y += firmware.o
+ libertas-$(CONFIG_LIBERTAS_MESH) += mesh.o
+ 
+ usb8xxx-objs += if_usb.o
+diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h
+index bc951ab..2fb2e31 100644
+--- a/drivers/net/wireless/libertas/decl.h
++++ b/drivers/net/wireless/libertas/decl.h
+@@ -66,8 +66,7 @@ int lbs_exit_auto_deep_sleep(struct lbs_private *priv);
+ u32 lbs_fw_index_to_data_rate(u8 index);
+ u8 lbs_data_rate_to_fw_index(u32 rate);
+ 
+-int lbs_get_firmware(struct device *dev, const char *user_helper,
+-			const char *user_mainfw, u32 card_model,
++int lbs_get_firmware(struct device *dev, u32 card_model,
+ 			const struct lbs_fw_table *fw_table,
+ 			const struct firmware **helper,
+ 			const struct firmware **mainfw);
+diff --git a/drivers/net/wireless/libertas/firmware.c b/drivers/net/wireless/libertas/firmware.c
+new file mode 100644
+index 0000000..0c8c845
+--- /dev/null
++++ b/drivers/net/wireless/libertas/firmware.c
+@@ -0,0 +1,79 @@
++/*
++ * Firmware loading and handling functions.
++ */
++
++#include <linux/firmware.h>
++#include <linux/module.h>
++
++#include "decl.h"
++
++/**
++ *  lbs_get_firmware - Retrieves two-stage firmware
++ *
++ *  @dev:     	A pointer to &device structure
++ *  @card_model: Bus-specific card model ID used to filter firmware table
++ *		elements
++ *  @fw_table:	Table of firmware file names and device model numbers
++ *		terminated by an entry with a NULL helper name
++ *  @helper:	On success, the helper firmware; caller must free
++ *  @mainfw:	On success, the main firmware; caller must free
++ *
++ *  returns:		0 on success, non-zero on failure
++ */
++int lbs_get_firmware(struct device *dev, u32 card_model,
++			const struct lbs_fw_table *fw_table,
++			const struct firmware **helper,
++			const struct firmware **mainfw)
++{
++	const struct lbs_fw_table *iter;
++	int ret;
++
++	BUG_ON(helper == NULL);
++	BUG_ON(mainfw == NULL);
++
++	/* Search for firmware to use from the table. */
++	iter = fw_table;
++	while (iter && iter->helper) {
++		if (iter->model != card_model)
++			goto next;
++
++		if (*helper == NULL) {
++			ret = request_firmware(helper, iter->helper, dev);
++			if (ret)
++				goto next;
++
++			/* If the device has one-stage firmware (ie cf8305) and
++			 * we've got it then we don't need to bother with the
++			 * main firmware.
++			 */
++			if (iter->fwname == NULL)
++				return 0;
++		}
++
++		if (*mainfw == NULL) {
++			ret = request_firmware(mainfw, iter->fwname, dev);
++			if (ret) {
++				/* Clear the helper to ensure we don't have
++				 * mismatched firmware pairs.
++				 */
++				release_firmware(*helper);
++				*helper = NULL;
++			}
++		}
++
++		if (*helper && *mainfw)
++			return 0;
++
++  next:
++		iter++;
++	}
++
++	/* Failed */
++	release_firmware(*helper);
++	*helper = NULL;
++	release_firmware(*mainfw);
++	*mainfw = NULL;
++
++	return -ENOENT;
++}
++EXPORT_SYMBOL_GPL(lbs_get_firmware);
+diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
+index 171a06b..cee5052 100644
+--- a/drivers/net/wireless/libertas/if_cs.c
++++ b/drivers/net/wireless/libertas/if_cs.c
+@@ -890,8 +890,8 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
+ 		goto out2;
+ 	}
+ 
+-	ret = lbs_get_firmware(&p_dev->dev, NULL, NULL, card->model,
+-				&fw_table[0], &helper, &mainfw);
++	ret = lbs_get_firmware(&p_dev->dev, card->model, &fw_table[0],
++				&helper, &mainfw);
+ 	if (ret) {
+ 		pr_err("failed to find firmware (%d)\n", ret);
+ 		goto out2;
+diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
+index 15bfe2f..6590feb 100644
+--- a/drivers/net/wireless/libertas/if_sdio.c
++++ b/drivers/net/wireless/libertas/if_sdio.c
+@@ -65,12 +65,6 @@ static void if_sdio_interrupt(struct sdio_func *func);
+  */
+ static u8 user_rmmod;
+ 
+-static char *lbs_helper_name = NULL;
+-module_param_named(helper_name, lbs_helper_name, charp, 0644);
+-
+-static char *lbs_fw_name = NULL;
+-module_param_named(fw_name, lbs_fw_name, charp, 0644);
+-
+ static const struct sdio_device_id if_sdio_ids[] = {
+ 	{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL,
+ 			SDIO_DEVICE_ID_MARVELL_LIBERTAS) },
+@@ -124,11 +118,6 @@ struct if_sdio_card {
+ 	unsigned long		ioport;
+ 	unsigned int		scratch_reg;
+ 
+-	const char		*helper;
+-	const char		*firmware;
+-	bool			helper_allocated;
+-	bool			firmware_allocated;
+-
+ 	u8			buffer[65536] __attribute__((aligned(4)));
+ 
+ 	spinlock_t		lock;
+@@ -725,8 +714,8 @@ static int if_sdio_prog_firmware(struct if_sdio_card *card)
+ 		goto success;
+ 	}
+ 
+-	ret = lbs_get_firmware(&card->func->dev, lbs_helper_name, lbs_fw_name,
+-				card->model, &fw_table[0], &helper, &mainfw);
++	ret = lbs_get_firmware(&card->func->dev, card->model, &fw_table[0],
++				&helper, &mainfw);
+ 	if (ret) {
+ 		pr_err("failed to find firmware (%d)\n", ret);
+ 		goto out;
+@@ -1242,10 +1231,6 @@ free:
+ 		kfree(packet);
+ 	}
+ 
+-	if (card->helper_allocated)
+-		kfree(card->helper);
+-	if (card->firmware_allocated)
+-		kfree(card->firmware);
+ 	kfree(card);
+ 
+ 	goto out;
+@@ -1293,12 +1278,6 @@ static void if_sdio_remove(struct sdio_func *func)
+ 		kfree(packet);
+ 	}
+ 
+-	if (card->helper_allocated)
+-		kfree(card->helper);
+-	if (card->firmware_allocated)
+-		kfree(card->firmware);
+-	kfree(card);
+-
+ 	lbs_deb_leave(LBS_DEB_SDIO);
+ }
+ 
+diff --git a/drivers/net/wireless/libertas/if_spi.c b/drivers/net/wireless/libertas/if_spi.c
+index 46a668e..56b0081 100644
+--- a/drivers/net/wireless/libertas/if_spi.c
++++ b/drivers/net/wireless/libertas/if_spi.c
+@@ -1064,9 +1064,8 @@ static int if_spi_init_card(struct if_spi_card *card)
+ 			goto out;
+ 		}
+ 
+-		err = lbs_get_firmware(&card->spi->dev, NULL, NULL,
+-					card->card_id, &fw_table[0], &helper,
+-					&mainfw);
++		err = lbs_get_firmware(&card->spi->dev, card->card_id,
++					&fw_table[0], &helper, &mainfw);
+ 		if (err) {
+ 			netdev_err(priv->dev, "failed to find firmware (%d)\n",
+ 				   err);
+diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
+index ce4938d..f29471b 100644
+--- a/drivers/net/wireless/libertas/if_usb.c
++++ b/drivers/net/wireless/libertas/if_usb.c
+@@ -29,9 +29,6 @@
+ 
+ #define MESSAGE_HEADER_LEN	4
+ 
+-static char *lbs_fw_name = NULL;
+-module_param_named(fw_name, lbs_fw_name, charp, 0644);
+-
+ MODULE_FIRMWARE("libertas/usb8388_v9.bin");
+ MODULE_FIRMWARE("libertas/usb8388_v5.bin");
+ MODULE_FIRMWARE("libertas/usb8388.bin");
+@@ -55,10 +52,7 @@ MODULE_DEVICE_TABLE(usb, if_usb_table);
+ 
+ static void if_usb_receive(struct urb *urb);
+ static void if_usb_receive_fwload(struct urb *urb);
+-static int __if_usb_prog_firmware(struct if_usb_card *cardp,
+-					const char *fwname, int cmd);
+-static int if_usb_prog_firmware(struct if_usb_card *cardp,
+-					const char *fwname, int cmd);
++static int if_usb_prog_firmware(struct if_usb_card *cardp);
+ static int if_usb_host_to_card(struct lbs_private *priv, uint8_t type,
+ 			       uint8_t *payload, uint16_t nb);
+ static int usb_tx_block(struct if_usb_card *cardp, uint8_t *payload,
+@@ -67,69 +61,6 @@ static void if_usb_free(struct if_usb_card *cardp);
+ static int if_usb_submit_rx_urb(struct if_usb_card *cardp);
+ static int if_usb_reset_device(struct if_usb_card *cardp);
+ 
+-/* sysfs hooks */
+-
+-/*
+- *  Set function to write firmware to device's persistent memory
+- */
+-static ssize_t if_usb_firmware_set(struct device *dev,
+-		struct device_attribute *attr, const char *buf, size_t count)
+-{
+-	struct lbs_private *priv = to_net_dev(dev)->ml_priv;
+-	struct if_usb_card *cardp = priv->card;
+-	int ret;
+-
+-	BUG_ON(buf == NULL);
+-
+-	ret = if_usb_prog_firmware(cardp, buf, BOOT_CMD_UPDATE_FW);
+-	if (ret == 0)
+-		return count;
+-
+-	return ret;
+-}
+-
+-/*
+- * lbs_flash_fw attribute to be exported per ethX interface through sysfs
+- * (/sys/class/net/ethX/lbs_flash_fw).  Use this like so to write firmware to
+- * the device's persistent memory:
+- * echo usb8388-5.126.0.p5.bin > /sys/class/net/ethX/lbs_flash_fw
+- */
+-static DEVICE_ATTR(lbs_flash_fw, 0200, NULL, if_usb_firmware_set);
+-
+-/**
+- * if_usb_boot2_set - write firmware to device's persistent memory
+- *
+- * @dev: target device
+- * @attr: device attributes
+- * @buf: firmware buffer to write
+- * @count: number of bytes to write
+- *
+- * returns: number of bytes written or negative error code
+- */
+-static ssize_t if_usb_boot2_set(struct device *dev,
+-		struct device_attribute *attr, const char *buf, size_t count)
+-{
+-	struct lbs_private *priv = to_net_dev(dev)->ml_priv;
+-	struct if_usb_card *cardp = priv->card;
+-	int ret;
+-
+-	BUG_ON(buf == NULL);
+-
+-	ret = if_usb_prog_firmware(cardp, buf, BOOT_CMD_UPDATE_BOOT2);
+-	if (ret == 0)
+-		return count;
+-
+-	return ret;
+-}
+-
+-/*
+- * lbs_flash_boot2 attribute to be exported per ethX interface through sysfs
+- * (/sys/class/net/ethX/lbs_flash_boot2).  Use this like so to write firmware
+- * to the device's persistent memory:
+- * echo usb8388-5.126.0.p5.bin > /sys/class/net/ethX/lbs_flash_boot2
+- */
+-static DEVICE_ATTR(lbs_flash_boot2, 0200, NULL, if_usb_boot2_set);
+-
+ /**
+  * if_usb_write_bulk_callback - callback function to handle the status
+  * of the URB
+@@ -314,13 +245,10 @@ static int if_usb_probe(struct usb_interface *intf,
+ 	}
+ 
+ 	/* Upload firmware */
+-	kparam_block_sysfs_write(fw_name);
+-	if (__if_usb_prog_firmware(cardp, lbs_fw_name, BOOT_CMD_FW_BY_USB)) {
+-		kparam_unblock_sysfs_write(fw_name);
++	if (if_usb_prog_firmware(cardp)) {
+ 		lbs_deb_usbd(&udev->dev, "FW upload failed\n");
+ 		goto err_prog_firmware;
+ 	}
+-	kparam_unblock_sysfs_write(fw_name);
+ 
+ 	if (!(priv = lbs_add_card(cardp, &intf->dev)))
+ 		goto err_prog_firmware;
+@@ -349,14 +277,6 @@ static int if_usb_probe(struct usb_interface *intf,
+ 	usb_get_dev(udev);
+ 	usb_set_intfdata(intf, cardp);
+ 
+-	if (device_create_file(&priv->dev->dev, &dev_attr_lbs_flash_fw))
+-		netdev_err(priv->dev,
+-			   "cannot register lbs_flash_fw attribute\n");
+-
+-	if (device_create_file(&priv->dev->dev, &dev_attr_lbs_flash_boot2))
+-		netdev_err(priv->dev,
+-			   "cannot register lbs_flash_boot2 attribute\n");
+-
+ 	/*
+ 	 * EHS_REMOVE_WAKEUP is not supported on all versions of the firmware.
+ 	 */
+@@ -389,9 +309,6 @@ static void if_usb_disconnect(struct usb_interface *intf)
+ 
+ 	lbs_deb_enter(LBS_DEB_MAIN);
+ 
+-	device_remove_file(&priv->dev->dev, &dev_attr_lbs_flash_boot2);
+-	device_remove_file(&priv->dev->dev, &dev_attr_lbs_flash_fw);
+-
+ 	cardp->surprise_removed = 1;
+ 
+ 	if (priv) {
+@@ -912,58 +829,12 @@ static int check_fwfile_format(const uint8_t *data, uint32_t totlen)
+ 	return ret;
+ }
+ 
+-
+-/**
+-*  if_usb_prog_firmware - programs the firmware subject to cmd
+-*
+-*  @cardp:	the if_usb_card descriptor
+-*  @fwname:	firmware or boot2 image file name
+-*  @cmd:	either BOOT_CMD_FW_BY_USB, BOOT_CMD_UPDATE_FW,
+-*		or BOOT_CMD_UPDATE_BOOT2.
+-*  returns:	0 or error code
+-*/
+-static int if_usb_prog_firmware(struct if_usb_card *cardp,
+-				const char *fwname, int cmd)
+-{
+-	struct lbs_private *priv = cardp->priv;
+-	unsigned long flags, caps;
+-	int ret;
+-
+-	caps = priv->fwcapinfo;
+-	if (((cmd == BOOT_CMD_UPDATE_FW) && !(caps & FW_CAPINFO_FIRMWARE_UPGRADE)) ||
+-	    ((cmd == BOOT_CMD_UPDATE_BOOT2) && !(caps & FW_CAPINFO_BOOT2_UPGRADE)))
+-		return -EOPNOTSUPP;
+-
+-	/* Ensure main thread is idle. */
+-	spin_lock_irqsave(&priv->driver_lock, flags);
+-	while (priv->cur_cmd != NULL || priv->dnld_sent != DNLD_RES_RECEIVED) {
+-		spin_unlock_irqrestore(&priv->driver_lock, flags);
+-		if (wait_event_interruptible(priv->waitq,
+-				(priv->cur_cmd == NULL &&
+-				priv->dnld_sent == DNLD_RES_RECEIVED))) {
+-			return -ERESTARTSYS;
+-		}
+-		spin_lock_irqsave(&priv->driver_lock, flags);
+-	}
+-	priv->dnld_sent = DNLD_BOOTCMD_SENT;
+-	spin_unlock_irqrestore(&priv->driver_lock, flags);
+-
+-	ret = __if_usb_prog_firmware(cardp, fwname, cmd);
+-
+-	spin_lock_irqsave(&priv->driver_lock, flags);
+-	priv->dnld_sent = DNLD_RES_RECEIVED;
+-	spin_unlock_irqrestore(&priv->driver_lock, flags);
+-
+-	wake_up(&priv->waitq);
+-
+-	return ret;
+-}
+-
+ /* table of firmware file names */
+ static const struct {
+ 	u32 model;
+ 	const char *fwname;
+ } fw_table[] = {
++	{ MODEL_8388, "libertas/usb8388_olpc.bin" },
+ 	{ MODEL_8388, "libertas/usb8388_v9.bin" },
+ 	{ MODEL_8388, "libertas/usb8388_v5.bin" },
+ 	{ MODEL_8388, "libertas/usb8388.bin" },
+@@ -971,35 +842,10 @@ static const struct {
+ 	{ MODEL_8682, "libertas/usb8682.bin" }
+ };
+ 
+-#ifdef CONFIG_OLPC
+-
+-static int try_olpc_fw(struct if_usb_card *cardp)
+-{
+-	int retval = -ENOENT;
+-
+-	/* try the OLPC firmware first; fall back to fw_table list */
+-	if (machine_is_olpc() && cardp->model == MODEL_8388)
+-		retval = request_firmware(&cardp->fw,
+-				"libertas/usb8388_olpc.bin", &cardp->udev->dev);
+-	return retval;
+-}
+-
+-#else
+-static int try_olpc_fw(struct if_usb_card *cardp) { return -ENOENT; }
+-#endif /* !CONFIG_OLPC */
+-
+-static int get_fw(struct if_usb_card *cardp, const char *fwname)
++static int get_fw(struct if_usb_card *cardp)
+ {
+ 	int i;
+ 
+-	/* Try user-specified firmware first */
+-	if (fwname)
+-		return request_firmware(&cardp->fw, fwname, &cardp->udev->dev);
+-
+-	/* Handle OLPC firmware */
+-	if (try_olpc_fw(cardp) == 0)
+-		return 0;
+-
+ 	/* Otherwise search for firmware to use */
+ 	for (i = 0; i < ARRAY_SIZE(fw_table); i++) {
+ 		if (fw_table[i].model != cardp->model)
+@@ -1012,8 +858,7 @@ static int get_fw(struct if_usb_card *cardp, const char *fwname)
+ 	return -ENOENT;
+ }
+ 
+-static int __if_usb_prog_firmware(struct if_usb_card *cardp,
+-					const char *fwname, int cmd)
++static int if_usb_prog_firmware(struct if_usb_card *cardp)
+ {
+ 	int i = 0;
+ 	static int reset_count = 10;
+@@ -1021,7 +866,7 @@ static int __if_usb_prog_firmware(struct if_usb_card *cardp,
+ 
+ 	lbs_deb_enter(LBS_DEB_USB);
+ 
+-	ret = get_fw(cardp, fwname);
++	ret = get_fw(cardp);
+ 	if (ret) {
+ 		pr_err("failed to find firmware (%d)\n", ret);
+ 		goto done;
+@@ -1053,7 +898,7 @@ restart:
+ 	do {
+ 		int j = 0;
+ 		i++;
+-		if_usb_issue_boot_command(cardp, cmd);
++		if_usb_issue_boot_command(cardp, BOOT_CMD_FW_BY_USB);
+ 		/* wait for command response */
+ 		do {
+ 			j++;
+diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
+index 3b81b70..fa09585 100644
+--- a/drivers/net/wireless/libertas/main.c
++++ b/drivers/net/wireless/libertas/main.c
+@@ -1177,107 +1177,6 @@ void lbs_notify_command_response(struct lbs_private *priv, u8 resp_idx)
+ }
+ EXPORT_SYMBOL_GPL(lbs_notify_command_response);
+ 
+-/**
+- *  lbs_get_firmware - Retrieves two-stage firmware
+- *
+- *  @dev:     	A pointer to &device structure
+- *  @user_helper: User-defined helper firmware file
+- *  @user_mainfw: User-defined main firmware file
+- *  @card_model: Bus-specific card model ID used to filter firmware table
+- *		elements
+- *  @fw_table:	Table of firmware file names and device model numbers
+- *		terminated by an entry with a NULL helper name
+- *  @helper:	On success, the helper firmware; caller must free
+- *  @mainfw:	On success, the main firmware; caller must free
+- *
+- *  returns:		0 on success, non-zero on failure
+- */
+-int lbs_get_firmware(struct device *dev, const char *user_helper,
+-			const char *user_mainfw, u32 card_model,
+-			const struct lbs_fw_table *fw_table,
+-			const struct firmware **helper,
+-			const struct firmware **mainfw)
+-{
+-	const struct lbs_fw_table *iter;
+-	int ret;
+-
+-	BUG_ON(helper == NULL);
+-	BUG_ON(mainfw == NULL);
+-
+-	/* Try user-specified firmware first */
+-	if (user_helper) {
+-		ret = request_firmware(helper, user_helper, dev);
+-		if (ret) {
+-			dev_err(dev, "couldn't find helper firmware %s\n",
+-				user_helper);
+-			goto fail;
+-		}
+-	}
+-	if (user_mainfw) {
+-		ret = request_firmware(mainfw, user_mainfw, dev);
+-		if (ret) {
+-			dev_err(dev, "couldn't find main firmware %s\n",
+-				user_mainfw);
+-			goto fail;
+-		}
+-	}
+-
+-	if (*helper && *mainfw)
+-		return 0;
+-
+-	/* Otherwise search for firmware to use.  If neither the helper or
+-	 * the main firmware were specified by the user, then we need to
+-	 * make sure that found helper & main are from the same entry in
+-	 * fw_table.
+-	 */
+-	iter = fw_table;
+-	while (iter && iter->helper) {
+-		if (iter->model != card_model)
+-			goto next;
+-
+-		if (*helper == NULL) {
+-			ret = request_firmware(helper, iter->helper, dev);
+-			if (ret)
+-				goto next;
+-
+-			/* If the device has one-stage firmware (ie cf8305) and
+-			 * we've got it then we don't need to bother with the
+-			 * main firmware.
+-			 */
+-			if (iter->fwname == NULL)
+-				return 0;
+-		}
+-
+-		if (*mainfw == NULL) {
+-			ret = request_firmware(mainfw, iter->fwname, dev);
+-			if (ret && !user_helper) {
+-				/* Clear the helper if it wasn't user-specified
+-				 * and the main firmware load failed, to ensure
+-				 * we don't have mismatched firmware pairs.
+-				 */
+-				release_firmware(*helper);
+-				*helper = NULL;
+-			}
+-		}
+-
+-		if (*helper && *mainfw)
+-			return 0;
+-
+-  next:
+-		iter++;
+-	}
+-
+-  fail:
+-	/* Failed */
+-	release_firmware(*helper);
+-	*helper = NULL;
+-	release_firmware(*mainfw);
+-	*mainfw = NULL;
+-
+-	return -ENOENT;
+-}
+-EXPORT_SYMBOL_GPL(lbs_get_firmware);
+-
+ static int __init lbs_init_module(void)
+ {
+ 	lbs_deb_enter(LBS_DEB_MAIN);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0010-libertas-harden-up-exit-paths.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0010-libertas-harden-up-exit-paths.patch
new file mode 100644
index 0000000..6560442
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0010-libertas-harden-up-exit-paths.patch
@@ -0,0 +1,46 @@
+From 0afc10c9a90bdda020d6a8c03e3bfbb1103cdc5e Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Mon, 16 Apr 2012 23:53:02 +0100
+Subject: [PATCH 10/16] libertas: harden-up exit paths
+
+These simple sanity check avoids extra complexity in error paths when
+moving to asynchronous firmware loading (which means the device may fail to
+init some time after its creation).
+
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/main.c |    9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
+index fa09585..7eaf992 100644
+--- a/drivers/net/wireless/libertas/main.c
++++ b/drivers/net/wireless/libertas/main.c
+@@ -1033,7 +1033,9 @@ void lbs_remove_card(struct lbs_private *priv)
+ 	lbs_deb_enter(LBS_DEB_MAIN);
+ 
+ 	lbs_remove_mesh(priv);
+-	lbs_scan_deinit(priv);
++
++	if (priv->wiphy_registered)
++		lbs_scan_deinit(priv);
+ 
+ 	/* worker thread destruction blocks on the in-flight command which
+ 	 * should have been cleared already in lbs_stop_card().
+@@ -1128,6 +1130,11 @@ void lbs_stop_card(struct lbs_private *priv)
+ 		goto out;
+ 	dev = priv->dev;
+ 
++	/* If the netdev isn't registered, it means that lbs_start_card() was
++	 * never called so we have nothing to do here. */
++	if (dev->reg_state != NETREG_REGISTERED)
++		goto out;
++
+ 	netif_stop_queue(dev);
+ 	netif_carrier_off(dev);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0011-libertas-add-asynchronous-firmware-loading-capabilit.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0011-libertas-add-asynchronous-firmware-loading-capabilit.patch
new file mode 100644
index 0000000..4a31410
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0011-libertas-add-asynchronous-firmware-loading-capabilit.patch
@@ -0,0 +1,269 @@
+From fb2e4573ebd25fff393594d8795bfd27bffee345 Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Mon, 16 Apr 2012 23:53:26 +0100
+Subject: [PATCH 11/16] libertas: add asynchronous firmware loading capability
+
+As described at
+http://article.gmane.org/gmane.linux.kernel.wireless.general/86084
+libertas is taking a long time to load because it loads firmware
+during module loading.
+
+Add a new API for interface drivers to load their firmware
+asynchronously. The same semantics of the firmware table are followed
+like before.
+
+Interface drivers will be converted in follow-up patches, then we can
+remove the old, synchronous firmware loading function.
+
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/decl.h     |    8 ++
+ drivers/net/wireless/libertas/dev.h      |   10 +++
+ drivers/net/wireless/libertas/firmware.c |  143 ++++++++++++++++++++++++++++++
+ drivers/net/wireless/libertas/main.c     |    3 +
+ 4 files changed, 164 insertions(+)
+
+diff --git a/drivers/net/wireless/libertas/decl.h b/drivers/net/wireless/libertas/decl.h
+index 2fb2e31..84a3aa7 100644
+--- a/drivers/net/wireless/libertas/decl.h
++++ b/drivers/net/wireless/libertas/decl.h
+@@ -19,6 +19,10 @@ struct lbs_fw_table {
+ };
+ 
+ struct lbs_private;
++typedef void (*lbs_fw_cb)(struct lbs_private *priv, int ret,
++		const struct firmware *helper, const struct firmware *mainfw);
++
++struct lbs_private;
+ struct sk_buff;
+ struct net_device;
+ struct cmd_ds_command;
+@@ -70,5 +74,9 @@ int lbs_get_firmware(struct device *dev, u32 card_model,
+ 			const struct lbs_fw_table *fw_table,
+ 			const struct firmware **helper,
+ 			const struct firmware **mainfw);
++int lbs_get_firmware_async(struct lbs_private *priv, struct device *device,
++			   u32 card_model, const struct lbs_fw_table *fw_table,
++			   lbs_fw_cb callback);
++void lbs_wait_for_firmware_load(struct lbs_private *priv);
+ 
+ #endif
+diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h
+index f3fd447..6720054 100644
+--- a/drivers/net/wireless/libertas/dev.h
++++ b/drivers/net/wireless/libertas/dev.h
+@@ -7,6 +7,7 @@
+ #define _LBS_DEV_H_
+ 
+ #include "defs.h"
++#include "decl.h"
+ #include "host.h"
+ 
+ #include <linux/kfifo.h>
+@@ -180,6 +181,15 @@ struct lbs_private {
+ 	wait_queue_head_t scan_q;
+ 	/* Whether the scan was initiated internally and not by cfg80211 */
+ 	bool internal_scan;
++
++	/* Firmware load */
++	u32 fw_model;
++	wait_queue_head_t fw_waitq;
++	struct device *fw_device;
++	const struct firmware *helper_fw;
++	const struct lbs_fw_table *fw_table;
++	const struct lbs_fw_table *fw_iter;
++	lbs_fw_cb fw_callback;
+ };
+ 
+ extern struct cmd_confirm_sleep confirm_sleep;
+diff --git a/drivers/net/wireless/libertas/firmware.c b/drivers/net/wireless/libertas/firmware.c
+index 0c8c845..cd23f1a 100644
+--- a/drivers/net/wireless/libertas/firmware.c
++++ b/drivers/net/wireless/libertas/firmware.c
+@@ -3,10 +3,151 @@
+  */
+ 
+ #include <linux/firmware.h>
++#include <linux/firmware.h>
+ #include <linux/module.h>
+ 
++#include "dev.h"
+ #include "decl.h"
+ 
++static void load_next_firmware_from_table(struct lbs_private *private);
++
++static void lbs_fw_loaded(struct lbs_private *priv, int ret,
++	const struct firmware *helper, const struct firmware *mainfw)
++{
++	unsigned long flags;
++
++	lbs_deb_fw("firmware load complete, code %d\n", ret);
++
++	/* User must free helper/mainfw */
++	priv->fw_callback(priv, ret, helper, mainfw);
++
++	spin_lock_irqsave(&priv->driver_lock, flags);
++	priv->fw_callback = NULL;
++	wake_up(&priv->fw_waitq);
++	spin_unlock_irqrestore(&priv->driver_lock, flags);
++}
++
++static void do_load_firmware(struct lbs_private *priv, const char *name,
++	void (*cb)(const struct firmware *fw, void *context))
++{
++	int ret;
++
++	lbs_deb_fw("Requesting %s\n", name);
++	ret = request_firmware_nowait(THIS_MODULE, true, name,
++			priv->fw_device, GFP_KERNEL, priv, cb);
++	if (ret) {
++		lbs_deb_fw("request_firmware_nowait error %d\n", ret);
++		lbs_fw_loaded(priv, ret, NULL, NULL);
++	}
++}
++
++static void main_firmware_cb(const struct firmware *firmware, void *context)
++{
++	struct lbs_private *priv = context;
++
++	if (!firmware) {
++		/* Failed to find firmware: try next table entry */
++		load_next_firmware_from_table(priv);
++		return;
++	}
++
++	/* Firmware found! */
++	lbs_fw_loaded(priv, 0, priv->helper_fw, firmware);
++}
++
++static void helper_firmware_cb(const struct firmware *firmware, void *context)
++{
++	struct lbs_private *priv = context;
++
++	if (!firmware) {
++		/* Failed to find firmware: try next table entry */
++		load_next_firmware_from_table(priv);
++		return;
++	}
++
++	/* Firmware found! */
++	if (priv->fw_iter->fwname) {
++		priv->helper_fw = firmware;
++		do_load_firmware(priv, priv->fw_iter->fwname, main_firmware_cb);
++	} else {
++		/* No main firmware needed for this helper --> success! */
++		lbs_fw_loaded(priv, 0, firmware, NULL);
++	}
++}
++
++static void load_next_firmware_from_table(struct lbs_private *priv)
++{
++	const struct lbs_fw_table *iter;
++
++	if (!priv->fw_iter)
++		iter = priv->fw_table;
++	else
++		iter = ++priv->fw_iter;
++
++	if (priv->helper_fw) {
++		release_firmware(priv->helper_fw);
++		priv->helper_fw = NULL;
++	}
++
++next:
++	if (!iter->helper) {
++		/* End of table hit. */
++		lbs_fw_loaded(priv, -ENOENT, NULL, NULL);
++		return;
++	}
++
++	if (iter->model != priv->fw_model) {
++		iter++;
++		goto next;
++	}
++
++	priv->fw_iter = iter;
++	do_load_firmware(priv, iter->helper, helper_firmware_cb);
++}
++
++void lbs_wait_for_firmware_load(struct lbs_private *priv)
++{
++	wait_event(priv->fw_waitq, priv->fw_callback == NULL);
++}
++
++/**
++ *  lbs_get_firmware_async - Retrieves firmware asynchronously. Can load
++ *  either a helper firmware and a main firmware (2-stage), or just the helper.
++ *
++ *  @priv:      Pointer to lbs_private instance
++ *  @dev:     	A pointer to &device structure
++ *  @card_model: Bus-specific card model ID used to filter firmware table
++ *		elements
++ *  @fw_table:	Table of firmware file names and device model numbers
++ *		terminated by an entry with a NULL helper name
++ *	@callback: User callback to invoke when firmware load succeeds or fails.
++ */
++int lbs_get_firmware_async(struct lbs_private *priv, struct device *device,
++			    u32 card_model, const struct lbs_fw_table *fw_table,
++			    lbs_fw_cb callback)
++{
++	unsigned long flags;
++
++	spin_lock_irqsave(&priv->driver_lock, flags);
++	if (priv->fw_callback) {
++		lbs_deb_fw("firmware load already in progress\n");
++		spin_unlock_irqrestore(&priv->driver_lock, flags);
++		return -EBUSY;
++	}
++
++	priv->fw_device = device;
++	priv->fw_callback = callback;
++	priv->fw_table = fw_table;
++	priv->fw_iter = NULL;
++	priv->fw_model = card_model;
++	spin_unlock_irqrestore(&priv->driver_lock, flags);
++
++	lbs_deb_fw("Starting async firmware load\n");
++	load_next_firmware_from_table(priv);
++	return 0;
++}
++EXPORT_SYMBOL_GPL(lbs_get_firmware_async);
++
+ /**
+  *  lbs_get_firmware - Retrieves two-stage firmware
+  *
+@@ -18,6 +159,8 @@
+  *  @helper:	On success, the helper firmware; caller must free
+  *  @mainfw:	On success, the main firmware; caller must free
+  *
++ * Deprecated: use lbs_get_firmware_async() instead.
++ *
+  *  returns:		0 on success, non-zero on failure
+  */
+ int lbs_get_firmware(struct device *dev, u32 card_model,
+diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
+index 7eaf992..e96ee0a 100644
+--- a/drivers/net/wireless/libertas/main.c
++++ b/drivers/net/wireless/libertas/main.c
+@@ -878,6 +878,7 @@ static int lbs_init_adapter(struct lbs_private *priv)
+ 	priv->is_host_sleep_configured = 0;
+ 	priv->is_host_sleep_activated = 0;
+ 	init_waitqueue_head(&priv->host_sleep_q);
++	init_waitqueue_head(&priv->fw_waitq);
+ 	mutex_init(&priv->lock);
+ 
+ 	setup_timer(&priv->command_timer, lbs_cmd_timeout_handler,
+@@ -1037,6 +1038,8 @@ void lbs_remove_card(struct lbs_private *priv)
+ 	if (priv->wiphy_registered)
+ 		lbs_scan_deinit(priv);
+ 
++	lbs_wait_for_firmware_load(priv);
++
+ 	/* worker thread destruction blocks on the in-flight command which
+ 	 * should have been cleared already in lbs_stop_card().
+ 	 */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0012-libertas-SDIO-convert-to-asynchronous-firmware-loadi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0012-libertas-SDIO-convert-to-asynchronous-firmware-loadi.patch
new file mode 100644
index 0000000..f02684e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0012-libertas-SDIO-convert-to-asynchronous-firmware-loadi.patch
@@ -0,0 +1,320 @@
+From f7b34bebb4f8b39535cf5decdab7134ffdf69186 Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Mon, 16 Apr 2012 23:53:43 +0100
+Subject: [PATCH 12/16] libertas SDIO: convert to asynchronous firmware
+ loading
+
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/if_sdio.c |  206 ++++++++++++++++++-------------
+ 1 file changed, 121 insertions(+), 85 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
+index 6590feb..76caeba 100644
+--- a/drivers/net/wireless/libertas/if_sdio.c
++++ b/drivers/net/wireless/libertas/if_sdio.c
+@@ -117,6 +117,8 @@ struct if_sdio_card {
+ 	int			model;
+ 	unsigned long		ioport;
+ 	unsigned int		scratch_reg;
++	bool			started;
++	wait_queue_head_t	pwron_waitq;
+ 
+ 	u8			buffer[65536] __attribute__((aligned(4)));
+ 
+@@ -129,6 +131,9 @@ struct if_sdio_card {
+ 	u8			rx_unit;
+ };
+ 
++static void if_sdio_finish_power_on(struct if_sdio_card *card);
++static int if_sdio_power_off(struct if_sdio_card *card);
++
+ /********************************************************************/
+ /* I/O                                                              */
+ /********************************************************************/
+@@ -669,12 +674,39 @@ out:
+ 	return ret;
+ }
+ 
++static void if_sdio_do_prog_firmware(struct lbs_private *priv, int ret,
++				     const struct firmware *helper,
++				     const struct firmware *mainfw)
++{
++	struct if_sdio_card *card = priv->card;
++
++	if (ret) {
++		pr_err("failed to find firmware (%d)\n", ret);
++		return;
++	}
++
++	ret = if_sdio_prog_helper(card, helper);
++	if (ret)
++		goto out;
++
++	lbs_deb_sdio("Helper firmware loaded\n");
++
++	ret = if_sdio_prog_real(card, mainfw);
++	if (ret)
++		goto out;
++
++	lbs_deb_sdio("Firmware loaded\n");
++	if_sdio_finish_power_on(card);
++
++out:
++	release_firmware(helper);
++	release_firmware(mainfw);
++}
++
+ static int if_sdio_prog_firmware(struct if_sdio_card *card)
+ {
+ 	int ret;
+ 	u16 scratch;
+-	const struct firmware *helper = NULL;
+-	const struct firmware *mainfw = NULL;
+ 
+ 	lbs_deb_enter(LBS_DEB_SDIO);
+ 
+@@ -708,41 +740,18 @@ static int if_sdio_prog_firmware(struct if_sdio_card *card)
+ 	 */
+ 	if (scratch == IF_SDIO_FIRMWARE_OK) {
+ 		lbs_deb_sdio("firmware already loaded\n");
+-		goto success;
++		if_sdio_finish_power_on(card);
++		return 0;
+ 	} else if ((card->model == MODEL_8686) && (scratch & 0x7fff)) {
+ 		lbs_deb_sdio("firmware may be running\n");
+-		goto success;
+-	}
+-
+-	ret = lbs_get_firmware(&card->func->dev, card->model, &fw_table[0],
+-				&helper, &mainfw);
+-	if (ret) {
+-		pr_err("failed to find firmware (%d)\n", ret);
+-		goto out;
++		if_sdio_finish_power_on(card);
++		return 0;
+ 	}
+ 
+-	ret = if_sdio_prog_helper(card, helper);
+-	if (ret)
+-		goto out;
+-
+-	lbs_deb_sdio("Helper firmware loaded\n");
+-
+-	ret = if_sdio_prog_real(card, mainfw);
+-	if (ret)
+-		goto out;
+-
+-	lbs_deb_sdio("Firmware loaded\n");
+-
+-success:
+-	sdio_claim_host(card->func);
+-	sdio_set_block_size(card->func, IF_SDIO_BLOCK_SIZE);
+-	sdio_release_host(card->func);
+-	ret = 0;
++	ret = lbs_get_firmware_async(card->priv, &card->func->dev, card->model,
++				     fw_table, if_sdio_do_prog_firmware);
+ 
+ out:
+-	release_firmware(helper);
+-	release_firmware(mainfw);
+-
+ 	lbs_deb_leave_args(LBS_DEB_SDIO, "ret %d", ret);
+ 	return ret;
+ }
+@@ -751,55 +760,15 @@ out:
+ /* Power management                                                 */
+ /********************************************************************/
+ 
+-static int if_sdio_power_on(struct if_sdio_card *card)
++/* Finish power on sequence (after firmware is loaded) */
++static void if_sdio_finish_power_on(struct if_sdio_card *card)
+ {
+ 	struct sdio_func *func = card->func;
+ 	struct lbs_private *priv = card->priv;
+-	struct mmc_host *host = func->card->host;
+ 	int ret;
+ 
+ 	sdio_claim_host(func);
+-
+-	ret = sdio_enable_func(func);
+-	if (ret)
+-		goto release;
+-
+-	/* For 1-bit transfers to the 8686 model, we need to enable the
+-	 * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0
+-	 * bit to allow access to non-vendor registers. */
+-	if ((card->model == MODEL_8686) &&
+-	    (host->caps & MMC_CAP_SDIO_IRQ) &&
+-	    (host->ios.bus_width == MMC_BUS_WIDTH_1)) {
+-		u8 reg;
+-
+-		func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
+-		reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret);
+-		if (ret)
+-			goto disable;
+-
+-		reg |= SDIO_BUS_ECSI;
+-		sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret);
+-		if (ret)
+-			goto disable;
+-	}
+-
+-	card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret);
+-	if (ret)
+-		goto disable;
+-
+-	card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 1, &ret) << 8;
+-	if (ret)
+-		goto disable;
+-
+-	card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 2, &ret) << 16;
+-	if (ret)
+-		goto disable;
+-
+-	sdio_release_host(func);
+-	ret = if_sdio_prog_firmware(card);
+-	sdio_claim_host(func);
+-	if (ret)
+-		goto disable;
++	sdio_set_block_size(card->func, IF_SDIO_BLOCK_SIZE);
+ 
+ 	/*
+ 	 * Get rx_unit if the chip is SD8688 or newer.
+@@ -824,7 +793,7 @@ static int if_sdio_power_on(struct if_sdio_card *card)
+ 	 */
+ 	ret = sdio_claim_irq(func, if_sdio_interrupt);
+ 	if (ret)
+-		goto disable;
++		goto release;
+ 
+ 	/*
+ 	 * Enable interrupts now that everything is set up
+@@ -850,11 +819,79 @@ static int if_sdio_power_on(struct if_sdio_card *card)
+ 	}
+ 
+ 	priv->fw_ready = 1;
++	wake_up(&card->pwron_waitq);
+ 
+-	return 0;
++	if (!card->started) {
++		ret = lbs_start_card(priv);
++		if_sdio_power_off(card);
++		if (ret == 0) {
++			card->started = true;
++			/* Tell PM core that we don't need the card to be
++			 * powered now */
++			pm_runtime_put_noidle(&func->dev);
++		}
++	}
++
++	return;
+ 
+ release_irq:
+ 	sdio_release_irq(func);
++release:
++	sdio_release_host(func);
++}
++
++static int if_sdio_power_on(struct if_sdio_card *card)
++{
++	struct sdio_func *func = card->func;
++	struct mmc_host *host = func->card->host;
++	int ret;
++
++	sdio_claim_host(func);
++
++	ret = sdio_enable_func(func);
++	if (ret)
++		goto release;
++
++	/* For 1-bit transfers to the 8686 model, we need to enable the
++	 * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0
++	 * bit to allow access to non-vendor registers. */
++	if ((card->model == MODEL_8686) &&
++	    (host->caps & MMC_CAP_SDIO_IRQ) &&
++	    (host->ios.bus_width == MMC_BUS_WIDTH_1)) {
++		u8 reg;
++
++		func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
++		reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret);
++		if (ret)
++			goto disable;
++
++		reg |= SDIO_BUS_ECSI;
++		sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret);
++		if (ret)
++			goto disable;
++	}
++
++	card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret);
++	if (ret)
++		goto disable;
++
++	card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 1, &ret) << 8;
++	if (ret)
++		goto disable;
++
++	card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 2, &ret) << 16;
++	if (ret)
++		goto disable;
++
++	sdio_release_host(func);
++	ret = if_sdio_prog_firmware(card);
++	if (ret) {
++		sdio_disable_func(func);
++		return ret;
++	}
++
++	return 0;
++
+ disable:
+ 	sdio_disable_func(func);
+ release:
+@@ -1061,11 +1098,17 @@ static int if_sdio_power_save(struct lbs_private *priv)
+ static int if_sdio_power_restore(struct lbs_private *priv)
+ {
+ 	struct if_sdio_card *card = priv->card;
++	int r;
+ 
+ 	/* Make sure the card will not be powered off by runtime PM */
+ 	pm_runtime_get_sync(&card->func->dev);
+ 
+-	return if_sdio_power_on(card);
++	r = if_sdio_power_on(card);
++	if (r)
++		return r;
++
++	wait_event(card->pwron_waitq, priv->fw_ready);
++	return 0;
+ }
+ 
+ 
+@@ -1166,6 +1209,7 @@ static int if_sdio_probe(struct sdio_func *func,
+ 	spin_lock_init(&card->lock);
+ 	card->workqueue = create_workqueue("libertas_sdio");
+ 	INIT_WORK(&card->packet_worker, if_sdio_host_to_card_worker);
++	init_waitqueue_head(&card->pwron_waitq);
+ 
+ 	/* Check if we support this card */
+ 	for (i = 0; i < ARRAY_SIZE(fw_table); i++) {
+@@ -1207,14 +1251,6 @@ static int if_sdio_probe(struct sdio_func *func,
+ 	if (ret)
+ 		goto err_activate_card;
+ 
+-	ret = lbs_start_card(priv);
+-	if_sdio_power_off(card);
+-	if (ret)
+-		goto err_activate_card;
+-
+-	/* Tell PM core that we don't need the card to be powered now */
+-	pm_runtime_put_noidle(&func->dev);
+-
+ out:
+ 	lbs_deb_leave_args(LBS_DEB_SDIO, "ret %d", ret);
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0013-libertas-USB-convert-to-asynchronous-firmware-loadin.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0013-libertas-USB-convert-to-asynchronous-firmware-loadin.patch
new file mode 100644
index 0000000..b8cffc2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0013-libertas-USB-convert-to-asynchronous-firmware-loadin.patch
@@ -0,0 +1,201 @@
+From b42ea4e3a1fa84b7de451e96e09067b95354f6f5 Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Mon, 16 Apr 2012 23:53:55 +0100
+Subject: [PATCH 13/16] libertas USB: convert to asynchronous firmware loading
+
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/if_usb.c |  102 ++++++++++++++------------------
+ 1 file changed, 43 insertions(+), 59 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
+index f29471b..75403e6 100644
+--- a/drivers/net/wireless/libertas/if_usb.c
++++ b/drivers/net/wireless/libertas/if_usb.c
+@@ -41,6 +41,16 @@ enum {
+ 	MODEL_8682 = 0x2
+ };
+ 
++/* table of firmware file names */
++static const struct lbs_fw_table fw_table[] = {
++	{ MODEL_8388, "libertas/usb8388_olpc.bin", NULL },
++	{ MODEL_8388, "libertas/usb8388_v9.bin", NULL },
++	{ MODEL_8388, "libertas/usb8388_v5.bin", NULL },
++	{ MODEL_8388, "libertas/usb8388.bin", NULL },
++	{ MODEL_8388, "usb8388.bin", NULL },
++	{ MODEL_8682, "libertas/usb8682.bin", NULL }
++};
++
+ static struct usb_device_id if_usb_table[] = {
+ 	/* Enter the device signature inside */
+ 	{ USB_DEVICE(0x1286, 0x2001), .driver_info = MODEL_8388 },
+@@ -52,7 +62,9 @@ MODULE_DEVICE_TABLE(usb, if_usb_table);
+ 
+ static void if_usb_receive(struct urb *urb);
+ static void if_usb_receive_fwload(struct urb *urb);
+-static int if_usb_prog_firmware(struct if_usb_card *cardp);
++static void if_usb_prog_firmware(struct lbs_private *priv, int ret,
++				 const struct firmware *fw,
++				 const struct firmware *unused);
+ static int if_usb_host_to_card(struct lbs_private *priv, uint8_t type,
+ 			       uint8_t *payload, uint16_t nb);
+ static int usb_tx_block(struct if_usb_card *cardp, uint8_t *payload,
+@@ -187,6 +199,7 @@ static int if_usb_probe(struct usb_interface *intf,
+ 	struct usb_endpoint_descriptor *endpoint;
+ 	struct lbs_private *priv;
+ 	struct if_usb_card *cardp;
++	int r = -ENOMEM;
+ 	int i;
+ 
+ 	udev = interface_to_usbdev(intf);
+@@ -244,17 +257,10 @@ static int if_usb_probe(struct usb_interface *intf,
+ 		goto dealloc;
+ 	}
+ 
+-	/* Upload firmware */
+-	if (if_usb_prog_firmware(cardp)) {
+-		lbs_deb_usbd(&udev->dev, "FW upload failed\n");
+-		goto err_prog_firmware;
+-	}
+-
+ 	if (!(priv = lbs_add_card(cardp, &intf->dev)))
+-		goto err_prog_firmware;
++		goto err_add_card;
+ 
+ 	cardp->priv = priv;
+-	cardp->priv->fw_ready = 1;
+ 
+ 	priv->hw_host_to_card = if_usb_host_to_card;
+ 	priv->enter_deep_sleep = NULL;
+@@ -267,34 +273,25 @@ static int if_usb_probe(struct usb_interface *intf,
+ 
+ 	cardp->boot2_version = udev->descriptor.bcdDevice;
+ 
+-	if_usb_submit_rx_urb(cardp);
+-
+-	if (lbs_start_card(priv))
+-		goto err_start_card;
+-
+-	if_usb_setup_firmware(priv);
+-
+ 	usb_get_dev(udev);
+ 	usb_set_intfdata(intf, cardp);
+ 
+-	/*
+-	 * EHS_REMOVE_WAKEUP is not supported on all versions of the firmware.
+-	 */
+-	priv->wol_criteria = EHS_REMOVE_WAKEUP;
+-	if (lbs_host_sleep_cfg(priv, priv->wol_criteria, NULL))
+-		priv->ehs_remove_supported = false;
++	r = lbs_get_firmware_async(priv, &udev->dev, cardp->model,
++				   fw_table, if_usb_prog_firmware);
++	if (r)
++		goto err_get_fw;
+ 
+ 	return 0;
+ 
+-err_start_card:
++err_get_fw:
+ 	lbs_remove_card(priv);
+-err_prog_firmware:
++err_add_card:
+ 	if_usb_reset_device(cardp);
+ dealloc:
+ 	if_usb_free(cardp);
+ 
+ error:
+-	return -ENOMEM;
++	return r;
+ }
+ 
+ /**
+@@ -829,49 +826,22 @@ static int check_fwfile_format(const uint8_t *data, uint32_t totlen)
+ 	return ret;
+ }
+ 
+-/* table of firmware file names */
+-static const struct {
+-	u32 model;
+-	const char *fwname;
+-} fw_table[] = {
+-	{ MODEL_8388, "libertas/usb8388_olpc.bin" },
+-	{ MODEL_8388, "libertas/usb8388_v9.bin" },
+-	{ MODEL_8388, "libertas/usb8388_v5.bin" },
+-	{ MODEL_8388, "libertas/usb8388.bin" },
+-	{ MODEL_8388, "usb8388.bin" },
+-	{ MODEL_8682, "libertas/usb8682.bin" }
+-};
+-
+-static int get_fw(struct if_usb_card *cardp)
+-{
+-	int i;
+-
+-	/* Otherwise search for firmware to use */
+-	for (i = 0; i < ARRAY_SIZE(fw_table); i++) {
+-		if (fw_table[i].model != cardp->model)
+-			continue;
+-		if (request_firmware(&cardp->fw, fw_table[i].fwname,
+-					&cardp->udev->dev) == 0)
+-			return 0;
+-	}
+-
+-	return -ENOENT;
+-}
+-
+-static int if_usb_prog_firmware(struct if_usb_card *cardp)
++static void if_usb_prog_firmware(struct lbs_private *priv, int ret,
++				 const struct firmware *fw,
++				 const struct firmware *unused)
+ {
++	struct if_usb_card *cardp = priv->card;
+ 	int i = 0;
+ 	static int reset_count = 10;
+-	int ret = 0;
+ 
+ 	lbs_deb_enter(LBS_DEB_USB);
+ 
+-	ret = get_fw(cardp);
+ 	if (ret) {
+ 		pr_err("failed to find firmware (%d)\n", ret);
+ 		goto done;
+ 	}
+ 
++	cardp->fw = fw;
+ 	if (check_fwfile_format(cardp->fw->data, cardp->fw->size)) {
+ 		ret = -EINVAL;
+ 		goto release_fw;
+@@ -954,13 +924,27 @@ restart:
+ 		goto release_fw;
+ 	}
+ 
++	cardp->priv->fw_ready = 1;
++	if_usb_submit_rx_urb(cardp);
++
++	if (lbs_start_card(priv))
++		goto release_fw;
++
++	if_usb_setup_firmware(priv);
++
++	/*
++	 * EHS_REMOVE_WAKEUP is not supported on all versions of the firmware.
++	 */
++	priv->wol_criteria = EHS_REMOVE_WAKEUP;
++	if (lbs_host_sleep_cfg(priv, priv->wol_criteria, NULL))
++		priv->ehs_remove_supported = false;
++
+  release_fw:
+ 	release_firmware(cardp->fw);
+ 	cardp->fw = NULL;
+ 
+  done:
+-	lbs_deb_leave_args(LBS_DEB_USB, "ret %d", ret);
+-	return ret;
++	lbs_deb_leave(LBS_DEB_USB);
+ }
+ 
+ 
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0014-libertas-CS-convert-to-asynchronous-firmware-loading.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0014-libertas-CS-convert-to-asynchronous-firmware-loading.patch
new file mode 100644
index 0000000..fcc2620
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0014-libertas-CS-convert-to-asynchronous-firmware-loading.patch
@@ -0,0 +1,154 @@
+From 6e1c2a1ef946804055ac05dd347c06fb8e836dcc Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd@laptop.org>
+Date: Wed, 18 Apr 2012 20:09:44 +0100
+Subject: [PATCH 14/16] libertas CS: convert to asynchronous firmware loading
+
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Tested-by: Dan Williams <dcbw@redhat.com>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/if_cs.c |   88 ++++++++++++++++++---------------
+ 1 file changed, 49 insertions(+), 39 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
+index cee5052..16beaf3 100644
+--- a/drivers/net/wireless/libertas/if_cs.c
++++ b/drivers/net/wireless/libertas/if_cs.c
+@@ -738,6 +738,50 @@ done:
+ 	return ret;
+ }
+ 
++static void if_cs_prog_firmware(struct lbs_private *priv, int ret,
++				 const struct firmware *helper,
++				 const struct firmware *mainfw)
++{
++	struct if_cs_card *card = priv->card;
++
++	if (ret) {
++		pr_err("failed to find firmware (%d)\n", ret);
++		return;
++	}
++
++	/* Load the firmware */
++	ret = if_cs_prog_helper(card, helper);
++	if (ret == 0 && (card->model != MODEL_8305))
++		ret = if_cs_prog_real(card, mainfw);
++	if (ret)
++		goto out;
++
++	/* Now actually get the IRQ */
++	ret = request_irq(card->p_dev->irq, if_cs_interrupt,
++		IRQF_SHARED, DRV_NAME, card);
++	if (ret) {
++		pr_err("error in request_irq\n");
++		goto out;
++	}
++
++	/*
++	 * Clear any interrupt cause that happened while sending
++	 * firmware/initializing card
++	 */
++	if_cs_write16(card, IF_CS_CARD_INT_CAUSE, IF_CS_BIT_MASK);
++	if_cs_enable_ints(card);
++
++	/* And finally bring the card up */
++	priv->fw_ready = 1;
++	if (lbs_start_card(priv) != 0) {
++		pr_err("could not activate card\n");
++		free_irq(card->p_dev->irq, card);
++	}
++
++out:
++	release_firmware(helper);
++	release_firmware(mainfw);
++}
+ 
+ 
+ /********************************************************************/
+@@ -809,8 +853,6 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
+ 	unsigned int prod_id;
+ 	struct lbs_private *priv;
+ 	struct if_cs_card *card;
+-	const struct firmware *helper = NULL;
+-	const struct firmware *mainfw = NULL;
+ 
+ 	lbs_deb_enter(LBS_DEB_CS);
+ 
+@@ -890,20 +932,6 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
+ 		goto out2;
+ 	}
+ 
+-	ret = lbs_get_firmware(&p_dev->dev, card->model, &fw_table[0],
+-				&helper, &mainfw);
+-	if (ret) {
+-		pr_err("failed to find firmware (%d)\n", ret);
+-		goto out2;
+-	}
+-
+-	/* Load the firmware early, before calling into libertas.ko */
+-	ret = if_cs_prog_helper(card, helper);
+-	if (ret == 0 && (card->model != MODEL_8305))
+-		ret = if_cs_prog_real(card, mainfw);
+-	if (ret)
+-		goto out2;
+-
+ 	/* Make this card known to the libertas driver */
+ 	priv = lbs_add_card(card, &p_dev->dev);
+ 	if (!priv) {
+@@ -911,37 +939,22 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
+ 		goto out2;
+ 	}
+ 
+-	/* Finish setting up fields in lbs_private */
++	/* Set up fields in lbs_private */
+ 	card->priv = priv;
+ 	priv->card = card;
+ 	priv->hw_host_to_card = if_cs_host_to_card;
+ 	priv->enter_deep_sleep = NULL;
+ 	priv->exit_deep_sleep = NULL;
+ 	priv->reset_deep_sleep_wakeup = NULL;
+-	priv->fw_ready = 1;
+ 
+-	/* Now actually get the IRQ */
+-	ret = request_irq(p_dev->irq, if_cs_interrupt,
+-		IRQF_SHARED, DRV_NAME, card);
++	/* Get firmware */
++	ret = lbs_get_firmware_async(priv, &p_dev->dev, card->model, fw_table,
++				     if_cs_prog_firmware);
+ 	if (ret) {
+-		pr_err("error in request_irq\n");
+-		goto out3;
+-	}
+-
+-	/*
+-	 * Clear any interrupt cause that happened while sending
+-	 * firmware/initializing card
+-	 */
+-	if_cs_write16(card, IF_CS_CARD_INT_CAUSE, IF_CS_BIT_MASK);
+-	if_cs_enable_ints(card);
+-
+-	/* And finally bring the card up */
+-	if (lbs_start_card(priv) != 0) {
+-		pr_err("could not activate card\n");
++		pr_err("failed to find firmware (%d)\n", ret);
+ 		goto out3;
+ 	}
+ 
+-	ret = 0;
+ 	goto out;
+ 
+ out3:
+@@ -951,9 +964,6 @@ out2:
+ out1:
+ 	pcmcia_disable_device(p_dev);
+ out:
+-	release_firmware(helper);
+-	release_firmware(mainfw);
+-
+ 	lbs_deb_leave_args(LBS_DEB_CS, "ret %d", ret);
+ 	return ret;
+ }
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0015-libertas-add-missing-include.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0015-libertas-add-missing-include.patch
new file mode 100644
index 0000000..0506d5c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0015-libertas-add-missing-include.patch
@@ -0,0 +1,30 @@
+From d149dba44b6840fec19f18b768220766f7c529a8 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Thu, 19 Apr 2012 13:54:12 +0200
+Subject: [PATCH 15/16] libertas: add missing include
+
+Without it, I get compile errors due to missing TASK_NORMAL,
+TASK_UNINTERRUPTIBLE and schedule.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/libertas/firmware.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/net/wireless/libertas/firmware.c b/drivers/net/wireless/libertas/firmware.c
+index cd23f1a..77f6504 100644
+--- a/drivers/net/wireless/libertas/firmware.c
++++ b/drivers/net/wireless/libertas/firmware.c
+@@ -5,6 +5,7 @@
+ #include <linux/firmware.h>
+ #include <linux/firmware.h>
+ #include <linux/module.h>
++#include <linux/sched.h>
+ 
+ #include "dev.h"
+ #include "decl.h"
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0016-remove-debug-msgs-due-to-missing-in_interrupt.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0016-remove-debug-msgs-due-to-missing-in_interrupt.patch
new file mode 100644
index 0000000..dec119a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/libertas/0016-remove-debug-msgs-due-to-missing-in_interrupt.patch
@@ -0,0 +1,35 @@
+From 21bcbe43eb2923da9f17a0ac826b40f6cc7161cd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 21 May 2012 17:01:23 +0200
+Subject: [PATCH 16/16] remove debug msgs due to missing in_interrupt
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ drivers/net/wireless/libertas/defs.h |    7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/drivers/net/wireless/libertas/defs.h b/drivers/net/wireless/libertas/defs.h
+index ab966f0..a80b40e 100644
+--- a/drivers/net/wireless/libertas/defs.h
++++ b/drivers/net/wireless/libertas/defs.h
+@@ -46,14 +46,7 @@
+ 
+ extern unsigned int lbs_debug;
+ 
+-#ifdef DEBUG
+-#define LBS_DEB_LL(grp, grpnam, fmt, args...) \
+-do { if ((lbs_debug & (grp)) == (grp)) \
+-  printk(KERN_DEBUG DRV_NAME grpnam "%s: " fmt, \
+-         in_interrupt() ? " (INT)" : "", ## args); } while (0)
+-#else
+ #define LBS_DEB_LL(grp, grpnam, fmt, args...) do {} while (0)
+-#endif
+ 
+ #define lbs_deb_enter(grp) \
+   LBS_DEB_LL(grp | LBS_DEB_ENTER, " enter", "%s()\n", __func__);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/psp/0019-MMC-OMAP-HS-Enable-HSPE-bit-for-high-speed-cards.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/psp/0019-MMC-OMAP-HS-Enable-HSPE-bit-for-high-speed-cards.patch
new file mode 100644
index 0000000..43e5feb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/psp/0019-MMC-OMAP-HS-Enable-HSPE-bit-for-high-speed-cards.patch
@@ -0,0 +1,66 @@
+From 97ffca5e70b312b81bdf095d1d2a104fdaa98aba Mon Sep 17 00:00:00 2001
+From: "Philip, Avinash" <avinashphilip@ti.com>
+Date: Mon, 4 Jun 2012 18:45:45 +0530
+Subject: [PATCH 19/19] MMC: OMAP-HS: Enable HSPE bit for high speed cards.
+
+By outputting CMD line and DAT lines at the rising edge of the SD clock,
+setup timings is increased and allows reaching higher bus frequency.
+This feature is activated by setting SD_HCTL[2] HSPE bit to 1. This is
+required for High Speed Cards.
+
+When card is operating at high speed, MMC/SD serial output clock is set
+to >25 MHz. This patch makes use of this clock value to set HSPE.
+
+Also, this bit will be cleared on card removal & for non-high speed
+cards.
+
+Tested on High speed cards (SDHC class 10, micro SDHC class 4) and
+normal speed cards like SDHC class 4.
+
+Signed-off-by: Philip, Avinash <avinashphilip@ti.com>
+---
+ drivers/mmc/host/omap_hsmmc.c |   14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
+index 1f938d9..22da8f2 100644
+--- a/drivers/mmc/host/omap_hsmmc.c
++++ b/drivers/mmc/host/omap_hsmmc.c
+@@ -90,6 +90,7 @@
+ #define MSBS			(1 << 5)
+ #define BCE			(1 << 1)
+ #define FOUR_BIT		(1 << 1)
++#define HSPE			(1 << 2)
+ #define DVAL_MASK		(3 << 9)
+ #define DVAL_MAX		(3 << 9)	/* 8.4 ms debounce period */
+ #define WPP_MASK		(1 << 8)
+@@ -634,14 +635,25 @@ static void omap_hsmmc_set_clock(struct omap_hsmmc_host *host)
+ 	struct mmc_ios *ios = &host->mmc->ios;
+ 	unsigned long regval;
+ 	unsigned long timeout;
++	unsigned long clkdiv;
+ 
+ 	dev_dbg(mmc_dev(host->mmc), "Set clock to %uHz\n", ios->clock);
+ 
++	clkdiv = calc_divisor(host, ios);
++	regval = OMAP_HSMMC_READ(host->base, HCTL);
++	/* Enable HSPE bit for high speed card */
++	if (ios->clock && (clk_get_rate(host->fclk)/clkdiv) > 25000000)
++		regval |= HSPE;
++	else
++		regval &= ~HSPE;
++
++	OMAP_HSMMC_WRITE(host->base, HCTL, regval);
++
+ 	omap_hsmmc_stop_clock(host);
+ 
+ 	regval = OMAP_HSMMC_READ(host->base, SYSCTL);
+ 	regval = regval & ~(CLKD_MASK | DTO_MASK);
+-	regval = regval | (calc_divisor(host, ios) << 6) | (DTO << 16);
++	regval = regval | (clkdiv << 6) | (DTO << 16);
+ 	OMAP_HSMMC_WRITE(host->base, SYSCTL, regval);
+ 	OMAP_HSMMC_WRITE(host->base, SYSCTL,
+ 		OMAP_HSMMC_READ(host->base, SYSCTL) | ICE);
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index 3243998..645d4dc 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -11,11 +11,11 @@ S = "${WORKDIR}/git"
 MULTI_CONFIG_BASE_SUFFIX = ""
 
 # the PATCHES_OVER_PSP updates it to 3.2.x, so adjust PV to match
-PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.18", d)}"
+PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.21", d)}"
 
 BRANCH = "v3.2-staging"
 SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
-MACHINE_KERNEL_PR_append = "i+gitr${SRCREV}"
+MACHINE_KERNEL_PR_append = "a+gitr${SRCREV}"
 
 COMPATIBLE_MACHINE = "(ti33x)"
 
@@ -56,6 +56,7 @@ PATCHES_OVER_PSP = " \
 	file://psp/0016-usb-musb-cppi41-tx-dma-completion-fixes.patch \
 	file://psp/0017-usb-musb-host-Flush-RxFIFO-only-when-RxPktRdy-is-set.patch \
 	file://psp/0018-usb-musb-ti81xx-fix-role-switching-issue.patch \
+	file://psp/0019-MMC-OMAP-HS-Enable-HSPE-bit-for-high-speed-cards.patch \
 	file://3.2.1/0001-MAINTAINERS-stable-Update-address.patch \
 	file://3.2.1/0002-Documentation-Update-stable-address.patch \
 	file://3.2.1/0003-firmware-Fix-an-oops-on-reading-fw_priv-fw-in-sysfs-.patch \
@@ -1174,7 +1175,293 @@ PATCHES_OVER_PSP = " \
 	file://3.2.18/0054-pktgen-fix-crash-at-module-unload.patch \
 	file://3.2.18/0055-pktgen-fix-module-unload-for-good.patch \
 	file://3.2.18/0056-Linux-3.2.18.patch \
+	file://3.2.19/0001-KVM-mmu_notifier-Flush-TLBs-before-releasing-mmu_loc.patch \
+	file://3.2.19/0002-KVM-Ensure-all-vcpus-are-consistent-with-in-kernel-i.patch \
+	file://3.2.19/0003-KVM-lock-slots_lock-around-device-assignment.patch \
+	file://3.2.19/0004-KVM-nVMX-Fix-erroneous-exception-bitmap-check.patch \
+	file://3.2.19/0005-KVM-VMX-vmx_set_cr0-expects-kvm-srcu-locked.patch \
+	file://3.2.19/0006-KVM-s390-do-store-status-after-handling-STOP_ON_STOP.patch \
+	file://3.2.19/0007-KVM-s390-Sanitize-fpc-registers-for-KVM_SET_FPU.patch \
+	file://3.2.19/0008-bio-don-t-overflow-in-bio_get_nr_vecs.patch \
+	file://3.2.19/0009-bio-allocation-failure-due-to-bio_get_nr_vecs.patch \
+	file://3.2.19/0010-block-fix-buffer-overflow-when-printing-partition-UU.patch \
+	file://3.2.19/0011-fix-PA1.1-oops-on-boot.patch \
+	file://3.2.19/0012-fix-crash-in-flush_icache_page_asm-on-PA1.1.patch \
+	file://3.2.19/0013-fix-panic-on-prefetch-NULL-on-PA7300LC.patch \
+	file://3.2.19/0014-arch-tile-Kconfig-remove-pointless-M386-test.patch \
+	file://3.2.19/0015-tilegx-enable-SYSCALL_WRAPPERS-support.patch \
+	file://3.2.19/0016-mtd-sm_ftl-fix-typo-in-major-number.patch \
+	file://3.2.19/0017-hpsa-Fix-problem-with-MSA2xxx-devices.patch \
+	file://3.2.19/0018-SELinux-if-sel_make_bools-errors-don-t-leave-inconsi.patch \
+	file://3.2.19/0019-cfg80211-warn-if-db.txt-is-empty-with-CONFIG_CFG8021.patch \
+	file://3.2.19/0020-mpt2sas-Fix-for-panic-happening-because-of-improper-.patch \
+	file://3.2.19/0021-isdn-gigaset-ratelimit-CAPI-message-dumps.patch \
+	file://3.2.19/0022-isdn-gigaset-fix-CAPI-disconnect-B3-handling.patch \
+	file://3.2.19/0023-isdn-gigaset-improve-error-handling-querying-firmwar.patch \
+	file://3.2.19/0024-KEYS-Use-the-compat-keyctl-syscall-wrapper-on-Sparc6.patch \
+	file://3.2.19/0025-IB-core-Fix-mismatch-between-locked-and-pinned-pages.patch \
+	file://3.2.19/0026-regulator-core-Release-regulator-regulator-supplies-.patch \
+	file://3.2.19/0027-iommu-Fix-off-by-one-in-dmar_get_fault_reason.patch \
+	file://3.2.19/0028-RDMA-cxgb4-Always-wake-up-waiters-in-c4iw_peer_abort.patch \
+	file://3.2.19/0029-RDMA-cxgb4-Drop-peer_abort-when-no-endpoint-found.patch \
+	file://3.2.19/0030-s390-pfault-fix-task-state-race.patch \
+	file://3.2.19/0031-isci-fix-oem-parameter-validation-on-single-controll.patch \
+	file://3.2.19/0032-Fix-blocking-allocations-called-very-early-during-bo.patch \
+	file://3.2.19/0033-vfs-make-AIO-use-the-proper-rw_verify_area-area-help.patch \
+	file://3.2.19/0034-docs-update-HOWTO-for-2.6.x-3.x-versioning.patch \
+	file://3.2.19/0035-drivers-staging-comedi-comedi_fops.c-add-missing-vfr.patch \
+	file://3.2.19/0036-USB-move-usb_translate_errors-to-linux-usb.h.patch \
+	file://3.2.19/0037-USB-cdc-wdm-sanitize-error-returns.patch \
+	file://3.2.19/0038-USB-cdc-wdm-fix-memory-leak.patch \
+	file://3.2.19/0039-8250_pci-fix-pch-uart-matching.patch \
+	file://3.2.19/0040-usb-add-USB_QUIRK_RESET_RESUME-for-M-Audio-88es.patch \
+	file://3.2.19/0041-usb-usbtest-two-super-speed-fixes-for-usbtest.patch \
+	file://3.2.19/0042-8250.c-less-than-2400-baud-fix.patch \
+	file://3.2.19/0043-usb-xhci-Handle-COMP_TX_ERR-for-isoc-tds.patch \
+	file://3.2.19/0044-xhci-Avoid-dead-ports-when-CONFIG_USB_XHCI_HCD-n.patch \
+	file://3.2.19/0045-xhci-Add-Lynx-Point-to-list-of-Intel-switchable-host.patch \
+	file://3.2.19/0046-usb-gadget-fsl_udc_core-dTD-s-next-dtd-pointer-need-.patch \
+	file://3.2.19/0047-Add-missing-call-to-uart_update_timeout.patch \
+	file://3.2.19/0048-USB-ftdi-sio-add-support-for-Physik-Instrumente-E-86.patch \
+	file://3.2.19/0049-USB-ffs-test-fix-length-argument-of-out-function-cal.patch \
+	file://3.2.19/0050-HID-wiimote-Fix-IR-data-parser.patch \
+	file://3.2.19/0051-usb-storage-unusual_devs-entry-for-Yarvik-PMP400-MP4.patch \
+	file://3.2.19/0052-USB-ohci-at91-add-a-reset-function-to-fix-race-condi.patch \
+	file://3.2.19/0053-HID-logitech-read-all-32-bits-of-report-type-bitfiel.patch \
+	file://3.2.19/0054-USB-serial-ti_usb_3410_5052-Add-support-for-the-FRI2.patch \
+	file://3.2.19/0055-USB-cdc-wdm-poll-must-return-POLLHUP-if-device-is-go.patch \
+	file://3.2.19/0056-USB-cdc-wdm-add-debug-messages-on-cleanup.patch \
+	file://3.2.19/0057-USB-cdc-wdm-cannot-use-dev_printk-when-device-is-gon.patch \
+	file://3.2.19/0058-tty-Allow-uart_register-unregister-register.patch \
+	file://3.2.19/0059-workqueue-skip-nr_running-sanity-check-in-worker_ent.patch \
+	file://3.2.19/0060-xhci-Add-new-short-TX-quirk-for-Fresco-Logic-host.patch \
+	file://3.2.19/0061-usbcore-enable-USB2-LPM-if-port-suspend-fails.patch \
+	file://3.2.19/0062-perf-x86-Update-event-scheduling-constraints-for-AMD.patch \
+	file://3.2.19/0063-USB-fix-resource-leak-in-xhci-power-loss-path.patch \
+	file://3.2.19/0064-xhci-Reset-reserved-command-ring-TRBs-on-cleanup.patch \
+	file://3.2.19/0065-USB-Remove-races-in-devio.c.patch \
+	file://3.2.19/0066-md-using-GFP_NOIO-to-allocate-bio-for-flush-request.patch \
+	file://3.2.19/0067-um-Implement-a-custom-pte_same-function.patch \
+	file://3.2.19/0068-um-Fix-__swp_type.patch \
+	file://3.2.19/0069-swap-don-t-do-discard-if-no-discard-option-added.patch \
+	file://3.2.19/0070-Input-wacom-relax-Bamboo-stylus-ID-check.patch \
+	file://3.2.19/0071-ahci-Detect-Marvell-88SE9172-SATA-controller.patch \
+	file://3.2.19/0072-ARM-7365-1-drop-unused-parameter-from-flush_cache_us.patch \
+	file://3.2.19/0073-ARM-7409-1-Do-not-call-flush_cache_user_range-with-m.patch \
+	file://3.2.19/0074-sony-laptop-Enable-keyboard-backlight-by-default.patch \
+	file://3.2.19/0075-init-don-t-try-mounting-device-as-nfs-root-unless-ty.patch \
+	file://3.2.19/0076-memcg-free-spare-array-to-avoid-memory-leak.patch \
+	file://3.2.19/0077-compat-Fix-RT-signal-mask-corruption-via-sigprocmask.patch \
+	file://3.2.19/0078-ext3-Fix-error-handling-on-inode-bitmap-corruption.patch \
+	file://3.2.19/0079-ext4-fix-error-handling-on-inode-bitmap-corruption.patch \
+	file://3.2.19/0080-ACPI-PM-Add-Sony-Vaio-VPCCW29FX-to-nonvs-blacklist.patch \
+	file://3.2.19/0081-hpsa-Add-IRQF_SHARED-back-in-for-the-non-MSI-X-inter.patch \
+	file://3.2.19/0082-wake-up-s_wait_unfrozen-when-freeze_fs-fails.patch \
+	file://3.2.19/0083-cifs-fix-revalidation-test-in-cifs_llseek.patch \
+	file://3.2.19/0084-dl2k-Clean-up-rio_ioctl.patch \
+	file://3.2.19/0085-OMAPDSS-VENC-fix-NULL-pointer-dereference-in-DSS2-VE.patch \
+	file://3.2.19/0086-i2c-eg20t-change-timeout-value-50msec-to-1000msec.patch \
+	file://3.2.19/0087-drm-i915-GEN7-Use-HW-scheduler-for-fixed-function-sh.patch \
+	file://3.2.19/0088-mmc-sdio-avoid-spurious-calls-to-interrupt-handlers.patch \
+	file://3.2.19/0089-smsusb-add-autodetection-support-for-USB-ID-2040-c0a.patch \
+	file://3.2.19/0090-uvcvideo-Fix-ENUMINPUT-handling.patch \
+	file://3.2.19/0091-drm-i915-Avoid-a-double-read-of-PCH_IIR-during-inter.patch \
+	file://3.2.19/0092-b43legacy-Fix-error-due-to-MMIO-access-with-SSB-unpo.patch \
+	file://3.2.19/0093-gpio-mpc8xxx-Prevent-NULL-pointer-deref-in-demux-han.patch \
+	file://3.2.19/0094-drm-i915-don-t-clobber-the-pipe-param-in-sanitize_mo.patch \
+	file://3.2.19/0095-spi-spi-fsl-spi-reference-correct-pdata-in-fsl_spi_c.patch \
+	file://3.2.19/0096-xen-do-not-map-the-same-GSI-twice-in-PVHVM-guests.patch \
+	file://3.2.19/0097-nouveau-nouveau_set_bo_placement-takes-TTM-flags.patch \
+	file://3.2.19/0098-MCE-Fix-vm86-handling-for-32bit-mce-handler.patch \
+	file://3.2.19/0099-x86-mce-Fix-check-for-processor-context-when-machine.patch \
+	file://3.2.19/0100-tile-fix-bug-where-fls-0-was-not-returning-0.patch \
+	file://3.2.19/0101-intel-iommu-Add-device-info-into-list-before-doing-c.patch \
+	file://3.2.19/0102-ethtool-Null-terminate-filename-passed-to-ethtool_op.patch \
+	file://3.2.19/0103-block-don-t-mark-buffers-beyond-end-of-disk-as-mappe.patch \
+	file://3.2.19/0104-drivers-rtc-rtc-pl031.c-configure-correct-wday-for-2.patch \
+	file://3.2.19/0105-rtlwifi-Preallocate-USB-read-buffers-and-eliminate-k.patch \
+	file://3.2.19/0106-NFS4-fix-compile-warnings-in-nfs4proc.c.patch \
+	file://3.2.19/0107-Avoid-reading-past-buffer-when-calling-GETACL.patch \
+	file://3.2.19/0108-Avoid-beyond-bounds-copy-while-caching-ACL.patch \
+	file://3.2.19/0109-i2c-tegra-notify-transfer-complete-after-clearing-st.patch \
+	file://3.2.19/0110-i2c-davinci-Free-requested-IRQ-in-remove.patch \
+	file://3.2.19/0111-x86-realmode-16-bit-real-mode-code-support-for-reloc.patch \
+	file://3.2.19/0112-x86-relocs-Workaround-for-binutils-2.22.52.0.1-secti.patch \
+	file://3.2.19/0113-x86-relocs-When-printing-an-error-say-relative-or-ab.patch \
+	file://3.2.19/0114-x86-relocs-Build-clean-fix.patch \
+	file://3.2.19/0115-x86-32-relocs-Whitelist-more-symbols-for-ld-bug-work.patch \
+	file://3.2.19/0116-x86-relocs-Add-jiffies-and-jiffies_64-to-the-relativ.patch \
+	file://3.2.19/0117-Linux-3.2.19.patch \
+	file://3.2.20/0001-iommu-amd-Add-workaround-for-event-log-erratum.patch \
+	file://3.2.20/0002-MIPS-BCM63XX-Add-missing-include-for-bcm63xx_gpio.h.patch \
+	file://3.2.20/0003-cifs-Include-backup-intent-search-flags-during-searc.patch \
+	file://3.2.20/0004-sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-ca.patch \
+	file://3.2.20/0005-exofs-Fix-CRASH-on-very-early-IO-errors.patch \
+	file://3.2.20/0006-cifs-fix-oops-while-traversing-open-file-list-try-4.patch \
+	file://3.2.20/0007-Fix-dm-multipath-starvation-when-scsi-host-is-busy.patch \
+	file://3.2.20/0008-ixp4xx-fix-compilation-by-adding-gpiolib-support.patch \
+	file://3.2.20/0009-drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd.patch \
+	file://3.2.20/0010-drm-i915-enable-vdd-when-switching-off-the-eDP-panel.patch \
+	file://3.2.20/0011-drm-i915-Add-Clientron-E830-to-the-ignore-LVDS-list.patch \
+	file://3.2.20/0012-drm-i915-Ignore-LVDS-on-hp-t5745-and-hp-st5747-thin-.patch \
+	file://3.2.20/0013-drm-i915-no-lvds-quirk-for-HP-t5740e-Thin-Client.patch \
+	file://3.2.20/0014-drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch \
+	file://3.2.20/0015-drm-i915-Update-GEN6_RP_CONTROL-definitions.patch \
+	file://3.2.20/0016-drm-i915-always-use-RPNSWREQ-for-turbo-change-reques.patch \
+	file://3.2.20/0017-solos-pci-Fix-DMA-support.patch \
+	file://3.2.20/0018-microblaze-Do-not-select-GENERIC_GPIO-by-default.patch \
+	file://3.2.20/0019-fix-boot-failure-on-32-bit-systems-caused-by-branch-.patch \
+	file://3.2.20/0020-fix-TLB-fault-path-on-PA2.0-narrow-systems.patch \
+	file://3.2.20/0021-iwlwifi-update-BT-traffic-load-states-correctly.patch \
+	file://3.2.20/0022-iwlwifi-do-not-use-shadow-registers-by-default.patch \
+	file://3.2.20/0023-wl1251-fix-oops-on-early-interrupt.patch \
+	file://3.2.20/0024-NFSv4-Map-NFS4ERR_SHARE_DENIED-into-an-EACCES-error-.patch \
+	file://3.2.20/0025-drm-radeon-fix-XFX-quirk.patch \
+	file://3.2.20/0026-ath9k-fix-a-use-after-free-bug-when-ath_tx_setup_buf.patch \
+	file://3.2.20/0027-mac80211-fix-ADDBA-declined-after-suspend-with-wowla.patch \
+	file://3.2.20/0028-mm-fork-fix-overflow-in-vma-length-when-copying-mmap.patch \
+	file://3.2.20/0029-mm-consider-all-swapped-back-pages-in-used-once-logi.patch \
+	file://3.2.20/0030-hugetlb-fix-resv_map-leak-in-error-path.patch \
+	file://3.2.20/0031-mm-vmalloc.c-change-void-into-explict-vm_struct.patch \
+	file://3.2.20/0032-mm-fix-faulty-initialization-in-vmalloc_init.patch \
+	file://3.2.20/0033-fix-scsi_wait_scan.patch \
+	file://3.2.20/0034-mm-fix-vma_resv_map-NULL-pointer.patch \
+	file://3.2.20/0035-x86-amd-xen-Avoid-NULL-pointer-paravirt-references.patch \
+	file://3.2.20/0036-slub-fix-a-memory-leak-in-get_partial_node.patch \
+	file://3.2.20/0037-ext4-force-ro-mount-if-ext4_setup_super-fails.patch \
+	file://3.2.20/0038-ext4-disallow-hard-linked-directory-in-ext4_lookup.patch \
+	file://3.2.20/0039-mtd-nand-fix-scan_read_raw_oob.patch \
+	file://3.2.20/0040-vfs-increment-iversion-when-a-file-is-truncated.patch \
+	file://3.2.20/0041-vfs-umount_tree-might-be-called-on-subtree-that-had-.patch \
+	file://3.2.20/0042-ext4-add-missing-save_error_info-to-ext4_error.patch \
+	file://3.2.20/0043-ALSA-usb-audio-fix-rate_list-memory-leak.patch \
+	file://3.2.20/0044-ext4-add-ext4_mb_unload_buddy-in-the-error-path.patch \
+	file://3.2.20/0045-ext4-remove-mb_groups-before-tearing-down-the-buddy_.patch \
+	file://3.2.20/0046-drm-radeon-fix-bank-information-in-tiling-config.patch \
+	file://3.2.20/0047-drm-radeon-properly-program-gart-on-rv740-juniper-cy.patch \
+	file://3.2.20/0048-drm-radeon-fix-HD6790-HD6570-backend-programming.patch \
+	file://3.2.20/0049-drm-ttm-Fix-spinlock-imbalance.patch \
+	file://3.2.20/0050-drm-vmwgfx-Fix-nasty-write-past-alloced-memory-area.patch \
+	file://3.2.20/0051-mtd-of_parts-fix-breakage-in-Kconfig.patch \
+	file://3.2.20/0052-fec_mpc52xx-fix-timestamp-filtering.patch \
+	file://3.2.20/0053-Bluetooth-btusb-Add-vendor-specific-ID-0a5c-21f3-for.patch \
+	file://3.2.20/0054-Bluetooth-btusb-add-support-for-BCM20702A0-0a5c-21e6.patch \
+	file://3.2.20/0055-Bluetooth-btusb-Add-USB-device-ID-0a5c-21e8.patch \
+	file://3.2.20/0056-Bluetooth-btusb-typo-in-Broadcom-SoftSailing-id.patch \
+	file://3.2.20/0057-Bluetooth-btusb-Add-vendor-specific-ID-0489-e042-for.patch \
+	file://3.2.20/0058-Bluetooth-Add-support-for-Atheros-13d3-3362.patch \
+	file://3.2.20/0059-Bluetooth-Add-support-for-AR3012-0cf3-e004.patch \
+	file://3.2.20/0060-Add-Foxconn-Hon-Hai-IDs-for-btusb-module.patch \
+	file://3.2.20/0061-Bluetooth-Add-support-for-Foxconn-Hon-Hai-AR5BBU22-0.patch \
+	file://3.2.20/0062-drm-i915-Disable-FBC-on-SandyBridge.patch \
+	file://3.2.20/0063-ipv4-Do-not-use-dead-fib_info-entries.patch \
+	file://3.2.20/0064-ipv4-fix-the-rcu-race-between-free_fib_info-and-ip_r.patch \
+	file://3.2.20/0065-set-fake_rtable-s-dst-to-NULL-to-avoid-kernel-Oops.patch \
+	file://3.2.20/0066-ipv6-fix-incorrect-ipsec-fragment.patch \
+	file://3.2.20/0067-l2tp-fix-oops-in-L2TP-IP-sockets-for-connect-AF_UNSP.patch \
+	file://3.2.20/0068-r8169-missing-barriers.patch \
+	file://3.2.20/0069-r8169-fix-early-queue-wake-up.patch \
+	file://3.2.20/0070-r8169-fix-unsigned-int-wraparound-with-TSO.patch \
+	file://3.2.20/0071-Revert-net-maintain-namespace-isolation-between-vlan.patch \
+	file://3.2.20/0072-sctp-check-cached-dst-before-using-it.patch \
+	file://3.2.20/0073-skb-avoid-unnecessary-reallocations-in-__skb_cow.patch \
+	file://3.2.20/0074-xfrm-take-net-hdr-len-into-account-for-esp-payload-s.patch \
+	file://3.2.20/0075-ACPI-battery-only-refresh-the-sysfs-files-when-perti.patch \
+	file://3.2.20/0076-target-file-Use-O_DSYNC-by-default-for-FILEIO-backen.patch \
+	file://3.2.20/0077-iommu-amd-Cache-pdev-pointer-to-root-bridge.patch \
+	file://3.2.20/0078-drm-radeon-kms-add-new-Palm-Sumo-PCI-ids.patch \
+	file://3.2.20/0079-drm-radeon-kms-add-new-BTC-PCI-ids.patch \
+	file://3.2.20/0080-btree-fix-tree-corruption-in-btree_get_prev.patch \
+	file://3.2.20/0081-kbuild-install-kernel-page-flags.h.patch \
+	file://3.2.20/0082-asix-allow-full-size-8021Q-frames-to-be-received.patch \
+	file://3.2.20/0083-ext4-don-t-trash-state-flags-in-EXT4_IOC_SETFLAGS.patch \
+	file://3.2.20/0084-ext4-don-t-set-i_flags-in-EXT4_IOC_SETFLAGS.patch \
+	file://3.2.20/0085-ext4-fix-the-free-blocks-calculation-for-ext3-file-s.patch \
+	file://3.2.20/0086-Linux-3.2.20.patch \
+	file://3.2.21/0001-drm-i915-Mark-the-ringbuffers-as-being-in-the-GTT-do.patch \
+	file://3.2.21/0002-drm-i915-hold-forcewake-around-ring-hw-init.patch \
+	file://3.2.21/0003-drm-i915-Unpin-the-flip-target-if-we-fail-to-queue-t.patch \
+	file://3.2.21/0004-drm-i915-fix-up-ivb-plane-3-pageflips.patch \
+	file://3.2.21/0005-char-agp-add-another-Ironlake-host-bridge.patch \
+	file://3.2.21/0006-x86-uv-Fix-UV2-BAU-legacy-mode.patch \
+	file://3.2.21/0007-powerpc-Fix-kernel-panic-during-kernel-module-load.patch \
+	file://3.2.21/0008-drm-nouveau-determine-a-value-for-display_info.bpc-i.patch \
+	file://3.2.21/0009-drm-nouveau-default-to-8bpc-for-non-LVDS-panels-if-E.patch \
+	file://3.2.21/0010-drm-nouveau-disp-fix-dithering-not-being-enabled-on-.patch \
+	file://3.2.21/0011-fuse-fix-stat-call-on-32-bit-platforms.patch \
+	file://3.2.21/0012-x86-MCE-AMD-Make-APIC-LVT-thresholding-interrupt-opt.patch \
+	file://3.2.21/0013-x86-amd-Re-enable-CPU-topology-extensions-in-case-BI.patch \
+	file://3.2.21/0014-hwmon-fam15h_power-Increase-output-resolution.patch \
+	file://3.2.21/0015-sched-Fix-the-relax_domain_level-boot-parameter.patch \
+	file://3.2.21/0016-iwlwifi-don-t-mess-up-the-SCD-when-removing-a-key.patch \
+	file://3.2.21/0017-hwrng-atmel-rng-fix-race-condition-leading-to-repeat.patch \
+	file://3.2.21/0018-crypto-aesni-intel-fix-unaligned-cbc-decrypt-for-x86.patch \
+	file://3.2.21/0019-xen-setup-filter-APERFMPERF-cpuid-feature-out.patch \
+	file://3.2.21/0020-NFSv4.1-Fix-a-request-leak-on-the-back-channel.patch \
+	file://3.2.21/0021-can-c_can-fix-BUG-echo_skb-is-occupied-during-transm.patch \
+	file://3.2.21/0022-can-c_can-fix-an-interrupt-thrash-issue-with-c_can-d.patch \
+	file://3.2.21/0023-can-c_can-fix-race-condition-in-c_can_open.patch \
+	file://3.2.21/0024-ARM-i.MX53-Fix-PLL4-base-address.patch \
+	file://3.2.21/0025-usb-musb_gadget-fix-crash-caused-by-dangling-pointer.patch \
+	file://3.2.21/0026-mac80211-clean-up-remain-on-channel-on-interface-sto.patch \
+	file://3.2.21/0027-rt2x00-use-atomic-variable-for-seqno.patch \
+	file://3.2.21/0028-iwlwifi-disable-WoWLAN-if-CONFIG_PM_SLEEP.patch \
+	file://3.2.21/0029-ASoC-wm8994-Ensure-all-AIFnCLK-events-are-run-from-t.patch \
+	file://3.2.21/0030-ASoC-wm8994-Apply-volume-updates-with-clocks-enabled.patch \
+	file://3.2.21/0031-iwlwifi-unregister-LEDs-if-mac80211-registration-fai.patch \
+	file://3.2.21/0032-cfg80211-fix-interface-combinations-check.patch \
+	file://3.2.21/0033-mpt2sas-Fix-unsafe-using-smp_processor_id-in-preempt.patch \
+	file://3.2.21/0034-net-sierra_net-device-IDs-for-Aircard-320U.patch \
+	file://3.2.21/0035-ARM-imx6-exit-coherency-when-shutting-down-a-cpu.patch \
+	file://3.2.21/0036-ARM-i.MX-imx21ads-Fix-overlapping-static-i-o-mapping.patch \
+	file://3.2.21/0037-NFSv4-Fix-unnecessary-delegation-returns-in-nfs4_do_.patch \
+	file://3.2.21/0038-iwlwifi-use-correct-supported-firmware-for-6035-and-.patch \
+	file://3.2.21/0039-iwlwifi-disable-the-buggy-chain-extension-feature-in.patch \
+	file://3.2.21/0040-ALSA-hda-Add-codec-no_jack_detect-flag.patch \
+	file://3.2.21/0041-ALSA-hda-add-support-for-Uniwill-ECS-M31EI-notebook.patch \
+	file://3.2.21/0042-ALSA-hda-Suppress-auto-mute-feature-on-some-machines.patch \
+	file://3.2.21/0043-ALSA-hda-Add-another-jack-detection-suppression-for-.patch \
+	file://3.2.21/0044-ALSA-HDA-Pin-fixup-for-Zotac-Z68-motherboard.patch \
+	file://3.2.21/0045-usb-cdc-wdm-Add-device-id-for-Huawei-3G-LTE-modems.patch \
+	file://3.2.21/0046-USB-qcserial-Add-Sierra-Wireless-device-IDs.patch \
+	file://3.2.21/0047-USB-ftdi-sio-Add-support-for-RT-Systems-USB-RTS01-se.patch \
+	file://3.2.21/0048-USB-serial-cp210x-add-Optris-MS-Pro-usb-id.patch \
+	file://3.2.21/0049-USB-serial-sierra-Add-support-for-Sierra-Wireless-Ai.patch \
+	file://3.2.21/0050-USB-option-Updated-Huawei-K4605-has-better-id.patch \
+	file://3.2.21/0051-USB-mct_u232-Fix-incorrect-TIOCMSET-return.patch \
+	file://3.2.21/0052-USB-option-fix-port-data-abuse.patch \
+	file://3.2.21/0053-USB-option-fix-memory-leak.patch \
+	file://3.2.21/0054-USB-option-add-more-YUGA-device-ids.patch \
+	file://3.2.21/0055-target-Return-error-to-initiator-if-SET-TARGET-PORT-.patch \
+	file://3.2.21/0056-USB-add-NO_D3_DURING_SLEEP-flag-and-revert-151b61284.patch \
+	file://3.2.21/0057-USB-serial-Enforce-USB-driver-and-USB-serial-driver-.patch \
+	file://3.2.21/0058-xhci-Fix-invalid-loop-check-in-xhci_free_tt_info.patch \
+	file://3.2.21/0059-xhci-Don-t-free-endpoints-in-xhci_mem_cleanup.patch \
+	file://3.2.21/0060-xHCI-Increase-the-timeout-for-controller-save-restor.patch \
+	file://3.2.21/0061-usb-PS3-EHCI-QH-read-work-around.patch \
+	file://3.2.21/0062-USB-fix-PS3-EHCI-systems.patch \
+	file://3.2.21/0063-usb-cdc-acm-fix-devices-not-unthrottled-on-open.patch \
+	file://3.2.21/0064-USB-fix-gathering-of-interface-associations.patch \
+	file://3.2.21/0065-swap-fix-shmem-swapping-when-more-than-8-areas.patch \
+	file://3.2.21/0066-drm-radeon-add-some-additional-6xx-7xx-EG-register-i.patch \
+	file://3.2.21/0067-Linux-3.2.21.patch \
 	file://led/0001-leds-heartbeat-stop-on-shutdown-reboot-or-panic.patch \
+	file://libertas/0001-USB-convert-drivers-net-to-use-module_usb_driver.patch \
+	file://libertas/0002-net-fix-assignment-of-0-1-to-bool-variables.patch \
+	file://libertas/0003-switch-debugfs-to-umode_t.patch \
+	file://libertas/0004-drivers-net-Remove-unnecessary-k.alloc-v.alloc-OOM-m.patch \
+	file://libertas/0005-libertas-remove-dump_survey-implementation.patch \
+	file://libertas/0006-wireless-libertas-remove-redundant-NULL-tests-before.patch \
+	file://libertas/0007-libertas-fix-signedness-bug-in-lbs_auth_to_authtype.patch \
+	file://libertas/0008-drivers-net-wireless-libertas-if_usb.c-add-missing-d.patch \
+	file://libertas/0009-libertas-Firmware-loading-simplifications.patch \
+	file://libertas/0010-libertas-harden-up-exit-paths.patch \
+	file://libertas/0011-libertas-add-asynchronous-firmware-loading-capabilit.patch \
+	file://libertas/0012-libertas-SDIO-convert-to-asynchronous-firmware-loadi.patch \
+	file://libertas/0013-libertas-USB-convert-to-asynchronous-firmware-loadin.patch \
+	file://libertas/0014-libertas-CS-convert-to-asynchronous-firmware-loading.patch \
+	file://libertas/0015-libertas-add-missing-include.patch \
+	file://libertas/0016-remove-debug-msgs-due-to-missing-in_interrupt.patch \
 	\
 	file://beaglebone/0001-arm-boot-compressed-default-asm-arch-to-armv7-a.patch \
 	\
@@ -1248,4 +1535,5 @@ PATCHES_OVER_PSP = " \
 	file://beaglebone/0068-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch \
 	file://beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch \
 	file://beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch \
+	file://beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch \
 "
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 04/12] linux-ti33x-psp 3.2: fix audio/spidev clash on beaglebone
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 02/12] beaglebone-tester: re-enable pmic test Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 03/12] linux-ti33x-psp 3.2: update to 3.2.21, add libertas fixes Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 05/12] beaglebone-capes: use backlight hack for all LCD4 variants Koen Kooi
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 .../0072-beaglebone-fix-audio-spi-clash.patch      |   25 ++++++++++++++++++++
 recipes-kernel/linux/linux-ti33x-psp_3.2.bb        |    3 ++-
 2 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch

diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch
new file mode 100644
index 0000000..a916ad5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch
@@ -0,0 +1,25 @@
+From 45ddec832968e3c1e31cf38a891372ba80027e2d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 26 Jun 2012 08:39:04 +0200
+Subject: [PATCH] beaglebone: fix audio/spi clash
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index f6559b6..d0681a2 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -2910,6 +2910,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		
+ 		beaglebone_leds_free = 0;
+ 		dvileds_init(0,0);
++		beaglebone_spi1_free = 0;
+ 		mcasp0_init(0,0);
+ 	
+ 		if (!strncmp("00A1", cape_config.version, 4) || !strncmp("000A", cape_config.version, 4)) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index 645d4dc..ab42c44 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -15,7 +15,7 @@ PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.21", d)}"
 
 BRANCH = "v3.2-staging"
 SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
-MACHINE_KERNEL_PR_append = "a+gitr${SRCREV}"
+MACHINE_KERNEL_PR_append = "c+gitr${SRCREV}"
 
 COMPATIBLE_MACHINE = "(ti33x)"
 
@@ -1536,4 +1536,5 @@ PATCHES_OVER_PSP = " \
 	file://beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch \
 	file://beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch \
 	file://beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch \
+	file://beaglebone/0072-beaglebone-fix-audio-spi-clash.patch \
 "
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 05/12] beaglebone-capes: use backlight hack for all LCD4 variants
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (2 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 04/12] linux-ti33x-psp 3.2: fix audio/spidev clash on beaglebone Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 06/12] linux-ti33x-psp 3.2: add camera driver for beaglebone Koen Kooi
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 recipes-ti/beagleboard/beaglebone-capes.bb           |    2 +-
 recipes-ti/beagleboard/beaglebone-capes/cape-stop.sh |    4 ++--
 recipes-ti/beagleboard/beaglebone-capes/cape.sh      |    2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/recipes-ti/beagleboard/beaglebone-capes.bb b/recipes-ti/beagleboard/beaglebone-capes.bb
index b463a89..ae9132e 100644
--- a/recipes-ti/beagleboard/beaglebone-capes.bb
+++ b/recipes-ti/beagleboard/beaglebone-capes.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "Userspace setup for beaglebone capes"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
 
-PR = "r3"
+PR = "r4"
 
 inherit allarch
 
diff --git a/recipes-ti/beagleboard/beaglebone-capes/cape-stop.sh b/recipes-ti/beagleboard/beaglebone-capes/cape-stop.sh
index 4950017..222a010 100755
--- a/recipes-ti/beagleboard/beaglebone-capes/cape-stop.sh
+++ b/recipes-ti/beagleboard/beaglebone-capes/cape-stop.sh
@@ -5,8 +5,8 @@ for eeprom in /sys/bus/i2c/devices/3-005*/eeprom ; do
 		"BB-BONE-LCD3-01.")
 				echo "Turning off backlight for LCD3 cape"
 				i2cset -f -y 1 0x24 0x07 0x00;;
-		"BB-BONE-LCD4-01.")
-				echo "Turning off backlight for LCD3 cape"
+		"BB-BONE-LCD4"*)
+				echo "Turning off backlight for LCD4 cape"
 				i2cset -f -y 1 0x24 0x07 0x00;;
 		*)
 				echo "unknown cape: $PARTNUMBER";;
diff --git a/recipes-ti/beagleboard/beaglebone-capes/cape.sh b/recipes-ti/beagleboard/beaglebone-capes/cape.sh
index 566cdf5..c279349 100755
--- a/recipes-ti/beagleboard/beaglebone-capes/cape.sh
+++ b/recipes-ti/beagleboard/beaglebone-capes/cape.sh
@@ -6,7 +6,7 @@ for eeprom in /sys/bus/i2c/devices/3-005*/eeprom ; do
 				echo "Turning on backlight for LCD3 cape"
 				i2cset -f -y 1 0x24 0x07 0x09
 				i2cset -f -y 1 0x24 0x08 0x60;;
-		"BB-BONE-LCD4-01.")
+		"BB-BONE-LCD4"*)
 				echo "Turning on backlight for LCD4 cape"
 				i2cset -f -y 1 0x24 0x07 0x09
 				i2cset -f -y 1 0x24 0x08 0x60;;
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 06/12] linux-ti33x-psp 3.2: add camera driver for beaglebone
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (3 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 05/12] beaglebone-capes: use backlight hack for all LCD4 variants Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 07/12] linux-ti33x-psp 3.2: add support for audio cape and disable LBO gpio for battery cape Koen Kooi
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 .../linux/linux-ti33x-psp-3.2/beaglebone/defconfig |   43 +++++++++++++-------
 recipes-kernel/linux/linux-ti33x-psp_3.2.bb        |    3 +-
 2 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig
index 692d71a..8e8a1c5 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.2.18 Kernel Configuration
+# Linux/arm 3.2.21 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_HAVE_PWM=y
@@ -1408,6 +1408,7 @@ CONFIG_TOUCHSCREEN_ADS7846=y
 # CONFIG_TOUCHSCREEN_INEXIO is not set
 # CONFIG_TOUCHSCREEN_MK712 is not set
 # CONFIG_TOUCHSCREEN_PENMOUNT is not set
+CONFIG_TOUCHSCREEN_EDT_FT5X06=y
 # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
 # CONFIG_TOUCHSCREEN_TOUCHWIN is not set
 CONFIG_TOUCHSCREEN_TI_TSCADC=y
@@ -1971,13 +1972,14 @@ CONFIG_MEDIA_TUNER_MAX2165=m
 CONFIG_MEDIA_TUNER_TDA18218=m
 CONFIG_MEDIA_TUNER_TDA18212=m
 CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_GEN=y
 CONFIG_VIDEOBUF_VMALLOC=m
 CONFIG_VIDEOBUF_DVB=m
 CONFIG_VIDEO_TVEEPROM=m
 CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEOBUF2_CORE=m
-CONFIG_VIDEOBUF2_MEMOPS=m
+CONFIG_VIDEOBUF2_CORE=y
+CONFIG_VIDEOBUF2_MEMOPS=y
+CONFIG_VIDEOBUF2_DMA_CONTIG=y
 CONFIG_VIDEOBUF2_VMALLOC=m
 CONFIG_VIDEO_CAPTURE_DRIVERS=y
 # CONFIG_VIDEO_ADV_DEBUG is not set
@@ -2079,7 +2081,25 @@ CONFIG_VIDEO_VIVI=m
 # CONFIG_VIDEO_W9966 is not set
 # CONFIG_VIDEO_CPIA2 is not set
 # CONFIG_VIDEO_AU0828 is not set
-# CONFIG_SOC_CAMERA is not set
+CONFIG_SOC_CAMERA=y
+# CONFIG_SOC_CAMERA_IMX074 is not set
+# CONFIG_SOC_CAMERA_MT9M001 is not set
+# CONFIG_SOC_CAMERA_MT9M111 is not set
+# CONFIG_SOC_CAMERA_MT9T031 is not set
+CONFIG_SOC_CAMERA_MT9T112=y
+# CONFIG_SOC_CAMERA_MT9V022 is not set
+# CONFIG_SOC_CAMERA_RJ54N1 is not set
+# CONFIG_SOC_CAMERA_TW9910 is not set
+# CONFIG_SOC_CAMERA_PLATFORM is not set
+# CONFIG_SOC_CAMERA_OV2640 is not set
+# CONFIG_SOC_CAMERA_OV5642 is not set
+# CONFIG_SOC_CAMERA_OV6650 is not set
+# CONFIG_SOC_CAMERA_OV772X is not set
+# CONFIG_SOC_CAMERA_OV9640 is not set
+# CONFIG_SOC_CAMERA_OV9740 is not set
+# CONFIG_VIDEO_SH_MOBILE_CSI2 is not set
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
+CONFIG_VIDEO_QL_CAMIF=y
 CONFIG_V4L_USB_DRIVERS=y
 CONFIG_USB_VIDEO_CLASS=m
 CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
@@ -2425,19 +2445,11 @@ CONFIG_DISPLAY_SUPPORT=y
 #
 CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
+# CONFIG_FONTS is not set
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
 CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_MONO is not set
 # CONFIG_LOGO_LINUX_VGA16 is not set
@@ -2570,6 +2582,7 @@ CONFIG_USB_DEVICEFS=y
 CONFIG_USB_DEVICE_CLASS=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
 CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
 # CONFIG_USB_OTG_WHITELIST is not set
 # CONFIG_USB_OTG_BLACKLIST_HUB is not set
 # CONFIG_USB_DWC3 is not set
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index ab42c44..95175cb 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -15,7 +15,7 @@ PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.21", d)}"
 
 BRANCH = "v3.2-staging"
 SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
-MACHINE_KERNEL_PR_append = "c+gitr${SRCREV}"
+MACHINE_KERNEL_PR_append = "d+gitr${SRCREV}"
 
 COMPATIBLE_MACHINE = "(ti33x)"
 
@@ -1537,4 +1537,5 @@ PATCHES_OVER_PSP = " \
 	file://beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch \
 	file://beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch \
 	file://beaglebone/0072-beaglebone-fix-audio-spi-clash.patch \
+	file://beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch \
 "
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 07/12] linux-ti33x-psp 3.2: add support for audio cape and disable LBO gpio for battery cape
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (4 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 06/12] linux-ti33x-psp 3.2: add camera driver for beaglebone Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 08/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree Koen Kooi
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 ...add-support-for-DVI-audio-and-audio-only-.patch |   63 ++++++++++++++++++++
 ...glebone-disable-LBO-GPIO-for-battery-cape.patch |   35 +++++++++++
 recipes-kernel/linux/linux-ti33x-psp_3.2.bb        |    4 +-
 3 files changed, 101 insertions(+), 1 deletion(-)
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch

diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
new file mode 100644
index 0000000..60d5be0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
@@ -0,0 +1,63 @@
+From d87e8e9379764451de06b3f6d13d19424836f64c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 3 Jul 2012 08:45:47 +0200
+Subject: [PATCH] beaglebone: add support for DVI+audio and audio-only capes
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |   32 ++++++++++++++++++++++++++++++--
+ 1 file changed, 30 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 1680612..4b3f7d2 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -2906,8 +2906,10 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		
+ 		beaglebone_leds_free = 0;
+ 		dvileds_init(0,0);
+-		beaglebone_spi1_free = 0;
+-		mcasp0_init(0,0);
++
++		// Uncomment these for custom DVI capes with audio populated
++		//beaglebone_spi1_free = 0;
++		//mcasp0_init(0,0);
+ 	
+ 		if (!strncmp("00A1", cape_config.version, 4) || !strncmp("000A", cape_config.version, 4)) {
+ 			pr_info("BeagleBone cape: DVI init for revision A1 or older\n");
+@@ -2923,6 +2925,32 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 			dvi_init(0,0);
+ 		}
+ 	}
++
++	if (!strncmp("BB-BONE-DVID-02", cape_config.partnumber, 15)) {
++		pr_info("BeagleBone cape: initializing DVI+audio cape\n");
++
++		beaglebone_leds_free = 0;
++		dvileds_init(0,0);
++
++		beaglebone_spi1_free = 0;
++		mcasp0_init(0,0);
++	
++		setup_pin_mux(dvia2_pin_mux);
++		gpio_request(BEAGLEBONEDVI_PDn_A2, "DVI_PDn");
++		gpio_direction_output(BEAGLEBONEDVI_PDn_A2, 1);
++		dvi_init(0,0);
++	}
++
++	if (!strncmp("BB-BONE-AUDI-01", cape_config.partnumber, 15)) {
++		pr_info("BeagleBone cape: initializing audio cape\n");
++
++		beaglebone_leds_free = 0;
++		dvileds_init(0,0);
++
++		beaglebone_spi1_free = 0;
++		mcasp0_init(0,0);
++	}
++
+ 	if (!strncmp("BB-BONE-LCD7-01", cape_config.partnumber, 15)) {
+ 		pr_info("BeagleBone cape: initializing LCD cape\n");
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
new file mode 100644
index 0000000..641db75
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
@@ -0,0 +1,35 @@
+From 9332627ac6b70511742208d6fa7c7042c203f852 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 3 Jul 2012 21:28:44 +0200
+Subject: [PATCH 75/75] beaglebone: disable LBO GPIO for battery cape
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index af75c88..7d6ac77 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -2999,7 +2999,8 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		pr_info("BeagleBone cape: initializing battery cape\n");
+ 		// gpio1_6, P9_15 lowbat output
+ 		// AIN4, P9_33 vbat
+-		setup_pin_mux(batterycape_pin_mux);
++		/* LBO doesn't work, so disable it for now
++ 		setup_pin_mux(batterycape_pin_mux);
+ 		#if defined(CONFIG_CHARGER_GPIO)
+ 			int err;
+ 			err = platform_device_register(&beaglebone_charger_device);
+@@ -3007,6 +3008,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 				pr_err("failed to register BeagleBone battery cape gpio\n");
+ 		
+ 		#endif
++		*/
+ 	}
+ 	
+ 	if (!strncmp("BB-BONE-SERL-01", cape_config.partnumber, 15)) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index 95175cb..01bfc23 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -15,7 +15,7 @@ PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.21", d)}"
 
 BRANCH = "v3.2-staging"
 SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
-MACHINE_KERNEL_PR_append = "d+gitr${SRCREV}"
+MACHINE_KERNEL_PR_append = "f+gitr${SRCREV}"
 
 COMPATIBLE_MACHINE = "(ti33x)"
 
@@ -1538,4 +1538,6 @@ PATCHES_OVER_PSP = " \
 	file://beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch \
 	file://beaglebone/0072-beaglebone-fix-audio-spi-clash.patch \
 	file://beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch \
+	file://beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch \
+	file://beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch \
 "
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 08/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (5 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 07/12] linux-ti33x-psp 3.2: add support for audio cape and disable LBO gpio for battery cape Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 09/12] linux-ti33x-psp 3.2: add fixed for cssp, fbset and OPP50 Koen Kooi
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

All patches have been rediffed and boot tested

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 ...add-option-to-boot-kernel-from-boot-in-ex.patch |   26 +
 ...only-do-in-kernel-dhcp-when-using-NFS-use.patch |   35 -
 ...ddr_defs-change-DDR-timings-for-15x15-EVM.patch |   30 -
 ...boot-kernel-from-boot-in-ext2-3-filesyste.patch |   27 -
 .../0002-am335x_evm-set-bootdelay-to-1.patch       |   26 +
 ...-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch |   26 +
 .../0003-am335x_evm-set-bootdelay-to-1.patch       |   26 -
 ...-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch |   26 -
 .../0004-am335x_evm-switch-to-ext4.patch           |   26 +
 ...ge-mmc_load_uimage-to-load-at-a-fixed-add.patch |   49 -
 ...35x-evm-enable-i2c2-pinmux-for-beaglebone.patch |   63 +
 ...vm-Fix-bone-pmic-shut-down-over-USB-power.patch |   82 -
 .../0006-ext2load-increase-read-speed.patch        |   74 +
 ...fix-ext2load-and-specify-partition-for-bo.patch |   30 +
 .../0007-am335x_evm-switch-to-ext4.patch           |   26 -
 ...-evm-turn-d-cache-on-globally-turn-it-off.patch |   46 -
 ...evm-load-uImage-from-boot-instead-of-VFAT.patch |   35 +
 ...35x-evm-enable-i2c2-pinmux-for-beaglebone.patch |   63 -
 .../2011.09git/0009-ext4fs-ls-load-support.patch   | 2362 ++++++++++++++++++++
 .../0010-am335x-switch-to-ext4-mode.patch          |   52 +
 .../0011-ext2load-increase-read-speed.patch        |   74 -
 ...fix-ext2load-and-specify-partition-for-bo.patch |   28 -
 ...evm-load-uImage-from-boot-instead-of-VFAT.patch |   35 -
 .../2011.09git/0014-ext4fs-ls-load-support.patch   | 2362 --------------------
 .../0015-am335x-switch-to-ext4-mode.patch          |   51 -
 recipes-bsp/u-boot/u-boot_2011.10rc.bb             |   31 +-
 26 files changed, 2733 insertions(+), 2978 deletions(-)
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-add-option-to-boot-kernel-from-boot-in-ex.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-only-do-in-kernel-dhcp-when-using-NFS-use.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0001-ddr_defs-change-DDR-timings-for-15x15-EVM.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-boot-kernel-from-boot-in-ext2-3-filesyste.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-set-bootdelay-to-1.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x_evm-set-bootdelay-to-1.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x_evm-switch-to-ext4.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-Change-mmc_load_uimage-to-load-at-a-fixed-add.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0006-am335x-evm-Fix-bone-pmic-shut-down-over-USB-power.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0006-ext2load-increase-read-speed.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x_evm-switch-to-ext4.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0008-HACK-am335x-evm-turn-d-cache-on-globally-turn-it-off.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0008-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0009-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0009-ext4fs-ls-load-support.patch
 create mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0010-am335x-switch-to-ext4-mode.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0011-ext2load-increase-read-speed.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0012-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0013-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0014-ext4fs-ls-load-support.patch
 delete mode 100644 recipes-bsp/u-boot/u-boot/2011.09git/0015-am335x-switch-to-ext4-mode.patch

diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-add-option-to-boot-kernel-from-boot-in-ex.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-add-option-to-boot-kernel-from-boot-in-ex.patch
new file mode 100644
index 0000000..03569d1
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-add-option-to-boot-kernel-from-boot-in-ex.patch
@@ -0,0 +1,26 @@
+From 65ba75f46ec4c9749996ec290fa1c5e4e6264ce3 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 1 Nov 2011 12:21:07 +0100
+Subject: [PATCH 01/10] am335x_evm: add option to boot kernel from /boot in
+ ext2/3 filesystem
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ include/configs/am335x_evm.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
+index 44a8500..83ccb5a 100755
+--- a/include/configs/am335x_evm.h
++++ b/include/configs/am335x_evm.h
+@@ -75,6 +75,7 @@
+ 	"importbootenv=echo Importing environment from mmc ...; " \
+ 		"env import -t $loadaddr $filesize\0" \
+ 	"mmc_load_uimage=fatload mmc ${mmc_dev} ${kloadaddr} ${bootfile}\0" \
++	"mmc_load_uimage_ext2=ext2load ${mmc_dev} ${kloadaddr} /boot/${bootfile}\0" \
+ 	"optargs=\0" \
+ 	"bootargs_defaults=setenv bootargs " \
+ 		"console=${console} " \
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-only-do-in-kernel-dhcp-when-using-NFS-use.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-only-do-in-kernel-dhcp-when-using-NFS-use.patch
deleted file mode 100644
index 1ccfe19..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0001-am335x_evm-only-do-in-kernel-dhcp-when-using-NFS-use.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 557a773eb245f3f2508e40d6d8a6c593738fd46f Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 1 Nov 2011 12:19:54 +0100
-Subject: [PATCH 1/4] am335x_evm: only do in-kernel dhcp when using NFS, userspace will do dhcp otherwise
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 41a3316..93b3161 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -69,7 +69,7 @@
- 	"nfsopts=nolock\0" \
- 	"static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}" \
- 			"::off\0" \
--	"ip_method=dhcp\0" \
-+	"ip_method=none\0" \
- 	"bootenv=uEnv.txt\0" \
- 	"loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}\0" \
- 	"importbootenv=echo Importing environment from mmc ...; " \
-@@ -99,7 +99,7 @@
- 		"setenv bootargs ${bootargs} " \
- 		"root=/dev/nfs " \
- 		"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
--		"ip=${ip_method}\0" \
-+		"ip=dhcp\0" \
- 	"mmc_boot=run mmc_args; " \
- 		"run mmc_load_uimage; " \
- 		"bootm ${loadaddr}\0" \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0001-ddr_defs-change-DDR-timings-for-15x15-EVM.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0001-ddr_defs-change-DDR-timings-for-15x15-EVM.patch
deleted file mode 100644
index 4563a2c..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0001-ddr_defs-change-DDR-timings-for-15x15-EVM.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 7a3b3b04b1aed6a649d99396f914ec042968f924 Mon Sep 17 00:00:00 2001
-From: Chase Maupin <Chase.Maupin@ti.com>
-Date: Thu, 9 Feb 2012 13:09:27 -0600
-Subject: [PATCH] ddr_defs: change DDR timings for 15x15 EVM
-
-* For cold silicon the DDR timings need to be relaxed in order for
-  the device to boot with DDR at 266MHz
-* Fix proposed by James Doublesin
-
-Signed-off-by: Chase Maupin <Chase.Maupin@ti.com>
----
- arch/arm/include/asm/arch-ti81xx/ddr_defs.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/include/asm/arch-ti81xx/ddr_defs.h b/arch/arm/include/asm/arch-ti81xx/ddr_defs.h
-index 6c4b422..0b7ffe7 100644
---- a/arch/arm/include/asm/arch-ti81xx/ddr_defs.h
-+++ b/arch/arm/include/asm/arch-ti81xx/ddr_defs.h
-@@ -338,7 +338,7 @@
- #define DDR2_RD_DQS		0x40
- #define DDR2_PHY_FIFO_WE	0x56
- #else
--#define EMIF_READ_LATENCY	0x04
-+#define EMIF_READ_LATENCY	0x05
- #define EMIF_TIM1		0x0666B3D6
- #define EMIF_TIM2		0x143731DA
- #define	EMIF_TIM3		0x00000347
--- 
-1.7.0.4
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-boot-kernel-from-boot-in-ext2-3-filesyste.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-boot-kernel-from-boot-in-ext2-3-filesyste.patch
deleted file mode 100644
index 61614f7..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-boot-kernel-from-boot-in-ext2-3-filesyste.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 206baf5d1d8eb19312c0c8216e6722a63548573d Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 1 Nov 2011 12:21:07 +0100
-Subject: [PATCH 2/4] am335x_evm: add option to boot kernel from /boot in ext2/3 filesystem
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 93b3161..9bbfe3b 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -74,7 +74,8 @@
- 	"loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}\0" \
- 	"importbootenv=echo Importing environment from mmc ...; " \
- 		"env import -t $loadaddr $filesize\0" \
--	"mmc_load_uimage=fatload mmc ${mmc_dev} ${loadaddr} ${bootfile}\0" \
-+	"mmc_load_uimage=fatload mmc ${mmc_dev} ${loadaddr} ${bootfile}\0" \
-+	"mmc_load_uimage_ext2=ext2load ${mmc_dev} ${loadaddr} /boot/${bootfile}\0" \
- 	"optargs=\0" \
- 	"bootargs_defaults=setenv bootargs " \
- 		"console=${console} " \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-set-bootdelay-to-1.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-set-bootdelay-to-1.patch
new file mode 100644
index 0000000..fdce9c4
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0002-am335x_evm-set-bootdelay-to-1.patch
@@ -0,0 +1,26 @@
+From cb92653d26476880602a20b62da03a35d36d622e Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 1 Nov 2011 12:21:38 +0100
+Subject: [PATCH 02/10] am335x_evm: set bootdelay to 1
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ include/configs/am335x_evm.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
+index 83ccb5a..2558775 100755
+--- a/include/configs/am335x_evm.h
++++ b/include/configs/am335x_evm.h
+@@ -127,7 +127,7 @@
+ 
+ #ifndef CONFIG_RESTORE_FLASH
+ /* set to negative value for no autoboot */
+-#define CONFIG_BOOTDELAY		3
++#define CONFIG_BOOTDELAY		1
+ 
+ #define CONFIG_BOOTCOMMAND \
+ 	"if mmc rescan; then " \
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch
new file mode 100644
index 0000000..8096df0
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch
@@ -0,0 +1,26 @@
+From ca9a3452249bfda3d9a8096794b4fbfbf212d72f Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 1 Nov 2011 12:22:30 +0100
+Subject: [PATCH 03/10] am335x-evm: make MMC rootfs RO on boot so fsck works
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ include/configs/am335x_evm.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
+index 2558775..1b4fa37 100755
+--- a/include/configs/am335x_evm.h
++++ b/include/configs/am335x_evm.h
+@@ -50,7 +50,7 @@
+ 	"script_addr=0x81900000\0" \
+ 	"console=ttyO0,115200n8\0" \
+ 	"mmc_dev=0\0" \
+-	"mmc_root=/dev/mmcblk0p2 rw\0" \
++	"mmc_root=/dev/mmcblk0p2 ro\0" \
+ 	"nand_root=ubi0:rootfs rw ubi.mtd=7,2048\0" \
+ 	"spi_root=/dev/mtdblock4 rw\0" \
+ 	"nor_root=/dev/mtdblock3 rw\0" \
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x_evm-set-bootdelay-to-1.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x_evm-set-bootdelay-to-1.patch
deleted file mode 100644
index 3265540..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0003-am335x_evm-set-bootdelay-to-1.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From bf513a05bc37f6d32e14c1e46d090773d1664c99 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 1 Nov 2011 12:21:38 +0100
-Subject: [PATCH 3/4] am335x_evm: set bootdelay to 1
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 9bbfe3b..6143dc3 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -38,7 +38,7 @@
- #define CONFIG_INITRD_TAG		/* Required for ramdisk support */
- 
- /* set to negative value for no autoboot */
--#define CONFIG_BOOTDELAY		3
-+#define CONFIG_BOOTDELAY		1
- 
- #define CONFIG_MMC
- #define CONFIG_NAND
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch
deleted file mode 100644
index 7219554..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 63e5b3b4271917e0a3c5a4903a76fdfb30118d3c Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 1 Nov 2011 12:22:30 +0100
-Subject: [PATCH 4/4] am335x-evm: make MMC rootfs RO on boot so fsck works
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 6143dc3..56e36da 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -50,7 +50,7 @@
- 	"script_addr=0x81900000\0" \
- 	"console=ttyO0,115200n8\0" \
- 	"mmc_dev=0\0" \
--	"mmc_root=/dev/mmcblk0p2 rw\0" \
-+	"mmc_root=/dev/mmcblk0p2 ro\0" \
- 	"nand_root=/dev/mtdblock7 rw\0" \
- 	"spi_root=/dev/mtdblock4 rw\0" \
- 	"nor_root=/dev/mtdblock3 rw\0" \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x_evm-switch-to-ext4.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x_evm-switch-to-ext4.patch
new file mode 100644
index 0000000..3d8495e
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0004-am335x_evm-switch-to-ext4.patch
@@ -0,0 +1,26 @@
+From 97fa23e167d3e4b46c71a5fac1a5e9aa39f0a551 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 7 Nov 2011 21:33:32 +0100
+Subject: [PATCH 04/10] am335x_evm: switch to ext4
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ include/configs/am335x_evm.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
+index 1b4fa37..3d37058 100755
+--- a/include/configs/am335x_evm.h
++++ b/include/configs/am335x_evm.h
+@@ -54,7 +54,7 @@
+ 	"nand_root=ubi0:rootfs rw ubi.mtd=7,2048\0" \
+ 	"spi_root=/dev/mtdblock4 rw\0" \
+ 	"nor_root=/dev/mtdblock3 rw\0" \
+-	"mmc_root_fs_type=ext3 rootwait\0" \
++	"mmc_root_fs_type=ext4 rootwait\0" \
+ 	"nand_root_fs_type=ubifs rootwait=1\0" \
+ 	"spi_root_fs_type=jffs2\0" \
+ 	"nor_root_fs_type=jffs2\0" \
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-Change-mmc_load_uimage-to-load-at-a-fixed-add.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-Change-mmc_load_uimage-to-load-at-a-fixed-add.patch
deleted file mode 100644
index 126ff24..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-Change-mmc_load_uimage-to-load-at-a-fixed-add.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From bd152bec1086a35f426c53c9bb9f0c309e216037 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 2 Nov 2011 19:07:10 +0100
-Subject: [PATCH 5/5] am335x: Change mmc_load_uimage to load at a fixed address
- The kernel normally expects to be run from 0x80008000 so if we
- load from SD card at that-mkimage header we can save a copy of
- the kernel.
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 56e36da..8c0fae2 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -74,8 +74,8 @@
- 	"loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}\0" \
- 	"importbootenv=echo Importing environment from mmc ...; " \
- 		"env import -t $loadaddr $filesize\0" \
--	"mmc_load_uimage=fatload mmc ${mmc_dev} ${loadaddr} ${bootfile}\0" \
--	"mmc_load_uimage_ext2=ext2load ${mmc_dev} ${loadaddr} /boot/${bootfile}\0" \
-+	"mmc_load_uimage=fatload mmc ${mmc_dev} 0x80007fc0 ${bootfile}\0" \
-+	"mmc_load_uimage_ext2=ext2load ${mmc_dev} 0x80007fc0 /boot/${bootfile}\0" \
- 	"optargs=\0" \
- 	"bootargs_defaults=setenv bootargs " \
- 		"console=${console} " \
-@@ -103,7 +103,7 @@
- 		"ip=dhcp\0" \
- 	"mmc_boot=run mmc_args; " \
- 		"run mmc_load_uimage; " \
--		"bootm ${loadaddr}\0" \
-+		"bootm 0x80007fc0\0" \
- 	"nand_boot=echo Booting from nand ...; " \
- 		"run nand_args; " \
- 		"nand read.i ${loadaddr} ${nand_src_addr} ${nand_img_siz}; " \
-@@ -137,7 +137,7 @@
- 		"fi;" \
- 		"if run mmc_load_uimage; then " \
- 			"run mmc_args;" \
--			"bootm ${loadaddr};" \
-+			"bootm 0x80007fc0;" \
- 		"fi;" \
- 	"fi;" \
- 	"run nand_boot;" \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch
new file mode 100644
index 0000000..fa2790d
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0005-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch
@@ -0,0 +1,63 @@
+From e2121ca4fd82f8313b764fe7fb24511ef7d10904 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 16 Nov 2011 18:57:12 +0100
+Subject: [PATCH 05/10] am335x-evm: enable i2c2 pinmux for beaglebone
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ board/ti/am335x/mux.c |   18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/board/ti/am335x/mux.c b/board/ti/am335x/mux.c
+index 885b33f..70645d4 100644
+--- a/board/ti/am335x/mux.c
++++ b/board/ti/am335x/mux.c
+@@ -310,6 +310,12 @@ static struct module_pin_mux i2c1_pin_mux[] = {
+ 	{-1},
+ };
+ 
++static struct module_pin_mux i2c2_pin_mux[] = {
++	{OFFSET(uart1_ctsn), (MODE(3) | RXACTIVE | PULLUDEN | SLEWCTRL)},  /* I2C_DATA */
++	{OFFSET(uart1_rtsn), (MODE(3) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
++	{-1},
++};
++
+ #ifndef CONFIG_NO_ETH
+ static struct module_pin_mux rgmii1_pin_mux[] = {
+ 	{OFFSET(mii1_txen), MODE(2)},			/* RGMII1_TCTL */
+@@ -598,6 +604,7 @@ static struct evm_pin_mux sk_evm_pin_mux[] = {
+ static struct evm_pin_mux beaglebone_pin_mux[] = {
+ 	{uart0_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
+ 	{i2c1_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_4, DEV_ON_BASEBOARD},
++	{i2c2_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
+ #ifdef CONFIG_NAND
+ 	{nand_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3, DEV_ON_DGHTR_BRD},
+ #endif
+@@ -617,6 +624,7 @@ static struct evm_pin_mux beaglebone_pin_mux[] = {
+ static struct evm_pin_mux beaglebone_old_pin_mux[] = {
+ 	{uart0_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
+ 	{i2c1_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_4, DEV_ON_BASEBOARD},
++	{i2c2_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
+ #ifdef CONFIG_NAND
+ 	{nand_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3, DEV_ON_DGHTR_BRD},
+ #endif
+@@ -713,6 +721,16 @@ void enable_i2c0_pin_mux(void)
+ 	configure_module_pin_mux(i2c0_pin_mux);
+ }
+ 
++void enable_i2c1_pin_mux(void)
++{
++	configure_module_pin_mux(i2c1_pin_mux);
++}
++
++void enable_i2c2_pin_mux(void)
++{
++	configure_module_pin_mux(i2c2_pin_mux);
++}
++
+ void enable_uart0_pin_mux(void)
+ {
+ 	configure_module_pin_mux(uart0_pin_mux);
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0006-am335x-evm-Fix-bone-pmic-shut-down-over-USB-power.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0006-am335x-evm-Fix-bone-pmic-shut-down-over-USB-power.patch
deleted file mode 100644
index 158483b..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0006-am335x-evm-Fix-bone-pmic-shut-down-over-USB-power.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 801316091ac7e14cc8fa9b0bd2cdce76bea06991 Mon Sep 17 00:00:00 2001
-From: Joel A Fernandes <joelagnel@ti.com>
-Date: Thu, 3 Nov 2011 22:19:19 -0500
-Subject: [PATCH v2] am335x-evm: Fix bone pmic shut down over USB power
-Cc: trini@ti.com,
-    chase.maupin@ti.com
-
-* Set DCDC2 to 1.2v for all power sources and board revs except for A1
-* Set USB current trip point to 1300mA for all boards and power sources.
-* Only Skip setting of MPU frequency to 720MHz for A1 and USB-powered boards.
-
-Credits to Jason for noticing this. Tested with several reboots over USB on a Rev A2/3.
-
-v2 changes:
-Take care of not upping DCDC2 and LDO voltages for A1.
-For A1- only operation done is to set the USB current limit.
-
-Signed-off-by: Jason Kridner <jdk@ti.com>
-Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
----
-Chase has volunteered to test this out on his A1.
-
- board/ti/am335x/evm.c |   31 ++++++++++++++++---------------
- 1 files changed, 16 insertions(+), 15 deletions(-)
-
-diff --git a/board/ti/am335x/evm.c b/board/ti/am335x/evm.c
-index e95a088..bc1119e 100644
---- a/board/ti/am335x/evm.c
-+++ b/board/ti/am335x/evm.c
-@@ -483,12 +483,20 @@ void spl_board_init(void)
- 		if (tps65217_reg_read(STATUS, &pmic_status_reg))
- 			return;
- 
-+		/* Increase USB current limit to 1300mA */
-+		if (tps65217_reg_write(PROT_LEVEL_NONE, POWER_PATH,
-+				       USB_INPUT_CUR_LIMIT_1300MA,
-+				       USB_INPUT_CUR_LIMIT_MASK))
-+			printf("tps65217_reg_write failure\n");
-+
- 		/* Only perform PMIC configurations if board rev > A1 */
- 		if (!strncmp(header.version, "00A1", 4))
- 			return;
- 
--		if (!(pmic_status_reg & PWR_SRC_AC_BITMASK)) {
--			printf("No AC power, disabling frequency switch\n");
-+		/* Set DCDC2 (MPU) voltage to 1.275V */
-+		if (tps65217_voltage_update(DEFDCDC2,
-+					     DCDC_VOLT_SEL_1275MV)) {
-+			printf("tps65217_voltage_update failure\n");
- 			return;
- 		}
- 
-@@ -501,20 +509,13 @@ void spl_board_init(void)
- 				       LDO_VOLTAGE_OUT_3_3, LDO_MASK))
- 			printf("tps65217_reg_write failure\n");
- 
--		/* Increase USB current limit to 1300mA */
--		if (tps65217_reg_write(PROT_LEVEL_NONE, POWER_PATH,
--				       USB_INPUT_CUR_LIMIT_1300MA,
--				       USB_INPUT_CUR_LIMIT_MASK))
--			printf("tps65217_reg_write failure\n");
--
--		/* Set DCDC2 (MPU) voltage to 1.275V */
--		if (!tps65217_voltage_update(DEFDCDC2,
--					     DCDC_VOLT_SEL_1275MV)) {
--			/* Set MPU Frequency to 720MHz */
--			mpu_pll_config(MPUPLL_M_720);
--		} else {
--			printf("tps65217_voltage_update failure\n");
-+		if (!(pmic_status_reg & PWR_SRC_AC_BITMASK)) {
-+			printf("No AC power, disabling frequency switch\n");
-+			return;
- 		}
-+
-+		/* Set MPU Frequency to 720MHz */
-+		mpu_pll_config(MPUPLL_M_720);
- 	} else {
- 		/* 
- 		 * EVM PMIC code.  PMIC voltage is configuring for frequency
--- 
-1.7.4.1
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0006-ext2load-increase-read-speed.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0006-ext2load-increase-read-speed.patch
new file mode 100644
index 0000000..ee33d90
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0006-ext2load-increase-read-speed.patch
@@ -0,0 +1,74 @@
+From f6894e8bc193d225267e4d58a633354e9937c93d Mon Sep 17 00:00:00 2001
+From: "u-boot@lakedaemon.net" <u-boot@lakedaemon.net>
+Date: Wed, 28 Mar 2012 04:37:11 +0000
+Subject: [PATCH 06/10] ext2load: increase read speed
+
+This patch dramatically drops the amount of time u-boot needs to read a
+file from an ext2 partition.  On a typical 2 to 5 MB file (kernels and
+initrds) it goes from tens of seconds to a couple seconds.
+
+All we are doing here is grouping contiguous blocks into one read.
+
+Boot tested on Globalscale Technologies Dreamplug (Kirkwood ARM SoC)
+with three different files.  sha1sums were calculated in Linux
+userspace, and then confirmed after ext2load.
+
+Signed-off-by: Jason Cooper <u-boot@lakedaemon.net>
+---
+ fs/ext2/ext2fs.c |   26 ++++++++++++++++++++++++--
+ 1 file changed, 24 insertions(+), 2 deletions(-)
+
+diff --git a/fs/ext2/ext2fs.c b/fs/ext2/ext2fs.c
+index e119e13..8531db5 100644
+--- a/fs/ext2/ext2fs.c
++++ b/fs/ext2/ext2fs.c
+@@ -414,7 +414,6 @@ int ext2fs_read_file
+ 		if (blknr < 0) {
+ 			return (-1);
+ 		}
+-		blknr = blknr << log2blocksize;
+ 
+ 		/* Last block.  */
+ 		if (i == blockcnt - 1) {
+@@ -432,6 +431,29 @@ int ext2fs_read_file
+ 			blockend -= skipfirst;
+ 		}
+ 
++		/* grab middle blocks in one go */
++		if (i != pos / blocksize && i != blockcnt - 1 && blockcnt > 3) {
++			int oldblk = blknr;
++			int blocknxt;
++			while (i < blockcnt - 1) {
++				blocknxt = ext2fs_read_block(node, i + 1);
++				if (blocknxt == (oldblk + 1)) {
++					oldblk = blocknxt;
++					i++;
++				} else {
++					blocknxt = ext2fs_read_block(node, i);
++					break;
++				}
++			}
++
++			if (oldblk == blknr)
++				blockend = blocksize;
++			else
++				blockend = (1 + blocknxt - blknr) * blocksize;
++		}
++
++		blknr = blknr << log2blocksize;
++
+ 		/* If the block number is 0 this block is not stored on disk but
+ 		   is zero filled instead.  */
+ 		if (blknr) {
+@@ -444,7 +466,7 @@ int ext2fs_read_file
+ 		} else {
+ 			memset (buf, 0, blocksize - skipfirst);
+ 		}
+-		buf += blocksize - skipfirst;
++		buf += blockend - skipfirst;
+ 	}
+ 	return (len);
+ }
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch
new file mode 100644
index 0000000..ba7cf03
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch
@@ -0,0 +1,30 @@
+From 160a0a0145cbe4bca9c0f71286fc8529e57c21c4 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sun, 1 Apr 2012 22:57:37 +0200
+Subject: [PATCH 07/10] am335x-evm: fix ext2load and specify partition for
+ both fatload and ext2load
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ include/configs/am335x_evm.h |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
+index 3d37058..a81d716 100755
+--- a/include/configs/am335x_evm.h
++++ b/include/configs/am335x_evm.h
+@@ -74,9 +74,8 @@
+ 	"loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}\0" \
+ 	"importbootenv=echo Importing environment from mmc ...; " \
+ 		"env import -t $loadaddr $filesize\0" \
+-	"mmc_load_uimage=fatload mmc ${mmc_dev} ${kloadaddr} ${bootfile}\0" \
+-	"mmc_load_uimage_ext2=ext2load ${mmc_dev} ${kloadaddr} /boot/${bootfile}\0" \
+-	"optargs=\0" \
++	"mmc_load_uimage=fatload mmc ${mmc_dev}:1 ${kloadaddr} ${bootfile}\0" \
++	"mmc_load_uimage_ext2=ext2load mmc ${mmc_dev}:2 ${kloadaddr} /boot/${bootfile}\0" \
+ 	"bootargs_defaults=setenv bootargs " \
+ 		"console=${console} " \
+ 		"${optargs}\0" \
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x_evm-switch-to-ext4.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x_evm-switch-to-ext4.patch
deleted file mode 100644
index 891af6c..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0007-am335x_evm-switch-to-ext4.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From d2032a2932911159985451d76c547b4e6d99fb61 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Mon, 7 Nov 2011 21:33:32 +0100
-Subject: [PATCH 7/7] am335x_evm: switch to ext4
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 8c0fae2..8bf3ff1 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -54,7 +54,7 @@
- 	"nand_root=/dev/mtdblock7 rw\0" \
- 	"spi_root=/dev/mtdblock4 rw\0" \
- 	"nor_root=/dev/mtdblock3 rw\0" \
--	"mmc_root_fs_type=ext3 rootwait\0" \
-+	"mmc_root_fs_type=ext4 rootwait\0" \
- 	"nand_root_fs_type=jffs2\0" \
- 	"spi_root_fs_type=jffs2\0" \
- 	"nor_root_fs_type=jffs2\0" \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0008-HACK-am335x-evm-turn-d-cache-on-globally-turn-it-off.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0008-HACK-am335x-evm-turn-d-cache-on-globally-turn-it-off.patch
deleted file mode 100644
index b79a884..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0008-HACK-am335x-evm-turn-d-cache-on-globally-turn-it-off.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 31d430d8db335b7c3fea08b6aa8309b90b8f2cb9 Mon Sep 17 00:00:00 2001
-From: Tom Rini <trini@ti.com>
-Date: Tue, 8 Nov 2011 08:07:47 +0100
-Subject: [PATCH 8/8] HACK: am335x evm: turn d-cache on globally, turn it off when doing nfs stuff
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- board/ti/am335x/evm.c        |   12 ++++++++++++
- include/configs/am335x_evm.h |    1 +
- 2 files changed, 13 insertions(+), 0 deletions(-)
-
-diff --git a/board/ti/am335x/evm.c b/board/ti/am335x/evm.c
-index bc1119e..e64626a 100644
---- a/board/ti/am335x/evm.c
-+++ b/board/ti/am335x/evm.c
-@@ -1041,3 +1041,15 @@ U_BOOT_CMD(
- 
- #endif /* CONFIG_NAND_TI81XX */
- #endif /* CONFIG_SPL_BUILD */
-+
-+/*
-+ * Not all drivers we use (such as ethernet) are dcache safe.  But
-+ * we need cache on to boot quickly enough.
-+ */
-+#ifndef CONFIG_SYS_DCACHE_OFF
-+void enable_caches(void)
-+{
-+	/* Enable D-cache. I-cache is already enabled in start.S */
-+	dcache_enable();
-+}
-+#endif
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 8bf3ff1..58fa2f6 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -119,6 +119,7 @@
- 		"bootm ${loadaddr}\0" \
- 	"net_boot=echo Booting from network ...; " \
- 		"setenv autoload no; " \
-+		"dcache off; " \
- 		"dhcp; " \
- 		"tftp ${loadaddr} ${bootfile}; " \
- 		"run net_args; " \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0008-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0008-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch
new file mode 100644
index 0000000..70408b6
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0008-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch
@@ -0,0 +1,35 @@
+From b01ee680bab7b40f6dc9b8087630e5c0251c6fcd Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sun, 1 Apr 2012 23:10:22 +0200
+Subject: [PATCH 08/10] am335x-evm: load uImage from /boot instead of VFAT
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ include/configs/am335x_evm.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
+index a81d716..e42febe 100755
+--- a/include/configs/am335x_evm.h
++++ b/include/configs/am335x_evm.h
+@@ -101,7 +101,7 @@
+ 		"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
+ 		"ip=dhcp\0" \
+ 	"mmc_boot=run mmc_args; " \
+-		"run mmc_load_uimage; " \
++		"run mmc_load_uimage_ext2; " \
+ 		"bootm ${kloadaddr}\0" \
+ 	"nand_boot=echo Booting from nand ...; " \
+ 		"run nand_args; " \
+@@ -139,7 +139,7 @@
+ 			"echo Running uenvcmd ...;" \
+ 			"run uenvcmd;" \
+ 		"fi;" \
+-		"if run mmc_load_uimage; then " \
++		"if run mmc_load_uimage_ext2; then " \
+ 			"run mmc_args;" \
+ 			"bootm ${kloadaddr};" \
+ 		"fi;" \
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0009-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0009-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch
deleted file mode 100644
index b97fa16..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0009-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 2df6e88944b98466e0b1225a873bfed005cea4e4 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 16 Nov 2011 18:57:12 +0100
-Subject: [PATCH] am335x-evm: enable i2c2 pinmux for beaglebone
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- board/ti/am335x/mux.c |   18 ++++++++++++++++++
- 1 files changed, 18 insertions(+), 0 deletions(-)
-
-diff --git a/board/ti/am335x/mux.c b/board/ti/am335x/mux.c
-index d9956f3..313d5a5 100644
---- a/board/ti/am335x/mux.c
-+++ b/board/ti/am335x/mux.c
-@@ -309,6 +309,12 @@ static struct module_pin_mux i2c1_pin_mux[] = {
- 	{-1},
- };
- 
-+static struct module_pin_mux i2c2_pin_mux[] = {
-+	{OFFSET(uart1_ctsn), (MODE(3) | RXACTIVE | PULLUDEN | SLEWCTRL)},  /* I2C_DATA */
-+	{OFFSET(uart1_rtsn), (MODE(3) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
-+	{-1},
-+};
-+
- #ifndef CONFIG_NO_ETH
- static struct module_pin_mux rgmii1_pin_mux[] = {
- 	{OFFSET(mii1_txen), MODE(2)},			/* RGMII1_TCTL */
-@@ -568,6 +574,7 @@ static struct evm_pin_mux low_cost_evm_pin_mux[] = {
- static struct evm_pin_mux beaglebone_pin_mux[] = {
- 	{uart0_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
- 	{i2c1_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_4, DEV_ON_BASEBOARD},
-+	{i2c2_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
- #ifdef CONFIG_NAND
- 	{nand_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3, DEV_ON_DGHTR_BRD},
- #endif
-@@ -587,6 +594,7 @@ static struct evm_pin_mux beaglebone_pin_mux[] = {
- static struct evm_pin_mux beaglebone_old_pin_mux[] = {
- 	{uart0_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
- 	{i2c1_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_4, DEV_ON_BASEBOARD},
-+	{i2c2_pin_mux, PROFILE_ALL, DEV_ON_BASEBOARD},
- #ifdef CONFIG_NAND
- 	{nand_pin_mux, PROFILE_ALL & ~PROFILE_2 & ~PROFILE_3, DEV_ON_DGHTR_BRD},
- #endif
-@@ -682,6 +690,16 @@ void enable_i2c0_pin_mux(void)
- 	configure_module_pin_mux(i2c0_pin_mux);
- }
- 
-+void enable_i2c1_pin_mux(void)
-+{
-+	configure_module_pin_mux(i2c1_pin_mux);
-+}
-+
-+void enable_i2c2_pin_mux(void)
-+{
-+	configure_module_pin_mux(i2c2_pin_mux);
-+}
-+
- void enable_uart0_pin_mux(void)
- {
- 	configure_module_pin_mux(uart0_pin_mux);
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0009-ext4fs-ls-load-support.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0009-ext4fs-ls-load-support.patch
new file mode 100644
index 0000000..37ef5d4
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0009-ext4fs-ls-load-support.patch
@@ -0,0 +1,2362 @@
+From 4e2f3f39a37883bddbe92a71045cb90f489e1d5f Mon Sep 17 00:00:00 2001
+From: "uma.shankar" <uma.shankar@samsung.com>
+Date: Mon, 9 Jan 2012 07:54:50 +0000
+Subject: [PATCH 09/10] ext4fs ls load support
+
+Signed-off-by: Uma Shankar <uma.shankar@samsung.com>
+Signed-off-by: Manjunatha C Achar <a.manjunatha@samsung.com>
+Signed-off-by: Iqbal Shareef <iqbal.ams@samsung.com>
+Signed-off-by: Hakgoo Lee <goodguy.lee@samsung.com>
+---
+ Makefile              |    2 +-
+ common/Makefile       |    1 +
+ common/cmd_ext4.c     |  266 +++++++++++++++
+ fs/Makefile           |    1 +
+ fs/ext2/dev.c         |    1 +
+ fs/ext2/ext2fs.c      |  181 ++--------
+ fs/ext4/Makefile      |   51 +++
+ fs/ext4/dev.c         |  145 ++++++++
+ fs/ext4/ext4_common.c |  875 +++++++++++++++++++++++++++++++++++++++++++++++++
+ fs/ext4/ext4_common.h |   63 ++++
+ fs/ext4/ext4fs.c      |  228 +++++++++++++
+ include/ext4fs.h      |  132 ++++++++
+ include/ext_common.h  |  188 +++++++++++
+ 13 files changed, 1977 insertions(+), 157 deletions(-)
+ create mode 100644 common/cmd_ext4.c
+ create mode 100644 fs/ext4/Makefile
+ create mode 100644 fs/ext4/dev.c
+ create mode 100644 fs/ext4/ext4_common.c
+ create mode 100644 fs/ext4/ext4_common.h
+ create mode 100644 fs/ext4/ext4fs.c
+ create mode 100644 include/ext4fs.h
+ create mode 100644 include/ext_common.h
+
+diff --git a/Makefile b/Makefile
+index 99b9278..6a5068d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -226,7 +226,7 @@ LIBS += arch/arm/cpu/ixp/npe/libnpe.o
+ endif
+ LIBS += arch/$(ARCH)/lib/lib$(ARCH).o
+ LIBS += fs/cramfs/libcramfs.o fs/fat/libfat.o fs/fdos/libfdos.o fs/jffs2/libjffs2.o \
+-	fs/reiserfs/libreiserfs.o fs/ext2/libext2fs.o fs/yaffs2/libyaffs2.o \
++	fs/reiserfs/libreiserfs.o fs/ext2/libext2fs.o fs/ext4/libext4fs.o fs/yaffs2/libyaffs2.o \
+ 	fs/ubifs/libubifs.o
+ LIBS += net/libnet.o
+ LIBS += disk/libdisk.o
+diff --git a/common/Makefile b/common/Makefile
+index 838ae25..b9b5c85 100644
+--- a/common/Makefile
++++ b/common/Makefile
+@@ -87,6 +87,7 @@ COBJS-$(CONFIG_ENV_IS_IN_EEPROM) += cmd_eeprom.o
+ COBJS-$(CONFIG_CMD_EEPROM) += cmd_eeprom.o
+ COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
+ COBJS-$(CONFIG_SYS_HUSH_PARSER) += cmd_exit.o
++COBJS-$(CONFIG_CMD_EXT4) += cmd_ext4.o
+ COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o
+ COBJS-$(CONFIG_CMD_FAT) += cmd_fat.o
+ COBJS-$(CONFIG_CMD_FDC)$(CONFIG_CMD_FDOS) += cmd_fdc.o
+diff --git a/common/cmd_ext4.c b/common/cmd_ext4.c
+new file mode 100644
+index 0000000..2c53d2c
+--- /dev/null
++++ b/common/cmd_ext4.c
+@@ -0,0 +1,266 @@
++/*
++ * (C) Copyright 2011 - 2012 Samsung Electronics
++ * EXT4 filesystem implementation in Uboot by
++ * Uma Shankar <uma.shankar@samsung.com>
++ * Manjunatha C Achar <a.manjunatha@samsung.com>
++ *
++ * Ext4fs support
++ * made from existing cmd_ext2.c file of Uboot
++ *
++ * (C) Copyright 2004
++ * esd gmbh <www.esd-electronics.com>
++ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
++ *
++ * made from cmd_reiserfs by
++ *
++ * (C) Copyright 2003 - 2004
++ * Sysgo Real-Time Solutions, AG <www.elinos.com>
++ * Pavel Bartusek <pba@sysgo.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++
++/*
++ * Changelog:
++ *	0.1 - Newly created file for ext4fs support. Taken from cmd_ext2.c
++ *	        file in uboot. Added ext4fs ls and load support.
++ */
++
++#include <common.h>
++#include <part.h>
++#include <config.h>
++#include <command.h>
++#include <image.h>
++#include <linux/ctype.h>
++#include <asm/byteorder.h>
++#include <ext_common.h>
++#include <ext4fs.h>
++#include <linux/stat.h>
++#include <malloc.h>
++
++#if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE)
++#include <usb.h>
++#endif
++
++#if !defined(CONFIG_DOS_PARTITION) && !defined(CONFIG_EFI_PARTITION)
++#error DOS or EFI partition support must be selected
++#endif
++
++uint64_t total_sector;
++uint64_t part_offset;
++
++#define DOS_PART_MAGIC_OFFSET	0x1fe
++#define DOS_FS_TYPE_OFFSET	0x36
++#define DOS_FS32_TYPE_OFFSET	0x52
++
++static int do_ext4_load(cmd_tbl_t *cmdtp, int flag, int argc,
++						char *const argv[])
++{
++	char *filename = NULL;
++	char *ep;
++	int dev;
++	unsigned long part = 1;
++	ulong addr = 0;
++	ulong part_length;
++	int filelen;
++	disk_partition_t info;
++	struct ext_filesystem *fs;
++	char buf[12];
++	unsigned long count;
++	const char *addr_str;
++
++	count = 0;
++	addr = simple_strtoul(argv[3], NULL, 16);
++	filename = getenv("bootfile");
++	switch (argc) {
++	case 3:
++		addr_str = getenv("loadaddr");
++		if (addr_str != NULL)
++			addr = simple_strtoul(addr_str, NULL, 16);
++		else
++			addr = CONFIG_SYS_LOAD_ADDR;
++
++		break;
++	case 4:
++		break;
++	case 5:
++		filename = argv[4];
++		break;
++	case 6:
++		filename = argv[4];
++		count = simple_strtoul(argv[5], NULL, 16);
++		break;
++
++	default:
++		return cmd_usage(cmdtp);
++	}
++
++	if (!filename) {
++		puts("** No boot file defined **\n");
++		return 1;
++	}
++
++	dev = (int)simple_strtoul(argv[2], &ep, 16);
++	ext4_dev_desc = get_dev(argv[1], dev);
++	if (ext4_dev_desc == NULL) {
++		printf("** Block device %s %d not supported\n", argv[1], dev);
++		return 1;
++	}
++	if (init_fs(ext4_dev_desc))
++		return 1;
++
++	fs = get_fs();
++	if (*ep) {
++		if (*ep != ':') {
++			puts("** Invalid boot device, use `dev[:part]' **\n");
++			return 1;
++		}
++		part = simple_strtoul(++ep, NULL, 16);
++	}
++
++	if (part != 0) {
++		if (get_partition_info(fs->dev_desc, part, &info)) {
++			printf("** Bad partition %lu **\n", part);
++			return 1;
++		}
++
++		if (strncmp((char *)info.type, BOOT_PART_TYPE,
++			    strlen(BOOT_PART_TYPE)) != 0) {
++			printf("** Invalid partition type \"%s\""
++			       " (expect \"" BOOT_PART_TYPE "\")\n", info.type);
++			return 1;
++		}
++		printf("Loading file \"%s\" "
++		       "from %s device %d:%lu %s\n",
++		       filename, argv[1], dev, part, info.name);
++	} else {
++		printf("Loading file \"%s\" from %s device %d\n",
++		       filename, argv[1], dev);
++	}
++
++	part_length = ext4fs_set_blk_dev(fs->dev_desc, part);
++	if (part_length == 0) {
++		printf("**Bad partition - %s %d:%lu **\n", argv[1], dev, part);
++		ext4fs_close();
++		return 1;
++	}
++
++	if (!ext4fs_mount(part_length)) {
++		printf("** Bad ext2 partition or disk - %s %d:%lu **\n",
++		       argv[1], dev, part);
++		ext4fs_close();
++		return 1;
++	}
++
++	filelen = ext4fs_open(filename);
++	if (filelen < 0) {
++		printf("** File not found %s\n", filename);
++		ext4fs_close();
++		return 1;
++	}
++	if ((count < filelen) && (count != 0))
++		filelen = count;
++
++	if (ext4fs_read((char *)addr, filelen) != filelen) {
++		printf("** Unable to read \"%s\" from %s %d:%lu **\n",
++		       filename, argv[1], dev, part);
++		ext4fs_close();
++		return 1;
++	}
++
++	ext4fs_close();
++	deinit_fs(fs->dev_desc);
++	/* Loading ok, update default load address */
++	load_addr = addr;
++
++	printf("%d bytes read\n", filelen);
++	sprintf(buf, "%X", filelen);
++	setenv("filesize", buf);
++
++	return 0;
++}
++
++static int do_ext4_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
++{
++	const char *filename = "/";
++	int dev;
++	unsigned long part = 1;
++	char *ep;
++	struct ext_filesystem *fs;
++	int part_length;
++
++	if (argc < 3)
++		return cmd_usage(cmdtp);
++
++	dev = (int)simple_strtoul(argv[2], &ep, 16);
++	ext4_dev_desc = get_dev(argv[1], dev);
++
++	if (ext4_dev_desc == NULL) {
++		printf("\n** Block device %s %d not supported\n", argv[1], dev);
++		return 1;
++	}
++
++	if (init_fs(ext4_dev_desc))
++		return 1;
++
++	fs = get_fs();
++	if (*ep) {
++		if (*ep != ':') {
++			puts("\n** Invalid boot device, use `dev[:part]' **\n");
++			return 1;
++		}
++		part = simple_strtoul(++ep, NULL, 16);
++	}
++
++	if (argc == 4)
++		filename = argv[3];
++
++	part_length = ext4fs_set_blk_dev(fs->dev_desc, part);
++	if (part_length == 0) {
++		printf("** Bad partition - %s %d:%lu **\n", argv[1], dev, part);
++		ext4fs_close();
++		return 1;
++	}
++
++	if (!ext4fs_mount(part_length)) {
++		printf("** Bad ext2 partition or disk - %s %d:%lu **\n",
++		       argv[1], dev, part);
++		ext4fs_close();
++		return 1;
++	}
++	if (ext4fs_ls(filename)) {
++		printf("** Error ext2fs_ls() **\n");
++		ext4fs_close();
++		return 1;
++	};
++
++	ext4fs_close();
++	deinit_fs(fs->dev_desc);
++
++	return 0;
++}
++
++U_BOOT_CMD(ext4ls, 4, 1, do_ext4_ls,
++	   "list files in a directory (default /)",
++	   "<interface> <dev[:part]> [directory]\n"
++	   "	  - list files from 'dev' on 'interface' in a 'directory'");
++
++U_BOOT_CMD(ext4load, 6, 0, do_ext4_load,
++	   "load binary file from a Ext2 filesystem",
++	   "<interface> <dev[:part]> [addr] [filename] [bytes]\n"
++	   "	  - load binary file 'filename' from 'dev' on 'interface'\n"
++	   "		 to address 'addr' from ext2 filesystem");
+diff --git a/fs/Makefile b/fs/Makefile
+index 22aad12..00a8f37 100644
+--- a/fs/Makefile
++++ b/fs/Makefile
+@@ -23,6 +23,7 @@
+ #
+ 
+ subdirs-$(CONFIG_CMD_CRAMFS) := cramfs
++subdirs-$(CONFIG_CMD_EXT4) += ext4
+ subdirs-$(CONFIG_CMD_EXT2) += ext2
+ subdirs-$(CONFIG_CMD_FAT) += fat
+ subdirs-$(CONFIG_CMD_FDOS) += fdos
+diff --git a/fs/ext2/dev.c b/fs/ext2/dev.c
+index 78851d0..339a16e 100644
+--- a/fs/ext2/dev.c
++++ b/fs/ext2/dev.c
+@@ -27,6 +27,7 @@
+ #include <common.h>
+ #include <config.h>
+ #include <ext2fs.h>
++#include <ext_common.h>
+ 
+ static block_dev_desc_t *ext2fs_block_dev_desc;
+ static disk_partition_t part_info;
+diff --git a/fs/ext2/ext2fs.c b/fs/ext2/ext2fs.c
+index 8531db5..ea3d98c 100644
+--- a/fs/ext2/ext2fs.c
++++ b/fs/ext2/ext2fs.c
+@@ -25,152 +25,16 @@
+ 
+ #include <common.h>
+ #include <ext2fs.h>
++#include <ext_common.h>
+ #include <malloc.h>
+ #include <asm/byteorder.h>
+ 
+ extern int ext2fs_devread (int sector, int byte_offset, int byte_len,
+ 			   char *buf);
+ 
+-/* Magic value used to identify an ext2 filesystem.  */
+-#define	EXT2_MAGIC		0xEF53
+-/* Amount of indirect blocks in an inode.  */
+-#define INDIRECT_BLOCKS		12
+-/* Maximum lenght of a pathname.  */
+-#define EXT2_PATH_MAX		4096
+-/* Maximum nesting of symlinks, used to prevent a loop.  */
+-#define	EXT2_MAX_SYMLINKCNT	8
+-
+-/* Filetype used in directory entry.  */
+-#define	FILETYPE_UNKNOWN	0
+-#define	FILETYPE_REG		1
+-#define	FILETYPE_DIRECTORY	2
+-#define	FILETYPE_SYMLINK	7
+-
+-/* Filetype information as used in inodes.  */
+-#define FILETYPE_INO_MASK	0170000
+-#define FILETYPE_INO_REG	0100000
+-#define FILETYPE_INO_DIRECTORY	0040000
+-#define FILETYPE_INO_SYMLINK	0120000
+-
+-/* Bits used as offset in sector */
+-#define DISK_SECTOR_BITS        9
+-
+-/* Log2 size of ext2 block in 512 blocks.  */
+-#define LOG2_EXT2_BLOCK_SIZE(data) (__le32_to_cpu (data->sblock.log2_block_size) + 1)
+-
+-/* Log2 size of ext2 block in bytes.  */
+-#define LOG2_BLOCK_SIZE(data)	   (__le32_to_cpu (data->sblock.log2_block_size) + 10)
+-
+-/* The size of an ext2 block in bytes.  */
+-#define EXT2_BLOCK_SIZE(data)	   (1 << LOG2_BLOCK_SIZE(data))
+-
+-/* The ext2 superblock.  */
+-struct ext2_sblock {
+-	uint32_t total_inodes;
+-	uint32_t total_blocks;
+-	uint32_t reserved_blocks;
+-	uint32_t free_blocks;
+-	uint32_t free_inodes;
+-	uint32_t first_data_block;
+-	uint32_t log2_block_size;
+-	uint32_t log2_fragment_size;
+-	uint32_t blocks_per_group;
+-	uint32_t fragments_per_group;
+-	uint32_t inodes_per_group;
+-	uint32_t mtime;
+-	uint32_t utime;
+-	uint16_t mnt_count;
+-	uint16_t max_mnt_count;
+-	uint16_t magic;
+-	uint16_t fs_state;
+-	uint16_t error_handling;
+-	uint16_t minor_revision_level;
+-	uint32_t lastcheck;
+-	uint32_t checkinterval;
+-	uint32_t creator_os;
+-	uint32_t revision_level;
+-	uint16_t uid_reserved;
+-	uint16_t gid_reserved;
+-	uint32_t first_inode;
+-	uint16_t inode_size;
+-	uint16_t block_group_number;
+-	uint32_t feature_compatibility;
+-	uint32_t feature_incompat;
+-	uint32_t feature_ro_compat;
+-	uint32_t unique_id[4];
+-	char volume_name[16];
+-	char last_mounted_on[64];
+-	uint32_t compression_info;
+-};
+-
+-/* The ext2 blockgroup.  */
+-struct ext2_block_group {
+-	uint32_t block_id;
+-	uint32_t inode_id;
+-	uint32_t inode_table_id;
+-	uint16_t free_blocks;
+-	uint16_t free_inodes;
+-	uint16_t used_dir_cnt;
+-	uint32_t reserved[3];
+-};
+-
+-/* The ext2 inode.  */
+-struct ext2_inode {
+-	uint16_t mode;
+-	uint16_t uid;
+-	uint32_t size;
+-	uint32_t atime;
+-	uint32_t ctime;
+-	uint32_t mtime;
+-	uint32_t dtime;
+-	uint16_t gid;
+-	uint16_t nlinks;
+-	uint32_t blockcnt;	/* Blocks of 512 bytes!! */
+-	uint32_t flags;
+-	uint32_t osd1;
+-	union {
+-		struct datablocks {
+-			uint32_t dir_blocks[INDIRECT_BLOCKS];
+-			uint32_t indir_block;
+-			uint32_t double_indir_block;
+-			uint32_t tripple_indir_block;
+-		} blocks;
+-		char symlink[60];
+-	} b;
+-	uint32_t version;
+-	uint32_t acl;
+-	uint32_t dir_acl;
+-	uint32_t fragment_addr;
+-	uint32_t osd2[3];
+-};
+-
+-/* The header of an ext2 directory entry.  */
+-struct ext2_dirent {
+-	uint32_t inode;
+-	uint16_t direntlen;
+-	uint8_t namelen;
+-	uint8_t filetype;
+-};
+-
+-struct ext2fs_node {
+-	struct ext2_data *data;
+-	struct ext2_inode inode;
+-	int ino;
+-	int inode_read;
+-};
+-
+-/* Information about a "mounted" ext2 filesystem.  */
+-struct ext2_data {
+-	struct ext2_sblock sblock;
+-	struct ext2_inode *inode;
+-	struct ext2fs_node diropen;
+-};
+-
+-
+-typedef struct ext2fs_node *ext2fs_node_t;
+ 
+ struct ext2_data *ext2fs_root = NULL;
+-ext2fs_node_t ext2fs_file = NULL;
++struct ext2fs_node *ext2fs_file;
+ int symlinknest = 0;
+ uint32_t *indir1_block = NULL;
+ int indir1_size = 0;
+@@ -243,14 +107,16 @@ static int ext2fs_read_inode
+ }
+ 
+ 
+-void ext2fs_free_node (ext2fs_node_t node, ext2fs_node_t currroot) {
++void ext2fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot)
++{
+ 	if ((node != &ext2fs_root->diropen) && (node != currroot)) {
+ 		free (node);
+ 	}
+ }
+ 
+ 
+-static int ext2fs_read_block (ext2fs_node_t node, int fileblock) {
++static int ext2fs_read_block(struct ext2fs_node *node, int fileblock)
++{
+ 	struct ext2_data *data = node->data;
+ 	struct ext2_inode *inode = &node->inode;
+ 	int blknr;
+@@ -390,7 +256,8 @@ static int ext2fs_read_block (ext2fs_node_t node, int fileblock) {
+ 
+ 
+ int ext2fs_read_file
+-	(ext2fs_node_t node, int pos, unsigned int len, char *buf) {
++	(struct ext2fs_node *node, int pos, unsigned int len, char *buf)
++{
+ 	int i;
+ 	int blockcnt;
+ 	int log2blocksize = LOG2_EXT2_BLOCK_SIZE (node->data);
+@@ -471,8 +338,8 @@ int ext2fs_read_file
+ 	return (len);
+ }
+ 
+-
+-static int ext2fs_iterate_dir (ext2fs_node_t dir, char *name, ext2fs_node_t * fnode, int *ftype)
++int ext2fs_iterate_dir(struct ext2fs_node *dir, char *name,
++					struct ext2fs_node **fnode, int *ftype)
+ {
+ 	unsigned int fpos = 0;
+ 	int status;
+@@ -501,7 +368,7 @@ static int ext2fs_iterate_dir (ext2fs_node_t dir, char *name, ext2fs_node_t * fn
+ 		}
+ 		if (dirent.namelen != 0) {
+ 			char filename[dirent.namelen + 1];
+-			ext2fs_node_t fdiro;
++			struct ext2fs_node *fdiro;
+ 			int type = FILETYPE_UNKNOWN;
+ 
+ 			status = ext2fs_read_file (diro,
+@@ -603,8 +470,8 @@ static int ext2fs_iterate_dir (ext2fs_node_t dir, char *name, ext2fs_node_t * fn
+ 	return (0);
+ }
+ 
+-
+-static char *ext2fs_read_symlink (ext2fs_node_t node) {
++static char *ext2fs_read_symlink(struct ext2fs_node *node)
++{
+ 	char *symlink;
+ 	struct ext2fs_node *diro = node;
+ 	int status;
+@@ -641,15 +508,16 @@ static char *ext2fs_read_symlink (ext2fs_node_t node) {
+ 
+ 
+ int ext2fs_find_file1
+-	(const char *currpath,
+-	 ext2fs_node_t currroot, ext2fs_node_t * currfound, int *foundtype) {
++	(const char *currpath, struct ext2fs_node *currroot,
++		struct ext2fs_node **currfound, int *foundtype)
++{
+ 	char fpath[strlen (currpath) + 1];
+ 	char *name = fpath;
+ 	char *next;
+ 	int status;
+ 	int type = FILETYPE_DIRECTORY;
+-	ext2fs_node_t currnode = currroot;
+-	ext2fs_node_t oldnode = currroot;
++	struct ext2fs_node *currnode = currroot;
++	struct ext2fs_node *oldnode = currroot;
+ 
+ 	strncpy (fpath, currpath, strlen (currpath) + 1);
+ 
+@@ -745,8 +613,9 @@ int ext2fs_find_file1
+ 
+ 
+ int ext2fs_find_file
+-	(const char *path,
+-	 ext2fs_node_t rootnode, ext2fs_node_t * foundnode, int expecttype) {
++	(const char *path, struct ext2fs_node *rootnode,
++	struct ext2fs_node **foundnode, int expecttype)
++{
+ 	int status;
+ 	int foundtype = FILETYPE_DIRECTORY;
+ 
+@@ -772,7 +641,7 @@ int ext2fs_find_file
+ 
+ 
+ int ext2fs_ls (const char *dirname) {
+-	ext2fs_node_t dirnode;
++	struct ext2fs_node *dirnode;
+ 	int status;
+ 
+ 	if (ext2fs_root == NULL) {
+@@ -792,7 +661,7 @@ int ext2fs_ls (const char *dirname) {
+ 
+ 
+ int ext2fs_open (const char *filename) {
+-	ext2fs_node_t fdiro = NULL;
++	struct ext2fs_node *fdiro = NULL;
+ 	int status;
+ 	int len;
+ 
+@@ -822,8 +691,8 @@ fail:
+ }
+ 
+ 
+-int ext2fs_close (void
+-	) {
++int ext2fs_close(void)
++{
+ 	if ((ext2fs_file != NULL) && (ext2fs_root != NULL)) {
+ 		ext2fs_free_node (ext2fs_file, &ext2fs_root->diropen);
+ 		ext2fs_file = NULL;
+diff --git a/fs/ext4/Makefile b/fs/ext4/Makefile
+new file mode 100644
+index 0000000..7add4ab
+--- /dev/null
++++ b/fs/ext4/Makefile
+@@ -0,0 +1,51 @@
++#
++# (C) Copyright 2006
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# (C) Copyright 2003
++# Pavel Bartusek, Sysgo Real-Time Solutions AG, pba@sysgo.de
++#
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB	= $(obj)libext4fs.o
++
++AOBJS	=
++COBJS-$(CONFIG_CMD_EXT4) := ext4fs.o ext4_common.o dev.o
++
++SRCS	:= $(AOBJS:.o=.S) $(COBJS-y:.o=.c)
++OBJS	:= $(addprefix $(obj),$(AOBJS) $(COBJS-y))
++
++
++all:	$(LIB) $(AOBJS)
++
++$(LIB):	$(obj).depend $(OBJS)
++	$(call cmd_link_o_target, $(OBJS))
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c
+new file mode 100644
+index 0000000..2054be3
+--- /dev/null
++++ b/fs/ext4/dev.c
+@@ -0,0 +1,145 @@
++/*
++ * (C) Copyright 2011 - 2012 Samsung Electronics
++ * EXT4 filesystem implementation in Uboot by
++ * Uma Shankar <uma.shankar@samsung.com>
++ * Manjunatha C Achar <a.manjunatha@samsung.com>
++ *
++ * made from existing ext2/dev.c file of Uboot
++ * (C) Copyright 2004
++ * esd gmbh <www.esd-electronics.com>
++ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
++ *
++ * based on code of fs/reiserfs/dev.c by
++ *
++ * (C) Copyright 2003 - 2004
++ * Sysgo AG, <www.elinos.com>, Pavel Bartusek <pba@sysgo.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++/*
++ * Changelog:
++ *	0.1 - Newly created file for ext4fs support. Taken from
++ *	        fs/ext2/dev.c file in uboot.
++ */
++
++#include <common.h>
++#include <config.h>
++#include <ext_common.h>
++
++static block_dev_desc_t *ext4fs_block_dev_desc;
++static disk_partition_t part_info;
++
++int ext4fs_set_blk_dev(block_dev_desc_t *rbdd, int part)
++{
++	ext4fs_block_dev_desc = rbdd;
++
++	if (part == 0) {
++		/* disk doesn't use partition table */
++		part_info.start = 0;
++		part_info.size = rbdd->lba;
++		part_info.blksz = rbdd->blksz;
++	} else {
++		if (get_partition_info(ext4fs_block_dev_desc,
++					part, &part_info))
++			return 0;
++	}
++	return part_info.size;
++}
++
++int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf)
++{
++	char sec_buf[SECTOR_SIZE];
++	unsigned block_len;
++
++	/* Check partition boundaries */
++	if ((sector < 0)
++	    || ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS)) >=
++		part_info.size)) {
++		printf("%s read outside partition %d\n", __func__, sector);
++		return 0;
++	}
++
++	/* Get the read to the beginning of a partition */
++	sector += byte_offset >> SECTOR_BITS;
++	byte_offset &= SECTOR_SIZE - 1;
++
++	debug(" <%d, %d, %d>\n", sector, byte_offset, byte_len);
++
++	if (ext4fs_block_dev_desc == NULL) {
++		printf("** Invalid Block Device Descriptor (NULL)\n");
++		return 0;
++	}
++
++	if (byte_offset != 0) {
++		/* read first part which isn't aligned with start of sector */
++		if (ext4fs_block_dev_desc->
++		    block_read(ext4fs_block_dev_desc->dev,
++				part_info.start + sector, 1,
++				(unsigned long *) sec_buf) != 1) {
++			printf(" ** ext2fs_devread() read error **\n");
++			return 0;
++		}
++		memcpy(buf, sec_buf + byte_offset,
++			min(SECTOR_SIZE - byte_offset, byte_len));
++		buf += min(SECTOR_SIZE - byte_offset, byte_len);
++		byte_len -= min(SECTOR_SIZE - byte_offset, byte_len);
++		sector++;
++	}
++
++	if (byte_len == 0)
++		return 1;
++
++	/* read sector aligned part */
++	block_len = byte_len & ~(SECTOR_SIZE - 1);
++
++	if (block_len == 0) {
++		u8 p[SECTOR_SIZE];
++
++		block_len = SECTOR_SIZE;
++		ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc->dev,
++						  part_info.start + sector,
++						  1, (unsigned long *)p);
++		memcpy(buf, p, byte_len);
++		return 1;
++	}
++
++	if (ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc->dev,
++					part_info.start + sector,
++					block_len / SECTOR_SIZE,
++					(unsigned long *) buf) !=
++					block_len / SECTOR_SIZE) {
++		printf(" ** %s read error - block\n", __func__);
++		return 0;
++	}
++	block_len = byte_len & ~(SECTOR_SIZE - 1);
++	buf += block_len;
++	byte_len -= block_len;
++	sector += block_len / SECTOR_SIZE;
++
++	if (byte_len != 0) {
++		/* read rest of data which are not in whole sector */
++		if (ext4fs_block_dev_desc->
++		    block_read(ext4fs_block_dev_desc->dev,
++				part_info.start + sector, 1,
++				(unsigned long *) sec_buf) != 1) {
++			printf("* %s read error - last part\n", __func__);
++			return 0;
++		}
++		memcpy(buf, sec_buf, byte_len);
++	}
++	return 1;
++}
+diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
+new file mode 100644
+index 0000000..d9deefe
+--- /dev/null
++++ b/fs/ext4/ext4_common.c
+@@ -0,0 +1,875 @@
++/*
++ * (C) Copyright 2011 - 2012 Samsung Electronics
++ * EXT4 filesystem implementation in Uboot by
++ * Uma Shankar <uma.shankar@samsung.com>
++ * Manjunatha C Achar <a.manjunatha@samsung.com>
++ *
++ * ext4ls and ext4load : Based on ext2 ls load support in Uboot.
++ *
++ * (C) Copyright 2004
++ * esd gmbh <www.esd-electronics.com>
++ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
++ *
++ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
++ * GRUB  --  GRand Unified Bootloader
++ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <common.h>
++#include <ext_common.h>
++#include <ext4fs.h>
++#include <malloc.h>
++#include <stddef.h>
++#include <linux/stat.h>
++#include <linux/time.h>
++#include <asm/byteorder.h>
++#include "ext4_common.h"
++
++struct ext2_data *ext4fs_root;
++struct ext2fs_node *ext4fs_file;
++uint32_t *ext4fs_indir1_block;
++int ext4fs_indir1_size;
++int ext4fs_indir1_blkno = -1;
++uint32_t *ext4fs_indir2_block;
++int ext4fs_indir2_size;
++int ext4fs_indir2_blkno = -1;
++
++uint32_t *ext4fs_indir3_block;
++int ext4fs_indir3_size;
++int ext4fs_indir3_blkno = -1;
++struct ext2_inode *g_parent_inode;
++static int symlinknest;
++
++static struct ext4_extent_header *ext4fs_get_extent_block
++	(struct ext2_data *data, char *buf,
++		struct ext4_extent_header *ext_block,
++		uint32_t fileblock, int log2_blksz)
++{
++	struct ext4_extent_idx *index;
++	unsigned long long block;
++	struct ext_filesystem *fs = get_fs();
++	int i;
++
++	while (1) {
++		index = (struct ext4_extent_idx *)(ext_block + 1);
++
++		if (le32_to_cpu(ext_block->eh_magic) != EXT4_EXT_MAGIC)
++			return 0;
++
++		if (ext_block->eh_depth == 0)
++			return ext_block;
++		i = -1;
++		do {
++			i++;
++			if (i >= le32_to_cpu(ext_block->eh_entries))
++				break;
++		} while (fileblock > le32_to_cpu(index[i].ei_block));
++
++		if (--i < 0)
++			return 0;
++
++		block = le32_to_cpu(index[i].ei_leaf_hi);
++		block = (block << 32) + le32_to_cpu(index[i].ei_leaf_lo);
++
++		if (ext4fs_devread(block << log2_blksz, 0, fs->blksz, buf))
++			ext_block = (struct ext4_extent_header *)buf;
++		else
++			return 0;
++	}
++}
++
++static int ext4fs_blockgroup
++	(struct ext2_data *data, int group, struct ext2_block_group *blkgrp)
++{
++	long int blkno;
++	unsigned int blkoff, desc_per_blk;
++
++	desc_per_blk = EXT2_BLOCK_SIZE(data) / sizeof(struct ext2_block_group);
++
++	blkno = __le32_to_cpu(data->sblock.first_data_block) + 1 +
++	    group / desc_per_blk;
++	blkoff = (group % desc_per_blk) * sizeof(struct ext2_block_group);
++
++	debug("ext4fs read %d group descriptor (blkno %ld blkoff %u)\n",
++	      group, blkno, blkoff);
++
++	return ext4fs_devread(blkno << LOG2_EXT2_BLOCK_SIZE(data),
++			      blkoff, sizeof(struct ext2_block_group),
++			      (char *)blkgrp);
++}
++
++int ext4fs_read_inode(struct ext2_data *data, int ino, struct ext2_inode *inode)
++{
++	struct ext2_block_group blkgrp;
++	struct ext2_sblock *sblock = &data->sblock;
++	struct ext_filesystem *fs = get_fs();
++	int inodes_per_block, status;
++	long int blkno;
++	unsigned int blkoff;
++
++	/* It is easier to calculate if the first inode is 0. */
++	ino--;
++	status = ext4fs_blockgroup(data, ino / __le32_to_cpu
++				   (sblock->inodes_per_group), &blkgrp);
++	if (status == 0)
++		return 0;
++
++	inodes_per_block = EXT2_BLOCK_SIZE(data) / fs->inodesz;
++	blkno = __le32_to_cpu(blkgrp.inode_table_id) +
++	    (ino % __le32_to_cpu(sblock->inodes_per_group)) / inodes_per_block;
++	blkoff = (ino % inodes_per_block) * fs->inodesz;
++	/* Read the inode. */
++	status = ext4fs_devread(blkno << LOG2_EXT2_BLOCK_SIZE(data), blkoff,
++				sizeof(struct ext2_inode), (char *)inode);
++	if (status == 0)
++		return 0;
++
++	return 1;
++}
++
++long int read_allocated_block(struct ext2_inode *inode, int fileblock)
++{
++	long int blknr;
++	int blksz;
++	int log2_blksz;
++	int status;
++	long int rblock;
++	long int perblock_parent;
++	long int perblock_child;
++	unsigned long long start;
++	/* get the blocksize of the filesystem */
++	blksz = EXT2_BLOCK_SIZE(ext4fs_root);
++	log2_blksz = LOG2_EXT2_BLOCK_SIZE(ext4fs_root);
++	if (le32_to_cpu(inode->flags) & EXT4_EXTENTS_FL) {
++		char *buf = zalloc(blksz);
++		if (!buf)
++			return -ENOMEM;
++		struct ext4_extent_header *ext_block;
++		struct ext4_extent *extent;
++		int i = -1;
++		ext_block = ext4fs_get_extent_block(ext4fs_root, buf,
++						    (struct ext4_extent_header
++						     *)inode->b.
++						    blocks.dir_blocks,
++						    fileblock, log2_blksz);
++		if (!ext_block) {
++			printf("invalid extent block\n");
++			free(buf);
++			return -EINVAL;
++		}
++
++		extent = (struct ext4_extent *)(ext_block + 1);
++
++		do {
++			i++;
++			if (i >= le32_to_cpu(ext_block->eh_entries))
++				break;
++		} while (fileblock >= le32_to_cpu(extent[i].ee_block));
++		if (--i >= 0) {
++			fileblock -= le32_to_cpu(extent[i].ee_block);
++			if (fileblock >= le32_to_cpu(extent[i].ee_len)) {
++				free(buf);
++				return 0;
++			}
++
++			start = le32_to_cpu(extent[i].ee_start_hi);
++			start = (start << 32) +
++			    le32_to_cpu(extent[i].ee_start_lo);
++			free(buf);
++			return fileblock + start;
++		}
++
++		printf("Extent Error\n");
++		free(buf);
++		return -1;
++	}
++
++	/* Direct blocks. */
++	if (fileblock < INDIRECT_BLOCKS)
++		blknr = __le32_to_cpu(inode->b.blocks.dir_blocks[fileblock]);
++
++	/* Indirect. */
++	else if (fileblock < (INDIRECT_BLOCKS + (blksz / 4))) {
++		if (ext4fs_indir1_block == NULL) {
++			ext4fs_indir1_block = zalloc(blksz);
++			if (ext4fs_indir1_block == NULL) {
++				printf("** SI ext2fs read block (indir 1)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_size = blksz;
++			ext4fs_indir1_blkno = -1;
++		}
++		if (blksz != ext4fs_indir1_size) {
++			free(ext4fs_indir1_block);
++			ext4fs_indir1_block = NULL;
++			ext4fs_indir1_size = 0;
++			ext4fs_indir1_blkno = -1;
++			ext4fs_indir1_block = zalloc(blksz);
++			if (ext4fs_indir1_block == NULL) {
++				printf("** SI ext2fs read block (indir 1):"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_size = blksz;
++		}
++		if ((__le32_to_cpu(inode->b.blocks.indir_block) <<
++		     log2_blksz) != ext4fs_indir1_blkno) {
++			status =
++			    ext4fs_devread(__le32_to_cpu
++					   (inode->b.blocks.
++					    indir_block) << log2_blksz, 0,
++					   blksz, (char *)ext4fs_indir1_block);
++			if (status == 0) {
++				printf("** SI ext2fs read block (indir 1)"
++				       "failed. **\n");
++				return 0;
++			}
++			ext4fs_indir1_blkno =
++			    __le32_to_cpu(inode->b.blocks.
++					  indir_block) << log2_blksz;
++		}
++		blknr = __le32_to_cpu(ext4fs_indir1_block
++				      [fileblock - INDIRECT_BLOCKS]);
++	}
++	/* Double indirect. */
++	else if (fileblock < (INDIRECT_BLOCKS + (blksz / 4 *
++					(blksz / 4 + 1)))) {
++
++		long int perblock = blksz / 4;
++		long int rblock = fileblock - (INDIRECT_BLOCKS + blksz / 4);
++
++		if (ext4fs_indir1_block == NULL) {
++			ext4fs_indir1_block = zalloc(blksz);
++			if (ext4fs_indir1_block == NULL) {
++				printf("** DI ext2fs read block (indir 2 1)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_size = blksz;
++			ext4fs_indir1_blkno = -1;
++		}
++		if (blksz != ext4fs_indir1_size) {
++			free(ext4fs_indir1_block);
++			ext4fs_indir1_block = NULL;
++			ext4fs_indir1_size = 0;
++			ext4fs_indir1_blkno = -1;
++			ext4fs_indir1_block = zalloc(blksz);
++			if (ext4fs_indir1_block == NULL) {
++				printf("** DI ext2fs read block (indir 2 1)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_size = blksz;
++		}
++		if ((__le32_to_cpu(inode->b.blocks.double_indir_block) <<
++		     log2_blksz) != ext4fs_indir1_blkno) {
++			status =
++			    ext4fs_devread(__le32_to_cpu
++					   (inode->b.blocks.
++					    double_indir_block) << log2_blksz,
++					   0, blksz,
++					   (char *)ext4fs_indir1_block);
++			if (status == 0) {
++				printf("** DI ext2fs read block (indir 2 1)"
++				       "failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_blkno =
++			    __le32_to_cpu(inode->b.blocks.double_indir_block) <<
++			    log2_blksz;
++		}
++
++		if (ext4fs_indir2_block == NULL) {
++			ext4fs_indir2_block = zalloc(blksz);
++			if (ext4fs_indir2_block == NULL) {
++				printf("** DI ext2fs read block (indir 2 2)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir2_size = blksz;
++			ext4fs_indir2_blkno = -1;
++		}
++		if (blksz != ext4fs_indir2_size) {
++			free(ext4fs_indir2_block);
++			ext4fs_indir2_block = NULL;
++			ext4fs_indir2_size = 0;
++			ext4fs_indir2_blkno = -1;
++			ext4fs_indir2_block = zalloc(blksz);
++			if (ext4fs_indir2_block == NULL) {
++				printf("** DI ext2fs read block (indir 2 2)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir2_size = blksz;
++		}
++		if ((__le32_to_cpu(ext4fs_indir1_block[rblock / perblock]) <<
++		     log2_blksz) != ext4fs_indir2_blkno) {
++			status = ext4fs_devread(__le32_to_cpu
++						(ext4fs_indir1_block
++						 [rblock /
++						  perblock]) << log2_blksz, 0,
++						blksz,
++						(char *)ext4fs_indir2_block);
++			if (status == 0) {
++				printf("** DI ext2fs read block (indir 2 2)"
++				       "failed. **\n");
++				return -1;
++			}
++			ext4fs_indir2_blkno =
++			    __le32_to_cpu(ext4fs_indir1_block[rblock
++							      /
++							      perblock]) <<
++			    log2_blksz;
++		}
++		blknr = __le32_to_cpu(ext4fs_indir2_block[rblock % perblock]);
++	}
++	/* Tripple indirect. */
++	else {
++		rblock = fileblock - (INDIRECT_BLOCKS + blksz / 4 +
++				      (blksz / 4 * blksz / 4));
++		perblock_child = blksz / 4;
++		perblock_parent = ((blksz / 4) * (blksz / 4));
++
++		if (ext4fs_indir1_block == NULL) {
++			ext4fs_indir1_block = zalloc(blksz);
++			if (ext4fs_indir1_block == NULL) {
++				printf("** TI ext2fs read block (indir 2 1)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_size = blksz;
++			ext4fs_indir1_blkno = -1;
++		}
++		if (blksz != ext4fs_indir1_size) {
++			free(ext4fs_indir1_block);
++			ext4fs_indir1_block = NULL;
++			ext4fs_indir1_size = 0;
++			ext4fs_indir1_blkno = -1;
++			ext4fs_indir1_block = zalloc(blksz);
++			if (ext4fs_indir1_block == NULL) {
++				printf("** TI ext2fs read block (indir 2 1)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_size = blksz;
++		}
++		if ((__le32_to_cpu(inode->b.blocks.triple_indir_block) <<
++		     log2_blksz) != ext4fs_indir1_blkno) {
++			status = ext4fs_devread
++			    (__le32_to_cpu(inode->b.blocks.triple_indir_block)
++			     << log2_blksz, 0, blksz,
++			     (char *)ext4fs_indir1_block);
++			if (status == 0) {
++				printf("** TI ext2fs read block (indir 2 1)"
++				       "failed. **\n");
++				return -1;
++			}
++			ext4fs_indir1_blkno =
++			    __le32_to_cpu(inode->b.blocks.triple_indir_block) <<
++			    log2_blksz;
++		}
++
++		if (ext4fs_indir2_block == NULL) {
++			ext4fs_indir2_block = zalloc(blksz);
++			if (ext4fs_indir2_block == NULL) {
++				printf("** TI ext2fs read block (indir 2 2)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir2_size = blksz;
++			ext4fs_indir2_blkno = -1;
++		}
++		if (blksz != ext4fs_indir2_size) {
++			free(ext4fs_indir2_block);
++			ext4fs_indir2_block = NULL;
++			ext4fs_indir2_size = 0;
++			ext4fs_indir2_blkno = -1;
++			ext4fs_indir2_block = zalloc(blksz);
++			if (ext4fs_indir2_block == NULL) {
++				printf("** TI ext2fs read block (indir 2 2)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir2_size = blksz;
++		}
++		if ((__le32_to_cpu(ext4fs_indir1_block[rblock /
++						       perblock_parent]) <<
++		     log2_blksz)
++		    != ext4fs_indir2_blkno) {
++			status = ext4fs_devread(__le32_to_cpu
++						(ext4fs_indir1_block
++						 [rblock /
++						  perblock_parent]) <<
++						log2_blksz, 0, blksz,
++						(char *)ext4fs_indir2_block);
++			if (status == 0) {
++				printf("** TI ext2fs read block (indir 2 2)"
++				       "failed. **\n");
++				return -1;
++			}
++			ext4fs_indir2_blkno =
++			    __le32_to_cpu(ext4fs_indir1_block[rblock /
++							      perblock_parent])
++			    << log2_blksz;
++		}
++
++		if (ext4fs_indir3_block == NULL) {
++			ext4fs_indir3_block = zalloc(blksz);
++			if (ext4fs_indir3_block == NULL) {
++				printf("** TI ext2fs read block (indir 2 2)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir3_size = blksz;
++			ext4fs_indir3_blkno = -1;
++		}
++		if (blksz != ext4fs_indir3_size) {
++			free(ext4fs_indir3_block);
++			ext4fs_indir3_block = NULL;
++			ext4fs_indir3_size = 0;
++			ext4fs_indir3_blkno = -1;
++			ext4fs_indir3_block = zalloc(blksz);
++			if (ext4fs_indir3_block == NULL) {
++				printf("** TI ext2fs read block (indir 2 2)"
++				       "malloc failed. **\n");
++				return -1;
++			}
++			ext4fs_indir3_size = blksz;
++		}
++		if ((__le32_to_cpu(ext4fs_indir2_block[rblock
++						       /
++						       perblock_child]) <<
++		     log2_blksz) != ext4fs_indir3_blkno) {
++			status =
++			    ext4fs_devread(__le32_to_cpu
++					   (ext4fs_indir2_block
++					    [(rblock / perblock_child)
++					     % (blksz / 4)]) << log2_blksz, 0,
++					   blksz, (char *)ext4fs_indir3_block);
++			if (status == 0) {
++				printf("** TI ext2fs read block (indir 2 2)"
++				       "failed. **\n");
++				return -1;
++			}
++			ext4fs_indir3_blkno =
++			    __le32_to_cpu(ext4fs_indir2_block[(rblock /
++							       perblock_child) %
++							      (blksz /
++							       4)]) <<
++			    log2_blksz;
++		}
++
++		blknr = __le32_to_cpu(ext4fs_indir3_block
++				      [rblock % perblock_child]);
++	}
++	debug("ext4fs_read_block %ld\n", blknr);
++
++	return blknr;
++}
++
++void ext4fs_close(void)
++{
++	if ((ext4fs_file != NULL) && (ext4fs_root != NULL)) {
++		ext4fs_free_node(ext4fs_file, &ext4fs_root->diropen);
++		ext4fs_file = NULL;
++	}
++	if (ext4fs_root != NULL) {
++		free(ext4fs_root);
++		ext4fs_root = NULL;
++	}
++	if (ext4fs_indir1_block != NULL) {
++		free(ext4fs_indir1_block);
++		ext4fs_indir1_block = NULL;
++		ext4fs_indir1_size = 0;
++		ext4fs_indir1_blkno = -1;
++	}
++	if (ext4fs_indir2_block != NULL) {
++		free(ext4fs_indir2_block);
++		ext4fs_indir2_block = NULL;
++		ext4fs_indir2_size = 0;
++		ext4fs_indir2_blkno = -1;
++	}
++	if (ext4fs_indir3_block != NULL) {
++		free(ext4fs_indir3_block);
++		ext4fs_indir3_block = NULL;
++		ext4fs_indir3_size = 0;
++		ext4fs_indir3_blkno = -1;
++	}
++}
++
++int ext4fs_iterate_dir(struct ext2fs_node *dir, char *name,
++		       struct ext2fs_node **fnode, int *ftype)
++{
++	unsigned int fpos = 0;
++	int status;
++	struct ext2fs_node *diro = (struct ext2fs_node *)dir;
++
++#ifdef DEBUG
++	if (name != NULL)
++		printf("Iterate dir %s\n", name);
++#endif				/* of DEBUG */
++	if (!diro->inode_read) {
++		status = ext4fs_read_inode(diro->data, diro->ino, &diro->inode);
++		if (status == 0)
++			return 0;
++	}
++	/* Search the file.  */
++	while (fpos < __le32_to_cpu(diro->inode.size)) {
++		struct ext2_dirent dirent;
++
++		status = ext4fs_read_file(diro, fpos,
++					  sizeof(struct ext2_dirent),
++					  (char *)&dirent);
++		if (status < 1)
++			return 0;
++
++		if (dirent.namelen != 0) {
++			char filename[dirent.namelen + 1];
++			struct ext2fs_node *fdiro;
++			int type = FILETYPE_UNKNOWN;
++
++			status = ext4fs_read_file(diro,
++						  fpos +
++						  sizeof(struct ext2_dirent),
++						  dirent.namelen, filename);
++			if (status < 1)
++				return 0;
++
++			fdiro = zalloc(sizeof(struct ext2fs_node));
++			if (!fdiro)
++				return 0;
++
++			fdiro->data = diro->data;
++			fdiro->ino = __le32_to_cpu(dirent.inode);
++
++			filename[dirent.namelen] = '\0';
++
++			if (dirent.filetype != FILETYPE_UNKNOWN) {
++				fdiro->inode_read = 0;
++
++				if (dirent.filetype == FILETYPE_DIRECTORY)
++					type = FILETYPE_DIRECTORY;
++				else if (dirent.filetype == FILETYPE_SYMLINK)
++					type = FILETYPE_SYMLINK;
++				else if (dirent.filetype == FILETYPE_REG)
++					type = FILETYPE_REG;
++			} else {
++				status = ext4fs_read_inode(diro->data,
++							   __le32_to_cpu
++							   (dirent.inode),
++							   &fdiro->inode);
++				if (status == 0) {
++					free(fdiro);
++					return 0;
++				}
++				fdiro->inode_read = 1;
++
++				if ((__le16_to_cpu(fdiro->inode.mode) &
++				     FILETYPE_INO_MASK) ==
++				    FILETYPE_INO_DIRECTORY) {
++					type = FILETYPE_DIRECTORY;
++				} else if ((__le16_to_cpu(fdiro->inode.mode)
++					    & FILETYPE_INO_MASK) ==
++					   FILETYPE_INO_SYMLINK) {
++					type = FILETYPE_SYMLINK;
++				} else if ((__le16_to_cpu(fdiro->inode.mode)
++					    & FILETYPE_INO_MASK) ==
++					   FILETYPE_INO_REG) {
++					type = FILETYPE_REG;
++				}
++			}
++#ifdef DEBUG
++			printf("iterate >%s<\n", filename);
++#endif				/* of DEBUG */
++			if ((name != NULL) && (fnode != NULL)
++			    && (ftype != NULL)) {
++				if (strcmp(filename, name) == 0) {
++					*ftype = type;
++					*fnode = fdiro;
++					return 1;
++				}
++			} else {
++				if (fdiro->inode_read == 0) {
++					status = ext4fs_read_inode(diro->data,
++								 __le32_to_cpu(
++								 dirent.inode),
++								 &fdiro->inode);
++					if (status == 0) {
++						free(fdiro);
++						return 0;
++					}
++					fdiro->inode_read = 1;
++				}
++				switch (type) {
++				case FILETYPE_DIRECTORY:
++					printf("<DIR> ");
++					break;
++				case FILETYPE_SYMLINK:
++					printf("<SYM> ");
++					break;
++				case FILETYPE_REG:
++					printf("      ");
++					break;
++				default:
++					printf("< ? > ");
++					break;
++				}
++				printf("%10d %s\n",
++				       __le32_to_cpu(fdiro->inode.size),
++				       filename);
++			}
++			free(fdiro);
++		}
++		fpos += __le16_to_cpu(dirent.direntlen);
++	}
++	return 0;
++}
++
++static char *ext4fs_read_symlink(struct ext2fs_node *node)
++{
++	char *symlink;
++	struct ext2fs_node *diro = node;
++	int status;
++
++	if (!diro->inode_read) {
++		status = ext4fs_read_inode(diro->data, diro->ino, &diro->inode);
++		if (status == 0)
++			return 0;
++	}
++	symlink = zalloc(__le32_to_cpu(diro->inode.size) + 1);
++	if (!symlink)
++		return 0;
++
++	if (__le32_to_cpu(diro->inode.size) <= 60) {
++		strncpy(symlink, diro->inode.b.symlink,
++			__le32_to_cpu(diro->inode.size));
++	} else {
++		status = ext4fs_read_file(diro, 0,
++					  __le32_to_cpu(diro->inode.size),
++					  symlink);
++		if (status == 0) {
++			free(symlink);
++			return 0;
++		}
++	}
++	symlink[__le32_to_cpu(diro->inode.size)] = '\0';
++	return symlink;
++}
++
++static int ext4fs_find_file1(const char *currpath,
++			     struct ext2fs_node *currroot,
++			     struct ext2fs_node **currfound, int *foundtype)
++{
++	char fpath[strlen(currpath) + 1];
++	char *name = fpath;
++	char *next;
++	int status;
++	int type = FILETYPE_DIRECTORY;
++	struct ext2fs_node *currnode = currroot;
++	struct ext2fs_node *oldnode = currroot;
++
++	strncpy(fpath, currpath, strlen(currpath) + 1);
++
++	/* Remove all leading slashes. */
++	while (*name == '/')
++		name++;
++
++	if (!*name) {
++		*currfound = currnode;
++		return 1;
++	}
++
++	for (;;) {
++		int found;
++
++		/* Extract the actual part from the pathname. */
++		next = strchr(name, '/');
++		if (next) {
++			/* Remove all leading slashes. */
++			while (*next == '/')
++				*(next++) = '\0';
++		}
++
++		if (type != FILETYPE_DIRECTORY) {
++			ext4fs_free_node(currnode, currroot);
++			return 0;
++		}
++
++		oldnode = currnode;
++
++		/* Iterate over the directory. */
++		found = ext4fs_iterate_dir(currnode, name, &currnode, &type);
++		if (found == 0)
++			return 0;
++
++		if (found == -1)
++			break;
++
++		/* Read in the symlink and follow it. */
++		if (type == FILETYPE_SYMLINK) {
++			char *symlink;
++
++			/* Test if the symlink does not loop. */
++			if (++symlinknest == 8) {
++				ext4fs_free_node(currnode, currroot);
++				ext4fs_free_node(oldnode, currroot);
++				return 0;
++			}
++
++			symlink = ext4fs_read_symlink(currnode);
++			ext4fs_free_node(currnode, currroot);
++
++			if (!symlink) {
++				ext4fs_free_node(oldnode, currroot);
++				return 0;
++			}
++
++			debug("Got symlink >%s<\n", symlink);
++
++			if (symlink[0] == '/') {
++				ext4fs_free_node(oldnode, currroot);
++				oldnode = &ext4fs_root->diropen;
++			}
++
++			/* Lookup the node the symlink points to. */
++			status = ext4fs_find_file1(symlink, oldnode,
++						   &currnode, &type);
++
++			free(symlink);
++
++			if (status == 0) {
++				ext4fs_free_node(oldnode, currroot);
++				return 0;
++			}
++		}
++
++		ext4fs_free_node(oldnode, currroot);
++
++		/* Found the node! */
++		if (!next || *next == '\0') {
++			*currfound = currnode;
++			*foundtype = type;
++			return 1;
++		}
++		name = next;
++	}
++	return -1;
++}
++
++int ext4fs_find_file(const char *path, struct ext2fs_node *rootnode,
++	struct ext2fs_node **foundnode, int expecttype)
++{
++	int status;
++	int foundtype = FILETYPE_DIRECTORY;
++
++	symlinknest = 0;
++	if (!path)
++		return 0;
++
++	status = ext4fs_find_file1(path, rootnode, foundnode, &foundtype);
++	if (status == 0)
++		return 0;
++
++	/* Check if the node that was found was of the expected type. */
++	if ((expecttype == FILETYPE_REG) && (foundtype != expecttype))
++		return 0;
++	else if ((expecttype == FILETYPE_DIRECTORY)
++		   && (foundtype != expecttype))
++		return 0;
++
++	return 1;
++}
++
++int ext4fs_open(const char *filename)
++{
++	struct ext2fs_node *fdiro = NULL;
++	int status;
++	int len;
++
++	if (ext4fs_root == NULL)
++		return -1;
++
++	ext4fs_file = NULL;
++	status = ext4fs_find_file(filename, &ext4fs_root->diropen, &fdiro,
++				  FILETYPE_REG);
++	if (status == 0)
++		goto fail;
++
++	if (!fdiro->inode_read) {
++		status = ext4fs_read_inode(fdiro->data, fdiro->ino,
++					   &fdiro->inode);
++		if (status == 0)
++			goto fail;
++	}
++	len = __le32_to_cpu(fdiro->inode.size);
++	ext4fs_file = fdiro;
++
++	return len;
++ fail:
++	ext4fs_free_node(fdiro, &ext4fs_root->diropen);
++
++	return -1;
++}
++
++int ext4fs_mount(unsigned part_length)
++{
++	struct ext2_data *data;
++	int status;
++	struct ext_filesystem *fs = get_fs();
++	data = zalloc(sizeof(struct ext2_data));
++	if (!data)
++		return 0;
++
++	/* Read the superblock. */
++	status = ext4fs_devread(1 * 2, 0, sizeof(struct ext2_sblock),
++				(char *)&data->sblock);
++
++	if (status == 0)
++		goto fail;
++
++	/* Make sure this is an ext2 filesystem. */
++	if (__le16_to_cpu(data->sblock.magic) != EXT2_MAGIC)
++		goto fail;
++
++	if (__le32_to_cpu(data->sblock.revision_level == 0))
++		fs->inodesz = 128;
++	else
++		fs->inodesz = __le16_to_cpu(data->sblock.inode_size);
++
++	debug("EXT2 rev %d, inode_size %d\n",
++	      __le32_to_cpu(data->sblock.revision_level), fs->inodesz);
++
++	data->diropen.data = data;
++	data->diropen.ino = 2;
++	data->diropen.inode_read = 1;
++	data->inode = &data->diropen.inode;
++
++	status = ext4fs_read_inode(data, 2, data->inode);
++	if (status == 0)
++		goto fail;
++
++	ext4fs_root = data;
++
++	return 1;
++ fail:
++	printf("Failed to mount ext2 filesystem...\n");
++	free(data);
++	ext4fs_root = NULL;
++
++	return 0;
++}
+diff --git a/fs/ext4/ext4_common.h b/fs/ext4/ext4_common.h
+new file mode 100644
+index 0000000..18e6ad1
+--- /dev/null
++++ b/fs/ext4/ext4_common.h
+@@ -0,0 +1,63 @@
++/*
++ * (C) Copyright 2011 - 2012 Samsung Electronics
++ * EXT4 filesystem implementation in Uboot by
++ * Uma Shankar <uma.shankar@samsung.com>
++ * Manjunatha C Achar <a.manjunatha@samsung.com>
++ *
++ * ext4ls and ext4load :  based on ext2 ls load support in Uboot.
++ *
++ * (C) Copyright 2004
++ * esd gmbh <www.esd-electronics.com>
++ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
++ *
++ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
++ * GRUB  --  GRand Unified Bootloader
++ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef __EXT4_COMMON__
++#define __EXT4_COMMON__
++#include <ext_common.h>
++#include <ext4fs.h>
++#include <malloc.h>
++#include <asm/errno.h>
++
++#define YES		1
++#define NO		0
++#define TRUE		1
++#define FALSE		0
++#define RECOVER	1
++#define SCAN		0
++
++#define S_IFLNK	0120000		/* symbolic link */
++#define BLOCK_NO_ONE		1
++#define SUPERBLOCK_SECTOR	2
++#define SUPERBLOCK_SIZE	1024
++#define F_FILE			1
++
++#define zalloc(size) calloc(1, size)
++
++extern unsigned long part_offset;
++int ext4fs_read_inode(struct ext2_data *data, int ino,
++		      struct ext2_inode *inode);
++int ext4fs_read_file(struct ext2fs_node *node, int pos,
++		unsigned int len, char *buf);
++int ext4fs_find_file(const char *path, struct ext2fs_node *rootnode,
++			struct ext2fs_node **foundnode, int expecttype);
++int ext4fs_iterate_dir(struct ext2fs_node *dir, char *name,
++			struct ext2fs_node **fnode, int *ftype);
++#endif
+diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
+new file mode 100644
+index 0000000..7933769
+--- /dev/null
++++ b/fs/ext4/ext4fs.c
+@@ -0,0 +1,228 @@
++/*
++ * (C) Copyright 2011 - 2012 Samsung Electronics
++ * EXT4 filesystem implementation in Uboot by
++ * Uma Shankar <uma.shankar@samsung.com>
++ * Manjunatha C Achar <a.manjunatha@samsung.com>
++ *
++ * ext4ls and ext4load : Based on ext2 ls and load support in Uboot.
++ *		       Ext4 read optimization taken from Open-Moko
++ *		       Qi bootloader
++ *
++ * (C) Copyright 2004
++ * esd gmbh <www.esd-electronics.com>
++ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
++ *
++ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
++ * GRUB  --  GRand Unified Bootloader
++ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <common.h>
++#include <malloc.h>
++#include <ext_common.h>
++#include <ext4fs.h>
++#include <linux/stat.h>
++#include <linux/time.h>
++#include <asm/byteorder.h>
++#include "ext4_common.h"
++
++int ext4fs_symlinknest;
++block_dev_desc_t *ext4_dev_desc;
++
++struct ext_filesystem *get_fs(void)
++{
++	if (ext4_dev_desc == NULL || ext4_dev_desc->priv == NULL)
++		printf("Invalid Input Arguments %s\n", __func__);
++
++	return ext4_dev_desc->priv;
++}
++
++int init_fs(block_dev_desc_t *dev_desc)
++{
++	struct ext_filesystem *fs;
++	if (dev_desc == NULL) {
++		printf("Invalid Input Arguments %s\n", __func__);
++		return -EINVAL;
++	}
++
++	fs = zalloc(sizeof(struct ext_filesystem));
++	if (fs == NULL) {
++		printf("malloc failed: %s\n", __func__);
++		return -ENOMEM;
++	}
++
++	fs->dev_desc = dev_desc;
++	dev_desc->priv = fs;
++
++	return 0;
++}
++
++void deinit_fs(block_dev_desc_t *dev_desc)
++{
++	if (dev_desc == NULL) {
++		printf("Invalid Input Arguments %s\n", __func__);
++		return;
++	}
++	free(dev_desc->priv);
++	dev_desc->priv = NULL;
++}
++
++void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot)
++{
++	if ((node != &ext4fs_root->diropen) && (node != currroot))
++		free(node);
++}
++
++/*
++ * Taken from openmoko-kernel mailing list: By Andy green
++ * Optimized read file API : collects and defers contiguous sector
++ * reads into one potentially more efficient larger sequential read action
++ */
++int ext4fs_read_file(struct ext2fs_node *node, int pos,
++		     unsigned int len, char *buf)
++{
++	int i;
++	int blockcnt;
++	int log2blocksize = LOG2_EXT2_BLOCK_SIZE(node->data);
++	int blocksize = 1 << (log2blocksize + DISK_SECTOR_BITS);
++	unsigned int filesize = __le32_to_cpu(node->inode.size);
++	int previous_block_number = -1;
++	int delayed_start = 0;
++	int delayed_extent = 0;
++	int delayed_skipfirst = 0;
++	int delayed_next = 0;
++	char *delayed_buf = NULL;
++	short status;
++
++	/* Adjust len so it we can't read past the end of the file. */
++	if (len > filesize)
++		len = filesize;
++
++	blockcnt = ((len + pos) + blocksize - 1) / blocksize;
++
++	for (i = pos / blocksize; i < blockcnt; i++) {
++		int blknr;
++		int blockoff = pos % blocksize;
++		int blockend = blocksize;
++		int skipfirst = 0;
++		blknr = read_allocated_block(&(node->inode), i);
++		if (blknr < 0)
++			return -1;
++
++		blknr = blknr << log2blocksize;
++
++		/* Last block.  */
++		if (i == blockcnt - 1) {
++			blockend = (len + pos) % blocksize;
++
++			/* The last portion is exactly blocksize. */
++			if (!blockend)
++				blockend = blocksize;
++		}
++
++		/* First block. */
++		if (i == pos / blocksize) {
++			skipfirst = blockoff;
++			blockend -= skipfirst;
++		}
++		if (blknr) {
++			int status;
++
++			if (previous_block_number != -1) {
++				if (delayed_next == blknr) {
++					delayed_extent += blockend;
++					delayed_next += blockend >> SECTOR_BITS;
++				} else {	/* spill */
++					status = ext4fs_devread(delayed_start,
++							delayed_skipfirst,
++							delayed_extent,
++							delayed_buf);
++					if (status == 0)
++						return -1;
++					previous_block_number = blknr;
++					delayed_start = blknr;
++					delayed_extent = blockend;
++					delayed_skipfirst = skipfirst;
++					delayed_buf = buf;
++					delayed_next = blknr +
++					    (blockend >> SECTOR_BITS);
++				}
++			} else {
++				previous_block_number = blknr;
++				delayed_start = blknr;
++				delayed_extent = blockend;
++				delayed_skipfirst = skipfirst;
++				delayed_buf = buf;
++				delayed_next = blknr +
++				    (blockend >> SECTOR_BITS);
++			}
++		} else {
++			if (previous_block_number != -1) {
++				/* spill */
++				status = ext4fs_devread(delayed_start,
++							delayed_skipfirst,
++							delayed_extent,
++							delayed_buf);
++				if (status == 0)
++					return -1;
++				previous_block_number = -1;
++			}
++			memset(buf, 0, blocksize - skipfirst);
++		}
++		buf += blocksize - skipfirst;
++	}
++	if (previous_block_number != -1) {
++		/* spill */
++		status = ext4fs_devread(delayed_start,
++					delayed_skipfirst, delayed_extent,
++					delayed_buf);
++		if (status == 0)
++			return -1;
++		previous_block_number = -1;
++	}
++
++	return len;
++}
++
++int ext4fs_ls(const char *dirname)
++{
++	struct ext2fs_node *dirnode;
++	int status;
++
++	if (dirname == NULL)
++		return 0;
++
++	status = ext4fs_find_file(dirname, &ext4fs_root->diropen, &dirnode,
++				  FILETYPE_DIRECTORY);
++	if (status != 1) {
++		printf("** Can not find directory. **\n");
++		return 1;
++	}
++
++	ext4fs_iterate_dir(dirnode, NULL, NULL, NULL);
++	ext4fs_free_node(dirnode, &ext4fs_root->diropen);
++
++	return 0;
++}
++
++int ext4fs_read(char *buf, unsigned len)
++{
++	if (ext4fs_root == NULL || ext4fs_file == NULL)
++		return 0;
++
++	return ext4fs_read_file(ext4fs_file, 0, len, buf);
++}
+diff --git a/include/ext4fs.h b/include/ext4fs.h
+new file mode 100644
+index 0000000..58a6a1d
+--- /dev/null
++++ b/include/ext4fs.h
+@@ -0,0 +1,132 @@
++/*
++ * (C) Copyright 2011 - 2012 Samsung Electronics
++ * EXT4 filesystem implementation in Uboot by
++ * Uma Shankar <uma.shankar@samsung.com>
++ * Manjunatha C Achar <a.manjunatha@samsung.com>
++ *
++ * Ext4 Extent data structures are taken from  original ext4 fs code
++ * as found in the linux kernel.
++ *
++ * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com
++ * Written by Alex Tomas <alex@clusterfs.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef __EXT4__
++#define __EXT4__
++#include <ext_common.h>
++
++#define EXT4_EXTENTS_FL		0x00080000 /* Inode uses extents */
++#define EXT4_EXT_MAGIC			0xf30a
++#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM	0x0010
++#define EXT4_FEATURE_INCOMPAT_EXTENTS	0x0040
++#define EXT4_INDIRECT_BLOCKS		12
++
++#define EXT4_BG_INODE_UNINIT		0x0001
++#define EXT4_BG_BLOCK_UNINIT		0x0002
++#define EXT4_BG_INODE_ZEROED		0x0004
++
++/*
++ * ext4_inode has i_block array (60 bytes total).
++ * The first 12 bytes store ext4_extent_header;
++ * the remainder stores an array of ext4_extent.
++ */
++
++/*
++ * This is the extent on-disk structure.
++ * It's used at the bottom of the tree.
++ */
++struct ext4_extent {
++	__le32	ee_block;	/* first logical block extent covers */
++	__le16	ee_len;		/* number of blocks covered by extent */
++	__le16	ee_start_hi;	/* high 16 bits of physical block */
++	__le32	ee_start_lo;	/* low 32 bits of physical block */
++};
++
++/*
++ * This is index on-disk structure.
++ * It's used at all the levels except the bottom.
++ */
++struct ext4_extent_idx {
++	__le32	ei_block;	/* index covers logical blocks from 'block' */
++	__le32	ei_leaf_lo;	/* pointer to the physical block of the next *
++				 * level. leaf or next index could be there */
++	__le16	ei_leaf_hi;	/* high 16 bits of physical block */
++	__u16	ei_unused;
++};
++
++/* Each block (leaves and indexes), even inode-stored has header. */
++struct ext4_extent_header {
++	__le16	eh_magic;	/* probably will support different formats */
++	__le16	eh_entries;	/* number of valid entries */
++	__le16	eh_max;		/* capacity of store in entries */
++	__le16	eh_depth;	/* has tree real underlying blocks? */
++	__le32	eh_generation;	/* generation of the tree */
++};
++
++struct ext_filesystem {
++	/* Total Sector of partition */
++	uint64_t total_sect;
++	/* Block size  of partition */
++	uint32_t blksz;
++	/* Inode size of partition */
++	uint32_t inodesz;
++	/* Sectors per Block */
++	uint32_t sect_perblk;
++	/* Group Descriptor Block Number */
++	uint32_t gdtable_blkno;
++	/* Total block groups of partition */
++	uint32_t no_blkgrp;
++	/* No of blocks required for bgdtable */
++	uint32_t no_blk_pergdt;
++	/* Superblock */
++	struct ext2_sblock *sb;
++	/* Block group descritpor table */
++	struct ext2_block_group *gd;
++	char *gdtable;
++
++	/* Block Bitmap Related */
++	unsigned char **blk_bmaps;
++	long int curr_blkno;
++	uint16_t first_pass_bbmap;
++
++	/* Inode Bitmap Related */
++	unsigned char **inode_bmaps;
++	int curr_inode_no;
++	uint16_t first_pass_ibmap;
++
++	/* Journal Related */
++
++	/* Block Device Descriptor */
++	block_dev_desc_t *dev_desc;
++};
++
++extern block_dev_desc_t *ext4_dev_desc;
++extern struct ext2_data *ext4fs_root;
++extern struct ext2fs_node *ext4fs_file;
++
++struct ext_filesystem *get_fs(void);
++int init_fs(block_dev_desc_t *dev_desc);
++void deinit_fs(block_dev_desc_t *dev_desc);
++int ext4fs_open(const char *filename);
++int ext4fs_read(char *buf, unsigned len);
++int ext4fs_mount(unsigned part_length);
++void ext4fs_close(void);
++int ext4fs_ls(const char *dirname);
++void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot);
++int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf);
++int ext4fs_set_blk_dev(block_dev_desc_t *rbdd, int part);
++long int read_allocated_block(struct ext2_inode *inode, int fileblock);
++#endif
+diff --git a/include/ext_common.h b/include/ext_common.h
+new file mode 100644
+index 0000000..5d48021
+--- /dev/null
++++ b/include/ext_common.h
+@@ -0,0 +1,188 @@
++/*
++ * (C) Copyright 2011 - 2012 Samsung Electronics
++ * EXT4 filesystem implementation in Uboot by
++ * Uma Shankar <uma.shankar@samsung.com>
++ * Manjunatha C Achar <a.manjunatha@samsung.com>
++ *
++ * Data structures and headers for ext4 support have been taken from
++ * ext2 ls load support in Uboot
++ *
++ * (C) Copyright 2004
++ * esd gmbh <www.esd-electronics.com>
++ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
++ *
++ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
++ * GRUB  --  GRand Unified Bootloader
++ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef __EXT_COMMON__
++#define __EXT_COMMON__
++
++#define SECTOR_SIZE		0x200
++#define SECTOR_BITS		9
++
++/* Magic value used to identify an ext2 filesystem.  */
++#define	EXT2_MAGIC		0xEF53
++/* Amount of indirect blocks in an inode.  */
++#define INDIRECT_BLOCKS		12
++/* Maximum lenght of a pathname.  */
++#define EXT2_PATH_MAX			4096
++/* Maximum nesting of symlinks, used to prevent a loop.  */
++#define	EXT2_MAX_SYMLINKCNT		8
++
++/* Filetype used in directory entry.  */
++#define	FILETYPE_UNKNOWN		0
++#define	FILETYPE_REG			1
++#define	FILETYPE_DIRECTORY		2
++#define	FILETYPE_SYMLINK		7
++
++/* Filetype information as used in inodes.  */
++#define FILETYPE_INO_MASK		0170000
++#define FILETYPE_INO_REG		0100000
++#define FILETYPE_INO_DIRECTORY		0040000
++#define FILETYPE_INO_SYMLINK		0120000
++#define EXT2_ROOT_INO			2 /* Root inode */
++
++/* Bits used as offset in sector */
++#define DISK_SECTOR_BITS		9
++/* The size of an ext2 block in bytes.  */
++#define EXT2_BLOCK_SIZE(data)	   (1 << LOG2_BLOCK_SIZE(data))
++
++/* Log2 size of ext2 block in 512 blocks.  */
++#define LOG2_EXT2_BLOCK_SIZE(data) (__le32_to_cpu \
++				(data->sblock.log2_block_size) + 1)
++
++/* Log2 size of ext2 block in bytes.  */
++#define LOG2_BLOCK_SIZE(data)	   (__le32_to_cpu \
++		(data->sblock.log2_block_size) + 10)
++#define INODE_SIZE_FILESYSTEM(data)	(__le32_to_cpu \
++			(data->sblock.inode_size))
++
++#define EXT2_FT_DIR	2
++#define SUCCESS	1
++
++/* Macro-instructions used to manage several block sizes  */
++#define EXT2_MIN_BLOCK_LOG_SIZE	10 /* 1024 */
++#define EXT2_MAX_BLOCK_LOG_SIZE	16 /* 65536 */
++#define EXT2_MIN_BLOCK_SIZE		(1 << EXT2_MIN_BLOCK_LOG_SIZE)
++#define EXT2_MAX_BLOCK_SIZE		(1 << EXT2_MAX_BLOCK_LOG_SIZE)
++
++/* The ext2 superblock.  */
++struct ext2_sblock {
++	uint32_t total_inodes;
++	uint32_t total_blocks;
++	uint32_t reserved_blocks;
++	uint32_t free_blocks;
++	uint32_t free_inodes;
++	uint32_t first_data_block;
++	uint32_t log2_block_size;
++	uint32_t log2_fragment_size;
++	uint32_t blocks_per_group;
++	uint32_t fragments_per_group;
++	uint32_t inodes_per_group;
++	uint32_t mtime;
++	uint32_t utime;
++	uint16_t mnt_count;
++	uint16_t max_mnt_count;
++	uint16_t magic;
++	uint16_t fs_state;
++	uint16_t error_handling;
++	uint16_t minor_revision_level;
++	uint32_t lastcheck;
++	uint32_t checkinterval;
++	uint32_t creator_os;
++	uint32_t revision_level;
++	uint16_t uid_reserved;
++	uint16_t gid_reserved;
++	uint32_t first_inode;
++	uint16_t inode_size;
++	uint16_t block_group_number;
++	uint32_t feature_compatibility;
++	uint32_t feature_incompat;
++	uint32_t feature_ro_compat;
++	uint32_t unique_id[4];
++	char volume_name[16];
++	char last_mounted_on[64];
++	uint32_t compression_info;
++};
++
++struct ext2_block_group {
++	__u32 block_id;	/* Blocks bitmap block */
++	__u32 inode_id;	/* Inodes bitmap block */
++	__u32 inode_table_id;	/* Inodes table block */
++	__u16 free_blocks;	/* Free blocks count */
++	__u16 free_inodes;	/* Free inodes count */
++	__u16 used_dir_cnt;	/* Directories count */
++	__u16 bg_flags;
++	__u32 bg_reserved[2];
++	__u16 bg_itable_unused; /* Unused inodes count */
++	__u16 bg_checksum;	/* crc16(s_uuid+grouo_num+group_desc)*/
++};
++
++/* The ext2 inode. */
++struct ext2_inode {
++	uint16_t mode;
++	uint16_t uid;
++	uint32_t size;
++	uint32_t atime;
++	uint32_t ctime;
++	uint32_t mtime;
++	uint32_t dtime;
++	uint16_t gid;
++	uint16_t nlinks;
++	uint32_t blockcnt;	/* Blocks of 512 bytes!! */
++	uint32_t flags;
++	uint32_t osd1;
++	union {
++		struct datablocks {
++			uint32_t dir_blocks[INDIRECT_BLOCKS];
++			uint32_t indir_block;
++			uint32_t double_indir_block;
++			uint32_t triple_indir_block;
++		} blocks;
++		char symlink[60];
++	} b;
++	uint32_t version;
++	uint32_t acl;
++	uint32_t dir_acl;
++	uint32_t fragment_addr;
++	uint32_t osd2[3];
++};
++
++/* The header of an ext2 directory entry. */
++struct ext2_dirent {
++	uint32_t inode;
++	uint16_t direntlen;
++	uint8_t namelen;
++	uint8_t filetype;
++};
++
++struct ext2fs_node {
++	struct ext2_data *data;
++	struct ext2_inode inode;
++	int ino;
++	int inode_read;
++};
++
++/* Information about a "mounted" ext2 filesystem. */
++struct ext2_data {
++	struct ext2_sblock sblock;
++	struct ext2_inode *inode;
++	struct ext2fs_node diropen;
++};
++#endif
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0010-am335x-switch-to-ext4-mode.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0010-am335x-switch-to-ext4-mode.patch
new file mode 100644
index 0000000..4511b6b
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot/2011.09git/0010-am335x-switch-to-ext4-mode.patch
@@ -0,0 +1,52 @@
+From 9e1a99476875b1f1e6e34e70d9bf6e77d3ac8fba Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 4 Apr 2012 00:06:31 +0200
+Subject: [PATCH 10/10] am335x: switch to ext4 mode
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ include/configs/am335x_evm.h |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
+index e42febe..e2be380 100755
+--- a/include/configs/am335x_evm.h
++++ b/include/configs/am335x_evm.h
+@@ -75,7 +75,7 @@
+ 	"importbootenv=echo Importing environment from mmc ...; " \
+ 		"env import -t $loadaddr $filesize\0" \
+ 	"mmc_load_uimage=fatload mmc ${mmc_dev}:1 ${kloadaddr} ${bootfile}\0" \
+-	"mmc_load_uimage_ext2=ext2load mmc ${mmc_dev}:2 ${kloadaddr} /boot/${bootfile}\0" \
++	"mmc_load_uimage_ext4=ext4load mmc ${mmc_dev}:2 ${kloadaddr} /boot/${bootfile}\0" \
+ 	"bootargs_defaults=setenv bootargs " \
+ 		"console=${console} " \
+ 		"${optargs}\0" \
+@@ -101,7 +101,7 @@
+ 		"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
+ 		"ip=dhcp\0" \
+ 	"mmc_boot=run mmc_args; " \
+-		"run mmc_load_uimage_ext2; " \
++		"run mmc_load_uimage_ext4; " \
+ 		"bootm ${kloadaddr}\0" \
+ 	"nand_boot=echo Booting from nand ...; " \
+ 		"run nand_args; " \
+@@ -139,7 +139,7 @@
+ 			"echo Running uenvcmd ...;" \
+ 			"run uenvcmd;" \
+ 		"fi;" \
+-		"if run mmc_load_uimage_ext2; then " \
++		"if run mmc_load_uimage_ext4; then " \
+ 			"run mmc_args;" \
+ 			"bootm ${kloadaddr};" \
+ 		"fi;" \
+@@ -426,6 +426,7 @@
+ #define CONFIG_DOS_PARTITION
+ #define CONFIG_CMD_FAT
+ #define CONFIG_CMD_EXT2
++#define CONFIG_CMD_EXT4
+ #endif
+ 
+ /* Unsupported features */
+-- 
+1.7.10
+
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0011-ext2load-increase-read-speed.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0011-ext2load-increase-read-speed.patch
deleted file mode 100644
index ba86266..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0011-ext2load-increase-read-speed.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 486ce56b1203dd71bad310940b321d3ae13cadec Mon Sep 17 00:00:00 2001
-From: u-boot@lakedaemon.net <u-boot@lakedaemon.net>
-Date: Wed, 28 Mar 2012 04:37:11 +0000
-Subject: [PATCH 11/15] ext2load: increase read speed
-
-This patch dramatically drops the amount of time u-boot needs to read a
-file from an ext2 partition.  On a typical 2 to 5 MB file (kernels and
-initrds) it goes from tens of seconds to a couple seconds.
-
-All we are doing here is grouping contiguous blocks into one read.
-
-Boot tested on Globalscale Technologies Dreamplug (Kirkwood ARM SoC)
-with three different files.  sha1sums were calculated in Linux
-userspace, and then confirmed after ext2load.
-
-Signed-off-by: Jason Cooper <u-boot@lakedaemon.net>
----
- fs/ext2/ext2fs.c |   26 ++++++++++++++++++++++++--
- 1 files changed, 24 insertions(+), 2 deletions(-)
-
-diff --git a/fs/ext2/ext2fs.c b/fs/ext2/ext2fs.c
-index e119e13..8531db5 100644
---- a/fs/ext2/ext2fs.c
-+++ b/fs/ext2/ext2fs.c
-@@ -414,7 +414,6 @@ int ext2fs_read_file
- 		if (blknr < 0) {
- 			return (-1);
- 		}
--		blknr = blknr << log2blocksize;
- 
- 		/* Last block.  */
- 		if (i == blockcnt - 1) {
-@@ -432,6 +431,29 @@ int ext2fs_read_file
- 			blockend -= skipfirst;
- 		}
- 
-+		/* grab middle blocks in one go */
-+		if (i != pos / blocksize && i != blockcnt - 1 && blockcnt > 3) {
-+			int oldblk = blknr;
-+			int blocknxt;
-+			while (i < blockcnt - 1) {
-+				blocknxt = ext2fs_read_block(node, i + 1);
-+				if (blocknxt == (oldblk + 1)) {
-+					oldblk = blocknxt;
-+					i++;
-+				} else {
-+					blocknxt = ext2fs_read_block(node, i);
-+					break;
-+				}
-+			}
-+
-+			if (oldblk == blknr)
-+				blockend = blocksize;
-+			else
-+				blockend = (1 + blocknxt - blknr) * blocksize;
-+		}
-+
-+		blknr = blknr << log2blocksize;
-+
- 		/* If the block number is 0 this block is not stored on disk but
- 		   is zero filled instead.  */
- 		if (blknr) {
-@@ -444,7 +466,7 @@ int ext2fs_read_file
- 		} else {
- 			memset (buf, 0, blocksize - skipfirst);
- 		}
--		buf += blocksize - skipfirst;
-+		buf += blockend - skipfirst;
- 	}
- 	return (len);
- }
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0012-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0012-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch
deleted file mode 100644
index 8bd6a42..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0012-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 6233c6274e86dad6bac240cf8703e0a0b3e14e27 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Sun, 1 Apr 2012 22:57:37 +0200
-Subject: [PATCH 12/15] am335x-evm: fix ext2load and specify partition for both fatload and ext2load
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 5a7e9a8..9a4b407 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -74,8 +74,8 @@
- 	"loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}\0" \
- 	"importbootenv=echo Importing environment from mmc ...; " \
- 		"env import -t $loadaddr $filesize\0" \
--	"mmc_load_uimage=fatload mmc ${mmc_dev} 0x80007fc0 ${bootfile}\0" \
--	"mmc_load_uimage_ext2=ext2load ${mmc_dev} 0x80007fc0 /boot/${bootfile}\0" \
-+	"mmc_load_uimage=fatload mmc ${mmc_dev}:1 0x80007fc0 ${bootfile}\0" \
-+	"mmc_load_uimage_ext2=ext2load mmc ${mmc_dev}:2 0x80007fc0 /boot/${bootfile}\0" \
- 	"optargs=\0" \
- 	"bootargs_defaults=setenv bootargs " \
- 		"console=${console} " \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0013-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0013-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch
deleted file mode 100644
index 49720e9..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0013-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 4c7580268803485ecbc05c3da3e1bbb9f2f431e0 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Sun, 1 Apr 2012 23:10:22 +0200
-Subject: [PATCH 13/15] am335x-evm: load uImage from /boot instead of VFAT
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index 9a4b407..b2628c5 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -102,7 +102,7 @@
- 		"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
- 		"ip=dhcp\0" \
- 	"mmc_boot=run mmc_args; " \
--		"run mmc_load_uimage; " \
-+		"run mmc_load_uimage_ext2; " \
- 		"bootm 0x80007fc0\0" \
- 	"nand_boot=echo Booting from nand ...; " \
- 		"run nand_args; " \
-@@ -136,7 +136,7 @@
- 			"echo Running uenvcmd ...;" \
- 			"run uenvcmd;" \
- 		"fi;" \
--		"if run mmc_load_uimage; then " \
-+		"if run mmc_load_uimage_ext2; then " \
- 			"run mmc_args;" \
- 			"bootm 0x80007fc0;" \
- 		"fi;" \
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0014-ext4fs-ls-load-support.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0014-ext4fs-ls-load-support.patch
deleted file mode 100644
index bc81c18..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0014-ext4fs-ls-load-support.patch
+++ /dev/null
@@ -1,2362 +0,0 @@
-From 881674a3a8258bfc0f3a130503e2663c2f22817d Mon Sep 17 00:00:00 2001
-From: uma.shankar <uma.shankar@samsung.com>
-Date: Mon, 9 Jan 2012 07:54:50 +0000
-Subject: [PATCH 14/15] ext4fs ls load support
-
-Signed-off-by: Uma Shankar <uma.shankar@samsung.com>
-Signed-off-by: Manjunatha C Achar <a.manjunatha@samsung.com>
-Signed-off-by: Iqbal Shareef <iqbal.ams@samsung.com>
-Signed-off-by: Hakgoo Lee <goodguy.lee@samsung.com>
----
- Makefile              |    2 +-
- common/Makefile       |    1 +
- common/cmd_ext4.c     |  266 +++++++++++++++
- fs/Makefile           |    1 +
- fs/ext2/dev.c         |    1 +
- fs/ext2/ext2fs.c      |  181 ++---------
- fs/ext4/Makefile      |   51 +++
- fs/ext4/dev.c         |  145 ++++++++
- fs/ext4/ext4_common.c |  875 +++++++++++++++++++++++++++++++++++++++++++++++++
- fs/ext4/ext4_common.h |   63 ++++
- fs/ext4/ext4fs.c      |  228 +++++++++++++
- include/ext4fs.h      |  132 ++++++++
- include/ext_common.h  |  188 +++++++++++
- 13 files changed, 1977 insertions(+), 157 deletions(-)
- create mode 100644 common/cmd_ext4.c
- create mode 100644 fs/ext4/Makefile
- create mode 100644 fs/ext4/dev.c
- create mode 100644 fs/ext4/ext4_common.c
- create mode 100644 fs/ext4/ext4_common.h
- create mode 100644 fs/ext4/ext4fs.c
- create mode 100644 include/ext4fs.h
- create mode 100644 include/ext_common.h
-
-diff --git a/Makefile b/Makefile
-index 99b9278..6a5068d 100644
---- a/Makefile
-+++ b/Makefile
-@@ -226,7 +226,7 @@ LIBS += arch/arm/cpu/ixp/npe/libnpe.o
- endif
- LIBS += arch/$(ARCH)/lib/lib$(ARCH).o
- LIBS += fs/cramfs/libcramfs.o fs/fat/libfat.o fs/fdos/libfdos.o fs/jffs2/libjffs2.o \
--	fs/reiserfs/libreiserfs.o fs/ext2/libext2fs.o fs/yaffs2/libyaffs2.o \
-+	fs/reiserfs/libreiserfs.o fs/ext2/libext2fs.o fs/ext4/libext4fs.o fs/yaffs2/libyaffs2.o \
- 	fs/ubifs/libubifs.o
- LIBS += net/libnet.o
- LIBS += disk/libdisk.o
-diff --git a/common/Makefile b/common/Makefile
-index 54dc558..a1ccfd8 100644
---- a/common/Makefile
-+++ b/common/Makefile
-@@ -87,6 +87,7 @@ COBJS-$(CONFIG_ENV_IS_IN_EEPROM) += cmd_eeprom.o
- COBJS-$(CONFIG_CMD_EEPROM) += cmd_eeprom.o
- COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
- COBJS-$(CONFIG_SYS_HUSH_PARSER) += cmd_exit.o
-+COBJS-$(CONFIG_CMD_EXT4) += cmd_ext4.o
- COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o
- COBJS-$(CONFIG_CMD_FAT) += cmd_fat.o
- COBJS-$(CONFIG_CMD_FDC)$(CONFIG_CMD_FDOS) += cmd_fdc.o
-diff --git a/common/cmd_ext4.c b/common/cmd_ext4.c
-new file mode 100644
-index 0000000..2c53d2c
---- /dev/null
-+++ b/common/cmd_ext4.c
-@@ -0,0 +1,266 @@
-+/*
-+ * (C) Copyright 2011 - 2012 Samsung Electronics
-+ * EXT4 filesystem implementation in Uboot by
-+ * Uma Shankar <uma.shankar@samsung.com>
-+ * Manjunatha C Achar <a.manjunatha@samsung.com>
-+ *
-+ * Ext4fs support
-+ * made from existing cmd_ext2.c file of Uboot
-+ *
-+ * (C) Copyright 2004
-+ * esd gmbh <www.esd-electronics.com>
-+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
-+ *
-+ * made from cmd_reiserfs by
-+ *
-+ * (C) Copyright 2003 - 2004
-+ * Sysgo Real-Time Solutions, AG <www.elinos.com>
-+ * Pavel Bartusek <pba@sysgo.com>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ */
-+
-+/*
-+ * Changelog:
-+ *	0.1 - Newly created file for ext4fs support. Taken from cmd_ext2.c
-+ *	        file in uboot. Added ext4fs ls and load support.
-+ */
-+
-+#include <common.h>
-+#include <part.h>
-+#include <config.h>
-+#include <command.h>
-+#include <image.h>
-+#include <linux/ctype.h>
-+#include <asm/byteorder.h>
-+#include <ext_common.h>
-+#include <ext4fs.h>
-+#include <linux/stat.h>
-+#include <malloc.h>
-+
-+#if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE)
-+#include <usb.h>
-+#endif
-+
-+#if !defined(CONFIG_DOS_PARTITION) && !defined(CONFIG_EFI_PARTITION)
-+#error DOS or EFI partition support must be selected
-+#endif
-+
-+uint64_t total_sector;
-+uint64_t part_offset;
-+
-+#define DOS_PART_MAGIC_OFFSET	0x1fe
-+#define DOS_FS_TYPE_OFFSET	0x36
-+#define DOS_FS32_TYPE_OFFSET	0x52
-+
-+static int do_ext4_load(cmd_tbl_t *cmdtp, int flag, int argc,
-+						char *const argv[])
-+{
-+	char *filename = NULL;
-+	char *ep;
-+	int dev;
-+	unsigned long part = 1;
-+	ulong addr = 0;
-+	ulong part_length;
-+	int filelen;
-+	disk_partition_t info;
-+	struct ext_filesystem *fs;
-+	char buf[12];
-+	unsigned long count;
-+	const char *addr_str;
-+
-+	count = 0;
-+	addr = simple_strtoul(argv[3], NULL, 16);
-+	filename = getenv("bootfile");
-+	switch (argc) {
-+	case 3:
-+		addr_str = getenv("loadaddr");
-+		if (addr_str != NULL)
-+			addr = simple_strtoul(addr_str, NULL, 16);
-+		else
-+			addr = CONFIG_SYS_LOAD_ADDR;
-+
-+		break;
-+	case 4:
-+		break;
-+	case 5:
-+		filename = argv[4];
-+		break;
-+	case 6:
-+		filename = argv[4];
-+		count = simple_strtoul(argv[5], NULL, 16);
-+		break;
-+
-+	default:
-+		return cmd_usage(cmdtp);
-+	}
-+
-+	if (!filename) {
-+		puts("** No boot file defined **\n");
-+		return 1;
-+	}
-+
-+	dev = (int)simple_strtoul(argv[2], &ep, 16);
-+	ext4_dev_desc = get_dev(argv[1], dev);
-+	if (ext4_dev_desc == NULL) {
-+		printf("** Block device %s %d not supported\n", argv[1], dev);
-+		return 1;
-+	}
-+	if (init_fs(ext4_dev_desc))
-+		return 1;
-+
-+	fs = get_fs();
-+	if (*ep) {
-+		if (*ep != ':') {
-+			puts("** Invalid boot device, use `dev[:part]' **\n");
-+			return 1;
-+		}
-+		part = simple_strtoul(++ep, NULL, 16);
-+	}
-+
-+	if (part != 0) {
-+		if (get_partition_info(fs->dev_desc, part, &info)) {
-+			printf("** Bad partition %lu **\n", part);
-+			return 1;
-+		}
-+
-+		if (strncmp((char *)info.type, BOOT_PART_TYPE,
-+			    strlen(BOOT_PART_TYPE)) != 0) {
-+			printf("** Invalid partition type \"%s\""
-+			       " (expect \"" BOOT_PART_TYPE "\")\n", info.type);
-+			return 1;
-+		}
-+		printf("Loading file \"%s\" "
-+		       "from %s device %d:%lu %s\n",
-+		       filename, argv[1], dev, part, info.name);
-+	} else {
-+		printf("Loading file \"%s\" from %s device %d\n",
-+		       filename, argv[1], dev);
-+	}
-+
-+	part_length = ext4fs_set_blk_dev(fs->dev_desc, part);
-+	if (part_length == 0) {
-+		printf("**Bad partition - %s %d:%lu **\n", argv[1], dev, part);
-+		ext4fs_close();
-+		return 1;
-+	}
-+
-+	if (!ext4fs_mount(part_length)) {
-+		printf("** Bad ext2 partition or disk - %s %d:%lu **\n",
-+		       argv[1], dev, part);
-+		ext4fs_close();
-+		return 1;
-+	}
-+
-+	filelen = ext4fs_open(filename);
-+	if (filelen < 0) {
-+		printf("** File not found %s\n", filename);
-+		ext4fs_close();
-+		return 1;
-+	}
-+	if ((count < filelen) && (count != 0))
-+		filelen = count;
-+
-+	if (ext4fs_read((char *)addr, filelen) != filelen) {
-+		printf("** Unable to read \"%s\" from %s %d:%lu **\n",
-+		       filename, argv[1], dev, part);
-+		ext4fs_close();
-+		return 1;
-+	}
-+
-+	ext4fs_close();
-+	deinit_fs(fs->dev_desc);
-+	/* Loading ok, update default load address */
-+	load_addr = addr;
-+
-+	printf("%d bytes read\n", filelen);
-+	sprintf(buf, "%X", filelen);
-+	setenv("filesize", buf);
-+
-+	return 0;
-+}
-+
-+static int do_ext4_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
-+{
-+	const char *filename = "/";
-+	int dev;
-+	unsigned long part = 1;
-+	char *ep;
-+	struct ext_filesystem *fs;
-+	int part_length;
-+
-+	if (argc < 3)
-+		return cmd_usage(cmdtp);
-+
-+	dev = (int)simple_strtoul(argv[2], &ep, 16);
-+	ext4_dev_desc = get_dev(argv[1], dev);
-+
-+	if (ext4_dev_desc == NULL) {
-+		printf("\n** Block device %s %d not supported\n", argv[1], dev);
-+		return 1;
-+	}
-+
-+	if (init_fs(ext4_dev_desc))
-+		return 1;
-+
-+	fs = get_fs();
-+	if (*ep) {
-+		if (*ep != ':') {
-+			puts("\n** Invalid boot device, use `dev[:part]' **\n");
-+			return 1;
-+		}
-+		part = simple_strtoul(++ep, NULL, 16);
-+	}
-+
-+	if (argc == 4)
-+		filename = argv[3];
-+
-+	part_length = ext4fs_set_blk_dev(fs->dev_desc, part);
-+	if (part_length == 0) {
-+		printf("** Bad partition - %s %d:%lu **\n", argv[1], dev, part);
-+		ext4fs_close();
-+		return 1;
-+	}
-+
-+	if (!ext4fs_mount(part_length)) {
-+		printf("** Bad ext2 partition or disk - %s %d:%lu **\n",
-+		       argv[1], dev, part);
-+		ext4fs_close();
-+		return 1;
-+	}
-+	if (ext4fs_ls(filename)) {
-+		printf("** Error ext2fs_ls() **\n");
-+		ext4fs_close();
-+		return 1;
-+	};
-+
-+	ext4fs_close();
-+	deinit_fs(fs->dev_desc);
-+
-+	return 0;
-+}
-+
-+U_BOOT_CMD(ext4ls, 4, 1, do_ext4_ls,
-+	   "list files in a directory (default /)",
-+	   "<interface> <dev[:part]> [directory]\n"
-+	   "	  - list files from 'dev' on 'interface' in a 'directory'");
-+
-+U_BOOT_CMD(ext4load, 6, 0, do_ext4_load,
-+	   "load binary file from a Ext2 filesystem",
-+	   "<interface> <dev[:part]> [addr] [filename] [bytes]\n"
-+	   "	  - load binary file 'filename' from 'dev' on 'interface'\n"
-+	   "		 to address 'addr' from ext2 filesystem");
-diff --git a/fs/Makefile b/fs/Makefile
-index 22aad12..00a8f37 100644
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -23,6 +23,7 @@
- #
- 
- subdirs-$(CONFIG_CMD_CRAMFS) := cramfs
-+subdirs-$(CONFIG_CMD_EXT4) += ext4
- subdirs-$(CONFIG_CMD_EXT2) += ext2
- subdirs-$(CONFIG_CMD_FAT) += fat
- subdirs-$(CONFIG_CMD_FDOS) += fdos
-diff --git a/fs/ext2/dev.c b/fs/ext2/dev.c
-index 78851d0..339a16e 100644
---- a/fs/ext2/dev.c
-+++ b/fs/ext2/dev.c
-@@ -27,6 +27,7 @@
- #include <common.h>
- #include <config.h>
- #include <ext2fs.h>
-+#include <ext_common.h>
- 
- static block_dev_desc_t *ext2fs_block_dev_desc;
- static disk_partition_t part_info;
-diff --git a/fs/ext2/ext2fs.c b/fs/ext2/ext2fs.c
-index 8531db5..ea3d98c 100644
---- a/fs/ext2/ext2fs.c
-+++ b/fs/ext2/ext2fs.c
-@@ -25,152 +25,16 @@
- 
- #include <common.h>
- #include <ext2fs.h>
-+#include <ext_common.h>
- #include <malloc.h>
- #include <asm/byteorder.h>
- 
- extern int ext2fs_devread (int sector, int byte_offset, int byte_len,
- 			   char *buf);
- 
--/* Magic value used to identify an ext2 filesystem.  */
--#define	EXT2_MAGIC		0xEF53
--/* Amount of indirect blocks in an inode.  */
--#define INDIRECT_BLOCKS		12
--/* Maximum lenght of a pathname.  */
--#define EXT2_PATH_MAX		4096
--/* Maximum nesting of symlinks, used to prevent a loop.  */
--#define	EXT2_MAX_SYMLINKCNT	8
--
--/* Filetype used in directory entry.  */
--#define	FILETYPE_UNKNOWN	0
--#define	FILETYPE_REG		1
--#define	FILETYPE_DIRECTORY	2
--#define	FILETYPE_SYMLINK	7
--
--/* Filetype information as used in inodes.  */
--#define FILETYPE_INO_MASK	0170000
--#define FILETYPE_INO_REG	0100000
--#define FILETYPE_INO_DIRECTORY	0040000
--#define FILETYPE_INO_SYMLINK	0120000
--
--/* Bits used as offset in sector */
--#define DISK_SECTOR_BITS        9
--
--/* Log2 size of ext2 block in 512 blocks.  */
--#define LOG2_EXT2_BLOCK_SIZE(data) (__le32_to_cpu (data->sblock.log2_block_size) + 1)
--
--/* Log2 size of ext2 block in bytes.  */
--#define LOG2_BLOCK_SIZE(data)	   (__le32_to_cpu (data->sblock.log2_block_size) + 10)
--
--/* The size of an ext2 block in bytes.  */
--#define EXT2_BLOCK_SIZE(data)	   (1 << LOG2_BLOCK_SIZE(data))
--
--/* The ext2 superblock.  */
--struct ext2_sblock {
--	uint32_t total_inodes;
--	uint32_t total_blocks;
--	uint32_t reserved_blocks;
--	uint32_t free_blocks;
--	uint32_t free_inodes;
--	uint32_t first_data_block;
--	uint32_t log2_block_size;
--	uint32_t log2_fragment_size;
--	uint32_t blocks_per_group;
--	uint32_t fragments_per_group;
--	uint32_t inodes_per_group;
--	uint32_t mtime;
--	uint32_t utime;
--	uint16_t mnt_count;
--	uint16_t max_mnt_count;
--	uint16_t magic;
--	uint16_t fs_state;
--	uint16_t error_handling;
--	uint16_t minor_revision_level;
--	uint32_t lastcheck;
--	uint32_t checkinterval;
--	uint32_t creator_os;
--	uint32_t revision_level;
--	uint16_t uid_reserved;
--	uint16_t gid_reserved;
--	uint32_t first_inode;
--	uint16_t inode_size;
--	uint16_t block_group_number;
--	uint32_t feature_compatibility;
--	uint32_t feature_incompat;
--	uint32_t feature_ro_compat;
--	uint32_t unique_id[4];
--	char volume_name[16];
--	char last_mounted_on[64];
--	uint32_t compression_info;
--};
--
--/* The ext2 blockgroup.  */
--struct ext2_block_group {
--	uint32_t block_id;
--	uint32_t inode_id;
--	uint32_t inode_table_id;
--	uint16_t free_blocks;
--	uint16_t free_inodes;
--	uint16_t used_dir_cnt;
--	uint32_t reserved[3];
--};
--
--/* The ext2 inode.  */
--struct ext2_inode {
--	uint16_t mode;
--	uint16_t uid;
--	uint32_t size;
--	uint32_t atime;
--	uint32_t ctime;
--	uint32_t mtime;
--	uint32_t dtime;
--	uint16_t gid;
--	uint16_t nlinks;
--	uint32_t blockcnt;	/* Blocks of 512 bytes!! */
--	uint32_t flags;
--	uint32_t osd1;
--	union {
--		struct datablocks {
--			uint32_t dir_blocks[INDIRECT_BLOCKS];
--			uint32_t indir_block;
--			uint32_t double_indir_block;
--			uint32_t tripple_indir_block;
--		} blocks;
--		char symlink[60];
--	} b;
--	uint32_t version;
--	uint32_t acl;
--	uint32_t dir_acl;
--	uint32_t fragment_addr;
--	uint32_t osd2[3];
--};
--
--/* The header of an ext2 directory entry.  */
--struct ext2_dirent {
--	uint32_t inode;
--	uint16_t direntlen;
--	uint8_t namelen;
--	uint8_t filetype;
--};
--
--struct ext2fs_node {
--	struct ext2_data *data;
--	struct ext2_inode inode;
--	int ino;
--	int inode_read;
--};
--
--/* Information about a "mounted" ext2 filesystem.  */
--struct ext2_data {
--	struct ext2_sblock sblock;
--	struct ext2_inode *inode;
--	struct ext2fs_node diropen;
--};
--
--
--typedef struct ext2fs_node *ext2fs_node_t;
- 
- struct ext2_data *ext2fs_root = NULL;
--ext2fs_node_t ext2fs_file = NULL;
-+struct ext2fs_node *ext2fs_file;
- int symlinknest = 0;
- uint32_t *indir1_block = NULL;
- int indir1_size = 0;
-@@ -243,14 +107,16 @@ static int ext2fs_read_inode
- }
- 
- 
--void ext2fs_free_node (ext2fs_node_t node, ext2fs_node_t currroot) {
-+void ext2fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot)
-+{
- 	if ((node != &ext2fs_root->diropen) && (node != currroot)) {
- 		free (node);
- 	}
- }
- 
- 
--static int ext2fs_read_block (ext2fs_node_t node, int fileblock) {
-+static int ext2fs_read_block(struct ext2fs_node *node, int fileblock)
-+{
- 	struct ext2_data *data = node->data;
- 	struct ext2_inode *inode = &node->inode;
- 	int blknr;
-@@ -390,7 +256,8 @@ static int ext2fs_read_block (ext2fs_node_t node, int fileblock) {
- 
- 
- int ext2fs_read_file
--	(ext2fs_node_t node, int pos, unsigned int len, char *buf) {
-+	(struct ext2fs_node *node, int pos, unsigned int len, char *buf)
-+{
- 	int i;
- 	int blockcnt;
- 	int log2blocksize = LOG2_EXT2_BLOCK_SIZE (node->data);
-@@ -471,8 +338,8 @@ int ext2fs_read_file
- 	return (len);
- }
- 
--
--static int ext2fs_iterate_dir (ext2fs_node_t dir, char *name, ext2fs_node_t * fnode, int *ftype)
-+int ext2fs_iterate_dir(struct ext2fs_node *dir, char *name,
-+					struct ext2fs_node **fnode, int *ftype)
- {
- 	unsigned int fpos = 0;
- 	int status;
-@@ -501,7 +368,7 @@ static int ext2fs_iterate_dir (ext2fs_node_t dir, char *name, ext2fs_node_t * fn
- 		}
- 		if (dirent.namelen != 0) {
- 			char filename[dirent.namelen + 1];
--			ext2fs_node_t fdiro;
-+			struct ext2fs_node *fdiro;
- 			int type = FILETYPE_UNKNOWN;
- 
- 			status = ext2fs_read_file (diro,
-@@ -603,8 +470,8 @@ static int ext2fs_iterate_dir (ext2fs_node_t dir, char *name, ext2fs_node_t * fn
- 	return (0);
- }
- 
--
--static char *ext2fs_read_symlink (ext2fs_node_t node) {
-+static char *ext2fs_read_symlink(struct ext2fs_node *node)
-+{
- 	char *symlink;
- 	struct ext2fs_node *diro = node;
- 	int status;
-@@ -641,15 +508,16 @@ static char *ext2fs_read_symlink (ext2fs_node_t node) {
- 
- 
- int ext2fs_find_file1
--	(const char *currpath,
--	 ext2fs_node_t currroot, ext2fs_node_t * currfound, int *foundtype) {
-+	(const char *currpath, struct ext2fs_node *currroot,
-+		struct ext2fs_node **currfound, int *foundtype)
-+{
- 	char fpath[strlen (currpath) + 1];
- 	char *name = fpath;
- 	char *next;
- 	int status;
- 	int type = FILETYPE_DIRECTORY;
--	ext2fs_node_t currnode = currroot;
--	ext2fs_node_t oldnode = currroot;
-+	struct ext2fs_node *currnode = currroot;
-+	struct ext2fs_node *oldnode = currroot;
- 
- 	strncpy (fpath, currpath, strlen (currpath) + 1);
- 
-@@ -745,8 +613,9 @@ int ext2fs_find_file1
- 
- 
- int ext2fs_find_file
--	(const char *path,
--	 ext2fs_node_t rootnode, ext2fs_node_t * foundnode, int expecttype) {
-+	(const char *path, struct ext2fs_node *rootnode,
-+	struct ext2fs_node **foundnode, int expecttype)
-+{
- 	int status;
- 	int foundtype = FILETYPE_DIRECTORY;
- 
-@@ -772,7 +641,7 @@ int ext2fs_find_file
- 
- 
- int ext2fs_ls (const char *dirname) {
--	ext2fs_node_t dirnode;
-+	struct ext2fs_node *dirnode;
- 	int status;
- 
- 	if (ext2fs_root == NULL) {
-@@ -792,7 +661,7 @@ int ext2fs_ls (const char *dirname) {
- 
- 
- int ext2fs_open (const char *filename) {
--	ext2fs_node_t fdiro = NULL;
-+	struct ext2fs_node *fdiro = NULL;
- 	int status;
- 	int len;
- 
-@@ -822,8 +691,8 @@ fail:
- }
- 
- 
--int ext2fs_close (void
--	) {
-+int ext2fs_close(void)
-+{
- 	if ((ext2fs_file != NULL) && (ext2fs_root != NULL)) {
- 		ext2fs_free_node (ext2fs_file, &ext2fs_root->diropen);
- 		ext2fs_file = NULL;
-diff --git a/fs/ext4/Makefile b/fs/ext4/Makefile
-new file mode 100644
-index 0000000..7add4ab
---- /dev/null
-+++ b/fs/ext4/Makefile
-@@ -0,0 +1,51 @@
-+#
-+# (C) Copyright 2006
-+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-+#
-+# (C) Copyright 2003
-+# Pavel Bartusek, Sysgo Real-Time Solutions AG, pba@sysgo.de
-+#
-+#
-+# See file CREDITS for list of people who contributed to this
-+# project.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+# MA 02111-1307 USA
-+#
-+
-+include $(TOPDIR)/config.mk
-+
-+LIB	= $(obj)libext4fs.o
-+
-+AOBJS	=
-+COBJS-$(CONFIG_CMD_EXT4) := ext4fs.o ext4_common.o dev.o
-+
-+SRCS	:= $(AOBJS:.o=.S) $(COBJS-y:.o=.c)
-+OBJS	:= $(addprefix $(obj),$(AOBJS) $(COBJS-y))
-+
-+
-+all:	$(LIB) $(AOBJS)
-+
-+$(LIB):	$(obj).depend $(OBJS)
-+	$(call cmd_link_o_target, $(OBJS))
-+
-+#########################################################################
-+
-+# defines $(obj).depend target
-+include $(SRCTREE)/rules.mk
-+
-+sinclude $(obj).depend
-+
-+#########################################################################
-diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c
-new file mode 100644
-index 0000000..2054be3
---- /dev/null
-+++ b/fs/ext4/dev.c
-@@ -0,0 +1,145 @@
-+/*
-+ * (C) Copyright 2011 - 2012 Samsung Electronics
-+ * EXT4 filesystem implementation in Uboot by
-+ * Uma Shankar <uma.shankar@samsung.com>
-+ * Manjunatha C Achar <a.manjunatha@samsung.com>
-+ *
-+ * made from existing ext2/dev.c file of Uboot
-+ * (C) Copyright 2004
-+ * esd gmbh <www.esd-electronics.com>
-+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
-+ *
-+ * based on code of fs/reiserfs/dev.c by
-+ *
-+ * (C) Copyright 2003 - 2004
-+ * Sysgo AG, <www.elinos.com>, Pavel Bartusek <pba@sysgo.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ */
-+
-+/*
-+ * Changelog:
-+ *	0.1 - Newly created file for ext4fs support. Taken from
-+ *	        fs/ext2/dev.c file in uboot.
-+ */
-+
-+#include <common.h>
-+#include <config.h>
-+#include <ext_common.h>
-+
-+static block_dev_desc_t *ext4fs_block_dev_desc;
-+static disk_partition_t part_info;
-+
-+int ext4fs_set_blk_dev(block_dev_desc_t *rbdd, int part)
-+{
-+	ext4fs_block_dev_desc = rbdd;
-+
-+	if (part == 0) {
-+		/* disk doesn't use partition table */
-+		part_info.start = 0;
-+		part_info.size = rbdd->lba;
-+		part_info.blksz = rbdd->blksz;
-+	} else {
-+		if (get_partition_info(ext4fs_block_dev_desc,
-+					part, &part_info))
-+			return 0;
-+	}
-+	return part_info.size;
-+}
-+
-+int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf)
-+{
-+	char sec_buf[SECTOR_SIZE];
-+	unsigned block_len;
-+
-+	/* Check partition boundaries */
-+	if ((sector < 0)
-+	    || ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS)) >=
-+		part_info.size)) {
-+		printf("%s read outside partition %d\n", __func__, sector);
-+		return 0;
-+	}
-+
-+	/* Get the read to the beginning of a partition */
-+	sector += byte_offset >> SECTOR_BITS;
-+	byte_offset &= SECTOR_SIZE - 1;
-+
-+	debug(" <%d, %d, %d>\n", sector, byte_offset, byte_len);
-+
-+	if (ext4fs_block_dev_desc == NULL) {
-+		printf("** Invalid Block Device Descriptor (NULL)\n");
-+		return 0;
-+	}
-+
-+	if (byte_offset != 0) {
-+		/* read first part which isn't aligned with start of sector */
-+		if (ext4fs_block_dev_desc->
-+		    block_read(ext4fs_block_dev_desc->dev,
-+				part_info.start + sector, 1,
-+				(unsigned long *) sec_buf) != 1) {
-+			printf(" ** ext2fs_devread() read error **\n");
-+			return 0;
-+		}
-+		memcpy(buf, sec_buf + byte_offset,
-+			min(SECTOR_SIZE - byte_offset, byte_len));
-+		buf += min(SECTOR_SIZE - byte_offset, byte_len);
-+		byte_len -= min(SECTOR_SIZE - byte_offset, byte_len);
-+		sector++;
-+	}
-+
-+	if (byte_len == 0)
-+		return 1;
-+
-+	/* read sector aligned part */
-+	block_len = byte_len & ~(SECTOR_SIZE - 1);
-+
-+	if (block_len == 0) {
-+		u8 p[SECTOR_SIZE];
-+
-+		block_len = SECTOR_SIZE;
-+		ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc->dev,
-+						  part_info.start + sector,
-+						  1, (unsigned long *)p);
-+		memcpy(buf, p, byte_len);
-+		return 1;
-+	}
-+
-+	if (ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc->dev,
-+					part_info.start + sector,
-+					block_len / SECTOR_SIZE,
-+					(unsigned long *) buf) !=
-+					block_len / SECTOR_SIZE) {
-+		printf(" ** %s read error - block\n", __func__);
-+		return 0;
-+	}
-+	block_len = byte_len & ~(SECTOR_SIZE - 1);
-+	buf += block_len;
-+	byte_len -= block_len;
-+	sector += block_len / SECTOR_SIZE;
-+
-+	if (byte_len != 0) {
-+		/* read rest of data which are not in whole sector */
-+		if (ext4fs_block_dev_desc->
-+		    block_read(ext4fs_block_dev_desc->dev,
-+				part_info.start + sector, 1,
-+				(unsigned long *) sec_buf) != 1) {
-+			printf("* %s read error - last part\n", __func__);
-+			return 0;
-+		}
-+		memcpy(buf, sec_buf, byte_len);
-+	}
-+	return 1;
-+}
-diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
-new file mode 100644
-index 0000000..d9deefe
---- /dev/null
-+++ b/fs/ext4/ext4_common.c
-@@ -0,0 +1,875 @@
-+/*
-+ * (C) Copyright 2011 - 2012 Samsung Electronics
-+ * EXT4 filesystem implementation in Uboot by
-+ * Uma Shankar <uma.shankar@samsung.com>
-+ * Manjunatha C Achar <a.manjunatha@samsung.com>
-+ *
-+ * ext4ls and ext4load : Based on ext2 ls load support in Uboot.
-+ *
-+ * (C) Copyright 2004
-+ * esd gmbh <www.esd-electronics.com>
-+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
-+ *
-+ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
-+ * GRUB  --  GRand Unified Bootloader
-+ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <common.h>
-+#include <ext_common.h>
-+#include <ext4fs.h>
-+#include <malloc.h>
-+#include <stddef.h>
-+#include <linux/stat.h>
-+#include <linux/time.h>
-+#include <asm/byteorder.h>
-+#include "ext4_common.h"
-+
-+struct ext2_data *ext4fs_root;
-+struct ext2fs_node *ext4fs_file;
-+uint32_t *ext4fs_indir1_block;
-+int ext4fs_indir1_size;
-+int ext4fs_indir1_blkno = -1;
-+uint32_t *ext4fs_indir2_block;
-+int ext4fs_indir2_size;
-+int ext4fs_indir2_blkno = -1;
-+
-+uint32_t *ext4fs_indir3_block;
-+int ext4fs_indir3_size;
-+int ext4fs_indir3_blkno = -1;
-+struct ext2_inode *g_parent_inode;
-+static int symlinknest;
-+
-+static struct ext4_extent_header *ext4fs_get_extent_block
-+	(struct ext2_data *data, char *buf,
-+		struct ext4_extent_header *ext_block,
-+		uint32_t fileblock, int log2_blksz)
-+{
-+	struct ext4_extent_idx *index;
-+	unsigned long long block;
-+	struct ext_filesystem *fs = get_fs();
-+	int i;
-+
-+	while (1) {
-+		index = (struct ext4_extent_idx *)(ext_block + 1);
-+
-+		if (le32_to_cpu(ext_block->eh_magic) != EXT4_EXT_MAGIC)
-+			return 0;
-+
-+		if (ext_block->eh_depth == 0)
-+			return ext_block;
-+		i = -1;
-+		do {
-+			i++;
-+			if (i >= le32_to_cpu(ext_block->eh_entries))
-+				break;
-+		} while (fileblock > le32_to_cpu(index[i].ei_block));
-+
-+		if (--i < 0)
-+			return 0;
-+
-+		block = le32_to_cpu(index[i].ei_leaf_hi);
-+		block = (block << 32) + le32_to_cpu(index[i].ei_leaf_lo);
-+
-+		if (ext4fs_devread(block << log2_blksz, 0, fs->blksz, buf))
-+			ext_block = (struct ext4_extent_header *)buf;
-+		else
-+			return 0;
-+	}
-+}
-+
-+static int ext4fs_blockgroup
-+	(struct ext2_data *data, int group, struct ext2_block_group *blkgrp)
-+{
-+	long int blkno;
-+	unsigned int blkoff, desc_per_blk;
-+
-+	desc_per_blk = EXT2_BLOCK_SIZE(data) / sizeof(struct ext2_block_group);
-+
-+	blkno = __le32_to_cpu(data->sblock.first_data_block) + 1 +
-+	    group / desc_per_blk;
-+	blkoff = (group % desc_per_blk) * sizeof(struct ext2_block_group);
-+
-+	debug("ext4fs read %d group descriptor (blkno %ld blkoff %u)\n",
-+	      group, blkno, blkoff);
-+
-+	return ext4fs_devread(blkno << LOG2_EXT2_BLOCK_SIZE(data),
-+			      blkoff, sizeof(struct ext2_block_group),
-+			      (char *)blkgrp);
-+}
-+
-+int ext4fs_read_inode(struct ext2_data *data, int ino, struct ext2_inode *inode)
-+{
-+	struct ext2_block_group blkgrp;
-+	struct ext2_sblock *sblock = &data->sblock;
-+	struct ext_filesystem *fs = get_fs();
-+	int inodes_per_block, status;
-+	long int blkno;
-+	unsigned int blkoff;
-+
-+	/* It is easier to calculate if the first inode is 0. */
-+	ino--;
-+	status = ext4fs_blockgroup(data, ino / __le32_to_cpu
-+				   (sblock->inodes_per_group), &blkgrp);
-+	if (status == 0)
-+		return 0;
-+
-+	inodes_per_block = EXT2_BLOCK_SIZE(data) / fs->inodesz;
-+	blkno = __le32_to_cpu(blkgrp.inode_table_id) +
-+	    (ino % __le32_to_cpu(sblock->inodes_per_group)) / inodes_per_block;
-+	blkoff = (ino % inodes_per_block) * fs->inodesz;
-+	/* Read the inode. */
-+	status = ext4fs_devread(blkno << LOG2_EXT2_BLOCK_SIZE(data), blkoff,
-+				sizeof(struct ext2_inode), (char *)inode);
-+	if (status == 0)
-+		return 0;
-+
-+	return 1;
-+}
-+
-+long int read_allocated_block(struct ext2_inode *inode, int fileblock)
-+{
-+	long int blknr;
-+	int blksz;
-+	int log2_blksz;
-+	int status;
-+	long int rblock;
-+	long int perblock_parent;
-+	long int perblock_child;
-+	unsigned long long start;
-+	/* get the blocksize of the filesystem */
-+	blksz = EXT2_BLOCK_SIZE(ext4fs_root);
-+	log2_blksz = LOG2_EXT2_BLOCK_SIZE(ext4fs_root);
-+	if (le32_to_cpu(inode->flags) & EXT4_EXTENTS_FL) {
-+		char *buf = zalloc(blksz);
-+		if (!buf)
-+			return -ENOMEM;
-+		struct ext4_extent_header *ext_block;
-+		struct ext4_extent *extent;
-+		int i = -1;
-+		ext_block = ext4fs_get_extent_block(ext4fs_root, buf,
-+						    (struct ext4_extent_header
-+						     *)inode->b.
-+						    blocks.dir_blocks,
-+						    fileblock, log2_blksz);
-+		if (!ext_block) {
-+			printf("invalid extent block\n");
-+			free(buf);
-+			return -EINVAL;
-+		}
-+
-+		extent = (struct ext4_extent *)(ext_block + 1);
-+
-+		do {
-+			i++;
-+			if (i >= le32_to_cpu(ext_block->eh_entries))
-+				break;
-+		} while (fileblock >= le32_to_cpu(extent[i].ee_block));
-+		if (--i >= 0) {
-+			fileblock -= le32_to_cpu(extent[i].ee_block);
-+			if (fileblock >= le32_to_cpu(extent[i].ee_len)) {
-+				free(buf);
-+				return 0;
-+			}
-+
-+			start = le32_to_cpu(extent[i].ee_start_hi);
-+			start = (start << 32) +
-+			    le32_to_cpu(extent[i].ee_start_lo);
-+			free(buf);
-+			return fileblock + start;
-+		}
-+
-+		printf("Extent Error\n");
-+		free(buf);
-+		return -1;
-+	}
-+
-+	/* Direct blocks. */
-+	if (fileblock < INDIRECT_BLOCKS)
-+		blknr = __le32_to_cpu(inode->b.blocks.dir_blocks[fileblock]);
-+
-+	/* Indirect. */
-+	else if (fileblock < (INDIRECT_BLOCKS + (blksz / 4))) {
-+		if (ext4fs_indir1_block == NULL) {
-+			ext4fs_indir1_block = zalloc(blksz);
-+			if (ext4fs_indir1_block == NULL) {
-+				printf("** SI ext2fs read block (indir 1)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_size = blksz;
-+			ext4fs_indir1_blkno = -1;
-+		}
-+		if (blksz != ext4fs_indir1_size) {
-+			free(ext4fs_indir1_block);
-+			ext4fs_indir1_block = NULL;
-+			ext4fs_indir1_size = 0;
-+			ext4fs_indir1_blkno = -1;
-+			ext4fs_indir1_block = zalloc(blksz);
-+			if (ext4fs_indir1_block == NULL) {
-+				printf("** SI ext2fs read block (indir 1):"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_size = blksz;
-+		}
-+		if ((__le32_to_cpu(inode->b.blocks.indir_block) <<
-+		     log2_blksz) != ext4fs_indir1_blkno) {
-+			status =
-+			    ext4fs_devread(__le32_to_cpu
-+					   (inode->b.blocks.
-+					    indir_block) << log2_blksz, 0,
-+					   blksz, (char *)ext4fs_indir1_block);
-+			if (status == 0) {
-+				printf("** SI ext2fs read block (indir 1)"
-+				       "failed. **\n");
-+				return 0;
-+			}
-+			ext4fs_indir1_blkno =
-+			    __le32_to_cpu(inode->b.blocks.
-+					  indir_block) << log2_blksz;
-+		}
-+		blknr = __le32_to_cpu(ext4fs_indir1_block
-+				      [fileblock - INDIRECT_BLOCKS]);
-+	}
-+	/* Double indirect. */
-+	else if (fileblock < (INDIRECT_BLOCKS + (blksz / 4 *
-+					(blksz / 4 + 1)))) {
-+
-+		long int perblock = blksz / 4;
-+		long int rblock = fileblock - (INDIRECT_BLOCKS + blksz / 4);
-+
-+		if (ext4fs_indir1_block == NULL) {
-+			ext4fs_indir1_block = zalloc(blksz);
-+			if (ext4fs_indir1_block == NULL) {
-+				printf("** DI ext2fs read block (indir 2 1)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_size = blksz;
-+			ext4fs_indir1_blkno = -1;
-+		}
-+		if (blksz != ext4fs_indir1_size) {
-+			free(ext4fs_indir1_block);
-+			ext4fs_indir1_block = NULL;
-+			ext4fs_indir1_size = 0;
-+			ext4fs_indir1_blkno = -1;
-+			ext4fs_indir1_block = zalloc(blksz);
-+			if (ext4fs_indir1_block == NULL) {
-+				printf("** DI ext2fs read block (indir 2 1)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_size = blksz;
-+		}
-+		if ((__le32_to_cpu(inode->b.blocks.double_indir_block) <<
-+		     log2_blksz) != ext4fs_indir1_blkno) {
-+			status =
-+			    ext4fs_devread(__le32_to_cpu
-+					   (inode->b.blocks.
-+					    double_indir_block) << log2_blksz,
-+					   0, blksz,
-+					   (char *)ext4fs_indir1_block);
-+			if (status == 0) {
-+				printf("** DI ext2fs read block (indir 2 1)"
-+				       "failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_blkno =
-+			    __le32_to_cpu(inode->b.blocks.double_indir_block) <<
-+			    log2_blksz;
-+		}
-+
-+		if (ext4fs_indir2_block == NULL) {
-+			ext4fs_indir2_block = zalloc(blksz);
-+			if (ext4fs_indir2_block == NULL) {
-+				printf("** DI ext2fs read block (indir 2 2)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir2_size = blksz;
-+			ext4fs_indir2_blkno = -1;
-+		}
-+		if (blksz != ext4fs_indir2_size) {
-+			free(ext4fs_indir2_block);
-+			ext4fs_indir2_block = NULL;
-+			ext4fs_indir2_size = 0;
-+			ext4fs_indir2_blkno = -1;
-+			ext4fs_indir2_block = zalloc(blksz);
-+			if (ext4fs_indir2_block == NULL) {
-+				printf("** DI ext2fs read block (indir 2 2)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir2_size = blksz;
-+		}
-+		if ((__le32_to_cpu(ext4fs_indir1_block[rblock / perblock]) <<
-+		     log2_blksz) != ext4fs_indir2_blkno) {
-+			status = ext4fs_devread(__le32_to_cpu
-+						(ext4fs_indir1_block
-+						 [rblock /
-+						  perblock]) << log2_blksz, 0,
-+						blksz,
-+						(char *)ext4fs_indir2_block);
-+			if (status == 0) {
-+				printf("** DI ext2fs read block (indir 2 2)"
-+				       "failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir2_blkno =
-+			    __le32_to_cpu(ext4fs_indir1_block[rblock
-+							      /
-+							      perblock]) <<
-+			    log2_blksz;
-+		}
-+		blknr = __le32_to_cpu(ext4fs_indir2_block[rblock % perblock]);
-+	}
-+	/* Tripple indirect. */
-+	else {
-+		rblock = fileblock - (INDIRECT_BLOCKS + blksz / 4 +
-+				      (blksz / 4 * blksz / 4));
-+		perblock_child = blksz / 4;
-+		perblock_parent = ((blksz / 4) * (blksz / 4));
-+
-+		if (ext4fs_indir1_block == NULL) {
-+			ext4fs_indir1_block = zalloc(blksz);
-+			if (ext4fs_indir1_block == NULL) {
-+				printf("** TI ext2fs read block (indir 2 1)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_size = blksz;
-+			ext4fs_indir1_blkno = -1;
-+		}
-+		if (blksz != ext4fs_indir1_size) {
-+			free(ext4fs_indir1_block);
-+			ext4fs_indir1_block = NULL;
-+			ext4fs_indir1_size = 0;
-+			ext4fs_indir1_blkno = -1;
-+			ext4fs_indir1_block = zalloc(blksz);
-+			if (ext4fs_indir1_block == NULL) {
-+				printf("** TI ext2fs read block (indir 2 1)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_size = blksz;
-+		}
-+		if ((__le32_to_cpu(inode->b.blocks.triple_indir_block) <<
-+		     log2_blksz) != ext4fs_indir1_blkno) {
-+			status = ext4fs_devread
-+			    (__le32_to_cpu(inode->b.blocks.triple_indir_block)
-+			     << log2_blksz, 0, blksz,
-+			     (char *)ext4fs_indir1_block);
-+			if (status == 0) {
-+				printf("** TI ext2fs read block (indir 2 1)"
-+				       "failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir1_blkno =
-+			    __le32_to_cpu(inode->b.blocks.triple_indir_block) <<
-+			    log2_blksz;
-+		}
-+
-+		if (ext4fs_indir2_block == NULL) {
-+			ext4fs_indir2_block = zalloc(blksz);
-+			if (ext4fs_indir2_block == NULL) {
-+				printf("** TI ext2fs read block (indir 2 2)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir2_size = blksz;
-+			ext4fs_indir2_blkno = -1;
-+		}
-+		if (blksz != ext4fs_indir2_size) {
-+			free(ext4fs_indir2_block);
-+			ext4fs_indir2_block = NULL;
-+			ext4fs_indir2_size = 0;
-+			ext4fs_indir2_blkno = -1;
-+			ext4fs_indir2_block = zalloc(blksz);
-+			if (ext4fs_indir2_block == NULL) {
-+				printf("** TI ext2fs read block (indir 2 2)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir2_size = blksz;
-+		}
-+		if ((__le32_to_cpu(ext4fs_indir1_block[rblock /
-+						       perblock_parent]) <<
-+		     log2_blksz)
-+		    != ext4fs_indir2_blkno) {
-+			status = ext4fs_devread(__le32_to_cpu
-+						(ext4fs_indir1_block
-+						 [rblock /
-+						  perblock_parent]) <<
-+						log2_blksz, 0, blksz,
-+						(char *)ext4fs_indir2_block);
-+			if (status == 0) {
-+				printf("** TI ext2fs read block (indir 2 2)"
-+				       "failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir2_blkno =
-+			    __le32_to_cpu(ext4fs_indir1_block[rblock /
-+							      perblock_parent])
-+			    << log2_blksz;
-+		}
-+
-+		if (ext4fs_indir3_block == NULL) {
-+			ext4fs_indir3_block = zalloc(blksz);
-+			if (ext4fs_indir3_block == NULL) {
-+				printf("** TI ext2fs read block (indir 2 2)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir3_size = blksz;
-+			ext4fs_indir3_blkno = -1;
-+		}
-+		if (blksz != ext4fs_indir3_size) {
-+			free(ext4fs_indir3_block);
-+			ext4fs_indir3_block = NULL;
-+			ext4fs_indir3_size = 0;
-+			ext4fs_indir3_blkno = -1;
-+			ext4fs_indir3_block = zalloc(blksz);
-+			if (ext4fs_indir3_block == NULL) {
-+				printf("** TI ext2fs read block (indir 2 2)"
-+				       "malloc failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir3_size = blksz;
-+		}
-+		if ((__le32_to_cpu(ext4fs_indir2_block[rblock
-+						       /
-+						       perblock_child]) <<
-+		     log2_blksz) != ext4fs_indir3_blkno) {
-+			status =
-+			    ext4fs_devread(__le32_to_cpu
-+					   (ext4fs_indir2_block
-+					    [(rblock / perblock_child)
-+					     % (blksz / 4)]) << log2_blksz, 0,
-+					   blksz, (char *)ext4fs_indir3_block);
-+			if (status == 0) {
-+				printf("** TI ext2fs read block (indir 2 2)"
-+				       "failed. **\n");
-+				return -1;
-+			}
-+			ext4fs_indir3_blkno =
-+			    __le32_to_cpu(ext4fs_indir2_block[(rblock /
-+							       perblock_child) %
-+							      (blksz /
-+							       4)]) <<
-+			    log2_blksz;
-+		}
-+
-+		blknr = __le32_to_cpu(ext4fs_indir3_block
-+				      [rblock % perblock_child]);
-+	}
-+	debug("ext4fs_read_block %ld\n", blknr);
-+
-+	return blknr;
-+}
-+
-+void ext4fs_close(void)
-+{
-+	if ((ext4fs_file != NULL) && (ext4fs_root != NULL)) {
-+		ext4fs_free_node(ext4fs_file, &ext4fs_root->diropen);
-+		ext4fs_file = NULL;
-+	}
-+	if (ext4fs_root != NULL) {
-+		free(ext4fs_root);
-+		ext4fs_root = NULL;
-+	}
-+	if (ext4fs_indir1_block != NULL) {
-+		free(ext4fs_indir1_block);
-+		ext4fs_indir1_block = NULL;
-+		ext4fs_indir1_size = 0;
-+		ext4fs_indir1_blkno = -1;
-+	}
-+	if (ext4fs_indir2_block != NULL) {
-+		free(ext4fs_indir2_block);
-+		ext4fs_indir2_block = NULL;
-+		ext4fs_indir2_size = 0;
-+		ext4fs_indir2_blkno = -1;
-+	}
-+	if (ext4fs_indir3_block != NULL) {
-+		free(ext4fs_indir3_block);
-+		ext4fs_indir3_block = NULL;
-+		ext4fs_indir3_size = 0;
-+		ext4fs_indir3_blkno = -1;
-+	}
-+}
-+
-+int ext4fs_iterate_dir(struct ext2fs_node *dir, char *name,
-+		       struct ext2fs_node **fnode, int *ftype)
-+{
-+	unsigned int fpos = 0;
-+	int status;
-+	struct ext2fs_node *diro = (struct ext2fs_node *)dir;
-+
-+#ifdef DEBUG
-+	if (name != NULL)
-+		printf("Iterate dir %s\n", name);
-+#endif				/* of DEBUG */
-+	if (!diro->inode_read) {
-+		status = ext4fs_read_inode(diro->data, diro->ino, &diro->inode);
-+		if (status == 0)
-+			return 0;
-+	}
-+	/* Search the file.  */
-+	while (fpos < __le32_to_cpu(diro->inode.size)) {
-+		struct ext2_dirent dirent;
-+
-+		status = ext4fs_read_file(diro, fpos,
-+					  sizeof(struct ext2_dirent),
-+					  (char *)&dirent);
-+		if (status < 1)
-+			return 0;
-+
-+		if (dirent.namelen != 0) {
-+			char filename[dirent.namelen + 1];
-+			struct ext2fs_node *fdiro;
-+			int type = FILETYPE_UNKNOWN;
-+
-+			status = ext4fs_read_file(diro,
-+						  fpos +
-+						  sizeof(struct ext2_dirent),
-+						  dirent.namelen, filename);
-+			if (status < 1)
-+				return 0;
-+
-+			fdiro = zalloc(sizeof(struct ext2fs_node));
-+			if (!fdiro)
-+				return 0;
-+
-+			fdiro->data = diro->data;
-+			fdiro->ino = __le32_to_cpu(dirent.inode);
-+
-+			filename[dirent.namelen] = '\0';
-+
-+			if (dirent.filetype != FILETYPE_UNKNOWN) {
-+				fdiro->inode_read = 0;
-+
-+				if (dirent.filetype == FILETYPE_DIRECTORY)
-+					type = FILETYPE_DIRECTORY;
-+				else if (dirent.filetype == FILETYPE_SYMLINK)
-+					type = FILETYPE_SYMLINK;
-+				else if (dirent.filetype == FILETYPE_REG)
-+					type = FILETYPE_REG;
-+			} else {
-+				status = ext4fs_read_inode(diro->data,
-+							   __le32_to_cpu
-+							   (dirent.inode),
-+							   &fdiro->inode);
-+				if (status == 0) {
-+					free(fdiro);
-+					return 0;
-+				}
-+				fdiro->inode_read = 1;
-+
-+				if ((__le16_to_cpu(fdiro->inode.mode) &
-+				     FILETYPE_INO_MASK) ==
-+				    FILETYPE_INO_DIRECTORY) {
-+					type = FILETYPE_DIRECTORY;
-+				} else if ((__le16_to_cpu(fdiro->inode.mode)
-+					    & FILETYPE_INO_MASK) ==
-+					   FILETYPE_INO_SYMLINK) {
-+					type = FILETYPE_SYMLINK;
-+				} else if ((__le16_to_cpu(fdiro->inode.mode)
-+					    & FILETYPE_INO_MASK) ==
-+					   FILETYPE_INO_REG) {
-+					type = FILETYPE_REG;
-+				}
-+			}
-+#ifdef DEBUG
-+			printf("iterate >%s<\n", filename);
-+#endif				/* of DEBUG */
-+			if ((name != NULL) && (fnode != NULL)
-+			    && (ftype != NULL)) {
-+				if (strcmp(filename, name) == 0) {
-+					*ftype = type;
-+					*fnode = fdiro;
-+					return 1;
-+				}
-+			} else {
-+				if (fdiro->inode_read == 0) {
-+					status = ext4fs_read_inode(diro->data,
-+								 __le32_to_cpu(
-+								 dirent.inode),
-+								 &fdiro->inode);
-+					if (status == 0) {
-+						free(fdiro);
-+						return 0;
-+					}
-+					fdiro->inode_read = 1;
-+				}
-+				switch (type) {
-+				case FILETYPE_DIRECTORY:
-+					printf("<DIR> ");
-+					break;
-+				case FILETYPE_SYMLINK:
-+					printf("<SYM> ");
-+					break;
-+				case FILETYPE_REG:
-+					printf("      ");
-+					break;
-+				default:
-+					printf("< ? > ");
-+					break;
-+				}
-+				printf("%10d %s\n",
-+				       __le32_to_cpu(fdiro->inode.size),
-+				       filename);
-+			}
-+			free(fdiro);
-+		}
-+		fpos += __le16_to_cpu(dirent.direntlen);
-+	}
-+	return 0;
-+}
-+
-+static char *ext4fs_read_symlink(struct ext2fs_node *node)
-+{
-+	char *symlink;
-+	struct ext2fs_node *diro = node;
-+	int status;
-+
-+	if (!diro->inode_read) {
-+		status = ext4fs_read_inode(diro->data, diro->ino, &diro->inode);
-+		if (status == 0)
-+			return 0;
-+	}
-+	symlink = zalloc(__le32_to_cpu(diro->inode.size) + 1);
-+	if (!symlink)
-+		return 0;
-+
-+	if (__le32_to_cpu(diro->inode.size) <= 60) {
-+		strncpy(symlink, diro->inode.b.symlink,
-+			__le32_to_cpu(diro->inode.size));
-+	} else {
-+		status = ext4fs_read_file(diro, 0,
-+					  __le32_to_cpu(diro->inode.size),
-+					  symlink);
-+		if (status == 0) {
-+			free(symlink);
-+			return 0;
-+		}
-+	}
-+	symlink[__le32_to_cpu(diro->inode.size)] = '\0';
-+	return symlink;
-+}
-+
-+static int ext4fs_find_file1(const char *currpath,
-+			     struct ext2fs_node *currroot,
-+			     struct ext2fs_node **currfound, int *foundtype)
-+{
-+	char fpath[strlen(currpath) + 1];
-+	char *name = fpath;
-+	char *next;
-+	int status;
-+	int type = FILETYPE_DIRECTORY;
-+	struct ext2fs_node *currnode = currroot;
-+	struct ext2fs_node *oldnode = currroot;
-+
-+	strncpy(fpath, currpath, strlen(currpath) + 1);
-+
-+	/* Remove all leading slashes. */
-+	while (*name == '/')
-+		name++;
-+
-+	if (!*name) {
-+		*currfound = currnode;
-+		return 1;
-+	}
-+
-+	for (;;) {
-+		int found;
-+
-+		/* Extract the actual part from the pathname. */
-+		next = strchr(name, '/');
-+		if (next) {
-+			/* Remove all leading slashes. */
-+			while (*next == '/')
-+				*(next++) = '\0';
-+		}
-+
-+		if (type != FILETYPE_DIRECTORY) {
-+			ext4fs_free_node(currnode, currroot);
-+			return 0;
-+		}
-+
-+		oldnode = currnode;
-+
-+		/* Iterate over the directory. */
-+		found = ext4fs_iterate_dir(currnode, name, &currnode, &type);
-+		if (found == 0)
-+			return 0;
-+
-+		if (found == -1)
-+			break;
-+
-+		/* Read in the symlink and follow it. */
-+		if (type == FILETYPE_SYMLINK) {
-+			char *symlink;
-+
-+			/* Test if the symlink does not loop. */
-+			if (++symlinknest == 8) {
-+				ext4fs_free_node(currnode, currroot);
-+				ext4fs_free_node(oldnode, currroot);
-+				return 0;
-+			}
-+
-+			symlink = ext4fs_read_symlink(currnode);
-+			ext4fs_free_node(currnode, currroot);
-+
-+			if (!symlink) {
-+				ext4fs_free_node(oldnode, currroot);
-+				return 0;
-+			}
-+
-+			debug("Got symlink >%s<\n", symlink);
-+
-+			if (symlink[0] == '/') {
-+				ext4fs_free_node(oldnode, currroot);
-+				oldnode = &ext4fs_root->diropen;
-+			}
-+
-+			/* Lookup the node the symlink points to. */
-+			status = ext4fs_find_file1(symlink, oldnode,
-+						   &currnode, &type);
-+
-+			free(symlink);
-+
-+			if (status == 0) {
-+				ext4fs_free_node(oldnode, currroot);
-+				return 0;
-+			}
-+		}
-+
-+		ext4fs_free_node(oldnode, currroot);
-+
-+		/* Found the node! */
-+		if (!next || *next == '\0') {
-+			*currfound = currnode;
-+			*foundtype = type;
-+			return 1;
-+		}
-+		name = next;
-+	}
-+	return -1;
-+}
-+
-+int ext4fs_find_file(const char *path, struct ext2fs_node *rootnode,
-+	struct ext2fs_node **foundnode, int expecttype)
-+{
-+	int status;
-+	int foundtype = FILETYPE_DIRECTORY;
-+
-+	symlinknest = 0;
-+	if (!path)
-+		return 0;
-+
-+	status = ext4fs_find_file1(path, rootnode, foundnode, &foundtype);
-+	if (status == 0)
-+		return 0;
-+
-+	/* Check if the node that was found was of the expected type. */
-+	if ((expecttype == FILETYPE_REG) && (foundtype != expecttype))
-+		return 0;
-+	else if ((expecttype == FILETYPE_DIRECTORY)
-+		   && (foundtype != expecttype))
-+		return 0;
-+
-+	return 1;
-+}
-+
-+int ext4fs_open(const char *filename)
-+{
-+	struct ext2fs_node *fdiro = NULL;
-+	int status;
-+	int len;
-+
-+	if (ext4fs_root == NULL)
-+		return -1;
-+
-+	ext4fs_file = NULL;
-+	status = ext4fs_find_file(filename, &ext4fs_root->diropen, &fdiro,
-+				  FILETYPE_REG);
-+	if (status == 0)
-+		goto fail;
-+
-+	if (!fdiro->inode_read) {
-+		status = ext4fs_read_inode(fdiro->data, fdiro->ino,
-+					   &fdiro->inode);
-+		if (status == 0)
-+			goto fail;
-+	}
-+	len = __le32_to_cpu(fdiro->inode.size);
-+	ext4fs_file = fdiro;
-+
-+	return len;
-+ fail:
-+	ext4fs_free_node(fdiro, &ext4fs_root->diropen);
-+
-+	return -1;
-+}
-+
-+int ext4fs_mount(unsigned part_length)
-+{
-+	struct ext2_data *data;
-+	int status;
-+	struct ext_filesystem *fs = get_fs();
-+	data = zalloc(sizeof(struct ext2_data));
-+	if (!data)
-+		return 0;
-+
-+	/* Read the superblock. */
-+	status = ext4fs_devread(1 * 2, 0, sizeof(struct ext2_sblock),
-+				(char *)&data->sblock);
-+
-+	if (status == 0)
-+		goto fail;
-+
-+	/* Make sure this is an ext2 filesystem. */
-+	if (__le16_to_cpu(data->sblock.magic) != EXT2_MAGIC)
-+		goto fail;
-+
-+	if (__le32_to_cpu(data->sblock.revision_level == 0))
-+		fs->inodesz = 128;
-+	else
-+		fs->inodesz = __le16_to_cpu(data->sblock.inode_size);
-+
-+	debug("EXT2 rev %d, inode_size %d\n",
-+	      __le32_to_cpu(data->sblock.revision_level), fs->inodesz);
-+
-+	data->diropen.data = data;
-+	data->diropen.ino = 2;
-+	data->diropen.inode_read = 1;
-+	data->inode = &data->diropen.inode;
-+
-+	status = ext4fs_read_inode(data, 2, data->inode);
-+	if (status == 0)
-+		goto fail;
-+
-+	ext4fs_root = data;
-+
-+	return 1;
-+ fail:
-+	printf("Failed to mount ext2 filesystem...\n");
-+	free(data);
-+	ext4fs_root = NULL;
-+
-+	return 0;
-+}
-diff --git a/fs/ext4/ext4_common.h b/fs/ext4/ext4_common.h
-new file mode 100644
-index 0000000..18e6ad1
---- /dev/null
-+++ b/fs/ext4/ext4_common.h
-@@ -0,0 +1,63 @@
-+/*
-+ * (C) Copyright 2011 - 2012 Samsung Electronics
-+ * EXT4 filesystem implementation in Uboot by
-+ * Uma Shankar <uma.shankar@samsung.com>
-+ * Manjunatha C Achar <a.manjunatha@samsung.com>
-+ *
-+ * ext4ls and ext4load :  based on ext2 ls load support in Uboot.
-+ *
-+ * (C) Copyright 2004
-+ * esd gmbh <www.esd-electronics.com>
-+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
-+ *
-+ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
-+ * GRUB  --  GRand Unified Bootloader
-+ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef __EXT4_COMMON__
-+#define __EXT4_COMMON__
-+#include <ext_common.h>
-+#include <ext4fs.h>
-+#include <malloc.h>
-+#include <asm/errno.h>
-+
-+#define YES		1
-+#define NO		0
-+#define TRUE		1
-+#define FALSE		0
-+#define RECOVER	1
-+#define SCAN		0
-+
-+#define S_IFLNK	0120000		/* symbolic link */
-+#define BLOCK_NO_ONE		1
-+#define SUPERBLOCK_SECTOR	2
-+#define SUPERBLOCK_SIZE	1024
-+#define F_FILE			1
-+
-+#define zalloc(size) calloc(1, size)
-+
-+extern unsigned long part_offset;
-+int ext4fs_read_inode(struct ext2_data *data, int ino,
-+		      struct ext2_inode *inode);
-+int ext4fs_read_file(struct ext2fs_node *node, int pos,
-+		unsigned int len, char *buf);
-+int ext4fs_find_file(const char *path, struct ext2fs_node *rootnode,
-+			struct ext2fs_node **foundnode, int expecttype);
-+int ext4fs_iterate_dir(struct ext2fs_node *dir, char *name,
-+			struct ext2fs_node **fnode, int *ftype);
-+#endif
-diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
-new file mode 100644
-index 0000000..7933769
---- /dev/null
-+++ b/fs/ext4/ext4fs.c
-@@ -0,0 +1,228 @@
-+/*
-+ * (C) Copyright 2011 - 2012 Samsung Electronics
-+ * EXT4 filesystem implementation in Uboot by
-+ * Uma Shankar <uma.shankar@samsung.com>
-+ * Manjunatha C Achar <a.manjunatha@samsung.com>
-+ *
-+ * ext4ls and ext4load : Based on ext2 ls and load support in Uboot.
-+ *		       Ext4 read optimization taken from Open-Moko
-+ *		       Qi bootloader
-+ *
-+ * (C) Copyright 2004
-+ * esd gmbh <www.esd-electronics.com>
-+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
-+ *
-+ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
-+ * GRUB  --  GRand Unified Bootloader
-+ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <common.h>
-+#include <malloc.h>
-+#include <ext_common.h>
-+#include <ext4fs.h>
-+#include <linux/stat.h>
-+#include <linux/time.h>
-+#include <asm/byteorder.h>
-+#include "ext4_common.h"
-+
-+int ext4fs_symlinknest;
-+block_dev_desc_t *ext4_dev_desc;
-+
-+struct ext_filesystem *get_fs(void)
-+{
-+	if (ext4_dev_desc == NULL || ext4_dev_desc->priv == NULL)
-+		printf("Invalid Input Arguments %s\n", __func__);
-+
-+	return ext4_dev_desc->priv;
-+}
-+
-+int init_fs(block_dev_desc_t *dev_desc)
-+{
-+	struct ext_filesystem *fs;
-+	if (dev_desc == NULL) {
-+		printf("Invalid Input Arguments %s\n", __func__);
-+		return -EINVAL;
-+	}
-+
-+	fs = zalloc(sizeof(struct ext_filesystem));
-+	if (fs == NULL) {
-+		printf("malloc failed: %s\n", __func__);
-+		return -ENOMEM;
-+	}
-+
-+	fs->dev_desc = dev_desc;
-+	dev_desc->priv = fs;
-+
-+	return 0;
-+}
-+
-+void deinit_fs(block_dev_desc_t *dev_desc)
-+{
-+	if (dev_desc == NULL) {
-+		printf("Invalid Input Arguments %s\n", __func__);
-+		return;
-+	}
-+	free(dev_desc->priv);
-+	dev_desc->priv = NULL;
-+}
-+
-+void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot)
-+{
-+	if ((node != &ext4fs_root->diropen) && (node != currroot))
-+		free(node);
-+}
-+
-+/*
-+ * Taken from openmoko-kernel mailing list: By Andy green
-+ * Optimized read file API : collects and defers contiguous sector
-+ * reads into one potentially more efficient larger sequential read action
-+ */
-+int ext4fs_read_file(struct ext2fs_node *node, int pos,
-+		     unsigned int len, char *buf)
-+{
-+	int i;
-+	int blockcnt;
-+	int log2blocksize = LOG2_EXT2_BLOCK_SIZE(node->data);
-+	int blocksize = 1 << (log2blocksize + DISK_SECTOR_BITS);
-+	unsigned int filesize = __le32_to_cpu(node->inode.size);
-+	int previous_block_number = -1;
-+	int delayed_start = 0;
-+	int delayed_extent = 0;
-+	int delayed_skipfirst = 0;
-+	int delayed_next = 0;
-+	char *delayed_buf = NULL;
-+	short status;
-+
-+	/* Adjust len so it we can't read past the end of the file. */
-+	if (len > filesize)
-+		len = filesize;
-+
-+	blockcnt = ((len + pos) + blocksize - 1) / blocksize;
-+
-+	for (i = pos / blocksize; i < blockcnt; i++) {
-+		int blknr;
-+		int blockoff = pos % blocksize;
-+		int blockend = blocksize;
-+		int skipfirst = 0;
-+		blknr = read_allocated_block(&(node->inode), i);
-+		if (blknr < 0)
-+			return -1;
-+
-+		blknr = blknr << log2blocksize;
-+
-+		/* Last block.  */
-+		if (i == blockcnt - 1) {
-+			blockend = (len + pos) % blocksize;
-+
-+			/* The last portion is exactly blocksize. */
-+			if (!blockend)
-+				blockend = blocksize;
-+		}
-+
-+		/* First block. */
-+		if (i == pos / blocksize) {
-+			skipfirst = blockoff;
-+			blockend -= skipfirst;
-+		}
-+		if (blknr) {
-+			int status;
-+
-+			if (previous_block_number != -1) {
-+				if (delayed_next == blknr) {
-+					delayed_extent += blockend;
-+					delayed_next += blockend >> SECTOR_BITS;
-+				} else {	/* spill */
-+					status = ext4fs_devread(delayed_start,
-+							delayed_skipfirst,
-+							delayed_extent,
-+							delayed_buf);
-+					if (status == 0)
-+						return -1;
-+					previous_block_number = blknr;
-+					delayed_start = blknr;
-+					delayed_extent = blockend;
-+					delayed_skipfirst = skipfirst;
-+					delayed_buf = buf;
-+					delayed_next = blknr +
-+					    (blockend >> SECTOR_BITS);
-+				}
-+			} else {
-+				previous_block_number = blknr;
-+				delayed_start = blknr;
-+				delayed_extent = blockend;
-+				delayed_skipfirst = skipfirst;
-+				delayed_buf = buf;
-+				delayed_next = blknr +
-+				    (blockend >> SECTOR_BITS);
-+			}
-+		} else {
-+			if (previous_block_number != -1) {
-+				/* spill */
-+				status = ext4fs_devread(delayed_start,
-+							delayed_skipfirst,
-+							delayed_extent,
-+							delayed_buf);
-+				if (status == 0)
-+					return -1;
-+				previous_block_number = -1;
-+			}
-+			memset(buf, 0, blocksize - skipfirst);
-+		}
-+		buf += blocksize - skipfirst;
-+	}
-+	if (previous_block_number != -1) {
-+		/* spill */
-+		status = ext4fs_devread(delayed_start,
-+					delayed_skipfirst, delayed_extent,
-+					delayed_buf);
-+		if (status == 0)
-+			return -1;
-+		previous_block_number = -1;
-+	}
-+
-+	return len;
-+}
-+
-+int ext4fs_ls(const char *dirname)
-+{
-+	struct ext2fs_node *dirnode;
-+	int status;
-+
-+	if (dirname == NULL)
-+		return 0;
-+
-+	status = ext4fs_find_file(dirname, &ext4fs_root->diropen, &dirnode,
-+				  FILETYPE_DIRECTORY);
-+	if (status != 1) {
-+		printf("** Can not find directory. **\n");
-+		return 1;
-+	}
-+
-+	ext4fs_iterate_dir(dirnode, NULL, NULL, NULL);
-+	ext4fs_free_node(dirnode, &ext4fs_root->diropen);
-+
-+	return 0;
-+}
-+
-+int ext4fs_read(char *buf, unsigned len)
-+{
-+	if (ext4fs_root == NULL || ext4fs_file == NULL)
-+		return 0;
-+
-+	return ext4fs_read_file(ext4fs_file, 0, len, buf);
-+}
-diff --git a/include/ext4fs.h b/include/ext4fs.h
-new file mode 100644
-index 0000000..58a6a1d
---- /dev/null
-+++ b/include/ext4fs.h
-@@ -0,0 +1,132 @@
-+/*
-+ * (C) Copyright 2011 - 2012 Samsung Electronics
-+ * EXT4 filesystem implementation in Uboot by
-+ * Uma Shankar <uma.shankar@samsung.com>
-+ * Manjunatha C Achar <a.manjunatha@samsung.com>
-+ *
-+ * Ext4 Extent data structures are taken from  original ext4 fs code
-+ * as found in the linux kernel.
-+ *
-+ * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com
-+ * Written by Alex Tomas <alex@clusterfs.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef __EXT4__
-+#define __EXT4__
-+#include <ext_common.h>
-+
-+#define EXT4_EXTENTS_FL		0x00080000 /* Inode uses extents */
-+#define EXT4_EXT_MAGIC			0xf30a
-+#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM	0x0010
-+#define EXT4_FEATURE_INCOMPAT_EXTENTS	0x0040
-+#define EXT4_INDIRECT_BLOCKS		12
-+
-+#define EXT4_BG_INODE_UNINIT		0x0001
-+#define EXT4_BG_BLOCK_UNINIT		0x0002
-+#define EXT4_BG_INODE_ZEROED		0x0004
-+
-+/*
-+ * ext4_inode has i_block array (60 bytes total).
-+ * The first 12 bytes store ext4_extent_header;
-+ * the remainder stores an array of ext4_extent.
-+ */
-+
-+/*
-+ * This is the extent on-disk structure.
-+ * It's used at the bottom of the tree.
-+ */
-+struct ext4_extent {
-+	__le32	ee_block;	/* first logical block extent covers */
-+	__le16	ee_len;		/* number of blocks covered by extent */
-+	__le16	ee_start_hi;	/* high 16 bits of physical block */
-+	__le32	ee_start_lo;	/* low 32 bits of physical block */
-+};
-+
-+/*
-+ * This is index on-disk structure.
-+ * It's used at all the levels except the bottom.
-+ */
-+struct ext4_extent_idx {
-+	__le32	ei_block;	/* index covers logical blocks from 'block' */
-+	__le32	ei_leaf_lo;	/* pointer to the physical block of the next *
-+				 * level. leaf or next index could be there */
-+	__le16	ei_leaf_hi;	/* high 16 bits of physical block */
-+	__u16	ei_unused;
-+};
-+
-+/* Each block (leaves and indexes), even inode-stored has header. */
-+struct ext4_extent_header {
-+	__le16	eh_magic;	/* probably will support different formats */
-+	__le16	eh_entries;	/* number of valid entries */
-+	__le16	eh_max;		/* capacity of store in entries */
-+	__le16	eh_depth;	/* has tree real underlying blocks? */
-+	__le32	eh_generation;	/* generation of the tree */
-+};
-+
-+struct ext_filesystem {
-+	/* Total Sector of partition */
-+	uint64_t total_sect;
-+	/* Block size  of partition */
-+	uint32_t blksz;
-+	/* Inode size of partition */
-+	uint32_t inodesz;
-+	/* Sectors per Block */
-+	uint32_t sect_perblk;
-+	/* Group Descriptor Block Number */
-+	uint32_t gdtable_blkno;
-+	/* Total block groups of partition */
-+	uint32_t no_blkgrp;
-+	/* No of blocks required for bgdtable */
-+	uint32_t no_blk_pergdt;
-+	/* Superblock */
-+	struct ext2_sblock *sb;
-+	/* Block group descritpor table */
-+	struct ext2_block_group *gd;
-+	char *gdtable;
-+
-+	/* Block Bitmap Related */
-+	unsigned char **blk_bmaps;
-+	long int curr_blkno;
-+	uint16_t first_pass_bbmap;
-+
-+	/* Inode Bitmap Related */
-+	unsigned char **inode_bmaps;
-+	int curr_inode_no;
-+	uint16_t first_pass_ibmap;
-+
-+	/* Journal Related */
-+
-+	/* Block Device Descriptor */
-+	block_dev_desc_t *dev_desc;
-+};
-+
-+extern block_dev_desc_t *ext4_dev_desc;
-+extern struct ext2_data *ext4fs_root;
-+extern struct ext2fs_node *ext4fs_file;
-+
-+struct ext_filesystem *get_fs(void);
-+int init_fs(block_dev_desc_t *dev_desc);
-+void deinit_fs(block_dev_desc_t *dev_desc);
-+int ext4fs_open(const char *filename);
-+int ext4fs_read(char *buf, unsigned len);
-+int ext4fs_mount(unsigned part_length);
-+void ext4fs_close(void);
-+int ext4fs_ls(const char *dirname);
-+void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot);
-+int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf);
-+int ext4fs_set_blk_dev(block_dev_desc_t *rbdd, int part);
-+long int read_allocated_block(struct ext2_inode *inode, int fileblock);
-+#endif
-diff --git a/include/ext_common.h b/include/ext_common.h
-new file mode 100644
-index 0000000..5d48021
---- /dev/null
-+++ b/include/ext_common.h
-@@ -0,0 +1,188 @@
-+/*
-+ * (C) Copyright 2011 - 2012 Samsung Electronics
-+ * EXT4 filesystem implementation in Uboot by
-+ * Uma Shankar <uma.shankar@samsung.com>
-+ * Manjunatha C Achar <a.manjunatha@samsung.com>
-+ *
-+ * Data structures and headers for ext4 support have been taken from
-+ * ext2 ls load support in Uboot
-+ *
-+ * (C) Copyright 2004
-+ * esd gmbh <www.esd-electronics.com>
-+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
-+ *
-+ * based on code from grub2 fs/ext2.c and fs/fshelp.c by
-+ * GRUB  --  GRand Unified Bootloader
-+ * Copyright (C) 2003, 2004  Free Software Foundation, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef __EXT_COMMON__
-+#define __EXT_COMMON__
-+
-+#define SECTOR_SIZE		0x200
-+#define SECTOR_BITS		9
-+
-+/* Magic value used to identify an ext2 filesystem.  */
-+#define	EXT2_MAGIC		0xEF53
-+/* Amount of indirect blocks in an inode.  */
-+#define INDIRECT_BLOCKS		12
-+/* Maximum lenght of a pathname.  */
-+#define EXT2_PATH_MAX			4096
-+/* Maximum nesting of symlinks, used to prevent a loop.  */
-+#define	EXT2_MAX_SYMLINKCNT		8
-+
-+/* Filetype used in directory entry.  */
-+#define	FILETYPE_UNKNOWN		0
-+#define	FILETYPE_REG			1
-+#define	FILETYPE_DIRECTORY		2
-+#define	FILETYPE_SYMLINK		7
-+
-+/* Filetype information as used in inodes.  */
-+#define FILETYPE_INO_MASK		0170000
-+#define FILETYPE_INO_REG		0100000
-+#define FILETYPE_INO_DIRECTORY		0040000
-+#define FILETYPE_INO_SYMLINK		0120000
-+#define EXT2_ROOT_INO			2 /* Root inode */
-+
-+/* Bits used as offset in sector */
-+#define DISK_SECTOR_BITS		9
-+/* The size of an ext2 block in bytes.  */
-+#define EXT2_BLOCK_SIZE(data)	   (1 << LOG2_BLOCK_SIZE(data))
-+
-+/* Log2 size of ext2 block in 512 blocks.  */
-+#define LOG2_EXT2_BLOCK_SIZE(data) (__le32_to_cpu \
-+				(data->sblock.log2_block_size) + 1)
-+
-+/* Log2 size of ext2 block in bytes.  */
-+#define LOG2_BLOCK_SIZE(data)	   (__le32_to_cpu \
-+		(data->sblock.log2_block_size) + 10)
-+#define INODE_SIZE_FILESYSTEM(data)	(__le32_to_cpu \
-+			(data->sblock.inode_size))
-+
-+#define EXT2_FT_DIR	2
-+#define SUCCESS	1
-+
-+/* Macro-instructions used to manage several block sizes  */
-+#define EXT2_MIN_BLOCK_LOG_SIZE	10 /* 1024 */
-+#define EXT2_MAX_BLOCK_LOG_SIZE	16 /* 65536 */
-+#define EXT2_MIN_BLOCK_SIZE		(1 << EXT2_MIN_BLOCK_LOG_SIZE)
-+#define EXT2_MAX_BLOCK_SIZE		(1 << EXT2_MAX_BLOCK_LOG_SIZE)
-+
-+/* The ext2 superblock.  */
-+struct ext2_sblock {
-+	uint32_t total_inodes;
-+	uint32_t total_blocks;
-+	uint32_t reserved_blocks;
-+	uint32_t free_blocks;
-+	uint32_t free_inodes;
-+	uint32_t first_data_block;
-+	uint32_t log2_block_size;
-+	uint32_t log2_fragment_size;
-+	uint32_t blocks_per_group;
-+	uint32_t fragments_per_group;
-+	uint32_t inodes_per_group;
-+	uint32_t mtime;
-+	uint32_t utime;
-+	uint16_t mnt_count;
-+	uint16_t max_mnt_count;
-+	uint16_t magic;
-+	uint16_t fs_state;
-+	uint16_t error_handling;
-+	uint16_t minor_revision_level;
-+	uint32_t lastcheck;
-+	uint32_t checkinterval;
-+	uint32_t creator_os;
-+	uint32_t revision_level;
-+	uint16_t uid_reserved;
-+	uint16_t gid_reserved;
-+	uint32_t first_inode;
-+	uint16_t inode_size;
-+	uint16_t block_group_number;
-+	uint32_t feature_compatibility;
-+	uint32_t feature_incompat;
-+	uint32_t feature_ro_compat;
-+	uint32_t unique_id[4];
-+	char volume_name[16];
-+	char last_mounted_on[64];
-+	uint32_t compression_info;
-+};
-+
-+struct ext2_block_group {
-+	__u32 block_id;	/* Blocks bitmap block */
-+	__u32 inode_id;	/* Inodes bitmap block */
-+	__u32 inode_table_id;	/* Inodes table block */
-+	__u16 free_blocks;	/* Free blocks count */
-+	__u16 free_inodes;	/* Free inodes count */
-+	__u16 used_dir_cnt;	/* Directories count */
-+	__u16 bg_flags;
-+	__u32 bg_reserved[2];
-+	__u16 bg_itable_unused; /* Unused inodes count */
-+	__u16 bg_checksum;	/* crc16(s_uuid+grouo_num+group_desc)*/
-+};
-+
-+/* The ext2 inode. */
-+struct ext2_inode {
-+	uint16_t mode;
-+	uint16_t uid;
-+	uint32_t size;
-+	uint32_t atime;
-+	uint32_t ctime;
-+	uint32_t mtime;
-+	uint32_t dtime;
-+	uint16_t gid;
-+	uint16_t nlinks;
-+	uint32_t blockcnt;	/* Blocks of 512 bytes!! */
-+	uint32_t flags;
-+	uint32_t osd1;
-+	union {
-+		struct datablocks {
-+			uint32_t dir_blocks[INDIRECT_BLOCKS];
-+			uint32_t indir_block;
-+			uint32_t double_indir_block;
-+			uint32_t triple_indir_block;
-+		} blocks;
-+		char symlink[60];
-+	} b;
-+	uint32_t version;
-+	uint32_t acl;
-+	uint32_t dir_acl;
-+	uint32_t fragment_addr;
-+	uint32_t osd2[3];
-+};
-+
-+/* The header of an ext2 directory entry. */
-+struct ext2_dirent {
-+	uint32_t inode;
-+	uint16_t direntlen;
-+	uint8_t namelen;
-+	uint8_t filetype;
-+};
-+
-+struct ext2fs_node {
-+	struct ext2_data *data;
-+	struct ext2_inode inode;
-+	int ino;
-+	int inode_read;
-+};
-+
-+/* Information about a "mounted" ext2 filesystem. */
-+struct ext2_data {
-+	struct ext2_sblock sblock;
-+	struct ext2_inode *inode;
-+	struct ext2fs_node diropen;
-+};
-+#endif
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot/2011.09git/0015-am335x-switch-to-ext4-mode.patch b/recipes-bsp/u-boot/u-boot/2011.09git/0015-am335x-switch-to-ext4-mode.patch
deleted file mode 100644
index 3a93289..0000000
--- a/recipes-bsp/u-boot/u-boot/2011.09git/0015-am335x-switch-to-ext4-mode.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 89f08384d5048059ac0a8ab72b6a7a194513dc64 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 4 Apr 2012 00:06:31 +0200
-Subject: [PATCH 15/15] am335x: switch to ext4 mode
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- include/configs/am335x_evm.h |    6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
-index b2628c5..18d2cac 100755
---- a/include/configs/am335x_evm.h
-+++ b/include/configs/am335x_evm.h
-@@ -76,6 +76,7 @@
- 		"env import -t $loadaddr $filesize\0" \
- 	"mmc_load_uimage=fatload mmc ${mmc_dev}:1 0x80007fc0 ${bootfile}\0" \
- 	"mmc_load_uimage_ext2=ext2load mmc ${mmc_dev}:2 0x80007fc0 /boot/${bootfile}\0" \
-+	"mmc_load_uimage_ext4=ext4load mmc ${mmc_dev}:2 0x80007fc0 /boot/${bootfile}\0" \
- 	"optargs=\0" \
- 	"bootargs_defaults=setenv bootargs " \
- 		"console=${console} " \
-@@ -102,7 +103,7 @@
- 		"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
- 		"ip=dhcp\0" \
- 	"mmc_boot=run mmc_args; " \
--		"run mmc_load_uimage_ext2; " \
-+		"run mmc_load_uimage_ext4; " \
- 		"bootm 0x80007fc0\0" \
- 	"nand_boot=echo Booting from nand ...; " \
- 		"run nand_args; " \
-@@ -136,7 +137,7 @@
- 			"echo Running uenvcmd ...;" \
- 			"run uenvcmd;" \
- 		"fi;" \
--		"if run mmc_load_uimage_ext2; then " \
-+		"if run mmc_load_uimage_ext4; then " \
- 			"run mmc_args;" \
- 			"bootm 0x80007fc0;" \
- 		"fi;" \
-@@ -404,6 +405,7 @@
- #define CONFIG_DOS_PARTITION
- #define CONFIG_CMD_FAT
- #define CONFIG_CMD_EXT2
-+#define CONFIG_CMD_EXT4
- #endif
- 
- /* Unsupported features */
--- 
-1.7.2.5
-
diff --git a/recipes-bsp/u-boot/u-boot_2011.10rc.bb b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
index 48bc618..c4b4ca7 100644
--- a/recipes-bsp/u-boot/u-boot_2011.10rc.bb
+++ b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
@@ -6,32 +6,27 @@ COMPATIBLE_MACHINE = "(ti33x)"
 DEFAULT_PREFERENCE_ti33x = "99"
 
 PV = "2011.09+git"
-PR = "r27"
+PR = "r28"
 
 # SPL build
 UBOOT_BINARY = "u-boot.img"
 UBOOT_IMAGE = "u-boot-${MACHINE}-${PV}-${PR}.img"
 UBOOT_SYMLINK = "u-boot-${MACHINE}.img"
 
-SRC_URI = "git://arago-project.org/git/projects/u-boot-am33x.git;protocol=git;branch=int_am335xpsp_04.06.00.01-v2011.09-for-sdk-05.03.00.00 \
-           file://2011.09git/0001-am335x_evm-only-do-in-kernel-dhcp-when-using-NFS-use.patch \
-           file://2011.09git/0002-am335x_evm-boot-kernel-from-boot-in-ext2-3-filesyste.patch \
-           file://2011.09git/0003-am335x_evm-set-bootdelay-to-1.patch \
-           file://2011.09git/0004-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch \
-           file://2011.09git/0005-am335x-Change-mmc_load_uimage-to-load-at-a-fixed-add.patch \
-           file://2011.09git/0006-am335x-evm-Fix-bone-pmic-shut-down-over-USB-power.patch \
-           file://2011.09git/0007-am335x_evm-switch-to-ext4.patch \
-           file://2011.09git/0008-HACK-am335x-evm-turn-d-cache-on-globally-turn-it-off.patch \
-           file://2011.09git/0009-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch \
-           file://2011.09git/0001-ddr_defs-change-DDR-timings-for-15x15-EVM.patch \
-           file://2011.09git/0011-ext2load-increase-read-speed.patch \
-           file://2011.09git/0012-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch \
-           file://2011.09git/0013-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch \
-           file://2011.09git/0014-ext4fs-ls-load-support.patch \
-           file://2011.09git/0015-am335x-switch-to-ext4-mode.patch \
+SRC_URI = "git://arago-project.org/git/projects/u-boot-am33x.git;protocol=git;branch=master \
+           file://2011.09git/0001-am335x_evm-add-option-to-boot-kernel-from-boot-in-ex.patch \
+           file://2011.09git/0002-am335x_evm-set-bootdelay-to-1.patch \
+           file://2011.09git/0003-am335x-evm-make-MMC-rootfs-RO-on-boot-so-fsck-works.patch \
+           file://2011.09git/0004-am335x_evm-switch-to-ext4.patch \
+           file://2011.09git/0005-am335x-evm-enable-i2c2-pinmux-for-beaglebone.patch \
+           file://2011.09git/0006-ext2load-increase-read-speed.patch \
+           file://2011.09git/0007-am335x-evm-fix-ext2load-and-specify-partition-for-bo.patch \
+           file://2011.09git/0008-am335x-evm-load-uImage-from-boot-instead-of-VFAT.patch \
+           file://2011.09git/0009-ext4fs-ls-load-support.patch \
+           file://2011.09git/0010-am335x-switch-to-ext4-mode.patch \
           "
 
-SRCREV = "f63b270e47f62f4d1a05b2001357e215966c6f5a"
+SRCREV = "ec687252299796639ff9bcb981804fbec7b445a4"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb"
 
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 09/12] linux-ti33x-psp 3.2: add fixed for cssp, fbset and OPP50
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (6 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 08/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 10/12] linux-ti33x-psp 3.2: enable more tracing features for beaglebone Koen Kooi
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 ...disable-OPP-for-275MHz-due-to-silicon-err.patch |   28 -
 ...add-support-for-QuickLogic-Camera-interfa.patch | 1612 ++++++++++++++++++++
 ...-fb-calculate-pixel-clock-period-for-the-.patch |   73 +
 ...-improve-GPMC-bus-timings-for-camera-cape.patch |  105 ++
 ...disable-UYVY-VYUY-and-YVYU-modes-in-camer.patch |   39 +
 ...error-handling-for-DMA-completion-in-cssp.patch |   49 +
 ...rata-OPP50-on-MPU-domain-is-not-supported.patch |   52 +
 recipes-kernel/linux/linux-ti33x-psp_3.2.bb        |    8 +-
 8 files changed, 1936 insertions(+), 30 deletions(-)
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-beaglebone-disable-OPP-for-275MHz-due-to-silicon-err.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-video-da8xx-fb-calculate-pixel-clock-period-for-the-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0076-beaglebone-improve-GPMC-bus-timings-for-camera-cape.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0077-beaglebone-disable-UYVY-VYUY-and-YVYU-modes-in-camer.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0078-beaglebone-error-handling-for-DMA-completion-in-cssp.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0079-AM335X-errata-OPP50-on-MPU-domain-is-not-supported.patch

diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-beaglebone-disable-OPP-for-275MHz-due-to-silicon-err.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-beaglebone-disable-OPP-for-275MHz-due-to-silicon-err.patch
deleted file mode 100644
index aae97bb..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-beaglebone-disable-OPP-for-275MHz-due-to-silicon-err.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 954d199a0e9aaa4d7dbc7215cea0225cd3ffe186 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Mon, 28 May 2012 18:54:57 +0200
-Subject: [PATCH 66/68] beaglebone: disable OPP for 275MHz due to silicon
- errata
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-am335xevm.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index da6020b..58c2754 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -2975,6 +2975,9 @@ static void tps65217_init(int evm_id, int profile)
- 		return;
- 	}
- 
-+	pr_info("Disabling OPP for 275MHz due to silicon errata");
-+	opp_disable(mpu_dev, 275000000);
-+
- 	if (!(val & TPS65217_STATUS_ACPWR)) {
- 		/* If powered by USB then disable OPP120 and OPPTURBO */
- 		pr_info("Maximum current provided by the USB port is 500mA"
--- 
-1.7.7.6
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
new file mode 100644
index 0000000..48ac34b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
@@ -0,0 +1,1612 @@
+From cf35e6b861c3c7d4d9c9db1557ba27b5578e8aa2 Mon Sep 17 00:00:00 2001
+From: Dan Aizenstros <daizenstros@quicklogic.com>
+Date: Fri, 29 Jun 2012 13:57:49 -0400
+Subject: [PATCH] beaglebone: add support for QuickLogic Camera interface on
+ camera cape
+
+Signed-off-by: Dan Aizenstros <daizenstros@quicklogic.com>
+---
+ arch/arm/mach-omap2/board-am335xevm.c         |  205 ++++-
+ arch/arm/mach-omap2/devices.c                 |    2 +-
+ arch/arm/plat-omap/include/plat/dma-33xx.h    |    1 +
+ drivers/media/video/Kconfig                   |    7 +
+ drivers/media/video/Makefile                  |    2 +
+ drivers/media/video/cssp_camera/Makefile      |    3 +
+ drivers/media/video/cssp_camera/cssp_camera.c | 1119 +++++++++++++++++++++++++
+ drivers/media/video/cssp_camera/cssp_camera.h |  148 ++++
+ 8 files changed, 1478 insertions(+), 9 deletions(-)
+ create mode 100644 drivers/media/video/cssp_camera/Makefile
+ create mode 100644 drivers/media/video/cssp_camera/cssp_camera.c
+ create mode 100644 drivers/media/video/cssp_camera/cssp_camera.h
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index dc78b4a..1680612 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -66,6 +66,10 @@
+ #include <plat/mmc.h>
+ #include <plat/emif.h>
+ #include <plat/nand.h>
++#include <plat/dma-33xx.h>
++
++#include <media/soc_camera.h>
++#include <media/mt9t112.h>
+ 
+ #include "board-flash.h"
+ #include "cpuidle33xx.h"
+@@ -804,6 +808,42 @@ static struct pinmux_config i2c1_pin_mux[] = {
+ 	{NULL, 0},
+ };
+ 
++/* Pin mux for GPMC bus */
++static struct pinmux_config gpmc_pin_mux[] = {
++	{"gpmc_ad0.gpmc_ad0",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad1.gpmc_ad1",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad2.gpmc_ad2",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad3.gpmc_ad3",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad4.gpmc_ad4",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad5.gpmc_ad5",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad6.gpmc_ad6",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad7.gpmc_ad7",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad8.gpmc_ad8",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad9.gpmc_ad9",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad10.gpmc_ad10",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad11.gpmc_ad11",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad12.gpmc_ad12",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad13.gpmc_ad13",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad14.gpmc_ad14",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad15.gpmc_ad15",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_wpn.gpmc_wpn",	  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_csn1.gpmc_csn1",	  OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_advn_ale.gpmc_advn_ale",  OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_oen_ren.gpmc_oen_ren",	 OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_wen.gpmc_wen",     OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_ben0_cle.gpmc_ben0_cle",	 OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_clk.gpmc_clk",	 OMAP_MUX_MODE0 | AM33XX_PIN_INPUT},
++	{"ecap0_in_pwm0_out.xdma_event_intr2", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT}, // DMAREQ
++	{NULL, 0},
++};
++
++static struct pinmux_config camera_cape_pin_mux[] = {
++	{"spi0_d1.gpio0_4",    OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT },		// QL CSSP and Camera Sensor Reset
++	{"spi0_cs0.gpio0_5",   OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP },	// 1V8 and 2V8 Power Enable
++	{NULL, 0},
++};
++
+ static struct pinmux_config i2c2_pin_mux[] = {
+ 	{"uart1_ctsn.i2c2_sda",    OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
+ 					AM33XX_PIN_INPUT_PULLUP},
+@@ -1803,6 +1843,156 @@ static void dvileds_init(int evm_id, int profile )
+ 		pr_err("failed to register BeagleBone DVI cape LEDS\n");
+ }
+ 
++static struct resource cssp_camera_resources[] = {
++	{
++		.name = "gpmc_phys_mem_slot",
++		.flags = IORESOURCE_MEM,
++	},
++};
++
++static struct mt9t112_camera_info mt9t111_cam_info = {
++	/* divider calculated for 32Mhz CAM_MCLK */
++	.divider = {
++		.m = 24, .n = 1,
++		.p1 = 0, .p2 = 7, .p3 = 0, .p4 = 11, .p5 = 15, .p6 = 7, .p7 = 0,
++	},
++};
++
++static struct soc_camera_link mt9t111_camera_link =  {
++	.priv = &mt9t111_cam_info,
++	.i2c_adapter_id = 3,
++};
++
++static struct i2c_board_info i2c_camera = {
++	I2C_BOARD_INFO("mt9t112", 0x3c),
++	.platform_data = &mt9t111_camera_link,
++};
++
++struct cssp_cam_platform_data {
++	struct i2c_board_info *cam_i2c_board_info;
++	const char *cam_clk_name;
++	int dma_ch;
++	int cssp_reset_pin;
++};
++
++static struct cssp_cam_platform_data cssp_cam_platform_data = {
++	.cam_i2c_board_info = &i2c_camera,
++	.cam_clk_name = "clkout2_ck",
++	.dma_ch = AM33XX_DMA_XDMA_EVENT_INTR2,
++	.cssp_reset_pin = GPIO_TO_PIN(0, 4),
++};
++
++static struct platform_device cssp_camera = {
++	.name  = "cssp-camera",
++	.id    = -1,
++	.dev   = {
++		.platform_data = &cssp_cam_platform_data,
++	},
++	.num_resources = sizeof(cssp_camera_resources) / sizeof(cssp_camera_resources[0]),
++	.resource = cssp_camera_resources,
++};
++
++static struct gpmc_timings cssp_timings = {
++	/* Minimum clock period for synchronous mode (in picoseconds) */
++	.sync_clk = 10000,
++
++	.cs_on = 0,
++	.cs_rd_off = 23 * 10,		/* Read deassertion time */
++	.cs_wr_off = 23 * 10,		/* Write deassertion time */
++
++	/* ADV signal timings corresponding to GPMC_CONFIG3 */
++	.adv_on = 0,			/* Assertion time */
++	.adv_rd_off = 2 * 10,		/* Read deassertion time */
++	.adv_wr_off = 2 * 10,		/* Write deassertion time */
++
++	/* WE signals timings corresponding to GPMC_CONFIG4 */
++	.we_on = 3 * 10,		/* WE assertion time */
++	.we_off = 23 * 10,		/* WE deassertion time */
++
++	/* OE signals timings corresponding to GPMC_CONFIG4 */
++	.oe_on = 3 * 10,		/* OE assertion time */
++	.oe_off = 23 * 10,		/* OE deassertion time */
++
++	/* Access time and cycle time timings corresponding to GPMC_CONFIG5 */
++	.page_burst_access = 1 * 10,	/* Multiple access word delay */
++	.access = 7 * 10,		/* Start-cycle to first data valid delay */
++	.rd_cycle = 23 * 10,		/* Total read cycle time */
++	.wr_cycle = 23 * 10,		/* Total write cycle time */
++
++	/* The following are only on OMAP3430 */
++	.wr_access = 7 * 10,		/* WRACCESSTIME */
++	.wr_data_mux_bus = 3 * 10,	/* WRDATAONADMUXBUS */
++};
++
++static int gpmc_cssp_init(void)
++{
++	int cs = 1; /* Chip Select on GPMC bus */
++	int val;
++	long unsigned int cssp_gpmc_mem_base_phys;
++
++	if (gpmc_cs_request(cs, SZ_16M, &cssp_gpmc_mem_base_phys) < 0) {
++			printk(KERN_ERR "[cssp_cam platform init]: gpmc_cs_request failed\n");
++			return -1;
++	}
++
++	cssp_camera_resources[0].start = cssp_gpmc_mem_base_phys;
++	cssp_camera_resources[0].end = cssp_gpmc_mem_base_phys + 0x1ffff;
++
++	if (gpmc_cs_configure(cs, GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NOR) < 0) {
++			printk(KERN_ERR "[cssp_cam platform init]: gpmc_cs_configure failed\n");
++			return -1;
++	}
++
++	val = GPMC_CONFIG1_READMULTIPLE_SUPP;
++	val |= GPMC_CONFIG1_READTYPE_SYNC;
++	val |= GPMC_CONFIG1_WRITETYPE_SYNC;
++	val |= GPMC_CONFIG1_CLKACTIVATIONTIME(1);
++	val |= GPMC_CONFIG1_PAGE_LEN(2);
++	val |= GPMC_CONFIG1_DEVICESIZE_16;
++	val |= GPMC_CONFIG1_DEVICETYPE_NOR;
++	val |= GPMC_CONFIG1_MUXADDDATA;
++	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, val);
++
++	if (gpmc_cs_set_timings(cs, &cssp_timings) < 0) {
++		printk(KERN_ERR "Failed gpmc_cs_set_timings for QuickLogic CAMIF device\n");
++		goto free;
++	}
++
++	val = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG6);
++	val &= 0xe0f0f030;
++	val |= 0x07030481;
++	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG6, val);
++
++	printk(KERN_INFO "gpmc_cssp_init for QuickLogic CAMIF device succeeded\n");
++
++	return 0;
++
++free:
++	gpmc_cs_free(cs);
++
++	printk(KERN_ERR "Could not initialize QuickLogic CAMIF device\n");
++
++	return -1;
++}
++
++static void cssp_gpmc_init(void)
++{
++	struct gpmc_devices_info gpmc_device[2] = {
++			{ NULL, GPMC_DEVICE_NOR },
++		};
++
++	setup_pin_mux(camera_cape_pin_mux);
++	setup_pin_mux(gpmc_pin_mux);
++
++	omap_init_gpmc(gpmc_device, sizeof(gpmc_device));
++	gpmc_cssp_init();
++
++	platform_device_register(&cssp_camera);
++
++	printk(KERN_INFO "[cssp_cam platform init]: cssp_gpmc_init: DONE\n");
++}
++
++
+ static void lcd3leds_init(int evm_id, int profile )
+ {
+ 	int err;
+@@ -2851,6 +3041,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 	if (!strncmp("BB-BONE-CAM-01", cape_config.partnumber, 14)) {
+ 		pr_info("BeagleBone cape: recognized Camera cape\n");
+ 		beaglebone_w1gpio_free = 0;
++		cssp_gpmc_init();
+ 	}
+ 
+ 	goto out2;
+@@ -3762,15 +3953,13 @@ static struct pinmux_config clkout2_pin_mux[] = {
+ 
+ static void __init clkout2_enable(void)
+ {
+-	struct clk *ck_32;
+-
+-	ck_32 = clk_get(NULL, "clkout2_ck");
+-	if (IS_ERR(ck_32)) {
+-		pr_err("Cannot clk_get ck_32\n");
+-		return;
+-	}
++	void __iomem *base;
++	unsigned int val;
+ 
+-	clk_enable(ck_32);
++	base = ioremap(0x44E00700, SZ_4K);
++	val = (5 << 3) | (3 << 0); //32 MHz
++	writel(val, base);
++	iounmap(base);
+ 
+ 	setup_pin_mux(clkout2_pin_mux);
+ }
+diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
+index 41c9b0f..3ef045e 100644
+--- a/arch/arm/mach-omap2/devices.c
++++ b/arch/arm/mach-omap2/devices.c
+@@ -968,7 +968,7 @@ static struct event_to_channel_map am33xx_xbar_event_mapping[] = {
+ 	{27, -1},
+ 	{28, -1},
+ 	{29, -1},
+-	{30, -1},
++	{30, 20},	/* XDMA_EVENT_INTR2 */
+ 	{31, -1},
+ 	{-1, -1}
+ };
+diff --git a/arch/arm/plat-omap/include/plat/dma-33xx.h b/arch/arm/plat-omap/include/plat/dma-33xx.h
+index bebdaa7..ded00aa 100644
+--- a/arch/arm/plat-omap/include/plat/dma-33xx.h
++++ b/arch/arm/plat-omap/include/plat/dma-33xx.h
+@@ -83,5 +83,6 @@
+ #define AM33XX_DMA_PWMSS2_EPW				63
+ #define AM33XX_DMA_MMCHS2_W				64	/* xBar */
+ #define AM33XX_DMA_MMCHS2_R				65	/* xBar */
++#define AM33XX_DMA_XDMA_EVENT_INTR2			93	/* xBar */
+ 
+ #endif
+diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
+index b303a3f..a31723f 100644
+--- a/drivers/media/video/Kconfig
++++ b/drivers/media/video/Kconfig
+@@ -1002,6 +1002,13 @@ config VIDEO_S5P_MIPI_CSIS
+ 
+ source "drivers/media/video/s5p-tv/Kconfig"
+ 
++config VIDEO_QL_CAMIF
++	tristate "QuickLogic Camera Interface support (EXPERIMENTAL)"
++	depends on VIDEO_DEV && SOC_CAMERA && SOC_OMAPAM33XX && EXPERIMENTAL
++	select VIDEOBUF2_DMA_CONTIG
++	---help---
++	  This is a v4l2 driver for the QuickLogic CAMIF controller.
++
+ #
+ # USB Multimedia device configuration
+ #
+diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
+index 117f9c4..af7af692 100644
+--- a/drivers/media/video/Makefile
++++ b/drivers/media/video/Makefile
+@@ -195,6 +195,8 @@ obj-y	+= davinci/
+ 
+ obj-$(CONFIG_ARCH_OMAP)	+= omap/
+ 
++obj-$(CONFIG_VIDEO_QL_CAMIF)	+= cssp_camera/
++
+ ccflags-y += -Idrivers/media/dvb/dvb-core
+ ccflags-y += -Idrivers/media/dvb/frontends
+ ccflags-y += -Idrivers/media/common/tuners
+diff --git a/drivers/media/video/cssp_camera/Makefile b/drivers/media/video/cssp_camera/Makefile
+new file mode 100644
+index 0000000..d85a84e
+--- /dev/null
++++ b/drivers/media/video/cssp_camera/Makefile
+@@ -0,0 +1,3 @@
++# cssp_camera
++
++obj-$(CONFIG_VIDEO_QL_CAMIF) += cssp_camera.o
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.c b/drivers/media/video/cssp_camera/cssp_camera.c
+new file mode 100644
+index 0000000..39aa003
+--- /dev/null
++++ b/drivers/media/video/cssp_camera/cssp_camera.c
+@@ -0,0 +1,1119 @@
++/*
++ * cssp-camera driver
++ *
++ * Based on Vivi driver
++ *
++ * Copyright (C) 2012 QuickLogic Corp.
++ *
++ * Developed for QuickLogic by:
++ * Damian Eppel <damian.eppel@teleca.com>
++ * Przemek Szewczyk <przemek.szewczyk@teleca.com>
++ * Dan Aizenstros <daizenstros@quicklogic.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/gpio.h>
++#include <linux/i2c.h>
++#include <linux/delay.h>
++#include <linux/spinlock.h>
++#include <linux/dma-mapping.h>
++#include <linux/interrupt.h>
++#include <mach/edma.h>
++#include <linux/clk.h>
++// V4L2 Interface *********************
++#include <media/soc_camera.h>
++#include <media/v4l2-mediabus.h>
++#include <media/videobuf2-dma-contig.h>
++#include <media/v4l2-ioctl.h>
++#include <media/v4l2-event.h>
++//*************************************
++#include "cssp_camera.h"
++
++
++/*
++ * ---------------------------------------------------------------------------
++ *  QuickLoigc Camera Interface registers
++ * ---------------------------------------------------------------------------
++ */
++
++#define REG_MODE		0x00000
++#define REG_DATA		0x10000
++
++/* MODE bit shifts */
++#define FMT_2X8_EN		BIT(15) /* Enable 2 byte format on CAMIF bus (0 - 10 bit, 1 - 16 bit 2x8) */
++#define PCLK_POL		BIT(14) /* PCLK polarity (0 - rising edge, 1 - falling edge */
++#define HS_EN			BIT(13) /* High speed bus (0 =< 50 MHz, 1 > 50 MHz) */
++#define ENABLE			BIT(12)
++
++
++static struct cssp_cam_fmt formats[] = {
++	{
++		.name	= "4:2:2, packed, YUYV",
++		.fourcc	= V4L2_PIX_FMT_YUYV,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_YUYV8_2X8,
++	},
++	{
++		.name	= "4:2:2, packed, UYVY",
++		.fourcc	= V4L2_PIX_FMT_UYVY,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_UYVY8_2X8,
++	},
++	{
++		.name	= "4:2:2, packed, VYUY",
++		.fourcc	= V4L2_PIX_FMT_VYUY,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_VYUY8_2X8,
++	},
++	{
++		.name	= "4:2:2, packed, YVYU",
++		.fourcc	= V4L2_PIX_FMT_YVYU,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_YVYU8_2X8,
++	},
++	{
++		.name	= "RGB565 (LE)",
++		.fourcc	= V4L2_PIX_FMT_RGB565,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_RGB565_2X8_LE,
++	},
++	{
++		.name	= "RGB555 (LE)",
++		.fourcc	= V4L2_PIX_FMT_RGB555,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
++	},
++};
++
++
++/***************************************************************************/
++
++
++static int configure_gpio(int nr, int val, const char *name)
++{
++	unsigned long flags = val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
++	int ret;
++	if (!gpio_is_valid(nr))
++		return 0;
++	ret = gpio_request_one(nr, flags, name);
++	if (!ret)
++		gpio_export(nr, 0);
++	return ret;
++}
++
++static int reset_cssp(struct cssp_cam_dev *cam)
++{
++	struct platform_device *pdev = cam->pdev;
++	int err;
++
++	cam->reset_pin = ((struct cssp_cam_platform_data *)pdev->dev.platform_data)->gpio_reset_pin;
++
++	err = configure_gpio(cam->reset_pin, 0, "cssp_reset");
++	if (err) {
++		printk(KERN_ERR "[%s]: failed to configure cssp reset pin\n", pdev->name);
++		return -1;
++	}
++
++	mdelay(1);
++
++	gpio_direction_output(cam->reset_pin, 1);
++
++	return err;
++}
++
++static int trigger_dma_transfer_to_buf(struct cssp_cam_dev *dev, struct vb2_buffer *vb)
++{
++	dma_addr_t dma_buf = vb2_dma_contig_plane_dma_addr(vb, 0);
++
++	if (!dma_buf) {
++		/* Is this possible? Release the vb2_buffer with an error here, */
++		vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
++		dev->current_vb = NULL;
++		return -ENOMEM;
++	}
++
++	dev->dma_tr_params.dst = dma_buf;
++
++	// Enable DMA
++	edma_write_slot(dev->dma_ch, &dev->dma_tr_params);
++
++	// Enable data capture
++	dev->mode |= ENABLE;
++	writew(dev->mode, dev->reg_base_virt + REG_MODE);
++	readw(dev->reg_base_virt + REG_MODE);
++
++	dev->current_vb = vb;
++
++	return 0;
++}
++
++static void dequeue_buffer_for_dma(struct cssp_cam_dev *dev)
++{
++	struct cssp_cam_dmaqueue *dma_q = &dev->vidq;
++	unsigned long flags = 0;
++
++	spin_lock_irqsave(&dev->slock, flags);
++	if (!list_empty(&dma_q->active)) {
++		struct cssp_cam_buffer *buf;
++
++		buf = list_entry(dma_q->active.next, struct cssp_cam_buffer, list);
++		list_del(&buf->list);
++		spin_unlock_irqrestore(&dev->slock, flags);
++
++		buf->fmt = dev->fmt;
++
++		trigger_dma_transfer_to_buf(dev, &buf->vb);
++	} else {
++		spin_unlock_irqrestore(&dev->slock, flags);
++	}
++}
++
++static void dma_callback(unsigned lch, u16 ch_status, void *data)
++{
++	struct cssp_cam_dev *dev = (struct cssp_cam_dev *)data;
++
++	// Disable data capture
++	dev->mode &= ~ENABLE;
++	writew(dev->mode, dev->reg_base_virt + REG_MODE);
++	readw(dev->reg_base_virt + REG_MODE);
++
++	if (ch_status == DMA_COMPLETE) {
++		struct vb2_buffer *vb = dev->current_vb;
++		struct timeval ts;
++
++		vb->v4l2_buf.field = dev->field;
++		dev->field_count++;
++		vb->v4l2_buf.sequence = dev->field_count >> 1;
++		do_gettimeofday(&ts);
++		vb->v4l2_buf.timestamp = ts;
++		vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
++		dev->current_vb = NULL;
++		dev->frame_cnt++;
++
++		/* check if we have new buffer queued */
++		dequeue_buffer_for_dma(dev);
++	} else {
++		printk(KERN_ERR "[cssp_camera]: EDMA error (ch_status = %d)\n", ch_status);
++		/* we got a missed interrupt so just start a new DMA with the existing buffer */
++		if (dev->current_vb != NULL)
++			trigger_dma_transfer_to_buf(dev, dev->current_vb);
++	}
++}
++
++static int configure_edma(struct cssp_cam_dev *cam)
++{
++	struct platform_device *pdev = cam->pdev;
++	int dma_channel;
++
++	dma_channel = ((struct cssp_cam_platform_data *)pdev->dev.platform_data)->dma_ch;
++
++	pdev->dev.dma_mask = &cam->dma_mask;
++
++	pdev->dev.coherent_dma_mask = (u32)~0;
++
++	if (dma_set_mask(&pdev->dev, (u32)~0)) {
++		printk(KERN_ERR "[%s]: failed setting mask for DMA\n", pdev->name);
++		return -1;
++	}
++
++	cam->dma_ch = edma_alloc_channel(dma_channel, dma_callback, cam, EVENTQ_1);
++	if (cam->dma_ch < 0) {
++		printk(KERN_ERR "[%s]: allocating channel for DMA failed\n", pdev->name);
++		return -EBUSY;
++	} else {
++		printk(KERN_ERR "[%s]: allocating channel for DMA succeeded, chan=%d\n", pdev->name, cam->dma_ch);
++	}
++
++	cam->dma_tr_params.opt = TCINTEN | TCC(cam->dma_ch);
++	cam->dma_tr_params.src = cam->reg_base_phys + REG_DATA;
++	cam->dma_tr_params.a_b_cnt = ACNT(BYTES_PER_DMA_EVT) | BCNT((VGA_WIDTH * BYTES_PER_PIXEL) / BYTES_PER_DMA_EVT);
++	cam->dma_tr_params.src_dst_bidx = SRCBIDX(0) | DSTBIDX(BYTES_PER_DMA_EVT);
++	cam->dma_tr_params.link_bcntrld = BCNTRLD((VGA_WIDTH * BYTES_PER_PIXEL) / BYTES_PER_DMA_EVT) | LINK(0xffff);
++	cam->dma_tr_params.src_dst_cidx = SRCCIDX(0) | DSTCIDX(BYTES_PER_DMA_EVT);
++	cam->dma_tr_params.ccnt = CCNT(VGA_HEIGHT);
++
++	return 0;
++}
++
++static int configure_cssp(struct cssp_cam_dev *cam)
++{
++	struct platform_device *pdev = cam->pdev;
++	int ret = 0;
++	unsigned int val;
++	struct resource *res;
++
++	ret = reset_cssp(cam);
++	if (ret)
++		return ret;
++
++	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "gpmc_phys_mem_slot");
++	if (res == NULL) {
++		printk(KERN_ERR "[%s]: failed to get gpmc_phys_mem_slot resource\n", pdev->name);
++		return -ENODEV;
++	}
++
++	/*
++	 * Request the region.
++	 */
++	if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
++		return -EBUSY;
++	}
++
++	cam->reg_base_phys = res->start;
++	cam->reg_size = resource_size(res);
++
++	cam->reg_base_virt = (unsigned int)ioremap(cam->reg_base_phys, cam->reg_size);
++	if (cam->reg_base_virt == 0) {
++		printk(KERN_ERR "[%s]: ioremap of registers region failed\n", pdev->name);
++		release_mem_region(cam->reg_base_phys, cam->reg_size);
++		return -ENOMEM;
++	}
++
++	printk(KERN_INFO "[%s]: reg_base_virt = 0x%x\n", pdev->name, cam->reg_base_virt);
++
++	val = readw(cam->reg_base_virt + REG_MODE);
++	printk(KERN_INFO "[%s]: reading register address=0x0 returns 0x%x\n", pdev->name, val);
++
++	return 0;
++}
++
++static int configure_camera_sensor(struct cssp_cam_dev *cam)
++{
++	struct i2c_board_info *info = cam->camera_board_info;
++	struct i2c_client *client;
++	struct i2c_adapter *adapter;
++	struct v4l2_subdev *subdev;
++	struct v4l2_mbus_framefmt f_format = {
++			.width = VGA_WIDTH,
++			.height = VGA_HEIGHT,
++			.code = V4L2_MBUS_FMT_YUYV8_2X8,
++			.colorspace = V4L2_COLORSPACE_JPEG,
++	};
++
++	/* Enable the clock just for the time of loading the camera driver and disable after that */
++	/* It is going to be be re-enabled later, when camera will be in use */
++	clk_enable(cam->camera_clk);
++	udelay(5); // let the clock stabilize
++
++	adapter	= i2c_get_adapter(((struct soc_camera_link *)(info->platform_data))->i2c_adapter_id);
++	if (!adapter) {
++		printk(KERN_INFO "[%s]: failed to get adapter...\n", __func__);
++		return -ENODEV;
++	}
++
++	client = i2c_new_device(adapter, info);
++	i2c_put_adapter(adapter);
++
++	if (client == NULL) {
++		return -ENODEV;
++	}
++
++	printk(KERN_INFO "[%s]: client's name is: %s\n", __func__, client->name);
++
++	subdev = (struct v4l2_subdev *)i2c_get_clientdata(client);
++	if (subdev == NULL) {
++		i2c_unregister_device(client);
++		return -ENODEV;
++	}
++
++	cam->subdev = subdev;
++
++	v4l2_subdev_call(subdev, video, s_mbus_fmt, &f_format);
++
++	clk_disable(cam->camera_clk);
++
++	return 0;
++}
++
++static int start_camera_sensor(struct cssp_cam_dev *cam)
++{
++	clk_enable(cam->camera_clk);
++	udelay(5); /* let the clock stabilize */
++
++	v4l2_subdev_call(cam->subdev, video, s_stream, 1);
++
++	return 0;
++}
++
++static void stop_camera_sensor(struct cssp_cam_dev *cam)
++{
++	v4l2_subdev_call(cam->subdev, video, s_stream, 0);
++
++	clk_disable(cam->camera_clk);
++
++	return;
++}
++
++
++/************************************************
++ * 				Video4Linux2
++ */
++
++static struct cssp_cam_fmt *get_format(struct v4l2_format *f)
++{
++	struct cssp_cam_fmt *fmt;
++	unsigned int k;
++
++	for (k = 0; k < ARRAY_SIZE(formats); k++) {
++		fmt = &formats[k];
++		if (fmt->fourcc == f->fmt.pix.pixelformat)
++			break;
++	}
++
++	if (k == ARRAY_SIZE(formats))
++		return NULL;
++
++	return &formats[k];
++}
++
++
++/* ------------------------------------------------------------------
++	Videobuf operations
++   ------------------------------------------------------------------*/
++
++static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
++				unsigned int *nbuffers, unsigned int *nplanes,
++				unsigned int sizes[], void *alloc_ctxs[])
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	unsigned long size;
++
++	size = dev->sizeimage;
++
++	if (0 == *nbuffers)
++		*nbuffers = 32;
++
++	while (size * *nbuffers > vid_limit * 1024 * 1024)
++		(*nbuffers)--;
++
++	*nplanes = 1;
++
++	sizes[0] = size;
++
++	alloc_ctxs[0] = dev->dma_cont_ctx;
++
++	dprintk(dev, 1, "%s, count=%d, size=%ld\n", __func__, *nbuffers, size);
++
++	return 0;
++}
++
++static int buffer_init(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++
++	BUG_ON(NULL == dev->fmt);
++
++	/*
++	 * This callback is called once per buffer, after its allocation.
++	 *
++	 * Vivi does not allow changing format during streaming, but it is
++	 * possible to do so when streaming is paused (i.e. in streamoff state).
++	 * Buffers however are not freed when going into streamoff and so
++	 * buffer size verification has to be done in buffer_prepare, on each
++	 * qbuf.
++	 * It would be best to move verification code here to buf_init and
++	 * s_fmt though.
++	 */
++
++	return 0;
++}
++
++static int buffer_prepare(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	struct cssp_cam_buffer *buf = container_of(vb, struct cssp_cam_buffer, vb);
++	unsigned long size;
++
++	dprintk(dev, 1, "%s, field=%d\n", __func__, vb->v4l2_buf.field);
++
++	BUG_ON(NULL == dev->fmt);
++
++	/*
++	 * Theses properties only change when queue is idle, see s_fmt.
++	 * The below checks should not be performed here, on each
++	 * buffer_prepare (i.e. on each qbuf). Most of the code in this function
++	 * should thus be moved to buffer_init and s_fmt.
++	 */
++	if (dev->width  < 48 || dev->width  > MAX_WIDTH ||
++	    dev->height < 32 || dev->height > MAX_HEIGHT)
++		return -EINVAL;
++
++	size = dev->sizeimage;
++	if (vb2_plane_size(vb, 0) < size) {
++		dprintk(dev, 1, "%s data will not fit into plane (%lu < %lu)\n",
++				__func__, vb2_plane_size(vb, 0), size);
++		return -EINVAL;
++	}
++
++	vb2_set_plane_payload(&buf->vb, 0, size);
++
++	buf->fmt = dev->fmt;
++
++	return 0;
++}
++
++static int buffer_finish(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	dprintk(dev, 1, "%s\n", __func__);
++	return 0;
++}
++
++static void buffer_cleanup(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	dprintk(dev, 1, "%s\n", __func__);
++}
++
++static void buffer_queue(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	struct cssp_cam_buffer *buf = container_of(vb, struct cssp_cam_buffer, vb);
++	struct cssp_cam_dmaqueue *vidq = &dev->vidq;
++	unsigned long flags = 0;
++
++	dprintk(dev, 1, "%s\n", __func__);
++
++	if (dev->streaming_started && !dev->current_vb) {
++		trigger_dma_transfer_to_buf(dev, &buf->vb);
++	} else {
++		spin_lock_irqsave(&dev->slock, flags);
++		list_add_tail(&buf->list, &vidq->active);
++		spin_unlock_irqrestore(&dev->slock, flags);
++	}
++}
++
++static int start_streaming(struct vb2_queue *vq, unsigned int count)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	int ret;
++
++	dprintk(dev, 1, "%s\n", __func__);
++
++	ret = start_camera_sensor(dev);
++	if (ret != 0)
++		return ret;
++
++	// Enable DMA
++	edma_start(dev->dma_ch);
++
++	dev->streaming_started = 1;
++
++	/* check if we have new buffer queued */
++	dequeue_buffer_for_dma(dev);
++
++	return 0;
++}
++
++/* abort streaming and wait for last buffer */
++static int stop_streaming(struct vb2_queue *vq)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	struct cssp_cam_dmaqueue *dma_q = &dev->vidq;
++
++	dprintk(dev, 1, "%s\n", __func__);
++
++	// Disable DMA
++	edma_stop(dev->dma_ch);
++
++	// Disable data capture
++	dev->mode &= ~ENABLE;
++	writew(dev->mode, dev->reg_base_virt + REG_MODE);
++	readw(dev->reg_base_virt + REG_MODE);
++
++	stop_camera_sensor(dev);
++
++	dev->streaming_started = 0;
++
++	/* Release all active buffers */
++	while (!list_empty(&dma_q->active)) {
++		struct cssp_cam_buffer *buf;
++
++		buf = list_entry(dma_q->active.next, struct cssp_cam_buffer, list);
++		list_del(&buf->list);
++		vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
++		dprintk(dev, 2, "[%p/%d] done\n", buf, buf->vb.v4l2_buf.index);
++	}
++
++	dev->current_vb = NULL;
++
++	return 0;
++}
++
++static void cssp_cam_lock(struct vb2_queue *vq)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	mutex_lock(&dev->mutex);
++}
++
++static void cssp_cam_unlock(struct vb2_queue *vq)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	mutex_unlock(&dev->mutex);
++}
++
++static struct vb2_ops cssp_cam_video_qops = {
++	.queue_setup		= queue_setup,
++	.buf_init		= buffer_init,
++	.buf_prepare		= buffer_prepare,
++	.buf_finish		= buffer_finish,
++	.buf_cleanup		= buffer_cleanup,
++	.buf_queue		= buffer_queue,
++	.start_streaming	= start_streaming,
++	.stop_streaming		= stop_streaming,
++	.wait_prepare		= cssp_cam_unlock,
++	.wait_finish		= cssp_cam_lock,
++};
++
++
++/* ------------------------------------------------------------------
++	IOCTL vidioc handling
++   ------------------------------------------------------------------*/
++
++static int vidioc_querycap(struct file *file, void *priv,
++					struct v4l2_capability *cap)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	strcpy(cap->driver, "cssp_camera");
++	strcpy(cap->card, "cssp_camera");
++	strlcpy(cap->bus_info, dev->v4l2_dev.name, sizeof(cap->bus_info));
++	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
++			    V4L2_CAP_READWRITE;
++	return 0;
++}
++
++static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
++					struct v4l2_fmtdesc *f)
++{
++	struct cssp_cam_fmt *fmt;
++
++	if (f->index >= ARRAY_SIZE(formats))
++		return -EINVAL;
++
++	fmt = &formats[f->index];
++
++	strlcpy(f->description, fmt->name, sizeof(f->description));
++	f->pixelformat = fmt->fourcc;
++	return 0;
++}
++
++static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
++					struct v4l2_format *f)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	f->fmt.pix.width	= dev->width;
++	f->fmt.pix.height	= dev->height;
++	f->fmt.pix.field	= dev->field;
++	f->fmt.pix.pixelformat	= dev->fmt->fourcc;
++	f->fmt.pix.bytesperline	= dev->bytesperline;
++	f->fmt.pix.sizeimage	= dev->sizeimage;
++	f->fmt.pix.colorspace	= dev->colorspace;
++
++	return 0;
++}
++
++static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
++			struct v4l2_format *f)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	struct cssp_cam_fmt *fmt;
++	struct v4l2_mbus_framefmt mbus_fmt;
++	struct v4l2_pix_format *pix = &f->fmt.pix;
++
++	fmt = get_format(f);
++	if (!fmt) {
++		dprintk(dev, 1, "Fourcc format (0x%08x) invalid.\n",
++			f->fmt.pix.pixelformat);
++		return -EINVAL;
++	}
++
++	v4l2_fill_mbus_format(&mbus_fmt, pix, fmt->code);
++	v4l2_subdev_call(dev->subdev, video, try_mbus_fmt, &mbus_fmt);
++	v4l2_fill_pix_format(pix, &mbus_fmt);
++	pix->bytesperline = (pix->width * fmt->depth) >> 3;
++	pix->sizeimage = pix->height * pix->bytesperline;
++
++	return 0;
++}
++
++static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
++					struct v4l2_format *f)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	struct vb2_queue *q = &dev->vb_vidq;
++	struct v4l2_pix_format *pix = &f->fmt.pix;
++	struct v4l2_mbus_framefmt mbus_fmt;
++
++	int ret = vidioc_try_fmt_vid_cap(file, priv, f);
++	if (ret < 0)
++		return ret;
++
++	if (vb2_is_streaming(q)) {
++		dprintk(dev, 1, "%s device busy\n", __func__);
++		return -EBUSY;
++	}
++
++	dev->fmt = get_format(f);
++	dev->width = f->fmt.pix.width;
++	dev->height = f->fmt.pix.height;
++	dev->field = f->fmt.pix.field;
++	dev->colorspace = f->fmt.pix.colorspace;
++	dev->bytesperline = f->fmt.pix.bytesperline;
++	dev->sizeimage = f->fmt.pix.sizeimage;
++
++	/* Set the sensor into the new format */
++	v4l2_fill_mbus_format(&mbus_fmt, pix, dev->fmt->code);
++	v4l2_subdev_call(dev->subdev, video, s_mbus_fmt, &mbus_fmt);
++
++	/* Set the EDMA for the new resolution */
++	dev->dma_tr_params.a_b_cnt = ACNT(BYTES_PER_DMA_EVT) | BCNT(dev->bytesperline / BYTES_PER_DMA_EVT);
++	dev->dma_tr_params.link_bcntrld = BCNTRLD(dev->bytesperline / BYTES_PER_DMA_EVT) | LINK(0xffff);
++	dev->dma_tr_params.ccnt = CCNT(dev->height);
++
++	return 0;
++}
++
++static int vidioc_reqbufs(struct file *file, void *priv,
++			  struct v4l2_requestbuffers *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_reqbufs(&dev->vb_vidq, p);
++}
++
++static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_querybuf(&dev->vb_vidq, p);
++}
++
++static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_qbuf(&dev->vb_vidq, p);
++}
++
++static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_dqbuf(&dev->vb_vidq, p, file->f_flags & O_NONBLOCK);
++}
++
++static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_streamon(&dev->vb_vidq, i);
++}
++
++static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_streamoff(&dev->vb_vidq, i);
++}
++
++static int vidioc_log_status(struct file *file, void *priv)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	v4l2_ctrl_handler_log_status(&dev->ctrl_handler, dev->v4l2_dev.name);
++	return 0;
++}
++
++static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
++{
++	return 0;
++}
++
++/* only one input in this sample driver */
++static int vidioc_enum_input(struct file *file, void *priv,
++				struct v4l2_input *inp)
++{
++	return -EINVAL;
++
++	inp->type = V4L2_INPUT_TYPE_CAMERA;
++	inp->std = V4L2_STD_525_60;
++	sprintf(inp->name, "Camera %u", inp->index);
++	return 0;
++}
++
++static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	*i = dev->input;
++
++	return 0;
++}
++
++static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	return -EINVAL;
++
++	if (i == dev->input)
++		return 0;
++
++	dev->input = i;
++
++	return 0;
++}
++
++static int vidioc_subscribe_event(struct v4l2_fh *fh,
++				struct v4l2_event_subscription *sub)
++{
++	switch (sub->type) {
++	case V4L2_EVENT_CTRL:
++		return v4l2_event_subscribe(fh, sub, 0);
++	default:
++		return -EINVAL;
++	}
++}
++
++static const struct v4l2_ioctl_ops cssp_cam_ioctl_ops = {
++	.vidioc_querycap		= vidioc_querycap,
++	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid_cap,
++	.vidioc_g_fmt_vid_cap		= vidioc_g_fmt_vid_cap,
++	.vidioc_try_fmt_vid_cap		= vidioc_try_fmt_vid_cap,
++	.vidioc_s_fmt_vid_cap		= vidioc_s_fmt_vid_cap,
++	.vidioc_reqbufs			= vidioc_reqbufs,
++	.vidioc_querybuf		= vidioc_querybuf,
++	.vidioc_qbuf			= vidioc_qbuf,
++	.vidioc_dqbuf			= vidioc_dqbuf,
++	.vidioc_s_std			= vidioc_s_std,
++	.vidioc_enum_input		= vidioc_enum_input,
++	.vidioc_g_input			= vidioc_g_input,
++	.vidioc_s_input			= vidioc_s_input,
++	.vidioc_streamon		= vidioc_streamon,
++	.vidioc_streamoff		= vidioc_streamoff,
++	.vidioc_log_status		= vidioc_log_status,
++	.vidioc_subscribe_event		= vidioc_subscribe_event,
++	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
++};
++
++
++/* ------------------------------------------------------------------
++	File operations
++   ------------------------------------------------------------------*/
++
++static unsigned int video_poll(struct file *file, struct poll_table_struct *wait)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	struct v4l2_fh *fh = file->private_data;
++	struct vb2_queue *q = &dev->vb_vidq;
++	unsigned int res;
++
++	dprintk(dev, 1, "%s\n", __func__);
++	res = vb2_poll(q, file, wait);
++	if (v4l2_event_pending(fh))
++		res |= POLLPRI;
++	else
++		poll_wait(file, &fh->wait, wait);
++	return res;
++}
++
++static int video_mmap(struct file *file, struct vm_area_struct *vma)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	int ret;
++
++	dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
++
++	ret = vb2_mmap(&dev->vb_vidq, vma);
++	dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
++		(unsigned long)vma->vm_start,
++		(unsigned long)vma->vm_end - (unsigned long)vma->vm_start,
++		ret);
++	return ret;
++}
++
++static ssize_t video_read(struct file *file, char __user *buf, size_t size, loff_t *offset)
++{
++	struct cssp_cam_dev *cam_dev = video_drvdata(file);
++
++	dprintk(cam_dev, 1, "read called\n");
++	return vb2_read(&cam_dev->vb_vidq, buf, size, offset, file->f_flags & O_NONBLOCK);
++}
++
++static int video_close(struct file *file)
++{
++	struct video_device *vdev = video_devdata(file);
++	struct cssp_cam_dev *cam_dev = video_drvdata(file);
++
++	dprintk(cam_dev, 1, "close called (dev=%s), file %p\n",
++		video_device_node_name(vdev), file);
++
++	if (v4l2_fh_is_singular_file(file))
++		vb2_queue_release(&cam_dev->vb_vidq);
++	return v4l2_fh_release(file);
++}
++
++static const struct v4l2_file_operations cssp_cam_fops = {
++	.owner		= THIS_MODULE,
++	.open		= v4l2_fh_open,
++	.release	= video_close,
++	.read		= video_read,
++	.poll		= video_poll,
++	.unlocked_ioctl	= video_ioctl2,
++	.mmap		= video_mmap,
++};
++
++
++/* ------------------------------------------------------------------
++	Driver initialization
++   ------------------------------------------------------------------*/
++
++static struct video_device cssp_cam_template = {
++	.name		= "cssp_camera",
++	.fops		= &cssp_cam_fops,
++	.ioctl_ops	= &cssp_cam_ioctl_ops,
++	.minor		= -1,
++	.release	= video_device_release,
++	.tvnorms	= V4L2_STD_525_60,
++	.current_norm	= V4L2_STD_NTSC_M,
++};
++
++static int __init  video_probe(struct cssp_cam_dev *cam_dev)
++{
++	struct video_device *vfd;
++	struct v4l2_ctrl_handler *hdl;
++	struct vb2_queue *q;
++	int ret = 0;
++
++	snprintf(cam_dev->v4l2_dev.name, sizeof(cam_dev->v4l2_dev.name),
++			"%s-%03d", "cssp_camera", 0);
++	ret = v4l2_device_register(NULL, &cam_dev->v4l2_dev);
++	if (ret)
++		goto free_dev;
++
++	cam_dev->fmt = &formats[0];
++	cam_dev->width = VGA_WIDTH;
++	cam_dev->height = VGA_HEIGHT;
++	cam_dev->sizeimage = VGA_WIDTH * VGA_HEIGHT * BYTES_PER_PIXEL;
++	hdl = &cam_dev->ctrl_handler;
++	v4l2_ctrl_handler_init(hdl, 0);
++
++	if (hdl->error) {
++		ret = hdl->error;
++		goto unreg_dev;
++	}
++	cam_dev->v4l2_dev.ctrl_handler = hdl;
++
++	/* initialize locks */
++	spin_lock_init(&cam_dev->slock);
++
++	/* initialize queue */
++	q = &cam_dev->vb_vidq;
++	memset(q, 0, sizeof(cam_dev->vb_vidq));
++	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++	q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
++	q->drv_priv = cam_dev;
++	q->buf_struct_size = sizeof(struct cssp_cam_buffer);
++	q->ops = &cssp_cam_video_qops;
++	q->mem_ops = &vb2_dma_contig_memops;
++
++	vb2_queue_init(q);
++
++	mutex_init(&cam_dev->mutex);
++
++	/* init video dma queues */
++	INIT_LIST_HEAD(&cam_dev->vidq.active);
++
++	ret = -ENOMEM;
++	vfd = video_device_alloc();
++	if (!vfd)
++		goto unreg_dev;
++
++	*vfd = cssp_cam_template;
++	vfd->debug = debug;
++	vfd->v4l2_dev = &cam_dev->v4l2_dev;
++	set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
++
++	/*
++	 * Provide a mutex to v4l2 core. It will be used to protect
++	 * all fops and v4l2 ioctls.
++	 */
++	vfd->lock = &cam_dev->mutex;
++
++	ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
++	if (ret < 0)
++		goto rel_vdev;
++
++	video_set_drvdata(vfd, cam_dev);
++
++	if (video_nr != -1)
++		video_nr++;
++
++	cam_dev->vdev = vfd;
++	v4l2_info(&cam_dev->v4l2_dev, "V4L2 device registered as %s\n",
++	video_device_node_name(vfd));
++
++	return 0;
++
++rel_vdev:
++	video_device_release(vfd);
++unreg_dev:
++	v4l2_ctrl_handler_free(hdl);
++	v4l2_device_unregister(&cam_dev->v4l2_dev);
++free_dev:
++	return ret;
++}
++
++static int video_remove(struct cssp_cam_dev *cam_dev)
++{
++	if (cam_dev->dma_cont_ctx != NULL)
++		vb2_dma_contig_cleanup_ctx(cam_dev->dma_cont_ctx);
++
++	v4l2_info(&cam_dev->v4l2_dev, "unregistering %s\n",
++			video_device_node_name(cam_dev->vdev));
++	video_unregister_device(cam_dev->vdev);
++	v4l2_device_unregister(&cam_dev->v4l2_dev);
++	v4l2_ctrl_handler_free(&cam_dev->ctrl_handler);
++
++	return 0;
++}
++
++static int __init  cssp_cam_probe(struct platform_device *pdev)
++{
++	struct cssp_cam_dev *cam_dev;
++	int ret = 0;
++	struct cssp_cam_platform_data *cssp_cam_platform_data;
++
++	cssp_cam_platform_data = (struct cssp_cam_platform_data *) pdev->dev.platform_data;
++	if (cssp_cam_platform_data == NULL) {
++		printk(KERN_ERR "[%s]: missing platform data\n", pdev->name);
++		return -ENODEV;
++	}
++
++	if (cssp_cam_platform_data->cam_i2c_board_info == NULL) {
++		printk(KERN_ERR "[%s]: missing camera i2c board info\n", pdev->name);
++		return -ENODEV;
++	}
++
++	cam_dev = kzalloc(sizeof(*cam_dev), GFP_KERNEL);
++	if (!cam_dev)
++		return -ENOMEM;
++
++	cam_dev->pdev = pdev;
++	platform_set_drvdata(pdev, cam_dev);
++
++	cam_dev->camera_board_info = cssp_cam_platform_data->cam_i2c_board_info;
++
++	cam_dev->camera_clk = clk_get(&pdev->dev, cssp_cam_platform_data->cam_clk_name);
++	if (IS_ERR(cam_dev->camera_clk)) {
++		ret = PTR_ERR(cam_dev->camera_clk);
++		printk(KERN_ERR "[%s]: cannot clk_get %s\n", pdev->name, cssp_cam_platform_data->cam_clk_name);
++		goto fail0;
++	}
++
++	ret = configure_cssp(cam_dev);
++	if (ret)
++		goto fail1;
++
++	ret = configure_edma(cam_dev);
++	if (ret)
++		goto fail2;
++
++	cam_dev->mode = FMT_2X8_EN | PCLK_POL | HS_EN;
++
++	ret = configure_camera_sensor(cam_dev);
++	if (ret) {
++		printk(KERN_ERR "[%s]: camera sensor configuration failed\n", pdev->name);
++		goto fail3;
++	}
++
++	cam_dev->dma_cont_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
++	if (IS_ERR(cam_dev->dma_cont_ctx)) {
++		ret = PTR_ERR(cam_dev->dma_cont_ctx);
++		goto fail3;
++	}
++
++	ret = video_probe(cam_dev);
++	if (ret)
++		goto fail4;
++
++	return ret;
++
++fail4:
++	vb2_dma_contig_cleanup_ctx(cam_dev->dma_cont_ctx);
++
++fail3:
++	edma_free_channel(cam_dev->dma_ch);
++
++fail2:
++	gpio_free(cam_dev->reset_pin);
++	iounmap((void *)cam_dev->reg_base_virt);
++	release_mem_region(cam_dev->reg_base_phys, cam_dev->reg_size);
++
++fail1:
++	clk_put(cam_dev->camera_clk);
++
++fail0:
++	kfree(cam_dev);
++
++	return ret;
++}
++
++static int cssp_cam_remove(struct platform_device *pdev)
++{
++	struct cssp_cam_dev *cam = platform_get_drvdata(pdev);
++
++	iounmap((void *)cam->reg_base_virt);
++
++	release_mem_region(cam->reg_base_phys, cam->reg_size);
++
++	gpio_free(cam->reset_pin);
++
++	edma_free_channel(cam->dma_ch);
++
++	video_remove(cam);
++
++	clk_put(cam->camera_clk);
++
++	kfree(cam);
++
++	printk(KERN_INFO "[%s]: removed\n", pdev->name);
++
++	return 0;
++}
++
++
++static struct platform_driver cssp_cam_driver = {
++	.probe		= cssp_cam_probe,
++	.remove		= __devexit_p(cssp_cam_remove),
++	.driver		= {
++		.name	= "cssp-camera",
++		.owner	= THIS_MODULE,
++	},
++};
++
++
++static int __init cssp_cam_init(void)
++{
++	return platform_driver_register(&cssp_cam_driver);
++}
++
++static void __exit cssp_cam_exit(void)
++{
++	platform_driver_unregister(&cssp_cam_driver);
++}
++
++
++module_init(cssp_cam_init);
++module_exit(cssp_cam_exit);
++
++/*
++ * Macros sets license, author and description
++ */
++MODULE_LICENSE("GPLv2");
++MODULE_AUTHOR("Dan Aizenstros, Damian Eppel, Przemek Szewczyk");
++MODULE_DESCRIPTION("QuickLogic Camera Interface driver");
++
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.h b/drivers/media/video/cssp_camera/cssp_camera.h
+new file mode 100644
+index 0000000..d018ca1
+--- /dev/null
++++ b/drivers/media/video/cssp_camera/cssp_camera.h
+@@ -0,0 +1,148 @@
++/*
++ * cssp-camera driver
++ *
++ * Based on Vivi driver
++ *
++ * Copyright (C) 2012 QuickLogic Corp.
++ *
++ * Developed for QuickLogic by:
++ * Damian Eppel <damian.eppel@teleca.com>
++ * Przemek Szewczyk <przemek.szewczyk@teleca.com>
++ * Dan Aizenstros <daizenstros@quicklogic.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#ifndef CSSP_CAMERA_H
++#define CSSP_CAMERA_H
++
++
++static unsigned video_nr = -1;
++module_param(video_nr, uint, 0644);
++MODULE_PARM_DESC(video_nr, "videoX start number, -1 is autodetect");
++
++static unsigned debug;
++module_param(debug, uint, 0644);
++MODULE_PARM_DESC(debug, "activates debug info");
++
++static unsigned int vid_limit = 1;
++module_param(vid_limit, uint, 0644);
++MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
++
++#define dprintk(dev, level, fmt, arg...) \
++	v4l2_dbg(level, debug, &dev->v4l2_dev, fmt, ## arg)
++
++#define VGA_WIDTH 640
++#define VGA_HEIGHT 480
++
++#define MAX_WIDTH 2048
++#define MAX_HEIGHT 1536
++
++#define VGA_RES (VGA_WIDTH * VGA_HEIGHT)
++#define BYTES_PER_PIXEL 2
++#define BYTES_PER_DMA_EVT 32
++
++/* PaRAM.opt: */
++#define TCC(v) (((v) & 0x3f) << 12)
++/* PaRAM.a_b_cnt: */
++#define ACNT(v) ((v) & 0xffff)
++#define BCNT(v) (((v) & 0xffff) << 16)
++/* PaRAM.src_dst_bidx: */
++#define SRCBIDX(v) ((v) & 0xffff)
++#define DSTBIDX(v) (((v) & 0xffff) << 16)
++/* PaRAM.link_bcntrld: */
++#define LINK(v) ((v) & 0xffff)
++#define BCNTRLD(v) (((v) & 0xffff) << 16)
++/* PaRAM.src_dst_cidx: */
++#define SRCCIDX(v) ((v) & 0xffff)
++#define DSTCIDX(v) (((v) & 0xffff) << 16)
++/* PaRAM.ccnt: */
++#define CCNT(v) ((v) & 0xffff)
++
++
++struct cssp_cam_platform_data {
++	struct i2c_board_info *cam_i2c_board_info;
++	const char *cam_clk_name;
++	int dma_ch;
++	int gpio_reset_pin;
++};
++
++
++/* ------------------------------------------------------------------
++	video Basic structures
++   ------------------------------------------------------------------*/
++
++struct cssp_cam_fmt {
++	char	*name;
++	u32	fourcc;          /* v4l2 format id */
++	int	depth;
++	enum v4l2_mbus_pixelcode code;
++};
++
++/* buffer for one video frame */
++struct cssp_cam_buffer {
++	/* common v4l buffer stuff -- must be first */
++	struct vb2_buffer	vb;
++	struct list_head	list;
++	struct cssp_cam_fmt	*fmt;
++};
++
++struct cssp_cam_dmaqueue {
++	struct list_head	active;
++};
++
++struct cssp_cam_dev {
++	struct v4l2_device		v4l2_dev;
++	struct v4l2_ctrl_handler	ctrl_handler;
++	struct v4l2_subdev		*subdev;
++
++	spinlock_t			slock;
++	struct mutex			mutex;
++
++	/* various device info */
++	struct video_device		*vdev;
++	struct platform_device		*pdev;
++
++	struct cssp_cam_dmaqueue	vidq;
++	void				*dma_cont_ctx;
++	int				streaming_started;
++	struct vb2_buffer		*current_vb;
++
++	/* Input Number */
++	int				input;
++
++	/* video capture */
++	struct cssp_cam_fmt		*fmt;
++	u32				width;
++	u32				height;
++	u32				bytesperline;
++	u32				sizeimage;
++	enum v4l2_colorspace		colorspace;
++	struct vb2_queue		vb_vidq;
++	enum v4l2_field			field;
++	unsigned int			field_count;
++
++
++	/* Camera Sensor */
++	struct i2c_board_info		*camera_board_info;
++	struct clk			*camera_clk;
++
++	unsigned int			reg_base_virt;
++	unsigned int			reg_base_phys;
++	resource_size_t			reg_size;
++	u16				mode;
++
++	struct edmacc_param		dma_tr_params;
++	int				dma_ch;
++	u64				dma_mask;
++
++	int				frame_cnt;
++
++	int				reset_pin;
++};
++
++
++#endif /* CSSP_CAMERA_H */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-video-da8xx-fb-calculate-pixel-clock-period-for-the-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-video-da8xx-fb-calculate-pixel-clock-period-for-the-.patch
new file mode 100644
index 0000000..face34b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-video-da8xx-fb-calculate-pixel-clock-period-for-the-.patch
@@ -0,0 +1,73 @@
+From e12d15eadf15f8119729a65ecca79529b4fe3863 Mon Sep 17 00:00:00 2001
+From: "Manjunathappa, Prakash" <prakash.pm@ti.com>
+Date: Wed, 4 Jul 2012 17:10:16 +0530
+Subject: [PATCH 75/79] video:da8xx-fb: calculate pixel clock period for the
+ panel
+
+Patch calculates pixel clock period in pico seconds and updates
+the same in variable screen information structure. fbset utility
+uses this information.
+This patch is from upstream backport, bearing commit id
+12fa8350244d73b6111ec9bc6c2fd5d49fa601b5.
+
+Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
+Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
+Signed-off-by: Patil, Rachna <rachna@ti.com>
+---
+ drivers/video/da8xx-fb.c |   19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
+index 010a8bc..ddc251e 100644
+--- a/drivers/video/da8xx-fb.c
++++ b/drivers/video/da8xx-fb.c
+@@ -37,6 +37,7 @@
+ #include <linux/lcm.h>
+ #include <video/da8xx-fb.h>
+ #include <asm/mach-types.h>
++#include <asm/div64.h>
+ 
+ #define DRIVER_NAME "da8xx_lcdc"
+ 
+@@ -192,7 +193,6 @@ static struct fb_var_screeninfo da8xx_fb_var __devinitdata = {
+ 	.activate = 0,
+ 	.height = -1,
+ 	.width = -1,
+-	.pixclock = 33333,/*Pico Sec*/
+ 	.accel_flags = 0,
+ 	.left_margin = LEFT_MARGIN,
+ 	.right_margin = RIGHT_MARGIN,
+@@ -1267,6 +1267,22 @@ static struct fb_ops da8xx_fb_ops = {
+ 	.fb_blank = cfb_blank,
+ };
+ 
++/* Calculate and return pixel clock period in pico seconds */
++static unsigned int da8xxfb_pixel_clk_period(struct da8xx_fb_par *par)
++{
++	unsigned int lcd_clk, div;
++	unsigned int configured_pix_clk;
++	unsigned long long pix_clk_period_picosec = 1000000000000ULL;
++
++	lcd_clk = clk_get_rate(par->lcdc_clk);
++	div = lcd_clk / par->pxl_clk;
++	configured_pix_clk = (lcd_clk / div);
++
++	do_div(pix_clk_period_picosec, configured_pix_clk);
++
++	return pix_clk_period_picosec;
++}
++
+ static int __devinit fb_probe(struct platform_device *device)
+ {
+ 	struct da8xx_lcdc_platform_data *fb_pdata =
+@@ -1437,6 +1453,7 @@ static int __devinit fb_probe(struct platform_device *device)
+ 
+ 	da8xx_fb_var.hsync_len = lcdc_info->hsw;
+ 	da8xx_fb_var.vsync_len = lcdc_info->vsw;
++	da8xx_fb_var.pixclock = da8xxfb_pixel_clk_period(par);
+ 
+ 	da8xx_fb_var.right_margin = lcdc_info->hfp;
+ 	da8xx_fb_var.left_margin  = lcdc_info->hbp;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0076-beaglebone-improve-GPMC-bus-timings-for-camera-cape.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0076-beaglebone-improve-GPMC-bus-timings-for-camera-cape.patch
new file mode 100644
index 0000000..5997367
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0076-beaglebone-improve-GPMC-bus-timings-for-camera-cape.patch
@@ -0,0 +1,105 @@
+From e81c7627c3d90209271a0f1e7486d0f779f05289 Mon Sep 17 00:00:00 2001
+From: Dan Aizenstros <daizenstros@quicklogic.com>
+Date: Thu, 12 Jul 2012 12:31:08 -0400
+Subject: [PATCH 76/79] beaglebone: improve GPMC bus timings for camera cape
+
+Signed-off-by: Dan Aizenstros <daizenstros@quicklogic.com>
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c         |   13 +++++++------
+ drivers/media/video/cssp_camera/cssp_camera.c |    5 +----
+ drivers/media/video/cssp_camera/cssp_camera.h |    2 +-
+ 3 files changed, 9 insertions(+), 11 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 6b4539e..82020fc 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -1895,9 +1895,10 @@ static struct gpmc_timings cssp_timings = {
+ 	/* Minimum clock period for synchronous mode (in picoseconds) */
+ 	.sync_clk = 10000,
+ 
++	/* CS signal timings corresponding to GPMC_CONFIG2 */
+ 	.cs_on = 0,
+-	.cs_rd_off = 23 * 10,		/* Read deassertion time */
+-	.cs_wr_off = 23 * 10,		/* Write deassertion time */
++	.cs_rd_off = 8 * 10,		/* Read deassertion time */
++	.cs_wr_off = 20 * 10,		/* Write deassertion time */
+ 
+ 	/* ADV signal timings corresponding to GPMC_CONFIG3 */
+ 	.adv_on = 0,			/* Assertion time */
+@@ -1906,17 +1907,17 @@ static struct gpmc_timings cssp_timings = {
+ 
+ 	/* WE signals timings corresponding to GPMC_CONFIG4 */
+ 	.we_on = 3 * 10,		/* WE assertion time */
+-	.we_off = 23 * 10,		/* WE deassertion time */
++	.we_off = 8 * 10,		/* WE deassertion time */
+ 
+ 	/* OE signals timings corresponding to GPMC_CONFIG4 */
+ 	.oe_on = 3 * 10,		/* OE assertion time */
+-	.oe_off = 23 * 10,		/* OE deassertion time */
++	.oe_off = 8 * 10,		/* OE deassertion time */
+ 
+ 	/* Access time and cycle time timings corresponding to GPMC_CONFIG5 */
+ 	.page_burst_access = 1 * 10,	/* Multiple access word delay */
+ 	.access = 7 * 10,		/* Start-cycle to first data valid delay */
+-	.rd_cycle = 23 * 10,		/* Total read cycle time */
+-	.wr_cycle = 23 * 10,		/* Total write cycle time */
++	.rd_cycle = 8 * 10,		/* Total read cycle time */
++	.wr_cycle = 20 * 10,		/* Total write cycle time */
+ 
+ 	/* The following are only on OMAP3430 */
+ 	.wr_access = 7 * 10,		/* WRACCESSTIME */
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.c b/drivers/media/video/cssp_camera/cssp_camera.c
+index 39aa003..34a36d7 100644
+--- a/drivers/media/video/cssp_camera/cssp_camera.c
++++ b/drivers/media/video/cssp_camera/cssp_camera.c
+@@ -147,7 +147,6 @@ static int trigger_dma_transfer_to_buf(struct cssp_cam_dev *dev, struct vb2_buff
+ 	// Enable data capture
+ 	dev->mode |= ENABLE;
+ 	writew(dev->mode, dev->reg_base_virt + REG_MODE);
+-	readw(dev->reg_base_virt + REG_MODE);
+ 
+ 	dev->current_vb = vb;
+ 
+@@ -182,7 +181,6 @@ static void dma_callback(unsigned lch, u16 ch_status, void *data)
+ 	// Disable data capture
+ 	dev->mode &= ~ENABLE;
+ 	writew(dev->mode, dev->reg_base_virt + REG_MODE);
+-	readw(dev->reg_base_virt + REG_MODE);
+ 
+ 	if (ch_status == DMA_COMPLETE) {
+ 		struct vb2_buffer *vb = dev->current_vb;
+@@ -223,7 +221,7 @@ static int configure_edma(struct cssp_cam_dev *cam)
+ 		return -1;
+ 	}
+ 
+-	cam->dma_ch = edma_alloc_channel(dma_channel, dma_callback, cam, EVENTQ_1);
++	cam->dma_ch = edma_alloc_channel(dma_channel, dma_callback, cam, EVENTQ_0);
+ 	if (cam->dma_ch < 0) {
+ 		printk(KERN_ERR "[%s]: allocating channel for DMA failed\n", pdev->name);
+ 		return -EBUSY;
+@@ -526,7 +524,6 @@ static int stop_streaming(struct vb2_queue *vq)
+ 	// Disable data capture
+ 	dev->mode &= ~ENABLE;
+ 	writew(dev->mode, dev->reg_base_virt + REG_MODE);
+-	readw(dev->reg_base_virt + REG_MODE);
+ 
+ 	stop_camera_sensor(dev);
+ 
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.h b/drivers/media/video/cssp_camera/cssp_camera.h
+index d018ca1..8eb5f83 100644
+--- a/drivers/media/video/cssp_camera/cssp_camera.h
++++ b/drivers/media/video/cssp_camera/cssp_camera.h
+@@ -28,7 +28,7 @@ static unsigned debug;
+ module_param(debug, uint, 0644);
+ MODULE_PARM_DESC(debug, "activates debug info");
+ 
+-static unsigned int vid_limit = 1;
++static unsigned int vid_limit = 6;
+ module_param(vid_limit, uint, 0644);
+ MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0077-beaglebone-disable-UYVY-VYUY-and-YVYU-modes-in-camer.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0077-beaglebone-disable-UYVY-VYUY-and-YVYU-modes-in-camer.patch
new file mode 100644
index 0000000..cc82416
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0077-beaglebone-disable-UYVY-VYUY-and-YVYU-modes-in-camer.patch
@@ -0,0 +1,39 @@
+From 850bc72301ae8eae6e9d11a9ec4d64bc683410fe Mon Sep 17 00:00:00 2001
+From: Dan Aizenstros <daizenstros@quicklogic.com>
+Date: Wed, 11 Jul 2012 12:29:29 -0400
+Subject: [PATCH 77/79] beaglebone: disable UYVY, VYUY and YVYU modes in
+ camera_cssp.c
+
+Signed-off-by: Dan Aizenstros <daizenstros@quicklogic.com>
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ drivers/media/video/cssp_camera/cssp_camera.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.c b/drivers/media/video/cssp_camera/cssp_camera.c
+index 34a36d7..acd38ee 100644
+--- a/drivers/media/video/cssp_camera/cssp_camera.c
++++ b/drivers/media/video/cssp_camera/cssp_camera.c
+@@ -60,6 +60,11 @@ static struct cssp_cam_fmt formats[] = {
+ 		.depth	= 16,
+ 		.code	= V4L2_MBUS_FMT_YUYV8_2X8,
+ 	},
++/*
++ * UYVY doesn't work properly. VYUY and YVYU are not tested.
++ * So disable the UYVY, VYUY and YVYU modes for now
++ */
++#if 0
+ 	{
+ 		.name	= "4:2:2, packed, UYVY",
+ 		.fourcc	= V4L2_PIX_FMT_UYVY,
+@@ -78,6 +83,7 @@ static struct cssp_cam_fmt formats[] = {
+ 		.depth	= 16,
+ 		.code	= V4L2_MBUS_FMT_YVYU8_2X8,
+ 	},
++#endif
+ 	{
+ 		.name	= "RGB565 (LE)",
+ 		.fourcc	= V4L2_PIX_FMT_RGB565,
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0078-beaglebone-error-handling-for-DMA-completion-in-cssp.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0078-beaglebone-error-handling-for-DMA-completion-in-cssp.patch
new file mode 100644
index 0000000..cc678ba
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0078-beaglebone-error-handling-for-DMA-completion-in-cssp.patch
@@ -0,0 +1,49 @@
+From 823d8b7b4a1dcfefc7260110a3acada0d1f45695 Mon Sep 17 00:00:00 2001
+From: Dan Aizenstros <daizenstros@quicklogic.com>
+Date: Thu, 12 Jul 2012 16:52:21 -0400
+Subject: [PATCH 78/79] beaglebone: error handling for DMA completion in
+ cssp_camera.c
+
+Signed-off-by: Dan Aizenstros <daizenstros@quicklogic.com>
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ drivers/media/video/cssp_camera/cssp_camera.c |   16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.c b/drivers/media/video/cssp_camera/cssp_camera.c
+index acd38ee..fca199b 100644
+--- a/drivers/media/video/cssp_camera/cssp_camera.c
++++ b/drivers/media/video/cssp_camera/cssp_camera.c
+@@ -191,6 +191,21 @@ static void dma_callback(unsigned lch, u16 ch_status, void *data)
+ 	if (ch_status == DMA_COMPLETE) {
+ 		struct vb2_buffer *vb = dev->current_vb;
+ 		struct timeval ts;
++		struct edmacc_param dma_tr_params;
++
++		edma_read_slot(dev->dma_ch, &dma_tr_params);
++		if ((dma_tr_params.opt != 0) ||
++			(dma_tr_params.src != 0) ||
++			(dma_tr_params.a_b_cnt != 0) ||
++			(dma_tr_params.dst != 0) ||
++			(dma_tr_params.src_dst_bidx != 0) ||
++			(dma_tr_params.link_bcntrld != 0xffff) ||
++			(dma_tr_params.src_dst_cidx != 0) ||
++			(dma_tr_params.ccnt != 0)) {
++
++			trigger_dma_transfer_to_buf(dev, dev->current_vb);
++			return;
++		}
+ 
+ 		vb->v4l2_buf.field = dev->field;
+ 		dev->field_count++;
+@@ -204,7 +219,6 @@ static void dma_callback(unsigned lch, u16 ch_status, void *data)
+ 		/* check if we have new buffer queued */
+ 		dequeue_buffer_for_dma(dev);
+ 	} else {
+-		printk(KERN_ERR "[cssp_camera]: EDMA error (ch_status = %d)\n", ch_status);
+ 		/* we got a missed interrupt so just start a new DMA with the existing buffer */
+ 		if (dev->current_vb != NULL)
+ 			trigger_dma_transfer_to_buf(dev, dev->current_vb);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0079-AM335X-errata-OPP50-on-MPU-domain-is-not-supported.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0079-AM335X-errata-OPP50-on-MPU-domain-is-not-supported.patch
new file mode 100644
index 0000000..c50abbf
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0079-AM335X-errata-OPP50-on-MPU-domain-is-not-supported.patch
@@ -0,0 +1,52 @@
+From 662134c1007cc275193737dd11ea4b77f47256a7 Mon Sep 17 00:00:00 2001
+From: AnilKumar Ch <anilkumar@ti.com>
+Date: Tue, 26 Jun 2012 15:41:51 +0530
+Subject: [PATCH 79/79] AM335X: errata: OPP50 on MPU domain is not supported
+
+This patch implements a workaround for OPP50 erratum, Advisory
+1.0.15 at http://www.ti.com/lit/er/sprz360b/sprz360b.pdf
+
+OPP50 Operation on MPU Domain is Not Supported. This issue seen with
+reliability tests running on MPU. To minimize power consumption, the
+ARM Cortex-A8 may be operated at the lower frequency defined by OPP50,
+but the respective power terminal VDD_MPU must be operated as defined
+by OPP100. So MPU OPP50 modified to <275MHz, 1.1V>.
+
+Power consumption as seen on AM335x EVM:
+OPP50  <275MHz, 0.95> - 40.5 mW
+OPP50  <275MHz, 1.10> - 55.5 mW
+OPP100 <500MHz, 1.10> - 98.5 mW
+
+Based on the above data we can see 43mW power savings compared to
+OPP100. This is the reason for keeping OPP50 alive instead of
+shutting down completely.
+
+Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
+---
+ arch/arm/mach-omap2/opp3xxx_data.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
+index 0e540c8..9fbcfc3 100644
+--- a/arch/arm/mach-omap2/opp3xxx_data.c
++++ b/arch/arm/mach-omap2/opp3xxx_data.c
+@@ -154,7 +154,15 @@ static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
+ 
+ /* VDD1 */
+ 
+-#define AM33XX_VDD_MPU_OPP50_UV		950000
++/*
++ * Errata 1.0.15: OPP50 Operation on MPU Domain is Not Supported.
++ *
++ * To minimize power consumption, the ARM Cortex-A8 may be operated at
++ * the lower frequency defined by OPP50, but the respective voltage
++ * domain VDD_MPU must be operated as defined by OPP100. So MPU OPP50
++ * definition is modified to 275MHz, 1.1V.
++ */
++#define AM33XX_VDD_MPU_OPP50_UV		1100000
+ #define AM33XX_VDD_MPU_OPP100_UV	1100000
+ #define AM33XX_VDD_MPU_OPP120_UV	1200000
+ #define AM33XX_VDD_MPU_OPPTURBO_UV	1260000
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index 01bfc23..083f36a 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -15,7 +15,7 @@ PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.21", d)}"
 
 BRANCH = "v3.2-staging"
 SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
-MACHINE_KERNEL_PR_append = "f+gitr${SRCREV}"
+MACHINE_KERNEL_PR_append = "g+gitr${SRCREV}"
 
 COMPATIBLE_MACHINE = "(ti33x)"
 
@@ -1530,7 +1530,6 @@ PATCHES_OVER_PSP = " \
 	file://beaglebone/0063-beaglebone-dvi-cape-audio-hacks.patch \
 	file://beaglebone/0064-beaglebone-always-execute-the-pin-free-checks.patch \
 	file://beaglebone/0065-ti_tscadc-switch-to-16x-averaging.patch \
-	file://beaglebone/0066-beaglebone-disable-OPP-for-275MHz-due-to-silicon-err.patch \
 	file://beaglebone/0067-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch \
 	file://beaglebone/0068-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch \
 	file://beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch \
@@ -1540,4 +1539,9 @@ PATCHES_OVER_PSP = " \
 	file://beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch \
 	file://beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch \
 	file://beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch \
+	file://beaglebone/0075-video-da8xx-fb-calculate-pixel-clock-period-for-the-.patch \
+	file://beaglebone/0076-beaglebone-improve-GPMC-bus-timings-for-camera-cape.patch \
+	file://beaglebone/0077-beaglebone-disable-UYVY-VYUY-and-YVYU-modes-in-camer.patch \
+	file://beaglebone/0078-beaglebone-error-handling-for-DMA-completion-in-cssp.patch \
+	file://beaglebone/0079-AM335X-errata-OPP50-on-MPU-domain-is-not-supported.patch \
 "
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 10/12] linux-ti33x-psp 3.2: enable more tracing features for beaglebone
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (7 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 09/12] linux-ti33x-psp 3.2: add fixed for cssp, fbset and OPP50 Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 11/12] linux-ti33x-psp 3.2: update to 3.2.23 Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 12/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree Koen Kooi
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

This makes powertop 2.0 happy

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 .../linux/linux-ti33x-psp-3.2/beaglebone/defconfig |   20 ++++++++++++++------
 recipes-kernel/linux/linux-ti33x-psp_3.2.bb        |    2 +-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig
index 8e8a1c5..5964380 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/defconfig
@@ -108,7 +108,7 @@ CONFIG_NET_NS=y
 CONFIG_SCHED_AUTOGROUP=y
 CONFIG_MM_OWNER=y
 # CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
+CONFIG_RELAY=y
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_RD_GZIP=y
@@ -144,7 +144,7 @@ CONFIG_PERF_USE_VMALLOC=y
 # Kernel Performance Events And Counters
 #
 CONFIG_PERF_EVENTS=y
-# CONFIG_PERF_COUNTERS is not set
+CONFIG_PERF_COUNTERS=y
 # CONFIG_DEBUG_PERF_USE_VMALLOC is not set
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_COMPAT_BRK=y
@@ -152,6 +152,7 @@ CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
 CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
 CONFIG_OPROFILE=m
 CONFIG_HAVE_OPROFILE=y
 # CONFIG_KPROBES is not set
@@ -784,6 +785,7 @@ CONFIG_DNS_RESOLVER=y
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NET_DROP_MONITOR is not set
 # CONFIG_HAMRADIO is not set
 CONFIG_CAN=y
 CONFIG_CAN_RAW=y
@@ -1408,7 +1410,6 @@ CONFIG_TOUCHSCREEN_ADS7846=y
 # CONFIG_TOUCHSCREEN_INEXIO is not set
 # CONFIG_TOUCHSCREEN_MK712 is not set
 # CONFIG_TOUCHSCREEN_PENMOUNT is not set
-CONFIG_TOUCHSCREEN_EDT_FT5X06=y
 # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
 # CONFIG_TOUCHSCREEN_TOUCHWIN is not set
 CONFIG_TOUCHSCREEN_TI_TSCADC=y
@@ -3404,6 +3405,7 @@ CONFIG_TIMER_STATS=y
 # CONFIG_LOCK_STAT is not set
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_STACKTRACE=y
 # CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_BUGVERBOSE is not set
@@ -3426,23 +3428,29 @@ CONFIG_TIMER_STATS=y
 # CONFIG_LATENCYTOP is not set
 # CONFIG_SYSCTL_SYSCALL_CHECK is not set
 # CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_NOP_TRACER=y
 CONFIG_HAVE_FUNCTION_TRACER=y
 CONFIG_HAVE_DYNAMIC_FTRACE=y
 CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
 CONFIG_HAVE_C_RECORDMCOUNT=y
 CONFIG_RING_BUFFER=y
+CONFIG_EVENT_TRACING=y
+CONFIG_EVENT_POWER_TRACING_DEPRECATED=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
 CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_TRACING=y
+CONFIG_GENERIC_TRACER=y
 CONFIG_TRACING_SUPPORT=y
 CONFIG_FTRACE=y
 # CONFIG_FUNCTION_TRACER is not set
 # CONFIG_IRQSOFF_TRACER is not set
 # CONFIG_SCHED_TRACER is not set
-# CONFIG_ENABLE_DEFAULT_TRACERS is not set
 CONFIG_BRANCH_PROFILE_NONE=y
 # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
 # CONFIG_PROFILE_ALL_BRANCHES is not set
 # CONFIG_STACK_TRACER is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_BLK_DEV_IO_TRACE=y
+# CONFIG_FTRACE_STARTUP_TEST is not set
 # CONFIG_RING_BUFFER_BENCHMARK is not set
 # CONFIG_DYNAMIC_DEBUG is not set
 # CONFIG_DMA_API_DEBUG is not set
@@ -3588,7 +3596,7 @@ CONFIG_CRYPTO_LZO=y
 CONFIG_CRYPTO_HW=y
 # CONFIG_CRYPTO_DEV_OMAP_SHAM is not set
 # CONFIG_CRYPTO_DEV_OMAP_AES is not set
-# CONFIG_BINARY_PRINTF is not set
+CONFIG_BINARY_PRINTF=y
 
 #
 # Library routines
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index 083f36a..eab3127 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -15,7 +15,7 @@ PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.21", d)}"
 
 BRANCH = "v3.2-staging"
 SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
-MACHINE_KERNEL_PR_append = "g+gitr${SRCREV}"
+MACHINE_KERNEL_PR_append = "h+gitr${SRCREV}"
 
 COMPATIBLE_MACHINE = "(ti33x)"
 
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 11/12] linux-ti33x-psp 3.2: update to 3.2.23
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (8 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 10/12] linux-ti33x-psp 3.2: enable more tracing features for beaglebone Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-29 17:08 ` [PATCH][for-denzil 12/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree Koen Kooi
  10 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Regenerate all beaglebone patches and add one vfs tracer patch for powertop

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 conf/machine/include/ti33x.inc                     |    2 +-
 ...iio-ad7606-Re-add-missing-scale-attribute.patch |   37 +
 ...erify-origin-of-netlink-connector-message.patch |   51 +
 ...mce-decoding-crash-after-edac-driver-unlo.patch |  166 ++
 ...0004-hwrng-atmel-rng-fix-data-valid-check.patch |   72 +
 .../0005-staging-r8712u-Add-new-USB-IDs.patch      |   32 +
 ...esmc-Limit-key-length-in-warning-messages.patch |   43 +
 ..._atomic-fix-32bit-PAE-pmd-walk-vs-pmd_pop.patch |  218 +++
 ...tomic64_read-in-pmd_read_atomic-for-32bit.patch |  125 ++
 ...nsure-proper-cache-clearing-for-gc-inodes.patch |   71 +
 ...nish-any-pending-operations-on-the-frameb.patch |  130 ++
 ...move-use-of-the-autoreported-ringbuffer-H.patch |   84 +
 .../0012-e1000e-Disable-ASPM-L1-on-82574.patch     |   41 +
 ...ve-special-case-for-82573-82574-ASPM-L1-d.patch |   43 +
 ...-the-fallback-non-IRQ-wait-in-ring-thrott.patch |   39 +
 ..._pstor-Fix-possible-panic-by-NULL-pointer.patch |   72 +
 ...Fix-buffers-staying-in-queued-state-after.patch |   45 +
 ...autodetection-support-for-USB-ID-2040-f5a.patch |   30 +
 ...n-t-return-stack-garbage-from-supports_rb.patch |   36 +
 ...-fbcon-using-nv_two_heads-is-not-a-good-i.patch |   43 +
 ...nstate-missing-mempool_free-in-cell_relea.patch |   55 +
 ...Fix-a-WARNING-on-suspend-resume-with-IBSS.patch |   75 +
 ...0211-fix-potential-deadlock-in-regulatory.patch |  144 ++
 .../0023-ath9k-Fix-softlockup-in-AR9485.patch      |   68 +
 ...can-precedence-error-in-c_can_chip_config.patch |   38 +
 ...9k-fix-a-tx-rate-duration-calculation-bug.patch |   41 +
 .../0026-batman-adv-fix-skb-data-assignment.patch  |   42 +
 ...-Should-check-for-IS_ERR-clk-instead-of-N.patch |   33 +
 ...oid-possible-infinite-loop-in-ar9003_get_.patch |   61 +
 ...ove-log_event-debugfs-file-debugging-is-d.patch |   67 +
 ...AMSUNG-Fix-for-S3C2412-EBI-memory-mapping.patch |   36 +
 ...31-USB-option-add-id-for-Cellient-MEN-200.patch |   44 +
 ...rf-use-NR_CPUS-instead-or-nr_cpumask_bits.patch |   44 +
 ...factor-the-deferred-PM_IIR-handling-into-.patch |  107 ++
 .../0034-drm-i915-rip-out-the-PM_IIR-WARN.patch    |   60 +
 ...x-eDP-blank-screen-after-S3-resume-on-HP-.patch |   46 +
 ...event-waiting-forever-on-asynchronous-sus.patch |   62 +
 ...ure-Rename-X86_FEATURE_DTS-to-X86_FEATURE.patch |   73 +
 ...w-merging-of-backports-for-serious-user-v.patch |   51 +
 ...ALSA-hda-Add-Realtek-ALC280-codec-support.patch |   34 +
 ...tion-Add-USB-ID-for-Novatel-Ovation-MC551.patch |   41 +
 .../3.2.22/0041-USB-CP210x-Add-10-Device-IDs.patch |   61 +
 ...t-teardown-the-device-before-unregisterin.patch |   58 +
 ...-use-be32_to_cpup-to-handle-the-value-of-.patch |   44 +
 ...acpi_pad-fix-power_saving-thread-deadlock.patch |   66 +
 ...v-only-drop-packets-of-known-wifi-clients.patch |   55 +
 .../3.2.22/0046-Linux-3.2.22.patch                 |   24 +
 .../0001-splice-fix-racy-pipe-buffers-uses.patch   |  298 ++++
 .../3.2.23/0002-umem-fix-up-unplugging.patch       |   86 ++
 ...0003-mwifiex-fix-11n-rx-packet-drop-issue.patch |   88 ++
 ...4-mwifiex-fix-WPS-eapol-handshake-failure.patch |   52 +
 ...-Prevent-multiple-buffer-overflows-in-NCI.patch |   52 +
 ...-ath9k-fix-dynamic-WEP-related-regression.patch |   80 +
 ...turn-from-rawsock_release-when-sk-is-NULL.patch |  107 ++
 .../0008-rtlwifi-rtl8192cu-New-USB-IDs.patch       |   45 +
 ...ble-serialize_regmode-for-non-PCIE-AR9287.patch |   34 +
 ...rrect-behaviour-on-unrecognised-action-fr.patch |   48 +
 ...C-tlv320aic3x-Fix-codec-pll-configure-bug.patch |   62 +
 ...mon-Use-cpumask-iterator-to-avoid-warning.patch |   56 +
 .../0013-powerpc-kvm-sldi-should-be-sld.patch      |   40 +
 ...on-t-try-to-recovery-unmatched-and-unused.patch |   50 +
 ...-not-add-data_offset-before-call-to-is_ba.patch |   54 +
 ...-ops_run_io-inc-nr_pending-before-calling.patch |   45 +
 ...ix-failure-when-trying-to-repair-a-read-e.patch |   61 +
 ...ck-any-firmware-framebuffers-before-claim.patch |  118 ++
 ...nt-data-fix-shadow_info_leak-on-dm_tm_des.patch |   37 +
 ...nt-data-handle-space-map-checker-creation.patch |  182 +++
 ...nt-data-fix-allocation-failure-in-space-m.patch |   95 ++
 ...da-Fix-power-map-regression-for-HP-dv6-co.patch |   49 +
 ...nge-CPU-ring-buffer-state-from-tracing_cp.patch |   56 +
 ...-wrong-return-values-in-add_virtual_intf-.patch |   93 ++
 ...-instead-of-abusing-i-in-udf_load_logical.patch |   35 +
 ...un-away-loop-when-partition-table-length-.patch |   54 +
 ...0027-udf-Fortify-loading-of-sparing-table.patch |  134 ++
 .../0028-ARM-fix-rcu-stalls-on-SMP-platforms.patch |   68 +
 ...lidate-data_len-before-allocating-skb-in-.patch |   53 +
 ...e-CIPSO-options-correctly-when-NetLabel-i.patch |   80 +
 ...tp_eth-fix-kernel-panic-on-rmmod-l2tp_eth.patch |   43 +
 .../0032-l2tp-fix-a-race-in-l2tp_ip_sendmsg.patch  |   53 +
 ...fix-checksum-bit-management-on-some-chips.patch |   47 +
 .../3.2.23/0034-be2net-fix-a-race-in-be_xmit.patch |   44 +
 ...-dummy-fix-rcu_sched-self-detected-stalls.patch |   49 +
 .../0036-bonding-Fix-corrupted-queue_mapping.patch |  117 ++
 ...thtool-allow-ETHTOOL_GSSET_INFO-for-users.patch |   36 +
 .../0038-netpoll-fix-netpoll_send_udp-bugs.patch   |   77 +
 ...pv6-proc-file-registration-to-end-of-init.patch |  126 ++
 ...gn-rtnl_link_ops-to-bridge-devices-create.patch |   62 +
 ...elayed-directory-updates-during-log-repla.patch |   56 +
 ...erver-doesn-t-set-CAP_LARGE_READ_X-cap-de.patch |   60 +
 ...s2-clear-unaligned-io-flag-when-dio-fails.patch |   38 +
 ...ake-kiocb-private-NUll-in-init_sync_kiocb.patch |   39 +
 .../0045-mtd-cafe_nand-fix-an-vs-mistake.patch     |   39 +
 ...m-Hold-a-file-reference-in-madvise_remove.patch |   80 +
 ..._fc-Resolve-suspicious-RCU-usage-warnings.patch |   36 +
 ...O_PATH-file-descriptors-usable-for-fchdir.patch |   56 +
 .../3.2.23/0049-Linux-3.2.23.patch                 |   24 +
 ...1-f_rndis-HACK-around-undefined-variables.patch |    8 +-
 ...2-da8xx-fb-add-DVI-support-for-beaglebone.patch |    8 +-
 ...rebase-everything-onto-3.2-WARNING-MEGAPA.patch |    8 +-
 .../beaglebone/0004-more-beaglebone-merges.patch   |   10 +-
 .../beaglebone/0005-beaglebone-disable-tsadc.patch |    8 +-
 ...general-purpose-mode-untested-with-touchs.patch |    6 +-
 ...dc-Add-board-file-mfd-support-fix-warning.patch |    6 +-
 ...AM335X-init-tsc-bone-style-for-new-boards.patch |    8 +-
 ...cadc-make-stepconfig-channel-configurable.patch |    8 +-
 .../0010-tscadc-Trigger-through-sysfs.patch        |    6 +-
 ...meta-ti-Remove-debug-messages-for-meta-ti.patch |    8 +-
 ...c-switch-to-polling-instead-of-interrupts.patch |    8 +-
 .../beaglebone/0013-beaglebone-fix-ADC-init.patch  |    8 +-
 .../beaglebone/0014-AM335x-MUX-add-ehrpwm1A.patch  |    8 +-
 ...enable-PWM-for-lcd-backlight-backlight-is.patch |    8 +-
 ...Set-dto-to-max-value-of-14-to-avoid-SD-Ca.patch |   12 +-
 ...set-default-brightness-to-50-for-pwm-back.patch |    8 +-
 ...P-framebuffer-driver-supporting-Adafruit-.patch |    8 +-
 ...019-beaglebone-use-P8_6-gpio1_3-as-w1-bus.patch |    8 +-
 ...add-support-for-Towertech-TT3201-CAN-cape.patch |   10 +-
 ...add-more-beagleboardtoys-cape-partnumbers.patch |    8 +-
 ...add-gpio-keys-for-lcd7-add-notes-for-miss.patch |    8 +-
 ...23-beaglebone-add-enter-key-for-lcd7-cape.patch |    8 +-
 .../0024-beaglebone-add-gpio-keys-for-lcd.patch    |    8 +-
 ...025-beaglebone-fix-direction-of-gpio-keys.patch |    8 +-
 .../0026-beaglebone-fix-3.5-lcd-cape-support.patch |    8 +-
 ...decrease-PWM-frequency-to-old-value-LCD7-.patch |    8 +-
 .../0028-beaglebone-fix-ehrpwm-backlight.patch     |    8 +-
 ...0029-beaglebone-also-report-cape-revision.patch |    8 +-
 ...don-t-compare-undefined-characters-it-mak.patch |    8 +-
 .../0031-beaglebone-fix-3.5-cape-support.patch     |    8 +-
 ...-connect-batterycape-GPIO-to-gpio-charger.patch |    8 +-
 ...lebone-add-support-for-CAN-and-RS232-cape.patch |   10 +-
 ...glebone-add-support-for-DVI-rev.-A2-capes.patch |    8 +-
 ...e-enable-LEDs-for-DVI-LCD3-and-LCD7-capes.patch |   10 +-
 ...036-Beaglebone-Fixed-compiletime-warnings.patch |    8 +-
 ...Added-missing-termination-record-to-bone_.patch |    8 +-
 ...xevm.c-Beaglebone-expose-all-pwms-through.patch |    8 +-
 ...x-Fixed-debugfs-mux-output-always-reporti.patch |   10 +-
 ...export-SPI2-as-spidev-when-no-capes-are-u.patch |    8 +-
 ...rking-WIP-changes-to-make-DMA-safe-and-ad.patch |    8 +-
 .../0042-omap-hwmod-silence-st_shift-error.patch   |    8 +-
 ...psw-phy_device-demote-PHY-message-to-INFO.patch |    6 +-
 ...ne-add-support-for-7-LCD-cape-revision-A2.patch |    8 +-
 ...beaglebone-allow-capes-to-disable-w1-gpio.patch |    8 +-
 ...add-stub-for-the-camera-cape-to-disable-w.patch |    8 +-
 ...y-of-the-missing-signals-to-the-mux-table.patch |    8 +-
 ...sed-part-of-LCD-bus.-Added-even-more-miss.patch |   10 +-
 ...c-add-defines-for-4x-and-16x-oversampling.patch |    8 +-
 .../0050-ts_tscadc-switch-to-4x-oversampling.patch |    8 +-
 ...of-pinmux-data-array-in-EEPROM-data-struc.patch |    8 +-
 ...-Bone-Cape-configuration-from-EEPROM.-Onl.patch |    8 +-
 ...nditional-debug-code-by-pr_debug-statemen.patch |    8 +-
 ...for-boards-with-mistaken-ASCII-interpreta.patch |    8 +-
 ...for-EEPROM-contents-blocking-further-I2C-.patch |    8 +-
 ...-on-EEPROM-revision-to-prevent-interpreti.patch |    8 +-
 ...lar-fix-i2c-fixed-prescalar-setting-issue.patch |    8 +-
 ...lebone-annotate-default-beaglebone-pinmux.patch |    8 +-
 ...fix-pin-free-thinko-this-method-doesn-t-g.patch |    8 +-
 ...060-beaglebone-switch-RS232-cape-to-ttyO2.patch |    8 +-
 ...-make-uart2-pinmux-match-the-uart0-pinmux.patch |    8 +-
 ...unding-FB-size-to-satisfy-SGX-buffer-requ.patch |    8 +-
 .../0063-beaglebone-dvi-cape-audio-hacks.patch     |   12 +-
 ...lebone-always-execute-the-pin-free-checks.patch |    8 +-
 .../0065-ti_tscadc-switch-to-16x-averaging.patch   |    8 +-
 ...o-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch |   45 +
 ...add-support-for-the-4.3-lcd-cape-with-res.patch |   94 ++
 ...o-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch |   45 -
 ...68-beaglebone-add-support-for-LCD3-rev-A1.patch |  132 ++
 ...add-support-for-the-4.3-lcd-cape-with-res.patch |   94 --
 ...69-beaglebone-add-support-for-LCD3-rev-A1.patch |  132 --
 ...fix-buttons-spidev-clash-when-using-mcasp.patch |   52 +
 .../0070-beaglebone-fix-LCD3-led-key-overlap.patch |   54 +
 ...fix-buttons-spidev-clash-when-using-mcasp.patch |   52 -
 .../0071-beaglebone-fix-LCD3-led-key-overlap.patch |   54 -
 .../0071-beaglebone-fix-audio-spi-clash.patch      |   25 +
 ...add-support-for-QuickLogic-Camera-interfa.patch | 1612 ++++++++++++++++++++
 .../0072-beaglebone-fix-audio-spi-clash.patch      |   25 -
 ...add-support-for-DVI-audio-and-audio-only-.patch |   64 +
 ...add-support-for-QuickLogic-Camera-interfa.patch | 1612 --------------------
 ...add-support-for-DVI-audio-and-audio-only-.patch |   63 -
 ...glebone-disable-LBO-GPIO-for-battery-cape.patch |   35 +
 ...glebone-disable-LBO-GPIO-for-battery-cape.patch |   35 -
 ...race-point-in-the-mark_inode_dirty-functi.patch |  103 ++
 recipes-kernel/linux/linux-ti33x-psp_3.2.bb        |  116 +-
 181 files changed, 8891 insertions(+), 2389 deletions(-)
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0001-staging-iio-ad7606-Re-add-missing-scale-attribute.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0002-Tools-hv-verify-origin-of-netlink-connector-message.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0003-edac-avoid-mce-decoding-crash-after-edac-driver-unlo.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0004-hwrng-atmel-rng-fix-data-valid-check.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0005-staging-r8712u-Add-new-USB-IDs.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0006-hwmon-applesmc-Limit-key-length-in-warning-messages.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0007-mm-pmd_read_atomic-fix-32bit-PAE-pmd-walk-vs-pmd_pop.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0008-thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0009-nilfs2-ensure-proper-cache-clearing-for-gc-inodes.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0010-drm-i915-Finish-any-pending-operations-on-the-frameb.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0011-drm-i915-Remove-use-of-the-autoreported-ringbuffer-H.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0012-e1000e-Disable-ASPM-L1-on-82574.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0013-e1000e-Remove-special-case-for-82573-82574-ASPM-L1-d.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0014-drm-i915-Do-the-fallback-non-IRQ-wait-in-ring-thrott.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0015-staging-rts_pstor-Fix-possible-panic-by-NULL-pointer.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0016-gspca-core-Fix-buffers-staying-in-queued-state-after.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0017-smsusb-add-autodetection-support-for-USB-ID-2040-f5a.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0018-drm-edid-don-t-return-stack-garbage-from-supports_rb.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0019-drm-nouveau-fbcon-using-nv_two_heads-is-not-a-good-i.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0020-dm-thin-reinstate-missing-mempool_free-in-cell_relea.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0021-ath9k-Fix-a-WARNING-on-suspend-resume-with-IBSS.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0022-cfg80211-fix-potential-deadlock-in-regulatory.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0023-ath9k-Fix-softlockup-in-AR9485.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0024-can-c_can-precedence-error-in-c_can_chip_config.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0025-ath9k-fix-a-tx-rate-duration-calculation-bug.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0026-batman-adv-fix-skb-data-assignment.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0027-ARM-SAMSUNG-Should-check-for-IS_ERR-clk-instead-of-N.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0028-ath9k_hw-avoid-possible-infinite-loop-in-ar9003_get_.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0029-iwlwifi-remove-log_event-debugfs-file-debugging-is-d.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0030-ARM-SAMSUNG-Fix-for-S3C2412-EBI-memory-mapping.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0031-USB-option-add-id-for-Cellient-MEN-200.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0032-oprofile-perf-use-NR_CPUS-instead-or-nr_cpumask_bits.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0033-drm-i915-Refactor-the-deferred-PM_IIR-handling-into-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0034-drm-i915-rip-out-the-PM_IIR-WARN.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0035-drm-i915-Fix-eDP-blank-screen-after-S3-resume-on-HP-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0036-PM-Sleep-Prevent-waiting-forever-on-asynchronous-sus.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0037-x86-cpufeature-Rename-X86_FEATURE_DTS-to-X86_FEATURE.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0038-stable-Allow-merging-of-backports-for-serious-user-v.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0039-ALSA-hda-Add-Realtek-ALC280-codec-support.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0040-USB-option-Add-USB-ID-for-Novatel-Ovation-MC551.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0041-USB-CP210x-Add-10-Device-IDs.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0042-xen-netfront-teardown-the-device-before-unregisterin.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0043-can-flexcan-use-be32_to_cpup-to-handle-the-value-of-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0044-acpi_pad-fix-power_saving-thread-deadlock.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0045-batman-adv-only-drop-packets-of-known-wifi-clients.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0046-Linux-3.2.22.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0001-splice-fix-racy-pipe-buffers-uses.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0002-umem-fix-up-unplugging.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0003-mwifiex-fix-11n-rx-packet-drop-issue.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0004-mwifiex-fix-WPS-eapol-handshake-failure.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0005-NFC-Prevent-multiple-buffer-overflows-in-NCI.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0006-ath9k-fix-dynamic-WEP-related-regression.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0007-NFC-Return-from-rawsock_release-when-sk-is-NULL.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0008-rtlwifi-rtl8192cu-New-USB-IDs.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0009-ath9k-enable-serialize_regmode-for-non-PCIE-AR9287.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0010-mac80211-correct-behaviour-on-unrecognised-action-fr.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0011-ASoC-tlv320aic3x-Fix-codec-pll-configure-bug.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0012-powerpc-xmon-Use-cpumask-iterator-to-avoid-warning.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0013-powerpc-kvm-sldi-should-be-sld.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0014-md-raid10-Don-t-try-to-recovery-unmatched-and-unused.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0015-md-raid5-Do-not-add-data_offset-before-call-to-is_ba.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0016-md-raid5-In-ops_run_io-inc-nr_pending-before-calling.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0017-md-raid10-fix-failure-when-trying-to-repair-a-read-e.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0018-drm-i915-kick-any-firmware-framebuffers-before-claim.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0019-dm-persistent-data-fix-shadow_info_leak-on-dm_tm_des.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0020-dm-persistent-data-handle-space-map-checker-creation.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0021-dm-persistent-data-fix-allocation-failure-in-space-m.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0022-ALSA-hda-Fix-power-map-regression-for-HP-dv6-co.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0023-tracing-change-CPU-ring-buffer-state-from-tracing_cp.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0024-mwifiex-fix-wrong-return-values-in-add_virtual_intf-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0025-udf-Use-ret-instead-of-abusing-i-in-udf_load_logical.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0026-udf-Avoid-run-away-loop-when-partition-table-length-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0027-udf-Fortify-loading-of-sparing-table.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0028-ARM-fix-rcu-stalls-on-SMP-platforms.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0029-net-sock-validate-data_len-before-allocating-skb-in-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0030-cipso-handle-CIPSO-options-correctly-when-NetLabel-i.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0031-net-l2tp_eth-fix-kernel-panic-on-rmmod-l2tp_eth.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0032-l2tp-fix-a-race-in-l2tp_ip_sendmsg.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0033-sky2-fix-checksum-bit-management-on-some-chips.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0034-be2net-fix-a-race-in-be_xmit.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0035-dummy-fix-rcu_sched-self-detected-stalls.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0036-bonding-Fix-corrupted-queue_mapping.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0037-ethtool-allow-ETHTOOL_GSSET_INFO-for-users.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0038-netpoll-fix-netpoll_send_udp-bugs.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0039-ipv6-Move-ipv6-proc-file-registration-to-end-of-init.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0040-bridge-Assign-rtnl_link_ops-to-bridge-devices-create.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0041-Btrfs-run-delayed-directory-updates-during-log-repla.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0042-cifs-when-server-doesn-t-set-CAP_LARGE_READ_X-cap-de.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0043-ocfs2-clear-unaligned-io-flag-when-dio-fails.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0044-aio-make-kiocb-private-NUll-in-init_sync_kiocb.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0045-mtd-cafe_nand-fix-an-vs-mistake.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0046-mm-Hold-a-file-reference-in-madvise_remove.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0047-tcm_fc-Resolve-suspicious-RCU-usage-warnings.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0048-vfs-make-O_PATH-file-descriptors-usable-for-fchdir.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0049-Linux-3.2.23.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-LCD3-rev-A1.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-LCD3-led-key-overlap.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-audio-spi-clash.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
 delete mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
 create mode 100644 recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0080-vfs-Add-a-trace-point-in-the-mark_inode_dirty-functi.patch

diff --git a/conf/machine/include/ti33x.inc b/conf/machine/include/ti33x.inc
index 441a7bb..02759d5 100644
--- a/conf/machine/include/ti33x.inc
+++ b/conf/machine/include/ti33x.inc
@@ -4,7 +4,7 @@ require conf/machine/include/soc-family.inc
 require conf/machine/include/tune-cortexa8.inc
 PREFERRED_PROVIDER_virtual/kernel = "linux-ti33x-psp"
 # Increase this everytime you change something in the kernel
-MACHINE_KERNEL_PR = "r13"
+MACHINE_KERNEL_PR = "r14"
 
 KERNEL_IMAGETYPE = "uImage"
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0001-staging-iio-ad7606-Re-add-missing-scale-attribute.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0001-staging-iio-ad7606-Re-add-missing-scale-attribute.patch
new file mode 100644
index 0000000..4f7f561
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0001-staging-iio-ad7606-Re-add-missing-scale-attribute.patch
@@ -0,0 +1,37 @@
+From ea62444a6898324ec9aeb8799a8fd518073fe5a8 Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Tue, 5 Jun 2012 18:16:31 +0200
+Subject: [PATCH 01/46] staging:iio:ad7606: Re-add missing scale attribute
+
+commit 279bf2e57c30c9a4482b2b6ede11b31c41e35e78 upstream.
+
+Commit 50ac23be ("staging:iio:adc:ad7606 add local define for chan_spec
+structures.") accidentally removed the scale info_mask flag. This patch
+adds it back again.
+
+Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
+Acked-by: Jonathan Cameron <jic23@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+[bwh: Backported to 3.2:
+ - info_mask was completely gone rather than set to another flag
+ - IIO_CHAN_INFO_SCALE_SHARED_BIT was not defined; write it out as a shift]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/staging/iio/adc/ad7606_core.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/staging/iio/adc/ad7606_core.c b/drivers/staging/iio/adc/ad7606_core.c
+index 54423ab..2ee187f 100644
+--- a/drivers/staging/iio/adc/ad7606_core.c
++++ b/drivers/staging/iio/adc/ad7606_core.c
+@@ -241,6 +241,7 @@ static const struct attribute_group ad7606_attribute_group = {
+ 		.indexed = 1,				\
+ 		.channel = num,				\
+ 		.address = num,				\
++		.info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED), \
+ 		.scan_index = num,			\
+ 		.scan_type = IIO_ST('s', 16, 16, 0),	\
+ 	}
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0002-Tools-hv-verify-origin-of-netlink-connector-message.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0002-Tools-hv-verify-origin-of-netlink-connector-message.patch
new file mode 100644
index 0000000..7b4da32
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0002-Tools-hv-verify-origin-of-netlink-connector-message.patch
@@ -0,0 +1,51 @@
+From 510150c1fa93796d65a9b598a8e1509629f5d84e Mon Sep 17 00:00:00 2001
+From: Olaf Hering <olaf@aepfle.de>
+Date: Thu, 31 May 2012 16:40:06 +0200
+Subject: [PATCH 02/46] Tools: hv: verify origin of netlink connector message
+
+commit bcc2c9c3fff859e0eb019fe6fec26f9b8eba795c upstream.
+
+The SuSE security team suggested to use recvfrom instead of recv to be
+certain that the connector message is originated from kernel.
+
+CVE-2012-2669
+
+Signed-off-by: Olaf Hering <olaf@aepfle.de>
+Signed-off-by: Marcus Meissner <meissner@suse.de>
+Signed-off-by: Sebastian Krahmer <krahmer@suse.de>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ tools/hv/hv_kvp_daemon.c |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 11224ed..323d4d9 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -384,14 +384,18 @@ int main(void)
+ 	pfd.fd = fd;
+ 
+ 	while (1) {
++		struct sockaddr *addr_p = (struct sockaddr *) &addr;
++		socklen_t addr_l = sizeof(addr);
+ 		pfd.events = POLLIN;
+ 		pfd.revents = 0;
+ 		poll(&pfd, 1, -1);
+ 
+-		len = recv(fd, kvp_recv_buffer, sizeof(kvp_recv_buffer), 0);
++		len = recvfrom(fd, kvp_recv_buffer, sizeof(kvp_recv_buffer), 0,
++				addr_p, &addr_l);
+ 
+-		if (len < 0) {
+-			syslog(LOG_ERR, "recv failed; error:%d", len);
++		if (len < 0 || addr.nl_pid) {
++			syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s",
++					addr.nl_pid, errno, strerror(errno));
+ 			close(fd);
+ 			return -1;
+ 		}
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0003-edac-avoid-mce-decoding-crash-after-edac-driver-unlo.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0003-edac-avoid-mce-decoding-crash-after-edac-driver-unlo.patch
new file mode 100644
index 0000000..6670761
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0003-edac-avoid-mce-decoding-crash-after-edac-driver-unlo.patch
@@ -0,0 +1,166 @@
+From 081ba8d6f6253982766e17b90992c1002c31acb0 Mon Sep 17 00:00:00 2001
+From: Chen Gong <gong.chen@linux.intel.com>
+Date: Tue, 8 May 2012 20:40:12 -0300
+Subject: [PATCH 03/46] edac: avoid mce decoding crash after edac driver
+ unloaded
+
+commit e35fca4791fcdd43dc1fd769797df40c562ab491 upstream.
+
+Some edac drivers register themselves as mce decoders via
+notifier_chain. But in current notifier_chain implementation logic,
+it doesn't accept same notifier registered twice. If so, it will be
+wrong when adding/removing the element from the list. For example,
+on one SandyBridge platform, remove module sb_edac and then trigger
+one error, it will hit oops because it has no mce decoder registered
+but related notifier_chain still points to an invalid callback
+function. Here is an example:
+
+Call Trace:
+ [<ffffffff8150ef6a>] atomic_notifier_call_chain+0x1a/0x20
+ [<ffffffff8102b936>] mce_log+0x46/0x180
+ [<ffffffff8102eaea>] apei_mce_report_mem_error+0x4a/0x60
+ [<ffffffff812e19d2>] ghes_do_proc+0x192/0x210
+ [<ffffffff812e2066>] ghes_proc+0x46/0x70
+ [<ffffffff812e20d8>] ghes_notify_sci+0x48/0x80
+ [<ffffffff8150ef05>] notifier_call_chain+0x55/0x80
+ [<ffffffff81076f1a>] __blocking_notifier_call_chain+0x5a/0x80
+ [<ffffffff812aea11>] ? acpi_os_wait_events_complete+0x23/0x23
+ [<ffffffff81076f56>] blocking_notifier_call_chain+0x16/0x20
+ [<ffffffff812ddc4d>] acpi_hed_notify+0x19/0x1b
+ [<ffffffff812b16bd>] acpi_device_notify+0x19/0x1b
+ [<ffffffff812beb38>] acpi_ev_notify_dispatch+0x67/0x7f
+ [<ffffffff812aea3a>] acpi_os_execute_deferred+0x29/0x36
+ [<ffffffff81069dc2>] process_one_work+0x132/0x450
+ [<ffffffff8106bbcb>] worker_thread+0x17b/0x3c0
+ [<ffffffff8106ba50>] ? manage_workers+0x120/0x120
+ [<ffffffff81070aee>] kthread+0x9e/0xb0
+ [<ffffffff81514724>] kernel_thread_helper+0x4/0x10
+ [<ffffffff81070a50>] ? kthread_freezable_should_stop+0x70/0x70
+ [<ffffffff81514720>] ? gs_change+0x13/0x13
+Code: f3 49 89 d4 45 85 ed 4d 89 c6 48 8b 0f 74 48 48 85 c9 75 17 eb 41
+0f 1f 80 00 00 00 00 41 83 ed 01 4c 89 f9 74 22 4d 85 ff 74 1d <4c> 8b
+79 08 4c 89 e2 48 89 de 48 89 cf ff 11 4d 85 f6 74 04 41
+RIP  [<ffffffff8150eef6>] notifier_call_chain+0x46/0x80
+ RSP <ffff88042868fb20>
+CR2: ffffffffa01af838
+---[ end trace 0100930068e73e6f ]---
+BUG: unable to handle kernel paging request at fffffffffffffff8
+IP: [<ffffffff810705b0>] kthread_data+0x10/0x20
+PGD 1a0d067 PUD 1a0e067 PMD 0
+Oops: 0000 [#2] SMP
+
+Only i7core_edac and sb_edac have such issues because they have more
+than one memory controller which means they have to register mce
+decoder many times.
+
+Signed-off-by: Chen Gong <gong.chen@linux.intel.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+[bwh: Backported to 3.2: drivers call atomic_notifier_chain_{,un}register()
+ directly]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/edac/i7core_edac.c |   15 ++++-----------
+ drivers/edac/sb_edac.c     |   10 ++++------
+ 2 files changed, 8 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
+index 70ad892..b3ccefa 100644
+--- a/drivers/edac/i7core_edac.c
++++ b/drivers/edac/i7core_edac.c
+@@ -1932,12 +1932,6 @@ static int i7core_mce_check_error(struct notifier_block *nb, unsigned long val,
+ 	if (mce->bank != 8)
+ 		return NOTIFY_DONE;
+ 
+-#ifdef CONFIG_SMP
+-	/* Only handle if it is the right mc controller */
+-	if (mce->socketid != pvt->i7core_dev->socket)
+-		return NOTIFY_DONE;
+-#endif
+-
+ 	smp_rmb();
+ 	if ((pvt->mce_out + 1) % MCE_LOG_LEN == pvt->mce_in) {
+ 		smp_wmb();
+@@ -2234,8 +2228,6 @@ static void i7core_unregister_mci(struct i7core_dev *i7core_dev)
+ 	if (pvt->enable_scrub)
+ 		disable_sdram_scrub_setting(mci);
+ 
+-	atomic_notifier_chain_unregister(&x86_mce_decoder_chain, &i7_mce_dec);
+-
+ 	/* Disable EDAC polling */
+ 	i7core_pci_ctl_release(pvt);
+ 
+@@ -2336,8 +2328,6 @@ static int i7core_register_mci(struct i7core_dev *i7core_dev)
+ 	/* DCLK for scrub rate setting */
+ 	pvt->dclk_freq = get_dclk_freq();
+ 
+-	atomic_notifier_chain_register(&x86_mce_decoder_chain, &i7_mce_dec);
+-
+ 	return 0;
+ 
+ fail0:
+@@ -2481,8 +2471,10 @@ static int __init i7core_init(void)
+ 
+ 	pci_rc = pci_register_driver(&i7core_driver);
+ 
+-	if (pci_rc >= 0)
++	if (pci_rc >= 0) {
++		atomic_notifier_chain_register(&x86_mce_decoder_chain, &i7_mce_dec);
+ 		return 0;
++	}
+ 
+ 	i7core_printk(KERN_ERR, "Failed to register device with error %d.\n",
+ 		      pci_rc);
+@@ -2498,6 +2490,7 @@ static void __exit i7core_exit(void)
+ {
+ 	debugf2("MC: " __FILE__ ": %s()\n", __func__);
+ 	pci_unregister_driver(&i7core_driver);
++	atomic_notifier_chain_unregister(&x86_mce_decoder_chain, &i7_mce_dec);
+ }
+ 
+ module_init(i7core_init);
+diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
+index 7a402bf..18a1293 100644
+--- a/drivers/edac/sb_edac.c
++++ b/drivers/edac/sb_edac.c
+@@ -1661,9 +1661,6 @@ static void sbridge_unregister_mci(struct sbridge_dev *sbridge_dev)
+ 	debugf0("MC: " __FILE__ ": %s(): mci = %p, dev = %p\n",
+ 		__func__, mci, &sbridge_dev->pdev[0]->dev);
+ 
+-	atomic_notifier_chain_unregister(&x86_mce_decoder_chain,
+-					 &sbridge_mce_dec);
+-
+ 	/* Remove MC sysfs nodes */
+ 	edac_mc_del_mc(mci->dev);
+ 
+@@ -1731,8 +1728,6 @@ static int sbridge_register_mci(struct sbridge_dev *sbridge_dev)
+ 		goto fail0;
+ 	}
+ 
+-	atomic_notifier_chain_register(&x86_mce_decoder_chain,
+-				       &sbridge_mce_dec);
+ 	return 0;
+ 
+ fail0:
+@@ -1861,8 +1856,10 @@ static int __init sbridge_init(void)
+ 
+ 	pci_rc = pci_register_driver(&sbridge_driver);
+ 
+-	if (pci_rc >= 0)
++	if (pci_rc >= 0) {
++		atomic_notifier_chain_register(&x86_mce_decoder_chain, &sbridge_mce_dec);
+ 		return 0;
++	}
+ 
+ 	sbridge_printk(KERN_ERR, "Failed to register device with error %d.\n",
+ 		      pci_rc);
+@@ -1878,6 +1875,7 @@ static void __exit sbridge_exit(void)
+ {
+ 	debugf2("MC: " __FILE__ ": %s()\n", __func__);
+ 	pci_unregister_driver(&sbridge_driver);
++	atomic_notifier_chain_unregister(&x86_mce_decoder_chain, &sbridge_mce_dec);
+ }
+ 
+ module_init(sbridge_init);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0004-hwrng-atmel-rng-fix-data-valid-check.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0004-hwrng-atmel-rng-fix-data-valid-check.patch
new file mode 100644
index 0000000..85105de
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0004-hwrng-atmel-rng-fix-data-valid-check.patch
@@ -0,0 +1,72 @@
+From 28a0aa72b2ef00a665564ea05846ad22cb3f18ee Mon Sep 17 00:00:00 2001
+From: Peter Korsgaard <jacmet@sunsite.dk>
+Date: Tue, 12 Jun 2012 08:27:04 +0800
+Subject: [PATCH 04/46] hwrng: atmel-rng - fix data valid check
+
+commit c475c06f4bb689d6ad87d7512e036d6dface3160 upstream.
+
+Brown paper bag: Data valid is LSB of the ISR (status register), and NOT
+of ODATA (current random data word)!
+
+With this, rngtest is a lot happier. Before:
+
+rngtest 3
+Copyright (c) 2004 by Henrique de Moraes Holschuh
+This is free software; see the source for copying conditions.  There is NO warr.
+
+rngtest: starting FIPS tests...
+rngtest: bits received from input: 20000032
+rngtest: FIPS 140-2 successes: 3
+rngtest: FIPS 140-2 failures: 997
+rngtest: FIPS 140-2(2001-10-10) Monobit: 604
+rngtest: FIPS 140-2(2001-10-10) Poker: 996
+rngtest: FIPS 140-2(2001-10-10) Runs: 36
+rngtest: FIPS 140-2(2001-10-10) Long run: 0
+rngtest: FIPS 140-2(2001-10-10) Continuous run: 117
+rngtest: input channel speed: (min=622.371; avg=23682.481; max=28224.350)Kibitss
+rngtest: FIPS tests speed: (min=12.361; avg=12.718; max=12.861)Mibits/s
+rngtest: Program run time: 2331696 microsecondsx
+
+After:
+rngtest 3
+Copyright (c) 2004 by Henrique de Moraes Holschuh
+This is free software; see the source for copying conditions.  There is NO warr.
+
+rngtest: starting FIPS tests...
+rngtest: bits received from input: 20000032
+rngtest: FIPS 140-2 successes: 999
+rngtest: FIPS 140-2 failures: 1
+rngtest: FIPS 140-2(2001-10-10) Monobit: 0
+rngtest: FIPS 140-2(2001-10-10) Poker: 0
+rngtest: FIPS 140-2(2001-10-10) Runs: 1
+rngtest: FIPS 140-2(2001-10-10) Long run: 0
+rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
+rngtest: input channel speed: (min=777.363; avg=43588.270; max=47870.711)Kibitss
+rngtest: FIPS tests speed: (min=11.943; avg=12.716; max=12.844)Mibits/s
+rngtest: Program run time: 1955282 microseconds
+
+Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
+Reported-by: George Pontis <GPontis@z9.com>
+Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/char/hw_random/atmel-rng.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
+index 0477982..1b5675b 100644
+--- a/drivers/char/hw_random/atmel-rng.c
++++ b/drivers/char/hw_random/atmel-rng.c
+@@ -34,7 +34,7 @@ static int atmel_trng_read(struct hwrng *rng, void *buf, size_t max,
+ 	u32 *data = buf;
+ 
+ 	/* data ready? */
+-	if (readl(trng->base + TRNG_ODATA) & 1) {
++	if (readl(trng->base + TRNG_ISR) & 1) {
+ 		*data = readl(trng->base + TRNG_ODATA);
+ 		/*
+ 		  ensure data ready is only set again AFTER the next data
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0005-staging-r8712u-Add-new-USB-IDs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0005-staging-r8712u-Add-new-USB-IDs.patch
new file mode 100644
index 0000000..2bc87d7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0005-staging-r8712u-Add-new-USB-IDs.patch
@@ -0,0 +1,32 @@
+From 4f4723008a7461c6840e643bc66fcd92bfbf26b3 Mon Sep 17 00:00:00 2001
+From: Lubomir Schmidt <gentoo.lubomir@googlemail.com>
+Date: Fri, 15 Jun 2012 15:12:17 -0500
+Subject: [PATCH 05/46] staging: r8712u: Add new USB IDs
+
+commit 3026b0e942c65c65c8fc80d391d004228b52b916 upstream.
+
+There are two new devices for this driver.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/staging/rtl8712/usb_intf.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
+index ec41d38..f4b738f 100644
+--- a/drivers/staging/rtl8712/usb_intf.c
++++ b/drivers/staging/rtl8712/usb_intf.c
+@@ -102,6 +102,8 @@ static struct usb_device_id rtl871x_usb_id_tbl[] = {
+ 	/* - */
+ 	{USB_DEVICE(0x20F4, 0x646B)},
+ 	{USB_DEVICE(0x083A, 0xC512)},
++	{USB_DEVICE(0x25D4, 0x4CA1)},
++	{USB_DEVICE(0x25D4, 0x4CAB)},
+ 
+ /* RTL8191SU */
+ 	/* Realtek */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0006-hwmon-applesmc-Limit-key-length-in-warning-messages.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0006-hwmon-applesmc-Limit-key-length-in-warning-messages.patch
new file mode 100644
index 0000000..dc75f16
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0006-hwmon-applesmc-Limit-key-length-in-warning-messages.patch
@@ -0,0 +1,43 @@
+From d94e9fcf553861cd10a1780c6aeaa6a4419ba5ce Mon Sep 17 00:00:00 2001
+From: Henrik Rydberg <rydberg@euromail.se>
+Date: Thu, 7 Jun 2012 04:54:29 -0400
+Subject: [PATCH 06/46] hwmon: (applesmc) Limit key length in warning messages
+
+commit ac852edb47b15900886ba2564eeeb13b3b526e3e upstream.
+
+Key lookups may call read_smc() with a fixed-length key string,
+and if the lookup fails, trailing stack content may appear in the
+kernel log. Fixed with this patch.
+
+Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/hwmon/applesmc.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index 4c07436..d99aa84 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -215,7 +215,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
+ 	int i;
+ 
+ 	if (send_command(cmd) || send_argument(key)) {
+-		pr_warn("%s: read arg fail\n", key);
++		pr_warn("%.4s: read arg fail\n", key);
+ 		return -EIO;
+ 	}
+ 
+@@ -223,7 +223,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
+ 
+ 	for (i = 0; i < len; i++) {
+ 		if (__wait_status(0x05)) {
+-			pr_warn("%s: read data fail\n", key);
++			pr_warn("%.4s: read data fail\n", key);
+ 			return -EIO;
+ 		}
+ 		buffer[i] = inb(APPLESMC_DATA_PORT);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0007-mm-pmd_read_atomic-fix-32bit-PAE-pmd-walk-vs-pmd_pop.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0007-mm-pmd_read_atomic-fix-32bit-PAE-pmd-walk-vs-pmd_pop.patch
new file mode 100644
index 0000000..9cac18d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0007-mm-pmd_read_atomic-fix-32bit-PAE-pmd-walk-vs-pmd_pop.patch
@@ -0,0 +1,218 @@
+From 8bf1709b6925d4e05120bdfed73992d50e7f11bf Mon Sep 17 00:00:00 2001
+From: Andrea Arcangeli <aarcange@redhat.com>
+Date: Tue, 29 May 2012 15:06:49 -0700
+Subject: [PATCH 07/46] mm: pmd_read_atomic: fix 32bit PAE pmd walk vs
+ pmd_populate SMP race condition
+
+commit 26c191788f18129af0eb32a358cdaea0c7479626 upstream.
+
+When holding the mmap_sem for reading, pmd_offset_map_lock should only
+run on a pmd_t that has been read atomically from the pmdp pointer,
+otherwise we may read only half of it leading to this crash.
+
+PID: 11679  TASK: f06e8000  CPU: 3   COMMAND: "do_race_2_panic"
+ #0 [f06a9dd8] crash_kexec at c049b5ec
+ #1 [f06a9e2c] oops_end at c083d1c2
+ #2 [f06a9e40] no_context at c0433ded
+ #3 [f06a9e64] bad_area_nosemaphore at c043401a
+ #4 [f06a9e6c] __do_page_fault at c0434493
+ #5 [f06a9eec] do_page_fault at c083eb45
+ #6 [f06a9f04] error_code (via page_fault) at c083c5d5
+    EAX: 01fb470c EBX: fff35000 ECX: 00000003 EDX: 00000100 EBP:
+    00000000
+    DS:  007b     ESI: 9e201000 ES:  007b     EDI: 01fb4700 GS:  00e0
+    CS:  0060     EIP: c083bc14 ERR: ffffffff EFLAGS: 00010246
+ #7 [f06a9f38] _spin_lock at c083bc14
+ #8 [f06a9f44] sys_mincore at c0507b7d
+ #9 [f06a9fb0] system_call at c083becd
+                         start           len
+    EAX: ffffffda  EBX: 9e200000  ECX: 00001000  EDX: 6228537f
+    DS:  007b      ESI: 00000000  ES:  007b      EDI: 003d0f00
+    SS:  007b      ESP: 62285354  EBP: 62285388  GS:  0033
+    CS:  0073      EIP: 00291416  ERR: 000000da  EFLAGS: 00000286
+
+This should be a longstanding bug affecting x86 32bit PAE without THP.
+Only archs with 64bit large pmd_t and 32bit unsigned long should be
+affected.
+
+With THP enabled the barrier() in pmd_none_or_trans_huge_or_clear_bad()
+would partly hide the bug when the pmd transition from none to stable,
+by forcing a re-read of the *pmd in pmd_offset_map_lock, but when THP is
+enabled a new set of problem arises by the fact could then transition
+freely in any of the none, pmd_trans_huge or pmd_trans_stable states.
+So making the barrier in pmd_none_or_trans_huge_or_clear_bad()
+unconditional isn't good idea and it would be a flakey solution.
+
+This should be fully fixed by introducing a pmd_read_atomic that reads
+the pmd in order with THP disabled, or by reading the pmd atomically
+with cmpxchg8b with THP enabled.
+
+Luckily this new race condition only triggers in the places that must
+already be covered by pmd_none_or_trans_huge_or_clear_bad() so the fix
+is localized there but this bug is not related to THP.
+
+NOTE: this can trigger on x86 32bit systems with PAE enabled with more
+than 4G of ram, otherwise the high part of the pmd will never risk to be
+truncated because it would be zero at all times, in turn so hiding the
+SMP race.
+
+This bug was discovered and fully debugged by Ulrich, quote:
+
+----
+[..]
+pmd_none_or_trans_huge_or_clear_bad() loads the content of edx and
+eax.
+
+    496 static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t
+    *pmd)
+    497 {
+    498         /* depend on compiler for an atomic pmd read */
+    499         pmd_t pmdval = *pmd;
+
+                                // edi = pmd pointer
+0xc0507a74 <sys_mincore+548>:   mov    0x8(%esp),%edi
+...
+                                // edx = PTE page table high address
+0xc0507a84 <sys_mincore+564>:   mov    0x4(%edi),%edx
+...
+                                // eax = PTE page table low address
+0xc0507a8e <sys_mincore+574>:   mov    (%edi),%eax
+
+[..]
+
+Please note that the PMD is not read atomically. These are two "mov"
+instructions where the high order bits of the PMD entry are fetched
+first. Hence, the above machine code is prone to the following race.
+
+-  The PMD entry {high|low} is 0x0000000000000000.
+   The "mov" at 0xc0507a84 loads 0x00000000 into edx.
+
+-  A page fault (on another CPU) sneaks in between the two "mov"
+   instructions and instantiates the PMD.
+
+-  The PMD entry {high|low} is now 0x00000003fda38067.
+   The "mov" at 0xc0507a8e loads 0xfda38067 into eax.
+----
+
+Reported-by: Ulrich Obergfell <uobergfe@redhat.com>
+Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
+Cc: Mel Gorman <mgorman@suse.de>
+Cc: Hugh Dickins <hughd@google.com>
+Cc: Larry Woodman <lwoodman@redhat.com>
+Cc: Petr Matousek <pmatouse@redhat.com>
+Cc: Rik van Riel <riel@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/include/asm/pgtable-3level.h |   50 +++++++++++++++++++++++++++++++++
+ include/asm-generic/pgtable.h         |   22 +++++++++++++--
+ 2 files changed, 70 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/include/asm/pgtable-3level.h b/arch/x86/include/asm/pgtable-3level.h
+index effff47..43876f1 100644
+--- a/arch/x86/include/asm/pgtable-3level.h
++++ b/arch/x86/include/asm/pgtable-3level.h
+@@ -31,6 +31,56 @@ static inline void native_set_pte(pte_t *ptep, pte_t pte)
+ 	ptep->pte_low = pte.pte_low;
+ }
+ 
++#define pmd_read_atomic pmd_read_atomic
++/*
++ * pte_offset_map_lock on 32bit PAE kernels was reading the pmd_t with
++ * a "*pmdp" dereference done by gcc. Problem is, in certain places
++ * where pte_offset_map_lock is called, concurrent page faults are
++ * allowed, if the mmap_sem is hold for reading. An example is mincore
++ * vs page faults vs MADV_DONTNEED. On the page fault side
++ * pmd_populate rightfully does a set_64bit, but if we're reading the
++ * pmd_t with a "*pmdp" on the mincore side, a SMP race can happen
++ * because gcc will not read the 64bit of the pmd atomically. To fix
++ * this all places running pmd_offset_map_lock() while holding the
++ * mmap_sem in read mode, shall read the pmdp pointer using this
++ * function to know if the pmd is null nor not, and in turn to know if
++ * they can run pmd_offset_map_lock or pmd_trans_huge or other pmd
++ * operations.
++ *
++ * Without THP if the mmap_sem is hold for reading, the
++ * pmd can only transition from null to not null while pmd_read_atomic runs.
++ * So there's no need of literally reading it atomically.
++ *
++ * With THP if the mmap_sem is hold for reading, the pmd can become
++ * THP or null or point to a pte (and in turn become "stable") at any
++ * time under pmd_read_atomic, so it's mandatory to read it atomically
++ * with cmpxchg8b.
++ */
++#ifndef CONFIG_TRANSPARENT_HUGEPAGE
++static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
++{
++	pmdval_t ret;
++	u32 *tmp = (u32 *)pmdp;
++
++	ret = (pmdval_t) (*tmp);
++	if (ret) {
++		/*
++		 * If the low part is null, we must not read the high part
++		 * or we can end up with a partial pmd.
++		 */
++		smp_rmb();
++		ret |= ((pmdval_t)*(tmp + 1)) << 32;
++	}
++
++	return (pmd_t) { ret };
++}
++#else /* CONFIG_TRANSPARENT_HUGEPAGE */
++static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
++{
++	return (pmd_t) { atomic64_read((atomic64_t *)pmdp) };
++}
++#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
++
+ static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte)
+ {
+ 	set_64bit((unsigned long long *)(ptep), native_pte_val(pte));
+diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
+index a03c098..831924a 100644
+--- a/include/asm-generic/pgtable.h
++++ b/include/asm-generic/pgtable.h
+@@ -445,6 +445,18 @@ static inline int pmd_write(pmd_t pmd)
+ #endif /* __HAVE_ARCH_PMD_WRITE */
+ #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
+ 
++#ifndef pmd_read_atomic
++static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
++{
++	/*
++	 * Depend on compiler for an atomic pmd read. NOTE: this is
++	 * only going to work, if the pmdval_t isn't larger than
++	 * an unsigned long.
++	 */
++	return *pmdp;
++}
++#endif
++
+ /*
+  * This function is meant to be used by sites walking pagetables with
+  * the mmap_sem hold in read mode to protect against MADV_DONTNEED and
+@@ -458,11 +470,17 @@ static inline int pmd_write(pmd_t pmd)
+  * undefined so behaving like if the pmd was none is safe (because it
+  * can return none anyway). The compiler level barrier() is critically
+  * important to compute the two checks atomically on the same pmdval.
++ *
++ * For 32bit kernels with a 64bit large pmd_t this automatically takes
++ * care of reading the pmd atomically to avoid SMP race conditions
++ * against pmd_populate() when the mmap_sem is hold for reading by the
++ * caller (a special atomic read not done by "gcc" as in the generic
++ * version above, is also needed when THP is disabled because the page
++ * fault can populate the pmd from under us).
+  */
+ static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd)
+ {
+-	/* depend on compiler for an atomic pmd read */
+-	pmd_t pmdval = *pmd;
++	pmd_t pmdval = pmd_read_atomic(pmd);
+ 	/*
+ 	 * The barrier will stabilize the pmdval in a register or on
+ 	 * the stack so that it will stop changing under the code.
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0008-thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0008-thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit.patch
new file mode 100644
index 0000000..79be9e0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0008-thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit.patch
@@ -0,0 +1,125 @@
+From dcfb4634621189a74522dee4d0dab8b5c1786b02 Mon Sep 17 00:00:00 2001
+From: Andrea Arcangeli <aarcange@redhat.com>
+Date: Wed, 20 Jun 2012 12:52:57 -0700
+Subject: [PATCH 08/46] thp: avoid atomic64_read in pmd_read_atomic for 32bit
+ PAE
+
+commit e4eed03fd06578571c01d4f1478c874bb432c815 upstream.
+
+In the x86 32bit PAE CONFIG_TRANSPARENT_HUGEPAGE=y case while holding the
+mmap_sem for reading, cmpxchg8b cannot be used to read pmd contents under
+Xen.
+
+So instead of dealing only with "consistent" pmdvals in
+pmd_none_or_trans_huge_or_clear_bad() (which would be conceptually
+simpler) we let pmd_none_or_trans_huge_or_clear_bad() deal with pmdvals
+where the low 32bit and high 32bit could be inconsistent (to avoid having
+to use cmpxchg8b).
+
+The only guarantee we get from pmd_read_atomic is that if the low part of
+the pmd was found null, the high part will be null too (so the pmd will be
+considered unstable).  And if the low part of the pmd is found "stable"
+later, then it means the whole pmd was read atomically (because after a
+pmd is stable, neither MADV_DONTNEED nor page faults can alter it anymore,
+and we read the high part after the low part).
+
+In the 32bit PAE x86 case, it is enough to read the low part of the pmdval
+atomically to declare the pmd as "stable" and that's true for THP and no
+THP, furthermore in the THP case we also have a barrier() that will
+prevent any inconsistent pmdvals to be cached by a later re-read of the
+*pmd.
+
+Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
+Cc: Jonathan Nieder <jrnieder@gmail.com>
+Cc: Ulrich Obergfell <uobergfe@redhat.com>
+Cc: Mel Gorman <mgorman@suse.de>
+Cc: Hugh Dickins <hughd@google.com>
+Cc: Larry Woodman <lwoodman@redhat.com>
+Cc: Petr Matousek <pmatouse@redhat.com>
+Cc: Rik van Riel <riel@redhat.com>
+Cc: Jan Beulich <jbeulich@suse.com>
+Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tested-by: Andrew Jones <drjones@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/include/asm/pgtable-3level.h |   30 +++++++++++++++++-------------
+ include/asm-generic/pgtable.h         |   10 ++++++++++
+ 2 files changed, 27 insertions(+), 13 deletions(-)
+
+diff --git a/arch/x86/include/asm/pgtable-3level.h b/arch/x86/include/asm/pgtable-3level.h
+index 43876f1..cb00ccc 100644
+--- a/arch/x86/include/asm/pgtable-3level.h
++++ b/arch/x86/include/asm/pgtable-3level.h
+@@ -47,16 +47,26 @@ static inline void native_set_pte(pte_t *ptep, pte_t pte)
+  * they can run pmd_offset_map_lock or pmd_trans_huge or other pmd
+  * operations.
+  *
+- * Without THP if the mmap_sem is hold for reading, the
+- * pmd can only transition from null to not null while pmd_read_atomic runs.
+- * So there's no need of literally reading it atomically.
++ * Without THP if the mmap_sem is hold for reading, the pmd can only
++ * transition from null to not null while pmd_read_atomic runs. So
++ * we can always return atomic pmd values with this function.
+  *
+  * With THP if the mmap_sem is hold for reading, the pmd can become
+- * THP or null or point to a pte (and in turn become "stable") at any
+- * time under pmd_read_atomic, so it's mandatory to read it atomically
+- * with cmpxchg8b.
++ * trans_huge or none or point to a pte (and in turn become "stable")
++ * at any time under pmd_read_atomic. We could read it really
++ * atomically here with a atomic64_read for the THP enabled case (and
++ * it would be a whole lot simpler), but to avoid using cmpxchg8b we
++ * only return an atomic pmdval if the low part of the pmdval is later
++ * found stable (i.e. pointing to a pte). And we're returning a none
++ * pmdval if the low part of the pmd is none. In some cases the high
++ * and low part of the pmdval returned may not be consistent if THP is
++ * enabled (the low part may point to previously mapped hugepage,
++ * while the high part may point to a more recently mapped hugepage),
++ * but pmd_none_or_trans_huge_or_clear_bad() only needs the low part
++ * of the pmd to be read atomically to decide if the pmd is unstable
++ * or not, with the only exception of when the low part of the pmd is
++ * zero in which case we return a none pmd.
+  */
+-#ifndef CONFIG_TRANSPARENT_HUGEPAGE
+ static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
+ {
+ 	pmdval_t ret;
+@@ -74,12 +84,6 @@ static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
+ 
+ 	return (pmd_t) { ret };
+ }
+-#else /* CONFIG_TRANSPARENT_HUGEPAGE */
+-static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
+-{
+-	return (pmd_t) { atomic64_read((atomic64_t *)pmdp) };
+-}
+-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
+ 
+ static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte)
+ {
+diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
+index 831924a..bc00876 100644
+--- a/include/asm-generic/pgtable.h
++++ b/include/asm-generic/pgtable.h
+@@ -484,6 +484,16 @@ static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd)
+ 	/*
+ 	 * The barrier will stabilize the pmdval in a register or on
+ 	 * the stack so that it will stop changing under the code.
++	 *
++	 * When CONFIG_TRANSPARENT_HUGEPAGE=y on x86 32bit PAE,
++	 * pmd_read_atomic is allowed to return a not atomic pmdval
++	 * (for example pointing to an hugepage that has never been
++	 * mapped in the pmd). The below checks will only care about
++	 * the low part of the pmd with 32bit PAE x86 anyway, with the
++	 * exception of pmd_none(). So the important thing is that if
++	 * the low part of the pmd is found null, the high part will
++	 * be also null or the pmd_none() check below would be
++	 * confused.
+ 	 */
+ #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+ 	barrier();
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0009-nilfs2-ensure-proper-cache-clearing-for-gc-inodes.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0009-nilfs2-ensure-proper-cache-clearing-for-gc-inodes.patch
new file mode 100644
index 0000000..4cfe490
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0009-nilfs2-ensure-proper-cache-clearing-for-gc-inodes.patch
@@ -0,0 +1,71 @@
+From c1a7e61b722c55f0bbbe234d8f16ab19882a0c6b Mon Sep 17 00:00:00 2001
+From: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
+Date: Wed, 20 Jun 2012 12:52:57 -0700
+Subject: [PATCH 09/46] nilfs2: ensure proper cache clearing for gc-inodes
+
+commit fbb24a3a915f105016f1c828476be11aceac8504 upstream.
+
+A gc-inode is a pseudo inode used to buffer the blocks to be moved by
+garbage collection.
+
+Block caches of gc-inodes must be cleared every time a garbage collection
+function (nilfs_clean_segments) completes.  Otherwise, stale blocks
+buffered in the caches may be wrongly reused in successive calls of the GC
+function.
+
+For user files, this is not a problem because their gc-inodes are
+distinguished by a checkpoint number as well as an inode number.  They
+never buffer different blocks if either an inode number, a checkpoint
+number, or a block offset differs.
+
+However, gc-inodes of sufile, cpfile and DAT file can store different data
+for the same block offset.  Thus, the nilfs_clean_segments function can
+move incorrect block for these meta-data files if an old block is cached.
+I found this is really causing meta-data corruption in nilfs.
+
+This fixes the issue by ensuring cache clear of gc-inodes and resolves
+reported GC problems including checkpoint file corruption, b-tree
+corruption, and the following warning during GC.
+
+  nilfs_palloc_freev: entry number 307234 already freed.
+  ...
+
+Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
+Tested-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/nilfs2/gcinode.c |    2 ++
+ fs/nilfs2/segment.c |    2 ++
+ 2 files changed, 4 insertions(+)
+
+diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c
+index 08a07a2..57ceaf3 100644
+--- a/fs/nilfs2/gcinode.c
++++ b/fs/nilfs2/gcinode.c
+@@ -191,6 +191,8 @@ void nilfs_remove_all_gcinodes(struct the_nilfs *nilfs)
+ 	while (!list_empty(head)) {
+ 		ii = list_first_entry(head, struct nilfs_inode_info, i_dirty);
+ 		list_del_init(&ii->i_dirty);
++		truncate_inode_pages(&ii->vfs_inode.i_data, 0);
++		nilfs_btnode_cache_clear(&ii->i_btnode_cache);
+ 		iput(&ii->vfs_inode);
+ 	}
+ }
+diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
+index bb24ab6..6f24e67 100644
+--- a/fs/nilfs2/segment.c
++++ b/fs/nilfs2/segment.c
+@@ -2309,6 +2309,8 @@ nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head)
+ 		if (!test_bit(NILFS_I_UPDATED, &ii->i_state))
+ 			continue;
+ 		list_del_init(&ii->i_dirty);
++		truncate_inode_pages(&ii->vfs_inode.i_data, 0);
++		nilfs_btnode_cache_clear(&ii->i_btnode_cache);
+ 		iput(&ii->vfs_inode);
+ 	}
+ }
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0010-drm-i915-Finish-any-pending-operations-on-the-frameb.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0010-drm-i915-Finish-any-pending-operations-on-the-frameb.patch
new file mode 100644
index 0000000..9d0f37e
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0010-drm-i915-Finish-any-pending-operations-on-the-frameb.patch
@@ -0,0 +1,130 @@
+From 4c0724b407a2c71dbb932d74363e386f798dca61 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 3 Apr 2012 17:58:35 +0100
+Subject: [PATCH 10/46] drm/i915: Finish any pending operations on the
+ framebuffer before disabling
+
+Similar to the case where we are changing from one framebuffer to
+another, we need to be sure that there are no pending WAIT_FOR_EVENTs on
+the pipe for the current framebuffer before switching. If we disable the
+pipe, and then try to execute a WAIT_FOR_EVENT it will block
+indefinitely and cause a GPU hang.
+
+We attempted to fix this in commit 85345517fe6d4de27b0d6ca19fef9d28ac947c4a
+(drm/i915: Retire any pending operations on the old scanout when switching)
+for the case of mode switching, but this leaves the condition where we
+are switching off the pipe vulnerable.
+
+There still remains the race condition were a display may be unplugged,
+switched off by the core, a uevent sent to notify the DDX and the DDX
+may issue a WAIT_FOR_EVENT before it processes the uevent. This window
+does not exist if the pipe is only switched off in response to the
+uevent. Time to make sure that is so...
+
+Reported-by: Francis Leblanc <Francis.Leblanc-Lebeau@verint.com>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=36515
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45413
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+[danvet: fixup spelling in comment, noticed by Eugeni.]
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+(cherry picked from commit 14667a4bde4361b7ac420d68a2e9e9b9b2df5231)
+Signed-off-by: Timo Aaltonen <timo.aaltonen@canonical.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_display.c |   65 ++++++++++++++++++++++++----------
+ 1 file changed, 46 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 5c1cdb8..6aa7716 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -2187,6 +2187,33 @@ intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ }
+ 
+ static int
++intel_finish_fb(struct drm_framebuffer *old_fb)
++{
++	struct drm_i915_gem_object *obj = to_intel_framebuffer(old_fb)->obj;
++	struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
++	bool was_interruptible = dev_priv->mm.interruptible;
++	int ret;
++
++	wait_event(dev_priv->pending_flip_queue,
++		   atomic_read(&dev_priv->mm.wedged) ||
++		   atomic_read(&obj->pending_flip) == 0);
++
++	/* Big Hammer, we also need to ensure that any pending
++	 * MI_WAIT_FOR_EVENT inside a user batch buffer on the
++	 * current scanout is retired before unpinning the old
++	 * framebuffer.
++	 *
++	 * This should only fail upon a hung GPU, in which case we
++	 * can safely continue.
++	 */
++	dev_priv->mm.interruptible = false;
++	ret = i915_gem_object_finish_gpu(obj);
++	dev_priv->mm.interruptible = was_interruptible;
++
++	return ret;
++}
++
++static int
+ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
+ 		    struct drm_framebuffer *old_fb)
+ {
+@@ -2224,25 +2251,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
+ 		return ret;
+ 	}
+ 
+-	if (old_fb) {
+-		struct drm_i915_private *dev_priv = dev->dev_private;
+-		struct drm_i915_gem_object *obj = to_intel_framebuffer(old_fb)->obj;
+-
+-		wait_event(dev_priv->pending_flip_queue,
+-			   atomic_read(&dev_priv->mm.wedged) ||
+-			   atomic_read(&obj->pending_flip) == 0);
+-
+-		/* Big Hammer, we also need to ensure that any pending
+-		 * MI_WAIT_FOR_EVENT inside a user batch buffer on the
+-		 * current scanout is retired before unpinning the old
+-		 * framebuffer.
+-		 *
+-		 * This should only fail upon a hung GPU, in which case we
+-		 * can safely continue.
+-		 */
+-		ret = i915_gem_object_finish_gpu(obj);
+-		(void) ret;
+-	}
++	if (old_fb)
++		intel_finish_fb(old_fb);
+ 
+ 	ret = intel_pipe_set_base_atomic(crtc, crtc->fb, x, y,
+ 					 LEAVE_ATOMIC_MODE_SET);
+@@ -3312,6 +3322,23 @@ static void intel_crtc_disable(struct drm_crtc *crtc)
+ 	struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+ 	struct drm_device *dev = crtc->dev;
+ 
++	/* Flush any pending WAITs before we disable the pipe. Note that
++	 * we need to drop the struct_mutex in order to acquire it again
++	 * during the lowlevel dpms routines around a couple of the
++	 * operations. It does not look trivial nor desirable to move
++	 * that locking higher. So instead we leave a window for the
++	 * submission of further commands on the fb before we can actually
++	 * disable it. This race with userspace exists anyway, and we can
++	 * only rely on the pipe being disabled by userspace after it
++	 * receives the hotplug notification and has flushed any pending
++	 * batches.
++	 */
++	if (crtc->fb) {
++		mutex_lock(&dev->struct_mutex);
++		intel_finish_fb(crtc->fb);
++		mutex_unlock(&dev->struct_mutex);
++	}
++
+ 	crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
+ 
+ 	if (crtc->fb) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0011-drm-i915-Remove-use-of-the-autoreported-ringbuffer-H.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0011-drm-i915-Remove-use-of-the-autoreported-ringbuffer-H.patch
new file mode 100644
index 0000000..ad69a94
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0011-drm-i915-Remove-use-of-the-autoreported-ringbuffer-H.patch
@@ -0,0 +1,84 @@
+From 7e3ac17c5a78a999c5932d6617f63a6ca7cf91b0 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Wed, 8 Feb 2012 13:34:13 +0000
+Subject: [PATCH 11/46] drm/i915: Remove use of the autoreported ringbuffer
+ HEAD position
+
+This is a revert of 6aa56062eaba67adfb247cded244fd877329588d.
+
+This was originally introduced to workaround reads of the ringbuffer
+registers returning 0 on SandyBridge causing hangs due to ringbuffer
+overflow. The root cause here was reads through the GT powerwell require
+the forcewake dance, something we only learnt of later. Now it appears
+that reading the reported head position from the HWS is returning
+garbage, leading once again to hangs.
+
+For example, on q35 the autoreported head reports:
+  [  217.975608] head now 00010000, actual 00010000
+  [  436.725613] head now 00200000, actual 00200000
+  [  462.956033] head now 00210000, actual 00210010
+  [  485.501409] head now 00400000, actual 00400020
+  [  508.064280] head now 00410000, actual 00410000
+  [  530.576078] head now 00600000, actual 00600020
+  [  553.273489] head now 00610000, actual 00610018
+which appears reasonably sane. In contrast, if we look at snb:
+  [  141.970680] head now 00e10000, actual 00008238
+  [  141.974062] head now 02734000, actual 000083c8
+  [  141.974425] head now 00e10000, actual 00008488
+  [  141.980374] head now 032b5000, actual 000088b8
+  [  141.980885] head now 03271000, actual 00008950
+  [  142.040628] head now 02101000, actual 00008b40
+  [  142.180173] head now 02734000, actual 00009050
+  [  142.181090] head now 00000000, actual 00000ae0
+  [  142.183737] head now 02734000, actual 00009050
+
+In addition, the automatic reporting of the head position is scheduled
+to be defeatured in the future. It has no more utility, remove it.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45492
+Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Tested-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+(cherry picked from commit 5d031e5b633d910f35e6e0abce94d9d842390006)
+Signed-off-by: Timo Aaltonen <timo.aaltonen@canonical.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/intel_ringbuffer.c |   14 +-------------
+ 1 file changed, 1 insertion(+), 13 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
+index 933e66b..f6613dc 100644
+--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
++++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
+@@ -306,7 +306,7 @@ static int init_ring_common(struct intel_ring_buffer *ring)
+ 
+ 	I915_WRITE_CTL(ring,
+ 			((ring->size - PAGE_SIZE) & RING_NR_PAGES)
+-			| RING_REPORT_64K | RING_VALID);
++			| RING_VALID);
+ 
+ 	/* If the head is still not zero, the ring is dead */
+ 	if ((I915_READ_CTL(ring) & RING_VALID) == 0 ||
+@@ -1157,18 +1157,6 @@ int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
+ 	struct drm_device *dev = ring->dev;
+ 	struct drm_i915_private *dev_priv = dev->dev_private;
+ 	unsigned long end;
+-	u32 head;
+-
+-	/* If the reported head position has wrapped or hasn't advanced,
+-	 * fallback to the slow and accurate path.
+-	 */
+-	head = intel_read_status_page(ring, 4);
+-	if (head > ring->head) {
+-		ring->head = head;
+-		ring->space = ring_space(ring);
+-		if (ring->space >= n)
+-			return 0;
+-	}
+ 
+ 	trace_i915_ring_wait_begin(ring);
+ 	end = jiffies + 3 * HZ;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0012-e1000e-Disable-ASPM-L1-on-82574.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0012-e1000e-Disable-ASPM-L1-on-82574.patch
new file mode 100644
index 0000000..b47746d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0012-e1000e-Disable-ASPM-L1-on-82574.patch
@@ -0,0 +1,41 @@
+From 7bc45fa1ef48339e44c48d53e0cdb9d0d4e33d43 Mon Sep 17 00:00:00 2001
+From: Chris Boot <bootc@bootc.net>
+Date: Tue, 24 Apr 2012 07:24:52 +0000
+Subject: [PATCH 12/46] e1000e: Disable ASPM L1 on 82574
+
+commit id d4a4206ebbaf48b55803a7eb34e330530d83a889
+
+ASPM on the 82574 causes trouble. Currently the driver disables L0s for
+this NIC but only disables L1 if the MTU is >1500. This patch simply
+causes L1 to be disabled regardless of the MTU setting.
+
+Signed-off-by: Chris Boot <bootc@bootc.net>
+Cc: "Wyborny, Carolyn" <carolyn.wyborny@intel.com>
+Cc: Nix <nix@esperi.org.uk>
+Link: https://lkml.org/lkml/2012/3/19/362
+Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
+[Jeff Kirsher: Backport to 3.2-3.4 kernels]
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/intel/e1000e/82571.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
+index a3e65fd..e556fc3 100644
+--- a/drivers/net/ethernet/intel/e1000e/82571.c
++++ b/drivers/net/ethernet/intel/e1000e/82571.c
+@@ -2080,8 +2080,9 @@ const struct e1000_info e1000_82574_info = {
+ 				  | FLAG_HAS_SMART_POWER_DOWN
+ 				  | FLAG_HAS_AMT
+ 				  | FLAG_HAS_CTRLEXT_ON_LOAD,
+-	.flags2			  = FLAG2_CHECK_PHY_HANG
++	.flags2			= FLAG2_CHECK_PHY_HANG
+ 				  | FLAG2_DISABLE_ASPM_L0S
++				  | FLAG2_DISABLE_ASPM_L1
+ 				  | FLAG2_NO_DISABLE_RX,
+ 	.pba			= 32,
+ 	.max_hw_frame_size	= DEFAULT_JUMBO,
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0013-e1000e-Remove-special-case-for-82573-82574-ASPM-L1-d.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0013-e1000e-Remove-special-case-for-82573-82574-ASPM-L1-d.patch
new file mode 100644
index 0000000..3eeacc0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0013-e1000e-Remove-special-case-for-82573-82574-ASPM-L1-d.patch
@@ -0,0 +1,43 @@
+From 51d8e7091033042d3ae09363abe5e93d0698930e Mon Sep 17 00:00:00 2001
+From: Chris Boot <bootc@bootc.net>
+Date: Tue, 24 Apr 2012 07:24:58 +0000
+Subject: [PATCH 13/46] e1000e: Remove special case for 82573/82574 ASPM L1
+ disablement
+
+commit 59aed95263bdd0e2b48eb9be5a94346d2d4abf90 upstream.
+
+For the 82573, ASPM L1 gets disabled wholesale so this special-case code
+is not required. For the 82574 the previous patch does the same as for
+the 82573, disabling L1 on the adapter. Thus, this code is no longer
+required and can be removed.
+
+Signed-off-by: Chris Boot <bootc@bootc.net>
+Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/intel/e1000e/netdev.c |    8 --------
+ 1 file changed, 8 deletions(-)
+
+diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
+index 4e933d1..64d3f98 100644
+--- a/drivers/net/ethernet/intel/e1000e/netdev.c
++++ b/drivers/net/ethernet/intel/e1000e/netdev.c
+@@ -5132,14 +5132,6 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
+ 		return -EINVAL;
+ 	}
+ 
+-	/* 82573 Errata 17 */
+-	if (((adapter->hw.mac.type == e1000_82573) ||
+-	     (adapter->hw.mac.type == e1000_82574)) &&
+-	    (max_frame > ETH_FRAME_LEN + ETH_FCS_LEN)) {
+-		adapter->flags2 |= FLAG2_DISABLE_ASPM_L1;
+-		e1000e_disable_aspm(adapter->pdev, PCIE_LINK_STATE_L1);
+-	}
+-
+ 	while (test_and_set_bit(__E1000_RESETTING, &adapter->state))
+ 		usleep_range(1000, 2000);
+ 	/* e1000e_down -> e1000e_reset dependent on max_frame_size & mtu */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0014-drm-i915-Do-the-fallback-non-IRQ-wait-in-ring-thrott.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0014-drm-i915-Do-the-fallback-non-IRQ-wait-in-ring-thrott.patch
new file mode 100644
index 0000000..3601ef4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0014-drm-i915-Do-the-fallback-non-IRQ-wait-in-ring-thrott.patch
@@ -0,0 +1,39 @@
+From f00febe1475d06993b3f723ece375388dcf3bb9b Mon Sep 17 00:00:00 2001
+From: Eric Anholt <eric@anholt.net>
+Date: Thu, 22 Dec 2011 14:54:59 -0800
+Subject: [PATCH 14/46] drm/i915: Do the fallback non-IRQ wait in ring
+ throttle, too.
+
+commit 7ea29b13e5e3e1e61e612349eb0366efdb6457f3 upstream.
+
+As a workaround for IRQ synchronization issues in the gen7 BLT ring,
+we want to turn the two wait functions into polling loops.
+
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Tested-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
+Acked-by: Kenneth Graunke <kenneth@whitecape.org>
+Signed-off-by: Keith Packard <keithp@keithp.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_gem.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 3e7c478..3e2edc6 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -3312,6 +3312,10 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
+ 
+ 			if (ret == 0 && atomic_read(&dev_priv->mm.wedged))
+ 				ret = -EIO;
++		} else if (wait_for(i915_seqno_passed(ring->get_seqno(ring),
++						      seqno) ||
++				    atomic_read(&dev_priv->mm.wedged), 3000)) {
++			ret = -EBUSY;
+ 		}
+ 	}
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0015-staging-rts_pstor-Fix-possible-panic-by-NULL-pointer.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0015-staging-rts_pstor-Fix-possible-panic-by-NULL-pointer.patch
new file mode 100644
index 0000000..bfe82b6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0015-staging-rts_pstor-Fix-possible-panic-by-NULL-pointer.patch
@@ -0,0 +1,72 @@
+From 1c17511004913ab88dd06ac7df912125a97ea2c3 Mon Sep 17 00:00:00 2001
+From: wwang <wei_wang@realsil.com.cn>
+Date: Tue, 27 Mar 2012 16:43:11 +0800
+Subject: [PATCH 15/46] staging:rts_pstor:Fix possible panic by NULL pointer
+ dereference
+
+commit 0d05568ac79bfc595f1eadc3e0fd7a20a45f7b69 upstream.
+
+rtsx_transport.c (rtsx_transfer_sglist_adma_partial):
+pointer struct scatterlist *sg, which is mapped in dma_map_sg,
+is used as an iterator in later transfer operation. It is corrupted and
+passed to dma_unmap_sg, thus causing fatal unmap of some erroneous address.
+Fix it by duplicating *sg_ptr for iterating.
+
+Signed-off-by: wwang <wei_wang@realsil.com.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/staging/rts_pstor/rtsx_transport.c |   11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/staging/rts_pstor/rtsx_transport.c b/drivers/staging/rts_pstor/rtsx_transport.c
+index 4e3d2c1..9b2e5c9 100644
+--- a/drivers/staging/rts_pstor/rtsx_transport.c
++++ b/drivers/staging/rts_pstor/rtsx_transport.c
+@@ -335,6 +335,7 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
+ 	int sg_cnt, i, resid;
+ 	int err = 0;
+ 	long timeleft;
++	struct scatterlist *sg_ptr;
+ 	u32 val = TRIG_DMA;
+ 
+ 	if ((sg == NULL) || (num_sg <= 0) || !offset || !index)
+@@ -371,7 +372,7 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
+ 	sg_cnt = dma_map_sg(&(rtsx->pci->dev), sg, num_sg, dma_dir);
+ 
+ 	resid = size;
+-
++	sg_ptr = sg;
+ 	chip->sgi = 0;
+ 	/* Usually the next entry will be @sg@ + 1, but if this sg element
+ 	 * is part of a chained scatterlist, it could jump to the start of
+@@ -379,14 +380,14 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
+ 	 * the proper sg
+ 	 */
+ 	for (i = 0; i < *index; i++)
+-		sg = sg_next(sg);
++		sg_ptr = sg_next(sg_ptr);
+ 	for (i = *index; i < sg_cnt; i++) {
+ 		dma_addr_t addr;
+ 		unsigned int len;
+ 		u8 option;
+ 
+-		addr = sg_dma_address(sg);
+-		len = sg_dma_len(sg);
++		addr = sg_dma_address(sg_ptr);
++		len = sg_dma_len(sg_ptr);
+ 
+ 		RTSX_DEBUGP("DMA addr: 0x%x, Len: 0x%x\n",
+ 			     (unsigned int)addr, len);
+@@ -415,7 +416,7 @@ static int rtsx_transfer_sglist_adma_partial(struct rtsx_chip *chip, u8 card,
+ 		if (!resid)
+ 			break;
+ 
+-		sg = sg_next(sg);
++		sg_ptr = sg_next(sg_ptr);
+ 	}
+ 
+ 	RTSX_DEBUGP("SG table count = %d\n", chip->sgi);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0016-gspca-core-Fix-buffers-staying-in-queued-state-after.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0016-gspca-core-Fix-buffers-staying-in-queued-state-after.patch
new file mode 100644
index 0000000..152c0d5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0016-gspca-core-Fix-buffers-staying-in-queued-state-after.patch
@@ -0,0 +1,45 @@
+From f9f47b15a0eb3d8ae86f5d034fd8924ab258a4d2 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Tue, 22 May 2012 11:24:05 -0300
+Subject: [PATCH 16/46] gspca-core: Fix buffers staying in queued state after
+ a stream_off
+
+commit af05ef01e9cde84620c6855a8d8ab9c8a1db9009 upstream.
+
+This fixes a regression introduced by commit f7059ea and should be
+backported to all supported stable kernels which have this commit.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Tested-by: Antonio Ospite <ospite@studenti.unina.it>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/media/video/gspca/gspca.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c
+index 2ca10df..981501f 100644
+--- a/drivers/media/video/gspca/gspca.c
++++ b/drivers/media/video/gspca/gspca.c
+@@ -1697,7 +1697,7 @@ static int vidioc_streamoff(struct file *file, void *priv,
+ 				enum v4l2_buf_type buf_type)
+ {
+ 	struct gspca_dev *gspca_dev = priv;
+-	int ret;
++	int i, ret;
+ 
+ 	if (buf_type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+ 		return -EINVAL;
+@@ -1728,6 +1728,8 @@ static int vidioc_streamoff(struct file *file, void *priv,
+ 	wake_up_interruptible(&gspca_dev->wq);
+ 
+ 	/* empty the transfer queues */
++	for (i = 0; i < gspca_dev->nframes; i++)
++		gspca_dev->frame[i].v4l2_buf.flags &= ~BUF_ALL_FLAGS;
+ 	atomic_set(&gspca_dev->fr_q, 0);
+ 	atomic_set(&gspca_dev->fr_i, 0);
+ 	gspca_dev->fr_o = 0;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0017-smsusb-add-autodetection-support-for-USB-ID-2040-f5a.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0017-smsusb-add-autodetection-support-for-USB-ID-2040-f5a.patch
new file mode 100644
index 0000000..84e2eb9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0017-smsusb-add-autodetection-support-for-USB-ID-2040-f5a.patch
@@ -0,0 +1,30 @@
+From ac5a4cc2f5d46f744484e577f41441acdbb0a68b Mon Sep 17 00:00:00 2001
+From: Michael Krufky <mkrufky@linuxtv.org>
+Date: Fri, 25 May 2012 09:29:12 -0300
+Subject: [PATCH 17/46] smsusb: add autodetection support for USB ID 2040:f5a0
+
+commit 3e1141e2ce5667301a74ca2ef396d9bd5e995f7f upstream.
+
+Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/media/dvb/siano/smsusb.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/media/dvb/siano/smsusb.c b/drivers/media/dvb/siano/smsusb.c
+index b7d1e3e..fb68805 100644
+--- a/drivers/media/dvb/siano/smsusb.c
++++ b/drivers/media/dvb/siano/smsusb.c
+@@ -544,6 +544,8 @@ static const struct usb_device_id smsusb_id_table[] __devinitconst = {
+ 		.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
+ 	{ USB_DEVICE(0x2040, 0xc0a0),
+ 		.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
++	{ USB_DEVICE(0x2040, 0xf5a0),
++		.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
+ 	{ } /* Terminating entry */
+ 	};
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0018-drm-edid-don-t-return-stack-garbage-from-supports_rb.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0018-drm-edid-don-t-return-stack-garbage-from-supports_rb.patch
new file mode 100644
index 0000000..87ce7d9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0018-drm-edid-don-t-return-stack-garbage-from-supports_rb.patch
@@ -0,0 +1,36 @@
+From 2d6a30faab149fe943e5648ef8ed9a6de7c112b1 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Tue, 19 Jun 2012 11:33:06 +0200
+Subject: [PATCH 18/46] drm/edid: don't return stack garbage from supports_rb
+
+commit b196a4980ff7bb54db478e2a408dc8b12be15304 upstream.
+
+We need to initialize this to false, because the is_rb callback only
+ever sets it to true.
+
+Noticed while reading through the code.
+
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/drm_edid.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
+index 3e927ce..a1ee634 100644
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -585,7 +585,7 @@ static bool
+ drm_monitor_supports_rb(struct edid *edid)
+ {
+ 	if (edid->revision >= 4) {
+-		bool ret;
++		bool ret = false;
+ 		drm_for_each_detailed_block((u8 *)edid, is_rb, &ret);
+ 		return ret;
+ 	}
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0019-drm-nouveau-fbcon-using-nv_two_heads-is-not-a-good-i.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0019-drm-nouveau-fbcon-using-nv_two_heads-is-not-a-good-i.patch
new file mode 100644
index 0000000..85deab4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0019-drm-nouveau-fbcon-using-nv_two_heads-is-not-a-good-i.patch
@@ -0,0 +1,43 @@
+From 94823f5367fcb795a9e2d263b23c600ffa1b465f Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Tue, 26 Jun 2012 12:12:30 +1000
+Subject: [PATCH 19/46] drm/nouveau/fbcon: using nv_two_heads is not a good
+ idea
+
+commit 9bd0c15fcfb42f6245447c53347d65ad9e72080b upstream.
+
+nv_two_heads() was never meant to be used outside of pre-nv50 code.  The
+code checks for >= NV_10 for 2 CRTCs, then downgrades a few specific
+chipsets to 1 CRTC based on (pci_device & 0x0ff0).
+
+The breakage example seen is on GTX 560Ti, with a pciid of 0x1200, which
+gets detected as an NV20 (0x020x) with 1 CRTC by nv_two_heads(), causing
+memory corruption because there's actually 2 CRTCs..
+
+This switches fbcon to use the CRTC count directly from the mode_config
+structure, which will also fix the same issue on Kepler boards which have
+4 CRTCs.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/nouveau/nouveau_fbcon.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+index 3a4cc32..cc0801d 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
++++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+@@ -499,7 +499,7 @@ int nouveau_fbcon_init(struct drm_device *dev)
+ 	nfbdev->helper.funcs = &nouveau_fbcon_helper_funcs;
+ 
+ 	ret = drm_fb_helper_init(dev, &nfbdev->helper,
+-				 nv_two_heads(dev) ? 2 : 1, 4);
++				 dev->mode_config.num_crtc, 4);
+ 	if (ret) {
+ 		kfree(nfbdev);
+ 		return ret;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0020-dm-thin-reinstate-missing-mempool_free-in-cell_relea.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0020-dm-thin-reinstate-missing-mempool_free-in-cell_relea.patch
new file mode 100644
index 0000000..725aa12
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0020-dm-thin-reinstate-missing-mempool_free-in-cell_relea.patch
@@ -0,0 +1,55 @@
+From 41466ed94cbd995e8553e3f6bd76b698cdb398ab Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Sat, 12 May 2012 01:43:12 +0100
+Subject: [PATCH 20/46] dm thin: reinstate missing mempool_free in
+ cell_release_singleton
+
+commit 03aaae7cdc71bc306888440b1f569d463e917b6d upstream.
+
+Fix a significant memory leak inadvertently introduced during
+simplification of cell_release_singleton() in commit
+6f94a4c45a6f744383f9f695dde019998db3df55 ("dm thin: fix stacked bi_next
+usage").
+
+A cell's hlist_del() must be accompanied by a mempool_free().
+Use __cell_release() to do this, like before.
+
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/dm-thin.c |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
+index da2f021..532a902 100644
+--- a/drivers/md/dm-thin.c
++++ b/drivers/md/dm-thin.c
+@@ -288,8 +288,10 @@ static void __cell_release(struct cell *cell, struct bio_list *inmates)
+ 
+ 	hlist_del(&cell->list);
+ 
+-	bio_list_add(inmates, cell->holder);
+-	bio_list_merge(inmates, &cell->bios);
++	if (inmates) {
++		bio_list_add(inmates, cell->holder);
++		bio_list_merge(inmates, &cell->bios);
++	}
+ 
+ 	mempool_free(cell, prison->cell_pool);
+ }
+@@ -312,9 +314,10 @@ static void cell_release(struct cell *cell, struct bio_list *bios)
+  */
+ static void __cell_release_singleton(struct cell *cell, struct bio *bio)
+ {
+-	hlist_del(&cell->list);
+ 	BUG_ON(cell->holder != bio);
+ 	BUG_ON(!bio_list_empty(&cell->bios));
++
++	__cell_release(cell, NULL);
+ }
+ 
+ static void cell_release_singleton(struct cell *cell, struct bio *bio)
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0021-ath9k-Fix-a-WARNING-on-suspend-resume-with-IBSS.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0021-ath9k-Fix-a-WARNING-on-suspend-resume-with-IBSS.patch
new file mode 100644
index 0000000..a3917dc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0021-ath9k-Fix-a-WARNING-on-suspend-resume-with-IBSS.patch
@@ -0,0 +1,75 @@
+From 5bd15d249215ca79b080b366616c0a5f1c38904c Mon Sep 17 00:00:00 2001
+From: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Date: Wed, 6 Jun 2012 10:33:10 +0530
+Subject: [PATCH 21/46] ath9k: Fix a WARNING on suspend/resume with IBSS
+
+commit 2031b4c2b4904f7448ab9e4bc6b9bf16e32709f5 upstream.
+
+this patch is dependent on the patch "cfg80211: fix interface
+combinations"
+
+In ath9k currently we have ADHOC interface as a single incompatible
+interface. when drv_add_interface is called during resume we got to
+consider number of vifs already present in addition to checking the
+drivers 'opmode' information about ADHOC.  we incorrectly assume
+an ADHOC interface is already present. Then we may miss some driver
+specific data for the ADHOC interface after resume.
+
+The above mentioned checks can be removed from the driver,
+as the patch 'cfg80211: fix interface combinations' ensures that
+if an interface type is not advertised by the driver in any of the
+interface combinations(via ieee80211_iface_combination) then it shall
+be treated as a single incompatible interface. Fixes the following
+warning on suspend/resume with ibss interface.
+
+        ath: phy0: Cannot create ADHOC interface when other
+        interfaces already exist.
+        WARNING: at net/mac80211/driver-ops.h:12
+        ieee80211_reconfig+0x1882/0x1ca0 [mac80211]()
+        Hardware name: 2842RK1
+        wlan2:  Failed check-sdata-in-driver check, flags: 0x0
+
+        Call Trace:
+        [<c01361b2>] warn_slowpath_common+0x72/0xa0
+        [<f8aaa7c2>] ? ieee80211_reconfig+0x1882/0x1ca0
+        [mac80211]
+        [<f8aaa7c2>] ? ieee80211_reconfig+0x1882/0x1ca0
+        [mac80211]
+        [<c0136283>] warn_slowpath_fmt+0x33/0x40
+        [<f8aaa7c2>] ieee80211_reconfig+0x1882/0x1ca0 [mac80211]
+        [<c06c1d1a>] ? mutex_lock_nested+0x23a/0x2f0
+        [<f8a95097>] ieee80211_resume+0x27/0x70 [mac80211]
+        [<fd177edf>] wiphy_resume+0x8f/0xa0 [cfg80211]
+
+Cc: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/ath/ath9k/main.c |    9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
+index f76a814..5b22ecd 100644
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -1486,15 +1486,6 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
+ 		}
+ 	}
+ 
+-	if ((ah->opmode == NL80211_IFTYPE_ADHOC) ||
+-	    ((vif->type == NL80211_IFTYPE_ADHOC) &&
+-	     sc->nvifs > 0)) {
+-		ath_err(common, "Cannot create ADHOC interface when other"
+-			" interfaces already exist.\n");
+-		ret = -EINVAL;
+-		goto out;
+-	}
+-
+ 	ath_dbg(common, ATH_DBG_CONFIG,
+ 		"Attach a VIF of type: %d\n", vif->type);
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0022-cfg80211-fix-potential-deadlock-in-regulatory.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0022-cfg80211-fix-potential-deadlock-in-regulatory.patch
new file mode 100644
index 0000000..fe1bc4b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0022-cfg80211-fix-potential-deadlock-in-regulatory.patch
@@ -0,0 +1,144 @@
+From 76f7c2172698cade04f33c7f8841b641c95ddeda Mon Sep 17 00:00:00 2001
+From: Eliad Peller <eliad@wizery.com>
+Date: Tue, 12 Jun 2012 12:53:13 +0300
+Subject: [PATCH 22/46] cfg80211: fix potential deadlock in regulatory
+
+commit fe20b39ec32e975f1054c0b7866c873a954adf05 upstream.
+
+reg_timeout_work() calls restore_regulatory_settings() which
+takes cfg80211_mutex.
+
+reg_set_request_processed() already holds cfg80211_mutex
+before calling cancel_delayed_work_sync(reg_timeout),
+so it might deadlock.
+
+Call the async cancel_delayed_work instead, in order
+to avoid the potential deadlock.
+
+This is the relevant lockdep warning:
+
+cfg80211: Calling CRDA for country: XX
+
+======================================================
+[ INFO: possible circular locking dependency detected ]
+3.4.0-rc5-wl+ #26 Not tainted
+-------------------------------------------------------
+kworker/0:2/1391 is trying to acquire lock:
+ (cfg80211_mutex){+.+.+.}, at: [<bf28ae00>] restore_regulatory_settings+0x34/0x418 [cfg80211]
+
+but task is already holding lock:
+ ((reg_timeout).work){+.+...}, at: [<c0059e94>] process_one_work+0x1f0/0x480
+
+which lock already depends on the new lock.
+
+the existing dependency chain (in reverse order) is:
+
+-> #2 ((reg_timeout).work){+.+...}:
+       [<c008fd44>] validate_chain+0xb94/0x10f0
+       [<c0090b68>] __lock_acquire+0x8c8/0x9b0
+       [<c0090d40>] lock_acquire+0xf0/0x114
+       [<c005b600>] wait_on_work+0x4c/0x154
+       [<c005c000>] __cancel_work_timer+0xd4/0x11c
+       [<c005c064>] cancel_delayed_work_sync+0x1c/0x20
+       [<bf28b274>] reg_set_request_processed+0x50/0x78 [cfg80211]
+       [<bf28bd84>] set_regdom+0x550/0x600 [cfg80211]
+       [<bf294cd8>] nl80211_set_reg+0x218/0x258 [cfg80211]
+       [<c03c7738>] genl_rcv_msg+0x1a8/0x1e8
+       [<c03c6a00>] netlink_rcv_skb+0x5c/0xc0
+       [<c03c7584>] genl_rcv+0x28/0x34
+       [<c03c6720>] netlink_unicast+0x15c/0x228
+       [<c03c6c7c>] netlink_sendmsg+0x218/0x298
+       [<c03933c8>] sock_sendmsg+0xa4/0xc0
+       [<c039406c>] __sys_sendmsg+0x1e4/0x268
+       [<c0394228>] sys_sendmsg+0x4c/0x70
+       [<c0013840>] ret_fast_syscall+0x0/0x3c
+
+-> #1 (reg_mutex){+.+.+.}:
+       [<c008fd44>] validate_chain+0xb94/0x10f0
+       [<c0090b68>] __lock_acquire+0x8c8/0x9b0
+       [<c0090d40>] lock_acquire+0xf0/0x114
+       [<c04734dc>] mutex_lock_nested+0x48/0x320
+       [<bf28b2cc>] reg_todo+0x30/0x538 [cfg80211]
+       [<c0059f44>] process_one_work+0x2a0/0x480
+       [<c005a4b4>] worker_thread+0x1bc/0x2bc
+       [<c0061148>] kthread+0x98/0xa4
+       [<c0014af4>] kernel_thread_exit+0x0/0x8
+
+-> #0 (cfg80211_mutex){+.+.+.}:
+       [<c008ed58>] print_circular_bug+0x68/0x2cc
+       [<c008fb28>] validate_chain+0x978/0x10f0
+       [<c0090b68>] __lock_acquire+0x8c8/0x9b0
+       [<c0090d40>] lock_acquire+0xf0/0x114
+       [<c04734dc>] mutex_lock_nested+0x48/0x320
+       [<bf28ae00>] restore_regulatory_settings+0x34/0x418 [cfg80211]
+       [<bf28b200>] reg_timeout_work+0x1c/0x20 [cfg80211]
+       [<c0059f44>] process_one_work+0x2a0/0x480
+       [<c005a4b4>] worker_thread+0x1bc/0x2bc
+       [<c0061148>] kthread+0x98/0xa4
+       [<c0014af4>] kernel_thread_exit+0x0/0x8
+
+other info that might help us debug this:
+
+Chain exists of:
+  cfg80211_mutex --> reg_mutex --> (reg_timeout).work
+
+ Possible unsafe locking scenario:
+
+       CPU0                    CPU1
+       ----                    ----
+  lock((reg_timeout).work);
+                               lock(reg_mutex);
+                               lock((reg_timeout).work);
+  lock(cfg80211_mutex);
+
+ *** DEADLOCK ***
+
+2 locks held by kworker/0:2/1391:
+ #0:  (events){.+.+.+}, at: [<c0059e94>] process_one_work+0x1f0/0x480
+ #1:  ((reg_timeout).work){+.+...}, at: [<c0059e94>] process_one_work+0x1f0/0x480
+
+stack backtrace:
+[<c001b928>] (unwind_backtrace+0x0/0x12c) from [<c0471d3c>] (dump_stack+0x20/0x24)
+[<c0471d3c>] (dump_stack+0x20/0x24) from [<c008ef70>] (print_circular_bug+0x280/0x2cc)
+[<c008ef70>] (print_circular_bug+0x280/0x2cc) from [<c008fb28>] (validate_chain+0x978/0x10f0)
+[<c008fb28>] (validate_chain+0x978/0x10f0) from [<c0090b68>] (__lock_acquire+0x8c8/0x9b0)
+[<c0090b68>] (__lock_acquire+0x8c8/0x9b0) from [<c0090d40>] (lock_acquire+0xf0/0x114)
+[<c0090d40>] (lock_acquire+0xf0/0x114) from [<c04734dc>] (mutex_lock_nested+0x48/0x320)
+[<c04734dc>] (mutex_lock_nested+0x48/0x320) from [<bf28ae00>] (restore_regulatory_settings+0x34/0x418 [cfg80211])
+[<bf28ae00>] (restore_regulatory_settings+0x34/0x418 [cfg80211]) from [<bf28b200>] (reg_timeout_work+0x1c/0x20 [cfg80211])
+[<bf28b200>] (reg_timeout_work+0x1c/0x20 [cfg80211]) from [<c0059f44>] (process_one_work+0x2a0/0x480)
+[<c0059f44>] (process_one_work+0x2a0/0x480) from [<c005a4b4>] (worker_thread+0x1bc/0x2bc)
+[<c005a4b4>] (worker_thread+0x1bc/0x2bc) from [<c0061148>] (kthread+0x98/0xa4)
+[<c0061148>] (kthread+0x98/0xa4) from [<c0014af4>] (kernel_thread_exit+0x0/0x8)
+cfg80211: Calling CRDA to update world regulatory domain
+cfg80211: World regulatory domain updated:
+cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
+cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
+cfg80211:   (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
+cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
+cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
+cfg80211:   (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
+
+Signed-off-by: Eliad Peller <eliad@wizery.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/wireless/reg.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/wireless/reg.c b/net/wireless/reg.c
+index c1c99dd..d57d05b 100644
+--- a/net/wireless/reg.c
++++ b/net/wireless/reg.c
+@@ -1369,7 +1369,7 @@ static void reg_set_request_processed(void)
+ 	spin_unlock(&reg_requests_lock);
+ 
+ 	if (last_request->initiator == NL80211_REGDOM_SET_BY_USER)
+-		cancel_delayed_work_sync(&reg_timeout);
++		cancel_delayed_work(&reg_timeout);
+ 
+ 	if (need_more_processing)
+ 		schedule_work(&reg_work);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0023-ath9k-Fix-softlockup-in-AR9485.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0023-ath9k-Fix-softlockup-in-AR9485.patch
new file mode 100644
index 0000000..7a88ca0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0023-ath9k-Fix-softlockup-in-AR9485.patch
@@ -0,0 +1,68 @@
+From 7195eb3dcc15a2a0ea8c557806abf32241e276d1 Mon Sep 17 00:00:00 2001
+From: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Date: Wed, 13 Jun 2012 21:28:09 +0530
+Subject: [PATCH 23/46] ath9k: Fix softlockup in AR9485
+
+commit bcb7ad7bcbef030e6ba71ede1f9866368aca7c99 upstream.
+
+steps to recreate:
+load latest ath9k driver with AR9485
+stop the network-manager and wpa_supplicant
+bring the interface up
+
+	Call Trace:
+	[<ffffffffa0517490>] ? ath_hw_check+0xe0/0xe0 [ath9k]
+	[<ffffffff812cd1e8>] __const_udelay+0x28/0x30
+	[<ffffffffa03bae7a>] ar9003_get_pll_sqsum_dvc+0x4a/0x80 [ath9k_hw]
+	[<ffffffffa05174eb>] ath_hw_pll_work+0x5b/0xe0 [ath9k]
+	[<ffffffff810744fe>] process_one_work+0x11e/0x470
+	[<ffffffff8107530f>] worker_thread+0x15f/0x360
+	[<ffffffff810751b0>] ? manage_workers+0x230/0x230
+	[<ffffffff81079af3>] kthread+0x93/0xa0
+	[<ffffffff815fd3a4>] kernel_thread_helper+0x4/0x10
+	[<ffffffff81079a60>] ? kthread_freezable_should_stop+0x70/0x70
+	[<ffffffff815fd3a0>] ? gs_change+0x13/0x13
+
+ensure that the PLL-WAR for AR9485/AR9340 is executed only if the STA is
+associated (or) IBSS/AP mode had started beaconing. Ideally this WAR
+is needed to recover from some rare beacon stuck during stress testing.
+Before the STA is associated/IBSS had started beaconing, PLL4(0x1618c)
+always seem to have zero even though we had configured PLL3(0x16188) to
+query about PLL's locking status. When we keep on polling infinitely PLL4's
+8th bit(ie check for PLL locking measurements is done), machine hangs
+due to softlockup.
+
+fixes https://bugzilla.redhat.com/show_bug.cgi?id=811142
+
+Reported-by: Rolf Offermanns <rolf.offermanns@gmx.net>
+Tested-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/ath/ath9k/main.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
+index 5b22ecd..95437fc 100644
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -1042,6 +1042,15 @@ void ath_hw_pll_work(struct work_struct *work)
+ 					    hw_pll_work.work);
+ 	u32 pll_sqsum;
+ 
++	/*
++	 * ensure that the PLL WAR is executed only
++	 * after the STA is associated (or) if the
++	 * beaconing had started in interfaces that
++	 * uses beacons.
++	 */
++	if (!(sc->sc_flags & SC_OP_BEACONS))
++		return;
++
+ 	if (AR_SREV_9485(sc->sc_ah)) {
+ 
+ 		ath9k_ps_wakeup(sc);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0024-can-c_can-precedence-error-in-c_can_chip_config.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0024-can-c_can-precedence-error-in-c_can_chip_config.patch
new file mode 100644
index 0000000..4fd58e4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0024-can-c_can-precedence-error-in-c_can_chip_config.patch
@@ -0,0 +1,38 @@
+From a06c6152d3db3bab83eefcbff5a1e41c91c8295d Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Fri, 15 Jun 2012 00:20:44 +0000
+Subject: [PATCH 24/46] can: c_can: precedence error in c_can_chip_config()
+
+commit d9cb9bd63eb27ac19f26a8547128c053f43a5da8 upstream.
+
+(CAN_CTRLMODE_LISTENONLY & CAN_CTRLMODE_LOOPBACK) is (0x02 & 0x01) which
+is zero so the condition is never true.  The intent here was to test
+that both flags were set.
+
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/can/c_can/c_can.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
+index 8dc84d6..86cd532 100644
+--- a/drivers/net/can/c_can/c_can.c
++++ b/drivers/net/can/c_can/c_can.c
+@@ -590,8 +590,8 @@ static void c_can_chip_config(struct net_device *dev)
+ 	priv->write_reg(priv, &priv->regs->control,
+ 			CONTROL_ENABLE_AR);
+ 
+-	if (priv->can.ctrlmode & (CAN_CTRLMODE_LISTENONLY &
+-					CAN_CTRLMODE_LOOPBACK)) {
++	if ((priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) &&
++	    (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)) {
+ 		/* loopback + silent mode : useful for hot self-test */
+ 		priv->write_reg(priv, &priv->regs->control, CONTROL_EIE |
+ 				CONTROL_SIE | CONTROL_IE | CONTROL_TEST);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0025-ath9k-fix-a-tx-rate-duration-calculation-bug.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0025-ath9k-fix-a-tx-rate-duration-calculation-bug.patch
new file mode 100644
index 0000000..82df3fb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0025-ath9k-fix-a-tx-rate-duration-calculation-bug.patch
@@ -0,0 +1,41 @@
+From aabb8d6daa5fecfc6086a480865312860e6a1080 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Fri, 15 Jun 2012 03:04:52 +0200
+Subject: [PATCH 25/46] ath9k: fix a tx rate duration calculation bug
+
+commit 76591bea9714a58d8924154068c78d702eb2cb17 upstream.
+
+The rate pointer variable for a rate series is used in a loop before it is
+initialized. This went unnoticed because it was used earlier for the RTS/CTS
+rate. This bug can lead to the wrong PHY type being passed to the
+duration calculation function.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/ath/ath9k/xmit.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
+index 76fd277..c59c592 100644
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -936,13 +936,13 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf,
+ 		}
+ 
+ 		/* legacy rates */
++		rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
+ 		if ((tx_info->band == IEEE80211_BAND_2GHZ) &&
+ 		    !(rate->flags & IEEE80211_RATE_ERP_G))
+ 			phy = WLAN_RC_PHY_CCK;
+ 		else
+ 			phy = WLAN_RC_PHY_OFDM;
+ 
+-		rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
+ 		info->rates[i].Rate = rate->hw_value;
+ 		if (rate->hw_value_short) {
+ 			if (rates[i].flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0026-batman-adv-fix-skb-data-assignment.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0026-batman-adv-fix-skb-data-assignment.patch
new file mode 100644
index 0000000..f64ab78
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0026-batman-adv-fix-skb-data-assignment.patch
@@ -0,0 +1,42 @@
+From 124c9eb2772ae36b2a2d9afa510976cc38a497ef Mon Sep 17 00:00:00 2001
+From: Antonio Quartulli <ordex@autistici.org>
+Date: Fri, 29 Jun 2012 22:58:03 +0200
+Subject: [PATCH 26/46] batman-adv: fix skb->data assignment
+
+commit 2c995ff892313009e336ecc8ec3411022f5b1c39 upstream.
+
+skb_linearize(skb) possibly rearranges the skb internal data and then changes
+the skb->data pointer value. For this reason any other pointer in the code that
+was assigned skb->data before invoking skb_linearise(skb) must be re-assigned.
+
+In the current tt_query message handling code this is not done and therefore, in
+case of skb linearization, the pointer used to handle the packet header ends up
+in pointing to free'd memory.
+
+This bug was introduced by a73105b8d4c765d9ebfb664d0a66802127d8e4c7
+(batman-adv: improved client announcement mechanism)
+
+Signed-off-by: Antonio Quartulli <ordex@autistici.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+[This patch is a backport for kernel versions 3.1 and 3.2 - Antonio]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/batman-adv/routing.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
+index f961cc5..da587ad 100644
+--- a/net/batman-adv/routing.c
++++ b/net/batman-adv/routing.c
+@@ -619,6 +619,8 @@ int recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
+ 		/* packet needs to be linearized to access the TT changes */
+ 		if (skb_linearize(skb) < 0)
+ 			goto out;
++		/* skb_linearize() possibly changed skb->data */
++		tt_query = (struct tt_query_packet *)skb->data;
+ 
+ 		if (is_my_mac(tt_query->dst))
+ 			handle_tt_response(bat_priv, tt_query);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0027-ARM-SAMSUNG-Should-check-for-IS_ERR-clk-instead-of-N.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0027-ARM-SAMSUNG-Should-check-for-IS_ERR-clk-instead-of-N.patch
new file mode 100644
index 0000000..99b9398
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0027-ARM-SAMSUNG-Should-check-for-IS_ERR-clk-instead-of-N.patch
@@ -0,0 +1,33 @@
+From dcf35ea664aae563cd99db11c78285f28b7bdcde Mon Sep 17 00:00:00 2001
+From: Jonghwan Choi <jhbird.choi@samsung.com>
+Date: Wed, 20 Jun 2012 17:05:37 +0900
+Subject: [PATCH 27/46] ARM: SAMSUNG: Should check for IS_ERR(clk) instead of
+ NULL
+
+commit a5d8f4765f0e92ef027492a8cb979c5b8d45f2c3 upstream.
+
+On the error condition clk_get() returns ERR_PTR().
+
+Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
+Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/plat-samsung/include/plat/watchdog-reset.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/plat-samsung/include/plat/watchdog-reset.h b/arch/arm/plat-samsung/include/plat/watchdog-reset.h
+index 40dbb2b..11b19ea 100644
+--- a/arch/arm/plat-samsung/include/plat/watchdog-reset.h
++++ b/arch/arm/plat-samsung/include/plat/watchdog-reset.h
+@@ -24,7 +24,7 @@ static inline void arch_wdt_reset(void)
+ 
+ 	__raw_writel(0, S3C2410_WTCON);	  /* disable watchdog, to be safe  */
+ 
+-	if (s3c2410_wdtclk)
++	if (!IS_ERR(s3c2410_wdtclk))
+ 		clk_enable(s3c2410_wdtclk);
+ 
+ 	/* put initial values into count and data */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0028-ath9k_hw-avoid-possible-infinite-loop-in-ar9003_get_.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0028-ath9k_hw-avoid-possible-infinite-loop-in-ar9003_get_.patch
new file mode 100644
index 0000000..2b1b0a7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0028-ath9k_hw-avoid-possible-infinite-loop-in-ar9003_get_.patch
@@ -0,0 +1,61 @@
+From 750f92b77aa8db48a56f5d34dd6a61a3184cf119 Mon Sep 17 00:00:00 2001
+From: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Date: Mon, 18 Jun 2012 13:13:30 +0530
+Subject: [PATCH 28/46] ath9k_hw: avoid possible infinite loop in
+ ar9003_get_pll_sqsum_dvc
+
+commit f18e3c6b67f448ec47b3a5b242789bd3d5644879 upstream.
+
+"ath9k: Fix softlockup in AR9485" with commit id
+64bc1239c790e051ff677e023435d770d2ffa174 fixed the reported
+issue, yet its better to avoid the possible infinite loop
+in ar9003_get_pll_sqsum_dvc by having a timeout as suggested
+by ath9k maintainers.
+http://www.spinics.net/lists/linux-wireless/msg92126.html.
+Based on my testing PLL's locking measurement is done in
+~200us (2 iterations).
+
+Cc: Rolf Offermanns <rolf.offermanns@gmx.net>
+Cc: Sujith Manoharan <c_manoha@qca.qualcomm.com>
+Cc: Senthil Balasubramanian <senthilb@qca.qualcomm.com>
+Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/ath/ath9k/hw.c |   14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 8b0c2ca..6973620 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -718,13 +718,25 @@ static void ath9k_hw_init_qos(struct ath_hw *ah)
+ 
+ u32 ar9003_get_pll_sqsum_dvc(struct ath_hw *ah)
+ {
++	struct ath_common *common = ath9k_hw_common(ah);
++	int i = 0;
++
+ 	REG_CLR_BIT(ah, PLL3, PLL3_DO_MEAS_MASK);
+ 	udelay(100);
+ 	REG_SET_BIT(ah, PLL3, PLL3_DO_MEAS_MASK);
+ 
+-	while ((REG_READ(ah, PLL4) & PLL4_MEAS_DONE) == 0)
++	while ((REG_READ(ah, PLL4) & PLL4_MEAS_DONE) == 0) {
++
+ 		udelay(100);
+ 
++		if (WARN_ON_ONCE(i >= 100)) {
++			ath_err(common, "PLL4 meaurement not done\n");
++			break;
++		}
++
++		i++;
++	}
++
+ 	return (REG_READ(ah, PLL3) & SQSUM_DVC_MASK) >> 3;
+ }
+ EXPORT_SYMBOL(ar9003_get_pll_sqsum_dvc);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0029-iwlwifi-remove-log_event-debugfs-file-debugging-is-d.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0029-iwlwifi-remove-log_event-debugfs-file-debugging-is-d.patch
new file mode 100644
index 0000000..65fb0be
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0029-iwlwifi-remove-log_event-debugfs-file-debugging-is-d.patch
@@ -0,0 +1,67 @@
+From 470e08b2e73b3ce64336de8d55b009e4782735b8 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Wed, 20 Jun 2012 08:46:25 +0200
+Subject: [PATCH 29/46] iwlwifi: remove log_event debugfs file debugging is
+ disabled
+
+commit 882b7b7d11d65e8eccce738f1ce97cdfdb998f9f upstream.
+
+When debugging is disabled, the event log functions aren't
+functional in the way that the debugfs file expects. This
+leads to the debugfs access crashing. Since the event log
+functions aren't functional then, remove the debugfs file
+when CONFIG_IWLWIFI_DEBUG is not set.
+
+Reported-by: Lekensteyn <lekensteyn@gmail.com>
+Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2: adjust filename, context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/iwlwifi/iwl-trans-pcie.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+index 5815cf5..4661a64 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
++++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+@@ -1777,6 +1777,7 @@ static ssize_t iwl_dbgfs_rx_queue_read(struct file *file,
+ 	return simple_read_from_buffer(user_buf, count, ppos, buf, pos);
+ }
+ 
++#ifdef CONFIG_IWLWIFI_DEBUG
+ static ssize_t iwl_dbgfs_log_event_read(struct file *file,
+ 					 char __user *user_buf,
+ 					 size_t count, loff_t *ppos)
+@@ -1814,6 +1815,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file,
+ 
+ 	return count;
+ }
++#endif
+ 
+ static ssize_t iwl_dbgfs_interrupt_read(struct file *file,
+ 					char __user *user_buf,
+@@ -1941,7 +1943,9 @@ static ssize_t iwl_dbgfs_fh_reg_read(struct file *file,
+ 	return ret;
+ }
+ 
++#ifdef CONFIG_IWLWIFI_DEBUG
+ DEBUGFS_READ_WRITE_FILE_OPS(log_event);
++#endif
+ DEBUGFS_READ_WRITE_FILE_OPS(interrupt);
+ DEBUGFS_READ_FILE_OPS(fh_reg);
+ DEBUGFS_READ_FILE_OPS(rx_queue);
+@@ -1957,7 +1961,9 @@ static int iwl_trans_pcie_dbgfs_register(struct iwl_trans *trans,
+ {
+ 	DEBUGFS_ADD_FILE(rx_queue, dir, S_IRUSR);
+ 	DEBUGFS_ADD_FILE(tx_queue, dir, S_IRUSR);
++#ifdef CONFIG_IWLWIFI_DEBUG
+ 	DEBUGFS_ADD_FILE(log_event, dir, S_IWUSR | S_IRUSR);
++#endif
+ 	DEBUGFS_ADD_FILE(interrupt, dir, S_IWUSR | S_IRUSR);
+ 	DEBUGFS_ADD_FILE(csr, dir, S_IWUSR);
+ 	DEBUGFS_ADD_FILE(fh_reg, dir, S_IRUSR);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0030-ARM-SAMSUNG-Fix-for-S3C2412-EBI-memory-mapping.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0030-ARM-SAMSUNG-Fix-for-S3C2412-EBI-memory-mapping.patch
new file mode 100644
index 0000000..4a91186
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0030-ARM-SAMSUNG-Fix-for-S3C2412-EBI-memory-mapping.patch
@@ -0,0 +1,36 @@
+From 4885fac40cf4f8adf4c6832d90b3b60c4ac44f19 Mon Sep 17 00:00:00 2001
+From: Jose Miguel Goncalves <jose.goncalves@inov.pt>
+Date: Sat, 12 May 2012 06:11:49 +0900
+Subject: [PATCH 30/46] ARM: SAMSUNG: Fix for S3C2412 EBI memory mapping
+
+commit 3dca938656c7b0ff6b0717a5dde0f5f45e592be5 upstream.
+
+While upgrading the kernel on a S3C2412 based board I've noted
+that it was impossible to boot the board with a 2.6.32 or upper
+kernel. I've tracked down the problem to the EBI virtual memory
+mapping that is in conflict with the IO mapping definition in
+arch/arm/mach-s3c24xx/s3c2412.c.
+
+Signed-off-by: Jose Miguel Goncalves <jose.goncalves@inov.pt>
+Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/plat-samsung/include/plat/map-s3c.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/plat-samsung/include/plat/map-s3c.h b/arch/arm/plat-samsung/include/plat/map-s3c.h
+index 7d04875..c0c70a8 100644
+--- a/arch/arm/plat-samsung/include/plat/map-s3c.h
++++ b/arch/arm/plat-samsung/include/plat/map-s3c.h
+@@ -22,7 +22,7 @@
+ #define S3C24XX_VA_WATCHDOG	S3C_VA_WATCHDOG
+ 
+ #define S3C2412_VA_SSMC		S3C_ADDR_CPU(0x00000000)
+-#define S3C2412_VA_EBI		S3C_ADDR_CPU(0x00010000)
++#define S3C2412_VA_EBI		S3C_ADDR_CPU(0x00100000)
+ 
+ #define S3C2410_PA_UART		(0x50000000)
+ #define S3C24XX_PA_UART		S3C2410_PA_UART
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0031-USB-option-add-id-for-Cellient-MEN-200.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0031-USB-option-add-id-for-Cellient-MEN-200.patch
new file mode 100644
index 0000000..d41471f
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0031-USB-option-add-id-for-Cellient-MEN-200.patch
@@ -0,0 +1,44 @@
+From 8ca01cdb21b1e0daed013a4536ca89543f844424 Mon Sep 17 00:00:00 2001
+From: Dmitry Shmygov <shmygov@rambler.ru>
+Date: Wed, 20 Jun 2012 15:51:40 +0400
+Subject: [PATCH 31/46] USB: option: add id for Cellient MEN-200
+
+commit 1e2c4e59d2b8797973471b4a287a43eac12a0f40 upstream.
+
+Add vendor and product ID to option.c driver
+for Cellient MEN-200 EVDO Rev.B 450MHz data module.
+http://cellient.com
+
+Signed-off-by: Dmitry Shmygov <shmygov@rambler.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/option.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index 61d6c31..e311711c 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -496,6 +496,10 @@ static void option_instat_callback(struct urb *urb);
+ /* MediaTek products */
+ #define MEDIATEK_VENDOR_ID			0x0e8d
+ 
++/* Cellient products */
++#define CELLIENT_VENDOR_ID			0x2692
++#define CELLIENT_PRODUCT_MEN200			0x9005
++
+ /* some devices interfaces need special handling due to a number of reasons */
+ enum option_blacklist_reason {
+ 		OPTION_BLACKLIST_NONE = 0,
+@@ -1227,6 +1231,7 @@ static const struct usb_device_id option_ids[] = {
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a1, 0xff, 0x02, 0x01) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x00, 0x00) },
+ 	{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x00a2, 0xff, 0x02, 0x01) },        /* MediaTek MT6276M modem & app port */
++	{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
+ 	{ } /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, option_ids);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0032-oprofile-perf-use-NR_CPUS-instead-or-nr_cpumask_bits.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0032-oprofile-perf-use-NR_CPUS-instead-or-nr_cpumask_bits.patch
new file mode 100644
index 0000000..e2c5be8
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0032-oprofile-perf-use-NR_CPUS-instead-or-nr_cpumask_bits.patch
@@ -0,0 +1,44 @@
+From fa7b3de0ebfa0cd8a833ea2daa5ded5ea50fd085 Mon Sep 17 00:00:00 2001
+From: Will Deacon <will.deacon@arm.com>
+Date: Fri, 8 Jun 2012 16:16:04 +0100
+Subject: [PATCH 32/46] oprofile: perf: use NR_CPUS instead or nr_cpumask_bits
+ for static array
+
+commit e734568b675c985db2026848fefaac01c22977a5 upstream.
+
+The OProfile perf backend uses a static array to keep track of the
+perf events on the system. When compiling with CONFIG_CPUMASK_OFFSTACK=y
+&& SMP, nr_cpumask_bits is not a compile-time constant and the build
+will fail with:
+
+oprofile_perf.c:28: error: variably modified 'perf_events' at file scope
+
+This patch uses NR_CPUs instead of nr_cpumask_bits for the array
+initialisation. If this causes space problems in the future, we can
+always move to dynamic allocation for the events array.
+
+Cc: Matt Fleming <matt@console-pimps.org>
+Reported-by: Russell King - ARM Linux <linux@arm.linux.org.uk>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Robert Richter <robert.richter@amd.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/oprofile/oprofile_perf.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/oprofile/oprofile_perf.c b/drivers/oprofile/oprofile_perf.c
+index da14432..efc4b7f 100644
+--- a/drivers/oprofile/oprofile_perf.c
++++ b/drivers/oprofile/oprofile_perf.c
+@@ -25,7 +25,7 @@ static int oprofile_perf_enabled;
+ static DEFINE_MUTEX(oprofile_perf_mutex);
+ 
+ static struct op_counter_config *counter_config;
+-static struct perf_event **perf_events[nr_cpumask_bits];
++static struct perf_event **perf_events[NR_CPUS];
+ static int num_counters;
+ 
+ /*
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0033-drm-i915-Refactor-the-deferred-PM_IIR-handling-into-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0033-drm-i915-Refactor-the-deferred-PM_IIR-handling-into-.patch
new file mode 100644
index 0000000..ac1efd7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0033-drm-i915-Refactor-the-deferred-PM_IIR-handling-into-.patch
@@ -0,0 +1,107 @@
+From 179d0e42c797861a350b6f72e534edad4dac0f65 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Sun, 15 Apr 2012 11:56:03 +0100
+Subject: [PATCH 33/46] drm/i915: Refactor the deferred PM_IIR handling into a
+ single function
+
+commit fc6826d1dcd65f3d1e9a5377678882e4e08f02be upstream.
+
+This function, along with the registers and deferred work hander, are
+all shared with SandyBridge, IvyBridge and their variants. So remove the
+duplicate code into a single function.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+[bwh: Backported to 3.2: adjust context; drop changes for Valley View]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_irq.c |   58 +++++++++++++++++++--------------------
+ 1 file changed, 29 insertions(+), 29 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+index d3820c2..17c335e 100644
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -424,6 +424,31 @@ static void gen6_pm_rps_work(struct work_struct *work)
+ 	mutex_unlock(&dev_priv->dev->struct_mutex);
+ }
+ 
++static void gen6_queue_rps_work(struct drm_i915_private *dev_priv,
++				u32 pm_iir)
++{
++	unsigned long flags;
++
++	/*
++	 * IIR bits should never already be set because IMR should
++	 * prevent an interrupt from being shown in IIR. The warning
++	 * displays a case where we've unsafely cleared
++	 * dev_priv->pm_iir. Although missing an interrupt of the same
++	 * type is not a problem, it displays a problem in the logic.
++	 *
++	 * The mask bit in IMR is cleared by rps_work.
++	 */
++
++	spin_lock_irqsave(&dev_priv->rps_lock, flags);
++	WARN(dev_priv->pm_iir & pm_iir, "Missed a PM interrupt\n");
++	dev_priv->pm_iir |= pm_iir;
++	I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
++	POSTING_READ(GEN6_PMIMR);
++	spin_unlock_irqrestore(&dev_priv->rps_lock, flags);
++
++	queue_work(dev_priv->wq, &dev_priv->rps_work);
++}
++
+ static void pch_irq_handler(struct drm_device *dev, u32 pch_iir)
+ {
+ 	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+@@ -529,16 +554,8 @@ static irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS)
+ 		pch_irq_handler(dev, pch_iir);
+ 	}
+ 
+-	if (pm_iir & GEN6_PM_DEFERRED_EVENTS) {
+-		unsigned long flags;
+-		spin_lock_irqsave(&dev_priv->rps_lock, flags);
+-		WARN(dev_priv->pm_iir & pm_iir, "Missed a PM interrupt\n");
+-		dev_priv->pm_iir |= pm_iir;
+-		I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
+-		POSTING_READ(GEN6_PMIMR);
+-		spin_unlock_irqrestore(&dev_priv->rps_lock, flags);
+-		queue_work(dev_priv->wq, &dev_priv->rps_work);
+-	}
++	if (pm_iir & GEN6_PM_DEFERRED_EVENTS)
++		gen6_queue_rps_work(dev_priv, pm_iir);
+ 
+ 	/* should clear PCH hotplug event before clear CPU irq */
+ 	I915_WRITE(SDEIIR, pch_iir);
+@@ -634,25 +651,8 @@ static irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS)
+ 		i915_handle_rps_change(dev);
+ 	}
+ 
+-	if (IS_GEN6(dev) && pm_iir & GEN6_PM_DEFERRED_EVENTS) {
+-		/*
+-		 * IIR bits should never already be set because IMR should
+-		 * prevent an interrupt from being shown in IIR. The warning
+-		 * displays a case where we've unsafely cleared
+-		 * dev_priv->pm_iir. Although missing an interrupt of the same
+-		 * type is not a problem, it displays a problem in the logic.
+-		 *
+-		 * The mask bit in IMR is cleared by rps_work.
+-		 */
+-		unsigned long flags;
+-		spin_lock_irqsave(&dev_priv->rps_lock, flags);
+-		WARN(dev_priv->pm_iir & pm_iir, "Missed a PM interrupt\n");
+-		dev_priv->pm_iir |= pm_iir;
+-		I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
+-		POSTING_READ(GEN6_PMIMR);
+-		spin_unlock_irqrestore(&dev_priv->rps_lock, flags);
+-		queue_work(dev_priv->wq, &dev_priv->rps_work);
+-	}
++	if (IS_GEN6(dev) && pm_iir & GEN6_PM_DEFERRED_EVENTS)
++		gen6_queue_rps_work(dev_priv, pm_iir);
+ 
+ 	/* should clear PCH hotplug event before clear CPU irq */
+ 	I915_WRITE(SDEIIR, pch_iir);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0034-drm-i915-rip-out-the-PM_IIR-WARN.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0034-drm-i915-rip-out-the-PM_IIR-WARN.patch
new file mode 100644
index 0000000..bd34e07
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0034-drm-i915-rip-out-the-PM_IIR-WARN.patch
@@ -0,0 +1,60 @@
+From a01c3081fec2775e6ed17963f2f70ea67d5e6401 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Thu, 21 Jun 2012 14:55:22 +0200
+Subject: [PATCH 34/46] drm/i915: rip out the PM_IIR WARN
+
+commit 58bf8062d0b293b8e1028e5b0342082002886bd4 upstream.
+
+After banging my head against this for the past few months, I still
+don't see how this could possible race under the premise that once an
+irq bit is masked in PM_IMR and reset in PM_IIR it won't show up again
+until we unmask it in PM_IMR.
+
+Still, we have reports of this being seen in the wild. Now Bspec has
+this little bit of lovely language in the PMIIR register:
+
+Public SNB Docs, Vol3Part2, 2.5.14 "PMIIR":
+
+"For each bit, the IIR can store a second pending interrupt if two or
+more of the same interrupt conditions occur before the first condition
+is cleared. Upon clearing the interrupt, the IIR bit will momentarily
+go low, then return high to indicate there is another interrupt
+pending."
+
+Now if we presume that PMIMR only prevent new interrupts from being
+queued, we could easily end up masking an interrupt and clearing it,
+but the 2nd pending interrupt setting the bit in PMIIR right away
+again. Which leads, the next time the irq handler runs, to hitting the
+WARN.
+
+Also, no bad side effects of this have ever been reported. And we've
+tracked down our issues with the gpu turbo getting stuck to bogus
+interrupt generation limits in th RPLIMIT register.
+
+So let's just rip out this WARN as bogus and call it a day. The only
+shallow thing here is that this 2-deep irq queue in the hw makes you
+wonder how racy the windows irq handler is ...
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42907
+Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_irq.c |    1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+index 17c335e..578ddfc 100644
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -440,7 +440,6 @@ static void gen6_queue_rps_work(struct drm_i915_private *dev_priv,
+ 	 */
+ 
+ 	spin_lock_irqsave(&dev_priv->rps_lock, flags);
+-	WARN(dev_priv->pm_iir & pm_iir, "Missed a PM interrupt\n");
+ 	dev_priv->pm_iir |= pm_iir;
+ 	I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
+ 	POSTING_READ(GEN6_PMIMR);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0035-drm-i915-Fix-eDP-blank-screen-after-S3-resume-on-HP-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0035-drm-i915-Fix-eDP-blank-screen-after-S3-resume-on-HP-.patch
new file mode 100644
index 0000000..7f6394c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0035-drm-i915-Fix-eDP-blank-screen-after-S3-resume-on-HP-.patch
@@ -0,0 +1,46 @@
+From e083a17405e8771aaa8853534c66721aa5aa36ea Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Thu, 21 Jun 2012 15:30:41 +0200
+Subject: [PATCH 35/46] drm/i915: Fix eDP blank screen after S3 resume on HP
+ desktops
+
+commit 6db65cbb941f9d433659bdad02b307f6d94465df upstream.
+
+This patch fixes the problem on some HP desktop machines with eDP
+which give blank screens after S3 resume.
+
+It turned out that BLC_PWM_CPU_CTL must be written after
+BLC_PWM_CPU_CTL2.  Otherwise it doesn't take effect on these
+SNB machines.
+
+Tested with 3.5-rc3 kernel.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49233
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_suspend.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
+index a1eb83d..f38d196 100644
+--- a/drivers/gpu/drm/i915/i915_suspend.c
++++ b/drivers/gpu/drm/i915/i915_suspend.c
+@@ -739,8 +739,11 @@ static void i915_restore_display(struct drm_device *dev)
+ 	if (HAS_PCH_SPLIT(dev)) {
+ 		I915_WRITE(BLC_PWM_PCH_CTL1, dev_priv->saveBLC_PWM_CTL);
+ 		I915_WRITE(BLC_PWM_PCH_CTL2, dev_priv->saveBLC_PWM_CTL2);
+-		I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->saveBLC_CPU_PWM_CTL);
++		/* NOTE: BLC_PWM_CPU_CTL must be written after BLC_PWM_CPU_CTL2;
++		 * otherwise we get blank eDP screen after S3 on some machines
++		 */
+ 		I915_WRITE(BLC_PWM_CPU_CTL2, dev_priv->saveBLC_CPU_PWM_CTL2);
++		I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->saveBLC_CPU_PWM_CTL);
+ 		I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
+ 		I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
+ 		I915_WRITE(PCH_PP_DIVISOR, dev_priv->savePP_DIVISOR);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0036-PM-Sleep-Prevent-waiting-forever-on-asynchronous-sus.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0036-PM-Sleep-Prevent-waiting-forever-on-asynchronous-sus.patch
new file mode 100644
index 0000000..0426542
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0036-PM-Sleep-Prevent-waiting-forever-on-asynchronous-sus.patch
@@ -0,0 +1,62 @@
+From 148576d5144418385e4a0d59c5c9547d662ae0f2 Mon Sep 17 00:00:00 2001
+From: Mandeep Singh Baines <msb@chromium.org>
+Date: Sun, 24 Jun 2012 23:31:09 +0200
+Subject: [PATCH 36/46] PM / Sleep: Prevent waiting forever on asynchronous
+ suspend after abort
+
+commit 1f758b23177d588a71b96ad02990e715949bb82f upstream.
+
+__device_suspend() must always send a completion. Otherwise, parent
+devices will wait forever.
+
+Commit 1e2ef05b, "PM: Limit race conditions between runtime PM and
+system sleep (v2)", introduced a regression by short-circuiting the
+complete_all() for certain error cases.
+
+This patch fixes the bug by always signalling a completion.
+
+Addresses http://crosbug.com/31972
+
+Tested by injecting an abort.
+
+Signed-off-by: Mandeep Singh Baines <msb@chromium.org>
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/base/power/main.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
+index c3d2dfc..b96544a 100644
+--- a/drivers/base/power/main.c
++++ b/drivers/base/power/main.c
+@@ -869,7 +869,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
+ 	dpm_wait_for_children(dev, async);
+ 
+ 	if (async_error)
+-		return 0;
++		goto Complete;
+ 
+ 	pm_runtime_get_noresume(dev);
+ 	if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
+@@ -878,7 +878,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
+ 	if (pm_wakeup_pending()) {
+ 		pm_runtime_put_sync(dev);
+ 		async_error = -EBUSY;
+-		return 0;
++		goto Complete;
+ 	}
+ 
+ 	device_lock(dev);
+@@ -926,6 +926,8 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
+ 	}
+ 
+ 	device_unlock(dev);
++
++ Complete:
+ 	complete_all(&dev->power.completion);
+ 
+ 	if (error) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0037-x86-cpufeature-Rename-X86_FEATURE_DTS-to-X86_FEATURE.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0037-x86-cpufeature-Rename-X86_FEATURE_DTS-to-X86_FEATURE.patch
new file mode 100644
index 0000000..c536a73
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0037-x86-cpufeature-Rename-X86_FEATURE_DTS-to-X86_FEATURE.patch
@@ -0,0 +1,73 @@
+From edb1135bf688ed567d95e964af22488274890640 Mon Sep 17 00:00:00 2001
+From: "H. Peter Anvin" <hpa@linux.intel.com>
+Date: Fri, 22 Jun 2012 10:58:06 -0700
+Subject: [PATCH 37/46] x86, cpufeature: Rename X86_FEATURE_DTS to
+ X86_FEATURE_DTHERM
+
+commit 4ad33411308596f2f918603509729922a1ec4411 upstream.
+
+It makes sense to label "Digital Thermal Sensor" as "DTS", but
+unfortunately the string "dts" was already used for "Debug Store", and
+/proc/cpuinfo is a user space ABI.
+
+Therefore, rename this to "dtherm".
+
+This conflict went into mainline via the hwmon tree without any x86
+maintainer ack, and without any kind of hint in the subject.
+
+    a4659053 x86/hwmon: fix initialization of coretemp
+
+Reported-by: Jean Delvare <khali@linux-fr.org>
+Link: http://lkml.kernel.org/r/4FE34BCB.5050305@linux.intel.com
+Cc: Jan Beulich <JBeulich@suse.com>
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+[bwh: Backported to 3.2: drop the coretemp device table change]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/x86/include/asm/cpufeature.h |    2 +-
+ arch/x86/kernel/cpu/scattered.c   |    2 +-
+ drivers/hwmon/coretemp.c          |    2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
+index f3444f7..0c3b775 100644
+--- a/arch/x86/include/asm/cpufeature.h
++++ b/arch/x86/include/asm/cpufeature.h
+@@ -175,7 +175,7 @@
+ #define X86_FEATURE_XSAVEOPT	(7*32+ 4) /* Optimized Xsave */
+ #define X86_FEATURE_PLN		(7*32+ 5) /* Intel Power Limit Notification */
+ #define X86_FEATURE_PTS		(7*32+ 6) /* Intel Package Thermal Status */
+-#define X86_FEATURE_DTS		(7*32+ 7) /* Digital Thermal Sensor */
++#define X86_FEATURE_DTHERM	(7*32+ 7) /* Digital Thermal Sensor */
+ 
+ /* Virtualization flags: Linux defined, word 8 */
+ #define X86_FEATURE_TPR_SHADOW  (8*32+ 0) /* Intel TPR Shadow */
+diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c
+index c7f64e6..ea6106c 100644
+--- a/arch/x86/kernel/cpu/scattered.c
++++ b/arch/x86/kernel/cpu/scattered.c
+@@ -31,7 +31,7 @@ void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c)
+ 	const struct cpuid_bit *cb;
+ 
+ 	static const struct cpuid_bit __cpuinitconst cpuid_bits[] = {
+-		{ X86_FEATURE_DTS,		CR_EAX, 0, 0x00000006, 0 },
++		{ X86_FEATURE_DTHERM,		CR_EAX, 0, 0x00000006, 0 },
+ 		{ X86_FEATURE_IDA,		CR_EAX, 1, 0x00000006, 0 },
+ 		{ X86_FEATURE_ARAT,		CR_EAX, 2, 0x00000006, 0 },
+ 		{ X86_FEATURE_PLN,		CR_EAX, 4, 0x00000006, 0 },
+diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
+index 427468f..0790c98 100644
+--- a/drivers/hwmon/coretemp.c
++++ b/drivers/hwmon/coretemp.c
+@@ -660,7 +660,7 @@ static void __cpuinit get_core_online(unsigned int cpu)
+ 	 * sensors. We check this bit only, all the early CPUs
+ 	 * without thermal sensors will be filtered out.
+ 	 */
+-	if (!cpu_has(c, X86_FEATURE_DTS))
++	if (!cpu_has(c, X86_FEATURE_DTHERM))
+ 		return;
+ 
+ 	if (!pdev) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0038-stable-Allow-merging-of-backports-for-serious-user-v.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0038-stable-Allow-merging-of-backports-for-serious-user-v.patch
new file mode 100644
index 0000000..37925c6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0038-stable-Allow-merging-of-backports-for-serious-user-v.patch
@@ -0,0 +1,51 @@
+From 2bbcf955f97142e2b38c1da222da381d3729beb9 Mon Sep 17 00:00:00 2001
+From: Mel Gorman <mgorman@suse.de>
+Date: Thu, 21 Jun 2012 11:36:50 +0100
+Subject: [PATCH 38/46] stable: Allow merging of backports for serious
+ user-visible performance issues
+
+commit eb3979f64d25120d60b9e761a4c58f70b1a02f86 upstream.
+
+Distribution kernel maintainers routinely backport fixes for users that
+were deemed important but not "something critical" as defined by the
+rules. To users of these kernels they are very serious and failing to fix
+them reduces the value of -stable.
+
+The problem is that the patches fixing these issues are often subtle and
+prone to regressions in other ways and need greater care and attention.
+To combat this, these "serious" backports should have a higher barrier
+to entry.
+
+This patch relaxes the rules to allow a distribution maintainer to merge
+to -stable a backported patch or small series that fixes a "serious"
+user-visible performance issue. They should include additional information on
+the user-visible bug affected and a link to the bugzilla entry if available.
+The same rules about the patch being already in mainline still apply.
+
+Signed-off-by: Mel Gorman <mgorman@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ Documentation/stable_kernel_rules.txt |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/Documentation/stable_kernel_rules.txt b/Documentation/stable_kernel_rules.txt
+index 21fd05c..e1f856b 100644
+--- a/Documentation/stable_kernel_rules.txt
++++ b/Documentation/stable_kernel_rules.txt
+@@ -12,6 +12,12 @@ Rules on what kind of patches are accepted, and which ones are not, into the
+    marked CONFIG_BROKEN), an oops, a hang, data corruption, a real
+    security issue, or some "oh, that's not good" issue.  In short, something
+    critical.
++ - Serious issues as reported by a user of a distribution kernel may also
++   be considered if they fix a notable performance or interactivity issue.
++   As these fixes are not as obvious and have a higher risk of a subtle
++   regression they should only be submitted by a distribution kernel
++   maintainer and include an addendum linking to a bugzilla entry if it
++   exists and additional information on the user-visible impact.
+  - New device IDs and quirks are also accepted.
+  - No "theoretical race condition" issues, unless an explanation of how the
+    race can be exploited is also provided.
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0039-ALSA-hda-Add-Realtek-ALC280-codec-support.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0039-ALSA-hda-Add-Realtek-ALC280-codec-support.patch
new file mode 100644
index 0000000..a784376
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0039-ALSA-hda-Add-Realtek-ALC280-codec-support.patch
@@ -0,0 +1,34 @@
+From 0aab048a80bd01c77244fa5d7e714a1174401ab1 Mon Sep 17 00:00:00 2001
+From: David Henningsson <david.henningsson@canonical.com>
+Date: Mon, 25 Jun 2012 19:49:28 +0200
+Subject: [PATCH 39/46] ALSA: hda - Add Realtek ALC280 codec support
+
+commit befae82e2906cb7155020876a531b0b8c6c8d8c8 upstream.
+
+This chip looks very similar to ALC269 and ALC27* variants. The bug reporter
+has verified that sound was working after this patch had been applied.
+
+BugLink: https://bugs.launchpad.net/bugs/1017017
+Tested-by: Richard Crossley <richardcrossley@o2.co.uk>
+Signed-off-by: David Henningsson <david.henningsson@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/pci/hda/patch_realtek.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index 0005bde..5f096a5 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5988,6 +5988,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
+ 	{ .id = 0x10ec0272, .name = "ALC272", .patch = patch_alc662 },
+ 	{ .id = 0x10ec0275, .name = "ALC275", .patch = patch_alc269 },
+ 	{ .id = 0x10ec0276, .name = "ALC276", .patch = patch_alc269 },
++	{ .id = 0x10ec0280, .name = "ALC280", .patch = patch_alc269 },
+ 	{ .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660",
+ 	  .patch = patch_alc861 },
+ 	{ .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd },
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0040-USB-option-Add-USB-ID-for-Novatel-Ovation-MC551.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0040-USB-option-Add-USB-ID-for-Novatel-Ovation-MC551.patch
new file mode 100644
index 0000000..4e011cd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0040-USB-option-Add-USB-ID-for-Novatel-Ovation-MC551.patch
@@ -0,0 +1,41 @@
+From 2e5d03393a6928616737edfb24457da88d21102b Mon Sep 17 00:00:00 2001
+From: Forest Bond <forest.bond@rapidrollout.com>
+Date: Fri, 22 Jun 2012 10:30:38 -0400
+Subject: [PATCH 40/46] USB: option: Add USB ID for Novatel Ovation MC551
+
+commit 065b07e7a14676f4138ce4619d229c0be5a74230 upstream.
+
+This device is also known as the Verizon USB551L.
+
+Signed-off-by: Forest Bond <forest.bond@rapidrollout.com>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/option.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
+index e311711c..21a4734 100644
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -235,6 +235,7 @@ static void option_instat_callback(struct urb *urb);
+ #define NOVATELWIRELESS_PRODUCT_G1		0xA001
+ #define NOVATELWIRELESS_PRODUCT_G1_M		0xA002
+ #define NOVATELWIRELESS_PRODUCT_G2		0xA010
++#define NOVATELWIRELESS_PRODUCT_MC551		0xB001
+ 
+ /* AMOI PRODUCTS */
+ #define AMOI_VENDOR_ID				0x1614
+@@ -734,6 +735,8 @@ static const struct usb_device_id option_ids[] = {
+ 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1) },
+ 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1_M) },
+ 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) },
++	/* Novatel Ovation MC551 a.k.a. Verizon USB551L */
++	{ USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) },
+ 
+ 	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
+ 	{ USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0041-USB-CP210x-Add-10-Device-IDs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0041-USB-CP210x-Add-10-Device-IDs.patch
new file mode 100644
index 0000000..f6509bf
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0041-USB-CP210x-Add-10-Device-IDs.patch
@@ -0,0 +1,61 @@
+From 88093f6173b2c203d31bf67ed055419f5ec21953 Mon Sep 17 00:00:00 2001
+From: Craig Shelley <craig@microtron.org.uk>
+Date: Tue, 26 Jun 2012 23:20:04 +0100
+Subject: [PATCH 41/46] USB: CP210x Add 10 Device IDs
+
+commit 3fcc8f96829776cf181918461923d1e3bbb831a2 upstream.
+
+This patch adds 10 device IDs for CP210x based devices from the following manufacturers:
+Timewave
+Clipsal
+Festo
+Link Instruments
+
+Signed-off-by: Craig Shelley <craig@microtron.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/usb/serial/cp210x.c |   11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
+index aa0c43f..35e6b5f 100644
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -93,6 +93,7 @@ static const struct usb_device_id id_table[] = {
+ 	{ USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
+ 	{ USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */
+ 	{ USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
++	{ USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */
+ 	{ USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */
+ 	{ USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
+ 	{ USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
+@@ -134,7 +135,13 @@ static const struct usb_device_id id_table[] = {
+ 	{ USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */
+ 	{ USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
+ 	{ USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
++	{ USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
++	{ USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */
+ 	{ USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
++	{ USB_DEVICE(0x166A, 0x0304) }, /* Clipsal 5000CT2 C-Bus Black and White Touchscreen */
++	{ USB_DEVICE(0x166A, 0x0305) }, /* Clipsal C-5000CT2 C-Bus Spectrum Colour Touchscreen */
++	{ USB_DEVICE(0x166A, 0x0401) }, /* Clipsal L51xx C-Bus Architectural Dimmer */
++	{ USB_DEVICE(0x166A, 0x0101) }, /* Clipsal 5560884 C-Bus Multi-room Audio Matrix Switcher */
+ 	{ USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
+ 	{ USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */
+ 	{ USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */
+@@ -146,7 +153,11 @@ static const struct usb_device_id id_table[] = {
+ 	{ USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
+ 	{ USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
+ 	{ USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
++	{ USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
++	{ USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
+ 	{ USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
++	{ USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
++	{ USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */
+ 	{ USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
+ 	{ } /* Terminating Entry */
+ };
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0042-xen-netfront-teardown-the-device-before-unregisterin.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0042-xen-netfront-teardown-the-device-before-unregisterin.patch
new file mode 100644
index 0000000..5847cb6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0042-xen-netfront-teardown-the-device-before-unregisterin.patch
@@ -0,0 +1,58 @@
+From 55cebafff1e8327fe9dfa3b66d6f70bf88138902 Mon Sep 17 00:00:00 2001
+From: Ian Campbell <Ian.Campbell@citrix.com>
+Date: Mon, 25 Jun 2012 22:48:41 +0000
+Subject: [PATCH 42/46] xen/netfront: teardown the device before unregistering
+ it.
+
+commit 6bc96d047fe32d76ef79f3195c52a542edf7c705 upstream.
+
+Fixes:
+[   15.470311] WARNING: at /local/scratch/ianc/devel/kernels/linux/fs/sysfs/file.c:498 sysfs_attr_ns+0x95/0xa0()
+[   15.470326] sysfs: kobject eth0 without dirent
+[   15.470333] Modules linked in:
+[   15.470342] Pid: 12, comm: xenwatch Not tainted 3.4.0-x86_32p-xenU #93
+and
+[    9.150554] BUG: unable to handle kernel paging request at 2b359000
+[    9.150577] IP: [<c1279561>] linkwatch_do_dev+0x81/0xc0
+[    9.150592] *pdpt = 000000002c3c9027 *pde = 0000000000000000
+[    9.150604] Oops: 0002 [#1] SMP
+[    9.150613] Modules linked in:
+
+This is http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=675190
+
+Reported-by: George Shuklin <george.shuklin@gmail.com>
+Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
+Tested-by: William Dauchy <wdauchy@gmail.com>
+Cc: 675190@bugs.debian.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/xen-netfront.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
+index 226faab..fc35308 100644
+--- a/drivers/net/xen-netfront.c
++++ b/drivers/net/xen-netfront.c
+@@ -1922,14 +1922,14 @@ static int __devexit xennet_remove(struct xenbus_device *dev)
+ 
+ 	dev_dbg(&dev->dev, "%s\n", dev->nodename);
+ 
+-	unregister_netdev(info->netdev);
+-
+ 	xennet_disconnect_backend(info);
+ 
+-	del_timer_sync(&info->rx_refill_timer);
+-
+ 	xennet_sysfs_delif(info->netdev);
+ 
++	unregister_netdev(info->netdev);
++
++	del_timer_sync(&info->rx_refill_timer);
++
+ 	free_percpu(info->stats);
+ 
+ 	free_netdev(info->netdev);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0043-can-flexcan-use-be32_to_cpup-to-handle-the-value-of-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0043-can-flexcan-use-be32_to_cpup-to-handle-the-value-of-.patch
new file mode 100644
index 0000000..fa007b3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0043-can-flexcan-use-be32_to_cpup-to-handle-the-value-of-.patch
@@ -0,0 +1,44 @@
+From 06f8253f22e3ba961cc490243917206e2a8a8502 Mon Sep 17 00:00:00 2001
+From: Hui Wang <jason77.wang@gmail.com>
+Date: Wed, 27 Jun 2012 16:19:18 +0800
+Subject: [PATCH 43/46] can: flexcan: use be32_to_cpup to handle the value of
+ dt entry
+
+commit 85f2f834e85517307f13e30e630a5fc86f757cb5 upstream.
+
+The freescale arm i.MX series platform can support this driver, and
+usually the arm cpu works in the little endian mode by default, while
+device tree entry value is stored in big endian format, we should use
+be32_to_cpup() to handle them, after modification, it can work well
+both on the le cpu and be cpu.
+
+Cc: Shawn Guo <shawn.guo@linaro.org>
+Signed-off-by: Hui Wang <jason77.wang@gmail.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/can/flexcan.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
+index e023379..e59d006 100644
+--- a/drivers/net/can/flexcan.c
++++ b/drivers/net/can/flexcan.c
+@@ -933,12 +933,12 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
+ 	u32 clock_freq = 0;
+ 
+ 	if (pdev->dev.of_node) {
+-		const u32 *clock_freq_p;
++		const __be32 *clock_freq_p;
+ 
+ 		clock_freq_p = of_get_property(pdev->dev.of_node,
+ 						"clock-frequency", NULL);
+ 		if (clock_freq_p)
+-			clock_freq = *clock_freq_p;
++			clock_freq = be32_to_cpup(clock_freq_p);
+ 	}
+ 
+ 	if (!clock_freq) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0044-acpi_pad-fix-power_saving-thread-deadlock.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0044-acpi_pad-fix-power_saving-thread-deadlock.patch
new file mode 100644
index 0000000..fd063f1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0044-acpi_pad-fix-power_saving-thread-deadlock.patch
@@ -0,0 +1,66 @@
+From 64a1cb8318eb947d5217e72c7b295a1bda892ecd Mon Sep 17 00:00:00 2001
+From: Stuart Hayes <Stuart_Hayes@Dell.com>
+Date: Wed, 13 Jun 2012 16:10:45 -0500
+Subject: [PATCH 44/46] acpi_pad: fix power_saving thread deadlock
+
+commit 5f1601261050251a5ca293378b492a69d590dacb upstream.
+
+The acpi_pad driver can get stuck in destroy_power_saving_task()
+waiting for kthread_stop() to stop a power_saving thread.  The problem
+is that the isolated_cpus_lock mutex is owned when
+destroy_power_saving_task() calls kthread_stop(), which waits for a
+power_saving thread to end, and the power_saving thread tries to
+acquire the isolated_cpus_lock when it calls round_robin_cpu().  This
+patch fixes the issue by making round_robin_cpu() use its own mutex.
+
+https://bugzilla.kernel.org/show_bug.cgi?id=42981
+
+Signed-off-by: Stuart Hayes <Stuart_Hayes@Dell.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/acpi/acpi_pad.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/acpi/acpi_pad.c b/drivers/acpi/acpi_pad.c
+index a43fa1a..1502c502 100644
+--- a/drivers/acpi/acpi_pad.c
++++ b/drivers/acpi/acpi_pad.c
+@@ -36,6 +36,7 @@
+ #define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator"
+ #define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80
+ static DEFINE_MUTEX(isolated_cpus_lock);
++static DEFINE_MUTEX(round_robin_lock);
+ 
+ static unsigned long power_saving_mwait_eax;
+ 
+@@ -107,7 +108,7 @@ static void round_robin_cpu(unsigned int tsk_index)
+ 	if (!alloc_cpumask_var(&tmp, GFP_KERNEL))
+ 		return;
+ 
+-	mutex_lock(&isolated_cpus_lock);
++	mutex_lock(&round_robin_lock);
+ 	cpumask_clear(tmp);
+ 	for_each_cpu(cpu, pad_busy_cpus)
+ 		cpumask_or(tmp, tmp, topology_thread_cpumask(cpu));
+@@ -116,7 +117,7 @@ static void round_robin_cpu(unsigned int tsk_index)
+ 	if (cpumask_empty(tmp))
+ 		cpumask_andnot(tmp, cpu_online_mask, pad_busy_cpus);
+ 	if (cpumask_empty(tmp)) {
+-		mutex_unlock(&isolated_cpus_lock);
++		mutex_unlock(&round_robin_lock);
+ 		return;
+ 	}
+ 	for_each_cpu(cpu, tmp) {
+@@ -131,7 +132,7 @@ static void round_robin_cpu(unsigned int tsk_index)
+ 	tsk_in_cpu[tsk_index] = preferred_cpu;
+ 	cpumask_set_cpu(preferred_cpu, pad_busy_cpus);
+ 	cpu_weight[preferred_cpu]++;
+-	mutex_unlock(&isolated_cpus_lock);
++	mutex_unlock(&round_robin_lock);
+ 
+ 	set_cpus_allowed_ptr(current, cpumask_of(preferred_cpu));
+ }
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0045-batman-adv-only-drop-packets-of-known-wifi-clients.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0045-batman-adv-only-drop-packets-of-known-wifi-clients.patch
new file mode 100644
index 0000000..ce2107d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0045-batman-adv-only-drop-packets-of-known-wifi-clients.patch
@@ -0,0 +1,55 @@
+From b3f045e43695ea8ac7c43715d0c98d58d488683d Mon Sep 17 00:00:00 2001
+From: Marek Lindner <lindner_marek@yahoo.de>
+Date: Wed, 20 Jun 2012 17:16:05 +0200
+Subject: [PATCH 45/46] batman-adv: only drop packets of known wifi clients
+
+commit 5870adc68fc39d81089f1e80efdf64b97e5c37a1 upstream.
+
+bug introduced with 59b699cdee039d75915c354da06937102d1f9a84
+
+If the source or destination mac address of an ethernet packet
+could not be found in the translation table the packet was
+dropped if AP isolation was turned on. This behavior would
+make it impossible to send broadcast packets over the mesh as
+the broadcast address will never enter the translation table.
+
+Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
+Acked-by: Antonio Quartulli <ordex@autistici.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/batman-adv/translation-table.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
+index 5f09a57..088af45 100644
+--- a/net/batman-adv/translation-table.c
++++ b/net/batman-adv/translation-table.c
+@@ -1816,10 +1816,10 @@ bool is_ap_isolated(struct bat_priv *bat_priv, uint8_t *src, uint8_t *dst)
+ {
+ 	struct tt_local_entry *tt_local_entry = NULL;
+ 	struct tt_global_entry *tt_global_entry = NULL;
+-	bool ret = true;
++	bool ret = false;
+ 
+ 	if (!atomic_read(&bat_priv->ap_isolation))
+-		return false;
++		goto out;
+ 
+ 	tt_local_entry = tt_local_hash_find(bat_priv, dst);
+ 	if (!tt_local_entry)
+@@ -1829,10 +1829,10 @@ bool is_ap_isolated(struct bat_priv *bat_priv, uint8_t *src, uint8_t *dst)
+ 	if (!tt_global_entry)
+ 		goto out;
+ 
+-	if (_is_ap_isolated(tt_local_entry, tt_global_entry))
++	if (!_is_ap_isolated(tt_local_entry, tt_global_entry))
+ 		goto out;
+ 
+-	ret = false;
++	ret = true;
+ 
+ out:
+ 	if (tt_global_entry)
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0046-Linux-3.2.22.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0046-Linux-3.2.22.patch
new file mode 100644
index 0000000..f96d4a6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.22/0046-Linux-3.2.22.patch
@@ -0,0 +1,24 @@
+From 453efabb6ea10cbe4a726e9637b76991f39d3655 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Wed, 4 Jul 2012 05:44:35 +0100
+Subject: [PATCH 46/46] Linux 3.2.22
+
+---
+ Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 7eb465e..9a7d921 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 2
+-SUBLEVEL = 21
++SUBLEVEL = 22
+ EXTRAVERSION =
+ NAME = Saber-toothed Squirrel
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0001-splice-fix-racy-pipe-buffers-uses.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0001-splice-fix-racy-pipe-buffers-uses.patch
new file mode 100644
index 0000000..6441cc2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0001-splice-fix-racy-pipe-buffers-uses.patch
@@ -0,0 +1,298 @@
+From e02d361ade75d22d28ce36460954b4bc6439fc74 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Tue, 12 Jun 2012 15:24:40 +0200
+Subject: [PATCH 01/49] splice: fix racy pipe->buffers uses
+
+commit 047fe3605235888f3ebcda0c728cb31937eadfe6 upstream.
+
+Dave Jones reported a kernel BUG at mm/slub.c:3474! triggered
+by splice_shrink_spd() called from vmsplice_to_pipe()
+
+commit 35f3d14dbbc5 (pipe: add support for shrinking and growing pipes)
+added capability to adjust pipe->buffers.
+
+Problem is some paths don't hold pipe mutex and assume pipe->buffers
+doesn't change for their duration.
+
+Fix this by adding nr_pages_max field in struct splice_pipe_desc, and
+use it in place of pipe->buffers where appropriate.
+
+splice_shrink_spd() loses its struct pipe_inode_info argument.
+
+Reported-by: Dave Jones <davej@redhat.com>
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Jens Axboe <axboe@kernel.dk>
+Cc: Alexander Viro <viro@zeniv.linux.org.uk>
+Cc: Tom Herbert <therbert@google.com>
+Tested-by: Dave Jones <davej@redhat.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+[bwh: Backported to 3.2:
+ - Adjust context in vmsplice_to_pipe()
+ - Update one more call to splice_shrink_spd(), from skb_splice_bits()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/splice.c            |   35 ++++++++++++++++++++---------------
+ include/linux/splice.h |    8 ++++----
+ kernel/relay.c         |    5 +++--
+ kernel/trace/trace.c   |    6 ++++--
+ mm/shmem.c             |    3 ++-
+ net/core/skbuff.c      |    3 ++-
+ 6 files changed, 35 insertions(+), 25 deletions(-)
+
+diff --git a/fs/splice.c b/fs/splice.c
+index 6d0dfb8..014fcb4 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -274,13 +274,16 @@ void spd_release_page(struct splice_pipe_desc *spd, unsigned int i)
+  * Check if we need to grow the arrays holding pages and partial page
+  * descriptions.
+  */
+-int splice_grow_spd(struct pipe_inode_info *pipe, struct splice_pipe_desc *spd)
++int splice_grow_spd(const struct pipe_inode_info *pipe, struct splice_pipe_desc *spd)
+ {
+-	if (pipe->buffers <= PIPE_DEF_BUFFERS)
++	unsigned int buffers = ACCESS_ONCE(pipe->buffers);
++
++	spd->nr_pages_max = buffers;
++	if (buffers <= PIPE_DEF_BUFFERS)
+ 		return 0;
+ 
+-	spd->pages = kmalloc(pipe->buffers * sizeof(struct page *), GFP_KERNEL);
+-	spd->partial = kmalloc(pipe->buffers * sizeof(struct partial_page), GFP_KERNEL);
++	spd->pages = kmalloc(buffers * sizeof(struct page *), GFP_KERNEL);
++	spd->partial = kmalloc(buffers * sizeof(struct partial_page), GFP_KERNEL);
+ 
+ 	if (spd->pages && spd->partial)
+ 		return 0;
+@@ -290,10 +293,9 @@ int splice_grow_spd(struct pipe_inode_info *pipe, struct splice_pipe_desc *spd)
+ 	return -ENOMEM;
+ }
+ 
+-void splice_shrink_spd(struct pipe_inode_info *pipe,
+-		       struct splice_pipe_desc *spd)
++void splice_shrink_spd(struct splice_pipe_desc *spd)
+ {
+-	if (pipe->buffers <= PIPE_DEF_BUFFERS)
++	if (spd->nr_pages_max <= PIPE_DEF_BUFFERS)
+ 		return;
+ 
+ 	kfree(spd->pages);
+@@ -316,6 +318,7 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
+ 	struct splice_pipe_desc spd = {
+ 		.pages = pages,
+ 		.partial = partial,
++		.nr_pages_max = PIPE_DEF_BUFFERS,
+ 		.flags = flags,
+ 		.ops = &page_cache_pipe_buf_ops,
+ 		.spd_release = spd_release_page,
+@@ -327,7 +330,7 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
+ 	index = *ppos >> PAGE_CACHE_SHIFT;
+ 	loff = *ppos & ~PAGE_CACHE_MASK;
+ 	req_pages = (len + loff + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
+-	nr_pages = min(req_pages, pipe->buffers);
++	nr_pages = min(req_pages, spd.nr_pages_max);
+ 
+ 	/*
+ 	 * Lookup the (hopefully) full range of pages we need.
+@@ -498,7 +501,7 @@ fill_it:
+ 	if (spd.nr_pages)
+ 		error = splice_to_pipe(pipe, &spd);
+ 
+-	splice_shrink_spd(pipe, &spd);
++	splice_shrink_spd(&spd);
+ 	return error;
+ }
+ 
+@@ -599,6 +602,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
+ 	struct splice_pipe_desc spd = {
+ 		.pages = pages,
+ 		.partial = partial,
++		.nr_pages_max = PIPE_DEF_BUFFERS,
+ 		.flags = flags,
+ 		.ops = &default_pipe_buf_ops,
+ 		.spd_release = spd_release_page,
+@@ -609,8 +613,8 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
+ 
+ 	res = -ENOMEM;
+ 	vec = __vec;
+-	if (pipe->buffers > PIPE_DEF_BUFFERS) {
+-		vec = kmalloc(pipe->buffers * sizeof(struct iovec), GFP_KERNEL);
++	if (spd.nr_pages_max > PIPE_DEF_BUFFERS) {
++		vec = kmalloc(spd.nr_pages_max * sizeof(struct iovec), GFP_KERNEL);
+ 		if (!vec)
+ 			goto shrink_ret;
+ 	}
+@@ -618,7 +622,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
+ 	offset = *ppos & ~PAGE_CACHE_MASK;
+ 	nr_pages = (len + offset + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
+ 
+-	for (i = 0; i < nr_pages && i < pipe->buffers && len; i++) {
++	for (i = 0; i < nr_pages && i < spd.nr_pages_max && len; i++) {
+ 		struct page *page;
+ 
+ 		page = alloc_page(GFP_USER);
+@@ -666,7 +670,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
+ shrink_ret:
+ 	if (vec != __vec)
+ 		kfree(vec);
+-	splice_shrink_spd(pipe, &spd);
++	splice_shrink_spd(&spd);
+ 	return res;
+ 
+ err:
+@@ -1616,6 +1620,7 @@ static long vmsplice_to_pipe(struct file *file, const struct iovec __user *iov,
+ 	struct splice_pipe_desc spd = {
+ 		.pages = pages,
+ 		.partial = partial,
++		.nr_pages_max = PIPE_DEF_BUFFERS,
+ 		.flags = flags,
+ 		.ops = &user_page_pipe_buf_ops,
+ 		.spd_release = spd_release_page,
+@@ -1631,13 +1636,13 @@ static long vmsplice_to_pipe(struct file *file, const struct iovec __user *iov,
+ 
+ 	spd.nr_pages = get_iovec_page_array(iov, nr_segs, spd.pages,
+ 					    spd.partial, flags & SPLICE_F_GIFT,
+-					    pipe->buffers);
++					    spd.nr_pages_max);
+ 	if (spd.nr_pages <= 0)
+ 		ret = spd.nr_pages;
+ 	else
+ 		ret = splice_to_pipe(pipe, &spd);
+ 
+-	splice_shrink_spd(pipe, &spd);
++	splice_shrink_spd(&spd);
+ 	return ret;
+ }
+ 
+diff --git a/include/linux/splice.h b/include/linux/splice.h
+index 26e5b61..09a545a 100644
+--- a/include/linux/splice.h
++++ b/include/linux/splice.h
+@@ -51,7 +51,8 @@ struct partial_page {
+ struct splice_pipe_desc {
+ 	struct page **pages;		/* page map */
+ 	struct partial_page *partial;	/* pages[] may not be contig */
+-	int nr_pages;			/* number of pages in map */
++	int nr_pages;			/* number of populated pages in map */
++	unsigned int nr_pages_max;	/* pages[] & partial[] arrays size */
+ 	unsigned int flags;		/* splice flags */
+ 	const struct pipe_buf_operations *ops;/* ops associated with output pipe */
+ 	void (*spd_release)(struct splice_pipe_desc *, unsigned int);
+@@ -85,9 +86,8 @@ extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
+ /*
+  * for dynamic pipe sizing
+  */
+-extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *);
+-extern void splice_shrink_spd(struct pipe_inode_info *,
+-				struct splice_pipe_desc *);
++extern int splice_grow_spd(const struct pipe_inode_info *, struct splice_pipe_desc *);
++extern void splice_shrink_spd(struct splice_pipe_desc *);
+ extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
+ 
+ extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
+diff --git a/kernel/relay.c b/kernel/relay.c
+index b6f803a..a535fc9 100644
+--- a/kernel/relay.c
++++ b/kernel/relay.c
+@@ -1235,6 +1235,7 @@ static ssize_t subbuf_splice_actor(struct file *in,
+ 	struct splice_pipe_desc spd = {
+ 		.pages = pages,
+ 		.nr_pages = 0,
++		.nr_pages_max = PIPE_DEF_BUFFERS,
+ 		.partial = partial,
+ 		.flags = flags,
+ 		.ops = &relay_pipe_buf_ops,
+@@ -1302,8 +1303,8 @@ static ssize_t subbuf_splice_actor(struct file *in,
+                 ret += padding;
+ 
+ out:
+-	splice_shrink_spd(pipe, &spd);
+-        return ret;
++	splice_shrink_spd(&spd);
++	return ret;
+ }
+ 
+ static ssize_t relay_file_splice_read(struct file *in,
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 697e49d..7e4edd3 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -3456,6 +3456,7 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,
+ 		.pages		= pages_def,
+ 		.partial	= partial_def,
+ 		.nr_pages	= 0, /* This gets updated below. */
++		.nr_pages_max	= PIPE_DEF_BUFFERS,
+ 		.flags		= flags,
+ 		.ops		= &tracing_pipe_buf_ops,
+ 		.spd_release	= tracing_spd_release_pipe,
+@@ -3527,7 +3528,7 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,
+ 
+ 	ret = splice_to_pipe(pipe, &spd);
+ out:
+-	splice_shrink_spd(pipe, &spd);
++	splice_shrink_spd(&spd);
+ 	return ret;
+ 
+ out_err:
+@@ -4017,6 +4018,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
+ 	struct splice_pipe_desc spd = {
+ 		.pages		= pages_def,
+ 		.partial	= partial_def,
++		.nr_pages_max	= PIPE_DEF_BUFFERS,
+ 		.flags		= flags,
+ 		.ops		= &buffer_pipe_buf_ops,
+ 		.spd_release	= buffer_spd_release,
+@@ -4104,7 +4106,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
+ 	}
+ 
+ 	ret = splice_to_pipe(pipe, &spd);
+-	splice_shrink_spd(pipe, &spd);
++	splice_shrink_spd(&spd);
+ out:
+ 	return ret;
+ }
+diff --git a/mm/shmem.c b/mm/shmem.c
+index 6c253f7..7a82174 100644
+--- a/mm/shmem.c
++++ b/mm/shmem.c
+@@ -1359,6 +1359,7 @@ static ssize_t shmem_file_splice_read(struct file *in, loff_t *ppos,
+ 	struct splice_pipe_desc spd = {
+ 		.pages = pages,
+ 		.partial = partial,
++		.nr_pages_max = PIPE_DEF_BUFFERS,
+ 		.flags = flags,
+ 		.ops = &page_cache_pipe_buf_ops,
+ 		.spd_release = spd_release_page,
+@@ -1447,7 +1448,7 @@ static ssize_t shmem_file_splice_read(struct file *in, loff_t *ppos,
+ 	if (spd.nr_pages)
+ 		error = splice_to_pipe(pipe, &spd);
+ 
+-	splice_shrink_spd(pipe, &spd);
++	splice_shrink_spd(&spd);
+ 
+ 	if (error > 0) {
+ 		*ppos += error;
+diff --git a/net/core/skbuff.c b/net/core/skbuff.c
+index 2ec200de..af9c3c6 100644
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -1663,6 +1663,7 @@ int skb_splice_bits(struct sk_buff *skb, unsigned int offset,
+ 	struct splice_pipe_desc spd = {
+ 		.pages = pages,
+ 		.partial = partial,
++		.nr_pages_max = MAX_SKB_FRAGS,
+ 		.flags = flags,
+ 		.ops = &sock_pipe_buf_ops,
+ 		.spd_release = sock_spd_release,
+@@ -1709,7 +1710,7 @@ done:
+ 		lock_sock(sk);
+ 	}
+ 
+-	splice_shrink_spd(pipe, &spd);
++	splice_shrink_spd(&spd);
+ 	return ret;
+ }
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0002-umem-fix-up-unplugging.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0002-umem-fix-up-unplugging.patch
new file mode 100644
index 0000000..0b28837
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0002-umem-fix-up-unplugging.patch
@@ -0,0 +1,86 @@
+From fd0fcfd8f28824587f180ccde95c03fca533ab05 Mon Sep 17 00:00:00 2001
+From: Tao Guo <glorioustao@gmail.com>
+Date: Wed, 13 Jun 2012 21:17:21 +0200
+Subject: [PATCH 02/49] umem: fix up unplugging
+
+commit 32587371ad3db2f9d335de10dbd8cffd4fff5669 upstream.
+
+Fix a regression introduced by 7eaceaccab5f40 ("block: remove per-queue
+plugging").  In that patch, Jens removed the whole mm_unplug_device()
+function, which used to be the trigger to make umem start to work.
+
+We need to implement unplugging to make umem start to work, or I/O will
+never be triggered.
+
+Signed-off-by: Tao Guo <Tao.Guo@emc.com>
+Cc: Neil Brown <neilb@suse.de>
+Cc: Jens Axboe <axboe@kernel.dk>
+Cc: Shaohua Li <shli@kernel.org>
+Acked-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/block/umem.c |   40 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
+
+diff --git a/drivers/block/umem.c b/drivers/block/umem.c
+index aa27120..9a72277 100644
+--- a/drivers/block/umem.c
++++ b/drivers/block/umem.c
+@@ -513,6 +513,44 @@ static void process_page(unsigned long data)
+ 	}
+ }
+ 
++struct mm_plug_cb {
++	struct blk_plug_cb cb;
++	struct cardinfo *card;
++};
++
++static void mm_unplug(struct blk_plug_cb *cb)
++{
++	struct mm_plug_cb *mmcb = container_of(cb, struct mm_plug_cb, cb);
++
++	spin_lock_irq(&mmcb->card->lock);
++	activate(mmcb->card);
++	spin_unlock_irq(&mmcb->card->lock);
++	kfree(mmcb);
++}
++
++static int mm_check_plugged(struct cardinfo *card)
++{
++	struct blk_plug *plug = current->plug;
++	struct mm_plug_cb *mmcb;
++
++	if (!plug)
++		return 0;
++
++	list_for_each_entry(mmcb, &plug->cb_list, cb.list) {
++		if (mmcb->cb.callback == mm_unplug && mmcb->card == card)
++			return 1;
++	}
++	/* Not currently on the callback list */
++	mmcb = kmalloc(sizeof(*mmcb), GFP_ATOMIC);
++	if (!mmcb)
++		return 0;
++
++	mmcb->card = card;
++	mmcb->cb.callback = mm_unplug;
++	list_add(&mmcb->cb.list, &plug->cb_list);
++	return 1;
++}
++
+ static void mm_make_request(struct request_queue *q, struct bio *bio)
+ {
+ 	struct cardinfo *card = q->queuedata;
+@@ -523,6 +561,8 @@ static void mm_make_request(struct request_queue *q, struct bio *bio)
+ 	*card->biotail = bio;
+ 	bio->bi_next = NULL;
+ 	card->biotail = &bio->bi_next;
++	if (bio->bi_rw & REQ_SYNC || !mm_check_plugged(card))
++		activate(card);
+ 	spin_unlock_irq(&card->lock);
+ 
+ 	return;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0003-mwifiex-fix-11n-rx-packet-drop-issue.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0003-mwifiex-fix-11n-rx-packet-drop-issue.patch
new file mode 100644
index 0000000..eef5de7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0003-mwifiex-fix-11n-rx-packet-drop-issue.patch
@@ -0,0 +1,88 @@
+From 8c92af27a522bcec5dc2ced7b49b8f3f57492b21 Mon Sep 17 00:00:00 2001
+From: Stone Piao <piaoyun@marvell.com>
+Date: Wed, 20 Jun 2012 20:21:10 -0700
+Subject: [PATCH 03/49] mwifiex: fix 11n rx packet drop issue
+
+commit 925839243dc9aa4ef25305f5afd10ed18258a4ac upstream.
+
+Currently we check the sequence number of last packet received
+against start_win. If a sequence hole is detected, start_win is
+updated to next sequence number.
+
+Since the rx sequence number is initialized to 0, a corner case
+exists when BA setup happens immediately after association. As
+0 is a valid sequence number, start_win gets increased to 1
+incorrectly. This causes the first packet with sequence number 0
+being dropped.
+
+Initialize rx sequence number as 0xffff and skip adjusting
+start_win if the sequence number remains 0xffff. The sequence
+number will be updated once the first packet is received.
+
+Signed-off-by: Stone Piao <piaoyun@marvell.com>
+Signed-off-by: Avinash Patil <patila@marvell.com>
+Signed-off-by: Kiran Divekar <dkiran@marvell.com>
+Signed-off-by: Bing Zhao <bzhao@marvell.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/mwifiex/11n_rxreorder.c |    5 +++--
+ drivers/net/wireless/mwifiex/11n_rxreorder.h |    7 +++++++
+ drivers/net/wireless/mwifiex/wmm.c           |    2 ++
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/mwifiex/11n_rxreorder.c b/drivers/net/wireless/mwifiex/11n_rxreorder.c
+index 7aa9aa0..39fd4d5 100644
+--- a/drivers/net/wireless/mwifiex/11n_rxreorder.c
++++ b/drivers/net/wireless/mwifiex/11n_rxreorder.c
+@@ -267,7 +267,8 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
+ 	else
+ 		last_seq = priv->rx_seq[tid];
+ 
+-	if (last_seq >= new_node->start_win)
++	if (last_seq != MWIFIEX_DEF_11N_RX_SEQ_NUM &&
++	    last_seq >= new_node->start_win)
+ 		new_node->start_win = last_seq + 1;
+ 
+ 	new_node->win_size = win_size;
+@@ -611,5 +612,5 @@ void mwifiex_11n_cleanup_reorder_tbl(struct mwifiex_private *priv)
+ 	spin_unlock_irqrestore(&priv->rx_reorder_tbl_lock, flags);
+ 
+ 	INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr);
+-	memset(priv->rx_seq, 0, sizeof(priv->rx_seq));
++	mwifiex_reset_11n_rx_seq_num(priv);
+ }
+diff --git a/drivers/net/wireless/mwifiex/11n_rxreorder.h b/drivers/net/wireless/mwifiex/11n_rxreorder.h
+index 033c8ad..7128baa 100644
+--- a/drivers/net/wireless/mwifiex/11n_rxreorder.h
++++ b/drivers/net/wireless/mwifiex/11n_rxreorder.h
+@@ -37,6 +37,13 @@
+ 
+ #define ADDBA_RSP_STATUS_ACCEPT 0
+ 
++#define MWIFIEX_DEF_11N_RX_SEQ_NUM	0xffff
++
++static inline void mwifiex_reset_11n_rx_seq_num(struct mwifiex_private *priv)
++{
++	memset(priv->rx_seq, 0xff, sizeof(priv->rx_seq));
++}
++
+ int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *,
+ 			       u16 seqNum,
+ 			       u16 tid, u8 *ta,
+diff --git a/drivers/net/wireless/mwifiex/wmm.c b/drivers/net/wireless/mwifiex/wmm.c
+index 6c239c3..b94a349 100644
+--- a/drivers/net/wireless/mwifiex/wmm.c
++++ b/drivers/net/wireless/mwifiex/wmm.c
+@@ -406,6 +406,8 @@ mwifiex_wmm_init(struct mwifiex_adapter *adapter)
+ 		priv->add_ba_param.tx_win_size = MWIFIEX_AMPDU_DEF_TXWINSIZE;
+ 		priv->add_ba_param.rx_win_size = MWIFIEX_AMPDU_DEF_RXWINSIZE;
+ 
++		mwifiex_reset_11n_rx_seq_num(priv);
++
+ 		atomic_set(&priv->wmm.tx_pkts_queued, 0);
+ 		atomic_set(&priv->wmm.highest_queued_prio, HIGH_PRIO_TID);
+ 	}
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0004-mwifiex-fix-WPS-eapol-handshake-failure.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0004-mwifiex-fix-WPS-eapol-handshake-failure.patch
new file mode 100644
index 0000000..b25c446
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0004-mwifiex-fix-WPS-eapol-handshake-failure.patch
@@ -0,0 +1,52 @@
+From ea7217bde3c1bbcb215d3b67a4308399ac1d574c Mon Sep 17 00:00:00 2001
+From: Stone Piao <piaoyun@marvell.com>
+Date: Wed, 20 Jun 2012 20:21:11 -0700
+Subject: [PATCH 04/49] mwifiex: fix WPS eapol handshake failure
+
+commit f03ba7e9a24e5e9efaad56bd1713b994ea556b16 upstream.
+
+After association, STA will go through eapol handshake with WPS
+enabled AP. It's observed that WPS handshake fails with some 11n
+AP. The reason for the failure is that the eapol packet is sent
+via 11n frame aggregation.
+
+The eapol packet should be sent directly without 11n aggregation.
+
+This patch fixes the problem by adding WPS session control while
+dequeuing Tx packets for transmission.
+
+Signed-off-by: Stone Piao <piaoyun@marvell.com>
+Signed-off-by: Avinash Patil <patila@marvell.com>
+Signed-off-by: Bing Zhao <bzhao@marvell.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+[bwh: Backported to 3.2: reformat the if-statement per earlier
+ upstream commit c65a30f35f938b421ac67c34a9e70b0e49e6019a]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/mwifiex/wmm.c |   10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/wireless/mwifiex/wmm.c b/drivers/net/wireless/mwifiex/wmm.c
+index b94a349..06fcf1e 100644
+--- a/drivers/net/wireless/mwifiex/wmm.c
++++ b/drivers/net/wireless/mwifiex/wmm.c
+@@ -1211,10 +1211,12 @@ mwifiex_dequeue_tx_packet(struct mwifiex_adapter *adapter)
+ 		return 0;
+ 	}
+ 
+-	if (!ptr->is_11n_enabled || mwifiex_is_ba_stream_setup(priv, ptr, tid)
+-	    || ((priv->sec_info.wpa_enabled
+-		  || priv->sec_info.wpa2_enabled) && !priv->wpa_is_gtk_set)
+-		) {
++	if (!ptr->is_11n_enabled ||
++	    mwifiex_is_ba_stream_setup(priv, ptr, tid) ||
++	    priv->wps.session_enable ||
++	    ((priv->sec_info.wpa_enabled ||
++	      priv->sec_info.wpa2_enabled) &&
++	     !priv->wpa_is_gtk_set)) {
+ 		mwifiex_send_single_packet(priv, ptr, ptr_index, flags);
+ 		/* ra_list_spinlock has been freed in
+ 		   mwifiex_send_single_packet() */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0005-NFC-Prevent-multiple-buffer-overflows-in-NCI.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0005-NFC-Prevent-multiple-buffer-overflows-in-NCI.patch
new file mode 100644
index 0000000..10ae647
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0005-NFC-Prevent-multiple-buffer-overflows-in-NCI.patch
@@ -0,0 +1,52 @@
+From e7d858dec1d8cf3c283019ff51adae14b8be9388 Mon Sep 17 00:00:00 2001
+From: Dan Rosenberg <dan.j.rosenberg@gmail.com>
+Date: Mon, 25 Jun 2012 16:05:27 +0200
+Subject: [PATCH 05/49] NFC: Prevent multiple buffer overflows in NCI
+
+commit 67de956ff5dc1d4f321e16cfbd63f5be3b691b43 upstream.
+
+Fix multiple remotely-exploitable stack-based buffer overflows due to
+the NCI code pulling length fields directly from incoming frames and
+copying too much data into statically-sized arrays.
+
+Signed-off-by: Dan Rosenberg <dan.j.rosenberg@gmail.com>
+Cc: security@kernel.org
+Cc: Lauro Ramos Venancio <lauro.venancio@openbossa.org>
+Cc: Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
+Cc: Samuel Ortiz <sameo@linux.intel.com>
+Cc: David S. Miller <davem@davemloft.net>
+Acked-by: Ilan Elias <ilane@ti.com>
+Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
+[bwh: Backported to 3.2:
+ - Drop changes to parsing of tech B and tech F parameters
+ - Various renaming]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/nfc/nci/ntf.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/net/nfc/nci/ntf.c b/net/nfc/nci/ntf.c
+index 96633f5..12b6a80 100644
+--- a/net/nfc/nci/ntf.c
++++ b/net/nfc/nci/ntf.c
+@@ -86,7 +86,7 @@ static int nci_rf_activate_nfca_passive_poll(struct nci_dev *ndev,
+ 	nfca_poll->sens_res = __le16_to_cpu(*((__u16 *)data));
+ 	data += 2;
+ 
+-	nfca_poll->nfcid1_len = *data++;
++	nfca_poll->nfcid1_len = min_t(__u8, *data++, sizeof(nfca_poll->nfcid1));
+ 
+ 	nfc_dbg("sens_res 0x%x, nfcid1_len %d",
+ 		nfca_poll->sens_res,
+@@ -111,7 +111,7 @@ static int nci_rf_activate_nfca_passive_poll(struct nci_dev *ndev,
+ 
+ 	switch (ntf->rf_interface_type) {
+ 	case NCI_RF_INTERFACE_ISO_DEP:
+-		nfca_poll_iso_dep->rats_res_len = *data++;
++		nfca_poll_iso_dep->rats_res_len = min_t(__u8, *data++, 20);
+ 		if (nfca_poll_iso_dep->rats_res_len > 0) {
+ 			memcpy(nfca_poll_iso_dep->rats_res,
+ 				data,
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0006-ath9k-fix-dynamic-WEP-related-regression.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0006-ath9k-fix-dynamic-WEP-related-regression.patch
new file mode 100644
index 0000000..e8fe414
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0006-ath9k-fix-dynamic-WEP-related-regression.patch
@@ -0,0 +1,80 @@
+From 11f5e090b288e9e933c8b7790626db9a5beef760 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Sat, 23 Jun 2012 19:23:31 +0200
+Subject: [PATCH 06/49] ath9k: fix dynamic WEP related regression
+
+commit bed3d9c0b71f9afbfec905cb6db3b9f16be29d4d upstream.
+
+commit 7a532fe7131216a02c81a6c1b1f8632da1195a58
+ath9k_hw: fix interpretation of the rx KeyMiss flag
+
+This commit used the rx key miss indication to detect packets that were
+passed from the hardware without being decrypted, however it seems that
+this bit is not only undefined in the static WEP case, but also for
+dynamically allocated WEP keys. This caused a regression when using
+WEP-LEAP.
+
+This patch fixes the regression by keeping track of which key indexes
+refer to CCMP keys and only using the key miss indication for those.
+
+Reported-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/ath/ath.h        |    1 +
+ drivers/net/wireless/ath/ath9k/recv.c |    3 ++-
+ drivers/net/wireless/ath/key.c        |    4 ++++
+ 3 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath.h b/drivers/net/wireless/ath/ath.h
+index 0f9ee46..4cc4a8b 100644
+--- a/drivers/net/wireless/ath/ath.h
++++ b/drivers/net/wireless/ath/ath.h
+@@ -143,6 +143,7 @@ struct ath_common {
+ 	u32 keymax;
+ 	DECLARE_BITMAP(keymap, ATH_KEYMAX);
+ 	DECLARE_BITMAP(tkip_keymap, ATH_KEYMAX);
++	DECLARE_BITMAP(ccmp_keymap, ATH_KEYMAX);
+ 	enum ath_crypt_caps crypt_caps;
+ 
+ 	unsigned int clockrate;
+diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
+index 2f3aeac..e6d791c 100644
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -829,7 +829,8 @@ static bool ath9k_rx_accept(struct ath_common *common,
+ 	 * descriptor does contain a valid key index. This has been observed
+ 	 * mostly with CCMP encryption.
+ 	 */
+-	if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID)
++	if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID ||
++	    !test_bit(rx_stats->rs_keyix, common->ccmp_keymap))
+ 		rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS;
+ 
+ 	if (!rx_stats->rs_datalen)
+diff --git a/drivers/net/wireless/ath/key.c b/drivers/net/wireless/ath/key.c
+index 4cf7c5e..1ec3fa5 100644
+--- a/drivers/net/wireless/ath/key.c
++++ b/drivers/net/wireless/ath/key.c
+@@ -556,6 +556,9 @@ int ath_key_config(struct ath_common *common,
+ 		return -EIO;
+ 
+ 	set_bit(idx, common->keymap);
++	if (key->cipher == WLAN_CIPHER_SUITE_CCMP)
++		set_bit(idx, common->ccmp_keymap);
++
+ 	if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
+ 		set_bit(idx + 64, common->keymap);
+ 		set_bit(idx, common->tkip_keymap);
+@@ -582,6 +585,7 @@ void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf *key)
+ 		return;
+ 
+ 	clear_bit(key->hw_key_idx, common->keymap);
++	clear_bit(key->hw_key_idx, common->ccmp_keymap);
+ 	if (key->cipher != WLAN_CIPHER_SUITE_TKIP)
+ 		return;
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0007-NFC-Return-from-rawsock_release-when-sk-is-NULL.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0007-NFC-Return-from-rawsock_release-when-sk-is-NULL.patch
new file mode 100644
index 0000000..43801f4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0007-NFC-Return-from-rawsock_release-when-sk-is-NULL.patch
@@ -0,0 +1,107 @@
+From fd1f8dc4e31b8daeec0cb785256de7297a06e300 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Tue, 12 Jun 2012 00:47:58 +0200
+Subject: [PATCH 07/49] NFC: Return from rawsock_release when sk is NULL
+
+commit 03e934f620101ca2cfc9383bd76172dd3e1f8567 upstream.
+
+Sasha Levin reported following panic :
+
+[ 2136.383310] BUG: unable to handle kernel NULL pointer dereference at
+00000000000003b0
+[ 2136.384022] IP: [<ffffffff8114e400>] __lock_acquire+0xc0/0x4b0
+[ 2136.384022] PGD 131c4067 PUD 11c0c067 PMD 0
+[ 2136.388106] Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
+[ 2136.388106] CPU 1
+[ 2136.388106] Pid: 24855, comm: trinity-child1 Tainted: G        W
+3.5.0-rc2-sasha-00015-g7b268f7 #374
+[ 2136.388106] RIP: 0010:[<ffffffff8114e400>]  [<ffffffff8114e400>]
+__lock_acquire+0xc0/0x4b0
+[ 2136.388106] RSP: 0018:ffff8800130b3ca8  EFLAGS: 00010046
+[ 2136.388106] RAX: 0000000000000086 RBX: ffff88001186b000 RCX:
+0000000000000000
+[ 2136.388106] RDX: 0000000000000000 RSI: 0000000000000000 RDI:
+0000000000000000
+[ 2136.388106] RBP: ffff8800130b3d08 R08: 0000000000000001 R09:
+0000000000000000
+[ 2136.388106] R10: 0000000000000000 R11: 0000000000000001 R12:
+0000000000000002
+[ 2136.388106] R13: 00000000000003b0 R14: 0000000000000000 R15:
+0000000000000000
+[ 2136.388106] FS:  00007fa5b1bd4700(0000) GS:ffff88001b800000(0000)
+knlGS:0000000000000000
+[ 2136.388106] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[ 2136.388106] CR2: 00000000000003b0 CR3: 0000000011d1f000 CR4:
+00000000000406e0
+[ 2136.388106] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
+0000000000000000
+[ 2136.388106] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7:
+0000000000000400
+[ 2136.388106] Process trinity-child1 (pid: 24855, threadinfo
+ffff8800130b2000, task ffff88001186b000)
+[ 2136.388106] Stack:
+[ 2136.388106]  ffff8800130b3cd8 ffffffff81121785 ffffffff81236774
+000080d000000001
+[ 2136.388106]  ffff88001b9d6c00 00000000001d6c00 ffffffff130b3d08
+ffff88001186b000
+[ 2136.388106]  0000000000000000 0000000000000002 0000000000000000
+0000000000000000
+[ 2136.388106] Call Trace:
+[ 2136.388106]  [<ffffffff81121785>] ? sched_clock_local+0x25/0x90
+[ 2136.388106]  [<ffffffff81236774>] ? get_empty_filp+0x74/0x220
+[ 2136.388106]  [<ffffffff8114e97a>] lock_acquire+0x18a/0x1e0
+[ 2136.388106]  [<ffffffff836b37df>] ? rawsock_release+0x4f/0xa0
+[ 2136.388106]  [<ffffffff837c0ef0>] _raw_write_lock_bh+0x40/0x80
+[ 2136.388106]  [<ffffffff836b37df>] ? rawsock_release+0x4f/0xa0
+[ 2136.388106]  [<ffffffff836b37df>] rawsock_release+0x4f/0xa0
+[ 2136.388106]  [<ffffffff8321cfe8>] sock_release+0x18/0x70
+[ 2136.388106]  [<ffffffff8321d069>] sock_close+0x29/0x30
+[ 2136.388106]  [<ffffffff81236bca>] __fput+0x11a/0x2c0
+[ 2136.388106]  [<ffffffff81236d85>] fput+0x15/0x20
+[ 2136.388106]  [<ffffffff8321de34>] sys_accept4+0x1b4/0x200
+[ 2136.388106]  [<ffffffff837c165c>] ? _raw_spin_unlock_irq+0x4c/0x80
+[ 2136.388106]  [<ffffffff837c1669>] ? _raw_spin_unlock_irq+0x59/0x80
+[ 2136.388106]  [<ffffffff837c2565>] ? sysret_check+0x22/0x5d
+[ 2136.388106]  [<ffffffff8321de8b>] sys_accept+0xb/0x10
+[ 2136.388106]  [<ffffffff837c2539>] system_call_fastpath+0x16/0x1b
+[ 2136.388106] Code: ec 04 00 0f 85 ea 03 00 00 be d5 0b 00 00 48 c7 c7
+8a c1 40 84 e8 b1 a5 f8 ff 31 c0 e9 d4 03 00 00 66 2e 0f 1f 84 00 00 00
+00 00 <49> 81 7d 00 60 73 5e 85 b8 01 00 00 00 44 0f 44 e0 83 fe 01 77
+[ 2136.388106] RIP  [<ffffffff8114e400>] __lock_acquire+0xc0/0x4b0
+[ 2136.388106]  RSP <ffff8800130b3ca8>
+[ 2136.388106] CR2: 00000000000003b0
+[ 2136.388106] ---[ end trace 6d450e935ee18982 ]---
+[ 2136.388106] Kernel panic - not syncing: Fatal exception in interrupt
+
+rawsock_release() should test if sock->sk is NULL before calling
+sock_orphan()/sock_put()
+
+Reported-by: Sasha Levin <levinsasha928@gmail.com>
+Tested-by: Sasha Levin <levinsasha928@gmail.com>
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
+[bwh: Backported to 3.2: keep using nfc_dbg(), not pr_debug()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/nfc/rawsock.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c
+index ee7b2b3..7a167fc 100644
+--- a/net/nfc/rawsock.c
++++ b/net/nfc/rawsock.c
+@@ -52,7 +52,10 @@ static int rawsock_release(struct socket *sock)
+ {
+ 	struct sock *sk = sock->sk;
+ 
+-	nfc_dbg("sock=%p", sock);
++	nfc_dbg("sock=%p sk=%p", sock, sk);
++
++	if (!sk)
++		return 0;
+ 
+ 	sock_orphan(sk);
+ 	sock_put(sk);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0008-rtlwifi-rtl8192cu-New-USB-IDs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0008-rtlwifi-rtl8192cu-New-USB-IDs.patch
new file mode 100644
index 0000000..99f6f60
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0008-rtlwifi-rtl8192cu-New-USB-IDs.patch
@@ -0,0 +1,45 @@
+From a771eb7b20c60a73ec422943dd387fbca27cf94d Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Mon, 25 Jun 2012 18:01:12 -0500
+Subject: [PATCH 08/49] rtlwifi: rtl8192cu: New USB IDs
+
+commit f63d7dabd5da9ef41f28f6d69b29bc084db0ca5a upstream.
+
+The latest Realtek driver for the RTL8188CU and RTL8192CU chips adds three
+new USB IDs.
+
+Reported-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/rtlwifi/rtl8192cu/sw.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+index 94a3e17..0302148 100644
+--- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
++++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+@@ -311,9 +311,11 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
+ 	{RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/
+ 	{RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/
+ 	{RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/
++	{RTL_USB_DEVICE(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/
+ 	{RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
+ 	{RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/
+ 	{RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/
++	{RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/
+ 	/* HP - Lite-On ,8188CUS Slim Combo */
+ 	{RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)},
+ 	{RTL_USB_DEVICE(0x13d3, 0x3357, rtl92cu_hal_cfg)}, /* AzureWave */
+@@ -355,6 +357,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = {
+ 	{RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/
+ 	{RTL_USB_DEVICE(0x0846, 0x9021, rtl92cu_hal_cfg)}, /*Netgear-Sercomm*/
+ 	{RTL_USB_DEVICE(0x0b05, 0x17ab, rtl92cu_hal_cfg)}, /*ASUS-Edimax*/
++	{RTL_USB_DEVICE(0x0bda, 0x8186, rtl92cu_hal_cfg)}, /*Realtek 92CE-VAU*/
+ 	{RTL_USB_DEVICE(0x0df6, 0x0061, rtl92cu_hal_cfg)}, /*Sitecom-Edimax*/
+ 	{RTL_USB_DEVICE(0x0e66, 0x0019, rtl92cu_hal_cfg)}, /*Hawking-Edimax*/
+ 	{RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0009-ath9k-enable-serialize_regmode-for-non-PCIE-AR9287.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0009-ath9k-enable-serialize_regmode-for-non-PCIE-AR9287.patch
new file mode 100644
index 0000000..383dda2
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0009-ath9k-enable-serialize_regmode-for-non-PCIE-AR9287.patch
@@ -0,0 +1,34 @@
+From f65b74252f667d75391a86a6dee82aefb0e9b983 Mon Sep 17 00:00:00 2001
+From: Panayiotis Karabassis <panayk@gmail.com>
+Date: Tue, 26 Jun 2012 23:37:17 +0300
+Subject: [PATCH 09/49] ath9k: enable serialize_regmode for non-PCIE AR9287
+
+commit 7508b657967cf664b5aa0f6367d05016e7e3bc2a upstream.
+
+https://bugzilla.kernel.org/show_bug.cgi?id=42903
+
+Based on the work of <fynivx@gmail.com>
+
+Signed-off-by: Panayiotis Karabassis <panayk@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/ath/ath9k/hw.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
+index 6973620..7f97164 100644
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -557,7 +557,7 @@ static int __ath9k_hw_init(struct ath_hw *ah)
+ 
+ 	if (ah->config.serialize_regmode == SER_REG_MODE_AUTO) {
+ 		if (ah->hw_version.macVersion == AR_SREV_VERSION_5416_PCI ||
+-		    ((AR_SREV_9160(ah) || AR_SREV_9280(ah)) &&
++		    ((AR_SREV_9160(ah) || AR_SREV_9280(ah) || AR_SREV_9287(ah)) &&
+ 		     !ah->is_pciexpress)) {
+ 			ah->config.serialize_regmode =
+ 				SER_REG_MODE_ON;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0010-mac80211-correct-behaviour-on-unrecognised-action-fr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0010-mac80211-correct-behaviour-on-unrecognised-action-fr.patch
new file mode 100644
index 0000000..3aafce8
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0010-mac80211-correct-behaviour-on-unrecognised-action-fr.patch
@@ -0,0 +1,48 @@
+From 21cdc703702f7ffbf440dc29b68044ac13363078 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Wed, 27 Jun 2012 15:38:56 +0200
+Subject: [PATCH 10/49] mac80211: correct behaviour on unrecognised action
+ frames
+
+commit 4b5ebccc40843104d980f0714bc86bfcd5568941 upstream.
+
+When receiving an "individually addressed" action frame, the
+receiver is required to return it to the sender. mac80211
+gets this wrong as it also returns group addressed (mcast)
+frames to the sender. Fix this and update the reference to
+the new 802.11 standards version since things were shuffled
+around significantly.
+
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/mac80211/rx.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
+index 064d20f..cda4875 100644
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -2389,7 +2389,7 @@ ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx)
+ 	 * frames that we didn't handle, including returning unknown
+ 	 * ones. For all other modes we will return them to the sender,
+ 	 * setting the 0x80 bit in the action category, as required by
+-	 * 802.11-2007 7.3.1.11.
++	 * 802.11-2012 9.24.4.
+ 	 * Newer versions of hostapd shall also use the management frame
+ 	 * registration mechanisms, but older ones still use cooked
+ 	 * monitor interfaces so push all frames there.
+@@ -2399,6 +2399,9 @@ ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx)
+ 	     sdata->vif.type == NL80211_IFTYPE_AP_VLAN))
+ 		return RX_DROP_MONITOR;
+ 
++	if (is_multicast_ether_addr(mgmt->da))
++		return RX_DROP_MONITOR;
++
+ 	/* do not return rejected action frames */
+ 	if (mgmt->u.action.category & 0x80)
+ 		return RX_DROP_UNUSABLE;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0011-ASoC-tlv320aic3x-Fix-codec-pll-configure-bug.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0011-ASoC-tlv320aic3x-Fix-codec-pll-configure-bug.patch
new file mode 100644
index 0000000..29139a1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0011-ASoC-tlv320aic3x-Fix-codec-pll-configure-bug.patch
@@ -0,0 +1,62 @@
+From 8ba42ffb182648185f9f5f924d26cf97b6be721f Mon Sep 17 00:00:00 2001
+From: "Hebbar, Gururaja" <gururaja.hebbar@ti.com>
+Date: Tue, 26 Jun 2012 19:25:11 +0530
+Subject: [PATCH 11/49] ASoC: tlv320aic3x: Fix codec pll configure bug
+
+commit c9fe573a6584034670c1a55ee8162d623519cbbf upstream.
+
+In sound/soc/codecs/tlv320aic3x.c
+
+        data = snd_soc_read(codec, AIC3X_PLL_PROGA_REG);
+        snd_soc_write(codec, AIC3X_PLL_PROGA_REG,
+                      data | (pll_p << PLLP_SHIFT));
+
+In the above code, pll-p value is OR'ed with previous value without
+clearing it. Bug is not seen if pll-p value doesn't change across
+Sampling frequency.
+
+However on some platforms (like AM335x EVM-SK), pll-p may have different
+values across different sampling frequencies. In such case, above code
+configures the pll with a wrong value.
+Because of this bug, when a audio stream is played with pll value
+different from previous stream, audio is heard as differently(like its
+stretched).
+
+Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/soc/codecs/tlv320aic3x.c |    4 +---
+ sound/soc/codecs/tlv320aic3x.h |    1 +
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
+index d0dbac1..cdb473c 100644
+--- a/sound/soc/codecs/tlv320aic3x.c
++++ b/sound/soc/codecs/tlv320aic3x.c
+@@ -963,9 +963,7 @@ static int aic3x_hw_params(struct snd_pcm_substream *substream,
+ 	}
+ 
+ found:
+-	data = snd_soc_read(codec, AIC3X_PLL_PROGA_REG);
+-	snd_soc_write(codec, AIC3X_PLL_PROGA_REG,
+-		      data | (pll_p << PLLP_SHIFT));
++	snd_soc_update_bits(codec, AIC3X_PLL_PROGA_REG, PLLP_MASK, pll_p);
+ 	snd_soc_write(codec, AIC3X_OVRF_STATUS_AND_PLLR_REG,
+ 		      pll_r << PLLR_SHIFT);
+ 	snd_soc_write(codec, AIC3X_PLL_PROGB_REG, pll_j << PLLJ_SHIFT);
+diff --git a/sound/soc/codecs/tlv320aic3x.h b/sound/soc/codecs/tlv320aic3x.h
+index 06a1978..16d9999 100644
+--- a/sound/soc/codecs/tlv320aic3x.h
++++ b/sound/soc/codecs/tlv320aic3x.h
+@@ -166,6 +166,7 @@
+ 
+ /* PLL registers bitfields */
+ #define PLLP_SHIFT		0
++#define PLLP_MASK		7
+ #define PLLQ_SHIFT		3
+ #define PLLR_SHIFT		0
+ #define PLLJ_SHIFT		2
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0012-powerpc-xmon-Use-cpumask-iterator-to-avoid-warning.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0012-powerpc-xmon-Use-cpumask-iterator-to-avoid-warning.patch
new file mode 100644
index 0000000..217ab5d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0012-powerpc-xmon-Use-cpumask-iterator-to-avoid-warning.patch
@@ -0,0 +1,56 @@
+From 6d7506b0391c86ac347dce94f2c4642ce126cf45 Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Thu, 28 Jun 2012 19:28:57 +0000
+Subject: [PATCH 12/49] powerpc/xmon: Use cpumask iterator to avoid warning
+
+commit bc1d7702910c7c7e88eb60b58429dbfe293683ce upstream.
+
+We have a bug report where the kernel hits a warning in the cpumask
+code:
+
+WARNING: at include/linux/cpumask.h:107
+
+Which is:
+        WARN_ON_ONCE(cpu >= nr_cpumask_bits);
+
+The backtrace is:
+        cpu_cmd
+        cmds
+        xmon_core
+        xmon
+        die
+
+xmon is iterating through 0 to NR_CPUS. I'm not sure why we are still
+open coding this but iterating above nr_cpu_ids is definitely a bug.
+
+This patch iterates through all possible cpus, in case we issue a
+system reset and CPUs in an offline state call in.
+
+Perhaps the old code was trying to handle CPUs that were in the
+partition but were never started (eg kexec into a kernel with an
+nr_cpus= boot option). They are going to die way before we get into
+xmon since we haven't set any kernel state up for them.
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/powerpc/xmon/xmon.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
+index 03a217a..b7e63d8 100644
+--- a/arch/powerpc/xmon/xmon.c
++++ b/arch/powerpc/xmon/xmon.c
+@@ -975,7 +975,7 @@ static int cpu_cmd(void)
+ 		/* print cpus waiting or in xmon */
+ 		printf("cpus stopped:");
+ 		count = 0;
+-		for (cpu = 0; cpu < NR_CPUS; ++cpu) {
++		for_each_possible_cpu(cpu) {
+ 			if (cpumask_test_cpu(cpu, &cpus_in_xmon)) {
+ 				if (count == 0)
+ 					printf(" %x", cpu);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0013-powerpc-kvm-sldi-should-be-sld.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0013-powerpc-kvm-sldi-should-be-sld.patch
new file mode 100644
index 0000000..9f77ca5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0013-powerpc-kvm-sldi-should-be-sld.patch
@@ -0,0 +1,40 @@
+From af803001738a2e5609dbbe767f8f7a61bef3cf9c Mon Sep 17 00:00:00 2001
+From: Michael Neuling <mikey@neuling.org>
+Date: Mon, 25 Jun 2012 13:33:11 +0000
+Subject: [PATCH 13/49] powerpc/kvm: sldi should be sld
+
+commit 2f584a146a2965b82fce89b8d2f95dc5cfe468d0 upstream.
+
+Since we are taking a registers, this should never have been an sldi.
+Talking to paulus offline, this is the correct fix.
+
+Was introduced by:
+ commit 19ccb76a1938ab364a412253daec64613acbf3df
+ Author: Paul Mackerras <paulus@samba.org>
+ Date:   Sat Jul 23 17:42:46 2011 +1000
+
+Talking to paulus, this shouldn't be a literal.
+
+Signed-off-by: Michael Neuling <mikey@neuling.org>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/powerpc/kvm/book3s_hv_rmhandlers.S |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+index 44d8829..5e8dc08 100644
+--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
++++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+@@ -763,7 +763,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_201)
+ 	lwz	r3,VCORE_NAPPING_THREADS(r5)
+ 	lwz	r4,VCPU_PTID(r9)
+ 	li	r0,1
+-	sldi	r0,r0,r4
++	sld	r0,r0,r4
+ 	andc.	r3,r3,r0		/* no sense IPI'ing ourselves */
+ 	beq	43f
+ 	mulli	r4,r4,PACA_SIZE		/* get paca for thread 0 */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0014-md-raid10-Don-t-try-to-recovery-unmatched-and-unused.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0014-md-raid10-Don-t-try-to-recovery-unmatched-and-unused.patch
new file mode 100644
index 0000000..e6c64f5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0014-md-raid10-Don-t-try-to-recovery-unmatched-and-unused.patch
@@ -0,0 +1,50 @@
+From 8002ce8e1b7a0ef6b60567ed63ed12fe6780b98a Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.de>
+Date: Tue, 3 Jul 2012 10:37:30 +1000
+Subject: [PATCH 14/49] md/raid10: Don't try to recovery unmatched (and
+ unused) chunks.
+
+commit fc448a18ae6219af9a73257b1fbcd009efab4a81 upstream.
+
+If a RAID10 has an odd number of chunks - as might happen when there
+are an odd number of devices - the last chunk has no pair and so is
+not mirrored.  We don't store data there, but when recovering the last
+device in an array we retry to recover that last chunk from a
+non-existent location.  This results in an error, and the recovery
+aborts.
+
+When we get to that last chunk we should just stop - there is nothing
+more to do anyway.
+
+This bug has been present since the introduction of RAID10, so the
+patch is appropriate for any -stable kernel.
+
+Reported-by: Christian Balzer <chibi@gol.com>
+Tested-by: Christian Balzer <chibi@gol.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/raid10.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
+index b219449..3b67566 100644
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -2436,6 +2436,12 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,
+ 			/* want to reconstruct this device */
+ 			rb2 = r10_bio;
+ 			sect = raid10_find_virt(conf, sector_nr, i);
++			if (sect >= mddev->resync_max_sectors) {
++				/* last stripe is not complete - don't
++				 * try to recover this sector.
++				 */
++				continue;
++			}
+ 			/* Unless we are doing a full sync, we only need
+ 			 * to recover the block if it is set in the bitmap
+ 			 */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0015-md-raid5-Do-not-add-data_offset-before-call-to-is_ba.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0015-md-raid5-Do-not-add-data_offset-before-call-to-is_ba.patch
new file mode 100644
index 0000000..953b3b6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0015-md-raid5-Do-not-add-data_offset-before-call-to-is_ba.patch
@@ -0,0 +1,54 @@
+From 2afec61845b4c0bed64c257a0acc2612e1862885 Mon Sep 17 00:00:00 2001
+From: majianpeng <majianpeng@gmail.com>
+Date: Tue, 12 Jun 2012 08:31:10 +0800
+Subject: [PATCH 15/49] md/raid5: Do not add data_offset before call to
+ is_badblock
+
+commit 6c0544e255dd6582a9899572e120fb55d9f672a4 upstream.
+
+In chunk_aligned_read() we are adding data_offset before calling
+is_badblock.  But is_badblock also adds data_offset, so that is bad.
+
+So move the addition of data_offset to after the call to
+is_badblock.
+
+This bug was introduced by commit 31c176ecdf3563140e639
+     md/raid5: avoid reading from known bad blocks.
+which first appeared in 3.0.  So that patch is suitable for any
+-stable kernel from 3.0.y onwards.  However it will need minor
+revision for most of those (as the comment didn't appear until
+recently).
+
+Signed-off-by: majianpeng <majianpeng@gmail.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+[bwh: Backported to 3.2: ignored missing comment]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/raid5.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
+index 858fdbb..d423c7e 100644
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -3621,7 +3621,6 @@ static int chunk_aligned_read(struct mddev *mddev, struct bio * raid_bio)
+ 		raid_bio->bi_next = (void*)rdev;
+ 		align_bi->bi_bdev =  rdev->bdev;
+ 		align_bi->bi_flags &= ~(1 << BIO_SEG_VALID);
+-		align_bi->bi_sector += rdev->data_offset;
+ 
+ 		if (!bio_fits_rdev(align_bi) ||
+ 		    is_badblock(rdev, align_bi->bi_sector, align_bi->bi_size>>9,
+@@ -3632,6 +3631,9 @@ static int chunk_aligned_read(struct mddev *mddev, struct bio * raid_bio)
+ 			return 0;
+ 		}
+ 
++		/* No reshape active, so we can trust rdev->data_offset */
++		align_bi->bi_sector += rdev->data_offset;
++
+ 		spin_lock_irq(&conf->device_lock);
+ 		wait_event_lock_irq(conf->wait_for_stripe,
+ 				    conf->quiesce == 0,
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0016-md-raid5-In-ops_run_io-inc-nr_pending-before-calling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0016-md-raid5-In-ops_run_io-inc-nr_pending-before-calling.patch
new file mode 100644
index 0000000..493b6be
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0016-md-raid5-In-ops_run_io-inc-nr_pending-before-calling.patch
@@ -0,0 +1,45 @@
+From 1e6a8f24c1ff905a8bae6dd5222bc128eb60f886 Mon Sep 17 00:00:00 2001
+From: majianpeng <majianpeng@gmail.com>
+Date: Tue, 3 Jul 2012 12:11:54 +1000
+Subject: [PATCH 16/49] md/raid5: In ops_run_io, inc nr_pending before calling
+ md_wait_for_blocked_rdev
+
+commit 1850753d2e6d9ca7856581ca5d3cf09521e6a5d7 upstream.
+
+In ops_run_io(), the call to md_wait_for_blocked_rdev will decrement
+nr_pending so we lose the reference we hold on the rdev.
+So atomic_inc it first to maintain the reference.
+
+This bug was introduced by commit  73e92e51b7969ef5477d
+    md/raid5.  Don't write to known bad block on doubtful devices.
+
+which appeared in 3.0, so patch is suitable for stable kernels since
+then.
+
+Signed-off-by: majianpeng <majianpeng@gmail.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/raid5.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
+index d423c7e..6ba4954 100644
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -542,6 +542,12 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
+ 					 * a chance*/
+ 					md_check_recovery(conf->mddev);
+ 				}
++				/*
++				 * Because md_wait_for_blocked_rdev
++				 * will dec nr_pending, we must
++				 * increment it first.
++				 */
++				atomic_inc(&rdev->nr_pending);
+ 				md_wait_for_blocked_rdev(rdev, conf->mddev);
+ 			} else {
+ 				/* Acknowledged bad block - skip the write */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0017-md-raid10-fix-failure-when-trying-to-repair-a-read-e.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0017-md-raid10-fix-failure-when-trying-to-repair-a-read-e.patch
new file mode 100644
index 0000000..1f96efa
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0017-md-raid10-fix-failure-when-trying-to-repair-a-read-e.patch
@@ -0,0 +1,61 @@
+From 4c1df6ee8b798576a23b25ab391cd7f3b5835bcd Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.de>
+Date: Tue, 3 Jul 2012 15:55:33 +1000
+Subject: [PATCH 17/49] md/raid10: fix failure when trying to repair a read
+ error.
+
+commit 055d3747dbf00ce85c6872ecca4d466638e80c22 upstream.
+
+commit 58c54fcca3bac5bf9290cfed31c76e4c4bfbabaf
+     md/raid10: handle further errors during fix_read_error better.
+
+in 3.1 added "r10_sync_page_io" which takes an IO size in sectors.
+But we were passing the IO size in bytes!!!
+This resulting in bio_add_page failing, and empty request being sent
+down, and a consequent BUG_ON in scsi_lib.
+
+[fix missing space in error message at same time]
+
+This fix is suitable for 3.1.y and later.
+
+Reported-by: Christian Balzer <chibi@gol.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/raid10.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
+index 3b67566..7a9eef6 100644
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -1919,7 +1919,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
+ 			if (r10_sync_page_io(rdev,
+ 					     r10_bio->devs[sl].addr +
+ 					     sect,
+-					     s<<9, conf->tmppage, WRITE)
++					     s, conf->tmppage, WRITE)
+ 			    == 0) {
+ 				/* Well, this device is dead */
+ 				printk(KERN_NOTICE
+@@ -1956,7 +1956,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
+ 			switch (r10_sync_page_io(rdev,
+ 					     r10_bio->devs[sl].addr +
+ 					     sect,
+-					     s<<9, conf->tmppage,
++					     s, conf->tmppage,
+ 						 READ)) {
+ 			case 0:
+ 				/* Well, this device is dead */
+@@ -2119,7 +2119,7 @@ read_more:
+ 	rdev = conf->mirrors[mirror].rdev;
+ 	printk_ratelimited(
+ 		KERN_ERR
+-		"md/raid10:%s: %s: redirecting"
++		"md/raid10:%s: %s: redirecting "
+ 		"sector %llu to another mirror\n",
+ 		mdname(mddev),
+ 		bdevname(rdev->bdev, b),
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0018-drm-i915-kick-any-firmware-framebuffers-before-claim.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0018-drm-i915-kick-any-firmware-framebuffers-before-claim.patch
new file mode 100644
index 0000000..ab9e976
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0018-drm-i915-kick-any-firmware-framebuffers-before-claim.patch
@@ -0,0 +1,118 @@
+From 3426f0a75320d87b4fd5a63263ff4f1a7574fd90 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Sun, 1 Jul 2012 17:09:42 +0200
+Subject: [PATCH 18/49] drm/i915: kick any firmware framebuffers before
+ claiming the gtt
+
+commit 9f846a16d213523fbe6daea17e20df6b8ac5a1e5 upstream.
+
+Especially vesafb likes to map everything as uc- (yikes), and if that
+mapping hangs around still while we try to map the gtt as wc the
+kernel will downgrade our request to uc-, resulting in abyssal
+performance.
+
+Unfortunately we can't do this as early as readon does (i.e. as the
+first thing we do when initializing the hw) because our fb/mmio space
+region moves around on a per-gen basis. So I've had to move it below
+the gtt initialization, but that seems to work, too. The important
+thing is that we do this before we set up the gtt wc mapping.
+
+Now an altogether different question is why people compile their
+kernels with vesafb enabled, but I guess making things just work isn't
+bad per se ...
+
+v2:
+- s/radeondrmfb/inteldrmfb/
+- fix up error handling
+
+v3: Kill #ifdef X86, this is Intel after all. Noticed by Ben Widawsky.
+
+v4: Jani Nikula complained about the pointless bool primary
+initialization.
+
+v5: Don't oops if we can't allocate, noticed by Chris Wilson.
+
+v6: Resolve conflicts with agp rework and fixup whitespace.
+
+This is commit e188719a2891f01b3100d in drm-next.
+
+Backport to 3.5 -fixes queue requested by Dave Airlie - due to grub
+using vesa on fedora their initrd seems to load vesafb before loading
+the real kms driver. So tons more people actually experience a
+dead-slow gpu. Hence also the Cc: stable.
+
+Reported-and-tested-by: "Kilarski, Bernard R" <bernard.r.kilarski@intel.com>
+Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+[bwh: Backported to 3.2: adjust context]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/gpu/drm/i915/i915_dma.c |   37 ++++++++++++++++++++++++++++++-------
+ 1 file changed, 30 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
+index c4da951..ca67338 100644
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -1890,6 +1890,27 @@ ips_ping_for_i915_load(void)
+ 	}
+ }
+ 
++static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
++{
++	struct apertures_struct *ap;
++	struct pci_dev *pdev = dev_priv->dev->pdev;
++	bool primary;
++
++	ap = alloc_apertures(1);
++	if (!ap)
++		return;
++
++	ap->ranges[0].base = dev_priv->dev->agp->base;
++	ap->ranges[0].size =
++		dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
++	primary =
++		pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
++
++	remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
++
++	kfree(ap);
++}
++
+ /**
+  * i915_driver_load - setup chip and create an initial config
+  * @dev: DRM device
+@@ -1927,6 +1948,15 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
+ 		goto free_priv;
+ 	}
+ 
++	dev_priv->mm.gtt = intel_gtt_get();
++	if (!dev_priv->mm.gtt) {
++		DRM_ERROR("Failed to initialize GTT\n");
++		ret = -ENODEV;
++		goto put_bridge;
++	}
++
++	i915_kick_out_firmware_fb(dev_priv);
++
+ 	/* overlay on gen2 is broken and can't address above 1G */
+ 	if (IS_GEN2(dev))
+ 		dma_set_coherent_mask(&dev->pdev->dev, DMA_BIT_MASK(30));
+@@ -1950,13 +1980,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
+ 		goto put_bridge;
+ 	}
+ 
+-	dev_priv->mm.gtt = intel_gtt_get();
+-	if (!dev_priv->mm.gtt) {
+-		DRM_ERROR("Failed to initialize GTT\n");
+-		ret = -ENODEV;
+-		goto out_rmmap;
+-	}
+-
+ 	agp_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
+ 
+ 	dev_priv->mm.gtt_mapping =
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0019-dm-persistent-data-fix-shadow_info_leak-on-dm_tm_des.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0019-dm-persistent-data-fix-shadow_info_leak-on-dm_tm_des.patch
new file mode 100644
index 0000000..9ac2fb5
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0019-dm-persistent-data-fix-shadow_info_leak-on-dm_tm_des.patch
@@ -0,0 +1,37 @@
+From 97bbf28874e2f7467c0d05db53041e556488087a Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Tue, 3 Jul 2012 12:55:33 +0100
+Subject: [PATCH 19/49] dm persistent data: fix shadow_info_leak on
+ dm_tm_destroy
+
+commit 25d7cd6faa7ae6ed2565617c3ee2500ccb8a9f7f upstream.
+
+Cleanup the shadow table before destroying the transaction manager.
+
+Reference: leak was identified with kmemleak when running
+test_discard_random_sectors in the thinp-test-suite.
+
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/persistent-data/dm-transaction-manager.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/md/persistent-data/dm-transaction-manager.c b/drivers/md/persistent-data/dm-transaction-manager.c
+index 6f8d387..e5902d1 100644
+--- a/drivers/md/persistent-data/dm-transaction-manager.c
++++ b/drivers/md/persistent-data/dm-transaction-manager.c
+@@ -138,6 +138,9 @@ EXPORT_SYMBOL_GPL(dm_tm_create_non_blocking_clone);
+ 
+ void dm_tm_destroy(struct dm_transaction_manager *tm)
+ {
++	if (!tm->is_clone)
++		wipe_shadow_table(tm);
++
+ 	kfree(tm);
+ }
+ EXPORT_SYMBOL_GPL(dm_tm_destroy);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0020-dm-persistent-data-handle-space-map-checker-creation.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0020-dm-persistent-data-handle-space-map-checker-creation.patch
new file mode 100644
index 0000000..f186538
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0020-dm-persistent-data-handle-space-map-checker-creation.patch
@@ -0,0 +1,182 @@
+From 5ac62b535b410eb5bfbb5457703fd42f5b517088 Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Tue, 3 Jul 2012 12:55:35 +0100
+Subject: [PATCH 20/49] dm persistent data: handle space map checker creation
+ failure
+
+commit 62662303e7f590fdfbb0070ab820a0ad4267c119 upstream.
+
+If CONFIG_DM_DEBUG_SPACE_MAPS is enabled and dm_sm_checker_create()
+fails, dm_tm_create_internal() would still return success even though it
+cleaned up all resources it was supposed to have created.  This will
+lead to a kernel crash:
+
+general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC
+...
+RIP: 0010:[<ffffffff81593659>]  [<ffffffff81593659>] dm_bufio_get_block_size+0x9/0x20
+Call Trace:
+  [<ffffffff81599bae>] dm_bm_block_size+0xe/0x10
+  [<ffffffff8159b8b8>] sm_ll_init+0x78/0xd0
+  [<ffffffff8159c1a6>] sm_ll_new_disk+0x16/0xa0
+  [<ffffffff8159c98e>] dm_sm_disk_create+0xfe/0x160
+  [<ffffffff815abf6e>] dm_pool_metadata_open+0x16e/0x6a0
+  [<ffffffff815aa010>] pool_ctr+0x3f0/0x900
+  [<ffffffff8158d565>] dm_table_add_target+0x195/0x450
+  [<ffffffff815904c4>] table_load+0xe4/0x330
+  [<ffffffff815917ea>] ctl_ioctl+0x15a/0x2c0
+  [<ffffffff81591963>] dm_ctl_ioctl+0x13/0x20
+  [<ffffffff8116a4f8>] do_vfs_ioctl+0x98/0x560
+  [<ffffffff8116aa51>] sys_ioctl+0x91/0xa0
+  [<ffffffff81869f52>] system_call_fastpath+0x16/0x1b
+
+Fix the space map checker code to return an appropriate ERR_PTR and have
+dm_sm_disk_create() and dm_tm_create_internal() check for it with
+IS_ERR.
+
+Reported-by: Vivek Goyal <vgoyal@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/persistent-data/dm-space-map-checker.c  |   24 ++++++++++----------
+ drivers/md/persistent-data/dm-space-map-disk.c     |   11 ++++++++-
+ .../md/persistent-data/dm-transaction-manager.c    |    8 +++++--
+ 3 files changed, 28 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/md/persistent-data/dm-space-map-checker.c b/drivers/md/persistent-data/dm-space-map-checker.c
+index 50ed53b..6d7c832 100644
+--- a/drivers/md/persistent-data/dm-space-map-checker.c
++++ b/drivers/md/persistent-data/dm-space-map-checker.c
+@@ -343,25 +343,25 @@ struct dm_space_map *dm_sm_checker_create(struct dm_space_map *sm)
+ 	int r;
+ 	struct sm_checker *smc;
+ 
+-	if (!sm)
+-		return NULL;
++	if (IS_ERR_OR_NULL(sm))
++		return ERR_PTR(-EINVAL);
+ 
+ 	smc = kmalloc(sizeof(*smc), GFP_KERNEL);
+ 	if (!smc)
+-		return NULL;
++		return ERR_PTR(-ENOMEM);
+ 
+ 	memcpy(&smc->sm, &ops_, sizeof(smc->sm));
+ 	r = ca_create(&smc->old_counts, sm);
+ 	if (r) {
+ 		kfree(smc);
+-		return NULL;
++		return ERR_PTR(r);
+ 	}
+ 
+ 	r = ca_create(&smc->counts, sm);
+ 	if (r) {
+ 		ca_destroy(&smc->old_counts);
+ 		kfree(smc);
+-		return NULL;
++		return ERR_PTR(r);
+ 	}
+ 
+ 	smc->real_sm = sm;
+@@ -371,7 +371,7 @@ struct dm_space_map *dm_sm_checker_create(struct dm_space_map *sm)
+ 		ca_destroy(&smc->counts);
+ 		ca_destroy(&smc->old_counts);
+ 		kfree(smc);
+-		return NULL;
++		return ERR_PTR(r);
+ 	}
+ 
+ 	r = ca_commit(&smc->old_counts, &smc->counts);
+@@ -379,7 +379,7 @@ struct dm_space_map *dm_sm_checker_create(struct dm_space_map *sm)
+ 		ca_destroy(&smc->counts);
+ 		ca_destroy(&smc->old_counts);
+ 		kfree(smc);
+-		return NULL;
++		return ERR_PTR(r);
+ 	}
+ 
+ 	return &smc->sm;
+@@ -391,25 +391,25 @@ struct dm_space_map *dm_sm_checker_create_fresh(struct dm_space_map *sm)
+ 	int r;
+ 	struct sm_checker *smc;
+ 
+-	if (!sm)
+-		return NULL;
++	if (IS_ERR_OR_NULL(sm))
++		return ERR_PTR(-EINVAL);
+ 
+ 	smc = kmalloc(sizeof(*smc), GFP_KERNEL);
+ 	if (!smc)
+-		return NULL;
++		return ERR_PTR(-ENOMEM);
+ 
+ 	memcpy(&smc->sm, &ops_, sizeof(smc->sm));
+ 	r = ca_create(&smc->old_counts, sm);
+ 	if (r) {
+ 		kfree(smc);
+-		return NULL;
++		return ERR_PTR(r);
+ 	}
+ 
+ 	r = ca_create(&smc->counts, sm);
+ 	if (r) {
+ 		ca_destroy(&smc->old_counts);
+ 		kfree(smc);
+-		return NULL;
++		return ERR_PTR(r);
+ 	}
+ 
+ 	smc->real_sm = sm;
+diff --git a/drivers/md/persistent-data/dm-space-map-disk.c b/drivers/md/persistent-data/dm-space-map-disk.c
+index fc469ba..3d0ed53 100644
+--- a/drivers/md/persistent-data/dm-space-map-disk.c
++++ b/drivers/md/persistent-data/dm-space-map-disk.c
+@@ -290,7 +290,16 @@ struct dm_space_map *dm_sm_disk_create(struct dm_transaction_manager *tm,
+ 				       dm_block_t nr_blocks)
+ {
+ 	struct dm_space_map *sm = dm_sm_disk_create_real(tm, nr_blocks);
+-	return dm_sm_checker_create_fresh(sm);
++	struct dm_space_map *smc;
++
++	if (IS_ERR_OR_NULL(sm))
++		return sm;
++
++	smc = dm_sm_checker_create_fresh(sm);
++	if (IS_ERR(smc))
++		dm_sm_destroy(sm);
++
++	return smc;
+ }
+ EXPORT_SYMBOL_GPL(dm_sm_disk_create);
+ 
+diff --git a/drivers/md/persistent-data/dm-transaction-manager.c b/drivers/md/persistent-data/dm-transaction-manager.c
+index e5902d1..ba54aac 100644
+--- a/drivers/md/persistent-data/dm-transaction-manager.c
++++ b/drivers/md/persistent-data/dm-transaction-manager.c
+@@ -345,8 +345,10 @@ static int dm_tm_create_internal(struct dm_block_manager *bm,
+ 		}
+ 
+ 		*sm = dm_sm_checker_create(inner);
+-		if (!*sm)
++		if (IS_ERR(*sm)) {
++			r = PTR_ERR(*sm);
+ 			goto bad2;
++		}
+ 
+ 	} else {
+ 		r = dm_bm_write_lock(dm_tm_get_bm(*tm), sb_location,
+@@ -365,8 +367,10 @@ static int dm_tm_create_internal(struct dm_block_manager *bm,
+ 		}
+ 
+ 		*sm = dm_sm_checker_create(inner);
+-		if (!*sm)
++		if (IS_ERR(*sm)) {
++			r = PTR_ERR(*sm);
+ 			goto bad2;
++		}
+ 	}
+ 
+ 	return 0;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0021-dm-persistent-data-fix-allocation-failure-in-space-m.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0021-dm-persistent-data-fix-allocation-failure-in-space-m.patch
new file mode 100644
index 0000000..b8121c8
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0021-dm-persistent-data-fix-allocation-failure-in-space-m.patch
@@ -0,0 +1,95 @@
+From d93e7e98bbff07495ac95fd10c02c2e0d5392079 Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Tue, 3 Jul 2012 12:55:37 +0100
+Subject: [PATCH 21/49] dm persistent data: fix allocation failure in space
+ map checker init
+
+commit b0239faaf87c38bb419c9264bf20817438ddc3a9 upstream.
+
+If CONFIG_DM_DEBUG_SPACE_MAPS is enabled and memory is fragmented and a
+sufficiently-large metadata device is used in a thin pool then the space
+map checker will fail to allocate the memory it requires.
+
+Switch from kmalloc to vmalloc to allow larger virtually contiguous
+allocations for the space map checker's internal count arrays.
+
+Reported-by: Vivek Goyal <vgoyal@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/md/persistent-data/dm-space-map-checker.c |   30 +++++++++++++--------
+ 1 file changed, 19 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/md/persistent-data/dm-space-map-checker.c b/drivers/md/persistent-data/dm-space-map-checker.c
+index 6d7c832..fc90c11 100644
+--- a/drivers/md/persistent-data/dm-space-map-checker.c
++++ b/drivers/md/persistent-data/dm-space-map-checker.c
+@@ -8,6 +8,7 @@
+ 
+ #include <linux/device-mapper.h>
+ #include <linux/export.h>
++#include <linux/vmalloc.h>
+ 
+ #ifdef CONFIG_DM_DEBUG_SPACE_MAPS
+ 
+@@ -89,13 +90,23 @@ static int ca_create(struct count_array *ca, struct dm_space_map *sm)
+ 
+ 	ca->nr = nr_blocks;
+ 	ca->nr_free = nr_blocks;
+-	ca->counts = kzalloc(sizeof(*ca->counts) * nr_blocks, GFP_KERNEL);
+-	if (!ca->counts)
+-		return -ENOMEM;
++
++	if (!nr_blocks)
++		ca->counts = NULL;
++	else {
++		ca->counts = vzalloc(sizeof(*ca->counts) * nr_blocks);
++		if (!ca->counts)
++			return -ENOMEM;
++	}
+ 
+ 	return 0;
+ }
+ 
++static void ca_destroy(struct count_array *ca)
++{
++	vfree(ca->counts);
++}
++
+ static int ca_load(struct count_array *ca, struct dm_space_map *sm)
+ {
+ 	int r;
+@@ -126,12 +137,14 @@ static int ca_load(struct count_array *ca, struct dm_space_map *sm)
+ static int ca_extend(struct count_array *ca, dm_block_t extra_blocks)
+ {
+ 	dm_block_t nr_blocks = ca->nr + extra_blocks;
+-	uint32_t *counts = kzalloc(sizeof(*counts) * nr_blocks, GFP_KERNEL);
++	uint32_t *counts = vzalloc(sizeof(*counts) * nr_blocks);
+ 	if (!counts)
+ 		return -ENOMEM;
+ 
+-	memcpy(counts, ca->counts, sizeof(*counts) * ca->nr);
+-	kfree(ca->counts);
++	if (ca->counts) {
++		memcpy(counts, ca->counts, sizeof(*counts) * ca->nr);
++		ca_destroy(ca);
++	}
+ 	ca->nr = nr_blocks;
+ 	ca->nr_free += extra_blocks;
+ 	ca->counts = counts;
+@@ -151,11 +164,6 @@ static int ca_commit(struct count_array *old, struct count_array *new)
+ 	return 0;
+ }
+ 
+-static void ca_destroy(struct count_array *ca)
+-{
+-	kfree(ca->counts);
+-}
+-
+ /*----------------------------------------------------------------*/
+ 
+ struct sm_checker {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0022-ALSA-hda-Fix-power-map-regression-for-HP-dv6-co.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0022-ALSA-hda-Fix-power-map-regression-for-HP-dv6-co.patch
new file mode 100644
index 0000000..3b85ba7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0022-ALSA-hda-Fix-power-map-regression-for-HP-dv6-co.patch
@@ -0,0 +1,49 @@
+From 6411ef218c12f6719597631d388f2b13945a5251 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Tue, 26 Jun 2012 17:35:10 +0200
+Subject: [PATCH 22/49] ALSA: hda - Fix power-map regression for HP dv6 & co
+
+commit 6e1c39c6b00d9141a82c231ba7c5e5b1716974b2 upstream.
+
+The recent fix for power-map controls (commit b0791dda813) caused
+regressions on some other HP laptops.  They have fixed pins but these
+pins are exposed as jack-detectable.  Thus the driver tries to control
+the power-map dynamically per jack detection where it never gets on.
+
+This patch adds the check of connection and it assumes the no jack
+detection is available for fixed pins no matter what pin capability
+says.
+
+BugLink: http://bugs.launchpad.net/bugs/1013183
+Reported-by: Luis Henriques <luis.henriques@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ sound/pci/hda/patch_sigmatel.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
+index 7b7a516..2b973f5 100644
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -4457,7 +4457,7 @@ static int stac92xx_init(struct hda_codec *codec)
+ 					 AC_PINCTL_IN_EN);
+ 	for (i = 0; i < spec->num_pwrs; i++)  {
+ 		hda_nid_t nid = spec->pwr_nids[i];
+-		int pinctl, def_conf;
++		unsigned int pinctl, def_conf;
+ 
+ 		/* power on when no jack detection is available */
+ 		/* or when the VREF is used for controlling LED */
+@@ -4484,7 +4484,7 @@ static int stac92xx_init(struct hda_codec *codec)
+ 		def_conf = get_defcfg_connect(def_conf);
+ 		/* skip any ports that don't have jacks since presence
+  		 * detection is useless */
+-		if (def_conf != AC_JACK_PORT_NONE &&
++		if (def_conf != AC_JACK_PORT_COMPLEX ||
+ 		    !is_jack_detectable(codec, nid)) {
+ 			stac_toggle_power_map(codec, nid, 1);
+ 			continue;
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0023-tracing-change-CPU-ring-buffer-state-from-tracing_cp.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0023-tracing-change-CPU-ring-buffer-state-from-tracing_cp.patch
new file mode 100644
index 0000000..eb84795
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0023-tracing-change-CPU-ring-buffer-state-from-tracing_cp.patch
@@ -0,0 +1,56 @@
+From 04098d77869c04c5bf703846783cb89b4297b2bb Mon Sep 17 00:00:00 2001
+From: Vaibhav Nagarnaik <vnagarnaik@google.com>
+Date: Thu, 3 May 2012 18:59:52 -0700
+Subject: [PATCH 23/49] tracing: change CPU ring buffer state from
+ tracing_cpumask
+
+commit 71babb2705e2203a64c27ede13ae3508a0d2c16c upstream.
+
+According to Documentation/trace/ftrace.txt:
+
+tracing_cpumask:
+
+        This is a mask that lets the user only trace
+        on specified CPUS. The format is a hex string
+        representing the CPUS.
+
+The tracing_cpumask currently doesn't affect the tracing state of
+per-CPU ring buffers.
+
+This patch enables/disables CPU recording as its corresponding bit in
+tracing_cpumask is set/unset.
+
+Link: http://lkml.kernel.org/r/1336096792-25373-3-git-send-email-vnagarnaik@google.com
+
+Cc: Frederic Weisbecker <fweisbec@gmail.com>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Laurent Chavey <chavey@google.com>
+Cc: Justin Teravest <teravest@google.com>
+Cc: David Sharp <dhsharp@google.com>
+Signed-off-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ kernel/trace/trace.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 7e4edd3..5638104 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -2541,10 +2541,12 @@ tracing_cpumask_write(struct file *filp, const char __user *ubuf,
+ 		if (cpumask_test_cpu(cpu, tracing_cpumask) &&
+ 				!cpumask_test_cpu(cpu, tracing_cpumask_new)) {
+ 			atomic_inc(&global_trace.data[cpu]->disabled);
++			ring_buffer_record_disable_cpu(global_trace.buffer, cpu);
+ 		}
+ 		if (!cpumask_test_cpu(cpu, tracing_cpumask) &&
+ 				cpumask_test_cpu(cpu, tracing_cpumask_new)) {
+ 			atomic_dec(&global_trace.data[cpu]->disabled);
++			ring_buffer_record_enable_cpu(global_trace.buffer, cpu);
+ 		}
+ 	}
+ 	arch_spin_unlock(&ftrace_max_lock);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0024-mwifiex-fix-wrong-return-values-in-add_virtual_intf-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0024-mwifiex-fix-wrong-return-values-in-add_virtual_intf-.patch
new file mode 100644
index 0000000..e7cb513
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0024-mwifiex-fix-wrong-return-values-in-add_virtual_intf-.patch
@@ -0,0 +1,93 @@
+From 0b53b4fb097d5d599a3a3fcd0ac10ad140bdf9c4 Mon Sep 17 00:00:00 2001
+From: Bing Zhao <bzhao@marvell.com>
+Date: Tue, 3 Jul 2012 20:43:56 -0700
+Subject: [PATCH 24/49] mwifiex: fix wrong return values in add_virtual_intf()
+ error cases
+
+commit 858faa57dd9e2b91f3f870fbb1185982e42f5a2b upstream
+
+backported for linux-3.2.y, linux-3.3.y, linux-3.4.y
+
+add_virtual_intf() needs to return an ERR_PTR(), instead of NULL,
+on errors, otherwise cfg80211 will crash.
+
+Reported-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: Bing Zhao <bzhao@marvell.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/wireless/mwifiex/cfg80211.c |   21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
+index 462c710..01dcb1a 100644
+--- a/drivers/net/wireless/mwifiex/cfg80211.c
++++ b/drivers/net/wireless/mwifiex/cfg80211.c
+@@ -1177,11 +1177,11 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
+ 	void *mdev_priv;
+ 
+ 	if (!priv)
+-		return NULL;
++		return ERR_PTR(-EFAULT);
+ 
+ 	adapter = priv->adapter;
+ 	if (!adapter)
+-		return NULL;
++		return ERR_PTR(-EFAULT);
+ 
+ 	switch (type) {
+ 	case NL80211_IFTYPE_UNSPECIFIED:
+@@ -1190,7 +1190,7 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
+ 		if (priv->bss_mode) {
+ 			wiphy_err(wiphy, "cannot create multiple"
+ 					" station/adhoc interfaces\n");
+-			return NULL;
++			return ERR_PTR(-EINVAL);
+ 		}
+ 
+ 		if (type == NL80211_IFTYPE_UNSPECIFIED)
+@@ -1208,14 +1208,15 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
+ 		break;
+ 	default:
+ 		wiphy_err(wiphy, "type not supported\n");
+-		return NULL;
++		return ERR_PTR(-EINVAL);
+ 	}
+ 
+ 	dev = alloc_netdev_mq(sizeof(struct mwifiex_private *), name,
+ 			      ether_setup, 1);
+ 	if (!dev) {
+ 		wiphy_err(wiphy, "no memory available for netdevice\n");
+-		goto error;
++		priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
++		return ERR_PTR(-ENOMEM);
+ 	}
+ 
+ 	dev_net_set(dev, wiphy_net(wiphy));
+@@ -1240,7 +1241,9 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
+ 	/* Register network device */
+ 	if (register_netdevice(dev)) {
+ 		wiphy_err(wiphy, "cannot register virtual network device\n");
+-		goto error;
++		free_netdev(dev);
++		priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
++		return ERR_PTR(-EFAULT);
+ 	}
+ 
+ 	sema_init(&priv->async_sem, 1);
+@@ -1252,12 +1255,6 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
+ 	mwifiex_dev_debugfs_init(priv);
+ #endif
+ 	return dev;
+-error:
+-	if (dev && (dev->reg_state == NETREG_UNREGISTERED))
+-		free_netdev(dev);
+-	priv->bss_mode = NL80211_IFTYPE_UNSPECIFIED;
+-
+-	return NULL;
+ }
+ EXPORT_SYMBOL_GPL(mwifiex_add_virtual_intf);
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0025-udf-Use-ret-instead-of-abusing-i-in-udf_load_logical.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0025-udf-Use-ret-instead-of-abusing-i-in-udf_load_logical.patch
new file mode 100644
index 0000000..0d5c179
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0025-udf-Use-ret-instead-of-abusing-i-in-udf_load_logical.patch
@@ -0,0 +1,35 @@
+From 4d7257d8f5c970ce0f699d893f6050fd8bd11f3c Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Wed, 27 Jun 2012 20:08:44 +0200
+Subject: [PATCH 25/49] udf: Use 'ret' instead of abusing 'i' in
+ udf_load_logicalvol()
+
+commit cb14d340ef1737c24125dd663eff77734a482d47 upstream.
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/udf/super.c |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/fs/udf/super.c b/fs/udf/super.c
+index 87cb24a..eea2bfe 100644
+--- a/fs/udf/super.c
++++ b/fs/udf/super.c
+@@ -1235,11 +1235,9 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
+ 	BUG_ON(ident != TAG_IDENT_LVD);
+ 	lvd = (struct logicalVolDesc *)bh->b_data;
+ 
+-	i = udf_sb_alloc_partition_maps(sb, le32_to_cpu(lvd->numPartitionMaps));
+-	if (i != 0) {
+-		ret = i;
++	ret = udf_sb_alloc_partition_maps(sb, le32_to_cpu(lvd->numPartitionMaps));
++	if (ret)
+ 		goto out_bh;
+-	}
+ 
+ 	for (i = 0, offset = 0;
+ 	     i < sbi->s_partitions && offset < le32_to_cpu(lvd->mapTableLength);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0026-udf-Avoid-run-away-loop-when-partition-table-length-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0026-udf-Avoid-run-away-loop-when-partition-table-length-.patch
new file mode 100644
index 0000000..b9fb57a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0026-udf-Avoid-run-away-loop-when-partition-table-length-.patch
@@ -0,0 +1,54 @@
+From 0a9d08974ed753d12541081ae062e5f69298d791 Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Wed, 27 Jun 2012 20:20:22 +0200
+Subject: [PATCH 26/49] udf: Avoid run away loop when partition table length
+ is corrupted
+
+commit adee11b2085bee90bd8f4f52123ffb07882d6256 upstream.
+
+Check provided length of partition table so that (possibly maliciously)
+corrupted partition table cannot cause accessing data beyond current buffer.
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/udf/super.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/fs/udf/super.c b/fs/udf/super.c
+index eea2bfe..800e839 100644
+--- a/fs/udf/super.c
++++ b/fs/udf/super.c
+@@ -1227,6 +1227,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
+ 	struct genericPartitionMap *gpm;
+ 	uint16_t ident;
+ 	struct buffer_head *bh;
++	unsigned int table_len;
+ 	int ret = 0;
+ 
+ 	bh = udf_read_tagged(sb, block, block, &ident);
+@@ -1234,13 +1235,20 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
+ 		return 1;
+ 	BUG_ON(ident != TAG_IDENT_LVD);
+ 	lvd = (struct logicalVolDesc *)bh->b_data;
++	table_len = le32_to_cpu(lvd->mapTableLength);
++	if (sizeof(*lvd) + table_len > sb->s_blocksize) {
++		udf_err(sb, "error loading logical volume descriptor: "
++			"Partition table too long (%u > %lu)\n", table_len,
++			sb->s_blocksize - sizeof(*lvd));
++		goto out_bh;
++	}
+ 
+ 	ret = udf_sb_alloc_partition_maps(sb, le32_to_cpu(lvd->numPartitionMaps));
+ 	if (ret)
+ 		goto out_bh;
+ 
+ 	for (i = 0, offset = 0;
+-	     i < sbi->s_partitions && offset < le32_to_cpu(lvd->mapTableLength);
++	     i < sbi->s_partitions && offset < table_len;
+ 	     i++, offset += gpm->partitionMapLength) {
+ 		struct udf_part_map *map = &sbi->s_partmaps[i];
+ 		gpm = (struct genericPartitionMap *)
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0027-udf-Fortify-loading-of-sparing-table.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0027-udf-Fortify-loading-of-sparing-table.patch
new file mode 100644
index 0000000..2c4b706
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0027-udf-Fortify-loading-of-sparing-table.patch
@@ -0,0 +1,134 @@
+From 9db7244bafd8f99123cf5fe816e4961115831ca9 Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Wed, 27 Jun 2012 21:23:07 +0200
+Subject: [PATCH 27/49] udf: Fortify loading of sparing table
+
+commit 1df2ae31c724e57be9d7ac00d78db8a5dabdd050 upstream.
+
+Add sanity checks when loading sparing table from disk to avoid accessing
+unallocated memory or writing to it.
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/udf/super.c |   86 ++++++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 53 insertions(+), 33 deletions(-)
+
+diff --git a/fs/udf/super.c b/fs/udf/super.c
+index 800e839..270e135 100644
+--- a/fs/udf/super.c
++++ b/fs/udf/super.c
+@@ -56,6 +56,7 @@
+ #include <linux/seq_file.h>
+ #include <linux/bitmap.h>
+ #include <linux/crc-itu-t.h>
++#include <linux/log2.h>
+ #include <asm/byteorder.h>
+ 
+ #include "udf_sb.h"
+@@ -1217,11 +1218,59 @@ out_bh:
+ 	return ret;
+ }
+ 
++static int udf_load_sparable_map(struct super_block *sb,
++				 struct udf_part_map *map,
++				 struct sparablePartitionMap *spm)
++{
++	uint32_t loc;
++	uint16_t ident;
++	struct sparingTable *st;
++	struct udf_sparing_data *sdata = &map->s_type_specific.s_sparing;
++	int i;
++	struct buffer_head *bh;
++
++	map->s_partition_type = UDF_SPARABLE_MAP15;
++	sdata->s_packet_len = le16_to_cpu(spm->packetLength);
++	if (!is_power_of_2(sdata->s_packet_len)) {
++		udf_err(sb, "error loading logical volume descriptor: "
++			"Invalid packet length %u\n",
++			(unsigned)sdata->s_packet_len);
++		return -EIO;
++	}
++	if (spm->numSparingTables > 4) {
++		udf_err(sb, "error loading logical volume descriptor: "
++			"Too many sparing tables (%d)\n",
++			(int)spm->numSparingTables);
++		return -EIO;
++	}
++
++	for (i = 0; i < spm->numSparingTables; i++) {
++		loc = le32_to_cpu(spm->locSparingTable[i]);
++		bh = udf_read_tagged(sb, loc, loc, &ident);
++		if (!bh)
++			continue;
++
++		st = (struct sparingTable *)bh->b_data;
++		if (ident != 0 ||
++		    strncmp(st->sparingIdent.ident, UDF_ID_SPARING,
++			    strlen(UDF_ID_SPARING)) ||
++		    sizeof(*st) + le16_to_cpu(st->reallocationTableLen) >
++							sb->s_blocksize) {
++			brelse(bh);
++			continue;
++		}
++
++		sdata->s_spar_map[i] = bh;
++	}
++	map->s_partition_func = udf_get_pblock_spar15;
++	return 0;
++}
++
+ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
+ 			       struct kernel_lb_addr *fileset)
+ {
+ 	struct logicalVolDesc *lvd;
+-	int i, j, offset;
++	int i, offset;
+ 	uint8_t type;
+ 	struct udf_sb_info *sbi = UDF_SB(sb);
+ 	struct genericPartitionMap *gpm;
+@@ -1283,38 +1332,9 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block,
+ 			} else if (!strncmp(upm2->partIdent.ident,
+ 						UDF_ID_SPARABLE,
+ 						strlen(UDF_ID_SPARABLE))) {
+-				uint32_t loc;
+-				struct sparingTable *st;
+-				struct sparablePartitionMap *spm =
+-					(struct sparablePartitionMap *)gpm;
+-
+-				map->s_partition_type = UDF_SPARABLE_MAP15;
+-				map->s_type_specific.s_sparing.s_packet_len =
+-						le16_to_cpu(spm->packetLength);
+-				for (j = 0; j < spm->numSparingTables; j++) {
+-					struct buffer_head *bh2;
+-
+-					loc = le32_to_cpu(
+-						spm->locSparingTable[j]);
+-					bh2 = udf_read_tagged(sb, loc, loc,
+-							     &ident);
+-					map->s_type_specific.s_sparing.
+-							s_spar_map[j] = bh2;
+-
+-					if (bh2 == NULL)
+-						continue;
+-
+-					st = (struct sparingTable *)bh2->b_data;
+-					if (ident != 0 || strncmp(
+-						st->sparingIdent.ident,
+-						UDF_ID_SPARING,
+-						strlen(UDF_ID_SPARING))) {
+-						brelse(bh2);
+-						map->s_type_specific.s_sparing.
+-							s_spar_map[j] = NULL;
+-					}
+-				}
+-				map->s_partition_func = udf_get_pblock_spar15;
++				if (udf_load_sparable_map(sb, map,
++				    (struct sparablePartitionMap *)gpm) < 0)
++					goto out_bh;
+ 			} else if (!strncmp(upm2->partIdent.ident,
+ 						UDF_ID_METADATA,
+ 						strlen(UDF_ID_METADATA))) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0028-ARM-fix-rcu-stalls-on-SMP-platforms.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0028-ARM-fix-rcu-stalls-on-SMP-platforms.patch
new file mode 100644
index 0000000..4187adc
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0028-ARM-fix-rcu-stalls-on-SMP-platforms.patch
@@ -0,0 +1,68 @@
+From cb4aa2ef6f748fa3a3e6cd3889153c191e63d48e Mon Sep 17 00:00:00 2001
+From: Russell King <rmk+kernel@arm.linux.org.uk>
+Date: Thu, 19 Jan 2012 15:20:58 +0000
+Subject: [PATCH 28/49] ARM: fix rcu stalls on SMP platforms
+
+commit 7deabca0acfe02b8e18f59a4c95676012f49a304 upstream.
+
+We can stall RCU processing on SMP platforms if a CPU sits in its idle
+loop for a long time.  This happens because we don't call irq_enter()
+and irq_exit() around generic_smp_call_function_interrupt() and
+friends.  Add the necessary calls, and remove the one from within
+ipi_timer(), so that they're all in a common place.
+
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ arch/arm/kernel/smp.c |   10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
+index e10e59a..1d1710e 100644
+--- a/arch/arm/kernel/smp.c
++++ b/arch/arm/kernel/smp.c
+@@ -471,9 +471,7 @@ static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent);
+ static void ipi_timer(void)
+ {
+ 	struct clock_event_device *evt = &__get_cpu_var(percpu_clockevent);
+-	irq_enter();
+ 	evt->event_handler(evt);
+-	irq_exit();
+ }
+ 
+ #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
+@@ -572,7 +570,9 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
+ 
+ 	switch (ipinr) {
+ 	case IPI_TIMER:
++		irq_enter();
+ 		ipi_timer();
++		irq_exit();
+ 		break;
+ 
+ 	case IPI_RESCHEDULE:
+@@ -580,15 +580,21 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
+ 		break;
+ 
+ 	case IPI_CALL_FUNC:
++		irq_enter();
+ 		generic_smp_call_function_interrupt();
++		irq_exit();
+ 		break;
+ 
+ 	case IPI_CALL_FUNC_SINGLE:
++		irq_enter();
+ 		generic_smp_call_function_single_interrupt();
++		irq_exit();
+ 		break;
+ 
+ 	case IPI_CPU_STOP:
++		irq_enter();
+ 		ipi_cpu_stop(cpu);
++		irq_exit();
+ 		break;
+ 
+ 	default:
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0029-net-sock-validate-data_len-before-allocating-skb-in-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0029-net-sock-validate-data_len-before-allocating-skb-in-.patch
new file mode 100644
index 0000000..7ede727
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0029-net-sock-validate-data_len-before-allocating-skb-in-.patch
@@ -0,0 +1,53 @@
+From 9e88f1e8bf3f7dbc0cb410a09c003180052bd7d4 Mon Sep 17 00:00:00 2001
+From: Jason Wang <jasowang@redhat.com>
+Date: Wed, 30 May 2012 21:18:10 +0000
+Subject: [PATCH 29/49] net: sock: validate data_len before allocating skb in
+ sock_alloc_send_pskb()
+
+[ Upstream commit cc9b17ad29ecaa20bfe426a8d4dbfb94b13ff1cc ]
+
+We need to validate the number of pages consumed by data_len, otherwise frags
+array could be overflowed by userspace. So this patch validate data_len and
+return -EMSGSIZE when data_len may occupies more frags than MAX_SKB_FRAGS.
+
+Signed-off-by: Jason Wang <jasowang@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/core/sock.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/net/core/sock.c b/net/core/sock.c
+index b23f174..8d095b9 100644
+--- a/net/core/sock.c
++++ b/net/core/sock.c
+@@ -1497,6 +1497,11 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
+ 	gfp_t gfp_mask;
+ 	long timeo;
+ 	int err;
++	int npages = (data_len + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
++
++	err = -EMSGSIZE;
++	if (npages > MAX_SKB_FRAGS)
++		goto failure;
+ 
+ 	gfp_mask = sk->sk_allocation;
+ 	if (gfp_mask & __GFP_WAIT)
+@@ -1515,14 +1520,12 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
+ 		if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) {
+ 			skb = alloc_skb(header_len, gfp_mask);
+ 			if (skb) {
+-				int npages;
+ 				int i;
+ 
+ 				/* No pages, we're done... */
+ 				if (!data_len)
+ 					break;
+ 
+-				npages = (data_len + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
+ 				skb->truesize += data_len;
+ 				skb_shinfo(skb)->nr_frags = npages;
+ 				for (i = 0; i < npages; i++) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0030-cipso-handle-CIPSO-options-correctly-when-NetLabel-i.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0030-cipso-handle-CIPSO-options-correctly-when-NetLabel-i.patch
new file mode 100644
index 0000000..8310ad9
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0030-cipso-handle-CIPSO-options-correctly-when-NetLabel-i.patch
@@ -0,0 +1,80 @@
+From e3e2beb00731e994722f01a1c284e3bcc69264ba Mon Sep 17 00:00:00 2001
+From: Paul Moore <pmoore@redhat.com>
+Date: Fri, 1 Jun 2012 05:54:56 +0000
+Subject: [PATCH 30/49] cipso: handle CIPSO options correctly when NetLabel is
+ disabled
+
+[ Upstream commit 20e2a86485967c385d7c7befc1646e4d1d39362e ]
+
+When NetLabel is not enabled, e.g. CONFIG_NETLABEL=n, and the system
+receives a CIPSO tagged packet it is dropped (cipso_v4_validate()
+returns non-zero).  In most cases this is the correct and desired
+behavior, however, in the case where we are simply forwarding the
+traffic, e.g. acting as a network bridge, this becomes a problem.
+
+This patch fixes the forwarding problem by providing the basic CIPSO
+validation code directly in ip_options_compile() without the need for
+the NetLabel or CIPSO code.  The new validation code can not perform
+any of the CIPSO option label/value verification that
+cipso_v4_validate() does, but it can verify the basic CIPSO option
+format.
+
+The behavior when NetLabel is enabled is unchanged.
+
+Signed-off-by: Paul Moore <pmoore@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/net/cipso_ipv4.h |   29 ++++++++++++++++++++++++++++-
+ 1 file changed, 28 insertions(+), 1 deletion(-)
+
+diff --git a/include/net/cipso_ipv4.h b/include/net/cipso_ipv4.h
+index 9808877..a7a683e 100644
+--- a/include/net/cipso_ipv4.h
++++ b/include/net/cipso_ipv4.h
+@@ -42,6 +42,7 @@
+ #include <net/netlabel.h>
+ #include <net/request_sock.h>
+ #include <linux/atomic.h>
++#include <asm/unaligned.h>
+ 
+ /* known doi values */
+ #define CIPSO_V4_DOI_UNKNOWN          0x00000000
+@@ -285,7 +286,33 @@ static inline int cipso_v4_skbuff_getattr(const struct sk_buff *skb,
+ static inline int cipso_v4_validate(const struct sk_buff *skb,
+ 				    unsigned char **option)
+ {
+-	return -ENOSYS;
++	unsigned char *opt = *option;
++	unsigned char err_offset = 0;
++	u8 opt_len = opt[1];
++	u8 opt_iter;
++
++	if (opt_len < 8) {
++		err_offset = 1;
++		goto out;
++	}
++
++	if (get_unaligned_be32(&opt[2]) == 0) {
++		err_offset = 2;
++		goto out;
++	}
++
++	for (opt_iter = 6; opt_iter < opt_len;) {
++		if (opt[opt_iter + 1] > (opt_len - opt_iter)) {
++			err_offset = opt_iter + 1;
++			goto out;
++		}
++		opt_iter += opt[opt_iter + 1];
++	}
++
++out:
++	*option = opt + err_offset;
++	return err_offset;
++
+ }
+ #endif /* CONFIG_NETLABEL */
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0031-net-l2tp_eth-fix-kernel-panic-on-rmmod-l2tp_eth.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0031-net-l2tp_eth-fix-kernel-panic-on-rmmod-l2tp_eth.patch
new file mode 100644
index 0000000..27a349b
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0031-net-l2tp_eth-fix-kernel-panic-on-rmmod-l2tp_eth.patch
@@ -0,0 +1,43 @@
+From b5ad3a0c0628afa77ab9de116e252fbac91f6db2 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Thu, 7 Jun 2012 00:07:20 +0000
+Subject: [PATCH 31/49] net: l2tp_eth: fix kernel panic on rmmod l2tp_eth
+
+[ Upstream commit a06998b88b1651c5f71c0e35f528bf2057188ead ]
+
+We must prevent module unloading if some devices are still attached to
+l2tp_eth driver.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reported-by: Denys Fedoryshchenko <denys@visp.net.lb>
+Tested-by: Denys Fedoryshchenko <denys@visp.net.lb>
+Cc: James Chapman <jchapman@katalix.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/l2tp/l2tp_eth.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
+index d2726a7..3c55f63 100644
+--- a/net/l2tp/l2tp_eth.c
++++ b/net/l2tp/l2tp_eth.c
+@@ -167,6 +167,7 @@ static void l2tp_eth_delete(struct l2tp_session *session)
+ 		if (dev) {
+ 			unregister_netdev(dev);
+ 			spriv->dev = NULL;
++			module_put(THIS_MODULE);
+ 		}
+ 	}
+ }
+@@ -254,6 +255,7 @@ static int l2tp_eth_create(struct net *net, u32 tunnel_id, u32 session_id, u32 p
+ 	if (rc < 0)
+ 		goto out_del_dev;
+ 
++	__module_get(THIS_MODULE);
+ 	/* Must be done after register_netdev() */
+ 	strlcpy(session->ifname, dev->name, IFNAMSIZ);
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0032-l2tp-fix-a-race-in-l2tp_ip_sendmsg.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0032-l2tp-fix-a-race-in-l2tp_ip_sendmsg.patch
new file mode 100644
index 0000000..60f8a9d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0032-l2tp-fix-a-race-in-l2tp_ip_sendmsg.patch
@@ -0,0 +1,53 @@
+From a2ee8c14e43a7432b50a050cd07c06d43caa9314 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Fri, 8 Jun 2012 06:25:00 +0000
+Subject: [PATCH 32/49] l2tp: fix a race in l2tp_ip_sendmsg()
+
+[ Upstream commit 4399a4df98a63e30fd16e9d0cecc46ea92269e8f ]
+
+Commit 081b1b1bb27f (l2tp: fix l2tp_ip_sendmsg() route handling) added
+a race, in case IP route cache is disabled.
+
+In this case, we should not do the dst_release(&rt->dst), since it'll
+free the dst immediately, instead of waiting a RCU grace period.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: James Chapman <jchapman@katalix.com>
+Cc: Denys Fedoryshchenko <denys@visp.net.lb>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/l2tp/l2tp_ip.c |    9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
+index 2fbbe1f..6c7e609 100644
+--- a/net/l2tp/l2tp_ip.c
++++ b/net/l2tp/l2tp_ip.c
+@@ -515,10 +515,12 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
+ 					   sk->sk_bound_dev_if);
+ 		if (IS_ERR(rt))
+ 			goto no_route;
+-		if (connected)
++		if (connected) {
+ 			sk_setup_caps(sk, &rt->dst);
+-		else
+-			dst_release(&rt->dst); /* safe since we hold rcu_read_lock */
++		} else {
++			skb_dst_set(skb, &rt->dst);
++			goto xmit;
++		}
+ 	}
+ 
+ 	/* We dont need to clone dst here, it is guaranteed to not disappear.
+@@ -526,6 +528,7 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
+ 	 */
+ 	skb_dst_set_noref(skb, &rt->dst);
+ 
++xmit:
+ 	/* Queue the packet to IP for output */
+ 	rc = ip_queue_xmit(skb, &inet->cork.fl);
+ 	rcu_read_unlock();
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0033-sky2-fix-checksum-bit-management-on-some-chips.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0033-sky2-fix-checksum-bit-management-on-some-chips.patch
new file mode 100644
index 0000000..f1d1fb6
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0033-sky2-fix-checksum-bit-management-on-some-chips.patch
@@ -0,0 +1,47 @@
+From f13b66c5fac7aa65e68a960806d6c5e97df723eb Mon Sep 17 00:00:00 2001
+From: stephen hemminger <shemminger@vyatta.com>
+Date: Wed, 6 Jun 2012 10:01:30 +0000
+Subject: [PATCH 33/49] sky2: fix checksum bit management on some chips
+
+[ Upstream commit 5ff0feac88ced864f44adb145142269196fa79d9 ]
+
+The newer flavors of Yukon II use a different method for receive
+checksum offload. This is indicated in the driver by the SKY2_HW_NEW_LE
+flag. On these newer chips, the BMU_ENA_RX_CHKSUM should not be set.
+
+The driver would get incorrectly toggle the bit, enabling the old
+checksum logic on these chips and cause a BUG_ON() assertion. If
+receive checksum was toggled via ethtool.
+
+Reported-by: Kirill Smelkov <kirr@mns.spb.ru>
+Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/marvell/sky2.c |   10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
+index 65c51ff..11ddd838 100644
+--- a/drivers/net/ethernet/marvell/sky2.c
++++ b/drivers/net/ethernet/marvell/sky2.c
+@@ -4361,10 +4361,12 @@ static int sky2_set_features(struct net_device *dev, u32 features)
+ 	struct sky2_port *sky2 = netdev_priv(dev);
+ 	u32 changed = dev->features ^ features;
+ 
+-	if (changed & NETIF_F_RXCSUM) {
+-		u32 on = features & NETIF_F_RXCSUM;
+-		sky2_write32(sky2->hw, Q_ADDR(rxqaddr[sky2->port], Q_CSR),
+-			     on ? BMU_ENA_RX_CHKSUM : BMU_DIS_RX_CHKSUM);
++	if ((changed & NETIF_F_RXCSUM) &&
++	    !(sky2->hw->flags & SKY2_HW_NEW_LE)) {
++		sky2_write32(sky2->hw,
++			     Q_ADDR(rxqaddr[sky2->port], Q_CSR),
++			     (features & NETIF_F_RXCSUM)
++			     ? BMU_ENA_RX_CHKSUM : BMU_DIS_RX_CHKSUM);
+ 	}
+ 
+ 	if (changed & NETIF_F_RXHASH)
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0034-be2net-fix-a-race-in-be_xmit.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0034-be2net-fix-a-race-in-be_xmit.patch
new file mode 100644
index 0000000..c67c72a
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0034-be2net-fix-a-race-in-be_xmit.patch
@@ -0,0 +1,44 @@
+From 5588c981e9bc21ca9bd050a8e15feb4adb1215b9 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Thu, 7 Jun 2012 22:59:59 +0000
+Subject: [PATCH 34/49] be2net: fix a race in be_xmit()
+
+[ Upstream commit cd8f76c0a0c6fce0b2cf23c9bd0123f91453f46d ]
+
+As soon as hardware is notified of a transmit, we no longer can assume
+skb can be dereferenced, as TX completion might have freed the packet.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Sathya Perla <sathya.perla@emulex.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/ethernet/emulex/benet/be_main.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
+index bf266a0..36c7c4e 100644
+--- a/drivers/net/ethernet/emulex/benet/be_main.c
++++ b/drivers/net/ethernet/emulex/benet/be_main.c
+@@ -696,6 +696,8 @@ static netdev_tx_t be_xmit(struct sk_buff *skb,
+ 
+ 	copied = make_tx_wrbs(adapter, txq, skb, wrb_cnt, dummy_wrb);
+ 	if (copied) {
++		int gso_segs = skb_shinfo(skb)->gso_segs;
++
+ 		/* record the sent skb in the sent_skb table */
+ 		BUG_ON(txo->sent_skb_list[start]);
+ 		txo->sent_skb_list[start] = skb;
+@@ -713,8 +715,7 @@ static netdev_tx_t be_xmit(struct sk_buff *skb,
+ 
+ 		be_txq_notify(adapter, txq->id, wrb_cnt);
+ 
+-		be_tx_stats_update(txo, wrb_cnt, copied,
+-				skb_shinfo(skb)->gso_segs, stopped);
++		be_tx_stats_update(txo, wrb_cnt, copied, gso_segs, stopped);
+ 	} else {
+ 		txq->head = start;
+ 		dev_kfree_skb_any(skb);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0035-dummy-fix-rcu_sched-self-detected-stalls.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0035-dummy-fix-rcu_sched-self-detected-stalls.patch
new file mode 100644
index 0000000..33f9ffa
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0035-dummy-fix-rcu_sched-self-detected-stalls.patch
@@ -0,0 +1,49 @@
+From 6e4b4fb46ccc49cacb3258764f2414ecd4fb27a4 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Sun, 10 Jun 2012 21:11:57 +0000
+Subject: [PATCH 35/49] dummy: fix rcu_sched self-detected stalls
+
+[ Upstream commit 16b0dc29c1af9df341428f4c49ada4f626258082 ]
+
+Trying to "modprobe dummy numdummies=30000" triggers :
+
+INFO: rcu_sched self-detected stall on CPU { 8} (t=60000 jiffies)
+
+After this splat, RTNL is locked and reboot is needed.
+
+We must call cond_resched() to avoid this, even holding RTNL.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/dummy.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
+index eeac9ca..68fe73c 100644
+--- a/drivers/net/dummy.c
++++ b/drivers/net/dummy.c
+@@ -37,6 +37,7 @@
+ #include <linux/rtnetlink.h>
+ #include <net/rtnetlink.h>
+ #include <linux/u64_stats_sync.h>
++#include <linux/sched.h>
+ 
+ static int numdummies = 1;
+ 
+@@ -186,8 +187,10 @@ static int __init dummy_init_module(void)
+ 	rtnl_lock();
+ 	err = __rtnl_link_register(&dummy_link_ops);
+ 
+-	for (i = 0; i < numdummies && !err; i++)
++	for (i = 0; i < numdummies && !err; i++) {
+ 		err = dummy_init_one();
++		cond_resched();
++	}
+ 	if (err < 0)
+ 		__rtnl_link_unregister(&dummy_link_ops);
+ 	rtnl_unlock();
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0036-bonding-Fix-corrupted-queue_mapping.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0036-bonding-Fix-corrupted-queue_mapping.patch
new file mode 100644
index 0000000..6f9681c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0036-bonding-Fix-corrupted-queue_mapping.patch
@@ -0,0 +1,117 @@
+From 218ae95441a945d2a474b2277156749f416b8859 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Tue, 12 Jun 2012 06:03:51 +0000
+Subject: [PATCH 36/49] bonding: Fix corrupted queue_mapping
+
+[ Upstream commit 5ee31c6898ea5537fcea160999d60dc63bc0c305 ]
+
+In the transmit path of the bonding driver, skb->cb is used to
+stash the skb->queue_mapping so that the bonding device can set its
+own queue mapping.  This value becomes corrupted since the skb->cb is
+also used in __dev_xmit_skb.
+
+When transmitting through bonding driver, bond_select_queue is
+called from dev_queue_xmit.  In bond_select_queue the original
+skb->queue_mapping is copied into skb->cb (via bond_queue_mapping)
+and skb->queue_mapping is overwritten with the bond driver queue.
+
+Subsequently in dev_queue_xmit, __dev_xmit_skb is called which writes
+the packet length into skb->cb, thereby overwriting the stashed
+queue mappping.  In bond_dev_queue_xmit (called from hard_start_xmit),
+the queue mapping for the skb is set to the stashed value which is now
+the skb length and hence is an invalid queue for the slave device.
+
+If we want to save skb->queue_mapping into skb->cb[], best place is to
+add a field in struct qdisc_skb_cb, to make sure it wont conflict with
+other layers (eg : Qdiscc, Infiniband...)
+
+This patchs also makes sure (struct qdisc_skb_cb)->data is aligned on 8
+bytes :
+
+netem qdisc for example assumes it can store an u64 in it, without
+misalignment penalty.
+
+Note : we only have 20 bytes left in (struct qdisc_skb_cb)->data[].
+The largest user is CHOKe and it fills it.
+
+Based on a previous patch from Tom Herbert.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reported-by: Tom Herbert <therbert@google.com>
+Cc: John Fastabend <john.r.fastabend@intel.com>
+Cc: Roland Dreier <roland@kernel.org>
+Acked-by: Neil Horman <nhorman@tuxdriver.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/net/bonding/bond_main.c |    9 +++++----
+ include/net/sch_generic.h       |    7 +++++--
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index f65e0b9..1a88e38 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -77,6 +77,7 @@
+ #include <net/route.h>
+ #include <net/net_namespace.h>
+ #include <net/netns/generic.h>
++#include <net/pkt_sched.h>
+ #include "bonding.h"
+ #include "bond_3ad.h"
+ #include "bond_alb.h"
+@@ -382,8 +383,6 @@ struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr)
+ 	return next;
+ }
+ 
+-#define bond_queue_mapping(skb) (*(u16 *)((skb)->cb))
+-
+ /**
+  * bond_dev_queue_xmit - Prepare skb for xmit.
+  *
+@@ -396,7 +395,9 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb,
+ {
+ 	skb->dev = slave_dev;
+ 
+-	skb->queue_mapping = bond_queue_mapping(skb);
++	BUILD_BUG_ON(sizeof(skb->queue_mapping) !=
++		     sizeof(qdisc_skb_cb(skb)->bond_queue_mapping));
++	skb->queue_mapping = qdisc_skb_cb(skb)->bond_queue_mapping;
+ 
+ 	if (unlikely(netpoll_tx_running(slave_dev)))
+ 		bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb);
+@@ -4151,7 +4152,7 @@ static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb)
+ 	/*
+ 	 * Save the original txq to restore before passing to the driver
+ 	 */
+-	bond_queue_mapping(skb) = skb->queue_mapping;
++	qdisc_skb_cb(skb)->bond_queue_mapping = skb->queue_mapping;
+ 
+ 	if (unlikely(txq >= dev->real_num_tx_queues)) {
+ 		do {
+diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
+index 55ce96b..9d7d54a 100644
+--- a/include/net/sch_generic.h
++++ b/include/net/sch_generic.h
+@@ -220,13 +220,16 @@ struct tcf_proto {
+ 
+ struct qdisc_skb_cb {
+ 	unsigned int		pkt_len;
+-	unsigned char		data[24];
++	u16			bond_queue_mapping;
++	u16			_pad;
++	unsigned char		data[20];
+ };
+ 
+ static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
+ {
+ 	struct qdisc_skb_cb *qcb;
+-	BUILD_BUG_ON(sizeof(skb->cb) < sizeof(unsigned int) + sz);
++
++	BUILD_BUG_ON(sizeof(skb->cb) < offsetof(struct qdisc_skb_cb, data) + sz);
+ 	BUILD_BUG_ON(sizeof(qcb->data) < sz);
+ }
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0037-ethtool-allow-ETHTOOL_GSSET_INFO-for-users.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0037-ethtool-allow-ETHTOOL_GSSET_INFO-for-users.patch
new file mode 100644
index 0000000..6e02ce1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0037-ethtool-allow-ETHTOOL_GSSET_INFO-for-users.patch
@@ -0,0 +1,36 @@
+From 7d1a3b73b1d85f034aeb9e5c1e4eb44ce56658be Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= <mirq-linux@rere.qmqm.pl>
+Date: Sun, 22 Jan 2012 00:20:40 +0000
+Subject: [PATCH 37/49] ethtool: allow ETHTOOL_GSSET_INFO for users
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+[ Upstream commit f80400a26a2e8bff541de12834a1134358bb6642 ]
+
+Allow ETHTOOL_GSSET_INFO ethtool ioctl() for unprivileged users.
+ETHTOOL_GSTRINGS is already allowed, but is unusable without this one.
+
+Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
+Acked-by: Ben Hutchings <bhutchings@solarflare.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/core/ethtool.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/net/core/ethtool.c b/net/core/ethtool.c
+index 2b587ec..2367246 100644
+--- a/net/core/ethtool.c
++++ b/net/core/ethtool.c
+@@ -1672,6 +1672,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
+ 	case ETHTOOL_GRXCSUM:
+ 	case ETHTOOL_GTXCSUM:
+ 	case ETHTOOL_GSG:
++	case ETHTOOL_GSSET_INFO:
+ 	case ETHTOOL_GSTRINGS:
+ 	case ETHTOOL_GTSO:
+ 	case ETHTOOL_GPERMADDR:
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0038-netpoll-fix-netpoll_send_udp-bugs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0038-netpoll-fix-netpoll_send_udp-bugs.patch
new file mode 100644
index 0000000..e906246
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0038-netpoll-fix-netpoll_send_udp-bugs.patch
@@ -0,0 +1,77 @@
+From 1757946f8c246a1b46bf27d40716d4f78145f4a1 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Tue, 12 Jun 2012 19:30:21 +0000
+Subject: [PATCH 38/49] netpoll: fix netpoll_send_udp() bugs
+
+[ Upstream commit 954fba0274058d27c7c07b5ea07c41b3b7477894 ]
+
+Bogdan Hamciuc diagnosed and fixed following bug in netpoll_send_udp() :
+
+"skb->len += len;" instead of "skb_put(skb, len);"
+
+Meaning that _if_ a network driver needs to call skb_realloc_headroom(),
+only packet headers would be copied, leaving garbage in the payload.
+
+However the skb_realloc_headroom() must be avoided as much as possible
+since it requires memory and netpoll tries hard to work even if memory
+is exhausted (using a pool of preallocated skbs)
+
+It appears netpoll_send_udp() reserved 16 bytes for the ethernet header,
+which happens to work for typicall drivers but not all.
+
+Right thing is to use LL_RESERVED_SPACE(dev)
+(And also add dev->needed_tailroom of tailroom)
+
+This patch combines both fixes.
+
+Many thanks to Bogdan for raising this issue.
+
+Reported-by: Bogdan Hamciuc <bogdan.hamciuc@freescale.com>
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Tested-by: Bogdan Hamciuc <bogdan.hamciuc@freescale.com>
+Cc: Herbert Xu <herbert@gondor.apana.org.au>
+Cc: Neil Horman <nhorman@tuxdriver.com>
+Reviewed-by: Neil Horman <nhorman@tuxdriver.com>
+Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/core/netpoll.c |   11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/net/core/netpoll.c b/net/core/netpoll.c
+index ab0633f..db4bb7a 100644
+--- a/net/core/netpoll.c
++++ b/net/core/netpoll.c
+@@ -351,22 +351,23 @@ EXPORT_SYMBOL(netpoll_send_skb_on_dev);
+ 
+ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
+ {
+-	int total_len, eth_len, ip_len, udp_len;
++	int total_len, ip_len, udp_len;
+ 	struct sk_buff *skb;
+ 	struct udphdr *udph;
+ 	struct iphdr *iph;
+ 	struct ethhdr *eth;
+ 
+ 	udp_len = len + sizeof(*udph);
+-	ip_len = eth_len = udp_len + sizeof(*iph);
+-	total_len = eth_len + ETH_HLEN + NET_IP_ALIGN;
++	ip_len = udp_len + sizeof(*iph);
++	total_len = ip_len + LL_RESERVED_SPACE(np->dev);
+ 
+-	skb = find_skb(np, total_len, total_len - len);
++	skb = find_skb(np, total_len + np->dev->needed_tailroom,
++		       total_len - len);
+ 	if (!skb)
+ 		return;
+ 
+ 	skb_copy_to_linear_data(skb, msg, len);
+-	skb->len += len;
++	skb_put(skb, len);
+ 
+ 	skb_push(skb, sizeof(*udph));
+ 	skb_reset_transport_header(skb);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0039-ipv6-Move-ipv6-proc-file-registration-to-end-of-init.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0039-ipv6-Move-ipv6-proc-file-registration-to-end-of-init.patch
new file mode 100644
index 0000000..202fca3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0039-ipv6-Move-ipv6-proc-file-registration-to-end-of-init.patch
@@ -0,0 +1,126 @@
+From 0991f9681e1142099a36959648a920e9ee9dda33 Mon Sep 17 00:00:00 2001
+From: Thomas Graf <tgraf@suug.ch>
+Date: Mon, 18 Jun 2012 12:08:33 +0000
+Subject: [PATCH 39/49] ipv6: Move ipv6 proc file registration to end of init
+ order
+
+[ Upstream commit d189634ecab947c10f6f832258b103d0bbfe73cc ]
+
+/proc/net/ipv6_route reflects the contents of fib_table_hash. The proc
+handler is installed in ip6_route_net_init() whereas fib_table_hash is
+allocated in fib6_net_init() _after_ the proc handler has been installed.
+
+This opens up a short time frame to access fib_table_hash with its pants
+down.
+
+Move the registration of the proc files to a later point in the init
+order to avoid the race.
+
+Tested :-)
+
+Signed-off-by: Thomas Graf <tgraf@suug.ch>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/ipv6/route.c |   41 +++++++++++++++++++++++++++++++----------
+ 1 file changed, 31 insertions(+), 10 deletions(-)
+
+diff --git a/net/ipv6/route.c b/net/ipv6/route.c
+index 059b9d9..2e21751 100644
+--- a/net/ipv6/route.c
++++ b/net/ipv6/route.c
+@@ -2881,10 +2881,6 @@ static int __net_init ip6_route_net_init(struct net *net)
+ 	net->ipv6.sysctl.ip6_rt_mtu_expires = 10*60*HZ;
+ 	net->ipv6.sysctl.ip6_rt_min_advmss = IPV6_MIN_MTU - 20 - 40;
+ 
+-#ifdef CONFIG_PROC_FS
+-	proc_net_fops_create(net, "ipv6_route", 0, &ipv6_route_proc_fops);
+-	proc_net_fops_create(net, "rt6_stats", S_IRUGO, &rt6_stats_seq_fops);
+-#endif
+ 	net->ipv6.ip6_rt_gc_expire = 30*HZ;
+ 
+ 	ret = 0;
+@@ -2905,10 +2901,6 @@ out_ip6_dst_ops:
+ 
+ static void __net_exit ip6_route_net_exit(struct net *net)
+ {
+-#ifdef CONFIG_PROC_FS
+-	proc_net_remove(net, "ipv6_route");
+-	proc_net_remove(net, "rt6_stats");
+-#endif
+ 	kfree(net->ipv6.ip6_null_entry);
+ #ifdef CONFIG_IPV6_MULTIPLE_TABLES
+ 	kfree(net->ipv6.ip6_prohibit_entry);
+@@ -2917,11 +2909,33 @@ static void __net_exit ip6_route_net_exit(struct net *net)
+ 	dst_entries_destroy(&net->ipv6.ip6_dst_ops);
+ }
+ 
++static int __net_init ip6_route_net_init_late(struct net *net)
++{
++#ifdef CONFIG_PROC_FS
++	proc_net_fops_create(net, "ipv6_route", 0, &ipv6_route_proc_fops);
++	proc_net_fops_create(net, "rt6_stats", S_IRUGO, &rt6_stats_seq_fops);
++#endif
++	return 0;
++}
++
++static void __net_exit ip6_route_net_exit_late(struct net *net)
++{
++#ifdef CONFIG_PROC_FS
++	proc_net_remove(net, "ipv6_route");
++	proc_net_remove(net, "rt6_stats");
++#endif
++}
++
+ static struct pernet_operations ip6_route_net_ops = {
+ 	.init = ip6_route_net_init,
+ 	.exit = ip6_route_net_exit,
+ };
+ 
++static struct pernet_operations ip6_route_net_late_ops = {
++	.init = ip6_route_net_init_late,
++	.exit = ip6_route_net_exit_late,
++};
++
+ static struct notifier_block ip6_route_dev_notifier = {
+ 	.notifier_call = ip6_route_dev_notify,
+ 	.priority = 0,
+@@ -2971,19 +2985,25 @@ int __init ip6_route_init(void)
+ 	if (ret)
+ 		goto xfrm6_init;
+ 
++	ret = register_pernet_subsys(&ip6_route_net_late_ops);
++	if (ret)
++		goto fib6_rules_init;
++
+ 	ret = -ENOBUFS;
+ 	if (__rtnl_register(PF_INET6, RTM_NEWROUTE, inet6_rtm_newroute, NULL, NULL) ||
+ 	    __rtnl_register(PF_INET6, RTM_DELROUTE, inet6_rtm_delroute, NULL, NULL) ||
+ 	    __rtnl_register(PF_INET6, RTM_GETROUTE, inet6_rtm_getroute, NULL, NULL))
+-		goto fib6_rules_init;
++		goto out_register_late_subsys;
+ 
+ 	ret = register_netdevice_notifier(&ip6_route_dev_notifier);
+ 	if (ret)
+-		goto fib6_rules_init;
++		goto out_register_late_subsys;
+ 
+ out:
+ 	return ret;
+ 
++out_register_late_subsys:
++	unregister_pernet_subsys(&ip6_route_net_late_ops);
+ fib6_rules_init:
+ 	fib6_rules_cleanup();
+ xfrm6_init:
+@@ -3002,6 +3022,7 @@ out_kmem_cache:
+ void ip6_route_cleanup(void)
+ {
+ 	unregister_netdevice_notifier(&ip6_route_dev_notifier);
++	unregister_pernet_subsys(&ip6_route_net_late_ops);
+ 	fib6_rules_cleanup();
+ 	xfrm6_fini();
+ 	fib6_gc_cleanup();
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0040-bridge-Assign-rtnl_link_ops-to-bridge-devices-create.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0040-bridge-Assign-rtnl_link_ops-to-bridge-devices-create.patch
new file mode 100644
index 0000000..bacca53
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0040-bridge-Assign-rtnl_link_ops-to-bridge-devices-create.patch
@@ -0,0 +1,62 @@
+From e310ae5ff49ec77b2c991cffe288ac766e5f5203 Mon Sep 17 00:00:00 2001
+From: stephen hemminger <shemminger@vyatta.com>
+Date: Tue, 26 Jun 2012 05:48:45 +0000
+Subject: [PATCH 40/49] bridge: Assign rtnl_link_ops to bridge devices created
+ via ioctl (v2)
+
+[ Upstream commit 149ddd83a92b02c658d6c61f3276eb6500d585e8 ]
+
+This ensures that bridges created with brctl(8) or ioctl(2) directly
+also carry IFLA_LINKINFO when dumped over netlink. This also allows
+to create a bridge with ioctl(2) and delete it with RTM_DELLINK.
+
+Signed-off-by: Thomas Graf <tgraf@suug.ch>
+Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ net/bridge/br_if.c      |    1 +
+ net/bridge/br_netlink.c |    2 +-
+ net/bridge/br_private.h |    1 +
+ 3 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
+index f603e5b..f3f75ad 100644
+--- a/net/bridge/br_if.c
++++ b/net/bridge/br_if.c
+@@ -240,6 +240,7 @@ int br_add_bridge(struct net *net, const char *name)
+ 		return -ENOMEM;
+ 
+ 	dev_net_set(dev, net);
++	dev->rtnl_link_ops = &br_link_ops;
+ 
+ 	res = register_netdev(dev);
+ 	if (res)
+diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
+index a1daf82..cbf9ccd 100644
+--- a/net/bridge/br_netlink.c
++++ b/net/bridge/br_netlink.c
+@@ -211,7 +211,7 @@ static int br_validate(struct nlattr *tb[], struct nlattr *data[])
+ 	return 0;
+ }
+ 
+-static struct rtnl_link_ops br_link_ops __read_mostly = {
++struct rtnl_link_ops br_link_ops __read_mostly = {
+ 	.kind		= "bridge",
+ 	.priv_size	= sizeof(struct net_bridge),
+ 	.setup		= br_dev_setup,
+diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
+index 93264df..b9bba8f 100644
+--- a/net/bridge/br_private.h
++++ b/net/bridge/br_private.h
+@@ -536,6 +536,7 @@ extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr)
+ #endif
+ 
+ /* br_netlink.c */
++extern struct rtnl_link_ops br_link_ops;
+ extern int br_netlink_init(void);
+ extern void br_netlink_fini(void);
+ extern void br_ifinfo_notify(int event, struct net_bridge_port *port);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0041-Btrfs-run-delayed-directory-updates-during-log-repla.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0041-Btrfs-run-delayed-directory-updates-during-log-repla.patch
new file mode 100644
index 0000000..c6b1663
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0041-Btrfs-run-delayed-directory-updates-during-log-repla.patch
@@ -0,0 +1,56 @@
+From 478ed8ce8490d599e1bb8e79007b85d6a9e7f1a0 Mon Sep 17 00:00:00 2001
+From: Chris Mason <chris.mason@fusionio.com>
+Date: Mon, 2 Jul 2012 15:29:53 -0400
+Subject: [PATCH 41/49] Btrfs: run delayed directory updates during log replay
+
+commit b6305567e7d31b0bec1b8cb9ec0cadd7f7086f5f upstream.
+
+While we are resolving directory modifications in the
+tree log, we are triggering delayed metadata updates to
+the filesystem btrees.
+
+This commit forces the delayed updates to run so the
+replay code can find any modifications done.  It stops
+us from crashing because the directory deleltion replay
+expects items to be removed immediately from the tree.
+
+Signed-off-by: Chris Mason <chris.mason@fusionio.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/btrfs/tree-log.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
+index 3568374..19b127c 100644
+--- a/fs/btrfs/tree-log.c
++++ b/fs/btrfs/tree-log.c
+@@ -692,6 +692,8 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,
+ 	kfree(name);
+ 
+ 	iput(inode);
++
++	btrfs_run_delayed_items(trans, root);
+ 	return ret;
+ }
+ 
+@@ -897,6 +899,7 @@ again:
+ 				ret = btrfs_unlink_inode(trans, root, dir,
+ 							 inode, victim_name,
+ 							 victim_name_len);
++				btrfs_run_delayed_items(trans, root);
+ 			}
+ 			kfree(victim_name);
+ 			ptr = (unsigned long)(victim_ref + 1) + victim_name_len;
+@@ -1477,6 +1480,9 @@ again:
+ 			ret = btrfs_unlink_inode(trans, root, dir, inode,
+ 						 name, name_len);
+ 			BUG_ON(ret);
++
++			btrfs_run_delayed_items(trans, root);
++
+ 			kfree(name);
+ 			iput(inode);
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0042-cifs-when-server-doesn-t-set-CAP_LARGE_READ_X-cap-de.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0042-cifs-when-server-doesn-t-set-CAP_LARGE_READ_X-cap-de.patch
new file mode 100644
index 0000000..435c9cb
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0042-cifs-when-server-doesn-t-set-CAP_LARGE_READ_X-cap-de.patch
@@ -0,0 +1,60 @@
+From 3ef708aec9359ad6b05d8ae43663cf5e73c58e9d Mon Sep 17 00:00:00 2001
+From: Jeff Layton <jlayton@redhat.com>
+Date: Mon, 2 Jul 2012 07:24:25 -0400
+Subject: [PATCH 42/49] cifs: when server doesn't set CAP_LARGE_READ_X, cap
+ default rsize at MaxBufferSize
+
+commit ec01d738a1691dfc85b96b9f796020267a7be577 upstream.
+
+When the server doesn't advertise CAP_LARGE_READ_X, then MS-CIFS states
+that you must cap the size of the read at the client's MaxBufferSize.
+Unfortunately, testing with many older servers shows that they often
+can't service a read larger than their own MaxBufferSize.
+
+Since we can't assume what the server will do in this situation, we must
+be conservative here for the default. When the server can't do large
+reads, then assume that it can't satisfy any read larger than its
+MaxBufferSize either.
+
+Luckily almost all modern servers can do large reads, so this won't
+affect them. This is really just for older win9x and OS/2 era servers.
+Also, note that this patch just governs the default rsize. The admin can
+always override this if he so chooses.
+
+Reported-by: David H. Durgee <dhdurgee@acm.org>
+Signed-off-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Steven French <sfrench@w500smf.(none)>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/cifs/connect.c |    9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
+index 9e0675a..b21670c 100644
+--- a/fs/cifs/connect.c
++++ b/fs/cifs/connect.c
+@@ -2975,18 +2975,15 @@ cifs_negotiate_rsize(struct cifs_tcon *tcon, struct smb_vol *pvolume_info)
+ 	 * MS-CIFS indicates that servers are only limited by the client's
+ 	 * bufsize for reads, testing against win98se shows that it throws
+ 	 * INVALID_PARAMETER errors if you try to request too large a read.
++	 * OS/2 just sends back short reads.
+ 	 *
+-	 * If the server advertises a MaxBufferSize of less than one page,
+-	 * assume that it also can't satisfy reads larger than that either.
+-	 *
+-	 * FIXME: Is there a better heuristic for this?
++	 * If the server doesn't advertise CAP_LARGE_READ_X, then assume that
++	 * it can't handle a read request larger than its MaxBufferSize either.
+ 	 */
+ 	if (tcon->unix_ext && (unix_cap & CIFS_UNIX_LARGE_READ_CAP))
+ 		defsize = CIFS_DEFAULT_IOSIZE;
+ 	else if (server->capabilities & CAP_LARGE_READ_X)
+ 		defsize = CIFS_DEFAULT_NON_POSIX_RSIZE;
+-	else if (server->maxBuf >= PAGE_CACHE_SIZE)
+-		defsize = CIFSMaxBufSize;
+ 	else
+ 		defsize = server->maxBuf - sizeof(READ_RSP);
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0043-ocfs2-clear-unaligned-io-flag-when-dio-fails.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0043-ocfs2-clear-unaligned-io-flag-when-dio-fails.patch
new file mode 100644
index 0000000..c07be0d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0043-ocfs2-clear-unaligned-io-flag-when-dio-fails.patch
@@ -0,0 +1,38 @@
+From 605e639247e5f40be06b013748769bd2cc252e04 Mon Sep 17 00:00:00 2001
+From: Junxiao Bi <junxiao.bi@oracle.com>
+Date: Wed, 27 Jun 2012 17:09:55 +0800
+Subject: [PATCH 43/49] ocfs2: clear unaligned io flag when dio fails
+
+commit 3e5d3c35a68c9a933bdbdd8685bd1a205b57e806 upstream.
+
+The unaligned io flag is set in the kiocb when an unaligned
+dio is issued, it should be cleared even when the dio fails,
+or it may affect the following io which are using the same
+kiocb.
+
+Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
+Signed-off-by: Joel Becker <jlbec@evilplan.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/ocfs2/file.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
+index 6e39668..07ee5b4 100644
+--- a/fs/ocfs2/file.c
++++ b/fs/ocfs2/file.c
+@@ -2422,8 +2422,10 @@ out_dio:
+ 		unaligned_dio = 0;
+ 	}
+ 
+-	if (unaligned_dio)
++	if (unaligned_dio) {
++		ocfs2_iocb_clear_unaligned_aio(iocb);
+ 		atomic_dec(&OCFS2_I(inode)->ip_unaligned_aio);
++	}
+ 
+ out:
+ 	if (rw_level != -1)
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0044-aio-make-kiocb-private-NUll-in-init_sync_kiocb.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0044-aio-make-kiocb-private-NUll-in-init_sync_kiocb.patch
new file mode 100644
index 0000000..1084fef
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0044-aio-make-kiocb-private-NUll-in-init_sync_kiocb.patch
@@ -0,0 +1,39 @@
+From 21dbeb828448f788ffb3590cf6706c074bb1048f Mon Sep 17 00:00:00 2001
+From: Junxiao Bi <junxiao.bi@oracle.com>
+Date: Wed, 27 Jun 2012 17:09:54 +0800
+Subject: [PATCH 44/49] aio: make kiocb->private NUll in init_sync_kiocb()
+
+commit 2dfd06036ba7ae8e7be2daf5a2fff1dac42390bf upstream.
+
+Ocfs2 uses kiocb.*private as a flag of unsigned long size. In
+commit a11f7e6 ocfs2: serialize unaligned aio, the unaligned
+io flag is involved in it to serialize the unaligned aio. As
+*private is not initialized in init_sync_kiocb() of do_sync_write(),
+this unaligned io flag may be unexpectly set in an aligned dio.
+And this will cause OCFS2_I(inode)->ip_unaligned_aio decreased
+to -1 in ocfs2_dio_end_io(), thus the following unaligned dio
+will hang forever at ocfs2_aiodio_wait() in ocfs2_file_aio_write().
+
+Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
+Acked-by: Jeff Moyer <jmoyer@redhat.com>
+Signed-off-by: Joel Becker <jlbec@evilplan.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ include/linux/aio.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/linux/aio.h b/include/linux/aio.h
+index 2314ad8..b1a520e 100644
+--- a/include/linux/aio.h
++++ b/include/linux/aio.h
+@@ -140,6 +140,7 @@ struct kiocb {
+ 		(x)->ki_dtor = NULL;			\
+ 		(x)->ki_obj.tsk = tsk;			\
+ 		(x)->ki_user_data = 0;                  \
++		(x)->private = NULL;			\
+ 	} while (0)
+ 
+ #define AIO_RING_MAGIC			0xa10a10a1
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0045-mtd-cafe_nand-fix-an-vs-mistake.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0045-mtd-cafe_nand-fix-an-vs-mistake.patch
new file mode 100644
index 0000000..9003be4
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0045-mtd-cafe_nand-fix-an-vs-mistake.patch
@@ -0,0 +1,39 @@
+From e48907a3c090265dcbe0965537bbe9b510a1f7ef Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Sat, 9 Jun 2012 19:08:25 +0300
+Subject: [PATCH 45/49] mtd: cafe_nand: fix an & vs | mistake
+
+commit 48f8b641297df49021093763a3271119a84990a2 upstream.
+
+The intent here was clearly to set result to true if the 0x40000000 flag
+was set.  But instead there was a | vs & typo and we always set result
+to true.
+
+Artem: check the spec at
+wiki.laptop.org/images/5/5c/88ALP01_Datasheet_July_2007.pdf
+and this fix looks correct.
+
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/mtd/nand/cafe_nand.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
+index 72d3f23..68ecf48 100644
+--- a/drivers/mtd/nand/cafe_nand.c
++++ b/drivers/mtd/nand/cafe_nand.c
+@@ -102,7 +102,7 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL };
+ static int cafe_device_ready(struct mtd_info *mtd)
+ {
+ 	struct cafe_priv *cafe = mtd->priv;
+-	int result = !!(cafe_readl(cafe, NAND_STATUS) | 0x40000000);
++	int result = !!(cafe_readl(cafe, NAND_STATUS) & 0x40000000);
+ 	uint32_t irqs = cafe_readl(cafe, NAND_IRQ);
+ 
+ 	cafe_writel(cafe, irqs, NAND_IRQ);
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0046-mm-Hold-a-file-reference-in-madvise_remove.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0046-mm-Hold-a-file-reference-in-madvise_remove.patch
new file mode 100644
index 0000000..82bb8b1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0046-mm-Hold-a-file-reference-in-madvise_remove.patch
@@ -0,0 +1,80 @@
+From 565460286859b1512972fc637f2c653cf648d622 Mon Sep 17 00:00:00 2001
+From: Andy Lutomirski <luto@amacapital.net>
+Date: Thu, 5 Jul 2012 16:00:11 -0700
+Subject: [PATCH 46/49] mm: Hold a file reference in madvise_remove
+
+commit 9ab4233dd08036fe34a89c7dc6f47a8bf2eb29eb upstream.
+
+Otherwise the code races with munmap (causing a use-after-free
+of the vma) or with close (causing a use-after-free of the struct
+file).
+
+The bug was introduced by commit 90ed52ebe481 ("[PATCH] holepunch: fix
+mmap_sem i_mutex deadlock")
+
+Cc: Hugh Dickins <hugh@veritas.com>
+Cc: Miklos Szeredi <mszeredi@suse.cz>
+Cc: Badari Pulavarty <pbadari@us.ibm.com>
+Cc: Nick Piggin <npiggin@suse.de>
+Signed-off-by: Andy Lutomirski <luto@amacapital.net>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+[bwh: Backported to 3.2:
+ - Adjust context
+ - madvise_remove() calls vmtruncate_range(), not do_fallocate()]
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ mm/madvise.c |   16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/mm/madvise.c b/mm/madvise.c
+index 74bf193..23d3a6b 100644
+--- a/mm/madvise.c
++++ b/mm/madvise.c
+@@ -13,6 +13,7 @@
+ #include <linux/hugetlb.h>
+ #include <linux/sched.h>
+ #include <linux/ksm.h>
++#include <linux/file.h>
+ 
+ /*
+  * Any behaviour which results in changes to the vma->vm_flags needs to
+@@ -197,14 +198,16 @@ static long madvise_remove(struct vm_area_struct *vma,
+ 	struct address_space *mapping;
+ 	loff_t offset, endoff;
+ 	int error;
++	struct file *f;
+ 
+ 	*prev = NULL;	/* tell sys_madvise we drop mmap_sem */
+ 
+ 	if (vma->vm_flags & (VM_LOCKED|VM_NONLINEAR|VM_HUGETLB))
+ 		return -EINVAL;
+ 
+-	if (!vma->vm_file || !vma->vm_file->f_mapping
+-		|| !vma->vm_file->f_mapping->host) {
++	f = vma->vm_file;
++
++	if (!f || !f->f_mapping || !f->f_mapping->host) {
+ 			return -EINVAL;
+ 	}
+ 
+@@ -218,9 +221,16 @@ static long madvise_remove(struct vm_area_struct *vma,
+ 	endoff = (loff_t)(end - vma->vm_start - 1)
+ 			+ ((loff_t)vma->vm_pgoff << PAGE_SHIFT);
+ 
+-	/* vmtruncate_range needs to take i_mutex */
++	/*
++	 * vmtruncate_range may need to take i_mutex.  We need to
++	 * explicitly grab a reference because the vma (and hence the
++	 * vma's reference to the file) can go away as soon as we drop
++	 * mmap_sem.
++	 */
++	get_file(f);
+ 	up_read(&current->mm->mmap_sem);
+ 	error = vmtruncate_range(mapping->host, offset, endoff);
++	fput(f);
+ 	down_read(&current->mm->mmap_sem);
+ 	return error;
+ }
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0047-tcm_fc-Resolve-suspicious-RCU-usage-warnings.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0047-tcm_fc-Resolve-suspicious-RCU-usage-warnings.patch
new file mode 100644
index 0000000..e0373e0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0047-tcm_fc-Resolve-suspicious-RCU-usage-warnings.patch
@@ -0,0 +1,36 @@
+From 7b764186beda304507cde2161d84f4e9b16c8ce6 Mon Sep 17 00:00:00 2001
+From: Mark Rustad <mark.d.rustad@intel.com>
+Date: Tue, 26 Jun 2012 15:57:30 -0700
+Subject: [PATCH 47/49] tcm_fc: Resolve suspicious RCU usage warnings
+
+commit 863555be0c81558b1af277addcf68acb8f778860 upstream.
+
+Use rcu_dereference_protected to tell rcu that the ft_lport_lock
+is held during ft_lport_create. This resolved "suspicious RCU usage"
+warnings when debugging options are turned on.
+
+Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
+Tested-by: Ross Brattain <ross.b.brattain@intel.com>
+Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ drivers/target/tcm_fc/tfc_sess.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
+index 3269213..64ddb63 100644
+--- a/drivers/target/tcm_fc/tfc_sess.c
++++ b/drivers/target/tcm_fc/tfc_sess.c
+@@ -61,7 +61,8 @@ static struct ft_tport *ft_tport_create(struct fc_lport *lport)
+ 	struct ft_tport *tport;
+ 	int i;
+ 
+-	tport = rcu_dereference(lport->prov[FC_TYPE_FCP]);
++	tport = rcu_dereference_protected(lport->prov[FC_TYPE_FCP],
++					  lockdep_is_held(&ft_lport_lock));
+ 	if (tport && tport->tpg)
+ 		return tport;
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0048-vfs-make-O_PATH-file-descriptors-usable-for-fchdir.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0048-vfs-make-O_PATH-file-descriptors-usable-for-fchdir.patch
new file mode 100644
index 0000000..eb450c1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0048-vfs-make-O_PATH-file-descriptors-usable-for-fchdir.patch
@@ -0,0 +1,56 @@
+From 7c0f859e15ad91f6d6921970fc9d48f1f7804bf9 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Sat, 7 Jul 2012 10:17:00 -0700
+Subject: [PATCH 48/49] vfs: make O_PATH file descriptors usable for
+ 'fchdir()'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 332a2e1244bd08b9e3ecd378028513396a004a24 upstream.
+
+We already use them for openat() and friends, but fchdir() also wants to
+be able to use O_PATH file descriptors.  This should make it comparable
+to the O_SEARCH of Solaris.  In particular, O_PATH allows you to access
+(not-quite-open) a directory you don't have read persmission to, only
+execute permission.
+
+Noticed during development of multithread support for ksh93.
+
+Reported-by: ольга крыжановская <olga.kryzhanovska@gmail.com>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+---
+ fs/open.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/fs/open.c b/fs/open.c
+index 22c41b5..e2b5d51 100644
+--- a/fs/open.c
++++ b/fs/open.c
+@@ -396,10 +396,10 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd)
+ {
+ 	struct file *file;
+ 	struct inode *inode;
+-	int error;
++	int error, fput_needed;
+ 
+ 	error = -EBADF;
+-	file = fget(fd);
++	file = fget_raw_light(fd, &fput_needed);
+ 	if (!file)
+ 		goto out;
+ 
+@@ -413,7 +413,7 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd)
+ 	if (!error)
+ 		set_fs_pwd(current->fs, &file->f_path);
+ out_putf:
+-	fput(file);
++	fput_light(file, fput_needed);
+ out:
+ 	return error;
+ }
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0049-Linux-3.2.23.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0049-Linux-3.2.23.patch
new file mode 100644
index 0000000..6fa83d1
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.23/0049-Linux-3.2.23.patch
@@ -0,0 +1,24 @@
+From 70aac971ed12a5a23e0b10035df743f2ada81151 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 12 Jul 2012 04:32:21 +0100
+Subject: [PATCH 49/49] Linux 3.2.23
+
+---
+ Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 9a7d921..40d1e3b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 2
+-SUBLEVEL = 22
++SUBLEVEL = 23
+ EXTRAVERSION =
+ NAME = Saber-toothed Squirrel
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0001-f_rndis-HACK-around-undefined-variables.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0001-f_rndis-HACK-around-undefined-variables.patch
index a76d5c1..ce72ebd 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0001-f_rndis-HACK-around-undefined-variables.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0001-f_rndis-HACK-around-undefined-variables.patch
@@ -1,12 +1,12 @@
-From 0a8e60a2f92c5507739e84cdbe5fb3de3f4ee1b6 Mon Sep 17 00:00:00 2001
+From 87fae6477f8987244e2331dc60001c79e5421e80 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Fri, 7 Oct 2011 15:29:28 +0200
-Subject: [PATCH 01/56] f_rndis: HACK around undefined variables
+Subject: [PATCH 01/79] f_rndis: HACK around undefined variables
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  drivers/usb/gadget/f_rndis.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
 index 6614490..d2f1b6f 100644
@@ -27,5 +27,5 @@ index 6614490..d2f1b6f 100644
  	 * the network link ... which is unavailable to this code
  	 * until we're activated via set_alt().
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0002-da8xx-fb-add-DVI-support-for-beaglebone.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0002-da8xx-fb-add-DVI-support-for-beaglebone.patch
index b227e64..158ed0c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0002-da8xx-fb-add-DVI-support-for-beaglebone.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0002-da8xx-fb-add-DVI-support-for-beaglebone.patch
@@ -1,12 +1,12 @@
-From 7db7d9b0c2ca8aea0ae522b7fc30c7ac034edfe2 Mon Sep 17 00:00:00 2001
+From 30dcf1f8efb223e5b6fc3c049bc8ce3236ec17a0 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Thu, 3 Nov 2011 17:35:50 +0100
-Subject: [PATCH 02/56] da8xx-fb: add DVI support for beaglebone
+Subject: [PATCH 02/79] da8xx-fb: add DVI support for beaglebone
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  drivers/video/da8xx-fb.c |   14 ++++++++++++++
- 1 files changed, 14 insertions(+), 0 deletions(-)
+ 1 file changed, 14 insertions(+)
 
 diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
 index 2e69278..b01f15b 100644
@@ -34,5 +34,5 @@ index 2e69278..b01f15b 100644
  
  /* Enable the Raster Engine of the LCD Controller */
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0003-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0003-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch
index 680fa6a..53f7355 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0003-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0003-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch
@@ -1,13 +1,13 @@
-From 8ba62500dc8a2a033099ddcf85fd765b09c47f6d Mon Sep 17 00:00:00 2001
+From 482ed8f98b87299bf77298b86871b4af74334751 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 30 Jan 2012 21:30:09 +0100
-Subject: [PATCH 03/56] beaglebone: rebase everything onto 3.2 - WARNING
+Subject: [PATCH 03/79] beaglebone: rebase everything onto 3.2 - WARNING
  MEGAPATCH
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |  426 ++++++++++++++++++++++++++++++++-
- 1 files changed, 415 insertions(+), 11 deletions(-)
+ 1 file changed, 415 insertions(+), 11 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 563bdf1..2741431 100644
@@ -559,5 +559,5 @@ index 563bdf1..2741431 100644
  	/* Beagle Bone has Micro-SD slot which doesn't have Write Protect pin */
  	am335x_mmc[0].gpio_wp = -EINVAL;
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0004-more-beaglebone-merges.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0004-more-beaglebone-merges.patch
index 1672a11..9e3186d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0004-more-beaglebone-merges.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0004-more-beaglebone-merges.patch
@@ -1,12 +1,12 @@
-From b5158f58ced19e39423d3f12b01f67435a1029b0 Mon Sep 17 00:00:00 2001
+From e495bd4f47ad3b8f48916582b12ec0bf0a7e7134 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 31 Jan 2012 10:04:03 +0100
-Subject: [PATCH 04/56] more beaglebone merges
+Subject: [PATCH 04/79] more beaglebone merges
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
- arch/arm/mach-omap2/board-am335xevm.c |   52 +++++++++++++++++++++++++++++++-
- 1 files changed, 50 insertions(+), 2 deletions(-)
+ arch/arm/mach-omap2/board-am335xevm.c |   52 +++++++++++++++++++++++++++++++--
+ 1 file changed, 50 insertions(+), 2 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 2741431..ffbecae 100644
@@ -103,5 +103,5 @@ index 2741431..ffbecae 100644
  	} else if (!strncmp("1.0", config.version, 3)) {
  		gp_evm_revision = GP_EVM_REV_IS_1_0;
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0005-beaglebone-disable-tsadc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0005-beaglebone-disable-tsadc.patch
index 6d8fdb8..5cd6f46 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0005-beaglebone-disable-tsadc.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0005-beaglebone-disable-tsadc.patch
@@ -1,12 +1,12 @@
-From 590219f8dedc88345dff5e2fcac3c63501333aba Mon Sep 17 00:00:00 2001
+From fd6ae50df7aee160e23cce68bf5c0fd223f2700a Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 31 Jan 2012 10:09:06 +0100
-Subject: [PATCH 05/56] beaglebone: disable tsadc
+Subject: [PATCH 05/79] beaglebone: disable tsadc
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index ffbecae..ba611c0 100644
@@ -27,5 +27,5 @@ index ffbecae..ba611c0 100644
  
  static u8 am335x_iis_serializer_direction1[] = {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0006-tscadc-Add-general-purpose-mode-untested-with-touchs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0006-tscadc-Add-general-purpose-mode-untested-with-touchs.patch
index 3dbd5d1..d0f7194 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0006-tscadc-Add-general-purpose-mode-untested-with-touchs.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0006-tscadc-Add-general-purpose-mode-untested-with-touchs.patch
@@ -1,7 +1,7 @@
-From d15ac41429630a7065e409079370efc4cfcb3e65 Mon Sep 17 00:00:00 2001
+From d434e8f8c1fec1f10d2475a014ed26d4e5bc8579 Mon Sep 17 00:00:00 2001
 From: Joel A Fernandes <joelagnel@ti.com>
 Date: Wed, 30 Nov 2011 15:00:40 +0100
-Subject: [PATCH 06/56] tscadc: Add general purpose mode, untested with
+Subject: [PATCH 06/79] tscadc: Add general purpose mode, untested with
  touchscreen functionality
 
 Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
@@ -402,5 +402,5 @@ index 2c547bb..850cd4b 100644
 +	int mode;
  };
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0007-tscadc-Add-board-file-mfd-support-fix-warning.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0007-tscadc-Add-board-file-mfd-support-fix-warning.patch
index 6852fc6..787d426 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0007-tscadc-Add-board-file-mfd-support-fix-warning.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0007-tscadc-Add-board-file-mfd-support-fix-warning.patch
@@ -1,7 +1,7 @@
-From 5275f0cc4c9f541711ab49e7e179a153fb61cda5 Mon Sep 17 00:00:00 2001
+From dc7ef10b1e755f188cfc92f4e1d8a43c8e661392 Mon Sep 17 00:00:00 2001
 From: Joel A Fernandes <joelagnel@ti.com>
 Date: Wed, 30 Nov 2011 15:02:17 +0100
-Subject: [PATCH 07/56] tscadc: Add board file mfd support, fix warning
+Subject: [PATCH 07/79] tscadc: Add board file mfd support, fix warning
 
 Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
 
@@ -40,5 +40,5 @@ index c6dc6f0..b50a08c 100644
  	int				clk_value;
  	int				clock_rate, irqenable, ctrl;
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0008-AM335X-init-tsc-bone-style-for-new-boards.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0008-AM335X-init-tsc-bone-style-for-new-boards.patch
index fe1db5c..9434c57 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0008-AM335X-init-tsc-bone-style-for-new-boards.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0008-AM335X-init-tsc-bone-style-for-new-boards.patch
@@ -1,12 +1,12 @@
-From e9aa7ff6f36d532d2268cd3b91555cbeb72fda4f Mon Sep 17 00:00:00 2001
+From b67913c3de1b8789c9d1881391b9bfb0beaa00ee Mon Sep 17 00:00:00 2001
 From: Joel A Fernandes <joelagnel@ti.com>
 Date: Wed, 30 Nov 2011 15:03:59 +0100
-Subject: [PATCH 08/56] AM335X: init tsc bone style for new boards
+Subject: [PATCH 08/79] AM335X: init tsc bone style for new boards
 
 Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 64a0c0a..6b78ae6 100644
@@ -22,5 +22,5 @@ index 64a0c0a..6b78ae6 100644
  };
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0009-tscadc-make-stepconfig-channel-configurable.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0009-tscadc-make-stepconfig-channel-configurable.patch
index 8d73637..5f43ac4 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0009-tscadc-make-stepconfig-channel-configurable.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0009-tscadc-make-stepconfig-channel-configurable.patch
@@ -1,12 +1,12 @@
-From 7042bb10731908812bc3b248b963899898773c4b Mon Sep 17 00:00:00 2001
+From 3b70f6dd0dd6f6c1fbd71b7090a3340382b3c77e Mon Sep 17 00:00:00 2001
 From: Joel A Fernandes <joelagnel@ti.com>
 Date: Mon, 28 Nov 2011 18:18:04 -0600
-Subject: [PATCH 09/56] tscadc: make stepconfig channel-configurable
+Subject: [PATCH 09/79] tscadc: make stepconfig channel-configurable
 
 Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
 ---
  drivers/input/touchscreen/ti_tscadc.c |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
+ 1 file changed, 5 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/input/touchscreen/ti_tscadc.c b/drivers/input/touchscreen/ti_tscadc.c
 index b50a08c..6083de7 100644
@@ -42,5 +42,5 @@ index b50a08c..6083de7 100644
  		irqenable = TSCADC_IRQENB_FIFO0THRES;
  	}
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0010-tscadc-Trigger-through-sysfs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0010-tscadc-Trigger-through-sysfs.patch
index 27052fc..6afca79 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0010-tscadc-Trigger-through-sysfs.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0010-tscadc-Trigger-through-sysfs.patch
@@ -1,7 +1,7 @@
-From 23f1ea4e1324704d36381cf1a2b6d4578c5f3fb4 Mon Sep 17 00:00:00 2001
+From 19415df67c6e3802c007832e356933d33435558b Mon Sep 17 00:00:00 2001
 From: Joel A Fernandes <joelagnel@ti.com>
 Date: Mon, 28 Nov 2011 20:55:25 -0600
-Subject: [PATCH 10/56] tscadc: Trigger through sysfs
+Subject: [PATCH 10/79] tscadc: Trigger through sysfs
 
 Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
 
@@ -145,5 +145,5 @@ index 850cd4b..fc239c6 100644
  #define TI_TSCADC_TSCMODE 0
  #define TI_TSCADC_GENMODE 1
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0011-meta-ti-Remove-debug-messages-for-meta-ti.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0011-meta-ti-Remove-debug-messages-for-meta-ti.patch
index d6d6a8f..1bd64b4 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0011-meta-ti-Remove-debug-messages-for-meta-ti.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0011-meta-ti-Remove-debug-messages-for-meta-ti.patch
@@ -1,12 +1,12 @@
-From 44e604188006ae23fb48fe27b68b20cc9e3b20cb Mon Sep 17 00:00:00 2001
+From 956815a5ce5d2708ad3f14bdd0c6aaee056febbb Mon Sep 17 00:00:00 2001
 From: Joel A Fernandes <joelagnel@ti.com>
 Date: Mon, 28 Nov 2011 20:56:48 -0600
-Subject: [PATCH 11/56] meta-ti: Remove debug messages for meta-ti
+Subject: [PATCH 11/79] meta-ti: Remove debug messages for meta-ti
 
 Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
 ---
  drivers/input/touchscreen/ti_tscadc.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/input/touchscreen/ti_tscadc.c b/drivers/input/touchscreen/ti_tscadc.c
 index d6aec8c..da48bcd 100644
@@ -30,5 +30,5 @@ index d6aec8c..da48bcd 100644
  		for (i = 0; i < fifo1count; i++) {
  			read_sample = tscadc_readl(ts_dev, TSCADC_REG_FIFO0);
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0012-tscadc-switch-to-polling-instead-of-interrupts.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0012-tscadc-switch-to-polling-instead-of-interrupts.patch
index 86ef82e..d9fd2a7 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0012-tscadc-switch-to-polling-instead-of-interrupts.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0012-tscadc-switch-to-polling-instead-of-interrupts.patch
@@ -1,12 +1,12 @@
-From 04b4ae6caf9912acb99b294ab946ca88146ec6a9 Mon Sep 17 00:00:00 2001
+From 393a7b11a2819b5149c909a801b1f8be4d781771 Mon Sep 17 00:00:00 2001
 From: Joel A Fernandes <joelagnel@ti.com>
 Date: Tue, 29 Nov 2011 09:44:22 -0600
-Subject: [PATCH 12/56] tscadc: switch to polling instead of interrupts
+Subject: [PATCH 12/79] tscadc: switch to polling instead of interrupts
 
 Signed-off-by: Joel A Fernandes <joelagnel@ti.com>
 ---
  drivers/input/touchscreen/ti_tscadc.c |   16 ++++++++++++++--
- 1 files changed, 14 insertions(+), 2 deletions(-)
+ 1 file changed, 14 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/input/touchscreen/ti_tscadc.c b/drivers/input/touchscreen/ti_tscadc.c
 index da48bcd..4fd2e18 100644
@@ -50,5 +50,5 @@ index da48bcd..4fd2e18 100644
  	tscadc_writel(ts_dev, TSCADC_REG_IRQENABLE, irqenable);
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0013-beaglebone-fix-ADC-init.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0013-beaglebone-fix-ADC-init.patch
index b15e894..3db4f7d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0013-beaglebone-fix-ADC-init.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0013-beaglebone-fix-ADC-init.patch
@@ -1,12 +1,12 @@
-From 14830f07a752e8c2d643a307ebb5e268008d9c04 Mon Sep 17 00:00:00 2001
+From 33bbdc8dfb22170f7be9286c653fbac9d9c8f196 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 31 Jan 2012 14:50:55 +0100
-Subject: [PATCH 13/56] beaglebone: fix ADC init
+Subject: [PATCH 13/79] beaglebone: fix ADC init
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
+ 1 file changed, 2 insertions(+), 4 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 6b78ae6..ffbecae 100644
@@ -43,5 +43,5 @@ index 6b78ae6..ffbecae 100644
  };
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0014-AM335x-MUX-add-ehrpwm1A.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0014-AM335x-MUX-add-ehrpwm1A.patch
index 3fec092..489c64e 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0014-AM335x-MUX-add-ehrpwm1A.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0014-AM335x-MUX-add-ehrpwm1A.patch
@@ -1,12 +1,12 @@
-From ae3da1ea2d7c8b915e8eebec7d5f3524f53bf510 Mon Sep 17 00:00:00 2001
+From 10099d6354fc3c61306788e4070cfbd20722fb80 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 31 Jan 2012 16:49:52 +0100
-Subject: [PATCH 14/56] AM335x: MUX: add ehrpwm1A
+Subject: [PATCH 14/79] AM335x: MUX: add ehrpwm1A
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/mux33xx.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/mux33xx.c b/arch/arm/mach-omap2/mux33xx.c
 index 572ed16..0f71646 100644
@@ -22,5 +22,5 @@ index 572ed16..0f71646 100644
  		"gpmc_a3", "mii2_txd2", "rgmii2_td2", "mmc2_dat2",
  		NULL, NULL, NULL, "gpio1_19"),
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0015-beaglebone-enable-PWM-for-lcd-backlight-backlight-is.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0015-beaglebone-enable-PWM-for-lcd-backlight-backlight-is.patch
index e20d320..0d645ff 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0015-beaglebone-enable-PWM-for-lcd-backlight-backlight-is.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0015-beaglebone-enable-PWM-for-lcd-backlight-backlight-is.patch
@@ -1,13 +1,13 @@
-From 8930849074cc11163a2f176927d4e76072d4fb80 Mon Sep 17 00:00:00 2001
+From 33182602bad8a5aec644e69d800f5bc5c6604419 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 31 Jan 2012 17:02:10 +0100
-Subject: [PATCH 15/56] beaglebone: enable PWM for lcd backlight <- backlight
+Subject: [PATCH 15/79] beaglebone: enable PWM for lcd backlight <- backlight
  is inverted
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   51 +++++++++++++++++++++++++++------
- 1 files changed, 42 insertions(+), 9 deletions(-)
+ 1 file changed, 42 insertions(+), 9 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index ffbecae..43a83ca 100644
@@ -119,5 +119,5 @@ index ffbecae..43a83ca 100644
  	}
  	
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0016-omap_hsmmc-Set-dto-to-max-value-of-14-to-avoid-SD-Ca.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0016-omap_hsmmc-Set-dto-to-max-value-of-14-to-avoid-SD-Ca.patch
index 0ef109c..120f59f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0016-omap_hsmmc-Set-dto-to-max-value-of-14-to-avoid-SD-Ca.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0016-omap_hsmmc-Set-dto-to-max-value-of-14-to-avoid-SD-Ca.patch
@@ -1,7 +1,7 @@
-From e099fdb60eae41faea813fd1098af28b38f050d1 Mon Sep 17 00:00:00 2001
+From ec0ef23dd64de808f7e9d827ee82ac4734d8a003 Mon Sep 17 00:00:00 2001
 From: Steve Sakoman <steve@sakoman.com>
 Date: Mon, 18 Jul 2011 23:13:41 -0500
-Subject: [PATCH 16/56] omap_hsmmc: Set dto to max value of 14 to avoid SD
+Subject: [PATCH 16/79] omap_hsmmc: Set dto to max value of 14 to avoid SD
  Card timeouts
 
 This fixes MMC errors due to timeouts on certain SD Cards following suggestions
@@ -13,13 +13,13 @@ http://talk.maemo.org/showthread.php?p=1000707#post1000707
 This fix was originally proposed by Sukumar Ghoral of TI.
 ---
  drivers/mmc/host/omap_hsmmc.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
+ 1 file changed, 3 insertions(+)
 
 diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
-index 1f938d9..ace26f7 100644
+index 22da8f2..adbc4d1 100644
 --- a/drivers/mmc/host/omap_hsmmc.c
 +++ b/drivers/mmc/host/omap_hsmmc.c
-@@ -1542,6 +1542,9 @@ static void set_data_timeout(struct omap_hsmmc_host *host)
+@@ -1554,6 +1554,9 @@ static void set_data_timeout(struct omap_hsmmc_host *host)
  	/* Use the maximum timeout value allowed in the standard of 14 or 0xE */
  	dto = 14;
  
@@ -30,5 +30,5 @@ index 1f938d9..ace26f7 100644
  	reg |= dto << DTO_SHIFT;
  	OMAP_HSMMC_WRITE(host->base, SYSCTL, reg);
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0017-beaglebone-set-default-brightness-to-50-for-pwm-back.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0017-beaglebone-set-default-brightness-to-50-for-pwm-back.patch
index 3ad8b52..ed19d76 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0017-beaglebone-set-default-brightness-to-50-for-pwm-back.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0017-beaglebone-set-default-brightness-to-50-for-pwm-back.patch
@@ -1,13 +1,13 @@
-From 8de8f4d2da1d92847f27babbf3a91ca960afdbc9 Mon Sep 17 00:00:00 2001
+From 5ef54fcdbb6f2cee36b88ed04ea7c3d604702659 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Wed, 1 Feb 2012 14:10:38 +0100
-Subject: [PATCH 17/56] beaglebone: set default brightness to 50% for pwm
+Subject: [PATCH 17/79] beaglebone: set default brightness to 50% for pwm
  backlights
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 43a83ca..97b069f 100644
@@ -23,5 +23,5 @@ index 43a83ca..97b069f 100644
  
  #define PWM_DEVICE_ID   "ecap.0"
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0018-st7735fb-WIP-framebuffer-driver-supporting-Adafruit-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0018-st7735fb-WIP-framebuffer-driver-supporting-Adafruit-.patch
index d6a06f1..de1854b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0018-st7735fb-WIP-framebuffer-driver-supporting-Adafruit-.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0018-st7735fb-WIP-framebuffer-driver-supporting-Adafruit-.patch
@@ -1,7 +1,7 @@
-From 4d3af135dec5fcd7119e62c17d5db6d678ad68d5 Mon Sep 17 00:00:00 2001
+From b54647b2f6825845e678995cf9a9824f763b6eb1 Mon Sep 17 00:00:00 2001
 From: Matt Porter <mporter@ti.com>
 Date: Mon, 21 Nov 2011 12:55:23 -0500
-Subject: [PATCH 18/56] st7735fb: WIP framebuffer driver supporting Adafruit
+Subject: [PATCH 18/79] st7735fb: WIP framebuffer driver supporting Adafruit
  1.8" SPI LCD
 
 Signed-off-by: Matt Porter <mporter@ti.com>
@@ -11,7 +11,7 @@ Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
  drivers/video/Makefile   |    1 +
  drivers/video/st7735fb.c |  516 ++++++++++++++++++++++++++++++++++++++++++++++
  include/video/st7735fb.h |   86 ++++++++
- 4 files changed, 614 insertions(+), 0 deletions(-)
+ 4 files changed, 614 insertions(+)
  create mode 100644 drivers/video/st7735fb.c
  create mode 100644 include/video/st7735fb.h
 
@@ -664,5 +664,5 @@ index 0000000..250f036
 +
 +
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0019-beaglebone-use-P8_6-gpio1_3-as-w1-bus.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0019-beaglebone-use-P8_6-gpio1_3-as-w1-bus.patch
index 96390aa..6751e96 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0019-beaglebone-use-P8_6-gpio1_3-as-w1-bus.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0019-beaglebone-use-P8_6-gpio1_3-as-w1-bus.patch
@@ -1,12 +1,12 @@
-From 6a862f51ac8eca5e4e00acdc13a73db521eb74fa Mon Sep 17 00:00:00 2001
+From 1fcc4aabf4fa4ffe4ebfbfe4adbce3913389a0a0 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 7 Feb 2012 11:01:13 +0100
-Subject: [PATCH 19/56] beaglebone: use P8_6 (gpio1_3) as w1 bus
+Subject: [PATCH 19/79] beaglebone: use P8_6 (gpio1_3) as w1 bus
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   31 +++++++++++++++++++++++++++++++
- 1 files changed, 31 insertions(+), 0 deletions(-)
+ 1 file changed, 31 insertions(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 97b069f..3ba4bbc 100644
@@ -79,5 +79,5 @@ index 97b069f..3ba4bbc 100644
  };
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0020-beaglebone-add-support-for-Towertech-TT3201-CAN-cape.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0020-beaglebone-add-support-for-Towertech-TT3201-CAN-cape.patch
index 80e2b1e..1a63942 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0020-beaglebone-add-support-for-Towertech-TT3201-CAN-cape.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0020-beaglebone-add-support-for-Towertech-TT3201-CAN-cape.patch
@@ -1,13 +1,13 @@
-From fc2a970788a0181b495f79a78b35e6bdd6987aa8 Mon Sep 17 00:00:00 2001
+From c57ec6cbf0fc195c3253b9db23dab08554377cd5 Mon Sep 17 00:00:00 2001
 From: Alessandro Zummo <a.zummo@towertech.it>
 Date: Thu, 9 Feb 2012 12:46:52 +0100
-Subject: [PATCH 20/56] beaglebone: add support for Towertech TT3201 CAN cape
+Subject: [PATCH 20/79] beaglebone: add support for Towertech TT3201 CAN cape
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   54 ++++++++++++++++++++++++++++++++-
- arch/arm/mach-omap2/mux33xx.c         |    8 ++--
- drivers/net/can/dev.c                 |    8 ++--
+ arch/arm/mach-omap2/mux33xx.c         |    8 ++---
+ drivers/net/can/dev.c                 |    8 ++---
  drivers/net/can/mcp251x.c             |   47 ++++++++++++++++++++++------
  4 files changed, 98 insertions(+), 19 deletions(-)
 
@@ -316,5 +316,5 @@ index 330140e..b3e231c 100644
  	}
  error_probe:
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0021-beaglebone-add-more-beagleboardtoys-cape-partnumbers.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0021-beaglebone-add-more-beagleboardtoys-cape-partnumbers.patch
index b242789..607d3c8 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0021-beaglebone-add-more-beagleboardtoys-cape-partnumbers.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0021-beaglebone-add-more-beagleboardtoys-cape-partnumbers.patch
@@ -1,12 +1,12 @@
-From b7bcc2d2d68f0683ee25027fa33afd43357912cb Mon Sep 17 00:00:00 2001
+From 3d11cccc72d7ec50c8da319e45cafb4f02431211 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 19 Mar 2012 12:01:35 +0100
-Subject: [PATCH 21/56] beaglebone: add more beagleboardtoys cape partnumbers
+Subject: [PATCH 21/79] beaglebone: add more beagleboardtoys cape partnumbers
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   25 ++++++++++++++++++++++++-
- 1 files changed, 24 insertions(+), 1 deletions(-)
+ 1 file changed, 24 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index a8dfcdf..f854329 100644
@@ -49,5 +49,5 @@ index a8dfcdf..f854329 100644
  		pr_info("BeagleBone cape: exporting ADC pins to sysfs\n");
  		bone_tsc_init(0,0);
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0022-beaglebone-add-gpio-keys-for-lcd7-add-notes-for-miss.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0022-beaglebone-add-gpio-keys-for-lcd7-add-notes-for-miss.patch
index e29a568..4eaefff 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0022-beaglebone-add-gpio-keys-for-lcd7-add-notes-for-miss.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0022-beaglebone-add-gpio-keys-for-lcd7-add-notes-for-miss.patch
@@ -1,13 +1,13 @@
-From 7d829ebc289c6e311171cb3974e428ed2562c0ad Mon Sep 17 00:00:00 2001
+From bc8957c4a563945781b0e3c41f5a8068d88122f9 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 19 Mar 2012 13:32:43 +0100
-Subject: [PATCH 22/56] beaglebone: add gpio-keys for lcd7, add notes for
+Subject: [PATCH 22/79] beaglebone: add gpio-keys for lcd7, add notes for
  missing functionality for other capes
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   79 +++++++++++++++++++++++++++++++++
- 1 files changed, 79 insertions(+), 0 deletions(-)
+ 1 file changed, 79 insertions(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index f854329..9e9cf5b 100644
@@ -126,5 +126,5 @@ index f854329..9e9cf5b 100644
  	}
  	
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0023-beaglebone-add-enter-key-for-lcd7-cape.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0023-beaglebone-add-enter-key-for-lcd7-cape.patch
index 4b8faef..25a73d4 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0023-beaglebone-add-enter-key-for-lcd7-cape.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0023-beaglebone-add-enter-key-for-lcd7-cape.patch
@@ -1,12 +1,12 @@
-From d7eecab57e0c72ef16663b45d2e1498368cfe9fe Mon Sep 17 00:00:00 2001
+From 1fb7daa57c2079ec42cff0d26336e430fad7946f Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 19 Mar 2012 14:26:37 +0100
-Subject: [PATCH 23/56] beaglebone: add enter key for lcd7 cape
+Subject: [PATCH 23/79] beaglebone: add enter key for lcd7 cape
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
+ 1 file changed, 9 insertions(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 9e9cf5b..8c78eb5 100644
@@ -36,5 +36,5 @@ index 9e9cf5b..8c78eb5 100644
  
  static struct gpio_keys_platform_data beaglebone_lcd7_gpio_key_info = {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0024-beaglebone-add-gpio-keys-for-lcd.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0024-beaglebone-add-gpio-keys-for-lcd.patch
index 3fb1d9d..49ef146 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0024-beaglebone-add-gpio-keys-for-lcd.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0024-beaglebone-add-gpio-keys-for-lcd.patch
@@ -1,12 +1,12 @@
-From 15f9d6c3d2ea7b9c932b311e7b615735bb940f01 Mon Sep 17 00:00:00 2001
+From 5bc55512fb72b331c09769036da6b754430fd399 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 19 Mar 2012 15:15:06 +0100
-Subject: [PATCH 24/56] beaglebone: add gpio-keys for lcd
+Subject: [PATCH 24/79] beaglebone: add gpio-keys for lcd
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   82 +++++++++++++++++++++++++++++++--
- 1 files changed, 78 insertions(+), 4 deletions(-)
+ 1 file changed, 78 insertions(+), 4 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 8c78eb5..5266f78 100644
@@ -109,5 +109,5 @@ index 8c78eb5..5266f78 100644
  	
  	if (!strncmp("BB-BONE-VGA-01", cape_config.partnumber, 15)) {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0025-beaglebone-fix-direction-of-gpio-keys.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0025-beaglebone-fix-direction-of-gpio-keys.patch
index 39f255b..e0d5c0c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0025-beaglebone-fix-direction-of-gpio-keys.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0025-beaglebone-fix-direction-of-gpio-keys.patch
@@ -1,12 +1,12 @@
-From 9ae51575e2d99c806ee5caabb4a11a380e5e9b7b Mon Sep 17 00:00:00 2001
+From a9f029372abbaef2e9f55e2be728ae8bbc54bdaa Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 26 Mar 2012 20:28:56 +0200
-Subject: [PATCH 25/56] beaglebone: fix direction of gpio-keys
+Subject: [PATCH 25/79] beaglebone: fix direction of gpio-keys
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   20 ++++++++++----------
- 1 files changed, 10 insertions(+), 10 deletions(-)
+ 1 file changed, 10 insertions(+), 10 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 5266f78..36b0c85 100644
@@ -103,5 +103,5 @@ index 5266f78..36b0c85 100644
  		.type                   = EV_KEY,
  		.wakeup                 = 1,
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0026-beaglebone-fix-3.5-lcd-cape-support.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0026-beaglebone-fix-3.5-lcd-cape-support.patch
index 879920d..bb2f002 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0026-beaglebone-fix-3.5-lcd-cape-support.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0026-beaglebone-fix-3.5-lcd-cape-support.patch
@@ -1,7 +1,7 @@
-From 1979148439115875ee92c370e369a28ba3b5f37c Mon Sep 17 00:00:00 2001
+From 6f82ce8b4cd239aa7b262e0a0b62d42545b9d21b Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Wed, 29 Feb 2012 17:25:22 +0100
-Subject: [PATCH 26/56] beaglebone: fix 3.5" lcd cape support
+Subject: [PATCH 26/79] beaglebone: fix 3.5" lcd cape support
 
 * proper timings
 * fix gpio conflict
@@ -10,7 +10,7 @@ Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   42 ++++++++++++++++++++++++++++++++-
  drivers/video/da8xx-fb.c              |   14 +++++++++++
- 2 files changed, 55 insertions(+), 1 deletions(-)
+ 2 files changed, 55 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 36b0c85..127516f 100644
@@ -105,5 +105,5 @@ index b01f15b..86b19ac 100644
  
  /* Enable the Raster Engine of the LCD Controller */
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0027-beaglebone-decrease-PWM-frequency-to-old-value-LCD7-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0027-beaglebone-decrease-PWM-frequency-to-old-value-LCD7-.patch
index 414a958..05439e6 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0027-beaglebone-decrease-PWM-frequency-to-old-value-LCD7-.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0027-beaglebone-decrease-PWM-frequency-to-old-value-LCD7-.patch
@@ -1,13 +1,13 @@
-From 07553571e947d49d906d5f12fd0cb4eac6a8c4e5 Mon Sep 17 00:00:00 2001
+From b199c282abaee2188141c0885198466e8028f181 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 17 Apr 2012 11:25:00 +0200
-Subject: [PATCH 27/56] beaglebone: decrease PWM frequency to old value, LCD7
+Subject: [PATCH 27/79] beaglebone: decrease PWM frequency to old value, LCD7
  doesn't like it
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 127516f..4d5238d 100644
@@ -23,5 +23,5 @@ index 127516f..4d5238d 100644
  #define PWM_DEVICE_ID   "ecap.0"
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0028-beaglebone-fix-ehrpwm-backlight.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0028-beaglebone-fix-ehrpwm-backlight.patch
index 42e945f..066d499 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0028-beaglebone-fix-ehrpwm-backlight.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0028-beaglebone-fix-ehrpwm-backlight.patch
@@ -1,12 +1,12 @@
-From 1ca68f8e87f5825a54c41f5d1fbf90fc2c09496c Mon Sep 17 00:00:00 2001
+From 4456663edfc37d478da19c13683b9e58833ca997 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 17 Apr 2012 12:35:01 +0200
-Subject: [PATCH 28/56] beaglebone: fix ehrpwm backlight
+Subject: [PATCH 28/79] beaglebone: fix ehrpwm backlight
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ 1 file changed, 1 insertion(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 4d5238d..24ed0b6 100644
@@ -21,5 +21,5 @@ index 4d5238d..24ed0b6 100644
  
  /* Setup pwm-backlight for bbtoys7lcd */
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0029-beaglebone-also-report-cape-revision.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0029-beaglebone-also-report-cape-revision.patch
index 6dc4a4b..03676a6 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0029-beaglebone-also-report-cape-revision.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0029-beaglebone-also-report-cape-revision.patch
@@ -1,12 +1,12 @@
-From 247ab0d5d63145121e94afaee1b221545d37eb20 Mon Sep 17 00:00:00 2001
+From d79d7b027fa6f411a64d65d56d0421cde619f43c Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 17 Apr 2012 12:57:38 +0200
-Subject: [PATCH 29/56] beaglebone: also report cape revision
+Subject: [PATCH 29/79] beaglebone: also report cape revision
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
+ 1 file changed, 3 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 24ed0b6..a4e113c 100644
@@ -32,5 +32,5 @@ index 24ed0b6..a4e113c 100644
  	pr_info("BeagleBone cape partnumber: %s\n", tmp);   
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0030-beaglebone-don-t-compare-undefined-characters-it-mak.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0030-beaglebone-don-t-compare-undefined-characters-it-mak.patch
index 7af3073..a4409d1 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0030-beaglebone-don-t-compare-undefined-characters-it-mak.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0030-beaglebone-don-t-compare-undefined-characters-it-mak.patch
@@ -1,13 +1,13 @@
-From e33f195b5e929944ce6934c38a135821f8206a1a Mon Sep 17 00:00:00 2001
+From bb7bebd5eb51467ff920773cc8dd321102b8d528 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Thu, 19 Apr 2012 07:55:55 +0200
-Subject: [PATCH 30/56] beaglebone: don't compare undefined characters, it
+Subject: [PATCH 30/79] beaglebone: don't compare undefined characters, it
  makes strncomp fail
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index a4e113c..f2f03b6 100644
@@ -23,5 +23,5 @@ index a4e113c..f2f03b6 100644
  		dvi_init(0,0);
  	}
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0031-beaglebone-fix-3.5-cape-support.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0031-beaglebone-fix-3.5-cape-support.patch
index f7e47de..4a91e71 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0031-beaglebone-fix-3.5-cape-support.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0031-beaglebone-fix-3.5-cape-support.patch
@@ -1,12 +1,12 @@
-From 138b017b71191f87a5f00f94995f144e432b8d9f Mon Sep 17 00:00:00 2001
+From 46f31bc6d2e3c44f0591216db3151408a0d97133 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Thu, 19 Apr 2012 14:33:53 +0200
-Subject: [PATCH 31/56] beaglebone: fix 3.5" cape support
+Subject: [PATCH 31/79] beaglebone: fix 3.5" cape support
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   42 ++++++++++++++++++++++++++++++++-
- 1 files changed, 41 insertions(+), 1 deletions(-)
+ 1 file changed, 41 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index f2f03b6..3adc4ac 100644
@@ -69,5 +69,5 @@ index f2f03b6..3adc4ac 100644
  	// we are being stupid and setting pixclock from here instead of da8xx-fb.c
  	if (conf_disp_pll(16000000)) {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0032-beaglebone-connect-batterycape-GPIO-to-gpio-charger.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0032-beaglebone-connect-batterycape-GPIO-to-gpio-charger.patch
index 7f922d8..6fe7c89 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0032-beaglebone-connect-batterycape-GPIO-to-gpio-charger.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0032-beaglebone-connect-batterycape-GPIO-to-gpio-charger.patch
@@ -1,12 +1,12 @@
-From dbae54fe993315205d8415ef78e83f149c829a9b Mon Sep 17 00:00:00 2001
+From d8f8e88b0ea9cf4e94a601d5ee2601ee8f1b6d52 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Wed, 25 Apr 2012 12:35:07 +0200
-Subject: [PATCH 32/56] beaglebone: connect batterycape GPIO to gpio-charger
+Subject: [PATCH 32/79] beaglebone: connect batterycape GPIO to gpio-charger
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   46 ++++++++++++++++++++++++++++++++-
- 1 files changed, 45 insertions(+), 1 deletions(-)
+ 1 file changed, 45 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 3adc4ac..717bb8c 100644
@@ -80,5 +80,5 @@ index 3adc4ac..717bb8c 100644
  	
  	if (!strncmp("BB-BONE-SERL", cape_config.partnumber, 12)) {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0033-beaglebone-add-support-for-CAN-and-RS232-cape.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0033-beaglebone-add-support-for-CAN-and-RS232-cape.patch
index 6d8b646..a4eaf50 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0033-beaglebone-add-support-for-CAN-and-RS232-cape.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0033-beaglebone-add-support-for-CAN-and-RS232-cape.patch
@@ -1,12 +1,12 @@
-From 2345361d8188eb3a946f2a0ab9e648eba2cc9c27 Mon Sep 17 00:00:00 2001
+From f9b6989bb732e354c174da80052abbba49f238dd Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Fri, 4 May 2012 13:19:45 +0200
-Subject: [PATCH 33/56] beaglebone: add support for CAN and RS232 cape
+Subject: [PATCH 33/79] beaglebone: add support for CAN and RS232 cape
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
- arch/arm/mach-omap2/board-am335xevm.c |   36 +++++++++++++++++++++++++++-----
- 1 files changed, 30 insertions(+), 6 deletions(-)
+ arch/arm/mach-omap2/board-am335xevm.c |   36 +++++++++++++++++++++++++++------
+ 1 file changed, 30 insertions(+), 6 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 717bb8c..6e7b203 100644
@@ -63,5 +63,5 @@ index 717bb8c..6e7b203 100644
  	}
  	
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0034-beaglebone-add-support-for-DVI-rev.-A2-capes.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0034-beaglebone-add-support-for-DVI-rev.-A2-capes.patch
index 14e7cd6..6eceb51 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0034-beaglebone-add-support-for-DVI-rev.-A2-capes.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0034-beaglebone-add-support-for-DVI-rev.-A2-capes.patch
@@ -1,12 +1,12 @@
-From 64918c14ce7c12660cdf3b7650d6992a4eb7a69e Mon Sep 17 00:00:00 2001
+From 79504e3e113ac68335eb899322a56f3a72462b08 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Thu, 19 Apr 2012 14:23:06 +0200
-Subject: [PATCH 34/56] beaglebone: add support for DVI rev. A2 capes
+Subject: [PATCH 34/79] beaglebone: add support for DVI rev. A2 capes
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |  150 ++++++++-------------------------
- 1 files changed, 35 insertions(+), 115 deletions(-)
+ 1 file changed, 35 insertions(+), 115 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 6e7b203..e02c0b6 100644
@@ -238,5 +238,5 @@ index 6e7b203..e02c0b6 100644
  	if (!strncmp("BB-BONE-LCD7-01", cape_config.partnumber, 15)) {
  		pr_info("BeagleBone cape: initializing LCD cape\n");
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0035-beaglebone-enable-LEDs-for-DVI-LCD3-and-LCD7-capes.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0035-beaglebone-enable-LEDs-for-DVI-LCD3-and-LCD7-capes.patch
index 3d05376..622d76b 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0035-beaglebone-enable-LEDs-for-DVI-LCD3-and-LCD7-capes.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0035-beaglebone-enable-LEDs-for-DVI-LCD3-and-LCD7-capes.patch
@@ -1,12 +1,12 @@
-From 11a78ddde39b0ae90c718b724426e01b6af3f8e1 Mon Sep 17 00:00:00 2001
+From d54dc11ed06da5b83c2c99b404483eefd13d2074 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Fri, 11 May 2012 13:08:24 +0200
-Subject: [PATCH 35/56] beaglebone: enable LEDs for DVI, LCD3 and LCD7 capes
+Subject: [PATCH 35/79] beaglebone: enable LEDs for DVI, LCD3 and LCD7 capes
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
- arch/arm/mach-omap2/board-am335xevm.c |  140 ++++++++++++++++++++++++++++++--
- 1 files changed, 131 insertions(+), 9 deletions(-)
+ arch/arm/mach-omap2/board-am335xevm.c |  140 ++++++++++++++++++++++++++++++---
+ 1 file changed, 131 insertions(+), 9 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index e02c0b6..8db33b9 100644
@@ -236,5 +236,5 @@ index e02c0b6..8db33b9 100644
  	{NULL, 0, 0},
  };
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0036-Beaglebone-Fixed-compiletime-warnings.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0036-Beaglebone-Fixed-compiletime-warnings.patch
index c576682..e4bc851 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0036-Beaglebone-Fixed-compiletime-warnings.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0036-Beaglebone-Fixed-compiletime-warnings.patch
@@ -1,12 +1,12 @@
-From b038926e4aa0feeeb20bbcf5bb24765ae40162f5 Mon Sep 17 00:00:00 2001
+From 402cc5ad4f97373171cd7e1cfe17ad5165a8c42c Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Sun, 13 May 2012 18:06:24 +0200
-Subject: [PATCH 36/56] Beaglebone: Fixed compiletime warnings.
+Subject: [PATCH 36/79] Beaglebone: Fixed compiletime warnings.
 
 Signed-off-by: Bas Laarhoven <sjml@xs4all.nl>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 8db33b9..b48e0fd 100644
@@ -44,5 +44,5 @@ index 8db33b9..b48e0fd 100644
  	ret = mem_acc->read(mem_acc, (char *)&cape_config, 0, sizeof(cape_config));
  	if (ret != sizeof(cape_config)) {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0037-Beaglebone-Added-missing-termination-record-to-bone_.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0037-Beaglebone-Added-missing-termination-record-to-bone_.patch
index e40cd63..a042216 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0037-Beaglebone-Added-missing-termination-record-to-bone_.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0037-Beaglebone-Added-missing-termination-record-to-bone_.patch
@@ -1,13 +1,13 @@
-From 387e0633f95924f2e70dd48651720c6718e0ff2f Mon Sep 17 00:00:00 2001
+From ae194fe34a83ae3198010fe20b60308e03e46c61 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Sun, 13 May 2012 18:18:52 +0200
-Subject: [PATCH 37/56] Beaglebone: Added missing termination record to
+Subject: [PATCH 37/79] Beaglebone: Added missing termination record to
  bone_pin_mux data.
 
 Signed-off-by: Bas Laarhoven <sjml@xs4all.nl>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
+ 1 file changed, 1 insertion(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index b48e0fd..7dbeac6 100644
@@ -22,5 +22,5 @@ index b48e0fd..7dbeac6 100644
  
  /* Module pin mux for eCAP0 */
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0038-board-am335xevm.c-Beaglebone-expose-all-pwms-through.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0038-board-am335xevm.c-Beaglebone-expose-all-pwms-through.patch
index cf0730e..3615878 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0038-board-am335xevm.c-Beaglebone-expose-all-pwms-through.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0038-board-am335xevm.c-Beaglebone-expose-all-pwms-through.patch
@@ -1,12 +1,12 @@
-From adcb99ec934a692e4bdeb993901f5df89188a32c Mon Sep 17 00:00:00 2001
+From 3bfb8f832b4fb3685755ba893a464865ba1cb824 Mon Sep 17 00:00:00 2001
 From: Rob Kellett <r-kellett@ti.com>
 Date: Mon, 14 May 2012 09:35:35 +0100
-Subject: [PATCH 38/56] board-am335xevm.c: Beaglebone - expose all pwms
+Subject: [PATCH 38/79] board-am335xevm.c: Beaglebone - expose all pwms
  through sysfs
 
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   20 +++++++++++++++++++-
- 1 files changed, 19 insertions(+), 1 deletions(-)
+ 1 file changed, 19 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 7dbeac6..c9ee0a2 100644
@@ -54,5 +54,5 @@ index 7dbeac6..c9ee0a2 100644
  
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0039-ARM-OMAP-Mux-Fixed-debugfs-mux-output-always-reporti.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0039-ARM-OMAP-Mux-Fixed-debugfs-mux-output-always-reporti.patch
index d4240cf..4ba9cf8 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0039-ARM-OMAP-Mux-Fixed-debugfs-mux-output-always-reporti.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0039-ARM-OMAP-Mux-Fixed-debugfs-mux-output-always-reporti.patch
@@ -1,14 +1,14 @@
-From d38171c24019061250e120d554ad89199c58ad53 Mon Sep 17 00:00:00 2001
+From e8f558360cca470b15e95e0620aa0eb6e4cc7980 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Sun, 13 May 2012 18:09:57 +0200
-Subject: [PATCH 39/56] ARM: OMAP: Mux: Fixed debugfs mux output (always
+Subject: [PATCH 39/79] ARM: OMAP: Mux: Fixed debugfs mux output (always
  reporting pins as output)
 
 Signed-off-by: Bas Laarhoven <sjml@xs4all.nl>
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
- arch/arm/mach-omap2/mux.c |   62 +++++++++++++++++++++++++++-----------------
- 1 files changed, 38 insertions(+), 24 deletions(-)
+ arch/arm/mach-omap2/mux.c |   62 +++++++++++++++++++++++++++------------------
+ 1 file changed, 38 insertions(+), 24 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
 index e1cc75d..5899266 100644
@@ -95,5 +95,5 @@ index e1cc75d..5899266 100644
  
  	do {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0040-beaglebone-export-SPI2-as-spidev-when-no-capes-are-u.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0040-beaglebone-export-SPI2-as-spidev-when-no-capes-are-u.patch
index 3fe08e4..f44ac53 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0040-beaglebone-export-SPI2-as-spidev-when-no-capes-are-u.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0040-beaglebone-export-SPI2-as-spidev-when-no-capes-are-u.patch
@@ -1,13 +1,13 @@
-From b42299b9cd05cb162cd2364fa41e7307515b8a55 Mon Sep 17 00:00:00 2001
+From 0bbf782ac6c97d57990886959838a6f7ed296b3a Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 14 May 2012 14:23:45 +0200
-Subject: [PATCH 40/56] beaglebone: export SPI2 as spidev when no capes are
+Subject: [PATCH 40/79] beaglebone: export SPI2 as spidev when no capes are
  using SPI
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   25 +++++++++++++++++++++----
- 1 files changed, 21 insertions(+), 4 deletions(-)
+ 1 file changed, 21 insertions(+), 4 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index c9ee0a2..a0fa53a 100644
@@ -79,5 +79,5 @@ index c9ee0a2..a0fa53a 100644
  {
  	phydev->supported &= ~(SUPPORTED_100baseT_Half |
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0041-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0041-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch
index da872b1..ffbcb6f 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0041-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0041-st7735fb-Working-WIP-changes-to-make-DMA-safe-and-ad.patch
@@ -1,7 +1,7 @@
-From eef1e8089f452606aa32ee57b6a39783bd26e51f Mon Sep 17 00:00:00 2001
+From 7f97d002d17f8de8cde7f248bb1c194172360efe Mon Sep 17 00:00:00 2001
 From: Matt Porter <mporter@ti.com>
 Date: Wed, 28 Mar 2012 23:35:44 -0400
-Subject: [PATCH 41/56] st7735fb: Working WIP changes to make DMA safe and add
+Subject: [PATCH 41/79] st7735fb: Working WIP changes to make DMA safe and add
  endian fix
 
 This removes the "from the stack" allocation of 1 byte buffers
@@ -18,7 +18,7 @@ with the driver.
 Signed-off-by: Matt Porter <mporter@ti.com>
 ---
  drivers/video/st7735fb.c |   49 ++++++++++++++++++++++++++++++----------------
- include/video/st7735fb.h |    2 +
+ include/video/st7735fb.h |    2 ++
  2 files changed, 34 insertions(+), 17 deletions(-)
 
 diff --git a/drivers/video/st7735fb.c b/drivers/video/st7735fb.c
@@ -139,5 +139,5 @@ index 250f036..e99cd05 100644
  
  struct st7735fb_platform_data {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0042-omap-hwmod-silence-st_shift-error.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0042-omap-hwmod-silence-st_shift-error.patch
index d29624c..0f2477d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0042-omap-hwmod-silence-st_shift-error.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0042-omap-hwmod-silence-st_shift-error.patch
@@ -1,7 +1,7 @@
-From 60182b1efd893c0e8c4c6176d2ce0e766d702abb Mon Sep 17 00:00:00 2001
+From e2542efb1a4a61334eace382a2a4c6d5874cc078 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Wed, 16 May 2012 17:57:31 +0200
-Subject: [PATCH 42/56] omap hwmod: silence st_shift error
+Subject: [PATCH 42/79] omap hwmod: silence st_shift error
 
 During boot the following error is shown:
 
@@ -12,7 +12,7 @@ Since this PSP tree will never run on omap4 remove the print so people will stop
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/omap_hwmod.c |    3 ---
- 1 files changed, 0 insertions(+), 3 deletions(-)
+ 1 file changed, 3 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
 index bc14f9f..a050699 100644
@@ -29,5 +29,5 @@ index bc14f9f..a050699 100644
  				  oh->clkdm->pwrdm.ptr->prcm_partition,
  				  oh->clkdm->pwrdm.ptr->prcm_offs,
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-cpsw-phy_device-demote-PHY-message-to-INFO.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-cpsw-phy_device-demote-PHY-message-to-INFO.patch
index 09160ba..b9fb74d 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-cpsw-phy_device-demote-PHY-message-to-INFO.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0043-cpsw-phy_device-demote-PHY-message-to-INFO.patch
@@ -1,7 +1,7 @@
-From e846fa8a57d5f050fdb382e8d5599d9b0341a111 Mon Sep 17 00:00:00 2001
+From f37fa162020846da5950eba704e58e41889b9d3a Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Thu, 17 May 2012 10:59:18 +0200
-Subject: [PATCH 43/56] cpsw,phy_device: demote PHY message to INFO
+Subject: [PATCH 43/79] cpsw,phy_device: demote PHY message to INFO
 
 This keeps them from appearing on the screen when booting with 'quiet'
 
@@ -47,5 +47,5 @@ index 83a5a5a..8b84789 100644
  	}
  	phydev = to_phy_device(d);
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0044-beaglebone-add-support-for-7-LCD-cape-revision-A2.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0044-beaglebone-add-support-for-7-LCD-cape-revision-A2.patch
index c3697bc..749df75 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0044-beaglebone-add-support-for-7-LCD-cape-revision-A2.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0044-beaglebone-add-support-for-7-LCD-cape-revision-A2.patch
@@ -1,12 +1,12 @@
-From 994f87a816d1bd28483e34df8dfa68950eb70c72 Mon Sep 17 00:00:00 2001
+From ff466659529efbbc2d01f1461fe461dc0fdea135 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Fri, 18 May 2012 12:17:12 +0200
-Subject: [PATCH 44/56] beaglebone: add support for 7" LCD cape revision A2
+Subject: [PATCH 44/79] beaglebone: add support for 7" LCD cape revision A2
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   24 +++++++++++++++++++++---
- 1 files changed, 21 insertions(+), 3 deletions(-)
+ 1 file changed, 21 insertions(+), 3 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index a0fa53a..5bb71b1 100644
@@ -62,5 +62,5 @@ index a0fa53a..5bb71b1 100644
  		pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
  		tsc_init(0,0);
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0045-beaglebone-allow-capes-to-disable-w1-gpio.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0045-beaglebone-allow-capes-to-disable-w1-gpio.patch
index 7d12172..165a68a 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0045-beaglebone-allow-capes-to-disable-w1-gpio.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0045-beaglebone-allow-capes-to-disable-w1-gpio.patch
@@ -1,12 +1,12 @@
-From bddb03181fef4172d529717ff1c613a1770d737c Mon Sep 17 00:00:00 2001
+From 1b32708444a02b6e42cdd76272a2f09768a3474a Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Fri, 18 May 2012 12:39:25 +0200
-Subject: [PATCH 45/56] beaglebone: allow capes to disable w1-gpio
+Subject: [PATCH 45/79] beaglebone: allow capes to disable w1-gpio
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
+ 1 file changed, 5 insertions(+), 2 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 5bb71b1..5c89494 100644
@@ -48,5 +48,5 @@ index 5bb71b1..5c89494 100644
  };
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0046-beaglebone-add-stub-for-the-camera-cape-to-disable-w.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0046-beaglebone-add-stub-for-the-camera-cape-to-disable-w.patch
index 5726f2f..91d86a3 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0046-beaglebone-add-stub-for-the-camera-cape-to-disable-w.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0046-beaglebone-add-stub-for-the-camera-cape-to-disable-w.patch
@@ -1,13 +1,13 @@
-From d338dc3eff341be3e3c038e300e1636c1b667b0c Mon Sep 17 00:00:00 2001
+From b1a945344e6abd9bb9f33e9a8dadb8ac22ed2422 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Fri, 18 May 2012 12:58:16 +0200
-Subject: [PATCH 46/56] beaglebone: add stub for the camera cape to disable
+Subject: [PATCH 46/79] beaglebone: add stub for the camera cape to disable
  w1-gpio
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
+ 1 file changed, 5 insertions(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 5c89494..ece4e46 100644
@@ -26,5 +26,5 @@ index 5c89494..ece4e46 100644
  	if ((capecount > 3) && (beaglebone_tsadcpins_free == 1)) {
  		pr_info("BeagleBone cape: exporting ADC pins to sysfs\n");
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0047-Adding-many-of-the-missing-signals-to-the-mux-table.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0047-Adding-many-of-the-missing-signals-to-the-mux-table.patch
index f20aa6c..6a13c13 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0047-Adding-many-of-the-missing-signals-to-the-mux-table.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0047-Adding-many-of-the-missing-signals-to-the-mux-table.patch
@@ -1,12 +1,12 @@
-From 6d5deaa1b63e1b6fc5c72c98cf44bcc5bd919974 Mon Sep 17 00:00:00 2001
+From 023eed8b578f4b3ccc992ade8344277f9f9e08d6 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Sun, 13 May 2012 18:16:34 +0200
-Subject: [PATCH 47/56] Adding many of the missing signals to the mux table.
+Subject: [PATCH 47/79] Adding many of the missing signals to the mux table.
 
 Signed-off-by: Bas Laarhoven <sjml@xs4all.nl>
 ---
  arch/arm/mach-omap2/mux33xx.c |  197 +++++++++++++++++++++--------------------
- 1 files changed, 101 insertions(+), 96 deletions(-)
+ 1 file changed, 101 insertions(+), 96 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/mux33xx.c b/arch/arm/mach-omap2/mux33xx.c
 index 25dcedb..26ecd66 100644
@@ -306,5 +306,5 @@ index 25dcedb..26ecd66 100644
  		NULL, NULL, NULL, NULL),
  	{ .reg_offset = OMAP_MUX_TERMINATOR },
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0048-Fixed-reversed-part-of-LCD-bus.-Added-even-more-miss.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0048-Fixed-reversed-part-of-LCD-bus.-Added-even-more-miss.patch
index a82c17f..50f1dd3 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0048-Fixed-reversed-part-of-LCD-bus.-Added-even-more-miss.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0048-Fixed-reversed-part-of-LCD-bus.-Added-even-more-miss.patch
@@ -1,12 +1,12 @@
-From 122136b42459ab34853157fb5de1691e890f8f88 Mon Sep 17 00:00:00 2001
+From 3813937b8337eb49978dfe8e4b938f937b11db37 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Mon, 14 May 2012 18:26:12 +0200
-Subject: [PATCH 48/56] Fixed reversed part of LCD bus. Added even more
+Subject: [PATCH 48/79] Fixed reversed part of LCD bus. Added even more
  missing entries (TBC).
 
 ---
- arch/arm/mach-omap2/mux33xx.c |   56 ++++++++++++++++++++--------------------
- 1 files changed, 28 insertions(+), 28 deletions(-)
+ arch/arm/mach-omap2/mux33xx.c |   56 ++++++++++++++++++++---------------------
+ 1 file changed, 28 insertions(+), 28 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/mux33xx.c b/arch/arm/mach-omap2/mux33xx.c
 index 26ecd66..72ac899 100644
@@ -109,5 +109,5 @@ index 26ecd66..72ac899 100644
  		"lcd_data2", "gpmc_a2", "pr1_mii0_txd3", "ehrpwm2_tripzone_input",
  		NULL, "pr1_pru1_pru_r30_2", "pr1_pru1_pru_r31_2", "gpio2_8"),
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0049-ts_tscadc-add-defines-for-4x-and-16x-oversampling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0049-ts_tscadc-add-defines-for-4x-and-16x-oversampling.patch
index 96aae36..ad1ad73 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0049-ts_tscadc-add-defines-for-4x-and-16x-oversampling.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0049-ts_tscadc-add-defines-for-4x-and-16x-oversampling.patch
@@ -1,12 +1,12 @@
-From b0977ddac55066159dc227585cf6c682fbb8f1a4 Mon Sep 17 00:00:00 2001
+From e55b5da533e82e6f61c7ccd947623bce7a45ebf9 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Sat, 19 May 2012 11:29:14 +0200
-Subject: [PATCH 49/56] ts_tscadc: add defines for 4x and 16x oversampling
+Subject: [PATCH 49/79] ts_tscadc: add defines for 4x and 16x oversampling
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  drivers/input/touchscreen/ti_tscadc.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
+ 1 file changed, 2 insertions(+)
 
 diff --git a/drivers/input/touchscreen/ti_tscadc.c b/drivers/input/touchscreen/ti_tscadc.c
 index 4fd2e18..acb62d1 100644
@@ -22,5 +22,5 @@ index 4fd2e18..acb62d1 100644
  #define TSCADC_STEPCONFIG_XPP		BIT(5)
  #define TSCADC_STEPCONFIG_XNN		BIT(6)
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0050-ts_tscadc-switch-to-4x-oversampling.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0050-ts_tscadc-switch-to-4x-oversampling.patch
index 8c562fd..60c527a 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0050-ts_tscadc-switch-to-4x-oversampling.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0050-ts_tscadc-switch-to-4x-oversampling.patch
@@ -1,12 +1,12 @@
-From fb76db075eb565d152d99b734e3fe9d84b4fe495 Mon Sep 17 00:00:00 2001
+From 4ec4eca3d419986b16b226d1ebdd2c103077ae07 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Sat, 19 May 2012 11:37:21 +0200
-Subject: [PATCH 50/56] ts_tscadc: switch to 4x oversampling
+Subject: [PATCH 50/79] ts_tscadc: switch to 4x oversampling
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  drivers/input/touchscreen/ti_tscadc.c |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
+ 1 file changed, 5 insertions(+), 5 deletions(-)
 
 diff --git a/drivers/input/touchscreen/ti_tscadc.c b/drivers/input/touchscreen/ti_tscadc.c
 index acb62d1..7df7bb2 100644
@@ -54,5 +54,5 @@ index acb62d1..7df7bb2 100644
  				TSCADC_STEPCONFIG_YPN | TSCADC_STEPCONFIG_INM;
  	stepconfigz2 = stepconfigz1 | TSCADC_STEPCONFIG_Z1 |
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0051-Fixed-size-of-pinmux-data-array-in-EEPROM-data-struc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0051-Fixed-size-of-pinmux-data-array-in-EEPROM-data-struc.patch
index aba0afa..711c663 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0051-Fixed-size-of-pinmux-data-array-in-EEPROM-data-struc.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0051-Fixed-size-of-pinmux-data-array-in-EEPROM-data-struc.patch
@@ -1,13 +1,13 @@
-From 32fc1a1006035b1c05e45e962b89efe7f9c43182 Mon Sep 17 00:00:00 2001
+From a765d50c30374795b0d421a25a65516d6a66e990 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Sun, 13 May 2012 18:07:59 +0200
-Subject: [PATCH 51/56] Fixed size of pinmux data array in EEPROM data struct.
+Subject: [PATCH 51/79] Fixed size of pinmux data array in EEPROM data struct.
 
 Signed-off-by: Bas Laarhoven <sjml@xs4all.nl>
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index ece4e46..c6ec997 100644
@@ -23,5 +23,5 @@ index ece4e46..c6ec997 100644
  	u16  current_vdd5v;
  	u16  current_sys5v;
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0052-Implemented-Bone-Cape-configuration-from-EEPROM.-Onl.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0052-Implemented-Bone-Cape-configuration-from-EEPROM.-Onl.patch
index f0a3b77..15b428e 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0052-Implemented-Bone-Cape-configuration-from-EEPROM.-Onl.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0052-Implemented-Bone-Cape-configuration-from-EEPROM.-Onl.patch
@@ -1,7 +1,7 @@
-From ef6c0767e7c4337f45080906cda46a2c05e000f8 Mon Sep 17 00:00:00 2001
+From 2ab55bf6a97122999e0cd6cbe18869fb89b59c0a Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Sun, 13 May 2012 18:14:22 +0200
-Subject: [PATCH 52/56] Implemented Bone Cape configuration from EEPROM. Only
+Subject: [PATCH 52/79] Implemented Bone Cape configuration from EEPROM. Only
  used for BEBOPR cape for now.
 
 Signed-off-by: Bas Laarhoven <sjml@xs4all.nl>
@@ -9,7 +9,7 @@ Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |  304 +++++++++++++++++++++++++++++++++
  arch/arm/mach-omap2/mux33xx.c         |   14 ++
- 2 files changed, 318 insertions(+), 0 deletions(-)
+ 2 files changed, 318 insertions(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index c6ec997..7fb8295 100644
@@ -359,5 +359,5 @@ index 72ac899..43c8989 100644
  int __init am33xx_mux_init(struct omap_board_mux *board_subset)
  {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0053-Replaced-conditional-debug-code-by-pr_debug-statemen.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0053-Replaced-conditional-debug-code-by-pr_debug-statemen.patch
index 175468f..28024ee 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0053-Replaced-conditional-debug-code-by-pr_debug-statemen.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0053-Replaced-conditional-debug-code-by-pr_debug-statemen.patch
@@ -1,13 +1,13 @@
-From 3df22c4c4db479f189d892bcbf009102855bbd05 Mon Sep 17 00:00:00 2001
+From 15a5705cf271c9571719d6e5e09e33efba9576b4 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Mon, 14 May 2012 14:31:37 +0200
-Subject: [PATCH 53/56] Replaced conditional debug code by pr_debug statements
+Subject: [PATCH 53/79] Replaced conditional debug code by pr_debug statements
  for cleaner code.
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   91 +++++++++++++--------------------
- 1 files changed, 36 insertions(+), 55 deletions(-)
+ 1 file changed, 36 insertions(+), 55 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 7fb8295..d6a607a 100644
@@ -184,5 +184,5 @@ index 7fb8295..d6a607a 100644
  			}
  		} else {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0054-Workaround-for-boards-with-mistaken-ASCII-interpreta.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0054-Workaround-for-boards-with-mistaken-ASCII-interpreta.patch
index 028fe81..8957bbe 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0054-Workaround-for-boards-with-mistaken-ASCII-interpreta.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0054-Workaround-for-boards-with-mistaken-ASCII-interpreta.patch
@@ -1,13 +1,13 @@
-From bf49a3539e82539d8d347f7d88626c308662ed62 Mon Sep 17 00:00:00 2001
+From 0d56e585afe2e1cf32a55e93e6a4aa8d659bccf4 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Mon, 14 May 2012 14:36:23 +0200
-Subject: [PATCH 54/56] Workaround for boards with (mistaken) ASCII
+Subject: [PATCH 54/79] Workaround for boards with (mistaken) ASCII
  interpretation for the numpins field.
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
+ 1 file changed, 6 insertions(+)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index d6a607a..0a1738a 100644
@@ -27,5 +27,5 @@ index d6a607a..0a1738a 100644
  		 cnt, NR_ITEMS( cape_config.muxdata));
  	RULER( NR_ITEMS( cape_config.muxdata));
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0055-Workaround-for-EEPROM-contents-blocking-further-I2C-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0055-Workaround-for-EEPROM-contents-blocking-further-I2C-.patch
index fa23ece..1275fa5 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0055-Workaround-for-EEPROM-contents-blocking-further-I2C-.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0055-Workaround-for-EEPROM-contents-blocking-further-I2C-.patch
@@ -1,13 +1,13 @@
-From 2dc46dbcb68848a670dbe877f954835980cf8d66 Mon Sep 17 00:00:00 2001
+From 8d8ad2973b9d062763f51f1bee0652a6647033a5 Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Mon, 14 May 2012 15:07:43 +0200
-Subject: [PATCH 55/56] Workaround for EEPROM contents blocking further I2C
+Subject: [PATCH 55/79] Workaround for EEPROM contents blocking further I2C
  bus access.
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 0a1738a..0fa8a32 100644
@@ -26,5 +26,5 @@ index 0a1738a..0fa8a32 100644
  			case 0:	 status[ i] = 'i'; break;
  			case 1:	 status[ i] = 'o'; break;
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0056-Added-check-on-EEPROM-revision-to-prevent-interpreti.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0056-Added-check-on-EEPROM-revision-to-prevent-interpreti.patch
index 239e993..abdaabe 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0056-Added-check-on-EEPROM-revision-to-prevent-interpreti.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0056-Added-check-on-EEPROM-revision-to-prevent-interpreti.patch
@@ -1,13 +1,13 @@
-From 8c79cdf0bbe2bff8043cf81da7b8793c21f64f17 Mon Sep 17 00:00:00 2001
+From ae7ecbfa459730344eeb559ce0352662c540289c Mon Sep 17 00:00:00 2001
 From: Bas Laarhoven <sjml@xs4all.nl>
 Date: Tue, 15 May 2012 10:00:47 +0200
-Subject: [PATCH 56/56] Added check on EEPROM revision to prevent interpreting
+Subject: [PATCH 56/79] Added check on EEPROM revision to prevent interpreting
  unknown formats.
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   16 +++++++++++++---
- 1 files changed, 13 insertions(+), 3 deletions(-)
+ 1 file changed, 13 insertions(+), 3 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 0fa8a32..68ddfe2 100644
@@ -56,5 +56,5 @@ index 0fa8a32..68ddfe2 100644
  
  static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context)
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0057-i2c-prescalar-fix-i2c-fixed-prescalar-setting-issue.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0057-i2c-prescalar-fix-i2c-fixed-prescalar-setting-issue.patch
index da75695..feb27c5 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0057-i2c-prescalar-fix-i2c-fixed-prescalar-setting-issue.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0057-i2c-prescalar-fix-i2c-fixed-prescalar-setting-issue.patch
@@ -1,7 +1,7 @@
-From 2436d7177f75ffa852dc008ce5fe63e92cec963a Mon Sep 17 00:00:00 2001
+From 3c530584c31f8e61a47a931dedca2f9e75165b9f Mon Sep 17 00:00:00 2001
 From: Al Pacifico <adpacifico@users.sourceforge.net>
 Date: Mon, 21 May 2012 11:50:32 -0700
-Subject: [PATCH 57/61] i2c-prescalar-fix: i2c: fixed prescalar setting issue
+Subject: [PATCH 57/79] i2c-prescalar-fix: i2c: fixed prescalar setting issue
 
 Applied Steve's i2c prescalar fix patches.
 See https://groups.google.com/d/msg/beagleboard/Q1pDr1lT7Gk/jvxOxgg8_2MJ
@@ -12,7 +12,7 @@ Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
  arch/arm/mach-omap2/omap_hwmod_33xx_data.c |    3 ++-
  drivers/i2c/busses/i2c-omap.c              |    2 ++
  include/linux/i2c-omap.h                   |    1 +
- 3 files changed, 5 insertions(+), 1 deletions(-)
+ 3 files changed, 5 insertions(+), 1 deletion(-)
 
 diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c
 index 9d3c9a5..946e6b5 100644
@@ -54,5 +54,5 @@ index fd38249..818f5bf 100644
  #define OMAP_I2C_FLAG_BUS_SHIFT_NONE 0
  #define OMAP_I2C_FLAG_BUS_SHIFT_1		BIT(7)
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0058-beaglebone-annotate-default-beaglebone-pinmux.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0058-beaglebone-annotate-default-beaglebone-pinmux.patch
index 66fb0de..92b6d48 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0058-beaglebone-annotate-default-beaglebone-pinmux.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0058-beaglebone-annotate-default-beaglebone-pinmux.patch
@@ -1,12 +1,12 @@
-From 178d60b5a56c1f8eff29d23c27cc14bc6c0a9e4c Mon Sep 17 00:00:00 2001
+From fe280a351fe71d5f1ade1aa3b8f9edc08e201ec1 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 22 May 2012 10:58:53 +0200
-Subject: [PATCH 58/61] beaglebone: annotate default beaglebone pinmux
+Subject: [PATCH 58/79] beaglebone: annotate default beaglebone pinmux
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 68ddfe2..b079279 100644
@@ -28,5 +28,5 @@ index 68ddfe2..b079279 100644
      {"gpmc_ad6.gpio1_6", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
  	{NULL, 0},
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0059-beaglebone-fix-pin-free-thinko-this-method-doesn-t-g.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0059-beaglebone-fix-pin-free-thinko-this-method-doesn-t-g.patch
index 1b55abf..32d9b25 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0059-beaglebone-fix-pin-free-thinko-this-method-doesn-t-g.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0059-beaglebone-fix-pin-free-thinko-this-method-doesn-t-g.patch
@@ -1,13 +1,13 @@
-From f0f728e400d0512788e59a2d7a17e3aa8584c033 Mon Sep 17 00:00:00 2001
+From 1b74058d12afa7d51ef84316ec4ede88c565161f Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 22 May 2012 11:00:00 +0200
-Subject: [PATCH 59/61] beaglebone: fix pin-free thinko, this method doesn't
+Subject: [PATCH 59/79] beaglebone: fix pin-free thinko, this method doesn't
  get called when there's a cape at 0x57
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   46 +++++++++++++++------------------
- 1 files changed, 21 insertions(+), 25 deletions(-)
+ 1 file changed, 21 insertions(+), 25 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index b079279..dfe8df5 100644
@@ -74,5 +74,5 @@ index b079279..dfe8df5 100644
  	return;
  out:
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0060-beaglebone-switch-RS232-cape-to-ttyO2.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0060-beaglebone-switch-RS232-cape-to-ttyO2.patch
index 063b2b3..abe82a3 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0060-beaglebone-switch-RS232-cape-to-ttyO2.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0060-beaglebone-switch-RS232-cape-to-ttyO2.patch
@@ -1,12 +1,12 @@
-From b594d005ab1e622b9c3cbf45c2699dde4af3706f Mon Sep 17 00:00:00 2001
+From 77f8e93f7baf85dfab7cdf8b04c320f460a119cd Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 22 May 2012 11:00:35 +0200
-Subject: [PATCH 60/61] beaglebone: switch RS232 cape to ttyO2
+Subject: [PATCH 60/79] beaglebone: switch RS232 cape to ttyO2
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
+ 1 file changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index dfe8df5..5902df0 100644
@@ -25,5 +25,5 @@ index dfe8df5..5902df0 100644
  		if (!strncmp("BB-BONE-SERL-04", cape_config.partnumber, 15)) {
  		pr_info("BeagleBone cape: not initializing RS485 cape\n");
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0061-beaglebone-make-uart2-pinmux-match-the-uart0-pinmux.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0061-beaglebone-make-uart2-pinmux-match-the-uart0-pinmux.patch
index 91f324c..84c5545 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0061-beaglebone-make-uart2-pinmux-match-the-uart0-pinmux.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0061-beaglebone-make-uart2-pinmux-match-the-uart0-pinmux.patch
@@ -1,12 +1,12 @@
-From 9c7b14dcac75a1c6456e2cd4ae3e1737ed1c5f47 Mon Sep 17 00:00:00 2001
+From f138b1ab42cb36c13926e1cee6ed3cd429d1c91b Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Tue, 22 May 2012 12:25:33 +0200
-Subject: [PATCH 61/61] beaglebone: make uart2 pinmux match the uart0 pinmux
+Subject: [PATCH 61/79] beaglebone: make uart2 pinmux match the uart0 pinmux
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |    7 ++-----
- 1 files changed, 2 insertions(+), 5 deletions(-)
+ 1 file changed, 2 insertions(+), 5 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 5902df0..e8ce381 100644
@@ -27,5 +27,5 @@ index 5902df0..e8ce381 100644
  };
  
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0062-da8xx-fb-Rounding-FB-size-to-satisfy-SGX-buffer-requ.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0062-da8xx-fb-Rounding-FB-size-to-satisfy-SGX-buffer-requ.patch
index f6860cb..c3cd8e1 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0062-da8xx-fb-Rounding-FB-size-to-satisfy-SGX-buffer-requ.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0062-da8xx-fb-Rounding-FB-size-to-satisfy-SGX-buffer-requ.patch
@@ -1,7 +1,7 @@
-From 02ad70ea366cb2946cc7d7c14ddcbd0dabf3d3ff Mon Sep 17 00:00:00 2001
+From c9201ef3a2d12a49b5070620a204f66eef5017e0 Mon Sep 17 00:00:00 2001
 From: Aditya Nellutla <aditya.n@ti.com>
 Date: Thu, 29 Mar 2012 15:45:39 +0530
-Subject: [PATCH 62/63] da8xx-fb: Rounding FB size to satisfy SGX buffer
+Subject: [PATCH 62/79] da8xx-fb: Rounding FB size to satisfy SGX buffer
  requirements
 
 In the real time use-case when SGX is used for rendering to FB buffers it has been
@@ -22,7 +22,7 @@ This patch makes sure that FB allocates buffers aligned to above formula.
 Signed-off-by: Aditya Nellutla <aditya.n@ti.com>
 ---
  drivers/video/da8xx-fb.c |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
+ 1 file changed, 4 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
 index 86b19ac..9aaca5d 100644
@@ -55,5 +55,5 @@ index 86b19ac..9aaca5d 100644
  
  	par->vram_virt = dma_alloc_coherent(NULL,
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0063-beaglebone-dvi-cape-audio-hacks.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0063-beaglebone-dvi-cape-audio-hacks.patch
index 184d168..f429e74 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0063-beaglebone-dvi-cape-audio-hacks.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0063-beaglebone-dvi-cape-audio-hacks.patch
@@ -1,13 +1,13 @@
-From 4c0991689b1e22f28d4827b218e31131f9f56be7 Mon Sep 17 00:00:00 2001
+From 81ca4844089a80e1b1a285ce661f662a04312e81 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Wed, 23 May 2012 15:51:12 +0200
-Subject: [PATCH 63/63] beaglebone: dvi cape audio hacks
+Subject: [PATCH 63/79] beaglebone: dvi cape audio hacks
 
 ---
- arch/arm/mach-omap2/board-am335xevm.c |   72 ++++++++++++++++++++++++++------
+ arch/arm/mach-omap2/board-am335xevm.c |   72 ++++++++++++++++++++++++++-------
  arch/arm/mach-omap2/devices.c         |    2 +-
  sound/soc/codecs/tlv320aic3x.c        |    2 +-
- sound/soc/davinci/davinci-evm.c       |    7 ++-
+ sound/soc/davinci/davinci-evm.c       |    7 ++--
  4 files changed, 64 insertions(+), 19 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
@@ -173,7 +173,7 @@ index 9e029da..41c9b0f 100644
  }
  
 diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
-index d0dbac1..fc32b7f 100644
+index cdb473c..5567756 100644
 --- a/sound/soc/codecs/tlv320aic3x.c
 +++ b/sound/soc/codecs/tlv320aic3x.c
 @@ -52,7 +52,7 @@
@@ -213,5 +213,5 @@ index f6a62c3..7ad7b37 100644
  	platform_set_drvdata(evm_snd_device, evm_snd_dev_data);
  	ret = platform_device_add(evm_snd_device);
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0064-beaglebone-always-execute-the-pin-free-checks.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0064-beaglebone-always-execute-the-pin-free-checks.patch
index e6f696e..2c2b12c 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0064-beaglebone-always-execute-the-pin-free-checks.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0064-beaglebone-always-execute-the-pin-free-checks.patch
@@ -1,14 +1,14 @@
-From 2b000164f7bd77838ec5c9ad5d392282a4e27b3f Mon Sep 17 00:00:00 2001
+From b7349f4b517f8736efcc1a2c1469b07d7361ee5f Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Wed, 23 May 2012 17:39:12 +0200
-Subject: [PATCH 64/64] beaglebone: always execute the pin free checks
+Subject: [PATCH 64/79] beaglebone: always execute the pin free checks
 
 This code needs to run when there are no capes and when there are capes present.
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  arch/arm/mach-omap2/board-am335xevm.c |   26 +++++++++++++-------------
- 1 files changed, 13 insertions(+), 13 deletions(-)
+ 1 file changed, 13 insertions(+), 13 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
 index 1f2d1fd..da6020b 100644
@@ -64,5 +64,5 @@ index 1f2d1fd..da6020b 100644
  
  static struct at24_platform_data cape_eeprom_info = {
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0065-ti_tscadc-switch-to-16x-averaging.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0065-ti_tscadc-switch-to-16x-averaging.patch
index ae5a4f9..5bdf161 100644
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0065-ti_tscadc-switch-to-16x-averaging.patch
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0065-ti_tscadc-switch-to-16x-averaging.patch
@@ -1,12 +1,12 @@
-From 979f76376236287b2e4d4b4505ed34b1f9c9d389 Mon Sep 17 00:00:00 2001
+From bd18b67644c8107920db6911aa16be680af23cf1 Mon Sep 17 00:00:00 2001
 From: Koen Kooi <koen@dominion.thruhere.net>
 Date: Mon, 28 May 2012 09:56:45 +0200
-Subject: [PATCH 65/68] ti_tscadc: switch to 16x averaging
+Subject: [PATCH 65/79] ti_tscadc: switch to 16x averaging
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
 ---
  drivers/input/touchscreen/ti_tscadc.c |    8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/drivers/input/touchscreen/ti_tscadc.c b/drivers/input/touchscreen/ti_tscadc.c
 index 7df7bb2..ae6c4c4 100644
@@ -49,5 +49,5 @@ index 7df7bb2..ae6c4c4 100644
  				TSCADC_STEPCONFIG_YPN | TSCADC_STEPCONFIG_INM;
  	stepconfigz2 = stepconfigz1 | TSCADC_STEPCONFIG_Z1 |
 -- 
-1.7.7.6
+1.7.10
 
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch
new file mode 100644
index 0000000..ed494ec
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0066-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch
@@ -0,0 +1,45 @@
+From b3830f85231a530a9a83a5f8f6ff893aa0be2d60 Mon Sep 17 00:00:00 2001
+From: "Patil, Rachna" <rachna@ti.com>
+Date: Thu, 26 Apr 2012 15:20:20 +0530
+Subject: [PATCH 66/79] video: da8xx-fb: Add Newhaven LCD Panel details
+
+This patch adds details for Newhaven display Panel.
+This panel is used on AM335x EVM-SK An upcoming TI EVM.
+
+Signed-off-by: Patil, Rachna <rachna@ti.com>
+
+Conflicts:
+
+	drivers/video/da8xx-fb.c
+---
+ drivers/video/da8xx-fb.c |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
+index 9aaca5d..010a8bc 100644
+--- a/drivers/video/da8xx-fb.c
++++ b/drivers/video/da8xx-fb.c
+@@ -301,6 +301,20 @@ static struct da8xx_panel known_lcd_panels[] = {
+ 		.pxl_clk = 8000000,
+ 		.invert_pxl_clk = 0,
+ 	},	
++	/* Newhaven Display */
++	[5] = {
++		.name = "NHD-4.3-ATXI#-T-1",
++		.width = 480,
++		.height = 272,
++		.hfp = 8,
++		.hbp = 43,
++		.hsw = 4,
++		.vfp = 4,
++		.vbp = 12,
++		.vsw = 10,
++		.pxl_clk = 9000000,
++		.invert_pxl_clk = 0,
++	},
+ };
+ 
+ /* Enable the Raster Engine of the LCD Controller */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch
new file mode 100644
index 0000000..cf39615
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch
@@ -0,0 +1,94 @@
+From 8652d1a5b1a191a460de6b7214168dc77b6ceeb1 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 29 May 2012 14:12:44 +0200
+Subject: [PATCH 67/79] beaglebone: add support for the 4.3" lcd cape with
+ resistive touchscreen
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |   48 +++++++++++++++++++++++++++------
+ 1 file changed, 40 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index da6020b..e360b22 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -272,6 +272,12 @@ struct da8xx_lcdc_platform_data bbtoys35_pdata = {
+ 	.type			= "CDTech_S035Q01",
+ };
+ 
++struct da8xx_lcdc_platform_data bbtoys43_pdata = {
++	.manu_name		= "BBToys",
++	.controller_data	= &lcd_cfg,
++	.type			= "NHD-4.3-ATXI#-T-1",
++};
++
+ static const struct display_panel dvi_panel = {
+ 	WVGA,
+ 	16,
+@@ -562,14 +568,14 @@ static struct pinmux_config batterycape_pin_mux[] = {
+ 	
+ /* Module pin mux for LCDC */
+ static struct pinmux_config lcdc_pin_mux[] = {
+-	{"gpmc_ad8.lcd_data16",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+-	{"gpmc_ad9.lcd_data17",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+-	{"gpmc_ad10.lcd_data18",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+-	{"gpmc_ad11.lcd_data19",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+-	{"gpmc_ad12.lcd_data20",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+-	{"gpmc_ad13.lcd_data21",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+-	{"gpmc_ad14.lcd_data22",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+-	{"gpmc_ad15.lcd_data23",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad8.lcd_data23",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad9.lcd_data22",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad10.lcd_data21",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad11.lcd_data20",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad12.lcd_data19",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad13.lcd_data18",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad14.lcd_data17",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
++	{"gpmc_ad15.lcd_data16",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+ 	{NULL, 0},
+ };
+ 
+@@ -1659,6 +1665,24 @@ static void bbtoys35lcd_init(int evm_id, int profile)
+ 	return;
+ }
+ 
++static void bbtoys43lcd_init(int evm_id, int profile)
++{
++	setup_pin_mux(lcdc16_pin_mux);
++	setup_pin_mux(lcdc_pin_mux);
++	
++	// we are being stupid and setting pixclock from here instead of da8xx-fb.c
++	if (conf_disp_pll(18000000)) {
++		pr_info("Failed to set pixclock to 18000000, not attempting to"
++				"register LCD cape\n");
++		return;
++	}
++	
++	if (am33xx_register_lcdc(&bbtoys43_pdata))
++		pr_info("Failed to register Beagleboardtoys 4.3\" LCD cape device\n");
++	
++	return;
++}
++
+ #define BEAGLEBONEDVI_PDn_A1  GPIO_TO_PIN(1, 7)
+ #define BEAGLEBONEDVI_PDn_A2  GPIO_TO_PIN(1, 31)
+ 
+@@ -2672,6 +2696,14 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		beaglebone_leds_free = 0;
+ 		lcd3leds_init(0,0);
+ 	}
++
++	if (!strncmp("BB-BONE-LCD4-01", cape_config.partnumber, 15)) {
++		pr_info("BeagleBone cape: initializing LCD cape\n");
++		bbtoys43lcd_init(0,0);
++		pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
++		tsc_init(0,0);
++		beaglebone_tsadcpins_free = 0;
++	}
+ 	
+ 	if (!strncmp("BB-BONE-VGA-01", cape_config.partnumber, 14)) {
+ 		pr_info("BeagleBone cape: initializing VGA cape\n");
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch
deleted file mode 100644
index 27431b8..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0067-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 3f166417b837d6fb44e1003a2286876cb5c682b4 Mon Sep 17 00:00:00 2001
-From: "Patil, Rachna" <rachna@ti.com>
-Date: Thu, 26 Apr 2012 15:20:20 +0530
-Subject: [PATCH 67/68] video: da8xx-fb: Add Newhaven LCD Panel details
-
-This patch adds details for Newhaven display Panel.
-This panel is used on AM335x EVM-SK An upcoming TI EVM.
-
-Signed-off-by: Patil, Rachna <rachna@ti.com>
-
-Conflicts:
-
-	drivers/video/da8xx-fb.c
----
- drivers/video/da8xx-fb.c |   14 ++++++++++++++
- 1 files changed, 14 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
-index 9aaca5d..010a8bc 100644
---- a/drivers/video/da8xx-fb.c
-+++ b/drivers/video/da8xx-fb.c
-@@ -301,6 +301,20 @@ static struct da8xx_panel known_lcd_panels[] = {
- 		.pxl_clk = 8000000,
- 		.invert_pxl_clk = 0,
- 	},	
-+	/* Newhaven Display */
-+	[5] = {
-+		.name = "NHD-4.3-ATXI#-T-1",
-+		.width = 480,
-+		.height = 272,
-+		.hfp = 8,
-+		.hbp = 43,
-+		.hsw = 4,
-+		.vfp = 4,
-+		.vbp = 12,
-+		.vsw = 10,
-+		.pxl_clk = 9000000,
-+		.invert_pxl_clk = 0,
-+	},
- };
- 
- /* Enable the Raster Engine of the LCD Controller */
--- 
-1.7.7.6
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-LCD3-rev-A1.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-LCD3-rev-A1.patch
new file mode 100644
index 0000000..1f22cd7
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-LCD3-rev-A1.patch
@@ -0,0 +1,132 @@
+From 590a240f4bb7c6eeda5d11c9040821a71edefc53 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 4 Jun 2012 14:38:02 +0200
+Subject: [PATCH 68/79] beaglebone: add support for LCD3 rev A1
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |   94 +++++++++++++++++++++++++++++----
+ 1 file changed, 83 insertions(+), 11 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index e360b22..d83431a 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -1136,7 +1136,7 @@ static struct pinmux_config lcd3_keys_pin_mux[] = {
+ 	{NULL, 0},
+ };
+ 
+-/* Configure GPIOs for lcd3 keys */
++/* Configure GPIOs for lcd3 rev A or earlier keys */
+ static struct gpio_keys_button beaglebone_lcd3_gpio_keys[] = {
+ 	{
+ 		.code                   = KEY_LEFT,
+@@ -1193,14 +1193,72 @@ static struct platform_device beaglebone_lcd3_keys = {
+ 	},
+ };
+ 
+-static void beaglebone_lcd3_keys_init(int evm_id, int profile)
+-{
+-	int err;
+-	setup_pin_mux(lcd3_keys_pin_mux);
+-	err = platform_device_register(&beaglebone_lcd3_keys);
+-	if (err)
+-		pr_err("failed to register gpio keys for LCD3 cape\n");
+-}
++/* pinmux for lcd3 A1 or newer keys */
++static struct pinmux_config lcd3a1_keys_pin_mux[] = {
++	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Left
++	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Right
++	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Up
++	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Down
++	{"mcasp0_fsr.gpio3_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Enter
++	{NULL, 0},
++};
++
++/* Configure GPIOs for lcd3 rev A1 or newer keys */
++static struct gpio_keys_button lcd3a1_gpio_keys[] = {
++	{
++		.code                   = KEY_LEFT,
++		.gpio                   = GPIO_TO_PIN(1, 16),
++		.active_low             = true,
++		.desc                   = "left",
++		.type                   = EV_KEY,
++		.wakeup                 = 1,
++	},
++	{
++		.code                   = KEY_RIGHT,
++		.gpio                   = GPIO_TO_PIN(1, 17),
++		.active_low             = true,
++		.desc                   = "right",
++		.type                   = EV_KEY,
++		.wakeup                 = 1,
++	},
++	{
++		.code                   = KEY_UP,
++		.gpio                   = GPIO_TO_PIN(1, 19),
++		.active_low             = true,
++		.desc                   = "up",
++		.type                   = EV_KEY,
++		.wakeup                 = 1,
++	},
++	{
++		.code                   = KEY_DOWN,
++		.gpio                   = GPIO_TO_PIN(3, 16),
++		.active_low             = true,
++		.desc                   = "down",
++		.type                   = EV_KEY,
++		.wakeup                 = 1,
++	},
++	{
++		.code                   = KEY_ENTER,
++		.gpio                   = GPIO_TO_PIN(3, 19),
++		.active_low             = true,
++		.desc                   = "enter",
++		.type                   = EV_KEY,
++		.wakeup                 = 1,
++	},
++};
++
++static struct gpio_keys_platform_data lcd3a1_gpio_key_info = {
++	.buttons        = lcd3a1_gpio_keys,
++	.nbuttons       = ARRAY_SIZE(lcd3a1_gpio_keys),
++};
++
++static struct platform_device lcd3a1_keys = {
++	.name   = "gpio-keys",
++	.id     = -1,
++	.dev    = {
++		.platform_data  = &lcd3a1_gpio_key_info,
++	},
++};
+ 
+ /*
+ * @evm_id - evm id which needs to be configured
+@@ -2691,8 +2749,22 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
+ 		tsc_init(0,0);
+ 		beaglebone_tsadcpins_free = 0;
+-		pr_info("BeagleBone cape: Registering gpio-keys for LCD cape\n");
+-		beaglebone_lcd3_keys_init(0,0);
++		
++		if (!strncmp("00A0", cape_config.version, 4)) {
++			pr_info("BeagleBone cape: Registering gpio-keys for LCD3 rev A or earlier cape\n");
++			int err;
++			setup_pin_mux(lcd3_keys_pin_mux);
++			err = platform_device_register(&beaglebone_lcd3_keys);
++			if (err)
++				pr_err("failed to register gpio keys for LCD3 rev A or earlier cape\n");
++		} else {
++			pr_info("BeagleBone cape: Registering gpio-keys for LCD rev A1 or later cape\n");
++			int err;
++			setup_pin_mux(lcd3a1_keys_pin_mux);
++			err = platform_device_register(&lcd3a1_keys);
++			if (err)
++				pr_err("failed to register gpio keys for LCD3 rev A1 or later cape\n");
++		}
+ 		beaglebone_leds_free = 0;
+ 		lcd3leds_init(0,0);
+ 	}
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch
deleted file mode 100644
index 6d2ab2a..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0068-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 6b69dbc7cee48dfa9ff281ae918cc468ed38a537 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 29 May 2012 14:12:44 +0200
-Subject: [PATCH 68/68] beaglebone: add support for the 4.3" lcd cape with
- resistive touchscreen
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-am335xevm.c |   48 +++++++++++++++++++++++++++-----
- 1 files changed, 40 insertions(+), 8 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index 58c2754..bb6049a 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -272,6 +272,12 @@ struct da8xx_lcdc_platform_data bbtoys35_pdata = {
- 	.type			= "CDTech_S035Q01",
- };
- 
-+struct da8xx_lcdc_platform_data bbtoys43_pdata = {
-+	.manu_name		= "BBToys",
-+	.controller_data	= &lcd_cfg,
-+	.type			= "NHD-4.3-ATXI#-T-1",
-+};
-+
- static const struct display_panel dvi_panel = {
- 	WVGA,
- 	16,
-@@ -562,14 +568,14 @@ static struct pinmux_config batterycape_pin_mux[] = {
- 	
- /* Module pin mux for LCDC */
- static struct pinmux_config lcdc_pin_mux[] = {
--	{"gpmc_ad8.lcd_data16",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
--	{"gpmc_ad9.lcd_data17",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
--	{"gpmc_ad10.lcd_data18",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
--	{"gpmc_ad11.lcd_data19",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
--	{"gpmc_ad12.lcd_data20",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
--	{"gpmc_ad13.lcd_data21",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
--	{"gpmc_ad14.lcd_data22",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
--	{"gpmc_ad15.lcd_data23",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad8.lcd_data23",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad9.lcd_data22",		OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad10.lcd_data21",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad11.lcd_data20",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad12.lcd_data19",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad13.lcd_data18",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad14.lcd_data17",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_ad15.lcd_data16",	OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
- 	{NULL, 0},
- };
- 
-@@ -1659,6 +1665,24 @@ static void bbtoys35lcd_init(int evm_id, int profile)
- 	return;
- }
- 
-+static void bbtoys43lcd_init(int evm_id, int profile)
-+{
-+	setup_pin_mux(lcdc16_pin_mux);
-+	setup_pin_mux(lcdc_pin_mux);
-+	
-+	// we are being stupid and setting pixclock from here instead of da8xx-fb.c
-+	if (conf_disp_pll(18000000)) {
-+		pr_info("Failed to set pixclock to 18000000, not attempting to"
-+				"register LCD cape\n");
-+		return;
-+	}
-+	
-+	if (am33xx_register_lcdc(&bbtoys43_pdata))
-+		pr_info("Failed to register Beagleboardtoys 4.3\" LCD cape device\n");
-+	
-+	return;
-+}
-+
- #define BEAGLEBONEDVI_PDn_A1  GPIO_TO_PIN(1, 7)
- #define BEAGLEBONEDVI_PDn_A2  GPIO_TO_PIN(1, 31)
- 
-@@ -2672,6 +2696,14 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 		beaglebone_leds_free = 0;
- 		lcd3leds_init(0,0);
- 	}
-+
-+	if (!strncmp("BB-BONE-LCD4-01", cape_config.partnumber, 15)) {
-+		pr_info("BeagleBone cape: initializing LCD cape\n");
-+		bbtoys43lcd_init(0,0);
-+		pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
-+		tsc_init(0,0);
-+		beaglebone_tsadcpins_free = 0;
-+	}
- 	
- 	if (!strncmp("BB-BONE-VGA-01", cape_config.partnumber, 14)) {
- 		pr_info("BeagleBone cape: initializing VGA cape\n");
--- 
-1.7.7.6
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch
deleted file mode 100644
index d9bc2b5..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From b61b89f98ac85ccd8d503a902bad208343ed0aba Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Mon, 4 Jun 2012 14:38:02 +0200
-Subject: [PATCH] beaglebone: add support for LCD3 rev A1
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-am335xevm.c |   94 +++++++++++++++++++++++++++++----
- 1 files changed, 83 insertions(+), 11 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index bb6049a..51bfa8b 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -1136,7 +1136,7 @@ static struct pinmux_config lcd3_keys_pin_mux[] = {
- 	{NULL, 0},
- };
- 
--/* Configure GPIOs for lcd3 keys */
-+/* Configure GPIOs for lcd3 rev A or earlier keys */
- static struct gpio_keys_button beaglebone_lcd3_gpio_keys[] = {
- 	{
- 		.code                   = KEY_LEFT,
-@@ -1193,14 +1193,72 @@ static struct platform_device beaglebone_lcd3_keys = {
- 	},
- };
- 
--static void beaglebone_lcd3_keys_init(int evm_id, int profile)
--{
--	int err;
--	setup_pin_mux(lcd3_keys_pin_mux);
--	err = platform_device_register(&beaglebone_lcd3_keys);
--	if (err)
--		pr_err("failed to register gpio keys for LCD3 cape\n");
--}
-+/* pinmux for lcd3 A1 or newer keys */
-+static struct pinmux_config lcd3a1_keys_pin_mux[] = {
-+	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Left
-+	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Right
-+	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Up
-+	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Down
-+	{"mcasp0_fsr.gpio3_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Enter
-+	{NULL, 0},
-+};
-+
-+/* Configure GPIOs for lcd3 rev A1 or newer keys */
-+static struct gpio_keys_button lcd3a1_gpio_keys[] = {
-+	{
-+		.code                   = KEY_LEFT,
-+		.gpio                   = GPIO_TO_PIN(1, 16),
-+		.active_low             = true,
-+		.desc                   = "left",
-+		.type                   = EV_KEY,
-+		.wakeup                 = 1,
-+	},
-+	{
-+		.code                   = KEY_RIGHT,
-+		.gpio                   = GPIO_TO_PIN(1, 17),
-+		.active_low             = true,
-+		.desc                   = "right",
-+		.type                   = EV_KEY,
-+		.wakeup                 = 1,
-+	},
-+	{
-+		.code                   = KEY_UP,
-+		.gpio                   = GPIO_TO_PIN(1, 19),
-+		.active_low             = true,
-+		.desc                   = "up",
-+		.type                   = EV_KEY,
-+		.wakeup                 = 1,
-+	},
-+	{
-+		.code                   = KEY_DOWN,
-+		.gpio                   = GPIO_TO_PIN(3, 16),
-+		.active_low             = true,
-+		.desc                   = "down",
-+		.type                   = EV_KEY,
-+		.wakeup                 = 1,
-+	},
-+	{
-+		.code                   = KEY_ENTER,
-+		.gpio                   = GPIO_TO_PIN(3, 19),
-+		.active_low             = true,
-+		.desc                   = "enter",
-+		.type                   = EV_KEY,
-+		.wakeup                 = 1,
-+	},
-+};
-+
-+static struct gpio_keys_platform_data lcd3a1_gpio_key_info = {
-+	.buttons        = lcd3a1_gpio_keys,
-+	.nbuttons       = ARRAY_SIZE(lcd3a1_gpio_keys),
-+};
-+
-+static struct platform_device lcd3a1_keys = {
-+	.name   = "gpio-keys",
-+	.id     = -1,
-+	.dev    = {
-+		.platform_data  = &lcd3a1_gpio_key_info,
-+	},
-+};
- 
- /*
- * @evm_id - evm id which needs to be configured
-@@ -2691,8 +2749,22 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 		pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
- 		tsc_init(0,0);
- 		beaglebone_tsadcpins_free = 0;
--		pr_info("BeagleBone cape: Registering gpio-keys for LCD cape\n");
--		beaglebone_lcd3_keys_init(0,0);
-+		
-+		if (!strncmp("00A0", cape_config.version, 4)) {
-+			pr_info("BeagleBone cape: Registering gpio-keys for LCD3 rev A or earlier cape\n");
-+			int err;
-+			setup_pin_mux(lcd3_keys_pin_mux);
-+			err = platform_device_register(&beaglebone_lcd3_keys);
-+			if (err)
-+				pr_err("failed to register gpio keys for LCD3 rev A or earlier cape\n");
-+		} else {
-+			pr_info("BeagleBone cape: Registering gpio-keys for LCD rev A1 or later cape\n");
-+			int err;
-+			setup_pin_mux(lcd3a1_keys_pin_mux);
-+			err = platform_device_register(&lcd3a1_keys);
-+			if (err)
-+				pr_err("failed to register gpio keys for LCD3 rev A1 or later cape\n");
-+		}
- 		beaglebone_leds_free = 0;
- 		lcd3leds_init(0,0);
- 	}
--- 
-1.7.7.6
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch
new file mode 100644
index 0000000..08330a0
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0069-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch
@@ -0,0 +1,52 @@
+From dbe62e3346ee4423a2d3c83e6390ef39c2a0a0bf Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 6 Jun 2012 11:20:21 +0200
+Subject: [PATCH 69/79] beaglebone: fix buttons/spidev clash when using
+ mcasp0_axr0.gpio3_16
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |   13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index d83431a..15ee8af 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -1051,12 +1051,11 @@ static void volume_keys_init(int evm_id, int profile)
+ 
+ /* pinmux for lcd7 keys */
+ static struct pinmux_config lcd7_keys_pin_mux[] = {
+-	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
+-	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
+-	{"gpmc_a3.gpio1_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
+-	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
+-	{"mcasp0_fsr.gpio3_19",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
+-	{"gpmc_ben1.gpio1_28",    OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
++	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //left
++	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //right
++	{"gpmc_a3.gpio1_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //up
++	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //down
++	{"mcasp0_fsr.gpio3_19",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //enter
+ 	{NULL, 0},
+ };
+ 
+@@ -2738,6 +2737,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		pr_info("BeagleBone cape: Registering gpio-keys for LCD cape\n");
+ 		beaglebone_lcd7_keys_init(0,0);
+ 		
++		beaglebone_spi1_free = 0;
+ 		// A1 or newer
+ 		beaglebone_leds_free = 0;
+ 		lcd7leds_init(0,0);
+@@ -2765,6 +2765,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 			if (err)
+ 				pr_err("failed to register gpio keys for LCD3 rev A1 or later cape\n");
+ 		}
++		beaglebone_spi1_free = 0;
+ 		beaglebone_leds_free = 0;
+ 		lcd3leds_init(0,0);
+ 	}
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-LCD3-led-key-overlap.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-LCD3-led-key-overlap.patch
new file mode 100644
index 0000000..942ab61
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-LCD3-led-key-overlap.patch
@@ -0,0 +1,54 @@
+From 2a148ebd4606ed6a5d24287aa7e5701de3259057 Mon Sep 17 00:00:00 2001
+From: Damian <damian.eppel@teleca.com>
+Date: Tue, 5 Jun 2012 23:14:58 +0200
+Subject: [PATCH 70/79] beaglebone: fix LCD3 led/key overlap
+
+Signed-off-by: Koen Kooi <koen@circuitco.com>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |    9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 15ee8af..9a56a769 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -639,7 +639,6 @@ static struct pinmux_config dvia2_pin_mux[] = {
+ /* Module pin mux for Beagleboardtoys 3.5" LCD cape */
+ static struct pinmux_config bbtoys35_pin_mux[] = {
+ 	{"gpmc_a2.gpio1_18", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR0 LED
+-	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR1 LED
+ 	{NULL, 0},
+ };
+ 
+@@ -1196,7 +1195,7 @@ static struct platform_device beaglebone_lcd3_keys = {
+ static struct pinmux_config lcd3a1_keys_pin_mux[] = {
+ 	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Left
+ 	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Right
+-	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Up
++	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Up
+ 	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Down
+ 	{"mcasp0_fsr.gpio3_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Enter
+ 	{NULL, 0},
+@@ -1424,7 +1423,6 @@ static struct platform_device dvi_leds_gpio = {
+ };
+ 
+ #define BEAGLEBONELCD3_USR0_LED  GPIO_TO_PIN(1, 18)
+-#define BEAGLEBONELCD3_USR1_LED  GPIO_TO_PIN(1, 19)
+ 
+ static struct gpio_led lcd3_gpio_leds[] = {
+ 	{
+@@ -1450,11 +1448,6 @@ static struct gpio_led lcd3_gpio_leds[] = {
+ 		.default_trigger	= "heartbeat",
+ 		.gpio			= BEAGLEBONELCD3_USR0_LED,
+ 	},
+-	{
+-		.name			= "lcd3::usr1",
+-		.default_trigger	= "mmc0",
+-		.gpio			= BEAGLEBONELCD3_USR1_LED,
+-	},
+ };
+ 
+ static struct gpio_led_platform_data lcd3_gpio_led_info = {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch
deleted file mode 100644
index ae277fa..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From d99bad03ee2f3cc3d9a61879e53e4795a05eaed3 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 6 Jun 2012 11:20:21 +0200
-Subject: [PATCH 70/70] beaglebone: fix buttons/spidev clash when using
- mcasp0_axr0.gpio3_16
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-am335xevm.c |   13 +++++++------
- 1 files changed, 7 insertions(+), 6 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index 51bfa8b..7fd611f 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -1051,12 +1051,11 @@ static void volume_keys_init(int evm_id, int profile)
- 
- /* pinmux for lcd7 keys */
- static struct pinmux_config lcd7_keys_pin_mux[] = {
--	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
--	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
--	{"gpmc_a3.gpio1_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
--	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
--	{"mcasp0_fsr.gpio3_19",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT},
--	{"gpmc_ben1.gpio1_28",    OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},
-+	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //left
-+	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //right
-+	{"gpmc_a3.gpio1_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //up
-+	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //down
-+	{"mcasp0_fsr.gpio3_19",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //enter
- 	{NULL, 0},
- };
- 
-@@ -2738,6 +2737,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 		pr_info("BeagleBone cape: Registering gpio-keys for LCD cape\n");
- 		beaglebone_lcd7_keys_init(0,0);
- 		
-+		beaglebone_spi1_free = 0;
- 		// A1 or newer
- 		beaglebone_leds_free = 0;
- 		lcd7leds_init(0,0);
-@@ -2765,6 +2765,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 			if (err)
- 				pr_err("failed to register gpio keys for LCD3 rev A1 or later cape\n");
- 		}
-+		beaglebone_spi1_free = 0;
- 		beaglebone_leds_free = 0;
- 		lcd3leds_init(0,0);
- 	}
--- 
-1.7.7.6
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch
deleted file mode 100644
index 7d796a7..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From fa18ca5c896696066349e2803dfeeda1fcd4a4e3 Mon Sep 17 00:00:00 2001
-From: Damian <damian.eppel@teleca.com>
-Date: Tue, 5 Jun 2012 23:14:58 +0200
-Subject: [PATCH 1/2] beaglebone: fix LCD3 led/key overlap
-
-Signed-off-by: Koen Kooi <koen@circuitco.com>
----
- arch/arm/mach-omap2/board-am335xevm.c |    9 +--------
- 1 file changed, 1 insertion(+), 8 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index 7fd611f..a337bb3 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -639,7 +639,6 @@ static struct pinmux_config dvia2_pin_mux[] = {
- /* Module pin mux for Beagleboardtoys 3.5" LCD cape */
- static struct pinmux_config bbtoys35_pin_mux[] = {
- 	{"gpmc_a2.gpio1_18", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR0 LED
--	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // USR1 LED
- 	{NULL, 0},
- };
- 
-@@ -1196,7 +1195,7 @@ static struct platform_device beaglebone_lcd3_keys = {
- static struct pinmux_config lcd3a1_keys_pin_mux[] = {
- 	{"gpmc_a0.gpio1_16",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Left
- 	{"gpmc_a1.gpio1_17",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Right
--	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Up
-+	{"gpmc_a3.gpio1_19", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Up
- 	{"mcasp0_axr0.gpio3_16",    OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //Down
- 	{"mcasp0_fsr.gpio3_19",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, // Enter
- 	{NULL, 0},
-@@ -1424,7 +1423,6 @@ static struct platform_device dvi_leds_gpio = {
- };
- 
- #define BEAGLEBONELCD3_USR0_LED  GPIO_TO_PIN(1, 18)
--#define BEAGLEBONELCD3_USR1_LED  GPIO_TO_PIN(1, 19)
- 
- static struct gpio_led lcd3_gpio_leds[] = {
- 	{
-@@ -1450,11 +1448,6 @@ static struct gpio_led lcd3_gpio_leds[] = {
- 		.default_trigger	= "heartbeat",
- 		.gpio			= BEAGLEBONELCD3_USR0_LED,
- 	},
--	{
--		.name			= "lcd3::usr1",
--		.default_trigger	= "mmc0",
--		.gpio			= BEAGLEBONELCD3_USR1_LED,
--	},
- };
- 
- static struct gpio_led_platform_data lcd3_gpio_led_info = {
--- 
-1.7.10
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-audio-spi-clash.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-audio-spi-clash.patch
new file mode 100644
index 0000000..02bf495
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0071-beaglebone-fix-audio-spi-clash.patch
@@ -0,0 +1,25 @@
+From 1ec20c05453acf20b9d5d385ac9574e9ab64347d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 26 Jun 2012 08:39:04 +0200
+Subject: [PATCH 71/79] beaglebone: fix audio/spi clash
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 9a56a769..d2481af 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -2691,6 +2691,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		
+ 		beaglebone_leds_free = 0;
+ 		dvileds_init(0,0);
++		beaglebone_spi1_free = 0;
+ 		mcasp0_init(0,0);
+ 	
+ 		if (!strncmp("00A1", cape_config.version, 4) || !strncmp("000A", cape_config.version, 4)) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
new file mode 100644
index 0000000..724c3dd
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
@@ -0,0 +1,1612 @@
+From e3a4f83627a111ae21ea8c6521ad98201f55eacc Mon Sep 17 00:00:00 2001
+From: Dan Aizenstros <daizenstros@quicklogic.com>
+Date: Fri, 29 Jun 2012 13:57:49 -0400
+Subject: [PATCH 72/79] beaglebone: add support for QuickLogic Camera
+ interface on camera cape
+
+Signed-off-by: Dan Aizenstros <daizenstros@quicklogic.com>
+---
+ arch/arm/mach-omap2/board-am335xevm.c         |  205 ++++-
+ arch/arm/mach-omap2/devices.c                 |    2 +-
+ arch/arm/plat-omap/include/plat/dma-33xx.h    |    1 +
+ drivers/media/video/Kconfig                   |    7 +
+ drivers/media/video/Makefile                  |    2 +
+ drivers/media/video/cssp_camera/Makefile      |    3 +
+ drivers/media/video/cssp_camera/cssp_camera.c | 1119 +++++++++++++++++++++++++
+ drivers/media/video/cssp_camera/cssp_camera.h |  148 ++++
+ 8 files changed, 1478 insertions(+), 9 deletions(-)
+ create mode 100644 drivers/media/video/cssp_camera/Makefile
+ create mode 100644 drivers/media/video/cssp_camera/cssp_camera.c
+ create mode 100644 drivers/media/video/cssp_camera/cssp_camera.h
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index d2481af..22a740f 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -65,6 +65,10 @@
+ #include <plat/mmc.h>
+ #include <plat/emif.h>
+ #include <plat/nand.h>
++#include <plat/dma-33xx.h>
++
++#include <media/soc_camera.h>
++#include <media/mt9t112.h>
+ 
+ #include "board-flash.h"
+ #include "cpuidle33xx.h"
+@@ -803,6 +807,42 @@ static struct pinmux_config i2c1_pin_mux[] = {
+ 	{NULL, 0},
+ };
+ 
++/* Pin mux for GPMC bus */
++static struct pinmux_config gpmc_pin_mux[] = {
++	{"gpmc_ad0.gpmc_ad0",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad1.gpmc_ad1",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad2.gpmc_ad2",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad3.gpmc_ad3",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad4.gpmc_ad4",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad5.gpmc_ad5",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad6.gpmc_ad6",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad7.gpmc_ad7",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad8.gpmc_ad8",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad9.gpmc_ad9",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad10.gpmc_ad10",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad11.gpmc_ad11",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad12.gpmc_ad12",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad13.gpmc_ad13",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad14.gpmc_ad14",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_ad15.gpmc_ad15",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_wpn.gpmc_wpn",	  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
++	{"gpmc_csn1.gpmc_csn1",	  OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_advn_ale.gpmc_advn_ale",  OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_oen_ren.gpmc_oen_ren",	 OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_wen.gpmc_wen",     OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_ben0_cle.gpmc_ben0_cle",	 OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
++	{"gpmc_clk.gpmc_clk",	 OMAP_MUX_MODE0 | AM33XX_PIN_INPUT},
++	{"ecap0_in_pwm0_out.xdma_event_intr2", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT}, // DMAREQ
++	{NULL, 0},
++};
++
++static struct pinmux_config camera_cape_pin_mux[] = {
++	{"spi0_d1.gpio0_4",    OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT },		// QL CSSP and Camera Sensor Reset
++	{"spi0_cs0.gpio0_5",   OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP },	// 1V8 and 2V8 Power Enable
++	{NULL, 0},
++};
++
+ static struct pinmux_config i2c2_pin_mux[] = {
+ 	{"uart1_ctsn.i2c2_sda",    OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
+ 					AM33XX_PIN_INPUT_PULLUP},
+@@ -1802,6 +1842,156 @@ static void dvileds_init(int evm_id, int profile )
+ 		pr_err("failed to register BeagleBone DVI cape LEDS\n");
+ }
+ 
++static struct resource cssp_camera_resources[] = {
++	{
++		.name = "gpmc_phys_mem_slot",
++		.flags = IORESOURCE_MEM,
++	},
++};
++
++static struct mt9t112_camera_info mt9t111_cam_info = {
++	/* divider calculated for 32Mhz CAM_MCLK */
++	.divider = {
++		.m = 24, .n = 1,
++		.p1 = 0, .p2 = 7, .p3 = 0, .p4 = 11, .p5 = 15, .p6 = 7, .p7 = 0,
++	},
++};
++
++static struct soc_camera_link mt9t111_camera_link =  {
++	.priv = &mt9t111_cam_info,
++	.i2c_adapter_id = 3,
++};
++
++static struct i2c_board_info i2c_camera = {
++	I2C_BOARD_INFO("mt9t112", 0x3c),
++	.platform_data = &mt9t111_camera_link,
++};
++
++struct cssp_cam_platform_data {
++	struct i2c_board_info *cam_i2c_board_info;
++	const char *cam_clk_name;
++	int dma_ch;
++	int cssp_reset_pin;
++};
++
++static struct cssp_cam_platform_data cssp_cam_platform_data = {
++	.cam_i2c_board_info = &i2c_camera,
++	.cam_clk_name = "clkout2_ck",
++	.dma_ch = AM33XX_DMA_XDMA_EVENT_INTR2,
++	.cssp_reset_pin = GPIO_TO_PIN(0, 4),
++};
++
++static struct platform_device cssp_camera = {
++	.name  = "cssp-camera",
++	.id    = -1,
++	.dev   = {
++		.platform_data = &cssp_cam_platform_data,
++	},
++	.num_resources = sizeof(cssp_camera_resources) / sizeof(cssp_camera_resources[0]),
++	.resource = cssp_camera_resources,
++};
++
++static struct gpmc_timings cssp_timings = {
++	/* Minimum clock period for synchronous mode (in picoseconds) */
++	.sync_clk = 10000,
++
++	.cs_on = 0,
++	.cs_rd_off = 23 * 10,		/* Read deassertion time */
++	.cs_wr_off = 23 * 10,		/* Write deassertion time */
++
++	/* ADV signal timings corresponding to GPMC_CONFIG3 */
++	.adv_on = 0,			/* Assertion time */
++	.adv_rd_off = 2 * 10,		/* Read deassertion time */
++	.adv_wr_off = 2 * 10,		/* Write deassertion time */
++
++	/* WE signals timings corresponding to GPMC_CONFIG4 */
++	.we_on = 3 * 10,		/* WE assertion time */
++	.we_off = 23 * 10,		/* WE deassertion time */
++
++	/* OE signals timings corresponding to GPMC_CONFIG4 */
++	.oe_on = 3 * 10,		/* OE assertion time */
++	.oe_off = 23 * 10,		/* OE deassertion time */
++
++	/* Access time and cycle time timings corresponding to GPMC_CONFIG5 */
++	.page_burst_access = 1 * 10,	/* Multiple access word delay */
++	.access = 7 * 10,		/* Start-cycle to first data valid delay */
++	.rd_cycle = 23 * 10,		/* Total read cycle time */
++	.wr_cycle = 23 * 10,		/* Total write cycle time */
++
++	/* The following are only on OMAP3430 */
++	.wr_access = 7 * 10,		/* WRACCESSTIME */
++	.wr_data_mux_bus = 3 * 10,	/* WRDATAONADMUXBUS */
++};
++
++static int gpmc_cssp_init(void)
++{
++	int cs = 1; /* Chip Select on GPMC bus */
++	int val;
++	long unsigned int cssp_gpmc_mem_base_phys;
++
++	if (gpmc_cs_request(cs, SZ_16M, &cssp_gpmc_mem_base_phys) < 0) {
++			printk(KERN_ERR "[cssp_cam platform init]: gpmc_cs_request failed\n");
++			return -1;
++	}
++
++	cssp_camera_resources[0].start = cssp_gpmc_mem_base_phys;
++	cssp_camera_resources[0].end = cssp_gpmc_mem_base_phys + 0x1ffff;
++
++	if (gpmc_cs_configure(cs, GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NOR) < 0) {
++			printk(KERN_ERR "[cssp_cam platform init]: gpmc_cs_configure failed\n");
++			return -1;
++	}
++
++	val = GPMC_CONFIG1_READMULTIPLE_SUPP;
++	val |= GPMC_CONFIG1_READTYPE_SYNC;
++	val |= GPMC_CONFIG1_WRITETYPE_SYNC;
++	val |= GPMC_CONFIG1_CLKACTIVATIONTIME(1);
++	val |= GPMC_CONFIG1_PAGE_LEN(2);
++	val |= GPMC_CONFIG1_DEVICESIZE_16;
++	val |= GPMC_CONFIG1_DEVICETYPE_NOR;
++	val |= GPMC_CONFIG1_MUXADDDATA;
++	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, val);
++
++	if (gpmc_cs_set_timings(cs, &cssp_timings) < 0) {
++		printk(KERN_ERR "Failed gpmc_cs_set_timings for QuickLogic CAMIF device\n");
++		goto free;
++	}
++
++	val = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG6);
++	val &= 0xe0f0f030;
++	val |= 0x07030481;
++	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG6, val);
++
++	printk(KERN_INFO "gpmc_cssp_init for QuickLogic CAMIF device succeeded\n");
++
++	return 0;
++
++free:
++	gpmc_cs_free(cs);
++
++	printk(KERN_ERR "Could not initialize QuickLogic CAMIF device\n");
++
++	return -1;
++}
++
++static void cssp_gpmc_init(void)
++{
++	struct gpmc_devices_info gpmc_device[2] = {
++			{ NULL, GPMC_DEVICE_NOR },
++		};
++
++	setup_pin_mux(camera_cape_pin_mux);
++	setup_pin_mux(gpmc_pin_mux);
++
++	omap_init_gpmc(gpmc_device, sizeof(gpmc_device));
++	gpmc_cssp_init();
++
++	platform_device_register(&cssp_camera);
++
++	printk(KERN_INFO "[cssp_cam platform init]: cssp_gpmc_init: DONE\n");
++}
++
++
+ static void lcd3leds_init(int evm_id, int profile )
+ {
+ 	int err;
+@@ -2821,6 +3011,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 	if (!strncmp("BB-BONE-CAM-01", cape_config.partnumber, 14)) {
+ 		pr_info("BeagleBone cape: recognized Camera cape\n");
+ 		beaglebone_w1gpio_free = 0;
++		cssp_gpmc_init();
+ 	}
+ 
+ 	goto out2;
+@@ -3729,15 +3920,13 @@ static struct pinmux_config clkout2_pin_mux[] = {
+ 
+ static void __init clkout2_enable(void)
+ {
+-	struct clk *ck_32;
+-
+-	ck_32 = clk_get(NULL, "clkout2_ck");
+-	if (IS_ERR(ck_32)) {
+-		pr_err("Cannot clk_get ck_32\n");
+-		return;
+-	}
++	void __iomem *base;
++	unsigned int val;
+ 
+-	clk_enable(ck_32);
++	base = ioremap(0x44E00700, SZ_4K);
++	val = (5 << 3) | (3 << 0); //32 MHz
++	writel(val, base);
++	iounmap(base);
+ 
+ 	setup_pin_mux(clkout2_pin_mux);
+ }
+diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
+index 41c9b0f..3ef045e 100644
+--- a/arch/arm/mach-omap2/devices.c
++++ b/arch/arm/mach-omap2/devices.c
+@@ -968,7 +968,7 @@ static struct event_to_channel_map am33xx_xbar_event_mapping[] = {
+ 	{27, -1},
+ 	{28, -1},
+ 	{29, -1},
+-	{30, -1},
++	{30, 20},	/* XDMA_EVENT_INTR2 */
+ 	{31, -1},
+ 	{-1, -1}
+ };
+diff --git a/arch/arm/plat-omap/include/plat/dma-33xx.h b/arch/arm/plat-omap/include/plat/dma-33xx.h
+index bebdaa7..ded00aa 100644
+--- a/arch/arm/plat-omap/include/plat/dma-33xx.h
++++ b/arch/arm/plat-omap/include/plat/dma-33xx.h
+@@ -83,5 +83,6 @@
+ #define AM33XX_DMA_PWMSS2_EPW				63
+ #define AM33XX_DMA_MMCHS2_W				64	/* xBar */
+ #define AM33XX_DMA_MMCHS2_R				65	/* xBar */
++#define AM33XX_DMA_XDMA_EVENT_INTR2			93	/* xBar */
+ 
+ #endif
+diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
+index b303a3f..a31723f 100644
+--- a/drivers/media/video/Kconfig
++++ b/drivers/media/video/Kconfig
+@@ -1002,6 +1002,13 @@ config VIDEO_S5P_MIPI_CSIS
+ 
+ source "drivers/media/video/s5p-tv/Kconfig"
+ 
++config VIDEO_QL_CAMIF
++	tristate "QuickLogic Camera Interface support (EXPERIMENTAL)"
++	depends on VIDEO_DEV && SOC_CAMERA && SOC_OMAPAM33XX && EXPERIMENTAL
++	select VIDEOBUF2_DMA_CONTIG
++	---help---
++	  This is a v4l2 driver for the QuickLogic CAMIF controller.
++
+ #
+ # USB Multimedia device configuration
+ #
+diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
+index 117f9c4..af7af692 100644
+--- a/drivers/media/video/Makefile
++++ b/drivers/media/video/Makefile
+@@ -195,6 +195,8 @@ obj-y	+= davinci/
+ 
+ obj-$(CONFIG_ARCH_OMAP)	+= omap/
+ 
++obj-$(CONFIG_VIDEO_QL_CAMIF)	+= cssp_camera/
++
+ ccflags-y += -Idrivers/media/dvb/dvb-core
+ ccflags-y += -Idrivers/media/dvb/frontends
+ ccflags-y += -Idrivers/media/common/tuners
+diff --git a/drivers/media/video/cssp_camera/Makefile b/drivers/media/video/cssp_camera/Makefile
+new file mode 100644
+index 0000000..d85a84e
+--- /dev/null
++++ b/drivers/media/video/cssp_camera/Makefile
+@@ -0,0 +1,3 @@
++# cssp_camera
++
++obj-$(CONFIG_VIDEO_QL_CAMIF) += cssp_camera.o
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.c b/drivers/media/video/cssp_camera/cssp_camera.c
+new file mode 100644
+index 0000000..39aa003
+--- /dev/null
++++ b/drivers/media/video/cssp_camera/cssp_camera.c
+@@ -0,0 +1,1119 @@
++/*
++ * cssp-camera driver
++ *
++ * Based on Vivi driver
++ *
++ * Copyright (C) 2012 QuickLogic Corp.
++ *
++ * Developed for QuickLogic by:
++ * Damian Eppel <damian.eppel@teleca.com>
++ * Przemek Szewczyk <przemek.szewczyk@teleca.com>
++ * Dan Aizenstros <daizenstros@quicklogic.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/gpio.h>
++#include <linux/i2c.h>
++#include <linux/delay.h>
++#include <linux/spinlock.h>
++#include <linux/dma-mapping.h>
++#include <linux/interrupt.h>
++#include <mach/edma.h>
++#include <linux/clk.h>
++// V4L2 Interface *********************
++#include <media/soc_camera.h>
++#include <media/v4l2-mediabus.h>
++#include <media/videobuf2-dma-contig.h>
++#include <media/v4l2-ioctl.h>
++#include <media/v4l2-event.h>
++//*************************************
++#include "cssp_camera.h"
++
++
++/*
++ * ---------------------------------------------------------------------------
++ *  QuickLoigc Camera Interface registers
++ * ---------------------------------------------------------------------------
++ */
++
++#define REG_MODE		0x00000
++#define REG_DATA		0x10000
++
++/* MODE bit shifts */
++#define FMT_2X8_EN		BIT(15) /* Enable 2 byte format on CAMIF bus (0 - 10 bit, 1 - 16 bit 2x8) */
++#define PCLK_POL		BIT(14) /* PCLK polarity (0 - rising edge, 1 - falling edge */
++#define HS_EN			BIT(13) /* High speed bus (0 =< 50 MHz, 1 > 50 MHz) */
++#define ENABLE			BIT(12)
++
++
++static struct cssp_cam_fmt formats[] = {
++	{
++		.name	= "4:2:2, packed, YUYV",
++		.fourcc	= V4L2_PIX_FMT_YUYV,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_YUYV8_2X8,
++	},
++	{
++		.name	= "4:2:2, packed, UYVY",
++		.fourcc	= V4L2_PIX_FMT_UYVY,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_UYVY8_2X8,
++	},
++	{
++		.name	= "4:2:2, packed, VYUY",
++		.fourcc	= V4L2_PIX_FMT_VYUY,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_VYUY8_2X8,
++	},
++	{
++		.name	= "4:2:2, packed, YVYU",
++		.fourcc	= V4L2_PIX_FMT_YVYU,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_YVYU8_2X8,
++	},
++	{
++		.name	= "RGB565 (LE)",
++		.fourcc	= V4L2_PIX_FMT_RGB565,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_RGB565_2X8_LE,
++	},
++	{
++		.name	= "RGB555 (LE)",
++		.fourcc	= V4L2_PIX_FMT_RGB555,
++		.depth	= 16,
++		.code	= V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
++	},
++};
++
++
++/***************************************************************************/
++
++
++static int configure_gpio(int nr, int val, const char *name)
++{
++	unsigned long flags = val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
++	int ret;
++	if (!gpio_is_valid(nr))
++		return 0;
++	ret = gpio_request_one(nr, flags, name);
++	if (!ret)
++		gpio_export(nr, 0);
++	return ret;
++}
++
++static int reset_cssp(struct cssp_cam_dev *cam)
++{
++	struct platform_device *pdev = cam->pdev;
++	int err;
++
++	cam->reset_pin = ((struct cssp_cam_platform_data *)pdev->dev.platform_data)->gpio_reset_pin;
++
++	err = configure_gpio(cam->reset_pin, 0, "cssp_reset");
++	if (err) {
++		printk(KERN_ERR "[%s]: failed to configure cssp reset pin\n", pdev->name);
++		return -1;
++	}
++
++	mdelay(1);
++
++	gpio_direction_output(cam->reset_pin, 1);
++
++	return err;
++}
++
++static int trigger_dma_transfer_to_buf(struct cssp_cam_dev *dev, struct vb2_buffer *vb)
++{
++	dma_addr_t dma_buf = vb2_dma_contig_plane_dma_addr(vb, 0);
++
++	if (!dma_buf) {
++		/* Is this possible? Release the vb2_buffer with an error here, */
++		vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
++		dev->current_vb = NULL;
++		return -ENOMEM;
++	}
++
++	dev->dma_tr_params.dst = dma_buf;
++
++	// Enable DMA
++	edma_write_slot(dev->dma_ch, &dev->dma_tr_params);
++
++	// Enable data capture
++	dev->mode |= ENABLE;
++	writew(dev->mode, dev->reg_base_virt + REG_MODE);
++	readw(dev->reg_base_virt + REG_MODE);
++
++	dev->current_vb = vb;
++
++	return 0;
++}
++
++static void dequeue_buffer_for_dma(struct cssp_cam_dev *dev)
++{
++	struct cssp_cam_dmaqueue *dma_q = &dev->vidq;
++	unsigned long flags = 0;
++
++	spin_lock_irqsave(&dev->slock, flags);
++	if (!list_empty(&dma_q->active)) {
++		struct cssp_cam_buffer *buf;
++
++		buf = list_entry(dma_q->active.next, struct cssp_cam_buffer, list);
++		list_del(&buf->list);
++		spin_unlock_irqrestore(&dev->slock, flags);
++
++		buf->fmt = dev->fmt;
++
++		trigger_dma_transfer_to_buf(dev, &buf->vb);
++	} else {
++		spin_unlock_irqrestore(&dev->slock, flags);
++	}
++}
++
++static void dma_callback(unsigned lch, u16 ch_status, void *data)
++{
++	struct cssp_cam_dev *dev = (struct cssp_cam_dev *)data;
++
++	// Disable data capture
++	dev->mode &= ~ENABLE;
++	writew(dev->mode, dev->reg_base_virt + REG_MODE);
++	readw(dev->reg_base_virt + REG_MODE);
++
++	if (ch_status == DMA_COMPLETE) {
++		struct vb2_buffer *vb = dev->current_vb;
++		struct timeval ts;
++
++		vb->v4l2_buf.field = dev->field;
++		dev->field_count++;
++		vb->v4l2_buf.sequence = dev->field_count >> 1;
++		do_gettimeofday(&ts);
++		vb->v4l2_buf.timestamp = ts;
++		vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
++		dev->current_vb = NULL;
++		dev->frame_cnt++;
++
++		/* check if we have new buffer queued */
++		dequeue_buffer_for_dma(dev);
++	} else {
++		printk(KERN_ERR "[cssp_camera]: EDMA error (ch_status = %d)\n", ch_status);
++		/* we got a missed interrupt so just start a new DMA with the existing buffer */
++		if (dev->current_vb != NULL)
++			trigger_dma_transfer_to_buf(dev, dev->current_vb);
++	}
++}
++
++static int configure_edma(struct cssp_cam_dev *cam)
++{
++	struct platform_device *pdev = cam->pdev;
++	int dma_channel;
++
++	dma_channel = ((struct cssp_cam_platform_data *)pdev->dev.platform_data)->dma_ch;
++
++	pdev->dev.dma_mask = &cam->dma_mask;
++
++	pdev->dev.coherent_dma_mask = (u32)~0;
++
++	if (dma_set_mask(&pdev->dev, (u32)~0)) {
++		printk(KERN_ERR "[%s]: failed setting mask for DMA\n", pdev->name);
++		return -1;
++	}
++
++	cam->dma_ch = edma_alloc_channel(dma_channel, dma_callback, cam, EVENTQ_1);
++	if (cam->dma_ch < 0) {
++		printk(KERN_ERR "[%s]: allocating channel for DMA failed\n", pdev->name);
++		return -EBUSY;
++	} else {
++		printk(KERN_ERR "[%s]: allocating channel for DMA succeeded, chan=%d\n", pdev->name, cam->dma_ch);
++	}
++
++	cam->dma_tr_params.opt = TCINTEN | TCC(cam->dma_ch);
++	cam->dma_tr_params.src = cam->reg_base_phys + REG_DATA;
++	cam->dma_tr_params.a_b_cnt = ACNT(BYTES_PER_DMA_EVT) | BCNT((VGA_WIDTH * BYTES_PER_PIXEL) / BYTES_PER_DMA_EVT);
++	cam->dma_tr_params.src_dst_bidx = SRCBIDX(0) | DSTBIDX(BYTES_PER_DMA_EVT);
++	cam->dma_tr_params.link_bcntrld = BCNTRLD((VGA_WIDTH * BYTES_PER_PIXEL) / BYTES_PER_DMA_EVT) | LINK(0xffff);
++	cam->dma_tr_params.src_dst_cidx = SRCCIDX(0) | DSTCIDX(BYTES_PER_DMA_EVT);
++	cam->dma_tr_params.ccnt = CCNT(VGA_HEIGHT);
++
++	return 0;
++}
++
++static int configure_cssp(struct cssp_cam_dev *cam)
++{
++	struct platform_device *pdev = cam->pdev;
++	int ret = 0;
++	unsigned int val;
++	struct resource *res;
++
++	ret = reset_cssp(cam);
++	if (ret)
++		return ret;
++
++	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "gpmc_phys_mem_slot");
++	if (res == NULL) {
++		printk(KERN_ERR "[%s]: failed to get gpmc_phys_mem_slot resource\n", pdev->name);
++		return -ENODEV;
++	}
++
++	/*
++	 * Request the region.
++	 */
++	if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
++		return -EBUSY;
++	}
++
++	cam->reg_base_phys = res->start;
++	cam->reg_size = resource_size(res);
++
++	cam->reg_base_virt = (unsigned int)ioremap(cam->reg_base_phys, cam->reg_size);
++	if (cam->reg_base_virt == 0) {
++		printk(KERN_ERR "[%s]: ioremap of registers region failed\n", pdev->name);
++		release_mem_region(cam->reg_base_phys, cam->reg_size);
++		return -ENOMEM;
++	}
++
++	printk(KERN_INFO "[%s]: reg_base_virt = 0x%x\n", pdev->name, cam->reg_base_virt);
++
++	val = readw(cam->reg_base_virt + REG_MODE);
++	printk(KERN_INFO "[%s]: reading register address=0x0 returns 0x%x\n", pdev->name, val);
++
++	return 0;
++}
++
++static int configure_camera_sensor(struct cssp_cam_dev *cam)
++{
++	struct i2c_board_info *info = cam->camera_board_info;
++	struct i2c_client *client;
++	struct i2c_adapter *adapter;
++	struct v4l2_subdev *subdev;
++	struct v4l2_mbus_framefmt f_format = {
++			.width = VGA_WIDTH,
++			.height = VGA_HEIGHT,
++			.code = V4L2_MBUS_FMT_YUYV8_2X8,
++			.colorspace = V4L2_COLORSPACE_JPEG,
++	};
++
++	/* Enable the clock just for the time of loading the camera driver and disable after that */
++	/* It is going to be be re-enabled later, when camera will be in use */
++	clk_enable(cam->camera_clk);
++	udelay(5); // let the clock stabilize
++
++	adapter	= i2c_get_adapter(((struct soc_camera_link *)(info->platform_data))->i2c_adapter_id);
++	if (!adapter) {
++		printk(KERN_INFO "[%s]: failed to get adapter...\n", __func__);
++		return -ENODEV;
++	}
++
++	client = i2c_new_device(adapter, info);
++	i2c_put_adapter(adapter);
++
++	if (client == NULL) {
++		return -ENODEV;
++	}
++
++	printk(KERN_INFO "[%s]: client's name is: %s\n", __func__, client->name);
++
++	subdev = (struct v4l2_subdev *)i2c_get_clientdata(client);
++	if (subdev == NULL) {
++		i2c_unregister_device(client);
++		return -ENODEV;
++	}
++
++	cam->subdev = subdev;
++
++	v4l2_subdev_call(subdev, video, s_mbus_fmt, &f_format);
++
++	clk_disable(cam->camera_clk);
++
++	return 0;
++}
++
++static int start_camera_sensor(struct cssp_cam_dev *cam)
++{
++	clk_enable(cam->camera_clk);
++	udelay(5); /* let the clock stabilize */
++
++	v4l2_subdev_call(cam->subdev, video, s_stream, 1);
++
++	return 0;
++}
++
++static void stop_camera_sensor(struct cssp_cam_dev *cam)
++{
++	v4l2_subdev_call(cam->subdev, video, s_stream, 0);
++
++	clk_disable(cam->camera_clk);
++
++	return;
++}
++
++
++/************************************************
++ * 				Video4Linux2
++ */
++
++static struct cssp_cam_fmt *get_format(struct v4l2_format *f)
++{
++	struct cssp_cam_fmt *fmt;
++	unsigned int k;
++
++	for (k = 0; k < ARRAY_SIZE(formats); k++) {
++		fmt = &formats[k];
++		if (fmt->fourcc == f->fmt.pix.pixelformat)
++			break;
++	}
++
++	if (k == ARRAY_SIZE(formats))
++		return NULL;
++
++	return &formats[k];
++}
++
++
++/* ------------------------------------------------------------------
++	Videobuf operations
++   ------------------------------------------------------------------*/
++
++static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
++				unsigned int *nbuffers, unsigned int *nplanes,
++				unsigned int sizes[], void *alloc_ctxs[])
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	unsigned long size;
++
++	size = dev->sizeimage;
++
++	if (0 == *nbuffers)
++		*nbuffers = 32;
++
++	while (size * *nbuffers > vid_limit * 1024 * 1024)
++		(*nbuffers)--;
++
++	*nplanes = 1;
++
++	sizes[0] = size;
++
++	alloc_ctxs[0] = dev->dma_cont_ctx;
++
++	dprintk(dev, 1, "%s, count=%d, size=%ld\n", __func__, *nbuffers, size);
++
++	return 0;
++}
++
++static int buffer_init(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++
++	BUG_ON(NULL == dev->fmt);
++
++	/*
++	 * This callback is called once per buffer, after its allocation.
++	 *
++	 * Vivi does not allow changing format during streaming, but it is
++	 * possible to do so when streaming is paused (i.e. in streamoff state).
++	 * Buffers however are not freed when going into streamoff and so
++	 * buffer size verification has to be done in buffer_prepare, on each
++	 * qbuf.
++	 * It would be best to move verification code here to buf_init and
++	 * s_fmt though.
++	 */
++
++	return 0;
++}
++
++static int buffer_prepare(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	struct cssp_cam_buffer *buf = container_of(vb, struct cssp_cam_buffer, vb);
++	unsigned long size;
++
++	dprintk(dev, 1, "%s, field=%d\n", __func__, vb->v4l2_buf.field);
++
++	BUG_ON(NULL == dev->fmt);
++
++	/*
++	 * Theses properties only change when queue is idle, see s_fmt.
++	 * The below checks should not be performed here, on each
++	 * buffer_prepare (i.e. on each qbuf). Most of the code in this function
++	 * should thus be moved to buffer_init and s_fmt.
++	 */
++	if (dev->width  < 48 || dev->width  > MAX_WIDTH ||
++	    dev->height < 32 || dev->height > MAX_HEIGHT)
++		return -EINVAL;
++
++	size = dev->sizeimage;
++	if (vb2_plane_size(vb, 0) < size) {
++		dprintk(dev, 1, "%s data will not fit into plane (%lu < %lu)\n",
++				__func__, vb2_plane_size(vb, 0), size);
++		return -EINVAL;
++	}
++
++	vb2_set_plane_payload(&buf->vb, 0, size);
++
++	buf->fmt = dev->fmt;
++
++	return 0;
++}
++
++static int buffer_finish(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	dprintk(dev, 1, "%s\n", __func__);
++	return 0;
++}
++
++static void buffer_cleanup(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	dprintk(dev, 1, "%s\n", __func__);
++}
++
++static void buffer_queue(struct vb2_buffer *vb)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
++	struct cssp_cam_buffer *buf = container_of(vb, struct cssp_cam_buffer, vb);
++	struct cssp_cam_dmaqueue *vidq = &dev->vidq;
++	unsigned long flags = 0;
++
++	dprintk(dev, 1, "%s\n", __func__);
++
++	if (dev->streaming_started && !dev->current_vb) {
++		trigger_dma_transfer_to_buf(dev, &buf->vb);
++	} else {
++		spin_lock_irqsave(&dev->slock, flags);
++		list_add_tail(&buf->list, &vidq->active);
++		spin_unlock_irqrestore(&dev->slock, flags);
++	}
++}
++
++static int start_streaming(struct vb2_queue *vq, unsigned int count)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	int ret;
++
++	dprintk(dev, 1, "%s\n", __func__);
++
++	ret = start_camera_sensor(dev);
++	if (ret != 0)
++		return ret;
++
++	// Enable DMA
++	edma_start(dev->dma_ch);
++
++	dev->streaming_started = 1;
++
++	/* check if we have new buffer queued */
++	dequeue_buffer_for_dma(dev);
++
++	return 0;
++}
++
++/* abort streaming and wait for last buffer */
++static int stop_streaming(struct vb2_queue *vq)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	struct cssp_cam_dmaqueue *dma_q = &dev->vidq;
++
++	dprintk(dev, 1, "%s\n", __func__);
++
++	// Disable DMA
++	edma_stop(dev->dma_ch);
++
++	// Disable data capture
++	dev->mode &= ~ENABLE;
++	writew(dev->mode, dev->reg_base_virt + REG_MODE);
++	readw(dev->reg_base_virt + REG_MODE);
++
++	stop_camera_sensor(dev);
++
++	dev->streaming_started = 0;
++
++	/* Release all active buffers */
++	while (!list_empty(&dma_q->active)) {
++		struct cssp_cam_buffer *buf;
++
++		buf = list_entry(dma_q->active.next, struct cssp_cam_buffer, list);
++		list_del(&buf->list);
++		vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
++		dprintk(dev, 2, "[%p/%d] done\n", buf, buf->vb.v4l2_buf.index);
++	}
++
++	dev->current_vb = NULL;
++
++	return 0;
++}
++
++static void cssp_cam_lock(struct vb2_queue *vq)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	mutex_lock(&dev->mutex);
++}
++
++static void cssp_cam_unlock(struct vb2_queue *vq)
++{
++	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
++	mutex_unlock(&dev->mutex);
++}
++
++static struct vb2_ops cssp_cam_video_qops = {
++	.queue_setup		= queue_setup,
++	.buf_init		= buffer_init,
++	.buf_prepare		= buffer_prepare,
++	.buf_finish		= buffer_finish,
++	.buf_cleanup		= buffer_cleanup,
++	.buf_queue		= buffer_queue,
++	.start_streaming	= start_streaming,
++	.stop_streaming		= stop_streaming,
++	.wait_prepare		= cssp_cam_unlock,
++	.wait_finish		= cssp_cam_lock,
++};
++
++
++/* ------------------------------------------------------------------
++	IOCTL vidioc handling
++   ------------------------------------------------------------------*/
++
++static int vidioc_querycap(struct file *file, void *priv,
++					struct v4l2_capability *cap)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	strcpy(cap->driver, "cssp_camera");
++	strcpy(cap->card, "cssp_camera");
++	strlcpy(cap->bus_info, dev->v4l2_dev.name, sizeof(cap->bus_info));
++	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
++			    V4L2_CAP_READWRITE;
++	return 0;
++}
++
++static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
++					struct v4l2_fmtdesc *f)
++{
++	struct cssp_cam_fmt *fmt;
++
++	if (f->index >= ARRAY_SIZE(formats))
++		return -EINVAL;
++
++	fmt = &formats[f->index];
++
++	strlcpy(f->description, fmt->name, sizeof(f->description));
++	f->pixelformat = fmt->fourcc;
++	return 0;
++}
++
++static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
++					struct v4l2_format *f)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	f->fmt.pix.width	= dev->width;
++	f->fmt.pix.height	= dev->height;
++	f->fmt.pix.field	= dev->field;
++	f->fmt.pix.pixelformat	= dev->fmt->fourcc;
++	f->fmt.pix.bytesperline	= dev->bytesperline;
++	f->fmt.pix.sizeimage	= dev->sizeimage;
++	f->fmt.pix.colorspace	= dev->colorspace;
++
++	return 0;
++}
++
++static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
++			struct v4l2_format *f)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	struct cssp_cam_fmt *fmt;
++	struct v4l2_mbus_framefmt mbus_fmt;
++	struct v4l2_pix_format *pix = &f->fmt.pix;
++
++	fmt = get_format(f);
++	if (!fmt) {
++		dprintk(dev, 1, "Fourcc format (0x%08x) invalid.\n",
++			f->fmt.pix.pixelformat);
++		return -EINVAL;
++	}
++
++	v4l2_fill_mbus_format(&mbus_fmt, pix, fmt->code);
++	v4l2_subdev_call(dev->subdev, video, try_mbus_fmt, &mbus_fmt);
++	v4l2_fill_pix_format(pix, &mbus_fmt);
++	pix->bytesperline = (pix->width * fmt->depth) >> 3;
++	pix->sizeimage = pix->height * pix->bytesperline;
++
++	return 0;
++}
++
++static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
++					struct v4l2_format *f)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	struct vb2_queue *q = &dev->vb_vidq;
++	struct v4l2_pix_format *pix = &f->fmt.pix;
++	struct v4l2_mbus_framefmt mbus_fmt;
++
++	int ret = vidioc_try_fmt_vid_cap(file, priv, f);
++	if (ret < 0)
++		return ret;
++
++	if (vb2_is_streaming(q)) {
++		dprintk(dev, 1, "%s device busy\n", __func__);
++		return -EBUSY;
++	}
++
++	dev->fmt = get_format(f);
++	dev->width = f->fmt.pix.width;
++	dev->height = f->fmt.pix.height;
++	dev->field = f->fmt.pix.field;
++	dev->colorspace = f->fmt.pix.colorspace;
++	dev->bytesperline = f->fmt.pix.bytesperline;
++	dev->sizeimage = f->fmt.pix.sizeimage;
++
++	/* Set the sensor into the new format */
++	v4l2_fill_mbus_format(&mbus_fmt, pix, dev->fmt->code);
++	v4l2_subdev_call(dev->subdev, video, s_mbus_fmt, &mbus_fmt);
++
++	/* Set the EDMA for the new resolution */
++	dev->dma_tr_params.a_b_cnt = ACNT(BYTES_PER_DMA_EVT) | BCNT(dev->bytesperline / BYTES_PER_DMA_EVT);
++	dev->dma_tr_params.link_bcntrld = BCNTRLD(dev->bytesperline / BYTES_PER_DMA_EVT) | LINK(0xffff);
++	dev->dma_tr_params.ccnt = CCNT(dev->height);
++
++	return 0;
++}
++
++static int vidioc_reqbufs(struct file *file, void *priv,
++			  struct v4l2_requestbuffers *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_reqbufs(&dev->vb_vidq, p);
++}
++
++static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_querybuf(&dev->vb_vidq, p);
++}
++
++static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_qbuf(&dev->vb_vidq, p);
++}
++
++static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_dqbuf(&dev->vb_vidq, p, file->f_flags & O_NONBLOCK);
++}
++
++static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_streamon(&dev->vb_vidq, i);
++}
++
++static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	return vb2_streamoff(&dev->vb_vidq, i);
++}
++
++static int vidioc_log_status(struct file *file, void *priv)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	v4l2_ctrl_handler_log_status(&dev->ctrl_handler, dev->v4l2_dev.name);
++	return 0;
++}
++
++static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
++{
++	return 0;
++}
++
++/* only one input in this sample driver */
++static int vidioc_enum_input(struct file *file, void *priv,
++				struct v4l2_input *inp)
++{
++	return -EINVAL;
++
++	inp->type = V4L2_INPUT_TYPE_CAMERA;
++	inp->std = V4L2_STD_525_60;
++	sprintf(inp->name, "Camera %u", inp->index);
++	return 0;
++}
++
++static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	*i = dev->input;
++
++	return 0;
++}
++
++static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++
++	return -EINVAL;
++
++	if (i == dev->input)
++		return 0;
++
++	dev->input = i;
++
++	return 0;
++}
++
++static int vidioc_subscribe_event(struct v4l2_fh *fh,
++				struct v4l2_event_subscription *sub)
++{
++	switch (sub->type) {
++	case V4L2_EVENT_CTRL:
++		return v4l2_event_subscribe(fh, sub, 0);
++	default:
++		return -EINVAL;
++	}
++}
++
++static const struct v4l2_ioctl_ops cssp_cam_ioctl_ops = {
++	.vidioc_querycap		= vidioc_querycap,
++	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid_cap,
++	.vidioc_g_fmt_vid_cap		= vidioc_g_fmt_vid_cap,
++	.vidioc_try_fmt_vid_cap		= vidioc_try_fmt_vid_cap,
++	.vidioc_s_fmt_vid_cap		= vidioc_s_fmt_vid_cap,
++	.vidioc_reqbufs			= vidioc_reqbufs,
++	.vidioc_querybuf		= vidioc_querybuf,
++	.vidioc_qbuf			= vidioc_qbuf,
++	.vidioc_dqbuf			= vidioc_dqbuf,
++	.vidioc_s_std			= vidioc_s_std,
++	.vidioc_enum_input		= vidioc_enum_input,
++	.vidioc_g_input			= vidioc_g_input,
++	.vidioc_s_input			= vidioc_s_input,
++	.vidioc_streamon		= vidioc_streamon,
++	.vidioc_streamoff		= vidioc_streamoff,
++	.vidioc_log_status		= vidioc_log_status,
++	.vidioc_subscribe_event		= vidioc_subscribe_event,
++	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
++};
++
++
++/* ------------------------------------------------------------------
++	File operations
++   ------------------------------------------------------------------*/
++
++static unsigned int video_poll(struct file *file, struct poll_table_struct *wait)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	struct v4l2_fh *fh = file->private_data;
++	struct vb2_queue *q = &dev->vb_vidq;
++	unsigned int res;
++
++	dprintk(dev, 1, "%s\n", __func__);
++	res = vb2_poll(q, file, wait);
++	if (v4l2_event_pending(fh))
++		res |= POLLPRI;
++	else
++		poll_wait(file, &fh->wait, wait);
++	return res;
++}
++
++static int video_mmap(struct file *file, struct vm_area_struct *vma)
++{
++	struct cssp_cam_dev *dev = video_drvdata(file);
++	int ret;
++
++	dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
++
++	ret = vb2_mmap(&dev->vb_vidq, vma);
++	dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
++		(unsigned long)vma->vm_start,
++		(unsigned long)vma->vm_end - (unsigned long)vma->vm_start,
++		ret);
++	return ret;
++}
++
++static ssize_t video_read(struct file *file, char __user *buf, size_t size, loff_t *offset)
++{
++	struct cssp_cam_dev *cam_dev = video_drvdata(file);
++
++	dprintk(cam_dev, 1, "read called\n");
++	return vb2_read(&cam_dev->vb_vidq, buf, size, offset, file->f_flags & O_NONBLOCK);
++}
++
++static int video_close(struct file *file)
++{
++	struct video_device *vdev = video_devdata(file);
++	struct cssp_cam_dev *cam_dev = video_drvdata(file);
++
++	dprintk(cam_dev, 1, "close called (dev=%s), file %p\n",
++		video_device_node_name(vdev), file);
++
++	if (v4l2_fh_is_singular_file(file))
++		vb2_queue_release(&cam_dev->vb_vidq);
++	return v4l2_fh_release(file);
++}
++
++static const struct v4l2_file_operations cssp_cam_fops = {
++	.owner		= THIS_MODULE,
++	.open		= v4l2_fh_open,
++	.release	= video_close,
++	.read		= video_read,
++	.poll		= video_poll,
++	.unlocked_ioctl	= video_ioctl2,
++	.mmap		= video_mmap,
++};
++
++
++/* ------------------------------------------------------------------
++	Driver initialization
++   ------------------------------------------------------------------*/
++
++static struct video_device cssp_cam_template = {
++	.name		= "cssp_camera",
++	.fops		= &cssp_cam_fops,
++	.ioctl_ops	= &cssp_cam_ioctl_ops,
++	.minor		= -1,
++	.release	= video_device_release,
++	.tvnorms	= V4L2_STD_525_60,
++	.current_norm	= V4L2_STD_NTSC_M,
++};
++
++static int __init  video_probe(struct cssp_cam_dev *cam_dev)
++{
++	struct video_device *vfd;
++	struct v4l2_ctrl_handler *hdl;
++	struct vb2_queue *q;
++	int ret = 0;
++
++	snprintf(cam_dev->v4l2_dev.name, sizeof(cam_dev->v4l2_dev.name),
++			"%s-%03d", "cssp_camera", 0);
++	ret = v4l2_device_register(NULL, &cam_dev->v4l2_dev);
++	if (ret)
++		goto free_dev;
++
++	cam_dev->fmt = &formats[0];
++	cam_dev->width = VGA_WIDTH;
++	cam_dev->height = VGA_HEIGHT;
++	cam_dev->sizeimage = VGA_WIDTH * VGA_HEIGHT * BYTES_PER_PIXEL;
++	hdl = &cam_dev->ctrl_handler;
++	v4l2_ctrl_handler_init(hdl, 0);
++
++	if (hdl->error) {
++		ret = hdl->error;
++		goto unreg_dev;
++	}
++	cam_dev->v4l2_dev.ctrl_handler = hdl;
++
++	/* initialize locks */
++	spin_lock_init(&cam_dev->slock);
++
++	/* initialize queue */
++	q = &cam_dev->vb_vidq;
++	memset(q, 0, sizeof(cam_dev->vb_vidq));
++	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++	q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
++	q->drv_priv = cam_dev;
++	q->buf_struct_size = sizeof(struct cssp_cam_buffer);
++	q->ops = &cssp_cam_video_qops;
++	q->mem_ops = &vb2_dma_contig_memops;
++
++	vb2_queue_init(q);
++
++	mutex_init(&cam_dev->mutex);
++
++	/* init video dma queues */
++	INIT_LIST_HEAD(&cam_dev->vidq.active);
++
++	ret = -ENOMEM;
++	vfd = video_device_alloc();
++	if (!vfd)
++		goto unreg_dev;
++
++	*vfd = cssp_cam_template;
++	vfd->debug = debug;
++	vfd->v4l2_dev = &cam_dev->v4l2_dev;
++	set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
++
++	/*
++	 * Provide a mutex to v4l2 core. It will be used to protect
++	 * all fops and v4l2 ioctls.
++	 */
++	vfd->lock = &cam_dev->mutex;
++
++	ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
++	if (ret < 0)
++		goto rel_vdev;
++
++	video_set_drvdata(vfd, cam_dev);
++
++	if (video_nr != -1)
++		video_nr++;
++
++	cam_dev->vdev = vfd;
++	v4l2_info(&cam_dev->v4l2_dev, "V4L2 device registered as %s\n",
++	video_device_node_name(vfd));
++
++	return 0;
++
++rel_vdev:
++	video_device_release(vfd);
++unreg_dev:
++	v4l2_ctrl_handler_free(hdl);
++	v4l2_device_unregister(&cam_dev->v4l2_dev);
++free_dev:
++	return ret;
++}
++
++static int video_remove(struct cssp_cam_dev *cam_dev)
++{
++	if (cam_dev->dma_cont_ctx != NULL)
++		vb2_dma_contig_cleanup_ctx(cam_dev->dma_cont_ctx);
++
++	v4l2_info(&cam_dev->v4l2_dev, "unregistering %s\n",
++			video_device_node_name(cam_dev->vdev));
++	video_unregister_device(cam_dev->vdev);
++	v4l2_device_unregister(&cam_dev->v4l2_dev);
++	v4l2_ctrl_handler_free(&cam_dev->ctrl_handler);
++
++	return 0;
++}
++
++static int __init  cssp_cam_probe(struct platform_device *pdev)
++{
++	struct cssp_cam_dev *cam_dev;
++	int ret = 0;
++	struct cssp_cam_platform_data *cssp_cam_platform_data;
++
++	cssp_cam_platform_data = (struct cssp_cam_platform_data *) pdev->dev.platform_data;
++	if (cssp_cam_platform_data == NULL) {
++		printk(KERN_ERR "[%s]: missing platform data\n", pdev->name);
++		return -ENODEV;
++	}
++
++	if (cssp_cam_platform_data->cam_i2c_board_info == NULL) {
++		printk(KERN_ERR "[%s]: missing camera i2c board info\n", pdev->name);
++		return -ENODEV;
++	}
++
++	cam_dev = kzalloc(sizeof(*cam_dev), GFP_KERNEL);
++	if (!cam_dev)
++		return -ENOMEM;
++
++	cam_dev->pdev = pdev;
++	platform_set_drvdata(pdev, cam_dev);
++
++	cam_dev->camera_board_info = cssp_cam_platform_data->cam_i2c_board_info;
++
++	cam_dev->camera_clk = clk_get(&pdev->dev, cssp_cam_platform_data->cam_clk_name);
++	if (IS_ERR(cam_dev->camera_clk)) {
++		ret = PTR_ERR(cam_dev->camera_clk);
++		printk(KERN_ERR "[%s]: cannot clk_get %s\n", pdev->name, cssp_cam_platform_data->cam_clk_name);
++		goto fail0;
++	}
++
++	ret = configure_cssp(cam_dev);
++	if (ret)
++		goto fail1;
++
++	ret = configure_edma(cam_dev);
++	if (ret)
++		goto fail2;
++
++	cam_dev->mode = FMT_2X8_EN | PCLK_POL | HS_EN;
++
++	ret = configure_camera_sensor(cam_dev);
++	if (ret) {
++		printk(KERN_ERR "[%s]: camera sensor configuration failed\n", pdev->name);
++		goto fail3;
++	}
++
++	cam_dev->dma_cont_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
++	if (IS_ERR(cam_dev->dma_cont_ctx)) {
++		ret = PTR_ERR(cam_dev->dma_cont_ctx);
++		goto fail3;
++	}
++
++	ret = video_probe(cam_dev);
++	if (ret)
++		goto fail4;
++
++	return ret;
++
++fail4:
++	vb2_dma_contig_cleanup_ctx(cam_dev->dma_cont_ctx);
++
++fail3:
++	edma_free_channel(cam_dev->dma_ch);
++
++fail2:
++	gpio_free(cam_dev->reset_pin);
++	iounmap((void *)cam_dev->reg_base_virt);
++	release_mem_region(cam_dev->reg_base_phys, cam_dev->reg_size);
++
++fail1:
++	clk_put(cam_dev->camera_clk);
++
++fail0:
++	kfree(cam_dev);
++
++	return ret;
++}
++
++static int cssp_cam_remove(struct platform_device *pdev)
++{
++	struct cssp_cam_dev *cam = platform_get_drvdata(pdev);
++
++	iounmap((void *)cam->reg_base_virt);
++
++	release_mem_region(cam->reg_base_phys, cam->reg_size);
++
++	gpio_free(cam->reset_pin);
++
++	edma_free_channel(cam->dma_ch);
++
++	video_remove(cam);
++
++	clk_put(cam->camera_clk);
++
++	kfree(cam);
++
++	printk(KERN_INFO "[%s]: removed\n", pdev->name);
++
++	return 0;
++}
++
++
++static struct platform_driver cssp_cam_driver = {
++	.probe		= cssp_cam_probe,
++	.remove		= __devexit_p(cssp_cam_remove),
++	.driver		= {
++		.name	= "cssp-camera",
++		.owner	= THIS_MODULE,
++	},
++};
++
++
++static int __init cssp_cam_init(void)
++{
++	return platform_driver_register(&cssp_cam_driver);
++}
++
++static void __exit cssp_cam_exit(void)
++{
++	platform_driver_unregister(&cssp_cam_driver);
++}
++
++
++module_init(cssp_cam_init);
++module_exit(cssp_cam_exit);
++
++/*
++ * Macros sets license, author and description
++ */
++MODULE_LICENSE("GPLv2");
++MODULE_AUTHOR("Dan Aizenstros, Damian Eppel, Przemek Szewczyk");
++MODULE_DESCRIPTION("QuickLogic Camera Interface driver");
++
+diff --git a/drivers/media/video/cssp_camera/cssp_camera.h b/drivers/media/video/cssp_camera/cssp_camera.h
+new file mode 100644
+index 0000000..d018ca1
+--- /dev/null
++++ b/drivers/media/video/cssp_camera/cssp_camera.h
+@@ -0,0 +1,148 @@
++/*
++ * cssp-camera driver
++ *
++ * Based on Vivi driver
++ *
++ * Copyright (C) 2012 QuickLogic Corp.
++ *
++ * Developed for QuickLogic by:
++ * Damian Eppel <damian.eppel@teleca.com>
++ * Przemek Szewczyk <przemek.szewczyk@teleca.com>
++ * Dan Aizenstros <daizenstros@quicklogic.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#ifndef CSSP_CAMERA_H
++#define CSSP_CAMERA_H
++
++
++static unsigned video_nr = -1;
++module_param(video_nr, uint, 0644);
++MODULE_PARM_DESC(video_nr, "videoX start number, -1 is autodetect");
++
++static unsigned debug;
++module_param(debug, uint, 0644);
++MODULE_PARM_DESC(debug, "activates debug info");
++
++static unsigned int vid_limit = 1;
++module_param(vid_limit, uint, 0644);
++MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
++
++#define dprintk(dev, level, fmt, arg...) \
++	v4l2_dbg(level, debug, &dev->v4l2_dev, fmt, ## arg)
++
++#define VGA_WIDTH 640
++#define VGA_HEIGHT 480
++
++#define MAX_WIDTH 2048
++#define MAX_HEIGHT 1536
++
++#define VGA_RES (VGA_WIDTH * VGA_HEIGHT)
++#define BYTES_PER_PIXEL 2
++#define BYTES_PER_DMA_EVT 32
++
++/* PaRAM.opt: */
++#define TCC(v) (((v) & 0x3f) << 12)
++/* PaRAM.a_b_cnt: */
++#define ACNT(v) ((v) & 0xffff)
++#define BCNT(v) (((v) & 0xffff) << 16)
++/* PaRAM.src_dst_bidx: */
++#define SRCBIDX(v) ((v) & 0xffff)
++#define DSTBIDX(v) (((v) & 0xffff) << 16)
++/* PaRAM.link_bcntrld: */
++#define LINK(v) ((v) & 0xffff)
++#define BCNTRLD(v) (((v) & 0xffff) << 16)
++/* PaRAM.src_dst_cidx: */
++#define SRCCIDX(v) ((v) & 0xffff)
++#define DSTCIDX(v) (((v) & 0xffff) << 16)
++/* PaRAM.ccnt: */
++#define CCNT(v) ((v) & 0xffff)
++
++
++struct cssp_cam_platform_data {
++	struct i2c_board_info *cam_i2c_board_info;
++	const char *cam_clk_name;
++	int dma_ch;
++	int gpio_reset_pin;
++};
++
++
++/* ------------------------------------------------------------------
++	video Basic structures
++   ------------------------------------------------------------------*/
++
++struct cssp_cam_fmt {
++	char	*name;
++	u32	fourcc;          /* v4l2 format id */
++	int	depth;
++	enum v4l2_mbus_pixelcode code;
++};
++
++/* buffer for one video frame */
++struct cssp_cam_buffer {
++	/* common v4l buffer stuff -- must be first */
++	struct vb2_buffer	vb;
++	struct list_head	list;
++	struct cssp_cam_fmt	*fmt;
++};
++
++struct cssp_cam_dmaqueue {
++	struct list_head	active;
++};
++
++struct cssp_cam_dev {
++	struct v4l2_device		v4l2_dev;
++	struct v4l2_ctrl_handler	ctrl_handler;
++	struct v4l2_subdev		*subdev;
++
++	spinlock_t			slock;
++	struct mutex			mutex;
++
++	/* various device info */
++	struct video_device		*vdev;
++	struct platform_device		*pdev;
++
++	struct cssp_cam_dmaqueue	vidq;
++	void				*dma_cont_ctx;
++	int				streaming_started;
++	struct vb2_buffer		*current_vb;
++
++	/* Input Number */
++	int				input;
++
++	/* video capture */
++	struct cssp_cam_fmt		*fmt;
++	u32				width;
++	u32				height;
++	u32				bytesperline;
++	u32				sizeimage;
++	enum v4l2_colorspace		colorspace;
++	struct vb2_queue		vb_vidq;
++	enum v4l2_field			field;
++	unsigned int			field_count;
++
++
++	/* Camera Sensor */
++	struct i2c_board_info		*camera_board_info;
++	struct clk			*camera_clk;
++
++	unsigned int			reg_base_virt;
++	unsigned int			reg_base_phys;
++	resource_size_t			reg_size;
++	u16				mode;
++
++	struct edmacc_param		dma_tr_params;
++	int				dma_ch;
++	u64				dma_mask;
++
++	int				frame_cnt;
++
++	int				reset_pin;
++};
++
++
++#endif /* CSSP_CAMERA_H */
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch
deleted file mode 100644
index a916ad5..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0072-beaglebone-fix-audio-spi-clash.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 45ddec832968e3c1e31cf38a891372ba80027e2d Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 26 Jun 2012 08:39:04 +0200
-Subject: [PATCH] beaglebone: fix audio/spi clash
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-am335xevm.c |    3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index f6559b6..d0681a2 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -2910,6 +2910,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 		
- 		beaglebone_leds_free = 0;
- 		dvileds_init(0,0);
-+		beaglebone_spi1_free = 0;
- 		mcasp0_init(0,0);
- 	
- 		if (!strncmp("00A1", cape_config.version, 4) || !strncmp("000A", cape_config.version, 4)) {
--- 
-1.7.10
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
new file mode 100644
index 0000000..051a727
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
@@ -0,0 +1,64 @@
+From 040c37e89e6a7a7311a470bda281e1163559173c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 3 Jul 2012 08:45:47 +0200
+Subject: [PATCH 73/79] beaglebone: add support for DVI+audio and audio-only
+ capes
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |   32 ++++++++++++++++++++++++++++++--
+ 1 file changed, 30 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index 22a740f..bf40ac9 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -2881,8 +2881,10 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		
+ 		beaglebone_leds_free = 0;
+ 		dvileds_init(0,0);
+-		beaglebone_spi1_free = 0;
+-		mcasp0_init(0,0);
++
++		// Uncomment these for custom DVI capes with audio populated
++		//beaglebone_spi1_free = 0;
++		//mcasp0_init(0,0);
+ 	
+ 		if (!strncmp("00A1", cape_config.version, 4) || !strncmp("000A", cape_config.version, 4)) {
+ 			pr_info("BeagleBone cape: DVI init for revision A1 or older\n");
+@@ -2898,6 +2900,32 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 			dvi_init(0,0);
+ 		}
+ 	}
++
++	if (!strncmp("BB-BONE-DVID-02", cape_config.partnumber, 15)) {
++		pr_info("BeagleBone cape: initializing DVI+audio cape\n");
++
++		beaglebone_leds_free = 0;
++		dvileds_init(0,0);
++
++		beaglebone_spi1_free = 0;
++		mcasp0_init(0,0);
++	
++		setup_pin_mux(dvia2_pin_mux);
++		gpio_request(BEAGLEBONEDVI_PDn_A2, "DVI_PDn");
++		gpio_direction_output(BEAGLEBONEDVI_PDn_A2, 1);
++		dvi_init(0,0);
++	}
++
++	if (!strncmp("BB-BONE-AUDI-01", cape_config.partnumber, 15)) {
++		pr_info("BeagleBone cape: initializing audio cape\n");
++
++		beaglebone_leds_free = 0;
++		dvileds_init(0,0);
++
++		beaglebone_spi1_free = 0;
++		mcasp0_init(0,0);
++	}
++
+ 	if (!strncmp("BB-BONE-LCD7-01", cape_config.partnumber, 15)) {
+ 		pr_info("BeagleBone cape: initializing LCD cape\n");
+ 
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
deleted file mode 100644
index 48ac34b..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch
+++ /dev/null
@@ -1,1612 +0,0 @@
-From cf35e6b861c3c7d4d9c9db1557ba27b5578e8aa2 Mon Sep 17 00:00:00 2001
-From: Dan Aizenstros <daizenstros@quicklogic.com>
-Date: Fri, 29 Jun 2012 13:57:49 -0400
-Subject: [PATCH] beaglebone: add support for QuickLogic Camera interface on
- camera cape
-
-Signed-off-by: Dan Aizenstros <daizenstros@quicklogic.com>
----
- arch/arm/mach-omap2/board-am335xevm.c         |  205 ++++-
- arch/arm/mach-omap2/devices.c                 |    2 +-
- arch/arm/plat-omap/include/plat/dma-33xx.h    |    1 +
- drivers/media/video/Kconfig                   |    7 +
- drivers/media/video/Makefile                  |    2 +
- drivers/media/video/cssp_camera/Makefile      |    3 +
- drivers/media/video/cssp_camera/cssp_camera.c | 1119 +++++++++++++++++++++++++
- drivers/media/video/cssp_camera/cssp_camera.h |  148 ++++
- 8 files changed, 1478 insertions(+), 9 deletions(-)
- create mode 100644 drivers/media/video/cssp_camera/Makefile
- create mode 100644 drivers/media/video/cssp_camera/cssp_camera.c
- create mode 100644 drivers/media/video/cssp_camera/cssp_camera.h
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index dc78b4a..1680612 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -66,6 +66,10 @@
- #include <plat/mmc.h>
- #include <plat/emif.h>
- #include <plat/nand.h>
-+#include <plat/dma-33xx.h>
-+
-+#include <media/soc_camera.h>
-+#include <media/mt9t112.h>
- 
- #include "board-flash.h"
- #include "cpuidle33xx.h"
-@@ -804,6 +808,42 @@ static struct pinmux_config i2c1_pin_mux[] = {
- 	{NULL, 0},
- };
- 
-+/* Pin mux for GPMC bus */
-+static struct pinmux_config gpmc_pin_mux[] = {
-+	{"gpmc_ad0.gpmc_ad0",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad1.gpmc_ad1",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad2.gpmc_ad2",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad3.gpmc_ad3",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad4.gpmc_ad4",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad5.gpmc_ad5",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad6.gpmc_ad6",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad7.gpmc_ad7",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad8.gpmc_ad8",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad9.gpmc_ad9",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad10.gpmc_ad10",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad11.gpmc_ad11",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad12.gpmc_ad12",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad13.gpmc_ad13",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad14.gpmc_ad14",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_ad15.gpmc_ad15",	  OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_wait0.gpmc_wait0", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_wpn.gpmc_wpn",	  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
-+	{"gpmc_csn1.gpmc_csn1",	  OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
-+	{"gpmc_advn_ale.gpmc_advn_ale",  OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
-+	{"gpmc_oen_ren.gpmc_oen_ren",	 OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
-+	{"gpmc_wen.gpmc_wen",     OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
-+	{"gpmc_ben0_cle.gpmc_ben0_cle",	 OMAP_MUX_MODE0 | AM33XX_PULL_DISA},
-+	{"gpmc_clk.gpmc_clk",	 OMAP_MUX_MODE0 | AM33XX_PIN_INPUT},
-+	{"ecap0_in_pwm0_out.xdma_event_intr2", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT}, // DMAREQ
-+	{NULL, 0},
-+};
-+
-+static struct pinmux_config camera_cape_pin_mux[] = {
-+	{"spi0_d1.gpio0_4",    OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT },		// QL CSSP and Camera Sensor Reset
-+	{"spi0_cs0.gpio0_5",   OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP },	// 1V8 and 2V8 Power Enable
-+	{NULL, 0},
-+};
-+
- static struct pinmux_config i2c2_pin_mux[] = {
- 	{"uart1_ctsn.i2c2_sda",    OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
- 					AM33XX_PIN_INPUT_PULLUP},
-@@ -1803,6 +1843,156 @@ static void dvileds_init(int evm_id, int profile )
- 		pr_err("failed to register BeagleBone DVI cape LEDS\n");
- }
- 
-+static struct resource cssp_camera_resources[] = {
-+	{
-+		.name = "gpmc_phys_mem_slot",
-+		.flags = IORESOURCE_MEM,
-+	},
-+};
-+
-+static struct mt9t112_camera_info mt9t111_cam_info = {
-+	/* divider calculated for 32Mhz CAM_MCLK */
-+	.divider = {
-+		.m = 24, .n = 1,
-+		.p1 = 0, .p2 = 7, .p3 = 0, .p4 = 11, .p5 = 15, .p6 = 7, .p7 = 0,
-+	},
-+};
-+
-+static struct soc_camera_link mt9t111_camera_link =  {
-+	.priv = &mt9t111_cam_info,
-+	.i2c_adapter_id = 3,
-+};
-+
-+static struct i2c_board_info i2c_camera = {
-+	I2C_BOARD_INFO("mt9t112", 0x3c),
-+	.platform_data = &mt9t111_camera_link,
-+};
-+
-+struct cssp_cam_platform_data {
-+	struct i2c_board_info *cam_i2c_board_info;
-+	const char *cam_clk_name;
-+	int dma_ch;
-+	int cssp_reset_pin;
-+};
-+
-+static struct cssp_cam_platform_data cssp_cam_platform_data = {
-+	.cam_i2c_board_info = &i2c_camera,
-+	.cam_clk_name = "clkout2_ck",
-+	.dma_ch = AM33XX_DMA_XDMA_EVENT_INTR2,
-+	.cssp_reset_pin = GPIO_TO_PIN(0, 4),
-+};
-+
-+static struct platform_device cssp_camera = {
-+	.name  = "cssp-camera",
-+	.id    = -1,
-+	.dev   = {
-+		.platform_data = &cssp_cam_platform_data,
-+	},
-+	.num_resources = sizeof(cssp_camera_resources) / sizeof(cssp_camera_resources[0]),
-+	.resource = cssp_camera_resources,
-+};
-+
-+static struct gpmc_timings cssp_timings = {
-+	/* Minimum clock period for synchronous mode (in picoseconds) */
-+	.sync_clk = 10000,
-+
-+	.cs_on = 0,
-+	.cs_rd_off = 23 * 10,		/* Read deassertion time */
-+	.cs_wr_off = 23 * 10,		/* Write deassertion time */
-+
-+	/* ADV signal timings corresponding to GPMC_CONFIG3 */
-+	.adv_on = 0,			/* Assertion time */
-+	.adv_rd_off = 2 * 10,		/* Read deassertion time */
-+	.adv_wr_off = 2 * 10,		/* Write deassertion time */
-+
-+	/* WE signals timings corresponding to GPMC_CONFIG4 */
-+	.we_on = 3 * 10,		/* WE assertion time */
-+	.we_off = 23 * 10,		/* WE deassertion time */
-+
-+	/* OE signals timings corresponding to GPMC_CONFIG4 */
-+	.oe_on = 3 * 10,		/* OE assertion time */
-+	.oe_off = 23 * 10,		/* OE deassertion time */
-+
-+	/* Access time and cycle time timings corresponding to GPMC_CONFIG5 */
-+	.page_burst_access = 1 * 10,	/* Multiple access word delay */
-+	.access = 7 * 10,		/* Start-cycle to first data valid delay */
-+	.rd_cycle = 23 * 10,		/* Total read cycle time */
-+	.wr_cycle = 23 * 10,		/* Total write cycle time */
-+
-+	/* The following are only on OMAP3430 */
-+	.wr_access = 7 * 10,		/* WRACCESSTIME */
-+	.wr_data_mux_bus = 3 * 10,	/* WRDATAONADMUXBUS */
-+};
-+
-+static int gpmc_cssp_init(void)
-+{
-+	int cs = 1; /* Chip Select on GPMC bus */
-+	int val;
-+	long unsigned int cssp_gpmc_mem_base_phys;
-+
-+	if (gpmc_cs_request(cs, SZ_16M, &cssp_gpmc_mem_base_phys) < 0) {
-+			printk(KERN_ERR "[cssp_cam platform init]: gpmc_cs_request failed\n");
-+			return -1;
-+	}
-+
-+	cssp_camera_resources[0].start = cssp_gpmc_mem_base_phys;
-+	cssp_camera_resources[0].end = cssp_gpmc_mem_base_phys + 0x1ffff;
-+
-+	if (gpmc_cs_configure(cs, GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NOR) < 0) {
-+			printk(KERN_ERR "[cssp_cam platform init]: gpmc_cs_configure failed\n");
-+			return -1;
-+	}
-+
-+	val = GPMC_CONFIG1_READMULTIPLE_SUPP;
-+	val |= GPMC_CONFIG1_READTYPE_SYNC;
-+	val |= GPMC_CONFIG1_WRITETYPE_SYNC;
-+	val |= GPMC_CONFIG1_CLKACTIVATIONTIME(1);
-+	val |= GPMC_CONFIG1_PAGE_LEN(2);
-+	val |= GPMC_CONFIG1_DEVICESIZE_16;
-+	val |= GPMC_CONFIG1_DEVICETYPE_NOR;
-+	val |= GPMC_CONFIG1_MUXADDDATA;
-+	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, val);
-+
-+	if (gpmc_cs_set_timings(cs, &cssp_timings) < 0) {
-+		printk(KERN_ERR "Failed gpmc_cs_set_timings for QuickLogic CAMIF device\n");
-+		goto free;
-+	}
-+
-+	val = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG6);
-+	val &= 0xe0f0f030;
-+	val |= 0x07030481;
-+	gpmc_cs_write_reg(cs, GPMC_CS_CONFIG6, val);
-+
-+	printk(KERN_INFO "gpmc_cssp_init for QuickLogic CAMIF device succeeded\n");
-+
-+	return 0;
-+
-+free:
-+	gpmc_cs_free(cs);
-+
-+	printk(KERN_ERR "Could not initialize QuickLogic CAMIF device\n");
-+
-+	return -1;
-+}
-+
-+static void cssp_gpmc_init(void)
-+{
-+	struct gpmc_devices_info gpmc_device[2] = {
-+			{ NULL, GPMC_DEVICE_NOR },
-+		};
-+
-+	setup_pin_mux(camera_cape_pin_mux);
-+	setup_pin_mux(gpmc_pin_mux);
-+
-+	omap_init_gpmc(gpmc_device, sizeof(gpmc_device));
-+	gpmc_cssp_init();
-+
-+	platform_device_register(&cssp_camera);
-+
-+	printk(KERN_INFO "[cssp_cam platform init]: cssp_gpmc_init: DONE\n");
-+}
-+
-+
- static void lcd3leds_init(int evm_id, int profile )
- {
- 	int err;
-@@ -2851,6 +3041,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 	if (!strncmp("BB-BONE-CAM-01", cape_config.partnumber, 14)) {
- 		pr_info("BeagleBone cape: recognized Camera cape\n");
- 		beaglebone_w1gpio_free = 0;
-+		cssp_gpmc_init();
- 	}
- 
- 	goto out2;
-@@ -3762,15 +3953,13 @@ static struct pinmux_config clkout2_pin_mux[] = {
- 
- static void __init clkout2_enable(void)
- {
--	struct clk *ck_32;
--
--	ck_32 = clk_get(NULL, "clkout2_ck");
--	if (IS_ERR(ck_32)) {
--		pr_err("Cannot clk_get ck_32\n");
--		return;
--	}
-+	void __iomem *base;
-+	unsigned int val;
- 
--	clk_enable(ck_32);
-+	base = ioremap(0x44E00700, SZ_4K);
-+	val = (5 << 3) | (3 << 0); //32 MHz
-+	writel(val, base);
-+	iounmap(base);
- 
- 	setup_pin_mux(clkout2_pin_mux);
- }
-diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
-index 41c9b0f..3ef045e 100644
---- a/arch/arm/mach-omap2/devices.c
-+++ b/arch/arm/mach-omap2/devices.c
-@@ -968,7 +968,7 @@ static struct event_to_channel_map am33xx_xbar_event_mapping[] = {
- 	{27, -1},
- 	{28, -1},
- 	{29, -1},
--	{30, -1},
-+	{30, 20},	/* XDMA_EVENT_INTR2 */
- 	{31, -1},
- 	{-1, -1}
- };
-diff --git a/arch/arm/plat-omap/include/plat/dma-33xx.h b/arch/arm/plat-omap/include/plat/dma-33xx.h
-index bebdaa7..ded00aa 100644
---- a/arch/arm/plat-omap/include/plat/dma-33xx.h
-+++ b/arch/arm/plat-omap/include/plat/dma-33xx.h
-@@ -83,5 +83,6 @@
- #define AM33XX_DMA_PWMSS2_EPW				63
- #define AM33XX_DMA_MMCHS2_W				64	/* xBar */
- #define AM33XX_DMA_MMCHS2_R				65	/* xBar */
-+#define AM33XX_DMA_XDMA_EVENT_INTR2			93	/* xBar */
- 
- #endif
-diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index b303a3f..a31723f 100644
---- a/drivers/media/video/Kconfig
-+++ b/drivers/media/video/Kconfig
-@@ -1002,6 +1002,13 @@ config VIDEO_S5P_MIPI_CSIS
- 
- source "drivers/media/video/s5p-tv/Kconfig"
- 
-+config VIDEO_QL_CAMIF
-+	tristate "QuickLogic Camera Interface support (EXPERIMENTAL)"
-+	depends on VIDEO_DEV && SOC_CAMERA && SOC_OMAPAM33XX && EXPERIMENTAL
-+	select VIDEOBUF2_DMA_CONTIG
-+	---help---
-+	  This is a v4l2 driver for the QuickLogic CAMIF controller.
-+
- #
- # USB Multimedia device configuration
- #
-diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index 117f9c4..af7af692 100644
---- a/drivers/media/video/Makefile
-+++ b/drivers/media/video/Makefile
-@@ -195,6 +195,8 @@ obj-y	+= davinci/
- 
- obj-$(CONFIG_ARCH_OMAP)	+= omap/
- 
-+obj-$(CONFIG_VIDEO_QL_CAMIF)	+= cssp_camera/
-+
- ccflags-y += -Idrivers/media/dvb/dvb-core
- ccflags-y += -Idrivers/media/dvb/frontends
- ccflags-y += -Idrivers/media/common/tuners
-diff --git a/drivers/media/video/cssp_camera/Makefile b/drivers/media/video/cssp_camera/Makefile
-new file mode 100644
-index 0000000..d85a84e
---- /dev/null
-+++ b/drivers/media/video/cssp_camera/Makefile
-@@ -0,0 +1,3 @@
-+# cssp_camera
-+
-+obj-$(CONFIG_VIDEO_QL_CAMIF) += cssp_camera.o
-diff --git a/drivers/media/video/cssp_camera/cssp_camera.c b/drivers/media/video/cssp_camera/cssp_camera.c
-new file mode 100644
-index 0000000..39aa003
---- /dev/null
-+++ b/drivers/media/video/cssp_camera/cssp_camera.c
-@@ -0,0 +1,1119 @@
-+/*
-+ * cssp-camera driver
-+ *
-+ * Based on Vivi driver
-+ *
-+ * Copyright (C) 2012 QuickLogic Corp.
-+ *
-+ * Developed for QuickLogic by:
-+ * Damian Eppel <damian.eppel@teleca.com>
-+ * Przemek Szewczyk <przemek.szewczyk@teleca.com>
-+ * Dan Aizenstros <daizenstros@quicklogic.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/gpio.h>
-+#include <linux/i2c.h>
-+#include <linux/delay.h>
-+#include <linux/spinlock.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/interrupt.h>
-+#include <mach/edma.h>
-+#include <linux/clk.h>
-+// V4L2 Interface *********************
-+#include <media/soc_camera.h>
-+#include <media/v4l2-mediabus.h>
-+#include <media/videobuf2-dma-contig.h>
-+#include <media/v4l2-ioctl.h>
-+#include <media/v4l2-event.h>
-+//*************************************
-+#include "cssp_camera.h"
-+
-+
-+/*
-+ * ---------------------------------------------------------------------------
-+ *  QuickLoigc Camera Interface registers
-+ * ---------------------------------------------------------------------------
-+ */
-+
-+#define REG_MODE		0x00000
-+#define REG_DATA		0x10000
-+
-+/* MODE bit shifts */
-+#define FMT_2X8_EN		BIT(15) /* Enable 2 byte format on CAMIF bus (0 - 10 bit, 1 - 16 bit 2x8) */
-+#define PCLK_POL		BIT(14) /* PCLK polarity (0 - rising edge, 1 - falling edge */
-+#define HS_EN			BIT(13) /* High speed bus (0 =< 50 MHz, 1 > 50 MHz) */
-+#define ENABLE			BIT(12)
-+
-+
-+static struct cssp_cam_fmt formats[] = {
-+	{
-+		.name	= "4:2:2, packed, YUYV",
-+		.fourcc	= V4L2_PIX_FMT_YUYV,
-+		.depth	= 16,
-+		.code	= V4L2_MBUS_FMT_YUYV8_2X8,
-+	},
-+	{
-+		.name	= "4:2:2, packed, UYVY",
-+		.fourcc	= V4L2_PIX_FMT_UYVY,
-+		.depth	= 16,
-+		.code	= V4L2_MBUS_FMT_UYVY8_2X8,
-+	},
-+	{
-+		.name	= "4:2:2, packed, VYUY",
-+		.fourcc	= V4L2_PIX_FMT_VYUY,
-+		.depth	= 16,
-+		.code	= V4L2_MBUS_FMT_VYUY8_2X8,
-+	},
-+	{
-+		.name	= "4:2:2, packed, YVYU",
-+		.fourcc	= V4L2_PIX_FMT_YVYU,
-+		.depth	= 16,
-+		.code	= V4L2_MBUS_FMT_YVYU8_2X8,
-+	},
-+	{
-+		.name	= "RGB565 (LE)",
-+		.fourcc	= V4L2_PIX_FMT_RGB565,
-+		.depth	= 16,
-+		.code	= V4L2_MBUS_FMT_RGB565_2X8_LE,
-+	},
-+	{
-+		.name	= "RGB555 (LE)",
-+		.fourcc	= V4L2_PIX_FMT_RGB555,
-+		.depth	= 16,
-+		.code	= V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
-+	},
-+};
-+
-+
-+/***************************************************************************/
-+
-+
-+static int configure_gpio(int nr, int val, const char *name)
-+{
-+	unsigned long flags = val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
-+	int ret;
-+	if (!gpio_is_valid(nr))
-+		return 0;
-+	ret = gpio_request_one(nr, flags, name);
-+	if (!ret)
-+		gpio_export(nr, 0);
-+	return ret;
-+}
-+
-+static int reset_cssp(struct cssp_cam_dev *cam)
-+{
-+	struct platform_device *pdev = cam->pdev;
-+	int err;
-+
-+	cam->reset_pin = ((struct cssp_cam_platform_data *)pdev->dev.platform_data)->gpio_reset_pin;
-+
-+	err = configure_gpio(cam->reset_pin, 0, "cssp_reset");
-+	if (err) {
-+		printk(KERN_ERR "[%s]: failed to configure cssp reset pin\n", pdev->name);
-+		return -1;
-+	}
-+
-+	mdelay(1);
-+
-+	gpio_direction_output(cam->reset_pin, 1);
-+
-+	return err;
-+}
-+
-+static int trigger_dma_transfer_to_buf(struct cssp_cam_dev *dev, struct vb2_buffer *vb)
-+{
-+	dma_addr_t dma_buf = vb2_dma_contig_plane_dma_addr(vb, 0);
-+
-+	if (!dma_buf) {
-+		/* Is this possible? Release the vb2_buffer with an error here, */
-+		vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
-+		dev->current_vb = NULL;
-+		return -ENOMEM;
-+	}
-+
-+	dev->dma_tr_params.dst = dma_buf;
-+
-+	// Enable DMA
-+	edma_write_slot(dev->dma_ch, &dev->dma_tr_params);
-+
-+	// Enable data capture
-+	dev->mode |= ENABLE;
-+	writew(dev->mode, dev->reg_base_virt + REG_MODE);
-+	readw(dev->reg_base_virt + REG_MODE);
-+
-+	dev->current_vb = vb;
-+
-+	return 0;
-+}
-+
-+static void dequeue_buffer_for_dma(struct cssp_cam_dev *dev)
-+{
-+	struct cssp_cam_dmaqueue *dma_q = &dev->vidq;
-+	unsigned long flags = 0;
-+
-+	spin_lock_irqsave(&dev->slock, flags);
-+	if (!list_empty(&dma_q->active)) {
-+		struct cssp_cam_buffer *buf;
-+
-+		buf = list_entry(dma_q->active.next, struct cssp_cam_buffer, list);
-+		list_del(&buf->list);
-+		spin_unlock_irqrestore(&dev->slock, flags);
-+
-+		buf->fmt = dev->fmt;
-+
-+		trigger_dma_transfer_to_buf(dev, &buf->vb);
-+	} else {
-+		spin_unlock_irqrestore(&dev->slock, flags);
-+	}
-+}
-+
-+static void dma_callback(unsigned lch, u16 ch_status, void *data)
-+{
-+	struct cssp_cam_dev *dev = (struct cssp_cam_dev *)data;
-+
-+	// Disable data capture
-+	dev->mode &= ~ENABLE;
-+	writew(dev->mode, dev->reg_base_virt + REG_MODE);
-+	readw(dev->reg_base_virt + REG_MODE);
-+
-+	if (ch_status == DMA_COMPLETE) {
-+		struct vb2_buffer *vb = dev->current_vb;
-+		struct timeval ts;
-+
-+		vb->v4l2_buf.field = dev->field;
-+		dev->field_count++;
-+		vb->v4l2_buf.sequence = dev->field_count >> 1;
-+		do_gettimeofday(&ts);
-+		vb->v4l2_buf.timestamp = ts;
-+		vb2_buffer_done(vb, VB2_BUF_STATE_DONE);
-+		dev->current_vb = NULL;
-+		dev->frame_cnt++;
-+
-+		/* check if we have new buffer queued */
-+		dequeue_buffer_for_dma(dev);
-+	} else {
-+		printk(KERN_ERR "[cssp_camera]: EDMA error (ch_status = %d)\n", ch_status);
-+		/* we got a missed interrupt so just start a new DMA with the existing buffer */
-+		if (dev->current_vb != NULL)
-+			trigger_dma_transfer_to_buf(dev, dev->current_vb);
-+	}
-+}
-+
-+static int configure_edma(struct cssp_cam_dev *cam)
-+{
-+	struct platform_device *pdev = cam->pdev;
-+	int dma_channel;
-+
-+	dma_channel = ((struct cssp_cam_platform_data *)pdev->dev.platform_data)->dma_ch;
-+
-+	pdev->dev.dma_mask = &cam->dma_mask;
-+
-+	pdev->dev.coherent_dma_mask = (u32)~0;
-+
-+	if (dma_set_mask(&pdev->dev, (u32)~0)) {
-+		printk(KERN_ERR "[%s]: failed setting mask for DMA\n", pdev->name);
-+		return -1;
-+	}
-+
-+	cam->dma_ch = edma_alloc_channel(dma_channel, dma_callback, cam, EVENTQ_1);
-+	if (cam->dma_ch < 0) {
-+		printk(KERN_ERR "[%s]: allocating channel for DMA failed\n", pdev->name);
-+		return -EBUSY;
-+	} else {
-+		printk(KERN_ERR "[%s]: allocating channel for DMA succeeded, chan=%d\n", pdev->name, cam->dma_ch);
-+	}
-+
-+	cam->dma_tr_params.opt = TCINTEN | TCC(cam->dma_ch);
-+	cam->dma_tr_params.src = cam->reg_base_phys + REG_DATA;
-+	cam->dma_tr_params.a_b_cnt = ACNT(BYTES_PER_DMA_EVT) | BCNT((VGA_WIDTH * BYTES_PER_PIXEL) / BYTES_PER_DMA_EVT);
-+	cam->dma_tr_params.src_dst_bidx = SRCBIDX(0) | DSTBIDX(BYTES_PER_DMA_EVT);
-+	cam->dma_tr_params.link_bcntrld = BCNTRLD((VGA_WIDTH * BYTES_PER_PIXEL) / BYTES_PER_DMA_EVT) | LINK(0xffff);
-+	cam->dma_tr_params.src_dst_cidx = SRCCIDX(0) | DSTCIDX(BYTES_PER_DMA_EVT);
-+	cam->dma_tr_params.ccnt = CCNT(VGA_HEIGHT);
-+
-+	return 0;
-+}
-+
-+static int configure_cssp(struct cssp_cam_dev *cam)
-+{
-+	struct platform_device *pdev = cam->pdev;
-+	int ret = 0;
-+	unsigned int val;
-+	struct resource *res;
-+
-+	ret = reset_cssp(cam);
-+	if (ret)
-+		return ret;
-+
-+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "gpmc_phys_mem_slot");
-+	if (res == NULL) {
-+		printk(KERN_ERR "[%s]: failed to get gpmc_phys_mem_slot resource\n", pdev->name);
-+		return -ENODEV;
-+	}
-+
-+	/*
-+	 * Request the region.
-+	 */
-+	if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
-+		return -EBUSY;
-+	}
-+
-+	cam->reg_base_phys = res->start;
-+	cam->reg_size = resource_size(res);
-+
-+	cam->reg_base_virt = (unsigned int)ioremap(cam->reg_base_phys, cam->reg_size);
-+	if (cam->reg_base_virt == 0) {
-+		printk(KERN_ERR "[%s]: ioremap of registers region failed\n", pdev->name);
-+		release_mem_region(cam->reg_base_phys, cam->reg_size);
-+		return -ENOMEM;
-+	}
-+
-+	printk(KERN_INFO "[%s]: reg_base_virt = 0x%x\n", pdev->name, cam->reg_base_virt);
-+
-+	val = readw(cam->reg_base_virt + REG_MODE);
-+	printk(KERN_INFO "[%s]: reading register address=0x0 returns 0x%x\n", pdev->name, val);
-+
-+	return 0;
-+}
-+
-+static int configure_camera_sensor(struct cssp_cam_dev *cam)
-+{
-+	struct i2c_board_info *info = cam->camera_board_info;
-+	struct i2c_client *client;
-+	struct i2c_adapter *adapter;
-+	struct v4l2_subdev *subdev;
-+	struct v4l2_mbus_framefmt f_format = {
-+			.width = VGA_WIDTH,
-+			.height = VGA_HEIGHT,
-+			.code = V4L2_MBUS_FMT_YUYV8_2X8,
-+			.colorspace = V4L2_COLORSPACE_JPEG,
-+	};
-+
-+	/* Enable the clock just for the time of loading the camera driver and disable after that */
-+	/* It is going to be be re-enabled later, when camera will be in use */
-+	clk_enable(cam->camera_clk);
-+	udelay(5); // let the clock stabilize
-+
-+	adapter	= i2c_get_adapter(((struct soc_camera_link *)(info->platform_data))->i2c_adapter_id);
-+	if (!adapter) {
-+		printk(KERN_INFO "[%s]: failed to get adapter...\n", __func__);
-+		return -ENODEV;
-+	}
-+
-+	client = i2c_new_device(adapter, info);
-+	i2c_put_adapter(adapter);
-+
-+	if (client == NULL) {
-+		return -ENODEV;
-+	}
-+
-+	printk(KERN_INFO "[%s]: client's name is: %s\n", __func__, client->name);
-+
-+	subdev = (struct v4l2_subdev *)i2c_get_clientdata(client);
-+	if (subdev == NULL) {
-+		i2c_unregister_device(client);
-+		return -ENODEV;
-+	}
-+
-+	cam->subdev = subdev;
-+
-+	v4l2_subdev_call(subdev, video, s_mbus_fmt, &f_format);
-+
-+	clk_disable(cam->camera_clk);
-+
-+	return 0;
-+}
-+
-+static int start_camera_sensor(struct cssp_cam_dev *cam)
-+{
-+	clk_enable(cam->camera_clk);
-+	udelay(5); /* let the clock stabilize */
-+
-+	v4l2_subdev_call(cam->subdev, video, s_stream, 1);
-+
-+	return 0;
-+}
-+
-+static void stop_camera_sensor(struct cssp_cam_dev *cam)
-+{
-+	v4l2_subdev_call(cam->subdev, video, s_stream, 0);
-+
-+	clk_disable(cam->camera_clk);
-+
-+	return;
-+}
-+
-+
-+/************************************************
-+ * 				Video4Linux2
-+ */
-+
-+static struct cssp_cam_fmt *get_format(struct v4l2_format *f)
-+{
-+	struct cssp_cam_fmt *fmt;
-+	unsigned int k;
-+
-+	for (k = 0; k < ARRAY_SIZE(formats); k++) {
-+		fmt = &formats[k];
-+		if (fmt->fourcc == f->fmt.pix.pixelformat)
-+			break;
-+	}
-+
-+	if (k == ARRAY_SIZE(formats))
-+		return NULL;
-+
-+	return &formats[k];
-+}
-+
-+
-+/* ------------------------------------------------------------------
-+	Videobuf operations
-+   ------------------------------------------------------------------*/
-+
-+static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
-+				unsigned int *nbuffers, unsigned int *nplanes,
-+				unsigned int sizes[], void *alloc_ctxs[])
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
-+	unsigned long size;
-+
-+	size = dev->sizeimage;
-+
-+	if (0 == *nbuffers)
-+		*nbuffers = 32;
-+
-+	while (size * *nbuffers > vid_limit * 1024 * 1024)
-+		(*nbuffers)--;
-+
-+	*nplanes = 1;
-+
-+	sizes[0] = size;
-+
-+	alloc_ctxs[0] = dev->dma_cont_ctx;
-+
-+	dprintk(dev, 1, "%s, count=%d, size=%ld\n", __func__, *nbuffers, size);
-+
-+	return 0;
-+}
-+
-+static int buffer_init(struct vb2_buffer *vb)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
-+
-+	BUG_ON(NULL == dev->fmt);
-+
-+	/*
-+	 * This callback is called once per buffer, after its allocation.
-+	 *
-+	 * Vivi does not allow changing format during streaming, but it is
-+	 * possible to do so when streaming is paused (i.e. in streamoff state).
-+	 * Buffers however are not freed when going into streamoff and so
-+	 * buffer size verification has to be done in buffer_prepare, on each
-+	 * qbuf.
-+	 * It would be best to move verification code here to buf_init and
-+	 * s_fmt though.
-+	 */
-+
-+	return 0;
-+}
-+
-+static int buffer_prepare(struct vb2_buffer *vb)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
-+	struct cssp_cam_buffer *buf = container_of(vb, struct cssp_cam_buffer, vb);
-+	unsigned long size;
-+
-+	dprintk(dev, 1, "%s, field=%d\n", __func__, vb->v4l2_buf.field);
-+
-+	BUG_ON(NULL == dev->fmt);
-+
-+	/*
-+	 * Theses properties only change when queue is idle, see s_fmt.
-+	 * The below checks should not be performed here, on each
-+	 * buffer_prepare (i.e. on each qbuf). Most of the code in this function
-+	 * should thus be moved to buffer_init and s_fmt.
-+	 */
-+	if (dev->width  < 48 || dev->width  > MAX_WIDTH ||
-+	    dev->height < 32 || dev->height > MAX_HEIGHT)
-+		return -EINVAL;
-+
-+	size = dev->sizeimage;
-+	if (vb2_plane_size(vb, 0) < size) {
-+		dprintk(dev, 1, "%s data will not fit into plane (%lu < %lu)\n",
-+				__func__, vb2_plane_size(vb, 0), size);
-+		return -EINVAL;
-+	}
-+
-+	vb2_set_plane_payload(&buf->vb, 0, size);
-+
-+	buf->fmt = dev->fmt;
-+
-+	return 0;
-+}
-+
-+static int buffer_finish(struct vb2_buffer *vb)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
-+	dprintk(dev, 1, "%s\n", __func__);
-+	return 0;
-+}
-+
-+static void buffer_cleanup(struct vb2_buffer *vb)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
-+	dprintk(dev, 1, "%s\n", __func__);
-+}
-+
-+static void buffer_queue(struct vb2_buffer *vb)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vb->vb2_queue);
-+	struct cssp_cam_buffer *buf = container_of(vb, struct cssp_cam_buffer, vb);
-+	struct cssp_cam_dmaqueue *vidq = &dev->vidq;
-+	unsigned long flags = 0;
-+
-+	dprintk(dev, 1, "%s\n", __func__);
-+
-+	if (dev->streaming_started && !dev->current_vb) {
-+		trigger_dma_transfer_to_buf(dev, &buf->vb);
-+	} else {
-+		spin_lock_irqsave(&dev->slock, flags);
-+		list_add_tail(&buf->list, &vidq->active);
-+		spin_unlock_irqrestore(&dev->slock, flags);
-+	}
-+}
-+
-+static int start_streaming(struct vb2_queue *vq, unsigned int count)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
-+	int ret;
-+
-+	dprintk(dev, 1, "%s\n", __func__);
-+
-+	ret = start_camera_sensor(dev);
-+	if (ret != 0)
-+		return ret;
-+
-+	// Enable DMA
-+	edma_start(dev->dma_ch);
-+
-+	dev->streaming_started = 1;
-+
-+	/* check if we have new buffer queued */
-+	dequeue_buffer_for_dma(dev);
-+
-+	return 0;
-+}
-+
-+/* abort streaming and wait for last buffer */
-+static int stop_streaming(struct vb2_queue *vq)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
-+	struct cssp_cam_dmaqueue *dma_q = &dev->vidq;
-+
-+	dprintk(dev, 1, "%s\n", __func__);
-+
-+	// Disable DMA
-+	edma_stop(dev->dma_ch);
-+
-+	// Disable data capture
-+	dev->mode &= ~ENABLE;
-+	writew(dev->mode, dev->reg_base_virt + REG_MODE);
-+	readw(dev->reg_base_virt + REG_MODE);
-+
-+	stop_camera_sensor(dev);
-+
-+	dev->streaming_started = 0;
-+
-+	/* Release all active buffers */
-+	while (!list_empty(&dma_q->active)) {
-+		struct cssp_cam_buffer *buf;
-+
-+		buf = list_entry(dma_q->active.next, struct cssp_cam_buffer, list);
-+		list_del(&buf->list);
-+		vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
-+		dprintk(dev, 2, "[%p/%d] done\n", buf, buf->vb.v4l2_buf.index);
-+	}
-+
-+	dev->current_vb = NULL;
-+
-+	return 0;
-+}
-+
-+static void cssp_cam_lock(struct vb2_queue *vq)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
-+	mutex_lock(&dev->mutex);
-+}
-+
-+static void cssp_cam_unlock(struct vb2_queue *vq)
-+{
-+	struct cssp_cam_dev *dev = vb2_get_drv_priv(vq);
-+	mutex_unlock(&dev->mutex);
-+}
-+
-+static struct vb2_ops cssp_cam_video_qops = {
-+	.queue_setup		= queue_setup,
-+	.buf_init		= buffer_init,
-+	.buf_prepare		= buffer_prepare,
-+	.buf_finish		= buffer_finish,
-+	.buf_cleanup		= buffer_cleanup,
-+	.buf_queue		= buffer_queue,
-+	.start_streaming	= start_streaming,
-+	.stop_streaming		= stop_streaming,
-+	.wait_prepare		= cssp_cam_unlock,
-+	.wait_finish		= cssp_cam_lock,
-+};
-+
-+
-+/* ------------------------------------------------------------------
-+	IOCTL vidioc handling
-+   ------------------------------------------------------------------*/
-+
-+static int vidioc_querycap(struct file *file, void *priv,
-+					struct v4l2_capability *cap)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+
-+	strcpy(cap->driver, "cssp_camera");
-+	strcpy(cap->card, "cssp_camera");
-+	strlcpy(cap->bus_info, dev->v4l2_dev.name, sizeof(cap->bus_info));
-+	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
-+			    V4L2_CAP_READWRITE;
-+	return 0;
-+}
-+
-+static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
-+					struct v4l2_fmtdesc *f)
-+{
-+	struct cssp_cam_fmt *fmt;
-+
-+	if (f->index >= ARRAY_SIZE(formats))
-+		return -EINVAL;
-+
-+	fmt = &formats[f->index];
-+
-+	strlcpy(f->description, fmt->name, sizeof(f->description));
-+	f->pixelformat = fmt->fourcc;
-+	return 0;
-+}
-+
-+static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
-+					struct v4l2_format *f)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+
-+	f->fmt.pix.width	= dev->width;
-+	f->fmt.pix.height	= dev->height;
-+	f->fmt.pix.field	= dev->field;
-+	f->fmt.pix.pixelformat	= dev->fmt->fourcc;
-+	f->fmt.pix.bytesperline	= dev->bytesperline;
-+	f->fmt.pix.sizeimage	= dev->sizeimage;
-+	f->fmt.pix.colorspace	= dev->colorspace;
-+
-+	return 0;
-+}
-+
-+static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
-+			struct v4l2_format *f)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	struct cssp_cam_fmt *fmt;
-+	struct v4l2_mbus_framefmt mbus_fmt;
-+	struct v4l2_pix_format *pix = &f->fmt.pix;
-+
-+	fmt = get_format(f);
-+	if (!fmt) {
-+		dprintk(dev, 1, "Fourcc format (0x%08x) invalid.\n",
-+			f->fmt.pix.pixelformat);
-+		return -EINVAL;
-+	}
-+
-+	v4l2_fill_mbus_format(&mbus_fmt, pix, fmt->code);
-+	v4l2_subdev_call(dev->subdev, video, try_mbus_fmt, &mbus_fmt);
-+	v4l2_fill_pix_format(pix, &mbus_fmt);
-+	pix->bytesperline = (pix->width * fmt->depth) >> 3;
-+	pix->sizeimage = pix->height * pix->bytesperline;
-+
-+	return 0;
-+}
-+
-+static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
-+					struct v4l2_format *f)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	struct vb2_queue *q = &dev->vb_vidq;
-+	struct v4l2_pix_format *pix = &f->fmt.pix;
-+	struct v4l2_mbus_framefmt mbus_fmt;
-+
-+	int ret = vidioc_try_fmt_vid_cap(file, priv, f);
-+	if (ret < 0)
-+		return ret;
-+
-+	if (vb2_is_streaming(q)) {
-+		dprintk(dev, 1, "%s device busy\n", __func__);
-+		return -EBUSY;
-+	}
-+
-+	dev->fmt = get_format(f);
-+	dev->width = f->fmt.pix.width;
-+	dev->height = f->fmt.pix.height;
-+	dev->field = f->fmt.pix.field;
-+	dev->colorspace = f->fmt.pix.colorspace;
-+	dev->bytesperline = f->fmt.pix.bytesperline;
-+	dev->sizeimage = f->fmt.pix.sizeimage;
-+
-+	/* Set the sensor into the new format */
-+	v4l2_fill_mbus_format(&mbus_fmt, pix, dev->fmt->code);
-+	v4l2_subdev_call(dev->subdev, video, s_mbus_fmt, &mbus_fmt);
-+
-+	/* Set the EDMA for the new resolution */
-+	dev->dma_tr_params.a_b_cnt = ACNT(BYTES_PER_DMA_EVT) | BCNT(dev->bytesperline / BYTES_PER_DMA_EVT);
-+	dev->dma_tr_params.link_bcntrld = BCNTRLD(dev->bytesperline / BYTES_PER_DMA_EVT) | LINK(0xffff);
-+	dev->dma_tr_params.ccnt = CCNT(dev->height);
-+
-+	return 0;
-+}
-+
-+static int vidioc_reqbufs(struct file *file, void *priv,
-+			  struct v4l2_requestbuffers *p)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	return vb2_reqbufs(&dev->vb_vidq, p);
-+}
-+
-+static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	return vb2_querybuf(&dev->vb_vidq, p);
-+}
-+
-+static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	return vb2_qbuf(&dev->vb_vidq, p);
-+}
-+
-+static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	return vb2_dqbuf(&dev->vb_vidq, p, file->f_flags & O_NONBLOCK);
-+}
-+
-+static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	return vb2_streamon(&dev->vb_vidq, i);
-+}
-+
-+static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	return vb2_streamoff(&dev->vb_vidq, i);
-+}
-+
-+static int vidioc_log_status(struct file *file, void *priv)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+
-+	v4l2_ctrl_handler_log_status(&dev->ctrl_handler, dev->v4l2_dev.name);
-+	return 0;
-+}
-+
-+static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
-+{
-+	return 0;
-+}
-+
-+/* only one input in this sample driver */
-+static int vidioc_enum_input(struct file *file, void *priv,
-+				struct v4l2_input *inp)
-+{
-+	return -EINVAL;
-+
-+	inp->type = V4L2_INPUT_TYPE_CAMERA;
-+	inp->std = V4L2_STD_525_60;
-+	sprintf(inp->name, "Camera %u", inp->index);
-+	return 0;
-+}
-+
-+static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+
-+	*i = dev->input;
-+
-+	return 0;
-+}
-+
-+static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+
-+	return -EINVAL;
-+
-+	if (i == dev->input)
-+		return 0;
-+
-+	dev->input = i;
-+
-+	return 0;
-+}
-+
-+static int vidioc_subscribe_event(struct v4l2_fh *fh,
-+				struct v4l2_event_subscription *sub)
-+{
-+	switch (sub->type) {
-+	case V4L2_EVENT_CTRL:
-+		return v4l2_event_subscribe(fh, sub, 0);
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+static const struct v4l2_ioctl_ops cssp_cam_ioctl_ops = {
-+	.vidioc_querycap		= vidioc_querycap,
-+	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid_cap,
-+	.vidioc_g_fmt_vid_cap		= vidioc_g_fmt_vid_cap,
-+	.vidioc_try_fmt_vid_cap		= vidioc_try_fmt_vid_cap,
-+	.vidioc_s_fmt_vid_cap		= vidioc_s_fmt_vid_cap,
-+	.vidioc_reqbufs			= vidioc_reqbufs,
-+	.vidioc_querybuf		= vidioc_querybuf,
-+	.vidioc_qbuf			= vidioc_qbuf,
-+	.vidioc_dqbuf			= vidioc_dqbuf,
-+	.vidioc_s_std			= vidioc_s_std,
-+	.vidioc_enum_input		= vidioc_enum_input,
-+	.vidioc_g_input			= vidioc_g_input,
-+	.vidioc_s_input			= vidioc_s_input,
-+	.vidioc_streamon		= vidioc_streamon,
-+	.vidioc_streamoff		= vidioc_streamoff,
-+	.vidioc_log_status		= vidioc_log_status,
-+	.vidioc_subscribe_event		= vidioc_subscribe_event,
-+	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
-+};
-+
-+
-+/* ------------------------------------------------------------------
-+	File operations
-+   ------------------------------------------------------------------*/
-+
-+static unsigned int video_poll(struct file *file, struct poll_table_struct *wait)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	struct v4l2_fh *fh = file->private_data;
-+	struct vb2_queue *q = &dev->vb_vidq;
-+	unsigned int res;
-+
-+	dprintk(dev, 1, "%s\n", __func__);
-+	res = vb2_poll(q, file, wait);
-+	if (v4l2_event_pending(fh))
-+		res |= POLLPRI;
-+	else
-+		poll_wait(file, &fh->wait, wait);
-+	return res;
-+}
-+
-+static int video_mmap(struct file *file, struct vm_area_struct *vma)
-+{
-+	struct cssp_cam_dev *dev = video_drvdata(file);
-+	int ret;
-+
-+	dprintk(dev, 1, "mmap called, vma=0x%08lx\n", (unsigned long)vma);
-+
-+	ret = vb2_mmap(&dev->vb_vidq, vma);
-+	dprintk(dev, 1, "vma start=0x%08lx, size=%ld, ret=%d\n",
-+		(unsigned long)vma->vm_start,
-+		(unsigned long)vma->vm_end - (unsigned long)vma->vm_start,
-+		ret);
-+	return ret;
-+}
-+
-+static ssize_t video_read(struct file *file, char __user *buf, size_t size, loff_t *offset)
-+{
-+	struct cssp_cam_dev *cam_dev = video_drvdata(file);
-+
-+	dprintk(cam_dev, 1, "read called\n");
-+	return vb2_read(&cam_dev->vb_vidq, buf, size, offset, file->f_flags & O_NONBLOCK);
-+}
-+
-+static int video_close(struct file *file)
-+{
-+	struct video_device *vdev = video_devdata(file);
-+	struct cssp_cam_dev *cam_dev = video_drvdata(file);
-+
-+	dprintk(cam_dev, 1, "close called (dev=%s), file %p\n",
-+		video_device_node_name(vdev), file);
-+
-+	if (v4l2_fh_is_singular_file(file))
-+		vb2_queue_release(&cam_dev->vb_vidq);
-+	return v4l2_fh_release(file);
-+}
-+
-+static const struct v4l2_file_operations cssp_cam_fops = {
-+	.owner		= THIS_MODULE,
-+	.open		= v4l2_fh_open,
-+	.release	= video_close,
-+	.read		= video_read,
-+	.poll		= video_poll,
-+	.unlocked_ioctl	= video_ioctl2,
-+	.mmap		= video_mmap,
-+};
-+
-+
-+/* ------------------------------------------------------------------
-+	Driver initialization
-+   ------------------------------------------------------------------*/
-+
-+static struct video_device cssp_cam_template = {
-+	.name		= "cssp_camera",
-+	.fops		= &cssp_cam_fops,
-+	.ioctl_ops	= &cssp_cam_ioctl_ops,
-+	.minor		= -1,
-+	.release	= video_device_release,
-+	.tvnorms	= V4L2_STD_525_60,
-+	.current_norm	= V4L2_STD_NTSC_M,
-+};
-+
-+static int __init  video_probe(struct cssp_cam_dev *cam_dev)
-+{
-+	struct video_device *vfd;
-+	struct v4l2_ctrl_handler *hdl;
-+	struct vb2_queue *q;
-+	int ret = 0;
-+
-+	snprintf(cam_dev->v4l2_dev.name, sizeof(cam_dev->v4l2_dev.name),
-+			"%s-%03d", "cssp_camera", 0);
-+	ret = v4l2_device_register(NULL, &cam_dev->v4l2_dev);
-+	if (ret)
-+		goto free_dev;
-+
-+	cam_dev->fmt = &formats[0];
-+	cam_dev->width = VGA_WIDTH;
-+	cam_dev->height = VGA_HEIGHT;
-+	cam_dev->sizeimage = VGA_WIDTH * VGA_HEIGHT * BYTES_PER_PIXEL;
-+	hdl = &cam_dev->ctrl_handler;
-+	v4l2_ctrl_handler_init(hdl, 0);
-+
-+	if (hdl->error) {
-+		ret = hdl->error;
-+		goto unreg_dev;
-+	}
-+	cam_dev->v4l2_dev.ctrl_handler = hdl;
-+
-+	/* initialize locks */
-+	spin_lock_init(&cam_dev->slock);
-+
-+	/* initialize queue */
-+	q = &cam_dev->vb_vidq;
-+	memset(q, 0, sizeof(cam_dev->vb_vidq));
-+	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+	q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
-+	q->drv_priv = cam_dev;
-+	q->buf_struct_size = sizeof(struct cssp_cam_buffer);
-+	q->ops = &cssp_cam_video_qops;
-+	q->mem_ops = &vb2_dma_contig_memops;
-+
-+	vb2_queue_init(q);
-+
-+	mutex_init(&cam_dev->mutex);
-+
-+	/* init video dma queues */
-+	INIT_LIST_HEAD(&cam_dev->vidq.active);
-+
-+	ret = -ENOMEM;
-+	vfd = video_device_alloc();
-+	if (!vfd)
-+		goto unreg_dev;
-+
-+	*vfd = cssp_cam_template;
-+	vfd->debug = debug;
-+	vfd->v4l2_dev = &cam_dev->v4l2_dev;
-+	set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
-+
-+	/*
-+	 * Provide a mutex to v4l2 core. It will be used to protect
-+	 * all fops and v4l2 ioctls.
-+	 */
-+	vfd->lock = &cam_dev->mutex;
-+
-+	ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
-+	if (ret < 0)
-+		goto rel_vdev;
-+
-+	video_set_drvdata(vfd, cam_dev);
-+
-+	if (video_nr != -1)
-+		video_nr++;
-+
-+	cam_dev->vdev = vfd;
-+	v4l2_info(&cam_dev->v4l2_dev, "V4L2 device registered as %s\n",
-+	video_device_node_name(vfd));
-+
-+	return 0;
-+
-+rel_vdev:
-+	video_device_release(vfd);
-+unreg_dev:
-+	v4l2_ctrl_handler_free(hdl);
-+	v4l2_device_unregister(&cam_dev->v4l2_dev);
-+free_dev:
-+	return ret;
-+}
-+
-+static int video_remove(struct cssp_cam_dev *cam_dev)
-+{
-+	if (cam_dev->dma_cont_ctx != NULL)
-+		vb2_dma_contig_cleanup_ctx(cam_dev->dma_cont_ctx);
-+
-+	v4l2_info(&cam_dev->v4l2_dev, "unregistering %s\n",
-+			video_device_node_name(cam_dev->vdev));
-+	video_unregister_device(cam_dev->vdev);
-+	v4l2_device_unregister(&cam_dev->v4l2_dev);
-+	v4l2_ctrl_handler_free(&cam_dev->ctrl_handler);
-+
-+	return 0;
-+}
-+
-+static int __init  cssp_cam_probe(struct platform_device *pdev)
-+{
-+	struct cssp_cam_dev *cam_dev;
-+	int ret = 0;
-+	struct cssp_cam_platform_data *cssp_cam_platform_data;
-+
-+	cssp_cam_platform_data = (struct cssp_cam_platform_data *) pdev->dev.platform_data;
-+	if (cssp_cam_platform_data == NULL) {
-+		printk(KERN_ERR "[%s]: missing platform data\n", pdev->name);
-+		return -ENODEV;
-+	}
-+
-+	if (cssp_cam_platform_data->cam_i2c_board_info == NULL) {
-+		printk(KERN_ERR "[%s]: missing camera i2c board info\n", pdev->name);
-+		return -ENODEV;
-+	}
-+
-+	cam_dev = kzalloc(sizeof(*cam_dev), GFP_KERNEL);
-+	if (!cam_dev)
-+		return -ENOMEM;
-+
-+	cam_dev->pdev = pdev;
-+	platform_set_drvdata(pdev, cam_dev);
-+
-+	cam_dev->camera_board_info = cssp_cam_platform_data->cam_i2c_board_info;
-+
-+	cam_dev->camera_clk = clk_get(&pdev->dev, cssp_cam_platform_data->cam_clk_name);
-+	if (IS_ERR(cam_dev->camera_clk)) {
-+		ret = PTR_ERR(cam_dev->camera_clk);
-+		printk(KERN_ERR "[%s]: cannot clk_get %s\n", pdev->name, cssp_cam_platform_data->cam_clk_name);
-+		goto fail0;
-+	}
-+
-+	ret = configure_cssp(cam_dev);
-+	if (ret)
-+		goto fail1;
-+
-+	ret = configure_edma(cam_dev);
-+	if (ret)
-+		goto fail2;
-+
-+	cam_dev->mode = FMT_2X8_EN | PCLK_POL | HS_EN;
-+
-+	ret = configure_camera_sensor(cam_dev);
-+	if (ret) {
-+		printk(KERN_ERR "[%s]: camera sensor configuration failed\n", pdev->name);
-+		goto fail3;
-+	}
-+
-+	cam_dev->dma_cont_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
-+	if (IS_ERR(cam_dev->dma_cont_ctx)) {
-+		ret = PTR_ERR(cam_dev->dma_cont_ctx);
-+		goto fail3;
-+	}
-+
-+	ret = video_probe(cam_dev);
-+	if (ret)
-+		goto fail4;
-+
-+	return ret;
-+
-+fail4:
-+	vb2_dma_contig_cleanup_ctx(cam_dev->dma_cont_ctx);
-+
-+fail3:
-+	edma_free_channel(cam_dev->dma_ch);
-+
-+fail2:
-+	gpio_free(cam_dev->reset_pin);
-+	iounmap((void *)cam_dev->reg_base_virt);
-+	release_mem_region(cam_dev->reg_base_phys, cam_dev->reg_size);
-+
-+fail1:
-+	clk_put(cam_dev->camera_clk);
-+
-+fail0:
-+	kfree(cam_dev);
-+
-+	return ret;
-+}
-+
-+static int cssp_cam_remove(struct platform_device *pdev)
-+{
-+	struct cssp_cam_dev *cam = platform_get_drvdata(pdev);
-+
-+	iounmap((void *)cam->reg_base_virt);
-+
-+	release_mem_region(cam->reg_base_phys, cam->reg_size);
-+
-+	gpio_free(cam->reset_pin);
-+
-+	edma_free_channel(cam->dma_ch);
-+
-+	video_remove(cam);
-+
-+	clk_put(cam->camera_clk);
-+
-+	kfree(cam);
-+
-+	printk(KERN_INFO "[%s]: removed\n", pdev->name);
-+
-+	return 0;
-+}
-+
-+
-+static struct platform_driver cssp_cam_driver = {
-+	.probe		= cssp_cam_probe,
-+	.remove		= __devexit_p(cssp_cam_remove),
-+	.driver		= {
-+		.name	= "cssp-camera",
-+		.owner	= THIS_MODULE,
-+	},
-+};
-+
-+
-+static int __init cssp_cam_init(void)
-+{
-+	return platform_driver_register(&cssp_cam_driver);
-+}
-+
-+static void __exit cssp_cam_exit(void)
-+{
-+	platform_driver_unregister(&cssp_cam_driver);
-+}
-+
-+
-+module_init(cssp_cam_init);
-+module_exit(cssp_cam_exit);
-+
-+/*
-+ * Macros sets license, author and description
-+ */
-+MODULE_LICENSE("GPLv2");
-+MODULE_AUTHOR("Dan Aizenstros, Damian Eppel, Przemek Szewczyk");
-+MODULE_DESCRIPTION("QuickLogic Camera Interface driver");
-+
-diff --git a/drivers/media/video/cssp_camera/cssp_camera.h b/drivers/media/video/cssp_camera/cssp_camera.h
-new file mode 100644
-index 0000000..d018ca1
---- /dev/null
-+++ b/drivers/media/video/cssp_camera/cssp_camera.h
-@@ -0,0 +1,148 @@
-+/*
-+ * cssp-camera driver
-+ *
-+ * Based on Vivi driver
-+ *
-+ * Copyright (C) 2012 QuickLogic Corp.
-+ *
-+ * Developed for QuickLogic by:
-+ * Damian Eppel <damian.eppel@teleca.com>
-+ * Przemek Szewczyk <przemek.szewczyk@teleca.com>
-+ * Dan Aizenstros <daizenstros@quicklogic.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#ifndef CSSP_CAMERA_H
-+#define CSSP_CAMERA_H
-+
-+
-+static unsigned video_nr = -1;
-+module_param(video_nr, uint, 0644);
-+MODULE_PARM_DESC(video_nr, "videoX start number, -1 is autodetect");
-+
-+static unsigned debug;
-+module_param(debug, uint, 0644);
-+MODULE_PARM_DESC(debug, "activates debug info");
-+
-+static unsigned int vid_limit = 1;
-+module_param(vid_limit, uint, 0644);
-+MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
-+
-+#define dprintk(dev, level, fmt, arg...) \
-+	v4l2_dbg(level, debug, &dev->v4l2_dev, fmt, ## arg)
-+
-+#define VGA_WIDTH 640
-+#define VGA_HEIGHT 480
-+
-+#define MAX_WIDTH 2048
-+#define MAX_HEIGHT 1536
-+
-+#define VGA_RES (VGA_WIDTH * VGA_HEIGHT)
-+#define BYTES_PER_PIXEL 2
-+#define BYTES_PER_DMA_EVT 32
-+
-+/* PaRAM.opt: */
-+#define TCC(v) (((v) & 0x3f) << 12)
-+/* PaRAM.a_b_cnt: */
-+#define ACNT(v) ((v) & 0xffff)
-+#define BCNT(v) (((v) & 0xffff) << 16)
-+/* PaRAM.src_dst_bidx: */
-+#define SRCBIDX(v) ((v) & 0xffff)
-+#define DSTBIDX(v) (((v) & 0xffff) << 16)
-+/* PaRAM.link_bcntrld: */
-+#define LINK(v) ((v) & 0xffff)
-+#define BCNTRLD(v) (((v) & 0xffff) << 16)
-+/* PaRAM.src_dst_cidx: */
-+#define SRCCIDX(v) ((v) & 0xffff)
-+#define DSTCIDX(v) (((v) & 0xffff) << 16)
-+/* PaRAM.ccnt: */
-+#define CCNT(v) ((v) & 0xffff)
-+
-+
-+struct cssp_cam_platform_data {
-+	struct i2c_board_info *cam_i2c_board_info;
-+	const char *cam_clk_name;
-+	int dma_ch;
-+	int gpio_reset_pin;
-+};
-+
-+
-+/* ------------------------------------------------------------------
-+	video Basic structures
-+   ------------------------------------------------------------------*/
-+
-+struct cssp_cam_fmt {
-+	char	*name;
-+	u32	fourcc;          /* v4l2 format id */
-+	int	depth;
-+	enum v4l2_mbus_pixelcode code;
-+};
-+
-+/* buffer for one video frame */
-+struct cssp_cam_buffer {
-+	/* common v4l buffer stuff -- must be first */
-+	struct vb2_buffer	vb;
-+	struct list_head	list;
-+	struct cssp_cam_fmt	*fmt;
-+};
-+
-+struct cssp_cam_dmaqueue {
-+	struct list_head	active;
-+};
-+
-+struct cssp_cam_dev {
-+	struct v4l2_device		v4l2_dev;
-+	struct v4l2_ctrl_handler	ctrl_handler;
-+	struct v4l2_subdev		*subdev;
-+
-+	spinlock_t			slock;
-+	struct mutex			mutex;
-+
-+	/* various device info */
-+	struct video_device		*vdev;
-+	struct platform_device		*pdev;
-+
-+	struct cssp_cam_dmaqueue	vidq;
-+	void				*dma_cont_ctx;
-+	int				streaming_started;
-+	struct vb2_buffer		*current_vb;
-+
-+	/* Input Number */
-+	int				input;
-+
-+	/* video capture */
-+	struct cssp_cam_fmt		*fmt;
-+	u32				width;
-+	u32				height;
-+	u32				bytesperline;
-+	u32				sizeimage;
-+	enum v4l2_colorspace		colorspace;
-+	struct vb2_queue		vb_vidq;
-+	enum v4l2_field			field;
-+	unsigned int			field_count;
-+
-+
-+	/* Camera Sensor */
-+	struct i2c_board_info		*camera_board_info;
-+	struct clk			*camera_clk;
-+
-+	unsigned int			reg_base_virt;
-+	unsigned int			reg_base_phys;
-+	resource_size_t			reg_size;
-+	u16				mode;
-+
-+	struct edmacc_param		dma_tr_params;
-+	int				dma_ch;
-+	u64				dma_mask;
-+
-+	int				frame_cnt;
-+
-+	int				reset_pin;
-+};
-+
-+
-+#endif /* CSSP_CAMERA_H */
--- 
-1.7.10
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
deleted file mode 100644
index 60d5be0..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From d87e8e9379764451de06b3f6d13d19424836f64c Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 3 Jul 2012 08:45:47 +0200
-Subject: [PATCH] beaglebone: add support for DVI+audio and audio-only capes
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-am335xevm.c |   32 ++++++++++++++++++++++++++++++--
- 1 file changed, 30 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index 1680612..4b3f7d2 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -2906,8 +2906,10 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 		
- 		beaglebone_leds_free = 0;
- 		dvileds_init(0,0);
--		beaglebone_spi1_free = 0;
--		mcasp0_init(0,0);
-+
-+		// Uncomment these for custom DVI capes with audio populated
-+		//beaglebone_spi1_free = 0;
-+		//mcasp0_init(0,0);
- 	
- 		if (!strncmp("00A1", cape_config.version, 4) || !strncmp("000A", cape_config.version, 4)) {
- 			pr_info("BeagleBone cape: DVI init for revision A1 or older\n");
-@@ -2923,6 +2925,32 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 			dvi_init(0,0);
- 		}
- 	}
-+
-+	if (!strncmp("BB-BONE-DVID-02", cape_config.partnumber, 15)) {
-+		pr_info("BeagleBone cape: initializing DVI+audio cape\n");
-+
-+		beaglebone_leds_free = 0;
-+		dvileds_init(0,0);
-+
-+		beaglebone_spi1_free = 0;
-+		mcasp0_init(0,0);
-+	
-+		setup_pin_mux(dvia2_pin_mux);
-+		gpio_request(BEAGLEBONEDVI_PDn_A2, "DVI_PDn");
-+		gpio_direction_output(BEAGLEBONEDVI_PDn_A2, 1);
-+		dvi_init(0,0);
-+	}
-+
-+	if (!strncmp("BB-BONE-AUDI-01", cape_config.partnumber, 15)) {
-+		pr_info("BeagleBone cape: initializing audio cape\n");
-+
-+		beaglebone_leds_free = 0;
-+		dvileds_init(0,0);
-+
-+		beaglebone_spi1_free = 0;
-+		mcasp0_init(0,0);
-+	}
-+
- 	if (!strncmp("BB-BONE-LCD7-01", cape_config.partnumber, 15)) {
- 		pr_info("BeagleBone cape: initializing LCD cape\n");
- 
--- 
-1.7.10
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-disable-LBO-GPIO-for-battery-cape.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
new file mode 100644
index 0000000..02485c3
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0074-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
@@ -0,0 +1,35 @@
+From f723bdf574163ced9a685783a475b254f6a981d5 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 3 Jul 2012 21:28:44 +0200
+Subject: [PATCH 74/79] beaglebone: disable LBO GPIO for battery cape
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-am335xevm.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
+index bf40ac9..6b4539e 100644
+--- a/arch/arm/mach-omap2/board-am335xevm.c
++++ b/arch/arm/mach-omap2/board-am335xevm.c
+@@ -2999,7 +2999,8 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 		pr_info("BeagleBone cape: initializing battery cape\n");
+ 		// gpio1_6, P9_15 lowbat output
+ 		// AIN4, P9_33 vbat
+-		setup_pin_mux(batterycape_pin_mux);
++		/* LBO doesn't work, so disable it for now
++ 		setup_pin_mux(batterycape_pin_mux);
+ 		#if defined(CONFIG_CHARGER_GPIO)
+ 			int err;
+ 			err = platform_device_register(&beaglebone_charger_device);
+@@ -3007,6 +3008,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
+ 				pr_err("failed to register BeagleBone battery cape gpio\n");
+ 		
+ 		#endif
++		*/
+ 	}
+ 	
+ 	if (!strncmp("BB-BONE-SERL-01", cape_config.partnumber, 15)) {
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
deleted file mode 100644
index 641db75..0000000
--- a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 9332627ac6b70511742208d6fa7c7042c203f852 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Tue, 3 Jul 2012 21:28:44 +0200
-Subject: [PATCH 75/75] beaglebone: disable LBO GPIO for battery cape
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-am335xevm.c |    4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
-index af75c88..7d6ac77 100644
---- a/arch/arm/mach-omap2/board-am335xevm.c
-+++ b/arch/arm/mach-omap2/board-am335xevm.c
-@@ -2999,7 +2999,8 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 		pr_info("BeagleBone cape: initializing battery cape\n");
- 		// gpio1_6, P9_15 lowbat output
- 		// AIN4, P9_33 vbat
--		setup_pin_mux(batterycape_pin_mux);
-+		/* LBO doesn't work, so disable it for now
-+ 		setup_pin_mux(batterycape_pin_mux);
- 		#if defined(CONFIG_CHARGER_GPIO)
- 			int err;
- 			err = platform_device_register(&beaglebone_charger_device);
-@@ -3007,6 +3008,7 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
- 				pr_err("failed to register BeagleBone battery cape gpio\n");
- 		
- 		#endif
-+		*/
- 	}
- 	
- 	if (!strncmp("BB-BONE-SERL-01", cape_config.partnumber, 15)) {
--- 
-1.7.10
-
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0080-vfs-Add-a-trace-point-in-the-mark_inode_dirty-functi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0080-vfs-Add-a-trace-point-in-the-mark_inode_dirty-functi.patch
new file mode 100644
index 0000000..f45178c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/beaglebone/0080-vfs-Add-a-trace-point-in-the-mark_inode_dirty-functi.patch
@@ -0,0 +1,103 @@
+From a0a3563affbbebd9c7385586e1d6031de82c2a83 Mon Sep 17 00:00:00 2001
+From: Arjan van de Ven <arjan at linux.intel.com>
+Date: Fri, 26 Nov 2010 12:18:03 -0800
+Subject: [PATCH] vfs: Add a trace point in the mark_inode_dirty function
+
+PowerTOP would like to be able to show who is keeping the disk
+busy by dirtying data. The most logical spot for this is in the vfs
+in the mark_inode_dirty() function, doing this on the block level
+is not possible because by the time the IO hits the block layer the
+guilty party can no longer be found ("kjournald" and "pdflush" are not
+useful answers to "who caused this file to be dirty).
+
+The trace point follows the same logic/style as the block_dump code
+and pretty much dumps the same data, just not to dmesg (and thus to
+/var/log/messages) but via the trace events streams.
+
+Eventually we should be able to phase out the block dump code, but that's
+for later on after a transition time.
+---
+ fs/fs-writeback.c                |    3 +++
+ include/linux/fs.h               |   12 ++++++++++++
+ include/trace/events/writeback.h |   28 ++++++++++++++++++++++++++++
+ 3 files changed, 43 insertions(+)
+
+diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
+index 54f5786..981ec8c 100644
+--- a/fs/fs-writeback.c
++++ b/fs/fs-writeback.c
+@@ -1072,6 +1072,9 @@ void __mark_inode_dirty(struct inode *inode, int flags)
+ 	if ((inode->i_state & flags) == flags)
+ 		return;
+ 
++	if (flags & (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES))
++		trace_writeback_inode_dirty(inode, flags);
++
+ 	if (unlikely(block_dump))
+ 		block_dump___mark_inode_dirty(inode);
+ 
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 43d36b7..a3e46ee 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -1759,6 +1759,18 @@ struct super_operations {
+ 
+ #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
+ 
++#define INODE_DIRTY_FLAGS \
++	{ I_DIRTY_SYNC,		"DIRTY-SYNC" }, \
++	{ I_DIRTY_DATASYNC,	"DIRTY-DATASYNC" }, \
++	{ I_DIRTY_PAGES,	"DIRTY-PAGES" }, \
++	{ I_NEW,		"NEW" }, \
++	{ I_WILL_FREE,		"WILL-FREE" }, \
++	{ I_FREEING,		"FREEING" }, \
++	{ I_CLEAR,		"CLEAR" }, \
++	{ I_SYNC,		"SYNC" }, \
++	{ I_REFERENCED,		"REFERENCED" }
++
++
+ extern void __mark_inode_dirty(struct inode *, int);
+ static inline void mark_inode_dirty(struct inode *inode)
+ {
+diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h
+index 1f48f14..8053e75 100644
+--- a/include/trace/events/writeback.h
++++ b/include/trace/events/writeback.h
+@@ -400,6 +400,34 @@ DEFINE_EVENT(writeback_congest_waited_template, writeback_wait_iff_congested,
+ 	TP_ARGS(usec_timeout, usec_delayed)
+ );
+ 
++/*
++ * Tracepoint for dirtying an inode; used by PowerTOP
++ */
++TRACE_EVENT(writeback_inode_dirty,
++
++	TP_PROTO(struct inode *inode, int flags),
++
++	TP_ARGS(inode, flags),
++
++	TP_STRUCT__entry(
++		__field(	__kernel_dev_t,	dev		)
++		__field(	ino_t,		ino		)
++		__field(	u32,		flags		)
++	),
++
++	TP_fast_assign(
++		__entry->dev	= inode->i_sb->s_dev;
++		__entry->ino	= inode->i_ino;
++		__entry->flags  = flags;
++	),
++
++	TP_printk("dev %d:%d ino %lu flags %d %s", MAJOR(__entry->dev), MINOR(__entry->dev),
++		  (unsigned long) __entry->ino,
++		  __entry->flags,
++		  __print_flags(__entry->flags, "|", INODE_DIRTY_FLAGS)
++	)
++);
++
+ DECLARE_EVENT_CLASS(writeback_single_inode_template,
+ 
+ 	TP_PROTO(struct inode *inode,
+-- 
+1.7.10
+
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
index eab3127..c137e13 100644
--- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
+++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb
@@ -11,7 +11,7 @@ S = "${WORKDIR}/git"
 MULTI_CONFIG_BASE_SUFFIX = ""
 
 # the PATCHES_OVER_PSP updates it to 3.2.x, so adjust PV to match
-PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.21", d)}"
+PV = "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "3.2", "3.2.23", d)}"
 
 BRANCH = "v3.2-staging"
 SRCREV = "720e07b4c1f687b61b147b31c698cb6816d72f01"
@@ -1445,6 +1445,101 @@ PATCHES_OVER_PSP = " \
 	file://3.2.21/0065-swap-fix-shmem-swapping-when-more-than-8-areas.patch \
 	file://3.2.21/0066-drm-radeon-add-some-additional-6xx-7xx-EG-register-i.patch \
 	file://3.2.21/0067-Linux-3.2.21.patch \
+	file://3.2.22/0001-staging-iio-ad7606-Re-add-missing-scale-attribute.patch \
+	file://3.2.22/0002-Tools-hv-verify-origin-of-netlink-connector-message.patch \
+	file://3.2.22/0003-edac-avoid-mce-decoding-crash-after-edac-driver-unlo.patch \
+	file://3.2.22/0004-hwrng-atmel-rng-fix-data-valid-check.patch \
+	file://3.2.22/0005-staging-r8712u-Add-new-USB-IDs.patch \
+	file://3.2.22/0006-hwmon-applesmc-Limit-key-length-in-warning-messages.patch \
+	file://3.2.22/0007-mm-pmd_read_atomic-fix-32bit-PAE-pmd-walk-vs-pmd_pop.patch \
+	file://3.2.22/0008-thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit.patch \
+	file://3.2.22/0009-nilfs2-ensure-proper-cache-clearing-for-gc-inodes.patch \
+	file://3.2.22/0010-drm-i915-Finish-any-pending-operations-on-the-frameb.patch \
+	file://3.2.22/0011-drm-i915-Remove-use-of-the-autoreported-ringbuffer-H.patch \
+	file://3.2.22/0012-e1000e-Disable-ASPM-L1-on-82574.patch \
+	file://3.2.22/0013-e1000e-Remove-special-case-for-82573-82574-ASPM-L1-d.patch \
+	file://3.2.22/0014-drm-i915-Do-the-fallback-non-IRQ-wait-in-ring-thrott.patch \
+	file://3.2.22/0015-staging-rts_pstor-Fix-possible-panic-by-NULL-pointer.patch \
+	file://3.2.22/0016-gspca-core-Fix-buffers-staying-in-queued-state-after.patch \
+	file://3.2.22/0017-smsusb-add-autodetection-support-for-USB-ID-2040-f5a.patch \
+	file://3.2.22/0018-drm-edid-don-t-return-stack-garbage-from-supports_rb.patch \
+	file://3.2.22/0019-drm-nouveau-fbcon-using-nv_two_heads-is-not-a-good-i.patch \
+	file://3.2.22/0020-dm-thin-reinstate-missing-mempool_free-in-cell_relea.patch \
+	file://3.2.22/0021-ath9k-Fix-a-WARNING-on-suspend-resume-with-IBSS.patch \
+	file://3.2.22/0022-cfg80211-fix-potential-deadlock-in-regulatory.patch \
+	file://3.2.22/0023-ath9k-Fix-softlockup-in-AR9485.patch \
+	file://3.2.22/0024-can-c_can-precedence-error-in-c_can_chip_config.patch \
+	file://3.2.22/0025-ath9k-fix-a-tx-rate-duration-calculation-bug.patch \
+	file://3.2.22/0026-batman-adv-fix-skb-data-assignment.patch \
+	file://3.2.22/0027-ARM-SAMSUNG-Should-check-for-IS_ERR-clk-instead-of-N.patch \
+	file://3.2.22/0028-ath9k_hw-avoid-possible-infinite-loop-in-ar9003_get_.patch \
+	file://3.2.22/0029-iwlwifi-remove-log_event-debugfs-file-debugging-is-d.patch \
+	file://3.2.22/0030-ARM-SAMSUNG-Fix-for-S3C2412-EBI-memory-mapping.patch \
+	file://3.2.22/0031-USB-option-add-id-for-Cellient-MEN-200.patch \
+	file://3.2.22/0032-oprofile-perf-use-NR_CPUS-instead-or-nr_cpumask_bits.patch \
+	file://3.2.22/0033-drm-i915-Refactor-the-deferred-PM_IIR-handling-into-.patch \
+	file://3.2.22/0034-drm-i915-rip-out-the-PM_IIR-WARN.patch \
+	file://3.2.22/0035-drm-i915-Fix-eDP-blank-screen-after-S3-resume-on-HP-.patch \
+	file://3.2.22/0036-PM-Sleep-Prevent-waiting-forever-on-asynchronous-sus.patch \
+	file://3.2.22/0037-x86-cpufeature-Rename-X86_FEATURE_DTS-to-X86_FEATURE.patch \
+	file://3.2.22/0038-stable-Allow-merging-of-backports-for-serious-user-v.patch \
+	file://3.2.22/0039-ALSA-hda-Add-Realtek-ALC280-codec-support.patch \
+	file://3.2.22/0040-USB-option-Add-USB-ID-for-Novatel-Ovation-MC551.patch \
+	file://3.2.22/0041-USB-CP210x-Add-10-Device-IDs.patch \
+	file://3.2.22/0042-xen-netfront-teardown-the-device-before-unregisterin.patch \
+	file://3.2.22/0043-can-flexcan-use-be32_to_cpup-to-handle-the-value-of-.patch \
+	file://3.2.22/0044-acpi_pad-fix-power_saving-thread-deadlock.patch \
+	file://3.2.22/0045-batman-adv-only-drop-packets-of-known-wifi-clients.patch \
+	file://3.2.22/0046-Linux-3.2.22.patch \
+	file://3.2.23/0001-splice-fix-racy-pipe-buffers-uses.patch \
+	file://3.2.23/0002-umem-fix-up-unplugging.patch \
+	file://3.2.23/0003-mwifiex-fix-11n-rx-packet-drop-issue.patch \
+	file://3.2.23/0004-mwifiex-fix-WPS-eapol-handshake-failure.patch \
+	file://3.2.23/0005-NFC-Prevent-multiple-buffer-overflows-in-NCI.patch \
+	file://3.2.23/0006-ath9k-fix-dynamic-WEP-related-regression.patch \
+	file://3.2.23/0007-NFC-Return-from-rawsock_release-when-sk-is-NULL.patch \
+	file://3.2.23/0008-rtlwifi-rtl8192cu-New-USB-IDs.patch \
+	file://3.2.23/0009-ath9k-enable-serialize_regmode-for-non-PCIE-AR9287.patch \
+	file://3.2.23/0010-mac80211-correct-behaviour-on-unrecognised-action-fr.patch \
+	file://3.2.23/0011-ASoC-tlv320aic3x-Fix-codec-pll-configure-bug.patch \
+	file://3.2.23/0012-powerpc-xmon-Use-cpumask-iterator-to-avoid-warning.patch \
+	file://3.2.23/0013-powerpc-kvm-sldi-should-be-sld.patch \
+	file://3.2.23/0014-md-raid10-Don-t-try-to-recovery-unmatched-and-unused.patch \
+	file://3.2.23/0015-md-raid5-Do-not-add-data_offset-before-call-to-is_ba.patch \
+	file://3.2.23/0016-md-raid5-In-ops_run_io-inc-nr_pending-before-calling.patch \
+	file://3.2.23/0017-md-raid10-fix-failure-when-trying-to-repair-a-read-e.patch \
+	file://3.2.23/0018-drm-i915-kick-any-firmware-framebuffers-before-claim.patch \
+	file://3.2.23/0019-dm-persistent-data-fix-shadow_info_leak-on-dm_tm_des.patch \
+	file://3.2.23/0020-dm-persistent-data-handle-space-map-checker-creation.patch \
+	file://3.2.23/0021-dm-persistent-data-fix-allocation-failure-in-space-m.patch \
+	file://3.2.23/0022-ALSA-hda-Fix-power-map-regression-for-HP-dv6-co.patch \
+	file://3.2.23/0023-tracing-change-CPU-ring-buffer-state-from-tracing_cp.patch \
+	file://3.2.23/0024-mwifiex-fix-wrong-return-values-in-add_virtual_intf-.patch \
+	file://3.2.23/0025-udf-Use-ret-instead-of-abusing-i-in-udf_load_logical.patch \
+	file://3.2.23/0026-udf-Avoid-run-away-loop-when-partition-table-length-.patch \
+	file://3.2.23/0027-udf-Fortify-loading-of-sparing-table.patch \
+	file://3.2.23/0028-ARM-fix-rcu-stalls-on-SMP-platforms.patch \
+	file://3.2.23/0029-net-sock-validate-data_len-before-allocating-skb-in-.patch \
+	file://3.2.23/0030-cipso-handle-CIPSO-options-correctly-when-NetLabel-i.patch \
+	file://3.2.23/0031-net-l2tp_eth-fix-kernel-panic-on-rmmod-l2tp_eth.patch \
+	file://3.2.23/0032-l2tp-fix-a-race-in-l2tp_ip_sendmsg.patch \
+	file://3.2.23/0033-sky2-fix-checksum-bit-management-on-some-chips.patch \
+	file://3.2.23/0034-be2net-fix-a-race-in-be_xmit.patch \
+	file://3.2.23/0035-dummy-fix-rcu_sched-self-detected-stalls.patch \
+	file://3.2.23/0036-bonding-Fix-corrupted-queue_mapping.patch \
+	file://3.2.23/0037-ethtool-allow-ETHTOOL_GSSET_INFO-for-users.patch \
+	file://3.2.23/0038-netpoll-fix-netpoll_send_udp-bugs.patch \
+	file://3.2.23/0039-ipv6-Move-ipv6-proc-file-registration-to-end-of-init.patch \
+	file://3.2.23/0040-bridge-Assign-rtnl_link_ops-to-bridge-devices-create.patch \
+	file://3.2.23/0041-Btrfs-run-delayed-directory-updates-during-log-repla.patch \
+	file://3.2.23/0042-cifs-when-server-doesn-t-set-CAP_LARGE_READ_X-cap-de.patch \
+	file://3.2.23/0043-ocfs2-clear-unaligned-io-flag-when-dio-fails.patch \
+	file://3.2.23/0044-aio-make-kiocb-private-NUll-in-init_sync_kiocb.patch \
+	file://3.2.23/0045-mtd-cafe_nand-fix-an-vs-mistake.patch \
+	file://3.2.23/0046-mm-Hold-a-file-reference-in-madvise_remove.patch \
+	file://3.2.23/0047-tcm_fc-Resolve-suspicious-RCU-usage-warnings.patch \
+	file://3.2.23/0048-vfs-make-O_PATH-file-descriptors-usable-for-fchdir.patch \
+	file://3.2.23/0049-Linux-3.2.23.patch \
 	file://led/0001-leds-heartbeat-stop-on-shutdown-reboot-or-panic.patch \
 	file://libertas/0001-USB-convert-drivers-net-to-use-module_usb_driver.patch \
 	file://libertas/0002-net-fix-assignment-of-0-1-to-bool-variables.patch \
@@ -1530,18 +1625,19 @@ PATCHES_OVER_PSP = " \
 	file://beaglebone/0063-beaglebone-dvi-cape-audio-hacks.patch \
 	file://beaglebone/0064-beaglebone-always-execute-the-pin-free-checks.patch \
 	file://beaglebone/0065-ti_tscadc-switch-to-16x-averaging.patch \
-	file://beaglebone/0067-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch \
-	file://beaglebone/0068-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch \
-	file://beaglebone/0069-beaglebone-add-support-for-LCD3-rev-A1.patch \
-	file://beaglebone/0070-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch \
-	file://beaglebone/0071-beaglebone-fix-LCD3-led-key-overlap.patch \
-	file://beaglebone/0072-beaglebone-fix-audio-spi-clash.patch \
-	file://beaglebone/0073-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch \
-	file://beaglebone/0074-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch \
-	file://beaglebone/0075-beaglebone-disable-LBO-GPIO-for-battery-cape.patch \
+	file://beaglebone/0066-video-da8xx-fb-Add-Newhaven-LCD-Panel-details.patch \
+	file://beaglebone/0067-beaglebone-add-support-for-the-4.3-lcd-cape-with-res.patch \
+	file://beaglebone/0068-beaglebone-add-support-for-LCD3-rev-A1.patch \
+	file://beaglebone/0069-beaglebone-fix-buttons-spidev-clash-when-using-mcasp.patch \
+	file://beaglebone/0070-beaglebone-fix-LCD3-led-key-overlap.patch \
+	file://beaglebone/0071-beaglebone-fix-audio-spi-clash.patch \
+	file://beaglebone/0072-beaglebone-add-support-for-QuickLogic-Camera-interfa.patch \
+	file://beaglebone/0073-beaglebone-add-support-for-DVI-audio-and-audio-only-.patch \
+	file://beaglebone/0074-beaglebone-disable-LBO-GPIO-for-battery-cape.patch \
 	file://beaglebone/0075-video-da8xx-fb-calculate-pixel-clock-period-for-the-.patch \
 	file://beaglebone/0076-beaglebone-improve-GPMC-bus-timings-for-camera-cape.patch \
 	file://beaglebone/0077-beaglebone-disable-UYVY-VYUY-and-YVYU-modes-in-camer.patch \
 	file://beaglebone/0078-beaglebone-error-handling-for-DMA-completion-in-cssp.patch \
 	file://beaglebone/0079-AM335X-errata-OPP50-on-MPU-domain-is-not-supported.patch \
+	file://beaglebone/0080-vfs-Add-a-trace-point-in-the-mark_inode_dirty-functi.patch \
 "
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH][for-denzil 12/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree
  2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
                   ` (9 preceding siblings ...)
  2012-07-29 17:08 ` [PATCH][for-denzil 11/12] linux-ti33x-psp 3.2: update to 3.2.23 Koen Kooi
@ 2012-07-29 17:08 ` Koen Kooi
  2012-07-31 19:43   ` Denys Dmytriyenko
  10 siblings, 1 reply; 14+ messages in thread
From: Koen Kooi @ 2012-07-29 17:08 UTC (permalink / raw)
  To: meta-ti

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
---
 recipes-bsp/u-boot/u-boot_2011.10rc.bb |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/recipes-bsp/u-boot/u-boot_2011.10rc.bb b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
index c4b4ca7..7035b4c 100644
--- a/recipes-bsp/u-boot/u-boot_2011.10rc.bb
+++ b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
@@ -6,7 +6,7 @@ COMPATIBLE_MACHINE = "(ti33x)"
 DEFAULT_PREFERENCE_ti33x = "99"
 
 PV = "2011.09+git"
-PR = "r28"
+PR = "r29"
 
 # SPL build
 UBOOT_BINARY = "u-boot.img"
@@ -26,7 +26,7 @@ SRC_URI = "git://arago-project.org/git/projects/u-boot-am33x.git;protocol=git;br
            file://2011.09git/0010-am335x-switch-to-ext4-mode.patch \
           "
 
-SRCREV = "ec687252299796639ff9bcb981804fbec7b445a4"
+SRCREV = "dc52533ccff00a12761f793d66b39e4f6a4a3bba"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb"
 
-- 
1.7.10



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH][for-denzil 12/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree
  2012-07-29 17:08 ` [PATCH][for-denzil 12/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree Koen Kooi
@ 2012-07-31 19:43   ` Denys Dmytriyenko
  2012-07-31 21:03     ` Koen Kooi
  0 siblings, 1 reply; 14+ messages in thread
From: Denys Dmytriyenko @ 2012-07-31 19:43 UTC (permalink / raw)
  To: Koen Kooi; +Cc: meta-ti

On Sun, Jul 29, 2012 at 07:08:34PM +0200, Koen Kooi wrote:
> Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
> ---
>  recipes-bsp/u-boot/u-boot_2011.10rc.bb |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/recipes-bsp/u-boot/u-boot_2011.10rc.bb b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
> index c4b4ca7..7035b4c 100644
> --- a/recipes-bsp/u-boot/u-boot_2011.10rc.bb
> +++ b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
> @@ -6,7 +6,7 @@ COMPATIBLE_MACHINE = "(ti33x)"
>  DEFAULT_PREFERENCE_ti33x = "99"
>  
>  PV = "2011.09+git"
> -PR = "r28"
> +PR = "r29"
>  
>  # SPL build
>  UBOOT_BINARY = "u-boot.img"
> @@ -26,7 +26,7 @@ SRC_URI = "git://arago-project.org/git/projects/u-boot-am33x.git;protocol=git;br
>             file://2011.09git/0010-am335x-switch-to-ext4-mode.patch \
>            "
>  
> -SRCREV = "ec687252299796639ff9bcb981804fbec7b445a4"
> +SRCREV = "dc52533ccff00a12761f793d66b39e4f6a4a3bba"

Should it go to the master first?

-- 
Denys


>  LIC_FILES_CHKSUM = "file://COPYING;md5=1707d6db1d42237583f50183a5651ecb"
>  
> -- 
> 1.7.10
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH][for-denzil 12/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree
  2012-07-31 19:43   ` Denys Dmytriyenko
@ 2012-07-31 21:03     ` Koen Kooi
  0 siblings, 0 replies; 14+ messages in thread
From: Koen Kooi @ 2012-07-31 21:03 UTC (permalink / raw)
  To: Denys Dmytriyenko; +Cc: meta-ti


Op 31 jul. 2012, om 21:43 heeft Denys Dmytriyenko <denys@ti.com> het volgende geschreven:

> On Sun, Jul 29, 2012 at 07:08:34PM +0200, Koen Kooi wrote:
>> Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
>> ---
>> recipes-bsp/u-boot/u-boot_2011.10rc.bb |    4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>> 
>> diff --git a/recipes-bsp/u-boot/u-boot_2011.10rc.bb b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
>> index c4b4ca7..7035b4c 100644
>> --- a/recipes-bsp/u-boot/u-boot_2011.10rc.bb
>> +++ b/recipes-bsp/u-boot/u-boot_2011.10rc.bb
>> @@ -6,7 +6,7 @@ COMPATIBLE_MACHINE = "(ti33x)"
>> DEFAULT_PREFERENCE_ti33x = "99"
>> 
>> PV = "2011.09+git"
>> -PR = "r28"
>> +PR = "r29"
>> 
>> # SPL build
>> UBOOT_BINARY = "u-boot.img"
>> @@ -26,7 +26,7 @@ SRC_URI = "git://arago-project.org/git/projects/u-boot-am33x.git;protocol=git;br
>>            file://2011.09git/0010-am335x-switch-to-ext4-mode.patch \
>>           "
>> 
>> -SRCREV = "ec687252299796639ff9bcb981804fbec7b445a4"
>> +SRCREV = "dc52533ccff00a12761f793d66b39e4f6a4a3bba"
> 
> Should it go to the master first?

Oops, that one snuck in. Yes, master first please :)

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-07-31 21:02 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-29 17:08 [PATCH][for-denzil 01/12] beaglebone-tester: bump SRCREV to fix serial console race Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 02/12] beaglebone-tester: re-enable pmic test Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 03/12] linux-ti33x-psp 3.2: update to 3.2.21, add libertas fixes Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 04/12] linux-ti33x-psp 3.2: fix audio/spidev clash on beaglebone Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 05/12] beaglebone-capes: use backlight hack for all LCD4 variants Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 06/12] linux-ti33x-psp 3.2: add camera driver for beaglebone Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 07/12] linux-ti33x-psp 3.2: add support for audio cape and disable LBO gpio for battery cape Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 08/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 09/12] linux-ti33x-psp 3.2: add fixed for cssp, fbset and OPP50 Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 10/12] linux-ti33x-psp 3.2: enable more tracing features for beaglebone Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 11/12] linux-ti33x-psp 3.2: update to 3.2.23 Koen Kooi
2012-07-29 17:08 ` [PATCH][for-denzil 12/12] u-boot 2011.09+git: update to latest version of Tom Rini's tree Koen Kooi
2012-07-31 19:43   ` Denys Dmytriyenko
2012-07-31 21:03     ` Koen Kooi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.