Re: [PATCH 16/21] dt-bindings: reserved-memory: introduce designated-movable-block
From: Krzysztof Kozlowski
Date: Wed Sep 21 2022 - 02:35:57 EST
On 21/09/2022 02:14, Doug Berger wrote:
> On 9/19/2022 4:03 AM, Krzysztof Kozlowski wrote:
>> On 19/09/2022 01:12, Doug Berger wrote:
>>> On 9/18/2022 3:31 AM, Krzysztof Kozlowski wrote:
>>>> On 14/09/2022 18:13, Doug Berger wrote:
>>>>> On 9/14/2022 7:55 AM, Rob Herring wrote:
>>>>>> On Tue, Sep 13, 2022 at 12:55:03PM -0700, Doug Berger wrote:
>>>>>>> Introduce designated-movable-block.yaml to document the
>>>>>>> devicetree binding for Designated Movable Block children of the
>>>>>>> reserved-memory node.
>>>>>>
>>>>>> What is a Designated Movable Block? This patch needs to stand on its
>>>>>> own.
>>>>> As noted in my reply to your [PATCH 00/21] comment, my intention in
>>>>> submitting the entire patch set (and specifically PATCH 00/21]) was to
>>>>> communicate this context. Now that I believe I understand that only this
>>>>> patch should have been submitted to the devicetree-spec mailing list, I
>>>>> will strive harder to make it more self contained.
>>>>
>>>> The submission of entire thread was ok. What is missing is the
>>>> explanation in this commit. This commit must be self-explanatory (e.g.
>>>> in explaining "Why are you doing it?"), not rely on other commits for
>>>> such explanation.
>>>>
>>>>>
>>>>>>
>>>>>> Why does this belong or need to be in DT?
>>>>> While my preferred method of declaring Designated Movable Blocks is
>>>>> through the movablecore kernel parameter, I can conceive that others may
>>>>> wish to take advantage of the reserved-memory DT nodes. In particular,
>>>>> it has the advantage that a device can claim ownership of the
>>>>> reserved-memory via device tree, which is something that has yet to be
>>>>> implemented for DMBs defined with movablecore.
>>>>
>>>> Rephrasing the question: why OS memory layout and OS behavior is a
>>>> property of hardware (DTS)?
>>> I would say the premise is fundamentally the same as the existing
>>> reserved-memory child node.
>>
>> I don't think it is fundamentally the same.
>>
>> The existing reserved-memory node describes memory used by hardware - by
>> other devices. The OS way of handling this memory - movable, reclaimable
>> etc - is not part of it.
>>
>> So no, it is not the same.
>>
>>>
>>> I've been rethinking how this should be specified. I am now thinking
>>> that it may be better to introduce a new Reserved Memory property that
>>> serves as a modifier to the 'reusable' property. The 'reusable' property
>>> allows the OS to use memory that has been reserved for a device and
>>> therefore requires the device driver to reclaim the memory prior to its
>>> use. However, an OS may have multiple ways of implementing such reuse
>>> and reclamation.
>>
>> ... and I repeat the question - why OS way of implementing reuse and
>> reclamation is relevant to DT?
>>
>>> I am considering introducing the vendor specific 'linux,dmb' property
>>> that is dependent on the 'reusable' property to allow both the OS and
>>> the device driver to identify the method used by the Linux OS to support
>>> reuse and reclamation of the reserved-memory child node.
>>
>> Sure, but why? Why OS and Linux driver specific pieces should be in DT?
>>> Such a property would remove any need for new compatible strings to the
>>> device tree. Does that approach seem reasonable to you?
>>
>> No, because you did not explain original question. At all.
> I apologize if I have somehow offended you, but please recognize that my
> apparent inability to answer your question does not come from an
> unwillingness to do so.
>
> I believe an example of the reserved-memory node being used the way you
> indicate (though there are other uses) can be expressed with device tree
> nodes like these:
>
> reserved-memory {
> #address-cells = <0x1>;
> #size-cells = <0x1>;
> ranges;
>
> multimedia_reserved: multimedia@80000000 {
> reg = <0x80000000 0x10000000>;
> };
> };
>
> decoder@8012000 {
> memory-region = <&multimedia_reserved>;
> /* ... */
> };
>
> Here a 256MB chunk of memory is reserved for use by a hardware decoder
> as part of rendering a video stream. In this case the memory is reserved
> for the exclusive use of the decoder device and its associated device
> driver.
>
> The Devicetree Specification includes a property named 'reusable' that
> could be applied to the multimedia node to allow the OS to "use the
> memory in this region with the limitation that the device driver(s)
> owning the region need to be able to reclaim it back".
Indeed, there is such.... and should be used instead. :)
> This is a good
> idea, because this memory could probably be put to good use when the
> decoder is not active. Unfortunately, the methods for reusing this
> memory are not defined for Linux so the multimedia reserved memory would
> not be reused even though the devicetree indicates that it is allowed.
Then rather implementation has to be changed, not Devicetree bindings.
>
> The notion behind this commit was to introduce the
> 'designated-movable-block' compatible string that could be added to the
> multimedia node to allow the Client Program (i.e. Linux) to select a
> device driver that knows how to reclaim reserved memory back from the OS
> when it is needed by the decoder device and release it back to the OS
> when the decoder no longer needs it. In this way, the purpose of the
> multimedia node remains the same (i.e. to reserve memory for use by a
> device), but a new compatible string is defined to allow for selection
> of an appropriate device driver and allow successful reuse of the memory
> for the benefit of the system.
We don't need a new compatible for it but use that existing property.
>
> From Rob's feedback it is clear that 'designated-movable-block' is not
> an appropriate name, but maybe 'linux,dmb' might have been. However, it
> would be more flexible if a 'linux,dmb' property could be introduced as
> a modifier to the existing 'reusable' property to provide a general
> mechanism for clarifying how 'reusable' should be supported by the
> Client Software and its device drivers.
>
> Such a property is not directly relevant to hardware, but the devicetree
> is not wholly concerned with hardware. Reserved memory node children
> include support for 'linux,cma-default' and 'linux,dma-default'
> properties that signal behavioral intent to the Linux OS. Some aspects
> of the devicetree (e.g. the /chosen node and 'reusable' property) are
> for the benefit of the Client Program.
Fair enough, although there is difference between generic property for
reusable/reclaimable memory and a property describing one of Linux
memory-management zones.
Best regards,
Krzysztof