Loading arch/csky/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ config CSKY select IRQ_DOMAIN select HANDLE_DOMAIN_IRQ select DW_APB_TIMER_OF select GENERIC_IOREMAP select GENERIC_LIB_ASHLDI3 select GENERIC_LIB_ASHRDI3 select GENERIC_LIB_LSHRDI3 Loading arch/csky/include/asm/io.h +3 −5 Original line number Diff line number Diff line Loading @@ -36,11 +36,9 @@ /* * I/O memory mapping functions. */ extern void __iomem *__ioremap(phys_addr_t addr, size_t size, pgprot_t prot); extern void iounmap(void *addr); #define ioremap(addr, size) __ioremap((addr), (size), pgprot_noncached(PAGE_KERNEL)) #define ioremap_wc(addr, size) __ioremap((addr), (size), pgprot_writecombine(PAGE_KERNEL)) #define ioremap_wc(addr, size) \ ioremap_prot((addr), (size), \ (_PAGE_IOREMAP & ~_CACHE_MASK) | _CACHE_UNCACHED) #include <asm-generic/io.h> Loading arch/csky/include/asm/pgtable.h +4 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ #define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ _CACHE_CACHED) #define _PAGE_IOREMAP \ (_PAGE_PRESENT | __READABLE | __WRITEABLE | _PAGE_GLOBAL | \ _CACHE_UNCACHED | _PAGE_SO) #define __P000 PAGE_NONE #define __P001 PAGE_READONLY #define __P010 PAGE_COPY Loading arch/csky/mm/ioremap.c +0 −45 Original line number Diff line number Diff line Loading @@ -3,53 +3,8 @@ #include <linux/export.h> #include <linux/mm.h> #include <linux/vmalloc.h> #include <linux/io.h> #include <asm/pgtable.h> static void __iomem *__ioremap_caller(phys_addr_t addr, size_t size, pgprot_t prot, void *caller) { phys_addr_t last_addr; unsigned long offset, vaddr; struct vm_struct *area; last_addr = addr + size - 1; if (!size || last_addr < addr) return NULL; offset = addr & (~PAGE_MASK); addr &= PAGE_MASK; size = PAGE_ALIGN(size + offset); area = get_vm_area_caller(size, VM_IOREMAP, caller); if (!area) return NULL; vaddr = (unsigned long)area->addr; if (ioremap_page_range(vaddr, vaddr + size, addr, prot)) { free_vm_area(area); return NULL; } return (void __iomem *)(vaddr + offset); } void __iomem *__ioremap(phys_addr_t phys_addr, size_t size, pgprot_t prot) { return __ioremap_caller(phys_addr, size, prot, __builtin_return_address(0)); } EXPORT_SYMBOL(__ioremap); void iounmap(void __iomem *addr) { vunmap((void *)((unsigned long)addr & PAGE_MASK)); } EXPORT_SYMBOL(iounmap); pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, unsigned long size, pgprot_t vma_prot) { Loading Loading
arch/csky/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ config CSKY select IRQ_DOMAIN select HANDLE_DOMAIN_IRQ select DW_APB_TIMER_OF select GENERIC_IOREMAP select GENERIC_LIB_ASHLDI3 select GENERIC_LIB_ASHRDI3 select GENERIC_LIB_LSHRDI3 Loading
arch/csky/include/asm/io.h +3 −5 Original line number Diff line number Diff line Loading @@ -36,11 +36,9 @@ /* * I/O memory mapping functions. */ extern void __iomem *__ioremap(phys_addr_t addr, size_t size, pgprot_t prot); extern void iounmap(void *addr); #define ioremap(addr, size) __ioremap((addr), (size), pgprot_noncached(PAGE_KERNEL)) #define ioremap_wc(addr, size) __ioremap((addr), (size), pgprot_writecombine(PAGE_KERNEL)) #define ioremap_wc(addr, size) \ ioremap_prot((addr), (size), \ (_PAGE_IOREMAP & ~_CACHE_MASK) | _CACHE_UNCACHED) #include <asm-generic/io.h> Loading
arch/csky/include/asm/pgtable.h +4 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,10 @@ #define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ _CACHE_CACHED) #define _PAGE_IOREMAP \ (_PAGE_PRESENT | __READABLE | __WRITEABLE | _PAGE_GLOBAL | \ _CACHE_UNCACHED | _PAGE_SO) #define __P000 PAGE_NONE #define __P001 PAGE_READONLY #define __P010 PAGE_COPY Loading
arch/csky/mm/ioremap.c +0 −45 Original line number Diff line number Diff line Loading @@ -3,53 +3,8 @@ #include <linux/export.h> #include <linux/mm.h> #include <linux/vmalloc.h> #include <linux/io.h> #include <asm/pgtable.h> static void __iomem *__ioremap_caller(phys_addr_t addr, size_t size, pgprot_t prot, void *caller) { phys_addr_t last_addr; unsigned long offset, vaddr; struct vm_struct *area; last_addr = addr + size - 1; if (!size || last_addr < addr) return NULL; offset = addr & (~PAGE_MASK); addr &= PAGE_MASK; size = PAGE_ALIGN(size + offset); area = get_vm_area_caller(size, VM_IOREMAP, caller); if (!area) return NULL; vaddr = (unsigned long)area->addr; if (ioremap_page_range(vaddr, vaddr + size, addr, prot)) { free_vm_area(area); return NULL; } return (void __iomem *)(vaddr + offset); } void __iomem *__ioremap(phys_addr_t phys_addr, size_t size, pgprot_t prot) { return __ioremap_caller(phys_addr, size, prot, __builtin_return_address(0)); } EXPORT_SYMBOL(__ioremap); void iounmap(void __iomem *addr) { vunmap((void *)((unsigned long)addr & PAGE_MASK)); } EXPORT_SYMBOL(iounmap); pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, unsigned long size, pgprot_t vma_prot) { Loading