xref: /rk3399_rockchip-uboot/arch/sandbox/include/asm/io.h (revision e54094f2f9e812ae7b0d2ab2353ca11c0502849a)
1744d9859SSimon Glass /*
2744d9859SSimon Glass  * Copyright (c) 2011 The Chromium OS Authors.
3744d9859SSimon Glass  *
41a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
5744d9859SSimon Glass  */
6744d9859SSimon Glass 
7a733b06bSSimon Glass #ifndef __SANDBOX_ASM_IO_H
8a733b06bSSimon Glass #define __SANDBOX_ASM_IO_H
9a733b06bSSimon Glass 
10744d9859SSimon Glass /*
11744d9859SSimon Glass  * Given a physical address and a length, return a virtual address
12744d9859SSimon Glass  * that can be used to access the memory range with the caching
13744d9859SSimon Glass  * properties specified by "flags".
14744d9859SSimon Glass  */
15744d9859SSimon Glass #define MAP_NOCACHE	(0)
16744d9859SSimon Glass #define MAP_WRCOMBINE	(0)
17744d9859SSimon Glass #define MAP_WRBACK	(0)
18744d9859SSimon Glass #define MAP_WRTHROUGH	(0)
19744d9859SSimon Glass 
20744d9859SSimon Glass void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags);
21744d9859SSimon Glass 
22744d9859SSimon Glass /*
23744d9859SSimon Glass  * Take down a mapping set up by map_physmem().
24744d9859SSimon Glass  */
259569c406SSimon Glass void unmap_physmem(const void *vaddr, unsigned long flags);
264213fc29SSimon Glass 
274213fc29SSimon Glass /* For sandbox, we want addresses to point into our RAM buffer */
284213fc29SSimon Glass static inline void *map_sysmem(phys_addr_t paddr, unsigned long len)
294213fc29SSimon Glass {
304213fc29SSimon Glass 	return map_physmem(paddr, len, MAP_WRBACK);
314213fc29SSimon Glass }
324213fc29SSimon Glass 
339569c406SSimon Glass /* Remove a previous mapping */
344213fc29SSimon Glass static inline void unmap_sysmem(const void *vaddr)
354213fc29SSimon Glass {
369569c406SSimon Glass 	unmap_physmem(vaddr, MAP_WRBACK);
374213fc29SSimon Glass }
38781adb57SSimon Glass 
39781adb57SSimon Glass /* Map from a pointer to our RAM buffer */
40ed072b96SSimon Glass phys_addr_t map_to_sysmem(const void *ptr);
41a733b06bSSimon Glass 
4242d3b29dSSimon Glass /* Define nops for sandbox I/O access */
4342d3b29dSSimon Glass #define readb(addr) 0
4442d3b29dSSimon Glass #define readw(addr) 0
4542d3b29dSSimon Glass #define readl(addr) 0
4642d3b29dSSimon Glass #define writeb(v, addr)
4742d3b29dSSimon Glass #define writew(v, addr)
4842d3b29dSSimon Glass #define writel(v, addr)
4942d3b29dSSimon Glass 
509569c406SSimon Glass /* I/O access functions */
519569c406SSimon Glass int inl(unsigned int addr);
529569c406SSimon Glass int inw(unsigned int addr);
539569c406SSimon Glass int inb(unsigned int addr);
549569c406SSimon Glass 
559569c406SSimon Glass void outl(unsigned int value, unsigned int addr);
569569c406SSimon Glass void outw(unsigned int value, unsigned int addr);
579569c406SSimon Glass void outb(unsigned int value, unsigned int addr);
589569c406SSimon Glass 
59*e54094f2SSimon Glass static inline void _insw(volatile u16 *port, void *buf, int ns)
60*e54094f2SSimon Glass {
61*e54094f2SSimon Glass }
62*e54094f2SSimon Glass 
63*e54094f2SSimon Glass static inline void _outsw(volatile u16 *port, const void *buf, int ns)
64*e54094f2SSimon Glass {
65*e54094f2SSimon Glass }
66*e54094f2SSimon Glass 
67*e54094f2SSimon Glass #define insw(port, buf, ns)		_insw((u16 *)port, buf, ns)
68*e54094f2SSimon Glass #define outsw(port, buf, ns)		_outsw((u16 *)port, buf, ns)
69*e54094f2SSimon Glass 
70*e54094f2SSimon Glass /* For systemace.c */
71*e54094f2SSimon Glass #define out16(addr, val)
72*e54094f2SSimon Glass #define in16(addr)		0
73*e54094f2SSimon Glass 
7442d3b29dSSimon Glass #include <iotrace.h>
75690d8a92STom Rini #include <asm/types.h>
7642d3b29dSSimon Glass 
77a733b06bSSimon Glass #endif
78