mmio: Add clrsetbitsXX() API in place of updateX()
This patch removes the recently added update8/16/32/64() API and replaces it with clrsetbits8/16/32/64(). This is more in line with the existing endian-specific clrsetbits_le16/32/64() functions that have been used for this task on some platforms already. Rename clrsetbits_8() to clrsetbits8() to be in line with the new naming. Keep this stuff in <device/mmio.h> and get rid of <mmio.h> again because having both is confusing and we seem to have been standardizing on <device/mmio.h> as the standard arch-independent header that all platforms should include already. Also sync libpayload back up with what we have in coreboot. (I'm the original author of the clrsetbits_le32-definitions so I'm relicensing them to BSD here.) Change-Id: Ie4f7b9fdbdf9e8c0174427b4288f79006d56978b Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/37432 Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Furquan Shaikh <furquan@google.com> Reviewed-by: Hung-Te Lin <hungte@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
committed by
Patrick Georgi
parent
41fe62b6dc
commit
1c37157218
@ -181,18 +181,47 @@ static inline void le32enc(void *pp, uint32_t u)
|
||||
|
||||
/* Handy bit manipulation macros */
|
||||
|
||||
#define clrsetbits_le32(addr, clear, set) writel(htole32((le32toh(readl(addr)) \
|
||||
& ~(clear)) | (set)), (addr))
|
||||
#define setbits_le32(addr, set) writel(htole32(le32toh(readl(addr)) \
|
||||
| (set)), (addr))
|
||||
#define clrbits_le32(addr, clear) writel(htole32(le32toh(readl(addr)) \
|
||||
& ~(clear)), (addr))
|
||||
#define __clrsetbits(endian, bits, addr, clear, set) \
|
||||
write##bits(addr, hto##endian##bits((endian##bits##toh( \
|
||||
read##bits(addr)) & ~((uint##bits##_t)(clear))) | (set)))
|
||||
|
||||
#define clrsetbits_be32(addr, clear, set) writel(htobe32((be32toh(readl(addr)) \
|
||||
& ~(clear)) | (set)), (addr))
|
||||
#define setbits_be32(addr, set) writel(htobe32(be32toh(readl(addr)) \
|
||||
| (set)), (addr))
|
||||
#define clrbits_be32(addr, clear) writel(htobe32(be32toh(readl(addr)) \
|
||||
& ~(clear)), (addr))
|
||||
#define clrbits_le64(addr, clear) __clrsetbits(le, 64, addr, clear, 0)
|
||||
#define clrbits_be64(addr, clear) __clrsetbits(be, 64, addr, clear, 0)
|
||||
#define clrbits_le32(addr, clear) __clrsetbits(le, 32, addr, clear, 0)
|
||||
#define clrbits_be32(addr, clear) __clrsetbits(be, 32, addr, clear, 0)
|
||||
#define clrbits_le16(addr, clear) __clrsetbits(le, 16, addr, clear, 0)
|
||||
#define clrbits_be16(addr, clear) __clrsetbits(be, 16, addr, clear, 0)
|
||||
|
||||
#define setbits_le64(addr, set) __clrsetbits(le, 64, addr, 0, set)
|
||||
#define setbits_be64(addr, set) __clrsetbits(be, 64, addr, 0, set)
|
||||
#define setbits_le32(addr, set) __clrsetbits(le, 32, addr, 0, set)
|
||||
#define setbits_be32(addr, set) __clrsetbits(be, 32, addr, 0, set)
|
||||
#define setbits_le16(addr, set) __clrsetbits(le, 16, addr, 0, set)
|
||||
#define setbits_be16(addr, set) __clrsetbits(be, 16, addr, 0, set)
|
||||
|
||||
#define clrsetbits_le64(addr, clear, set) __clrsetbits(le, 64, addr, clear, set)
|
||||
#define clrsetbits_be64(addr, clear, set) __clrsetbits(be, 64, addr, clear, set)
|
||||
#define clrsetbits_le32(addr, clear, set) __clrsetbits(le, 32, addr, clear, set)
|
||||
#define clrsetbits_be32(addr, clear, set) __clrsetbits(be, 32, addr, clear, set)
|
||||
#define clrsetbits_le16(addr, clear, set) __clrsetbits(le, 16, addr, clear, set)
|
||||
#define clrsetbits_be16(addr, clear, set) __clrsetbits(be, 16, addr, clear, set)
|
||||
|
||||
#define __clrsetbits_impl(bits, addr, clear, set) write##bits(addr, \
|
||||
(read##bits(addr) & ~((uint##bits##_t)(clear))) | (set))
|
||||
|
||||
#define clrsetbits8(addr, clear, set) __clrsetbits_impl(8, addr, clear, set)
|
||||
#define clrsetbits16(addr, clear, set) __clrsetbits_impl(16, addr, clear, set)
|
||||
#define clrsetbits32(addr, clear, set) __clrsetbits_impl(32, addr, clear, set)
|
||||
#define clrsetbits64(addr, clear, set) __clrsetbits_impl(64, addr, clear, set)
|
||||
|
||||
#define setbits8(addr, set) clrsetbits8(addr, 0, set)
|
||||
#define setbits16(addr, set) clrsetbits16(addr, 0, set)
|
||||
#define setbits32(addr, set) clrsetbits32(addr, 0, set)
|
||||
#define setbits64(addr, set) clrsetbits64(addr, 0, set)
|
||||
|
||||
#define clrbits8(addr, clear) clrsetbits8(addr, clear, 0)
|
||||
#define clrbits16(addr, clear) clrsetbits16(addr, clear, 0)
|
||||
#define clrbits32(addr, clear) clrsetbits32(addr, clear, 0)
|
||||
#define clrbits64(addr, clear) clrsetbits64(addr, clear, 0)
|
||||
|
||||
#endif /* _ENDIAN_H_ */
|
||||
|
Reference in New Issue
Block a user