Commit graph

564406 commits

Author SHA1 Message Date
Yan He
f7fa70a57d msm: ep_pcie: correct PME configuration
Correct the PME configuration for PCIe endpoint to support D0, D3
hot and D3 cold.

Change-Id: Ib906fbafc490be75e5f178176e33882c392d074e
Signed-off-by: Yan He <yanhe@codeaurora.org>
2016-03-22 11:16:05 -07:00
Yan He
4b39cc2da0 msm: ep_pcie: allow wake assertion during D3hot
PCIe client may need to wake up the host when PCIe link is still
on. Add the support to assert wake to host side when PCIe is in
D3hot.

Change-Id: I15ffd5f03183054c7ef5d143757b923f32de0adc
Signed-off-by: Yan He <yanhe@codeaurora.org>
2016-03-22 11:16:05 -07:00
Yan He
5dbc08812b msm: ep_pcie: add PCIe endpoint driver
The MSM PCIe endpoint driver enables the PCIe core in endpoint mode
and handles the control signaling with PCIe root complex on host
side.

Change-Id: Ifc2735e061820762c6040eda44089a2dc26fc065
Signed-off-by: Yan He <yanhe@codeaurora.org>
2016-03-22 11:16:04 -07:00
Abhijeet Dharmapurikar
3b1bda734d spmi: pmic_arb: use handle_fasteoi_irq handler
The interrupt controller uses level handler for all its interrupt.
The hardware irq controller confirms to the fasteoi handler type in
that it rearms itself when acknowledged. There is no need to
additionally mask the interrupt while being handled.

Use fasteoi handler type for pmic interrupts. Since fasteoi needs
an irq_eoi callback, use the same function used for irq_ack.

Change-Id: I9a941d8b56ad5698da38e16b2afcf87ef920ebfd
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
2016-03-22 11:16:03 -07:00
Abhijeet Dharmapurikar
48018b31f8 spmi: pmic_arb: don't synchronize accesses to interrupt region
The current driver ensures that no read/write transaction is in progress
while it makes changes to the interrupt regions. This is not necessary
because read/writes over spmi and arbiter interrupt control are
independent operations.

Change-Id: Id6a93eed0aabe55a4b655a2050c31b48327dffe4
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
2016-03-22 11:16:02 -07:00
Abhijeet Dharmapurikar
e99c7baba0 spmi: pmic_arb: remove disabling of ACC bit
The interrupt controller code in the arbiter disables
the peripheral accumulated interrupt (ACC) bit when none of the
interrupts in the peripheral is enabled.

This is not required since the controller disables the interrupt
at the pmic.

So leave the ACC bit enabled while masking an interrupt. Also
ensure that the ACC bit is enabled while unmasking an interrupt.
There is no issues with enabling ACC bit if it were already enabled.

Change-Id: Idbea562157e65a4dfe0c51b7a25eed5ce000068d
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
2016-03-22 11:16:01 -07:00
Laura Abbott
c704acd5e0 arm: Add weak function definition for random pool intialization
The random pool relies on devices and other items in the system
to add entropy to the pool. Most of these devices may not be
added until later in the bootup process. This leaves a large
period of time where the random pool may not actually give
random numbers. Add a weak function for devices to override
with their own function to setup the random pool.

Change-Id: I0de63420b11f1dd363ccd0ef6ac0fa4a617a1152
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
[satyap: trivial merge conflict resolution]
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
2016-03-22 11:16:00 -07:00
Se Wang (Patrick) Oh
0f97d15b0b arm64: Fix out of bound access to compat_hwcap_str
As compat_hwcap_str[] doesn't end with 'NULL', c_show()
tries to read the next element even after the end of the
array. So add 'NULL' at the end of compat_hwcap_str[].
Below is the KASan report for referencing.

