|
3 | 3 | * Copyright (C) 2017 SiFive
|
4 | 4 | */
|
5 | 5 |
|
| 6 | +#include <linux/acpi.h> |
6 | 7 | #include <linux/of.h>
|
| 8 | +#include <asm/acpi.h> |
7 | 9 | #include <asm/cacheflush.h>
|
8 | 10 |
|
9 | 11 | #ifdef CONFIG_SMP
|
@@ -124,13 +126,24 @@ void __init riscv_init_cbo_blocksizes(void)
|
124 | 126 | unsigned long cbom_hartid, cboz_hartid;
|
125 | 127 | u32 cbom_block_size = 0, cboz_block_size = 0;
|
126 | 128 | struct device_node *node;
|
| 129 | + struct acpi_table_header *rhct; |
| 130 | + acpi_status status; |
| 131 | + |
| 132 | + if (acpi_disabled) { |
| 133 | + for_each_of_cpu_node(node) { |
| 134 | + /* set block-size for cbom and/or cboz extension if available */ |
| 135 | + cbo_get_block_size(node, "riscv,cbom-block-size", |
| 136 | + &cbom_block_size, &cbom_hartid); |
| 137 | + cbo_get_block_size(node, "riscv,cboz-block-size", |
| 138 | + &cboz_block_size, &cboz_hartid); |
| 139 | + } |
| 140 | + } else { |
| 141 | + status = acpi_get_table(ACPI_SIG_RHCT, 0, &rhct); |
| 142 | + if (ACPI_FAILURE(status)) |
| 143 | + return; |
127 | 144 |
|
128 |
| - for_each_of_cpu_node(node) { |
129 |
| - /* set block-size for cbom and/or cboz extension if available */ |
130 |
| - cbo_get_block_size(node, "riscv,cbom-block-size", |
131 |
| - &cbom_block_size, &cbom_hartid); |
132 |
| - cbo_get_block_size(node, "riscv,cboz-block-size", |
133 |
| - &cboz_block_size, &cboz_hartid); |
| 145 | + acpi_get_cbo_block_size(rhct, &cbom_block_size, &cboz_block_size, NULL); |
| 146 | + acpi_put_table((struct acpi_table_header *)rhct); |
134 | 147 | }
|
135 | 148 |
|
136 | 149 | if (cbom_block_size)
|
|
0 commit comments