[PATCH v2 1/2] lib: utils/fdt_cppc_rpmi: Fix compile error with LLVM
Xiang W
wxjstz at 126.com
Wed Dec 11 01:59:44 PST 2024
在 2024-12-10二的 10:53 +0530,Anup Patel写道:
> The following error is observed when compiling fdt_cppc_rpmi
> driver using LLVM:
>
> lib/utils/cppc/fdt_cppc_rpmi.c:87:3: error: label followed by a declaration is a C23 extension [-Werror,-Wc23-extensions]
> 87 | u64 db_val_u64 = 0;
>
> To fix the above issue, move the variable declaration at the
> start of function.
>
> Fixes: 591a98bdd549 ("lib: utils/cppc: Add RPMI CPPC driver")
> Signed-off-by: Anup Patel <apatel at ventanamicro.com>
> ---
> lib/utils/cppc/fdt_cppc_rpmi.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/lib/utils/cppc/fdt_cppc_rpmi.c b/lib/utils/cppc/fdt_cppc_rpmi.c
> index 26e2d4f6..b6789901 100644
> --- a/lib/utils/cppc/fdt_cppc_rpmi.c
> +++ b/lib/utils/cppc/fdt_cppc_rpmi.c
> @@ -59,6 +59,11 @@ static void rpmi_cppc_fc_db_trigger(struct rpmi_cppc *cppc)
> u8 db_val_u8 = 0;
> u16 db_val_u16 = 0;
> u32 db_val_u32 = 0;
> +#if __riscv_xlen != 32
> + u64 db_val_u64 = 0;
> +#else
> + u32 db_val_u32_hi = 0;
> +#endif
>
> switch (cppc->fc_db_width) {
> case RPMI_CPPC_FAST_CHANNEL_DB_WIDTH_8:
> @@ -84,14 +89,12 @@ static void rpmi_cppc_fc_db_trigger(struct rpmi_cppc *cppc)
> break;
> case RPMI_CPPC_FAST_CHANNEL_DB_WIDTH_64:
> #if __riscv_xlen != 32
> - u64 db_val_u64 = 0;
> db_val_u64 = readq((void *)cppc->fc_db_addr);
> db_val_u64 = cppc->fc_db_setmask |
> (db_val_u64 & cppc->fc_db_preservemask);
>
> writeq(db_val_u64, (void *)cppc->fc_db_addr);
> #else
> - u32 db_val_u32_hi = 0;
> db_val_u32 = readl((void *)cppc->fc_db_addr);
> db_val_u32_hi = readl((void *)(cppc->fc_db_addr + 4));
>
> --
> 2.43.0
>
>
We may be able to remove db_val_u32_hi. as follows
Regards,
Xiang W
diff --git a/lib/utils/cppc/fdt_cppc_rpmi.c b/lib/utils/cppc/fdt_cppc_rpmi.c
index 26e2d4f6..f1f757ff 100644
--- a/lib/utils/cppc/fdt_cppc_rpmi.c
+++ b/lib/utils/cppc/fdt_cppc_rpmi.c
@@ -59,6 +59,7 @@ static void rpmi_cppc_fc_db_trigger(struct rpmi_cppc *cppc)
u8 db_val_u8 = 0;
u16 db_val_u16 = 0;
u32 db_val_u32 = 0;
+ u64 db_val_u64 = 0;
switch (cppc->fc_db_width) {
case RPMI_CPPC_FAST_CHANNEL_DB_WIDTH_8:
@@ -84,24 +85,20 @@ static void rpmi_cppc_fc_db_trigger(struct rpmi_cppc *cppc)
break;
case RPMI_CPPC_FAST_CHANNEL_DB_WIDTH_64:
#if __riscv_xlen != 32
- u64 db_val_u64 = 0;
db_val_u64 = readq((void *)cppc->fc_db_addr);
db_val_u64 = cppc->fc_db_setmask |
(db_val_u64 & cppc->fc_db_preservemask);
writeq(db_val_u64, (void *)cppc->fc_db_addr);
#else
- u32 db_val_u32_hi = 0;
- db_val_u32 = readl((void *)cppc->fc_db_addr);
- db_val_u32_hi = readl((void *)(cppc->fc_db_addr + 4));
-
- db_val_u32 = (u32)cppc->fc_db_setmask |
- (db_val_u32 & (u32)cppc->fc_db_preservemask);
- db_val_u32_hi = (u32)(cppc->fc_db_setmask >> 32) |
- (db_val_u32 & (u32)(cppc->fc_db_preservemask >> 32));
+ db_val_u64 = readl((void *)(cppc->fc_db_addr + 4));
+ db_val_u64 <<= 32;
+ db_val_u64 |= readl((void *)cppc->fc_db_addr);
+ db_val_u64 = cppc->fc_db_setmask |
+ (db_val_u64 & cppc->fc_db_preservemask);
- writel(db_val_u32, (void *)cppc->fc_db_addr);
- writel(db_val_u32_hi, (void *)(cppc->fc_db_addr + 4));
+ writel(db_val_u64, (void *)cppc->fc_db_addr);
+ writel(db_val_u64 >> 32, (void *)(cppc->fc_db_addr + 4));
#endif
break;
default:
More information about the opensbi
mailing list