Commit 69df00f9d9c2f45b4576d1eae79bfac8bebb8821

Authored by Stefano Babic
Committed by Tom Rix
1 parent 11fdade294

ARM: add accessors functions

Some Freescale's processors of different architecture
have the same peripheral (eSDHC controller in PowerPC
and i.MX51). This patch adds accessors for
the internal registers of the SOCs, as already
implemented in the PowerPC architecture.

Signed-off-by: Stefano Babic <sbabic@denx.de>

Showing 1 changed file with 55 additions and 0 deletions Side-by-side Diff

include/asm-arm/io.h
... ... @@ -113,6 +113,61 @@
113 113 #define __raw_base_readl(base,off) __arch_base_getl(base,off)
114 114  
115 115 /*
  116 + * Clear and set bits in one shot. These macros can be used to clear and
  117 + * set multiple bits in a register using a single call. These macros can
  118 + * also be used to set a multiple-bit bit pattern using a mask, by
  119 + * specifying the mask in the 'clear' parameter and the new bit pattern
  120 + * in the 'set' parameter.
  121 + */
  122 +
  123 +#define out_arch(type,endian,a,v) __raw_write##type(cpu_to_##endian(v),a)
  124 +#define in_arch(type,endian,a) endian##_to_cpu(__raw_read##type(a))
  125 +
  126 +#define out_le32(a,v) out_arch(l,le32,a,v)
  127 +#define out_le16(a,v) out_arch(w,le16,a,v)
  128 +
  129 +#define in_le32(a) in_arch(l,le32,a)
  130 +#define in_le16(a) in_arch(w,le16,a)
  131 +
  132 +#define out_be32(a,v) out_arch(l,be32,a,v)
  133 +#define out_be16(a,v) out_arch(w,be16,a,v)
  134 +
  135 +#define in_be32(a) in_arch(l,be32,a)
  136 +#define in_be16(a) in_arch(w,be16,a)
  137 +
  138 +#define out_8(a,v) __raw_writeb(v,a)
  139 +#define in_8(a) __raw_readb(a)
  140 +
  141 +#define clrbits(type, addr, clear) \
  142 + out_##type((addr), in_##type(addr) & ~(clear))
  143 +
  144 +#define setbits(type, addr, set) \
  145 + out_##type((addr), in_##type(addr) | (set))
  146 +
  147 +#define clrsetbits(type, addr, clear, set) \
  148 + out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
  149 +
  150 +#define clrbits_be32(addr, clear) clrbits(be32, addr, clear)
  151 +#define setbits_be32(addr, set) setbits(be32, addr, set)
  152 +#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
  153 +
  154 +#define clrbits_le32(addr, clear) clrbits(le32, addr, clear)
  155 +#define setbits_le32(addr, set) setbits(le32, addr, set)
  156 +#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
  157 +
  158 +#define clrbits_be16(addr, clear) clrbits(be16, addr, clear)
  159 +#define setbits_be16(addr, set) setbits(be16, addr, set)
  160 +#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
  161 +
  162 +#define clrbits_le16(addr, clear) clrbits(le16, addr, clear)
  163 +#define setbits_le16(addr, set) setbits(le16, addr, set)
  164 +#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set)
  165 +
  166 +#define clrbits_8(addr, clear) clrbits(8, addr, clear)
  167 +#define setbits_8(addr, set) setbits(8, addr, set)
  168 +#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
  169 +
  170 +/*
116 171 * Now, pick up the machine-defined IO definitions
117 172 */
118 173 #if 0 /* XXX###XXX */