BUG: KASan: out of bounds access in c_show+0x110/0x248 at addr ffffffc0011f6370
Read of size 8 by task pool-1-thread-1/10526
page:ffffffbac14b39c0 count:1 mapcount:0 mapping:          (null) index:0x0
flags: 0x400(reserved)
page dumped because: kasan: bad access detected
Address belongs to variable compat_hwcap_str+0xb0/0xe0
CPU: 0 PID: 10526 Comm: pool-1-thread-1 Tainted: G    B   W      3.18.18-ga7b28e9-11552-ge4a827f #1
Hardware name: Qualcomm Technologies, Inc. MSM 8996 v2 + PMI8994 MTP (DT)
Call trace:
[<ffffffc000089ec4>] dump_backtrace+0x0/0x1c4
[<ffffffc00008a098>] show_stack+0x10/0x1c
[<ffffffc0011a7c58>] dump_stack+0x74/0xc8
[<ffffffc00020e94c>] kasan_report_error+0x2b0/0x408
[<ffffffc00020eb80>] kasan_report+0x34/0x40
[<ffffffc00020db14>] __asan_load8+0x84/0x90
[<ffffffc000088ae8>] c_show+0x10c/0x248
[<ffffffc000245bb8>] traverse+0x1a8/0x320
[<ffffffc000245dc8>] seq_lseek+0x98/0x148
[<ffffffc00028f4e0>] proc_reg_llseek+0xa0/0xd8
[<ffffffc000217d1c>] vfs_llseek+0x5c/0x70
[<ffffffc000218b0c>] SyS_lseek+0x48/0x80
[<ffffffc000218b50>] compat_SyS_lseek+0xc/0x18
Memory state around the buggy address:
 ffffffc0011f6200: 00 00 fa fa fa fa fa fa 00 03 fa fa fa fa fa fa
 ffffffc0011f6280: 04 fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
>ffffffc0011f6300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa fa
                                                             ^
 ffffffc0011f6380: fa fa fa fa 00 00 00 00 00 00 fa fa fa fa fa fa
 ffffffc0011f6400: 02 fa fa fa fa fa fa fa 00 00 00 02 fa fa fa fa

