Skip to content

Commit 5f51c7c

Browse files
committed
ACPI: CPPC: Fix up I/O port access in cpc_read()
The code as currently implemented does not work on big endian systems, so fix it up. Fixes: a2c8f92 ("ACPI: CPPC: Implement support for SystemIO registers") Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Suggested-by: Dan Carpenter <dan.carpenter@oracle.com> Link: https://lore.kernel.org/linux-acpi/20220111092928.GA24968@kili/ Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Huang Rui <ray.huang@amd.com>
1 parent b35b6d4 commit 5f51c7c

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

drivers/acpi/cppc_acpi.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -929,16 +929,18 @@ static int cpc_read(int cpu, struct cpc_register_resource *reg_res, u64 *val)
929929

930930
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
931931
u32 width = 8 << (reg->access_width - 1);
932+
u32 val_u32;
932933
acpi_status status;
933934

934935
status = acpi_os_read_port((acpi_io_address)reg->address,
935-
(u32 *)val, width);
936+
&val_u32, width);
936937
if (ACPI_FAILURE(status)) {
937938
pr_debug("Error: Failed to read SystemIO port %llx\n",
938939
reg->address);
939940
return -EFAULT;
940941
}
941942

943+
*val = val_u32;
942944
return 0;
943945
} else if (reg->space_id == ACPI_ADR_SPACE_PLATFORM_COMM && pcc_ss_id >= 0)
944946
vaddr = GET_PCC_VADDR(reg->address, pcc_ss_id);

0 commit comments

Comments
 (0)