Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-orion5x/include/mach/io.h
10820 views
1
/*
2
* arch/arm/mach-orion5x/include/mach/io.h
3
*
4
* Tzachi Perelstein <[email protected]>
5
*
6
* This file is licensed under the terms of the GNU General Public
7
* License version 2. This program is licensed "as is" without any
8
* warranty of any kind, whether express or implied.
9
*/
10
11
#ifndef __ASM_ARCH_IO_H
12
#define __ASM_ARCH_IO_H
13
14
#include "orion5x.h"
15
16
#define IO_SPACE_LIMIT 0xffffffff
17
18
static inline void __iomem *
19
__arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype)
20
{
21
void __iomem *retval;
22
unsigned long offs = paddr - ORION5X_REGS_PHYS_BASE;
23
if (mtype == MT_DEVICE && size && offs < ORION5X_REGS_SIZE &&
24
size <= ORION5X_REGS_SIZE && offs + size <= ORION5X_REGS_SIZE) {
25
retval = (void __iomem *)ORION5X_REGS_VIRT_BASE + offs;
26
} else {
27
retval = __arm_ioremap(paddr, size, mtype);
28
}
29
30
return retval;
31
}
32
33
static inline void
34
__arch_iounmap(void __iomem *addr)
35
{
36
if (addr < (void __iomem *)ORION5X_REGS_VIRT_BASE ||
37
addr >= (void __iomem *)(ORION5X_REGS_VIRT_BASE + ORION5X_REGS_SIZE))
38
__iounmap(addr);
39
}
40
41
#define __arch_ioremap __arch_ioremap
42
#define __arch_iounmap __arch_iounmap
43
#define __io(a) __typesafe_io(a)
44
#define __mem_pci(a) (a)
45
46
47
/*****************************************************************************
48
* Helpers to access Orion registers
49
****************************************************************************/
50
/*
51
* These are not preempt-safe. Locks, if needed, must be taken
52
* care of by the caller.
53
*/
54
#define orion5x_setbits(r, mask) writel(readl(r) | (mask), (r))
55
#define orion5x_clrbits(r, mask) writel(readl(r) & ~(mask), (r))
56
57
58
#endif
59
60