Skip to content

Commit 53a4858

Browse files
xen0nchenhuacai
authored andcommitted
LoongArch: Make the CPUCFG&CSR ops simple aliases of compiler built-ins
In addition to less visual clutter, this also makes Clang happy regarding the const-ness of arguments. In the original approach, all Clang gets to see is the incoming arguments whose const-ness cannot be proven without first being inlined; so Clang errors out here while GCC is fine. While at it, tweak several printk format strings because the return type of csr_read64 becomes effectively unsigned long, instead of unsigned long long. Signed-off-by: WANG Xuerui <[email protected]> Signed-off-by: Huacai Chen <[email protected]>
1 parent 38bb46f commit 53a4858

File tree

3 files changed

+15
-56
lines changed

3 files changed

+15
-56
lines changed

arch/loongarch/include/asm/loongarch.h

Lines changed: 11 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,7 @@ __asm__(".macro parse_r var r\n\t"
5656
#undef _IFC_REG
5757

5858
/* CPUCFG */
59-
static inline u32 read_cpucfg(u32 reg)
60-
{
61-
return __cpucfg(reg);
62-
}
59+
#define read_cpucfg(reg) __cpucfg(reg)
6360

6461
#endif /* !__ASSEMBLY__ */
6562

@@ -206,56 +203,18 @@ static inline u32 read_cpucfg(u32 reg)
206203
#ifndef __ASSEMBLY__
207204

208205
/* CSR */
209-
static __always_inline u32 csr_read32(u32 reg)
210-
{
211-
return __csrrd_w(reg);
212-
}
213-
214-
static __always_inline u64 csr_read64(u32 reg)
215-
{
216-
return __csrrd_d(reg);
217-
}
218-
219-
static __always_inline void csr_write32(u32 val, u32 reg)
220-
{
221-
__csrwr_w(val, reg);
222-
}
223-
224-
static __always_inline void csr_write64(u64 val, u32 reg)
225-
{
226-
__csrwr_d(val, reg);
227-
}
228-
229-
static __always_inline u32 csr_xchg32(u32 val, u32 mask, u32 reg)
230-
{
231-
return __csrxchg_w(val, mask, reg);
232-
}
233-
234-
static __always_inline u64 csr_xchg64(u64 val, u64 mask, u32 reg)
235-
{
236-
return __csrxchg_d(val, mask, reg);
237-
}
206+
#define csr_read32(reg) __csrrd_w(reg)
207+
#define csr_read64(reg) __csrrd_d(reg)
208+
#define csr_write32(val, reg) __csrwr_w(val, reg)
209+
#define csr_write64(val, reg) __csrwr_d(val, reg)
210+
#define csr_xchg32(val, mask, reg) __csrxchg_w(val, mask, reg)
211+
#define csr_xchg64(val, mask, reg) __csrxchg_d(val, mask, reg)
238212

239213
/* IOCSR */
240-
static __always_inline u32 iocsr_read32(u32 reg)
241-
{
242-
return __iocsrrd_w(reg);
243-
}
244-
245-
static __always_inline u64 iocsr_read64(u32 reg)
246-
{
247-
return __iocsrrd_d(reg);
248-
}
249-
250-
static __always_inline void iocsr_write32(u32 val, u32 reg)
251-
{
252-
__iocsrwr_w(val, reg);
253-
}
254-
255-
static __always_inline void iocsr_write64(u64 val, u32 reg)
256-
{
257-
__iocsrwr_d(val, reg);
258-
}
214+
#define iocsr_read32(reg) __iocsrrd_w(reg)
215+
#define iocsr_read64(reg) __iocsrrd_d(reg)
216+
#define iocsr_write32(val, reg) __iocsrwr_w(val, reg)
217+
#define iocsr_write64(val, reg) __iocsrwr_d(val, reg)
259218

260219
#endif /* !__ASSEMBLY__ */
261220

arch/loongarch/kernel/traps.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ asmlinkage void cache_parity_error(void)
924924
/* For the moment, report the problem and hang. */
925925
pr_err("Cache error exception:\n");
926926
pr_err("csr_merrctl == %08x\n", csr_read32(LOONGARCH_CSR_MERRCTL));
927-
pr_err("csr_merrera == %016llx\n", csr_read64(LOONGARCH_CSR_MERRERA));
927+
pr_err("csr_merrera == %016lx\n", csr_read64(LOONGARCH_CSR_MERRERA));
928928
panic("Can't handle the cache error!");
929929
}
930930

arch/loongarch/lib/dump_tlb.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ void dump_tlb_regs(void)
2020

2121
pr_info("Index : 0x%0x\n", read_csr_tlbidx());
2222
pr_info("PageSize : 0x%0x\n", read_csr_pagesize());
23-
pr_info("EntryHi : 0x%0*llx\n", field, read_csr_entryhi());
24-
pr_info("EntryLo0 : 0x%0*llx\n", field, read_csr_entrylo0());
25-
pr_info("EntryLo1 : 0x%0*llx\n", field, read_csr_entrylo1());
23+
pr_info("EntryHi : 0x%0*lx\n", field, read_csr_entryhi());
24+
pr_info("EntryLo0 : 0x%0*lx\n", field, read_csr_entrylo0());
25+
pr_info("EntryLo1 : 0x%0*lx\n", field, read_csr_entrylo1());
2626
}
2727

2828
static void dump_tlb(int first, int last)

0 commit comments

Comments
 (0)