|
12 | 12 | #include <linux/of_device.h> |
13 | 13 | #include <asm/cacheflush.h> |
14 | 14 |
|
15 | | -static unsigned int riscv_cbom_block_size = L1_CACHE_BYTES; |
| 15 | +unsigned int riscv_cbom_block_size; |
16 | 16 | static bool noncoherent_supported; |
17 | 17 |
|
18 | 18 | void arch_sync_dma_for_device(phys_addr_t paddr, size_t size, |
@@ -79,38 +79,41 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, |
79 | 79 | void riscv_init_cbom_blocksize(void) |
80 | 80 | { |
81 | 81 | struct device_node *node; |
| 82 | + unsigned long cbom_hartid; |
| 83 | + u32 val, probed_block_size; |
82 | 84 | int ret; |
83 | | - u32 val; |
84 | 85 |
|
| 86 | + probed_block_size = 0; |
85 | 87 | for_each_of_cpu_node(node) { |
86 | 88 | unsigned long hartid; |
87 | | - int cbom_hartid; |
88 | 89 |
|
89 | 90 | ret = riscv_of_processor_hartid(node, &hartid); |
90 | 91 | if (ret) |
91 | 92 | continue; |
92 | 93 |
|
93 | | - if (hartid < 0) |
94 | | - continue; |
95 | | - |
96 | 94 | /* set block-size for cbom extension if available */ |
97 | 95 | ret = of_property_read_u32(node, "riscv,cbom-block-size", &val); |
98 | 96 | if (ret) |
99 | 97 | continue; |
100 | 98 |
|
101 | | - if (!riscv_cbom_block_size) { |
102 | | - riscv_cbom_block_size = val; |
| 99 | + if (!probed_block_size) { |
| 100 | + probed_block_size = val; |
103 | 101 | cbom_hartid = hartid; |
104 | 102 | } else { |
105 | | - if (riscv_cbom_block_size != val) |
106 | | - pr_warn("cbom-block-size mismatched between harts %d and %lu\n", |
| 103 | + if (probed_block_size != val) |
| 104 | + pr_warn("cbom-block-size mismatched between harts %lu and %lu\n", |
107 | 105 | cbom_hartid, hartid); |
108 | 106 | } |
109 | 107 | } |
| 108 | + |
| 109 | + if (probed_block_size) |
| 110 | + riscv_cbom_block_size = probed_block_size; |
110 | 111 | } |
111 | 112 | #endif |
112 | 113 |
|
113 | 114 | void riscv_noncoherent_supported(void) |
114 | 115 | { |
| 116 | + WARN(!riscv_cbom_block_size, |
| 117 | + "Non-coherent DMA support enabled without a block size\n"); |
115 | 118 | noncoherent_supported = true; |
116 | 119 | } |
0 commit comments