Change-Id: I5e2098f9a7a676c47a01baf10de3ac1c86265e69
Signed-off-by: Se Wang (Patrick) Oh <sewango@codeaurora.org>
[satyap: trivial merge conflict resolution and move changes
         in arch/arm64/kernel from setup.c to cpuinfo.c to
         align with kernel 4.4]
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
2016-03-22 11:15:59 -07:00
Stepan Moskovchenko
d892726a6c ARM64: Add snapshot of edac.h from msm-3.10
Sync the ARM64 edac header to the version found in msm-3.10
as of commit 142c36711024877a2ec1eb13dbbca38503b26ee3 ("edac:
cortex_arm64_edac: Use dbe irq only") to bring in external
EDAC API definitions that were missed during the msm-3.18
upgrade.

Change-Id: If2dc53858d7a30086a95ea5047bd6b18e44f7e09
Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
2016-03-22 11:15:59 -07:00
Stepan Moskovchenko
1166cdaff1 ARM64: Enable EDAC support for ARM64 targets
Select EDAC (Error Detection and Reporting) functionality
for ARM64 CPUs to allow EDAC drivers for ARM64.

Change-Id: I699cbefdba7afab65bf8b60c0d5df06dd3b57773
Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
2016-03-22 11:15:58 -07:00
Rohit Vaswani
42fd183193 edac: arm64: Check for ECC errors on panic
Check for ecc errors on panic on all processors

Change-Id: I2a68644afb2730a69aca35abb1f10899a11514dd
Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
[stepanm@codeaurora.org: update argument to arm64_check_cache_ecc()]
Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
[satyap: trivial merge conflict resolution]
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
2016-03-22 11:15:57 -07:00
Stepan Moskovchenko
3182b97bad arm64: Fix conflict resolution in cpuinfo CPU reporting
Commit ebc4e05c338bde49382c7c46ce6b8a371713862e ("arm64: show
present cpu instead of online cpu in /proc/cpuinfo") did not
have its conflicts against msm-3.18 properly resolved.

Change-Id: I1f4eb1d8a20b2bc142a7f0b8890d383a9552557c
Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
[satyap: trivial merge conflict resolution and move changes
         in arch/arm64/kernel from setup.c to cpuinfo.c to
         align with kernel 4.4]
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
2016-03-22 11:15:56 -07:00
Abhimanyu Kapur
e901e28d56 ARM/ARM64: Introduce arch_read_hardware_id
Moving towards device tree and arm single binary refering to
machine descriptor name for hardware id information under
/proc/cpuinfo is not suitable for certain soc vendors. Add a
hook for soc vendors to supply a per-soc hardware read method.

Change-Id: Ifcccdffa3c0e1e8b5f96837eb1c023e468d4c287
Signed-off-by: Abhimanyu Kapur <abhimany@codeaurora.org>
[satyap: trivial merge conflict resolution and move changes
         in arch/arm64/kernel from setup.c to cpuinfo.c to
         align with kernel 4.4]
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
2016-03-22 11:15:55 -07:00
Jordan Crouse
f9d0fc3347 arm64: Set CONFIG_QCOM_KGSL in the defconfig
Enable the KGSL GPU driver by enabling CONFIG_QCOM_KGSL in the
defconfig.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-22 11:15:54 -07:00
Jordan Crouse
a43bd89897 msm: kgsl: Increase GPMU timeouts
The existing timeout values for the various GPMU interactions seems
to have been a tad optimistic for all conditions. Increase them to
cover measured worse case scenarios.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-22 11:15:54 -07:00
Jordan Crouse
d31b0d97e6 msm: kgsl: Conditionally use bwmon governor if it exists
Wrap the code to use the bwmon governor or not depending if it
exists.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-22 11:15:53 -07:00
Jordan Crouse
56930b9f17 msm: kgsl: Update various exernal APIs for the 4.4 kernel
Make several changes to build the GPU driver for 4.4:

 - Rename CONFIG_MSM to CONFIG_QCOM where applicable
 - Add msm_kgsl.h to the Kbuild exports
 - Remove linux/coresight_of.h (as it has been merged into
   coresight.h) and remove the .owner member of the
   coresight_desc struct.
 - Use the new location for the sync.h file (in staging)
 - Remove an unused sync function
 - Move oneshot_sync.h inside of #ifdef wrappers

Signed-off-by: Jordan Crouse <jcrouse@codeauorora.org>
2016-03-22 11:15:52 -07:00
Jordan Crouse
318be96313 devfreq: Add Qualcomm GPU devfreq governors
Snapshot of the Qualcomm GPU devfreq governors and support
as of msm-3.18 commit e70ad0cd5efd
("Promotion of kernel.lnx.3.18-151201.").

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-22 11:15:51 -07:00
Jeremy Gebben
ef08f68897 PM / devfreq: allow governors to use devfreq_get_freq_level
Level based governors may need to perform this lookup to
interpret the current frequency of the device.

Signed-off-by: Jeremy Gebben <jgebben@codeaurora.org>
Signed-off-by: Vladimir Razgulin <vrazguli@codeaurora.org>
2016-03-22 11:15:50 -07:00
Jordan Crouse
5103db813f msm: kgsl: Add Qualcomm GPU driver
Snapshot of the Qualcom Adreno GPU driver (KGSL) as of msm-3.18 commit
commit e70ad0cd5efd ("Promotion of kernel.lnx.3.18-151201.").

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-22 11:15:49 -07:00
Jordan Crouse
e64e0d283a coresight: of_get_coresight_platform_data needs both OF and CORESIGHT
The file that defines of_get_coresight_platform_data() is indeed
dependent on CONFIG_OF but the entire coresight directory depends
on CONFIG_CORESIGHT so both need to be enabled to make the symbol
resolve.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-22 11:15:48 -07:00
Nikhilesh Reddy
5a9fde57cf fuse: Add support for passthrough read/write
Add support for filesystem passthrough read/write of files
when enabled in userspace through the option FUSE_PASSTHROUGH.

There are many FUSE based filesystems that perform checks or
enforce policy or perform some kind of decision making in certain
functions like the "open" call but simply act as a "passthrough"
when performing operations such as read or write.

When FUSE_PASSTHROUGH is enabled all the reads and writes
to the fuse mount point go directly to the passthrough filesystem
i.e a native filesystem that actually hosts the files rather than
through the fuse daemon. All requests that aren't read/write still
go thought the userspace code.

This allows for significantly better performance on read and writes.
The difference in performance between fuse and the native lower
filesystem is negligible.

There is also a significant cpu/power savings that is achieved which
is really important on embedded systems that use fuse for I/O.

Changelog:

v5:
Fix the check when setting the passthrough file
[Found when testing by Mike Shal]

v3 and v4:
Use the fs_stack_depth to prevent further stacking and a minor fix
[Fix suggested by Jann Horn]

v2:
Changed the feature name to passthrough from stacked_io
[Proposed by Linus Torvalds]

Signed-off-by: Nikhilesh Reddy <reddyn@codeaurora.org>
2016-03-22 11:15:47 -07:00
Patrick Daly
38db8e6ce1 iommu/arm-smmu: Add iommu_dev for dynamic attach case
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-22 11:15:46 -07:00
Patrick Daly
9105c08c2d iommu: Add snapshot of qcom_iommu.h
Taken as of kernel version "e70ad0cd5efdd9dc91a77dcdac31d6132e1315c1"
on msm-3.18.

Change-Id: I91bdb35429af8159e58bb6fb9e2e52f16d625c4b
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22 11:15:46 -07:00
Patrick Daly
bd40b1bd04 defconfig: Enable IOMMU debugfs for msm
Allow using the iommu debugfs files.

Change-Id: I039828bdb2b5c0369a260bd8f06061d35d84bba5
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22 11:15:45 -07:00
Shashank Mittal
a3cf6c6269 Coresight: add support for device names
Add support to read device names from device tree entries.
This allows using same names for CoreSight devices across different
targets.

Change-Id: Ide3da74533051db38e9a6c5904a7cab42b3be6c1
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:44 -07:00
Shashank Mittal
1537a1c748 Coresight: change attribute names for sources and sinks
Use 'enable' instead of 'enable_source' and 'curr_sink' instead of
'enable_sink attributes to align it with MSM implementation.

This change ensures same device node interface for host tools
between MSM and upstream Coresight driver implementation.

Change-Id: I5267d2ad92e76607e0ac1bd0e9ef63c0a89cfe7f
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:43 -07:00
Shashank Mittal
cb2bc93f4e coresight: add CSR driver support in upstream implementation
Add CSR driver in upstream implementation of coresight driver.

This change copies drivers/coresight/coresight-csr.c (commit :
90095b2a) to driver/hwtracing/coresight directory.

Change-Id: Ib5408ccce868bb36230a26a8d32f463a80a4a6a5
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:42 -07:00
Shashank Mittal
24d0ee108b coresight: tmc: add scatter-gather support for ETR device
Add support to configure ETR device in scatter-gather mode.

In scatter-gather mode trace buffer can be configured to use bigger
buffer size without need of bigger contiguous memory.

Change-Id: I3ce654392d2b75d24f7982638e53c2aab27d4a0e
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:41 -07:00
Shashank Mittal
babde2831d coresight: tmc: add support to configure etr mem size
Add support to expose a node for user to configure memory buffer size
for an ETR device.

Change-Id: Ide175ca8eeb5b9c2d7213dfff4c81b5314ce61f6
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:41 -07:00
Shashank Mittal
2548d68098 coresight: stm: change to amba device driver
Current STM device registers itself as a platform device.

Change it to an amba device driver to align it with upstream
implementation of coresight devices.

Change-Id: I7ff9300e3606d5ffc9a54098f7f5d4d03212fec0
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:40 -07:00
Shashank Mittal
481bb16802 coresight: add STM driver support in upstream implementation
Add STM driver in upstream implementation of Coresight driver.

This change copies drivers/coresight/coresight-stm.c (commit :
90095b2ae1d987882f67c6d4a512baa98eecd6cb) to driver/hwtracing/coresight
directory.

Change-Id: Id023bf85df0345205ca8baa6a97ff340d5808aeb
Signed-off-by: Shashank Mittal <mittals@codeaurora.org>
2016-03-22 11:15:39 -07:00
Patrick Daly
0f30f750c4 iommu: Apply necessary initcall ordering
Iommus do not currently support probe deferral. Ensure that they probe
after gdscs.

Change-Id: I693ce5ba74090a76f0442a3057fe45ff849c3fe1
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22 11:15:38 -07:00
Patrick Daly
b04374214e iommu-debug: Add proper header file for module_init()
Fix compilation on 4.4 kernel.

Change-Id: I760e9adb94c15263e4bf653aec2e3c63e368c2bc
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22 11:15:37 -07:00
Patrick Daly
1ab98a5989 iommu/io-pgtable-arm: Fix IOMMU_IO_PGTABLE_LPAE_SELFTEST compilation
Use the proper number of arguments to map_sg()

Change-Id: I8f1d038334b0145436e7df86283482482ebca209
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22 11:15:36 -07:00
Patrick Daly
0ebf274f09 iommu/arm-smmu: Restore __arm_smmu_get_pci_sid()
This function is used upstream. Restore it.

Change-Id: If828a4e3504a27b866daea9caa6d9238b362bb16
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22 11:15:35 -07:00
Patrick Daly
4de2c32a06 arm-smmu: Remove PCIE header file dependency
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-22 11:15:34 -07:00
Patrick Daly
1f3b2077bd iommu/io-pgtable: Add module.h include file
This is needed for the module_init/exit() macros.

Change-Id: Ibbb757685b285c28fc8fae8cb27555dccebd9c86
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
2016-03-22 11:15:34 -07:00
Dan Williams
93823016ab Revert "scatterlist: use sg_phys()"
commit db0fa0cb01 "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: db0fa0cb01 ("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-22 11:15:33 -07:00
Joerg Roedel
6cf9d620b1 iommu: Move default domain allocation to iommu_group_get_for_dev()
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-22 11:15:32 -07:00
Joerg Roedel
19a9ffb89e iommu: Remove is_pci_dev() fall-back from iommu_group_get_for_dev
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-22 11:15:31 -07:00
Joerg Roedel
c07d810ef6 iommu/arm-smmu: Switch to device_group call-back
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-22 11:15:30 -07:00
Joerg Roedel
f51eb4d161 iommu: Add generic_device_group() function
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-22 11:15:29 -07:00
Joerg Roedel
c77e522650 iommu: Export and rename iommu_group_get_for_pci_dev()
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-22 11:15:29 -07:00
Joerg Roedel
4e226b0bdf iommu: Revive device_group iommu-ops call-back
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-22 11:15:28 -07:00
Will Deacon
e0c04a47d6 iommu/arm-smmu: Remove redundant calculation of gr0 base address
Since commit 1463fe44fd ("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-22 11:15:27 -07:00
Robin Murphy
cef07fef91 iommu: Implement common IOMMU ops for DMA mapping
Taking inspiration from the existing arch/arm code, break out some
generic functions to interface the DMA-API to the IOMMU-API. This will
do the bulk of the heavy lifting for IOMMU-backed dma-mapping.

Since associating an IOVA allocator with an IOMMU domain is a fairly
common need, rather than introduce yet another private structure just to
do this for ourselves, extend the top-level struct iommu_domain with the
notion. A simple opaque cookie allows reuse by other IOMMU API users
with their various different incompatible allocator types.

Change-Id: I4a49976c4e496025b2a2b2b9ef749666a239294b
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
[pdaly@codeaurora.org Add changes only in iommu.h]
2016-03-22 11:15:26 -07:00
Tirumalesh Chalamarla
e3bdc44a37 iommu/arm-smmu: ThunderX mis-extends 64bit registers
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-22 11:15:25 -07:00
Robin Murphy
aeae109c4a iommu/io-pgtable-arm: Don't use dma_to_phys()
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-22 11:15:24 -07:00
Dan Williams
fc1e02aa45 scatterlist: use sg_phys()
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-22 11:15:23 -07:00