From 0b414532c41303ce42fa2b9cc4861c5b01e76b40 Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Tue, 18 Feb 2020 09:26:33 +0530 Subject: [PATCH] Revert "lib: Use __builtin_ctzl() in pmp_get()" This reverts commit 897b8fbdd92fcfad194417d348b8dad16ab0e17a. We are seeing compile errors using newlib based GCC cross-toolchain so we restore back old ctz() implementation. Signed-off-by: Anup Patel --- lib/sbi/riscv_asm.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/sbi/riscv_asm.c b/lib/sbi/riscv_asm.c index 68f5f17..7b612d4 100644 --- a/lib/sbi/riscv_asm.c +++ b/lib/sbi/riscv_asm.c @@ -184,6 +184,18 @@ void csr_write_num(int csr_num, unsigned long val) }; } +static unsigned long ctz(unsigned long x) +{ + unsigned long ret = 0; + + while (!(x & 1UL)) { + ret++; + x = x >> 1; + } + + return ret; +} + int pmp_set(unsigned int n, unsigned long prot, unsigned long addr, unsigned long log2len) { @@ -275,7 +287,7 @@ int pmp_get(unsigned int n, unsigned long *prot_out, unsigned long *addr_out, addr = 0; log2len = __riscv_xlen; } else { - t1 = __builtin_ctzl(~addr); + t1 = ctz(~addr); addr = (addr & ~((1UL << t1) - 1)) << PMP_SHIFT; log2len = (t1 + PMP_SHIFT + 1); }