Thread (105 messages) 105 messages, 14 authors, 2017-11-22

Re: [PATCH 12/31] nds32: Device specific operations

From: Arnd Bergmann <arnd@arndb.de>
Date: 2017-11-08 09:04:52
Also in: linux-arch, lkml

On Wed, Nov 8, 2017 at 6:55 AM, Greentime Hu [off-list ref] wrote:
+
+#define ioremap(cookie,size)           __ioremap(cookie,size,0,1)
+#define ioremap_nocache(cookie,size)   __ioremap(cookie,size,0,1)
+#define iounmap(cookie)                        __iounmap(cookie)
+#include <asm-generic/io.h>
asm-generic/io.h now provides an ioremap_nocache() helper along with
ioremap_uc/ioremap_wc/ioremap_wt, so I think you can remove the
ioremap_nocache definition here. You might also be able to remove
__ioremap and __iounmap, and only provide ioremap/iounmap, plus
the identity macro 'define ioremap ioremap'
+void __iomem *__ioremap(unsigned long phys_addr, size_t size,
+                       unsigned long flags, unsigned long align)
The 'align' argument is unused here, and not used on other architectures
either.
+{
+       struct vm_struct *area;
+       unsigned long addr, offset, last_addr;
+       pgprot_t prot;
+
+       /* Don't allow wraparound or zero size */
+       last_addr = phys_addr + size - 1;
+       if (!size || last_addr < phys_addr)
+               return NULL;
+
+       /*
+        * Mappings have to be page-aligned
+        */
+       offset = phys_addr & ~PAGE_MASK;
+       phys_addr &= PAGE_MASK;
+       size = PAGE_ALIGN(last_addr + 1) - phys_addr;
+
+       /*
+        * Ok, go for it..
+        */
+       area = get_vm_area(size, VM_IOREMAP);
Better use get_vm_area_caller here to have the ioremap areas show up
in a more useful form in /proc/vmallocinfo

Please also have a look at what you can do for memremap().

Since you have no cacheable version of ioremap_wb/wt, it will
return an uncached mapping all the time, which is not ideal.

     Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help