diff mbox series

riscv: Enable CMA support

Message ID 20201031060112.151854-1-wangkefeng.wang@huawei.com (mailing list archive)
State New, archived
Headers show
Series riscv: Enable CMA support | expand

Commit Message

Kefeng Wang Oct. 31, 2020, 6:01 a.m. UTC
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@huawei.com>
---
 arch/riscv/mm/init.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Kefeng Wang Nov. 12, 2020, 8:55 a.m. UTC | #1
Any comments, kindly ping...

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@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();
>   }
Palmer Dabbelt Nov. 21, 2020, 2:03 a.m. UTC | #2
On Thu, 12 Nov 2020 00:55:30 PST (-0800), wangkefeng.wang@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@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();
>>   }
Kefeng Wang Nov. 21, 2020, 5:35 a.m. UTC | #3
On 2020/11/21 10:03, Palmer Dabbelt wrote:
> On Thu, 12 Nov 2020 00:55:30 PST (-0800), wangkefeng.wang@huawei.com 
> wrote:
>> Any comments, kindly ping...
>
> Sorry, I must have missed this one.  It's on for-next.  Thanks!

and could you take a look at the two patches, thanks ;)

https://patchwork.kernel.org/project/linux-riscv/patch/20201111115216.31447-1-wangkefeng.wang@huawei.com/

https://patchwork.kernel.org/project/linux-riscv/patch/20201116081238.44223-1-wangkefeng.wang@huawei.com/
diff mbox series

Patch

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();
 }