Message ID | 1447940895-7763-3-git-send-email-thomas@wytron.com.tw |
---|---|
State | Accepted |
Delegated to: | Tom Rini |
Headers | show |
On 19 November 2015 at 06:48, Thomas Chou <thomas@wytron.com.tw> wrote: > Change map_sysmem() to map_physmem(,,MAP_NOCACHE). Though map_sysmem() > can be used to map system memory, it might be wrong to use it for I/O > ports. The map_physmem() serves the same purpose to translate physical > address to virtual address with the additional flag to take care of cache > property. Most drivers use map_physmem() since I/O ports access should be > uncached. As ns16550 is a driver, it should use map_physmem() rather > than map_sysmem(). > > Signed-off-by: Thomas Chou <thomas@wytron.com.tw> > --- > drivers/serial/ns16550.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) Acked-by: Simon Glass <sjg@chromium.org>
On Thu, Nov 19, 2015 at 09:48:04PM +0800, Thomas Chou wrote: > Change map_sysmem() to map_physmem(,,MAP_NOCACHE). Though map_sysmem() > can be used to map system memory, it might be wrong to use it for I/O > ports. The map_physmem() serves the same purpose to translate physical > address to virtual address with the additional flag to take care of cache > property. Most drivers use map_physmem() since I/O ports access should be > uncached. As ns16550 is a driver, it should use map_physmem() rather > than map_sysmem(). > > Signed-off-by: Thomas Chou <thomas@wytron.com.tw> > Acked-by: Simon Glass <sjg@chromium.org> Applied to u-boot/master, thanks!
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 6433844..8d028de 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -8,7 +8,6 @@ #include <dm.h> #include <errno.h> #include <fdtdec.h> -#include <mapmem.h> #include <ns16550.h> #include <serial.h> #include <watchdog.h> @@ -97,7 +96,7 @@ static void ns16550_writeb(NS16550_t port, int offset, int value) unsigned char *addr; offset *= 1 << plat->reg_shift; - addr = map_sysmem(plat->base, 0) + offset; + addr = map_physmem(plat->base, 0, MAP_NOCACHE) + offset; /* * As far as we know it doesn't make sense to support selection of * these options at run-time, so use the existing CONFIG options. @@ -111,7 +110,7 @@ static int ns16550_readb(NS16550_t port, int offset) unsigned char *addr; offset *= 1 << plat->reg_shift; - addr = map_sysmem(plat->base, 0) + offset; + addr = map_physmem(plat->base, 0, MAP_NOCACHE) + offset; return serial_in_shift(addr, plat->reg_shift); }
Change map_sysmem() to map_physmem(,,MAP_NOCACHE). Though map_sysmem() can be used to map system memory, it might be wrong to use it for I/O ports. The map_physmem() serves the same purpose to translate physical address to virtual address with the additional flag to take care of cache property. Most drivers use map_physmem() since I/O ports access should be uncached. As ns16550 is a driver, it should use map_physmem() rather than map_sysmem(). Signed-off-by: Thomas Chou <thomas@wytron.com.tw> --- drivers/serial/ns16550.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)