summaryrefslogtreecommitdiff
path: root/drivers/iommu
AgeCommit message (Collapse)Author
2016-05-18iommu/iommu-debug: Maintain list of domains during allocSusheel Khiani
Current list of domains in iommu-debug was only maintained during attach/detach calls. But for masters like graphics this won't account for all the domains, as it allocates multiple different domains but attaches only one domain at a time. Add support for maintaining list of unattached domains too by adding them to debug_attachments list during domain alloc but keeping dev as NULL. We would add entry in debugfs attachment directory only on actual attach call. Change-Id: Ifde043e5c39f356b4187a30cbdf020ee943618f1 Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-05-03iommu/iommu-debug: Add dummy driver for standalone testingMitchel Humpherys
The IOMMU test framework relies on the `iommus' property, and we currently rely on these methods for making that happen: (1) Clients enabling their DT nodes. (2) We put an `iommus' property in our IOMMU DT nodes themselves. The problem with (1) is that clients aren't always ready during early chip validation. The problem with (2) is that it results in us recursively mapping into the SMMU when we try to do cache maintenance on our page table memory. Fix these problems by introducing a dummy driver with associated device tree bindings that will do absolutely nothing other than wait for the SMMU driver and IOMMU test framework to slurp it up. CRs-Fixed: 1003233 Change-Id: I6a5802aff5bab99d29c6ed9d953a203cbd8015bb Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2016-04-27iommu/arm-smmu: Disable clocks in reverse orderLiam Mark
Currently we're disabling clocks in the same order in which we enable them, but some clocks have dependencies and ordering requirements so we should actually be disabling them in reverse order. Do it. CRs-Fixed: 1000848 Change-Id: Ie01df24b72a3247a24ab6fbd7a90ec8cfee7236f Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2016-04-05iommu/arm-smmu: Fix DOMAIN_ATTR_S1_BYPASS checkPatrick Daly
change "iommu/arm-smmu: Support DOMAIN_ATTR_S1_BYPASS" checks the wrong bit when determine whether to bypass or not to bypass stage1 translation. Fix it. CRs-Fixed: 995213 Change-Id: Id347f540f866be6b8442d5f166c6cf7b0ae4c000 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-04-05iommu/arm-smmu: Support DOMAIN_ATTR_S1_BYPASSPatrick Daly
Certain configurations may require nested translation, but may want to avoid software performance limitation on map/unmap operations. Change-Id: I6653b3b6ceb071283fb5a8e07257c496e99dd1f3 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-25Revert "iommu/arm-smmu: add DT option to avoid enabling translations on attach"Patrick Daly
This reverts commit 5642406b6c3e ("iommu/arm-smmu: add DT option to avoid enabling translations on attach") This device tree option is obsolete. Remove it. Change-Id: I6fc2e3127295b9b597acc21ef5d6b1f78519de68 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-25iommu/arm-smmu: Defer SMMU probe if clock-tree is not readyMathew Joseph Karimpanal
A few clocks like gpu_ahb_clk may be available late on some platforms like on boards that use an I2C-controlled off-SoC power regulator. Defer SMMU probe if clock-tree is not ready. CRs-fixed: 971957 Change-Id: I3f13b36affa0a904bda7175d0dacff298794a906 Signed-off-by: Mathew Joseph Karimpanal <mkarim@codeaurora.org>
2016-03-23iommu/arm-smmu: Fix a Null pointer dereferencePatrick Daly
Introduced by 99afd0531465fdaa95aaf5d0a9b73f7669d0f9c7. "iommu/arm-smmu: Be explicit about security mechanism" Internal error: Oops: 96000006 [#1] PREEMPT SMP [<ffffffc0009f37d0>] arm_smmu_is_master_side_secure+0x14/0x28 [<ffffffc0009f029c>] io_pgtable_free_pages_exact+0x30/0x94 [<ffffffc0009f0388>] __arm_lpae_free_pgtable+0x88/0xf0 [<ffffffc0009f03e4>] __arm_lpae_free_pgtable+0xe4/0xf0 [<ffffffc0009f0410>] arm_lpae_free_pgtable+0x20/0x38 [<ffffffc0009f01cc>] free_io_pgtable_ops+0x24/0x30 [<ffffffc0009f4ce8>] arm_smmu_domain_destroy+0x1c/0xa8 [<ffffffc0009ed0cc>] iommu_domain_free+0x1c/0x34 [<ffffffc0009f35c4>] iommu_debug_device_profiling+0x660/0x6a4 [<ffffffc0009f361c>] iommu_debug_secure_profiling_show+0x14/0x24 [<ffffffc0001c4a2c>] seq_read+0x180/0x3b0 Found when running: cat /sys/kernel/debug/iommu/tests/client_name/secure_profiling Add a new smmu_domain variable to track whether the domain belongs to a master-side or slave-side secure context. Change-Id: Ib32cc6fb03f863522de10e416007114c6e91776f Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-23iommu/arm-smmu: Check for static-cb option before requesting TZSusheel Khiani
We want to request TZ to change page table format for non secure context banks only if static-cb option is enabled. If the option is disabled then programming of global registers would be done by HLOS itself and we need not request TZ to change page table format. Change-Id: Id2228e6d2ec835e169d679296760256ce0524050 Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-03-23iommu/arm-smmu: Request TZ to change page table format to V8LSusheel Khiani
For targets where we have slave side protection, global register programming is handled by TZ. And since it supports V7S page table format only, by default TZ programs all context bank to permit V7S format by programming VA64 bit of CBA2R register as 0. But if context bank itself is non secure then its page tables are managed by HLOS where we can support V8L page table format. So, provide a way to request TZ to change page table format to V8L for non secure context banks. CRs-Fixed: 959535 Change-Id: I1f4d4b98c4f240a8351f791901abdfa78b829973 Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-03-23iommu/arm-smmu: Add explicit restore_sec_cfg call at SMMU probeSusheel Khiani
restore_sec_cfg call needs to be made to inform secure world that device have resumed from power collapse mode and security settings need to be relaxed. Accordingly we had a restore_sec_cfg call in arm_smmu_resume which would be called from regulator_notifier on regulator enable event. But during initial device probe also we need to read through SMMU global registers like IDR0, IDR1 to understand hardware configuration of SMMU and accordingly populate our data structures. We can't call arm_smmu_resume at this point as we are still to identify page size of SMMU register map which we get only through reading IDR1 register. So make an explicit restore_sec_cfg call at SMMU probe which would enable us to read through SMMU global registers. We need this call only for targets which have slave side protection mechanism. CRs-Fixed: 959535 Change-Id: If4e53966edbf4e76a3d03f3a8684563f0ceac13d Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-03-23iommu/arm-smmu: Make atomic scm call in slave side protection modeSusheel Khiani
When we have SMMU halt/resume functionality enabled we try to program MICRO_MMU_CTRL register which is part of SMMU implementation defined register space. Now targets which have slave side protection mechanism, implementation defined register space of SMMU is protected by XPUs along with other SMMU global register space. As a result we would get a fault if we directly try to program MICRO_MMU_CTRL register. Instead we request TZ through atomic scm call to program this register for us. Since we have read only permission available for these registers we need to ensure that write operation is requested through TZ. CRs-Fixed: 959535 Change-Id: Ie257553a25bb11785b69568d8eccbef91d8d18e0 Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-03-23iommu/arm-smmu: Add support for slave side protectionSusheel Khiani
For targets where we have no hypervisor, slave side protection mechanism is used to provide buffer protection. Add functionality to make calls into TZ for mapping/unmapping of buffers. CRs-Fixed: 959535 Change-Id: I3106a98370a70611f4670aaf1c0f95c9e758a87c Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-03-23iommu/arm-smmu: add option to enable static context bank allocationSusheel Khiani
To implement slave side protection, programming of global registers as well as secure context bank registers is handed over to TZ. Now, instead of dynamically allocating context banks, TZ allocates CBs once in pre defined static manner during boot and this allocation is maintained throughout the life of system. Add an option to enable use of this pre-defined context bank allocation. We would be reading through SMR and S2CR registers at run time to identify CB allocated for a particular sid. CRs-Fixed: 959535 Change-Id: I782470a2e4d2a66be17ed2b965ba52b7917592f6 Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-03-23iommu/arm-smmu: Be explicit about security mechanismMitchel Humpherys
Up until now, the arm-smmu driver has only supported one type of security mechanism: master-side access control. However, in the near future it will be getting support for slave-side access control, at which point saying a domain is "secure" will be ambiguous. Make the distinction explicit by renaming arm_smmu_is_domain_secure to arm_smmu_is_master_side_secure. CRs-Fixed: 959535 Change-Id: Ie9bc077fe60d0b97c744fdb5b3f553cc056df27f Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
2016-03-23iommu: Add NULL pointer check in iommu_present functionSusheel Khiani
We call msm_iommu_bus_register only when legacy msm iommu driver is enabled. If for some reason the driver is disabled, we never register our dummy bus msm_iommu_non_sec_bus_type. So, we might end up with NULL pointer exception if clients try to call iommu_present with this dummy bus. Put a NULL pointer check to ensure we don't end up crashing system if legacy driver is disabled. Change-Id: I7122e3355459e5115d639a8c1aab547bf0fc7f6e Signed-off-by: Susheel Khiani <skhiani@codeaurora.org>
2016-03-23drivers: iommu, leds, input, clk, devfreq: fix warningsRohit Vaswani
Fix some variable initializations which would otherwise cause forbidden warnings. Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org> Signed-off-by: David Keitel <dkeitel@codeaurora.org>
2016-03-23Merge remote-tracking branch 'lsk-44/linux-linaro-lsk-v4.4' into 44rc2David Keitel
* lsk-44/linux-linaro-lsk-v4.4: Linux 4.4.3 modules: fix modparam async_probe request module: wrapper for symbol name. itimers: Handle relative timers with CONFIG_TIME_LOW_RES proper posix-timers: Handle relative timers with CONFIG_TIME_LOW_RES proper timerfd: Handle relative timers with CONFIG_TIME_LOW_RES proper prctl: take mmap sem for writing to protect against others xfs: log mount failures don't wait for buffers to be released Revert "xfs: clear PF_NOFREEZE for xfsaild kthread" xfs: inode recovery readahead can race with inode buffer creation libxfs: pack the agfl header structure so XFS_AGFL_SIZE is correct ovl: setattr: check permissions before copy-up ovl: root: copy attr ovl: check dentry positiveness in ovl_cleanup_whiteouts() ovl: use a minimal buffer in ovl_copy_xattr ovl: allow zero size xattr futex: Drop refcount if requeue_pi() acquired the rtmutex devm_memremap_release(): fix memremap'd addr handling ipc/shm: handle removed segments gracefully in shm_mmap() intel_scu_ipcutil: underflow in scu_reg_access() mm,thp: khugepaged: call pte flush at the time of collapse dump_stack: avoid potential deadlocks radix-tree: fix oops after radix_tree_iter_retry drivers/hwspinlock: fix race between radix tree insertion and lookup radix-tree: fix race in gang lookup MAINTAINERS: return arch/sh to maintained state, with new maintainers memcg: only free spare array when readers are done numa: fix /proc/<pid>/numa_maps for hugetlbfs on s390 fs/hugetlbfs/inode.c: fix bugs in hugetlb_vmtruncate_list() scripts/bloat-o-meter: fix python3 syntax error dma-debug: switch check from _text to _stext m32r: fix m32104ut_defconfig build fail xhci: Fix list corruption in urb dequeue at host removal Revert "xhci: don't finish a TD if we get a short-transfer event mid TD" iommu/vt-d: Clear PPR bit to ensure we get more page request interrupts iommu/vt-d: Fix 64-bit accesses to 32-bit DMAR_GSTS_REG iommu/vt-d: Fix mm refcounting to hold mm_count not mm_users iommu/amd: Correct the wrong setting of alias DTE in do_attach iommu/vt-d: Don't skip PCI devices when disabling IOTLB Input: vmmouse - fix absolute device registration string_helpers: fix precision loss for some inputs Input: i8042 - add Fujitsu Lifebook U745 to the nomux list Input: elantech - mark protocols v2 and v3 as semi-mt mm: fix regression in remap_file_pages() emulation mm: replace vma_lock_anon_vma with anon_vma_lock_read/write mm: fix mlock accouting libnvdimm: fix namespace object confusion in is_uuid_busy() mm: soft-offline: check return value in second __get_any_page() call perf kvm record/report: 'unprocessable sample' error while recording/reporting guest data KVM: PPC: Fix ONE_REG AltiVec support KVM: PPC: Fix emulation of H_SET_DABR/X on POWER8 KVM: arm/arm64: Fix reference to uninitialised VGIC arm64: dma-mapping: fix handling of devices registered before arch_initcall ARM: OMAP2+: Fix ppa_zero_params and ppa_por_params for rodata ARM: OMAP2+: Fix save_secure_ram_context for rodata ARM: OMAP2+: Fix l2dis_3630 for rodata ARM: OMAP2+: Fix l2_inv_api_params for rodata ARM: OMAP2+: Fix wait_dll_lock_timed for rodata ARM: dts: at91: sama5d4ek: add phy address and IRQ for macb0 ARM: dts: at91: sama5d4 xplained: fix phy0 IRQ type ARM: dts: at91: sama5d4: fix instance id of DBGU ARM: dts: at91: sama5d4 xplained: properly mux phy interrupt ARM: dts: omap5-board-common: enable rtc and charging of backup battery ARM: dts: Fix omap5 PMIC control lines for RTC writes ARM: dts: Fix wl12xx missing clocks that cause hangs ARM: nomadik: fix up SD/MMC DT settings ARM: 8517/1: ICST: avoid arithmetic overflow in icst_hz() ARM: 8519/1: ICST: try other dividends than 1 arm64: mm: avoid calling apply_to_page_range on empty range ARM: mvebu: remove duplicated regulator definition in Armada 388 GP powerpc/ioda: Set "read" permission when "write" is set powerpc/powernv: Fix stale PE primary bus powerpc/eeh: Fix stale cached primary bus powerpc/eeh: Fix PE location code SUNRPC: Fixup socket wait for memory udf: Check output buffer length when converting name to CS0 udf: Prevent buffer overrun with multi-byte characters udf: limit the maximum number of indirect extents in a row pNFS/flexfiles: Fix an XDR encoding bug in layoutreturn nfs: Fix race in __update_open_stateid() pNFS/flexfiles: Fix an Oopsable typo in ff_mirror_match_fh() NFS: Fix attribute cache revalidation cifs: fix erroneous return value cifs_dbg() outputs an uninitialized buffer in cifs_readdir() cifs: fix race between call_async() and reconnect() cifs: Ratelimit kernel log messages iio: inkern: fix a NULL dereference on error iio: pressure: mpl115: fix temperature offset sign iio: light: acpi-als: Report data as processed iio: dac: mcp4725: set iio name property in sysfs iio: add IIO_TRIGGER dependency to STK8BA50 iio: add HAS_IOMEM dependency to VF610_ADC iio-light: Use a signed return type for ltr501_match_samp_freq() iio:adc:ti_am335x_adc Fix buffered mode by identifying as software buffer. iio: adis_buffer: Fix out-of-bounds memory access scsi: fix soft lockup in scsi_remove_target() on module removal SCSI: Add Marvell Console to VPD blacklist scsi_dh_rdac: always retry MODE SELECT on command lock violation drivers/scsi/sg.c: mark VMA as VM_IO to prevent migration SCSI: fix crashes in sd and sr runtime PM iscsi-target: Fix potential dead-lock during node acl delete scsi: add Synology to 1024 sector blacklist klist: fix starting point removed bug in klist iterators tracepoints: Do not trace when cpu is offline tracing: Fix freak link error caused by branch tracer perf tools: tracepoint_error() can receive e=NULL, robustify it tools lib traceevent: Fix output of %llu for 64 bit values read on 32 bit machines ptrace: use fsuid, fsgid, effective creds for fs access checks Btrfs: fix direct IO requests not reporting IO error to user space Btrfs: fix hang on extent buffer lock caused by the inode_paths ioctl Btrfs: fix page reading in extent_same ioctl leading to csum errors Btrfs: fix invalid page accesses in extent_same (dedup) ioctl btrfs: properly set the termination value of ctx->pos in readdir Revert "btrfs: clear PF_NOFREEZE in cleaner_kthread()" Btrfs: fix fitrim discarding device area reserved for boot loader's use btrfs: handle invalid num_stripes in sys_array ext4: don't read blocks from disk after extents being swapped ext4: fix potential integer overflow ext4: fix scheduling in atomic on group checksum failure serial: omap: Prevent DoS using unprivileged ioctl(TIOCSRS485) serial: 8250_pci: Add Intel Broadwell ports tty: Add support for PCIe WCH382 2S multi-IO card pty: make sure super_block is still valid in final /dev/tty close pty: fix possible use after free of tty->driver_data staging/speakup: Use tty_ldisc_ref() for paste kworker phy: twl4030-usb: Fix unbalanced pm_runtime_enable on module reload phy: twl4030-usb: Relase usb phy on unload ALSA: seq: Fix double port list deletion ALSA: seq: Fix leak of pool buffer at concurrent writes ALSA: pcm: Fix rwsem deadlock for non-atomic PCM stream ALSA: hda - Cancel probe work instead of flush at remove x86/mm: Fix vmalloc_fault() to handle large pages properly x86/uaccess/64: Handle the caching of 4-byte nocache copies properly in __copy_user_nocache() x86/uaccess/64: Make the __copy_user_nocache() assembly code more readable x86/mm/pat: Avoid truncation when converting cpa->numpages to address x86/mm: Fix types used in pgprot cacheability flags translations Linux 4.4.2 HID: multitouch: fix input mode switching on some Elan panels mm, vmstat: fix wrong WQ sleep when memory reclaim doesn't make any progress zsmalloc: fix migrate_zspage-zs_free race condition zram: don't call idr_remove() from zram_remove() zram: try vmalloc() after kmalloc() zram/zcomp: use GFP_NOIO to allocate streams rtlwifi: rtl8821ae: Fix 5G failure when EEPROM is incorrectly encoded rtlwifi: rtl8821ae: Fix errors in parameter initialization crypto: marvell/cesa - fix test in mv_cesa_dev_dma_init() crypto: atmel-sha - remove calls of clk_prepare() from atomic contexts crypto: atmel-sha - fix atmel_sha_remove() crypto: algif_skcipher - Do not set MAY_BACKLOG on the async path crypto: algif_skcipher - Do not dereference ctx without socket lock crypto: algif_skcipher - Do not assume that req is unchanged crypto: user - lock crypto_alg_list on alg dump EVM: Use crypto_memneq() for digest comparisons crypto: algif_hash - wait for crypto_ahash_init() to complete crypto: shash - Fix has_key setting crypto: chacha20-ssse3 - Align stack pointer to 64 bytes crypto: caam - make write transactions bufferable on PPC platforms crypto: algif_skcipher - sendmsg SG marking is off by one crypto: algif_skcipher - Load TX SG list after waiting crypto: crc32c - Fix crc32c soft dependency crypto: algif_skcipher - Fix race condition in skcipher_check_key crypto: algif_hash - Fix race condition in hash_check_key crypto: af_alg - Forbid bind(2) when nokey child sockets are present crypto: algif_skcipher - Remove custom release parent function crypto: algif_hash - Remove custom release parent function crypto: af_alg - Allow af_af_alg_release_parent to be called on nokey path ahci: Intel DNV device IDs SATA libata: disable forced PORTS_IMPL for >= AHCI 1.3 crypto: algif_skcipher - Add key check exception for cipher_null crypto: skcipher - Add crypto_skcipher_has_setkey crypto: algif_hash - Require setkey before accept(2) crypto: hash - Add crypto_ahash_has_setkey crypto: algif_skcipher - Add nokey compatibility path crypto: af_alg - Add nokey compatibility path crypto: af_alg - Fix socket double-free when accept fails crypto: af_alg - Disallow bind/setkey/... after accept(2) crypto: algif_skcipher - Require setkey before accept(2) sched: Fix crash in sched_init_numa() ext4 crypto: add missing locking for keyring_key access iommu/io-pgtable-arm: Ensure we free the final level on teardown tty: Fix unsafe ldisc reference via ioctl(TIOCGETD) tty: Retry failed reopen if tty teardown in-progress tty: Wait interruptibly for tty lock on reopen n_tty: Fix unsafe reference to "other" ldisc usb: xhci: apply XHCI_PME_STUCK_QUIRK to Intel Broxton-M platforms usb: xhci: handle both SSIC ports in PME stuck quirk usb: phy: msm: fix error handling in probe. usb: cdc-acm: send zero packet for intel 7260 modem usb: cdc-acm: handle unlinked urb in acm read callback USB: option: fix Cinterion AHxx enumeration USB: serial: option: Adding support for Telit LE922 USB: cp210x: add ID for IAI USB to RS485 adaptor USB: serial: ftdi_sio: add support for Yaesu SCU-18 cable usb: hub: do not clear BOS field during reset device USB: visor: fix null-deref at probe USB: serial: visor: fix crash on detecting device without write_urbs ASoC: rt5645: fix the shift bit of IN1 boost saa7134-alsa: Only frees registered sound cards ALSA: dummy: Implement timer backend switching more safely ALSA: hda - Fix bad dereference of jack object ALSA: hda - Fix speaker output from VAIO AiO machines Revert "ALSA: hda - Fix noise on Gigabyte Z170X mobo" ALSA: hda - Fix static checker warning in patch_hdmi.c ALSA: hda - Add fixup for Mac Mini 7,1 model ALSA: timer: Fix race between stop and interrupt ALSA: timer: Fix wrong instance passed to slave callbacks ALSA: timer: Fix race at concurrent reads ALSA: timer: Fix link corruption due to double start or stop ALSA: timer: Fix leftover link at closing ALSA: timer: Code cleanup ALSA: seq: Fix lockdep warnings due to double mutex locks ALSA: seq: Fix race at closing in virmidi driver ALSA: seq: Fix yet another races among ALSA timer accesses ASoC: dpcm: fix the BE state on hw_free ALSA: pcm: Fix potential deadlock in OSS emulation ALSA: hda/realtek - Support Dell headset mode for ALC225 ALSA: hda/realtek - Support headset mode for ALC225 ALSA: hda/realtek - New codec support of ALC225 ALSA: rawmidi: Fix race at copying & updating the position ALSA: rawmidi: Remove kernel WARNING for NULL user-space buffer check ALSA: rawmidi: Make snd_rawmidi_transmit() race-free ALSA: seq: Degrade the error message for too many opens ALSA: seq: Fix incorrect sanity check at snd_seq_oss_synth_cleanup() ALSA: dummy: Disable switching timer backend via sysfs ALSA: compress: Disable GET_CODEC_CAPS ioctl for some architectures ALSA: hda - disable dynamic clock gating on Broxton before reset ALSA: Add missing dependency on CONFIG_SND_TIMER ALSA: bebob: Use a signed return type for get_formation_index ALSA: usb-audio: avoid freeing umidi object twice ALSA: usb-audio: Add native DSD support for PS Audio NuWave DAC ALSA: usb-audio: Fix OPPO HA-1 vendor ID ALSA: usb-audio: Add quirk for Microsoft LifeCam HD-6000 ALSA: usb-audio: Fix TEAC UD-501/UD-503/NT-503 usb delay hrtimer: Handle remaining time proper for TIME_LOW_RES md/raid: only permit hot-add of compatible integrity profiles media: i2c: Don't export ir-kbd-i2c module alias parisc: Fix __ARCH_SI_PREAMBLE_SIZE parisc: Protect huge page pte changes with spinlocks printk: do cond_resched() between lines while outputting to consoles tracing/stacktrace: Show entire trace if passed in function not found tracing: Fix stacktrace skip depth in trace_buffer_unlock_commit_regs() PCI: Fix minimum allocation address overwrite PCI: host: Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD mtd: nand: assign reasonable default name for NAND drivers wlcore/wl12xx: spi: fix NULL pointer dereference (Oops) wlcore/wl12xx: spi: fix oops on firmware load ocfs2/dlm: clear refmap bit of recovery lock while doing local recovery cleanup ocfs2/dlm: ignore cleaning the migration mle that is inuse ALSA: hda - Implement loopback control switch for Realtek and other codecs block: fix bio splitting on max sectors base/platform: Fix platform drivers with no probe callback HID: usbhid: fix recursive deadlock ocfs2: NFS hangs in __ocfs2_cluster_lock due to race with ocfs2_unblock_lock block: split bios to max possible length NFSv4.1/pnfs: Fixup an lo->plh_block_lgets imbalance in layoutreturn crypto: sun4i-ss - add missing statesize Linux 4.4.1 arm64: kernel: fix architected PMU registers unconditional access arm64: kernel: enforce pmuserenr_el0 initialization and restore arm64: mm: ensure that the zero page is visible to the page table walker arm64: Clear out any singlestep state on a ptrace detach operation powerpc/module: Handle R_PPC64_ENTRY relocations scripts/recordmcount.pl: support data in text section on powerpc powerpc: Make {cmp}xchg* and their atomic_ versions fully ordered powerpc: Make value-returning atomics fully ordered powerpc/tm: Check for already reclaimed tasks batman-adv: Drop immediate orig_node free function batman-adv: Drop immediate batadv_hard_iface free function batman-adv: Drop immediate neigh_ifinfo free function batman-adv: Drop immediate batadv_neigh_node free function batman-adv: Drop immediate batadv_orig_ifinfo free function batman-adv: Avoid recursive call_rcu for batadv_nc_node batman-adv: Avoid recursive call_rcu for batadv_bla_claim team: Replace rcu_read_lock with a mutex in team_vlan_rx_kill_vid net/mlx5_core: Fix trimming down IRQ number bridge: fix lockdep addr_list_lock false positive splat ipv6: update skb->csum when CE mark is propagated net: bpf: reject invalid shifts phonet: properly unshare skbs in phonet_rcv() dwc_eth_qos: Fix dma address for multi-fragment skbs bonding: Prevent IPv6 link local address on enslaved devices net: preserve IP control block during GSO segmentation udp: disallow UFO for sockets with SO_NO_CHECK option net: pktgen: fix null ptr deref in skb allocation sched,cls_flower: set key address type when present tcp_yeah: don't set ssthresh below 2 ipv6: tcp: add rcu locking in tcp_v6_send_synack() net: sctp: prevent writes to cookie_hmac_alg from accessing invalid memory vxlan: fix test which detect duplicate vxlan iface unix: properly account for FDs passed over unix sockets xhci: refuse loading if nousb is used usb: core: lpm: fix usb3_hardware_lpm sysfs node USB: cp210x: add ID for ELV Marble Sound Board 1 rtlwifi: fix memory leak for USB device ASoC: compress: Fix compress device direction check ASoC: wm5110: Fix PGA clear when disabling DRE ALSA: timer: Handle disconnection more safely ALSA: hda - Flush the pending probe work at remove ALSA: hda - Fix missing module loading with model=generic option ALSA: hda - Fix bass pin fixup for ASUS N550JX ALSA: control: Avoid kernel warnings from tlv ioctl with numid 0 ALSA: hrtimer: Fix stall by hrtimer_cancel() ALSA: pcm: Fix snd_pcm_hw_params struct copy in compat mode ALSA: seq: Fix snd_seq_call_port_info_ioctl in compat mode ALSA: hda - Add fixup for Dell Latitidue E6540 ALSA: timer: Fix double unlink of active_list ALSA: timer: Fix race among timer ioctls ALSA: hda - fix the headset mic detection problem for a Dell laptop ALSA: timer: Harden slave timer list handling ALSA: usb-audio: Fix mixer ctl regression of Native Instrument devices ALSA: hda - Fix white noise on Dell Latitude E5550 ALSA: seq: Fix race at timer setup and close ALSA: usb-audio: Avoid calling usb_autopm_put_interface() at disconnect ALSA: seq: Fix missing NULL check at remove_events ioctl ALSA: hda - Fixup inverted internal mic for Lenovo E50-80 ALSA: usb: Add native DSD support for Oppo HA-1 x86/mm: Improve switch_mm() barrier comments x86/mm: Add barriers and document switch_mm()-vs-flush synchronization x86/boot: Double BOOT_HEAP_SIZE to 64KB x86/reboot/quirks: Add iMac10,1 to pci_reboot_dmi_table[] kvm: x86: Fix vmwrite to SECONDARY_VM_EXEC_CONTROL KVM: x86: correctly print #AC in traces KVM: x86: expose MSR_TSC_AUX to userspace x86/xen: don't reset vcpu_info on a cancelled suspend KEYS: Fix keyring ref leak in join_session_keyring() Conflicts: arch/arm64/kernel/perf_event.c drivers/scsi/sd.c sound/core/compress_offload.c Change-Id: I9f77fe42aaae249c24cd6e170202110ab1426878 Signed-off-by: Trilok Soni <tsoni@codeaurora.org>
2016-03-22iommu/arm-smmu: Add iommu_dev for dynamic attach casePatrick Daly
A new struct element was added during the kernel 4.4 upgrade. Ensure that it is set during dynamic attach. Change-Id: I0150aebe4a67728945890be2b547a6cbb9bd5306 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22iommu-debug: Add proper header file for module_init()Patrick Daly
Fix compilation on 4.4 kernel. Change-Id: I760e9adb94c15263e4bf653aec2e3c63e368c2bc Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22iommu/io-pgtable-arm: Fix IOMMU_IO_PGTABLE_LPAE_SELFTEST compilationPatrick Daly
Use the proper number of arguments to map_sg() Change-Id: I8f1d038334b0145436e7df86283482482ebca209 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22iommu/arm-smmu: Restore __arm_smmu_get_pci_sid()Patrick Daly
This function is used upstream. Restore it. Change-Id: If828a4e3504a27b866daea9caa6d9238b362bb16 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22arm-smmu: Remove PCIE header file dependencyPatrick Daly
Until the msm pcie driver has been upgraded, remove references to its header file to allow compilation. Change-Id: I6413abfd2279a20a4c062cb04d9e0e1f1b10ce9d Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22iommu/io-pgtable: Add module.h include filePatrick Daly
This is needed for the module_init/exit() macros. Change-Id: Ibbb757685b285c28fc8fae8cb27555dccebd9c86 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22Revert "scatterlist: use sg_phys()"Dan Williams
commit db0fa0cb0157 "scatterlist: use sg_phys()" did replacements of the form: phys_addr_t phys = page_to_phys(sg_page(s)); phys_addr_t phys = sg_phys(s) & PAGE_MASK; However, this breaks platforms where sizeof(phys_addr_t) > sizeof(unsigned long). Revert for 4.3 and 4.4 to make room for a combined helper in 4.5. Cc: <stable@vger.kernel.org> Cc: Jens Axboe <axboe@fb.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Russell King <linux@arm.linux.org.uk> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Fixes: db0fa0cb0157 ("scatterlist: use sg_phys()") Suggested-by: Joerg Roedel <joro@8bytes.org> Reported-by: Vitaly Lavrov <vel21ripn@gmail.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2016-03-22iommu: Move default domain allocation to iommu_group_get_for_dev()Joerg Roedel
Now that the iommu core support for iommu groups is not pci-centric anymore, we can move default domain allocation to the bus independent iommu_group_get_for_dev() function. Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Remove is_pci_dev() fall-back from iommu_group_get_for_devJoerg Roedel
All callers of iommu_group_get_for_dev() provide a device_group call-back now, so this fall-back is no longer needed. Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu/arm-smmu: Switch to device_group call-backJoerg Roedel
This converts the ARM SMMU and the SMMUv3 driver to use the new device_group call-back. Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Add generic_device_group() functionJoerg Roedel
This function can be used as a device_group call-back and just allocates one iommu-group per device. Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Export and rename iommu_group_get_for_pci_dev()Joerg Roedel
Rename that function to pci_device_group() and export it, so that IOMMU drivers can use it as their device_group call-back. Change-Id: Ic54268d9854dd2eeba53ca9f9635d0287bfc7f0f Signed-off-by: Joerg Roedel <jroedel@suse.de> [pdaly@codeaurora.org Resolve minor conflicts]
2016-03-22iommu: Revive device_group iommu-ops call-backJoerg Roedel
That call-back is currently unused, change it into a call-back function for finding the right IOMMU group for a device. This is a first step to remove the hard-coded PCI dependency in the iommu-group code. Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu/arm-smmu: Remove redundant calculation of gr0 base addressWill Deacon
Since commit 1463fe44fd0f ("iommu/arm-smmu: Don't use VMIDs for stage-1 translations"), we don't need the GR0 base address when initialising a context bank, so remove the useless local variable and its init code. Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-03-22iommu/arm-smmu: ThunderX mis-extends 64bit registersTirumalesh Chalamarla
The SMMU architecture defines two different behaviors when 64-bit registers are written with 32-bit writes. The first behavior causes zero extension into the upper 32-bits. The second behavior splits a 64-bit register into "normal" 32-bit register pairs. On some buggy implementations, registers incorrectly zero extended when they should instead behave as normal 32-bit register pairs. Change-Id: I52410cf5f116620b10b696a11a991ee0bcc08dbf Signed-off-by: Tirumalesh Chalamarla <tchalamarla@caviumnetworks.com> [will: removed redundant macro parameters] Signed-off-by: Will Deacon <will.deacon@arm.com> [pdaly@codeaurora.org Resolve minor conflicts]
2016-03-22iommu/io-pgtable-arm: Don't use dma_to_phys()Robin Murphy
In checking whether DMA addresses differ from physical addresses, using dma_to_phys() is actually the wrong thing to do, since it may hide any DMA offset, which is precisely one of the things we are checking for. Simply casting between the two address types, whilst ugly, is in fact the appropriate course of action. Further care (and ugliness) is also necessary in the comparison to avoid truncation if phys_addr_t and dma_addr_t differ in size. We can also reject any device with a fixed DMA offset up-front at page table creation, leaving the allocation-time check for the more subtle cases like bounce buffering due to an incorrect DMA mask. Furthermore, we can then fix the hackish KConfig dependency so that architectures without a dma_to_phys() implementation may still COMPILE_TEST (or even use!) the code. The true dependency is on the DMA API, so use the appropriate symbol for that. Change-Id: I2f7087d43e2d8f16ea36f8e10530d0c4811a4fcd Signed-off-by: Robin Murphy <robin.murphy@arm.com> [will: folded in selftest fix from Yong Wu] Signed-off-by: Will Deacon <will.deacon@arm.com>
2016-03-22scatterlist: use sg_phys()Dan Williams
Coccinelle cleanup to replace open coded sg to physical address translations. This is in preparation for introducing scatterlists that reference __pfn_t. // sg_phys.cocci: convert usage page_to_phys(sg_page(sg)) to sg_phys(sg) // usage: make coccicheck COCCI=sg_phys.cocci MODE=patch virtual patch @@ struct scatterlist *sg; @@ - page_to_phys(sg_page(sg)) + sg->offset + sg_phys(sg) @@ struct scatterlist *sg; @@ - page_to_phys(sg_page(sg)) + sg_phys(sg) & PAGE_MASK Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Jens Axboe <axboe@fb.com>
2016-03-22iommu/io-pgtable-arm: Move init-fn declarations to io-pgtable.hJoerg Roedel
Avoid extern declarations in c files. Change-Id: I6d7e3ba54eae67a5604aa3c42fec7585fd329eff Signed-off-by: Joerg Roedel <jroedel@suse.de> [pdaly@codeaurora.org Resolve minor conflicts]
2016-03-22iommu/io-pgtable: Remove flush_pgtable callbackRobin Murphy
With the users fully converted to DMA API operations, it's dead, Jim. Change-Id: Ia9b6679902a3ef1ae9ac6abf6eb4b0b492952fe4 Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> [pdaly@codeaurora.org Resolve minor conflicts]
2016-03-22iommu/arm-smmu: Remove arm_smmu_flush_pgtable()Robin Murphy
With the io-pgtable code now enforcing its own appropriate sync points, the vestigial flush_pgtable callback becomes entirely redundant, so remove it altogether. Change-Id: I0c5c2dfabb873e6045f0919ec853dd825f560564 Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> [pdaly@codeaurora.org Resolve minor conflicts]
2016-03-22iommu/io-pgtable-arm: Restore selftest_runningPatrick Daly
This variable is used by upstream. Restore it. Change-Id: I9742a4eb2f9708d02223fac12b831c096d901499 Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22iommu/io-pgtable-arm: Centralise sync pointsRobin Murphy
With all current users now opted in to DMA API operations, make the iommu_dev pointer mandatory, rendering the flush_pgtable callback redundant for cache maintenance. However, since the DMA calls could be nops in the case of a coherent IOMMU, we still need to ensure the page table updates are fully synchronised against a subsequent page table walk. In the unmap path, the TLB sync will usually need to do this anyway, so just cement that requirement; in the map path which may consist solely of cacheable memory writes (in the coherent case), insert an appropriate barrier at the end of the operation, and obviate the need to call flush_pgtable on every individual update for synchronisation. Change-Id: I3716a707495ae0c8a625bbd81d8547ae08363a43 Signed-off-by: Robin Murphy <robin.murphy@arm.com> [will: slight clarification to tlb_sync comment] Signed-off-by: Will Deacon <will.deacon@arm.com> [pdaly@codeaurora.org Remove flush_pgtable()]
2016-03-22iommu/arm-smmu: Clean up DMA API usageRobin Murphy
With the correct DMA API calls now integrated into the io-pgtable code, let that handle the flushing of non-coherent page table updates. Change-Id: I0de39b8e4fe3e5e6912e22a74cd5963b246ad083 Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> [pdaly@codeaurora.org Resolve minor conflicts]
2016-03-22iommu/io-pgtable-arm: Allow appropriate DMA API useRobin Murphy
Currently, users of the LPAE page table code are (ab)using dma_map_page() as a means to flush page table updates for non-coherent IOMMUs. Since from the CPU's point of view, creating IOMMU page tables *is* passing DMA buffers to a device (the IOMMU's page table walker), there's little reason not to use the DMA API correctly. Allow IOMMU drivers to opt into DMA API operations for page table allocation and updates by providing their appropriate device pointer. The expectation is that an LPAE IOMMU should have a full view of system memory, so use streaming mappings to avoid unnecessary pressure on ZONE_DMA, and treat any DMA translation as a warning sign. Change-Id: I954414051c3cdee407613fea9447f15cfa94fada Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> [pdaly@codeaurora.org Call io_pgtable_alloc_pages()]
2016-03-22iommu/arm-smmu: Sort out coherencyRobin Murphy
Currently, we detect whether the SMMU has coherent page table walk capability from the IDR0.CTTW field, and base our cache maintenance decisions on that. In preparation for fixing the bogus DMA API usage, however, we need to ensure that the DMA API agrees about this, which necessitates deferring to the dma-coherent property in the device tree for the final say. As an added bonus, since systems exist where an external CTTW signal has been tied off incorrectly at integration, allowing DT to override it offers a neat workaround for coherency issues with such SMMUs. Change-Id: I05f5d4bb2cbbbfa28446e423829f00f4a2aa0df3 Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> [pdaly@codeaurora.org Change dev_notice to dev_dbg]
2016-03-22iommu/arm-smmu: Fix broken ATOS checkWill Deacon
Commit 83a60ed8f0b5 ("iommu/arm-smmu: fix ARM_SMMU_FEAT_TRANS_OPS condition") accidentally negated the ID0_ATOSNS predicate in the ATOS feature check, causing the driver to attempt ATOS requests on SMMUv2 hardware without the ATOS feature implemented. This patch restores the predicate to the correct value. Cc: <stable@vger.kernel.org> # 4.0+ Reported-by: Varun Sethi <varun.sethi@freescale.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Ignore -ENODEV errors from add_device call-backJoerg Roedel
The -ENODEV error just means that the device is not translated by an IOMMU. We shouldn't bail out of iommu driver initialization when that happens, as this is a common scenario on ARM. Not returning -ENODEV in the drivers would be a bad idea, as the IOMMU core would have no indication whether a device is translated or not. This indication is not used at the moment, but will probably be in the future. Fixes: 19762d7 ("iommu: Propagate error in add_iommu_group") Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> Tested-by: Eric Auger <eric.auger@linaro.org> Tested-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Checking for NULL instead of IS_ERRDan Carpenter
The iommu_group_alloc() and iommu_group_get_for_dev() functions return error pointers, they never return NULL. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Introduce iommu_request_dm_for_dev()Joerg Roedel
This function can be called by an IOMMU driver to request that a device's default domain is direct mapped. Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Add function to query the default domain of a groupJoerg Roedel
This will be used to handle unity mappings in the iommu drivers. Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Create direct mappings in default domainsJoerg Roedel
Use the information exported by the IOMMU drivers to create direct mapped regions in the default domains. Signed-off-by: Joerg Roedel <jroedel@suse.de>
2016-03-22iommu: Introduce direct mapped region handlingJoerg Roedel
Add two new functions to the IOMMU-API to allow the IOMMU drivers to export the requirements for direct mapped regions per device. This is useful for exporting the information in Intel VT-d's RMRR entries or AMD-Vi's unity mappings. Change-Id: Iab55341a8526084a5110dc5a2d4448fd46e3296a Signed-off-by: Joerg Roedel <jroedel@suse.de> [pdaly@codeaurora.org Resolve minor conflicts]