Re: [PATCH 1/8] dt-bindings: stm32: add bindings for ML-AHB interconnect
From: Rob Herring
Date: Wed Apr 03 2019 - 21:29:56 EST
On Fri, Mar 29, 2019 at 10:59 AM Fabien DESSENNE
<fabien.dessenne@xxxxxx> wrote:
>
> Hi Rob,
>
> Let me clarify the context and the reason of the proposed approach.
>
> The remoteproc framework deals with 'carveout' memory regions.
> From the remoteproc_core.c:
>
> * Some remote processors will ask us to allocate them physically contiguous
> * memory regions (which we call "carveouts"), and map them to specific
> * device addresses (which are hardcoded in the firmware). They may also have
> * dedicated memory regions internal to the processors, and use them either
> * exclusively or alongside carveouts.
> *
> * They may then ask us to copy objects into specific device addresses (e.g.
> * code/data sections) or expose us certain symbols in other device address
> * (e.g. their trace buffer).
>
> For this, the remoteproc drivers have to register these memory regions
> providing their memory mapping remote processor view / local processor
> view. See rproc_mem_entry_init() and rproc_add_carveout().
>
> An implementation solution consists in declaring the memory mapping inside
> the remoteproc driver. (Ex: imx_rproc_att_imx7d[] from imx_rproc.c)
>
> For the stm32 rproc driver that we are introducing, we would like to have
> something more flexible than hardcoded values.
I need an explanation that is not in terms of remoteproc. That's a Linux thing.
> One reason for this, is that some memory parts can be accessed through
> different 2 bus port, with different addresses and access speed, and we
> would like to let the user customize this.
>
> Using DeviceTree "ranges" seems to fit with these requirements.
'ranges' is strictly about the cpu's (running Linux) view of the
system. 'dma-ranges' is for the device's (the remoteproc) view of
memory. You simply cannot redefine them for your own custom use.
If the cpu has 2 views of the same memory, then you can use ranges to
describe that.
> If you think that this is not the right approach, please let me know if you
> think about something better.
>
> See also below my answer to your specific remarks
>
> BR
>
> On 28/03/2019 12:07 AM, Rob Herring wrote:
>
> > On Tue, Mar 05, 2019 at 03:24:02PM +0100, Fabien Dessenne wrote:
> >> Document the ML-AHB interconnect for stm32 SoCs.
> >>
> >> Signed-off-by: Fabien Dessenne <fabien.dessenne@xxxxxx>
> >> ---
> >> .../devicetree/bindings/arm/stm32/mlahb.txt | 30 ++++++++++++++++++++++
> >> 1 file changed, 30 insertions(+)
> >> create mode 100644 Documentation/devicetree/bindings/arm/stm32/mlahb.txt
> >>
> >> diff --git a/Documentation/devicetree/bindings/arm/stm32/mlahb.txt b/Documentation/devicetree/bindings/arm/stm32/mlahb.txt
> >> new file mode 100644
> >> index 0000000..880cb38
> >> --- /dev/null
> >> +++ b/Documentation/devicetree/bindings/arm/stm32/mlahb.txt
> >> @@ -0,0 +1,30 @@
> >> +ML-AHB interconnect bindings
> >> +
> >> +These bindings describe the STM32 SoCs ML-AHB interconnect bus which connects
> >> +a Cortex-M subsystem with dedicated memories.
> >> +
> >> +Required properties:
> >> +- compatible: should be "simple-bus"
> > A binding for simple-bus was the first thing that looked odd.
>
> Since we want to use "ranges" (or "dma-ranges"), we need to define a parent-bus.
> This bus has nothing specific, so it is a "simple-bus"
Okay, fair enough.
> >> +- ranges: describes memory addresses translation between the local CPU and the
> >> + remote Cortex-M processor. Each memory region, is declared with 3
> >> + parameters:
> >> + - param 1: device base address (Cortex-M processor address)
> >> + - param 2: physical base address (local CPU address)
> >> + - param 3: size of the memory region.
> > Given that the driver is parsing ranges itself, this looks like abuse of
> > ranges.
>
> That's correct. As explained above, we need to provide the remoteproc framework
> with carveout mappings.
>
> >
> > What exactly is address 0 supposed to be here? If it is the M4's view of
> > memory, then dma-ranges is what you want to use here.
>
> "dma-ranges" is probably more appropriated here. But the driver still needs to
> parse this property.
That is more acceptable assuming what's in dma-ranges matches the
standard definition.
Rob