diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-05-24 08:45:05 -0600 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2016-05-24 08:45:06 -0600 |
| commit | 52b2ed5fccc94244dbf50f1d0879c213ff231c58 (patch) | |
| tree | fe34ec03ce24bf9bcc79a5b72db5df2b3f45a06d /include | |
| parent | 8c10ab37da3d535640c9b6ead17704106f66d139 (diff) | |
| parent | dfc289423d7a0c8303048165c696db7a75f12114 (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')
| -rw-r--r-- | include/linux/dma-mapping-fast.h | 57 | ||||
| -rw-r--r-- | include/linux/io-pgtable-fast.h | 57 | ||||
| -rw-r--r-- | include/linux/iommu.h | 47 | ||||
| -rw-r--r-- | include/linux/sched.h | 1 | ||||
| -rwxr-xr-x | include/linux/soundwire/soundwire.h | 2 | ||||
| -rw-r--r-- | include/uapi/linux/msm_mdp.h | 3 |
6 files changed, 166 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 */ diff --git a/include/uapi/linux/msm_mdp.h b/include/uapi/linux/msm_mdp.h index b4eba416cbc2..56b1476b7e9a 100644 --- a/include/uapi/linux/msm_mdp.h +++ b/include/uapi/linux/msm_mdp.h @@ -213,11 +213,14 @@ enum { MDP_RGBX_1010102_UBWC, MDP_Y_CBCR_H2V2_P010, MDP_Y_CBCR_H2V2_TP10_UBWC, + MDP_CRYCBY_H2V1, /* CrYCbY interleave */ MDP_IMGTYPE_LIMIT1 = MDP_IMGTYPE_END, MDP_FB_FORMAT = MDP_IMGTYPE2_START, /* framebuffer format */ MDP_IMGTYPE_LIMIT2 /* Non valid image type after this enum */ }; +#define MDP_CRYCBY_H2V1 MDP_CRYCBY_H2V1 + enum { PMEM_IMG, FB_IMG, |
