diff options
| author | Thomas Gleixner <[email protected]> | 2019-05-06 12:04:12 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <[email protected]> | 2019-05-06 12:04:12 +0200 | 
| commit | fb4e0592654adb31bc6f3a738d6499b816a655d6 (patch) | |
| tree | e6edaf18cf3a7f49e93fb51de5a47f4b9e786f53 /arch/sparc | |
| parent | 471ba0e686cb13752bc1ff3216c54b69a2d250ea (diff) | |
| parent | 16e32c3cde7763ab875b9030b443ecbc8e352d8a (diff) | |
Merge tag 'irqchip-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core
Pull irqchip updates from Marc Zyngier
- The huge (and terrifying) TI INTR/INTA set of drivers
- Rewrite of the stm32mp1-exti driver as a platform driver
- Update the IOMMU MSI mapping API to be RT friendly
- A number of cleanups and other low impact fixes
Diffstat (limited to 'arch/sparc')
| -rw-r--r-- | arch/sparc/include/asm/Kbuild | 1 | ||||
| -rw-r--r-- | arch/sparc/include/asm/syscall.h | 11 | ||||
| -rw-r--r-- | arch/sparc/include/uapi/asm/kvm_para.h | 2 | ||||
| -rw-r--r-- | arch/sparc/kernel/pci_sun4v.c | 20 | 
4 files changed, 17 insertions, 17 deletions
| diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index b82f64e28f55..a22cfd5c0ee8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h  generic-y += export.h  generic-y += irq_regs.h  generic-y += irq_work.h +generic-y += kvm_para.h  generic-y += linkage.h  generic-y += local.h  generic-y += local64.h diff --git a/arch/sparc/include/asm/syscall.h b/arch/sparc/include/asm/syscall.h index 053989e3f6a6..4d075434e816 100644 --- a/arch/sparc/include/asm/syscall.h +++ b/arch/sparc/include/asm/syscall.h @@ -96,11 +96,11 @@ static inline void syscall_set_return_value(struct task_struct *task,  static inline void syscall_get_arguments(struct task_struct *task,  					 struct pt_regs *regs, -					 unsigned int i, unsigned int n,  					 unsigned long *args)  {  	int zero_extend = 0;  	unsigned int j; +	unsigned int n = 6;  #ifdef CONFIG_SPARC64  	if (test_tsk_thread_flag(task, TIF_32BIT)) @@ -108,7 +108,7 @@ static inline void syscall_get_arguments(struct task_struct *task,  #endif  	for (j = 0; j < n; j++) { -		unsigned long val = regs->u_regs[UREG_I0 + i + j]; +		unsigned long val = regs->u_regs[UREG_I0 + j];  		if (zero_extend)  			args[j] = (u32) val; @@ -119,13 +119,12 @@ static inline void syscall_get_arguments(struct task_struct *task,  static inline void syscall_set_arguments(struct task_struct *task,  					 struct pt_regs *regs, -					 unsigned int i, unsigned int n,  					 const unsigned long *args)  { -	unsigned int j; +	unsigned int i; -	for (j = 0; j < n; j++) -		regs->u_regs[UREG_I0 + i + j] = args[j]; +	for (i = 0; i < 6; i++) +		regs->u_regs[UREG_I0 + i] = args[i];  }  static inline int syscall_get_arch(void) diff --git a/arch/sparc/include/uapi/asm/kvm_para.h b/arch/sparc/include/uapi/asm/kvm_para.h deleted file mode 100644 index baacc4996d18..000000000000 --- a/arch/sparc/include/uapi/asm/kvm_para.h +++ /dev/null @@ -1,2 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -#include <asm-generic/kvm_para.h> diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c index a8af6023c126..14b93c5564e3 100644 --- a/arch/sparc/kernel/pci_sun4v.c +++ b/arch/sparc/kernel/pci_sun4v.c @@ -73,6 +73,11 @@ static inline void iommu_batch_start(struct device *dev, unsigned long prot, uns  	p->npages	= 0;  } +static inline bool iommu_use_atu(struct iommu *iommu, u64 mask) +{ +	return iommu->atu && mask > DMA_BIT_MASK(32); +} +  /* Interrupts must be disabled.  */  static long iommu_batch_flush(struct iommu_batch *p, u64 mask)  { @@ -92,7 +97,7 @@ static long iommu_batch_flush(struct iommu_batch *p, u64 mask)  		prot &= (HV_PCI_MAP_ATTR_READ | HV_PCI_MAP_ATTR_WRITE);  	while (npages != 0) { -		if (mask <= DMA_BIT_MASK(32) || !pbm->iommu->atu) { +		if (!iommu_use_atu(pbm->iommu, mask)) {  			num = pci_sun4v_iommu_map(devhandle,  						  HV_PCI_TSBID(0, entry),  						  npages, @@ -179,7 +184,6 @@ static void *dma_4v_alloc_coherent(struct device *dev, size_t size,  	unsigned long flags, order, first_page, npages, n;  	unsigned long prot = 0;  	struct iommu *iommu; -	struct atu *atu;  	struct iommu_map_table *tbl;  	struct page *page;  	void *ret; @@ -205,13 +209,11 @@ static void *dma_4v_alloc_coherent(struct device *dev, size_t size,  	memset((char *)first_page, 0, PAGE_SIZE << order);  	iommu = dev->archdata.iommu; -	atu = iommu->atu; -  	mask = dev->coherent_dma_mask; -	if (mask <= DMA_BIT_MASK(32) || !atu) +	if (!iommu_use_atu(iommu, mask))  		tbl = &iommu->tbl;  	else -		tbl = &atu->tbl; +		tbl = &iommu->atu->tbl;  	entry = iommu_tbl_range_alloc(dev, tbl, npages, NULL,  				      (unsigned long)(-1), 0); @@ -333,7 +335,7 @@ static void dma_4v_free_coherent(struct device *dev, size_t size, void *cpu,  	atu = iommu->atu;  	devhandle = pbm->devhandle; -	if (dvma <= DMA_BIT_MASK(32)) { +	if (!iommu_use_atu(iommu, dvma)) {  		tbl = &iommu->tbl;  		iotsb_num = 0; /* we don't care for legacy iommu */  	} else { @@ -374,7 +376,7 @@ static dma_addr_t dma_4v_map_page(struct device *dev, struct page *page,  	npages >>= IO_PAGE_SHIFT;  	mask = *dev->dma_mask; -	if (mask <= DMA_BIT_MASK(32)) +	if (!iommu_use_atu(iommu, mask))  		tbl = &iommu->tbl;  	else  		tbl = &atu->tbl; @@ -510,7 +512,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist,  				  IO_PAGE_SIZE) >> IO_PAGE_SHIFT;  	mask = *dev->dma_mask; -	if (mask <= DMA_BIT_MASK(32)) +	if (!iommu_use_atu(iommu, mask))  		tbl = &iommu->tbl;  	else  		tbl = &atu->tbl; |