mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-09-20 05:01:53 +00:00
utils.h: add writeread{8,16,32,64}
These functions all perform a store direcly followed by a load. This is useful to e.g. useful to find busy bits which might already be cleared a few cycles after a write. Signed-off-by: Sven Peter <sven@svenpeter.dev>
This commit is contained in:
parent
24938db17a
commit
1ccf2e2af5
1 changed files with 24 additions and 0 deletions
24
src/utils.h
24
src/utils.h
|
@ -56,6 +56,12 @@ static inline u64 mask64(u64 addr, u64 clear, u64 set)
|
|||
return data;
|
||||
}
|
||||
|
||||
static inline u64 writeread64(u64 addr, u64 data)
|
||||
{
|
||||
write64(addr, data);
|
||||
return read64(addr);
|
||||
}
|
||||
|
||||
static inline u32 read32(u64 addr)
|
||||
{
|
||||
u32 data;
|
||||
|
@ -68,6 +74,12 @@ static inline void write32(u64 addr, u32 data)
|
|||
__asm__ volatile("str\t%w0, [%1]" : : "r"(data), "r"(addr) : "memory");
|
||||
}
|
||||
|
||||
static inline u32 writeread32(u64 addr, u32 data)
|
||||
{
|
||||
write32(addr, data);
|
||||
return read32(addr);
|
||||
}
|
||||
|
||||
static inline u32 set32(u64 addr, u32 set)
|
||||
{
|
||||
u32 data;
|
||||
|
@ -156,6 +168,12 @@ static inline u16 mask16(u64 addr, u16 clear, u16 set)
|
|||
return data;
|
||||
}
|
||||
|
||||
static inline u16 writeread16(u64 addr, u16 data)
|
||||
{
|
||||
write16(addr, data);
|
||||
return read16(addr);
|
||||
}
|
||||
|
||||
static inline u8 read8(u64 addr)
|
||||
{
|
||||
u32 data;
|
||||
|
@ -205,6 +223,12 @@ static inline u8 mask8(u64 addr, u8 clear, u8 set)
|
|||
return data;
|
||||
}
|
||||
|
||||
static inline u8 writeread8(u64 addr, u8 data)
|
||||
{
|
||||
write8(addr, data);
|
||||
return read8(addr);
|
||||
}
|
||||
|
||||
#define sys_reg(op0, op1, CRn, CRm, op2) s##op0##_##op1##_c##CRn##_c##CRm##_##op2
|
||||
|
||||
#define _mrs(reg) \
|
||||
|
|
Loading…
Reference in a new issue