2021-01-21 18:00:07

by Minchan Kim

[permalink] [raw]
Subject: [PATCH v4 3/4] dt-bindings: reserved-memory: Make DMA-BUF CMA heap DT-configurable

From: Hyesoo Yu <[email protected]>

Document devicetree binding for chunk cma heap on dma heap framework.

The DMA chunk heap supports the bulk allocation of higher order pages.

The chunk heap's allocator allocates from the CMA area. It is optimized
to perform bulk allocation of higher order pages in an efficient manner.
For this purpose, the heap needs an exclusive CMA area that will only be
used for allocation by the heap. This is the reason why we need to use
the DT to create and configure a reserved memory region for use by the
chunk CMA heap driver. Since all allocation from DMA-BUF heaps happen
from the user-space, there is no other appropriate device-driver that
we can use to register the chunk CMA heap and configure the reserved
memory region for its use.

Signed-off-by: Hyesoo Yu <[email protected]>
Signed-off-by: Minchan Kim <[email protected]>
Signed-off-by: Hridya Valsaraju <[email protected]>
---
.../reserved-memory/dma_heap_chunk.yaml | 56 +++++++++++++++++++
1 file changed, 56 insertions(+)
create mode 100644 Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml

diff --git a/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
new file mode 100644
index 000000000000..00db0ae6af61
--- /dev/null
+++ b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
@@ -0,0 +1,56 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/reserved-memory/dma_heap_chunk.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Device tree binding for chunk heap on DMA HEAP FRAMEWORK
+
+description: |
+ The DMA chunk heap is backed by the Contiguous Memory Allocator (CMA) and
+ supports bulk allocation of fixed size pages.
+
+maintainers:
+ - Hyesoo Yu <[email protected]>
+ - John Stultz <[email protected]>
+ - Minchan Kim <[email protected]>
+ - Hridya Valsaraju<[email protected]>
+
+
+properties:
+ compatible:
+ enum:
+ - dma_heap,chunk
+
+ chunk-order:
+ description: |
+ order of pages that will get allocated from the chunk DMA heap.
+ maxItems: 1
+
+ size:
+ maxItems: 1
+
+ alignment:
+ maxItems: 1
+
+required:
+ - compatible
+ - size
+ - alignment
+ - chunk-order
+
+additionalProperties: false
+
+examples:
+ - |
+ reserved-memory {
+ #address-cells = <2>;
+ #size-cells = <1>;
+
+ chunk_memory: chunk_memory {
+ compatible = "dma_heap,chunk";
+ size = <0x3000000>;
+ alignment = <0x0 0x00010000>;
+ chunk-order = <4>;
+ };
+ };
--
2.30.0.296.g2bfb1c46d8-goog


2021-01-27 05:58:18

by John Stultz

[permalink] [raw]
Subject: Re: [PATCH v4 3/4] dt-bindings: reserved-memory: Make DMA-BUF CMA heap DT-configurable

