[PATCH 1/1] riscv: set ARCH_DMA_DEFAULT_COHERENT if RISCV_DMA_NONCOHERENT is not set

Maxim Kochetkov fido_max at inbox.ru
Fri Dec 22 07:53:03 PST 2023



On 22.12.2023 18:45, Jiaxun Yang wrote:
> 
> 
> 在 2023/12/22 15:38, Maxim Kochetkov 写道:
>>
>>
>> On 22.12.2023 17:54, Conor Dooley wrote:
>>
>>>> etc..) do not have this feature. These devices will use value from
>>>> device_initialize(). And we have no possibility to change
>>>> dma_default_coherent value by disabling ARCH_DMA_DEFAULT_COHERENT.
>>>> Moreover, changing dma_default_coherent from false to true may cause
>>>> regression for other devices.
>>>
>>> How can there be a regression when dma has been coherent by default for
>>> the RISC-V kernel from day 1?
>>
>> Before ARCH_DMA_DEFAULT_COHERENT patch dma_default_coherent was used 
>> unassigned as "false" in device_initialize():
>> ..........
>> #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
>>     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \
>>     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
>>     dev->dma_coherent = dma_default_coherent;
>> #endif
>> ..........
>> And now it becomes "true". It may change behavior of other non-DT 
>> drivers.
> I don't see any problem here, default is default.
> Actually leaving those device with  dev->dma_coherent = false is risky, 
> because
> we can't guarantee underlying cache flush functions are here.
> 
> If a non-dt device do need to override it, it should be done in 
> arch_setup_dma_ops.

But arch_setup_dma_ops() is called only from of_dma_configure_id() and 
acpi_dma_configure_id(). So it works only for DT and ACPI devices. What 
about platform_device?



More information about the linux-riscv mailing list