mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-28 01:51:33 +00:00
Introduce map_physmem() and unmap_physmem()
map_physmem() returns a virtual address which can be used to access a given physical address without involving the cache. unmap_physmem() should be called when the virtual address returned by map_physmem() is no longer needed. This patch adds a stub implementation which simply returns the physical address cast to a uchar * for all architectures except AVR32, which converts the physical address to an uncached virtual mapping. unmap_physmem() is a no-op on all architectures, but if any architecture needs to do such mappings through the TLB, this is the hook where those TLB entries can be invalidated. Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
This commit is contained in:
parent
cdbaefb5f5
commit
4d7d6936eb
10 changed files with 267 additions and 0 deletions
|
@ -33,6 +33,32 @@ static inline void sync(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic virtual read/write. Note that we don't support half-word
|
* Generic virtual read/write. Note that we don't support half-word
|
||||||
* read/writes. We define __arch_*[bl] here, and leave __arch_*w
|
* read/writes. We define __arch_*[bl] here, and leave __arch_*w
|
||||||
|
|
|
@ -93,4 +93,36 @@ static inline void sync(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*
|
||||||
|
* This implementation works for memory below 512MiB (flash, etc.) as
|
||||||
|
* well as above 3.5GiB (internal peripherals.)
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (1 << 7)
|
||||||
|
#define MAP_WRBACK (MAP_WRCOMBINE | (1 << 9))
|
||||||
|
#define MAP_WRTHROUGH (MAP_WRBACK | (1 << 0))
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
if (flags == MAP_WRBACK)
|
||||||
|
return (void *)P1SEGADDR(paddr);
|
||||||
|
else
|
||||||
|
return (void *)P2SEGADDR(paddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long len)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __ASM_AVR32_IO_H */
|
#endif /* __ASM_AVR32_IO_H */
|
||||||
|
|
|
@ -40,6 +40,32 @@ static inline void sync(void)
|
||||||
__builtin_bfin_ssync();
|
__builtin_bfin_ssync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are for ISA/PCI shared memory _only_ and should never be used
|
* These are for ISA/PCI shared memory _only_ and should never be used
|
||||||
* on any other type of memory, including Zorro memory. They are meant to
|
* on any other type of memory, including Zorro memory. They are meant to
|
||||||
|
|
|
@ -205,4 +205,30 @@ static inline void sync(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -232,4 +232,31 @@ static inline void sync(void)
|
||||||
* compatibility (CFI driver)
|
* compatibility (CFI driver)
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __ASM_M68K_IO_H__ */
|
#endif /* __ASM_M68K_IO_H__ */
|
||||||
|
|
|
@ -129,4 +129,30 @@ static inline void sync(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __MICROBLAZE_IO_H__ */
|
#endif /* __MICROBLAZE_IO_H__ */
|
||||||
|
|
|
@ -465,4 +465,30 @@ static inline void sync(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_IO_H */
|
#endif /* _ASM_IO_H */
|
||||||
|
|
|
@ -109,4 +109,30 @@ static inline void sync(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __ASM_NIOS_IO_H_ */
|
#endif /* __ASM_NIOS_IO_H_ */
|
||||||
|
|
|
@ -29,6 +29,32 @@ static inline void sync(void)
|
||||||
__asm__ __volatile__ ("sync" : : : "memory");
|
__asm__ __volatile__ ("sync" : : : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
extern unsigned char inb (unsigned char *port);
|
extern unsigned char inb (unsigned char *port);
|
||||||
extern unsigned short inw (unsigned short *port);
|
extern unsigned short inw (unsigned short *port);
|
||||||
extern unsigned inl (unsigned port);
|
extern unsigned inl (unsigned port);
|
||||||
|
|
|
@ -238,4 +238,30 @@ extern inline void out_be32(volatile unsigned __iomem *addr, int val)
|
||||||
__asm__ __volatile__("sync; stw%U0%X0 %1,%0" : "=m" (*addr) : "r" (val));
|
__asm__ __volatile__("sync; stw%U0%X0 %1,%0" : "=m" (*addr) : "r" (val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Given a physical address and a length, return a virtual address
|
||||||
|
* that can be used to access the memory range with the caching
|
||||||
|
* properties specified by "flags".
|
||||||
|
*/
|
||||||
|
typedef unsigned long phys_addr_t;
|
||||||
|
|
||||||
|
#define MAP_NOCACHE (0)
|
||||||
|
#define MAP_WRCOMBINE (0)
|
||||||
|
#define MAP_WRBACK (0)
|
||||||
|
#define MAP_WRTHROUGH (0)
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
|
||||||
|
{
|
||||||
|
return (void *)paddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take down a mapping set up by map_physmem().
|
||||||
|
*/
|
||||||
|
static inline void unmap_physmem(void *vaddr, unsigned long flags)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue