Commit 69df00f9d9c2f45b4576d1eae79bfac8bebb8821
Committed by
Tom Rix
1 parent
11fdade294
Exists in
master
and in
54 other branches
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 */ |