[PATCH] riscv: Enable CMA support

Palmer Dabbelt palmer at dabbelt.com
Fri Nov 20 21:03:11 EST 2020


On Thu, 12 Nov 2020 00:55:30 PST (-0800), wangkefeng.wang at huawei.com wrote:
> Any comments, kindly ping...

Sorry, I must have missed this one.  It's on for-next.  Thanks!

>
> On 2020/10/31 14:01, Kefeng Wang wrote:
>> riscv has selected HAVE_DMA_CONTIGUOUS, but don't call
>> dma_contiguous_reserve(). let's enable CMA as expect.
>>
>> Signed-off-by: Kefeng Wang <wangkefeng.wang at huawei.com>
>> ---
>>   arch/riscv/mm/init.c | 8 ++++++--
>>   1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
>> index ea933b789a88..87ae4b99442a 100644
>> --- a/arch/riscv/mm/init.c
>> +++ b/arch/riscv/mm/init.c
>> @@ -13,6 +13,7 @@
>>   #include <linux/of_fdt.h>
>>   #include <linux/libfdt.h>
>>   #include <linux/set_memory.h>
>> +#include <linux/dma-map-ops.h>
>>
>>   #include <asm/fixmap.h>
>>   #include <asm/tlbflush.h>
>> @@ -41,13 +42,14 @@ struct pt_alloc_ops {
>>   #endif
>>   };
>>
>> +static phys_addr_t dma32_phys_limit __ro_after_init;
>> +
>>   static void __init zone_sizes_init(void)
>>   {
>>   	unsigned long max_zone_pfns[MAX_NR_ZONES] = { 0, };
>>
>>   #ifdef CONFIG_ZONE_DMA32
>> -	max_zone_pfns[ZONE_DMA32] = PFN_DOWN(min(4UL * SZ_1G,
>> -			(unsigned long) PFN_PHYS(max_low_pfn)));
>> +	max_zone_pfns[ZONE_DMA32] = PFN_DOWN(dma32_phys_limit);
>>   #endif
>>   	max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
>>
>> @@ -185,6 +187,7 @@ void __init setup_bootmem(void)
>>
>>   	max_pfn = PFN_DOWN(memblock_end_of_DRAM());
>>   	max_low_pfn = max_pfn;
>> +	dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
>>   	set_max_mapnr(max_low_pfn);
>>
>>   #ifdef CONFIG_BLK_DEV_INITRD
>> @@ -198,6 +201,7 @@ void __init setup_bootmem(void)
>>   	memblock_reserve(dtb_early_pa, fdt_totalsize(dtb_early_va));
>>
>>   	early_init_fdt_scan_reserved_mem();
>> +	dma_contiguous_reserve(dma32_phys_limit);
>>   	memblock_allow_resize();
>>   	memblock_dump_all();
>>   }



More information about the linux-riscv mailing list