On Thu, Jan 21, 2021 at 9:55 AM Minchan Kim <[email protected]> wrote:
> .../reserved-memory/dma_heap_chunk.yaml | 56 +++++++++++++++++++
> 1 file changed, 56 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
>
> diff --git a/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
> new file mode 100644
> index 000000000000..00db0ae6af61
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
> @@ -0,0 +1,56 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/reserved-memory/dma_heap_chunk.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Device tree binding for chunk heap on DMA HEAP FRAMEWORK
> +
> +description: |
> + The DMA chunk heap is backed by the Contiguous Memory Allocator (CMA) and
> + supports bulk allocation of fixed size pages.
> +
> +maintainers:
> + - Hyesoo Yu <[email protected]>
> + - John Stultz <[email protected]>
> + - Minchan Kim <[email protected]>
> + - Hridya Valsaraju<[email protected]>
> +
> +
> +properties:
> + compatible:
> + enum:
> + - dma_heap,chunk
> +
> + chunk-order:
> + description: |
> + order of pages that will get allocated from the chunk DMA heap.
> + maxItems: 1
> +
> + size:
> + maxItems: 1
> +
> + alignment:
> + maxItems: 1
> +
> +required:
> + - compatible
> + - size
> + - alignment
> + - chunk-order
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + reserved-memory {
> + #address-cells = <2>;
> + #size-cells = <1>;
> +
> + chunk_memory: chunk_memory {
> + compatible = "dma_heap,chunk";
> + size = <0x3000000>;

Hey Minchan,
Looking closer here, would it make more sense to document the "reg =
<>" parameter here as well instead of just "size = <>"?

That way the address of the region could be explicitly specified (for
instance, to ensure the CMA region created is 32bit addressable). And
more practically, trying to satisfy the base address alignment checks
in the final patch when its set dynamically may require a fair amount
of luck - I couldn't manage it in my own testing on the hikey960 w/o
resorting to reg= :)

It does look like the RESERVEDMEM_OF_DECLARE() logic already supports
this, so it's likely just a matter of documenting it here?

thanks
-john

2021-01-28 01:39:44

by Hridya Valsaraju

[permalink] [raw]
Subject: Re: [PATCH v4 3/4] dt-bindings: reserved-memory: Make DMA-BUF CMA heap DT-configurable

On Mon, Jan 25, 2021 at 11:07 PM John Stultz <[email protected]> wrote:
>
> On Thu, Jan 21, 2021 at 9:55 AM Minchan Kim <[email protected]> wrote:
> > .../reserved-memory/dma_heap_chunk.yaml | 56 +++++++++++++++++++
> > 1 file changed, 56 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
> > new file mode 100644
> > index 000000000000..00db0ae6af61
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
> > @@ -0,0 +1,56 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/reserved-memory/dma_heap_chunk.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Device tree binding for chunk heap on DMA HEAP FRAMEWORK
> > +
> > +description: |
> > + The DMA chunk heap is backed by the Contiguous Memory Allocator (CMA) and
> > + supports bulk allocation of fixed size pages.
> > +
> > +maintainers:
> > + - Hyesoo Yu <[email protected]>
> > + - John Stultz <[email protected]>
> > + - Minchan Kim <[email protected]>
> > + - Hridya Valsaraju<[email protected]>
> > +
> > +
> > +properties:
> > + compatible:
> > + enum:
> > + - dma_heap,chunk
> > +
> > + chunk-order:
> > + description: |
> > + order of pages that will get allocated from the chunk DMA heap.
> > + maxItems: 1
> > +
> > + size:
> > + maxItems: 1
> > +
> > + alignment:
> > + maxItems: 1
> > +
> > +required:
> > + - compatible
> > + - size
> > + - alignment
> > + - chunk-order
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > + - |
> > + reserved-memory {
> > + #address-cells = <2>;
> > + #size-cells = <1>;
> > +
> > + chunk_memory: chunk_memory {
> > + compatible = "dma_heap,chunk";
> > + size = <0x3000000>;
>
> Hey Minchan,
> Looking closer here, would it make more sense to document the "reg =
> <>" parameter here as well instead of just "size = <>"?
>
> That way the address of the region could be explicitly specified (for
> instance, to ensure the CMA region created is 32bit addressable). And
> more practically, trying to satisfy the base address alignment checks
> in the final patch when its set dynamically may require a fair amount
> of luck - I couldn't manage it in my own testing on the hikey960 w/o
> resorting to reg= :)
>
> It does look like the RESERVEDMEM_OF_DECLARE() logic already supports
> this, so it's likely just a matter of documenting it here?

Thank you John, yes, that makes sense. We will add the 'reg' parameter
as well when we send out the next version.

Regards,
Hridya

>
> thanks
> -john

2021-02-06 04:26:45

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 3/4] dt-bindings: reserved-memory: Make DMA-BUF CMA heap DT-configurable

On Thu, Jan 21, 2021 at 09:55:01AM -0800, Minchan Kim wrote:
> From: Hyesoo Yu <[email protected]>
>
> Document devicetree binding for chunk cma heap on dma heap framework.
>
> The DMA chunk heap supports the bulk allocation of higher order pages.
>
> The chunk heap's allocator allocates from the CMA area. It is optimized
> to perform bulk allocation of higher order pages in an efficient manner.
> For this purpose, the heap needs an exclusive CMA area that will only be
> used for allocation by the heap. This is the reason why we need to use
> the DT to create and configure a reserved memory region for use by the
> chunk CMA heap driver. Since all allocation from DMA-BUF heaps happen
> from the user-space, there is no other appropriate device-driver that
> we can use to register the chunk CMA heap and configure the reserved
> memory region for its use.

LWN tells me we don't need carve outs any more[1]: "CMA now relies on
compaction and no longer uses a carved-out memory region."

So why do we need this?

[1] https://lwn.net/Articles/839216/

>
> Signed-off-by: Hyesoo Yu <[email protected]>
> Signed-off-by: Minchan Kim <[email protected]>
> Signed-off-by: Hridya Valsaraju <[email protected]>
> ---
> .../reserved-memory/dma_heap_chunk.yaml | 56 +++++++++++++++++++
> 1 file changed, 56 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
>
> diff --git a/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
> new file mode 100644
> index 000000000000..00db0ae6af61
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/reserved-memory/dma_heap_chunk.yaml
> @@ -0,0 +1,56 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/reserved-memory/dma_heap_chunk.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Device tree binding for chunk heap on DMA HEAP FRAMEWORK
> +
> +description: |
> + The DMA chunk heap is backed by the Contiguous Memory Allocator (CMA) and
> + supports bulk allocation of fixed size pages.
> +
> +maintainers:
> + - Hyesoo Yu <[email protected]>
> + - John Stultz <[email protected]>
> + - Minchan Kim <[email protected]>
> + - Hridya Valsaraju<[email protected]>
> +
> +
> +properties:
> + compatible:
> + enum:
> + - dma_heap,chunk

Convention is vendor,thing and 'dma_heap' is not a vendor. Also, '-' is
preferred over '_'.

> +
> + chunk-order:
> + description: |
> + order of pages that will get allocated from the chunk DMA heap.

Page size depends on Linux configuration. And 'order' is very much a
Linuxism.

> + maxItems: 1
> +
> + size:
> + maxItems: 1
> +
> + alignment:
> + maxItems: 1
> +
> +required:
> + - compatible
> + - size
> + - alignment
> + - chunk-order
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + reserved-memory {
> + #address-cells = <2>;
> + #size-cells = <1>;
> +
> + chunk_memory: chunk_memory {
> + compatible = "dma_heap,chunk";
> + size = <0x3000000>;
> + alignment = <0x0 0x00010000>;
> + chunk-order = <4>;
> + };
> + };
> --
> 2.30.0.296.g2bfb1c46d8-goog
>