Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 1 | /* |
Lennert Buytenhek | 9dd0b19 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 2 | * include/asm-arm/arch-orion5x/io.h |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 3 | * |
| 4 | * Tzachi Perelstein <tzachi@marvell.com> |
| 5 | * |
Lennert Buytenhek | 159ffb3 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 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 |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 8 | * warranty of any kind, whether express or implied. |
| 9 | */ |
| 10 | |
Lennert Buytenhek | 159ffb3 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 11 | #ifndef __ASM_ARCH_IO_H |
| 12 | #define __ASM_ARCH_IO_H |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 13 | |
Lennert Buytenhek | 9dd0b19 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 14 | #include "orion5x.h" |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 15 | |
| 16 | #define IO_SPACE_LIMIT 0xffffffff |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 17 | |
Lennert Buytenhek | 1419468 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 18 | static inline void __iomem * |
| 19 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) |
| 20 | { |
| 21 | void __iomem *retval; |
Nicolas Pitre | fd153ab | 2008-04-25 14:28:55 -0400 | [diff] [blame] | 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; |
Lennert Buytenhek | 1419468 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 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 | { |
Lennert Buytenhek | 9dd0b19 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 36 | if (addr < (void __iomem *)ORION5X_REGS_VIRT_BASE || |
| 37 | addr >= (void __iomem *)(ORION5X_REGS_VIRT_BASE + ORION5X_REGS_SIZE)) |
Lennert Buytenhek | 1419468 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 38 | __iounmap(addr); |
| 39 | } |
| 40 | |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 41 | static inline void __iomem *__io(unsigned long addr) |
| 42 | { |
| 43 | return (void __iomem *)addr; |
| 44 | } |
| 45 | |
Lennert Buytenhek | 1419468 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 46 | #define __arch_ioremap(p, s, m) __arch_ioremap(p, s, m) |
| 47 | #define __arch_iounmap(a) __arch_iounmap(a) |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 48 | #define __io(a) __io(a) |
| 49 | #define __mem_pci(a) (a) |
| 50 | |
Lennert Buytenhek | b590bc5 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 51 | |
| 52 | /***************************************************************************** |
| 53 | * Helpers to access Orion registers |
| 54 | ****************************************************************************/ |
Lennert Buytenhek | b590bc5 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 55 | /* |
| 56 | * These are not preempt-safe. Locks, if needed, must be taken |
| 57 | * care of by the caller. |
| 58 | */ |
Lennert Buytenhek | 79e90dd | 2008-05-28 16:43:48 +0200 | [diff] [blame] | 59 | #define orion5x_setbits(r, mask) writel(readl(r) | (mask), (r)) |
| 60 | #define orion5x_clrbits(r, mask) writel(readl(r) & ~(mask), (r)) |
Lennert Buytenhek | b590bc5 | 2008-03-27 14:51:41 -0400 | [diff] [blame] | 61 | |
| 62 | |
Tzachi Perelstein | 585cf17 | 2007-10-23 15:14:41 -0400 | [diff] [blame] | 63 | #endif |