summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-05-24 08:45:05 -0600
committerLinux Build Service Account <lnxbuild@localhost>2016-05-24 08:45:06 -0600
commit52b2ed5fccc94244dbf50f1d0879c213ff231c58 (patch)
treefe34ec03ce24bf9bcc79a5b72db5df2b3f45a06d /include/linux
parent8c10ab37da3d535640c9b6ead17704106f66d139 (diff)
parentdfc289423d7a0c8303048165c696db7a75f12114 (diff)
Promotion of kernel.lnx.4.4-160520.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 996586 Ia4329ac982eb2a29a2b925897cd87ca9711c30e3 soundwire: Add support for 48x2 frame structure 1014388 Ia6484ed03d9508b827f8c7e4dadb84c14e306bd9 msm: gsi: fix for clearing IEOB interrupt 997751 I31b90d64c2facb0a681f9da586e2c90803776819 iommu/iommu-debug: Add debugfs file to enable config clo 1007465 I4f1b39dac949aa3f6aa3abb12ff0310fb0e98d1c swr-wcd-ctrl: Handle soundwire slave device ungroup 997751 I016937309ac8e16775d13e63b630bb98469c9fca defconfig: msm: Enable the "fast" IOMMU page table mappe 1017216 I8638814f7e06b0e63638c5acd268663d6a627718 defconfig: arm64: msm: Add defconfigs needed for data ca 1017735 Ib9b508591d28d22e7d5aa8f33d8d829d3378ccea ARM: dts: Add BIMC bandwidth monitor node for msmcobalt 1007465 Ic1653194c22fa5669b1c04fd9630158633fb00a5 swr-wcd-ctrl: Ensure soundwire banks are always in sync 997751 I58734a82f4dc3e4658ab7995b6682205097da991 iommu/iommu-debug: Add functional test for ARM DMA IOMMU 997751 I29d31e9649c24d30a5a7ffaa4b238a0203846594 iommu: Add domain attribute for getting page table info 1018309 Ie0c6639fff9b829a58e12037f88c6508864b60a0 msm: sde: Correct resource release upon rotator exit 1012226 Ifddcce1ff9cdbb35dc5645d0ed85963c18dec54e defconfig: msm: enable HBTP input drivers for cobalt 1018746 I4f812f280688984bd21fc68ae4d18355c9b2aac8 msm: defconfig: Enable camera 1018787 Ia140bfb2fcd699937cd845c4489458e5fefb5150 [media] v4l: Add qcom video color formats 997751 I9a73a31ee63a054cc44c50a21f7a616efd4af964 iommu/arm-smmu: Implement .get_pgsize_bitmap for domain 1018722 Ida9a93db8459d065ab7850de506e5b9124f6fdd4 msm: sde: Enable rotator r3 driver to support r3 minor v 1017735 I4efa37b8bb84ab62e82086b622896173b7d2fc7d defconfig: Enable DDR bus scaling governor 978785 I72fc29a8d7b286b0766c0483ba69d6e02d29b661 msm: mdss: Add newly supported writeback formats to MDP 997751 I46d70733be647599e148fe52258a4d8f009ac48a iommu: Support dynamic pgsize_bitmap 1017151 Idd7e7255ebc8a08f418289fa172c37f72a21ced0 msm: camera: cpp: Support conditional reset of micro 1018752 I30f1ee0f4fdb8d92a9f6e187c1d8b797a0bdc94d clk: msm: clock-alpha-pll: Fix incorrect fabia PLL setti 1018471 I41d6520eea1d4a5ef1ad002797cf2c8433078570 msm: defconfig: Enable CONFIG_QCOM_KGSL in msmcortex-per 997751 I95056952f60494fe5745f2183f9af8aab3a40315 iommu: Add {enable,disable}_config_clocks ops 997751 Idc3692679409093faf8f458d53326e669d7f6479 iommu/arm-smmu: Implement {enable,disable}_config_clocks 1007465 I358ab4edcb85ec65b064ca28368ad744f2d36870 ASoC: wsa881x: Request device ungroup for speaker disabl 1006303 Ie7a628d4bc77c9b6c769f6099ce8d75740262a14 sched: simplify CPU frequency estimation and cycle count 997751 I5adc3c3ecd432552386b600b9e66e3db42e73138 iommu/iommu-debug: Add file for profiling fast mapper 997751 Iba9f499dba89db91c1150947b9599d85ade65b0e iommu/arm-smmu: Implement the .tlbi_domain op 997751 Ia9f8ad6d924b294b6758970da2e9767f183b5649 iommu: Add DOMAIN_ATTR_FAST for requesting a fast domain 997751 I1236d9b6aaeab9d34b39e7f5d7b285691d1779da iommu/iommu-debug: Add file for profiling the fast DMA A 1015501 I0c6471549dfa7af435a5ce5f21a56caab1c4ea09 ARM: dts: msm: enable flash LED on cobalt 987962 I4e8e58626e5e8bd8468f3d216eadb2b326a84f75 msm: camera: isp: For testgen disable camif on frame bou 997751 Iebcafeb630d9023f666078604898069e9f26dfdd iommu: Add DMA mapper for io-pgtable-fast 997751 Icf9c1e41977cb71e8b137190adb3b4a201c339da iommu/io-pgtable-fast: Prove correctness of TLB maintena 987962 I6c4f8fd494b6206b0e1fae8ddfe9d7bc708723d2 msm: camera: isp: Set init rate for mnoc_maxi_clk 997751 I5861270709675016988052360d196e0a16a0d103 iommu/io-pgtable: Add fast page table mapper for ARMv8L 997751 I9ddd2dd2cad91ac3d3ccce7c0cd0abb37cd57075 iommu/arm-smmu: Wire up io-pgtable-fast for domains that 997751 If817f5514fdd5d24b9c592440760b81b88ec71a8 iommu: Add tlbi_domain op 1017735 I156ba6e2b5f8e06a28540ca5def5b178c3604512 PM / devfreq: Change the 'MSM' in devfreq device names t 997751 Id3acec0089b126e7d6ad44d8d322bf473614f716 iommu/arm-smmu: Implement DOMAIN_ATTR_PGTBL_INFO 997751 Ic5f890fda6b4fc8bb2dcd5e6ff49050d5a934c31 iommu/arm-smmu: Don't enable/disable clocks in inv_range 997751 Iefb80124c335d65ea5bd8a15406c685125030003 iommu/iommu-debug: Add functional tests for fast mapper 1007465 Ibca3e33c0e85629ae5ce121e75526f4786d6408a soundwire: Add API to ungroup soundwire slave devices 1017697 I6597746b87c0b7545401a4d51e07d3c8dbfd5906 defconfig: msmcortex: Enable watchdog bite on panic 1015501 I30618e6e4b983171d4a616a8a316c76f13ceee2d defconfig: msmcortex: enable qpnp flash 988356 Ie0f60ca79efc05901a88da13f7a6476f390518a5 clk: msm: clock-osm: register cycle counter callbacks wi Change-Id: Idce34441199515c727ac882ad74826e6a0ae9fe4 CRs-Fixed: 1018722, 978785, 1012226, 1017151, 996586, 1018471, 1006303, 997751, 1018752, 1007465, 1017697, 1018746, 1015501, 1017735, 1018787, 1014388, 1018309, 988356, 987962, 1017216
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/dma-mapping-fast.h57
-rw-r--r--include/linux/io-pgtable-fast.h57
-rw-r--r--include/linux/iommu.h47
-rw-r--r--include/linux/sched.h1
-rwxr-xr-xinclude/linux/soundwire/soundwire.h2
5 files changed, 163 insertions, 1 deletions
diff --git a/include/linux/dma-mapping-fast.h b/include/linux/dma-mapping-fast.h
new file mode 100644
index 000000000000..aa9fcfe73162
--- /dev/null
+++ b/include/linux/dma-mapping-fast.h
@@ -0,0 +1,57 @@
+/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only 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.
+ */
+
+#ifndef __LINUX_DMA_MAPPING_FAST_H
+#define __LINUX_DMA_MAPPING_FAST_H
+
+#include <linux/iommu.h>
+#include <linux/io-pgtable-fast.h>
+
+struct dma_fast_smmu_mapping {
+ struct device *dev;
+ struct iommu_domain *domain;
+ dma_addr_t base;
+ size_t size;
+ size_t num_4k_pages;
+
+ unsigned int bitmap_size;
+ unsigned long *bitmap;
+ unsigned long next_start;
+ unsigned long upcoming_stale_bit;
+ bool have_stale_tlbs;
+
+ dma_addr_t pgtbl_dma_handle;
+ av8l_fast_iopte *pgtbl_pmds;
+
+ spinlock_t lock;
+ struct notifier_block notifier;
+};
+
+#ifdef CONFIG_IOMMU_IO_PGTABLE_FAST
+int fast_smmu_attach_device(struct device *dev,
+ struct dma_iommu_mapping *mapping);
+void fast_smmu_detach_device(struct device *dev,
+ struct dma_iommu_mapping *mapping);
+#else
+static inline int fast_smmu_attach_device(struct device *dev,
+ struct dma_iommu_mapping *mapping)
+{
+ return -ENODEV;
+}
+
+static inline void fast_smmu_detach_device(struct device *dev,
+ struct dma_iommu_mapping *mapping)
+{
+}
+#endif
+
+#endif /* __LINUX_DMA_MAPPING_FAST_H */
diff --git a/include/linux/io-pgtable-fast.h b/include/linux/io-pgtable-fast.h
new file mode 100644
index 000000000000..ab5a1dc6753e
--- /dev/null
+++ b/include/linux/io-pgtable-fast.h
@@ -0,0 +1,57 @@
+/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only 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.
+ */
+
+#ifndef __LINUX_IO_PGTABLE_FAST_H
+#define __LINUX_IO_PGTABLE_FAST_H
+
+#include <linux/notifier.h>
+
+typedef u64 av8l_fast_iopte;
+
+#define iopte_pmd_offset(pmds, iova) (pmds + (iova >> 12))
+
+int av8l_fast_map_public(av8l_fast_iopte *ptep, phys_addr_t paddr, size_t size,
+ int prot);
+void av8l_fast_unmap_public(av8l_fast_iopte *ptep, size_t size);
+
+/* events for notifiers passed to av8l_register_notify */
+#define MAPPED_OVER_STALE_TLB 1
+
+
+#ifdef CONFIG_IOMMU_IO_PGTABLE_FAST_PROVE_TLB
+/*
+ * Doesn't matter what we use as long as bit 0 is unset. The reason why we
+ * need a different value at all is that there are certain hardware
+ * platforms with erratum that require that a PTE actually be zero'd out
+ * and not just have its valid bit unset.
+ */
+#define AV8L_FAST_PTE_UNMAPPED_NEED_TLBI 0xa
+
+void av8l_fast_clear_stale_ptes(av8l_fast_iopte *puds, bool skip_sync);
+void av8l_register_notify(struct notifier_block *nb);
+
+#else /* !CONFIG_IOMMU_IO_PGTABLE_FAST_PROVE_TLB */
+
+#define AV8L_FAST_PTE_UNMAPPED_NEED_TLBI 0
+
+static inline void av8l_fast_clear_stale_ptes(av8l_fast_iopte *puds,
+ bool skip_sync)
+{
+}
+
+static inline void av8l_register_notify(struct notifier_block *nb)
+{
+}
+
+#endif /* CONFIG_IOMMU_IO_PGTABLE_FAST_PROVE_TLB */
+
+#endif /* __LINUX_IO_PGTABLE_FAST_H */
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 82c397b30628..56855724271c 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -56,6 +56,10 @@ struct iommu_domain_geometry {
bool force_aperture; /* DMA only allowed in mappable range? */
};
+struct iommu_pgtbl_info {
+ void *pmds;
+};
+
/* Domain feature flags */
#define __IOMMU_DOMAIN_PAGING (1U << 0) /* Support for iommu_map/unmap */
#define __IOMMU_DOMAIN_DMA_API (1U << 1) /* Domain for use in DMA-API
@@ -128,6 +132,8 @@ enum iommu_attr {
DOMAIN_ATTR_DYNAMIC,
DOMAIN_ATTR_NON_FATAL_FAULTS,
DOMAIN_ATTR_S1_BYPASS,
+ DOMAIN_ATTR_FAST,
+ DOMAIN_ATTR_PGTBL_INFO,
DOMAIN_ATTR_MAX,
};
@@ -167,9 +173,14 @@ struct iommu_dm_region {
* @domain_set_attr: Change domain attributes
* @of_xlate: add OF master IDs to iommu grouping
* @pgsize_bitmap: bitmap of supported page sizes
+ * @get_pgsize_bitmap: gets a bitmap of supported page sizes for a domain
+ * This takes precedence over @pgsize_bitmap.
* @trigger_fault: trigger a fault on the device attached to an iommu domain
* @reg_read: read an IOMMU register
* @reg_write: write an IOMMU register
+ * @tlbi_domain: Invalidate all TLBs covering an iommu domain
+ * @enable_config_clocks: Enable all config clocks for this domain's IOMMU
+ * @disable_config_clocks: Disable all config clocks for this domain's IOMMU
* @priv: per-instance data private to the iommu driver
*/
struct iommu_ops {
@@ -217,11 +228,15 @@ struct iommu_ops {
unsigned long offset);
void (*reg_write)(struct iommu_domain *domain, unsigned long val,
unsigned long offset);
+ void (*tlbi_domain)(struct iommu_domain *domain);
+ int (*enable_config_clocks)(struct iommu_domain *domain);
+ void (*disable_config_clocks)(struct iommu_domain *domain);
#ifdef CONFIG_OF_IOMMU
int (*of_xlate)(struct device *dev, struct of_phandle_args *args);
#endif
+ unsigned long (*get_pgsize_bitmap)(struct iommu_domain *domain);
unsigned long pgsize_bitmap;
void *priv;
};
@@ -378,6 +393,25 @@ extern struct iommu_group *pci_device_group(struct device *dev);
/* Generic device grouping function */
extern struct iommu_group *generic_device_group(struct device *dev);
+static inline void iommu_tlbiall(struct iommu_domain *domain)
+{
+ if (domain->ops->tlbi_domain)
+ domain->ops->tlbi_domain(domain);
+}
+
+static inline int iommu_enable_config_clocks(struct iommu_domain *domain)
+{
+ if (domain->ops->enable_config_clocks)
+ return domain->ops->enable_config_clocks(domain);
+ return 0;
+}
+
+static inline void iommu_disable_config_clocks(struct iommu_domain *domain)
+{
+ if (domain->ops->disable_config_clocks)
+ domain->ops->disable_config_clocks(domain);
+}
+
#else /* CONFIG_IOMMU_API */
struct iommu_ops {};
@@ -622,6 +656,19 @@ static int iommu_dma_supported(struct iommu_domain *domain, struct device *dev,
return -EINVAL;
}
+static inline void iommu_tlbiall(struct iommu_domain *domain)
+{
+}
+
+static inline int iommu_enable_config_clocks(struct iommu_domain *domain)
+{
+ return 0;
+}
+
+static inline void iommu_disable_config_clocks(struct iommu_domain *domain)
+{
+}
+
#endif /* CONFIG_IOMMU_API */
#endif /* __LINUX_IOMMU_H */
diff --git a/include/linux/sched.h b/include/linux/sched.h
index bc7ad2e61018..7e107c3d7a5c 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -3370,7 +3370,6 @@ static inline unsigned long rlimit_max(unsigned int limit)
struct cpu_cycle_counter_cb {
u64 (*get_cpu_cycle_counter)(int cpu);
- u32 (*get_cpu_cycles_max_per_us)(int cpu);
};
int register_cpu_cycle_counter_cb(struct cpu_cycle_counter_cb *cb);
diff --git a/include/linux/soundwire/soundwire.h b/include/linux/soundwire/soundwire.h
index 4b957245209e..2083e7b5da25 100755
--- a/include/linux/soundwire/soundwire.h
+++ b/include/linux/soundwire/soundwire.h
@@ -152,6 +152,7 @@ struct swr_master {
int (*get_logical_dev_num)(struct swr_master *mstr, u64 dev_id,
u8 *dev_num);
void (*slvdev_datapath_control)(struct swr_master *mstr, bool enable);
+ bool (*remove_from_group)(struct swr_master *mstr);
};
static inline struct swr_master *to_swr_master(struct device *dev)
@@ -307,4 +308,5 @@ extern int swr_reset_device(struct swr_device *swr_dev);
extern int swr_slvdev_datapath_control(struct swr_device *swr_dev, u8 dev_num,
bool enable);
+extern int swr_remove_from_group(struct swr_device *dev, u8 dev_num);
#endif /* _LINUX_SOUNDWIRE_H */