aboutsummaryrefslogtreecommitdiff
path: root/lib/utils/cppc/fdt_cppc_rpmi.c
diff options
context:
space:
mode:
authorXiang W <wxjstz@126.com>2024-12-15 19:25:44 +0800
committerAnup Patel <anup@brainfault.org>2024-12-19 11:02:30 +0530
commitf0693016547837ba4bca2d5891f5b4ec65667ee1 (patch)
treeef93522b8eb2500c94adeff754a344d55668371c /lib/utils/cppc/fdt_cppc_rpmi.c
parent51dbc57fc7f0d6da5e43fac8a49f63fb110d527b (diff)
downloadopensbi-f0693016547837ba4bca2d5891f5b4ec65667ee1.zip
opensbi-f0693016547837ba4bca2d5891f5b4ec65667ee1.tar.gz
opensbi-f0693016547837ba4bca2d5891f5b4ec65667ee1.tar.bz2
lib: utils: Improve rpmi_cppc_fc_db_trigger() for RV32
Improve 64-bit operation under rv32 and remove db_val_u32_hi in rpmi_cppc_fc_db_trigger(). Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'lib/utils/cppc/fdt_cppc_rpmi.c')
-rw-r--r--lib/utils/cppc/fdt_cppc_rpmi.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/lib/utils/cppc/fdt_cppc_rpmi.c b/lib/utils/cppc/fdt_cppc_rpmi.c
index b678990..4946ed1 100644
--- a/lib/utils/cppc/fdt_cppc_rpmi.c
+++ b/lib/utils/cppc/fdt_cppc_rpmi.c
@@ -59,11 +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;
-#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:
@@ -95,16 +91,13 @@ static void rpmi_cppc_fc_db_trigger(struct rpmi_cppc *cppc)
writeq(db_val_u64, (void *)cppc->fc_db_addr);
#else
- 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));
-
- writel(db_val_u32, (void *)cppc->fc_db_addr);
- writel(db_val_u32_hi, (void *)(cppc->fc_db_addr + 4));
+ 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_u64, (void *)cppc->fc_db_addr);
+ writel(db_val_u64 >> 32, (void *)(cppc->fc_db_addr + 4));
#endif
break;
default: