From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
To: Krzysztof Kozlowski <krzk@kernel.org>
Cc: mathieu.poirier@linaro.org, Adam.Johnston@arm.com,
Hugues.KambaMpiana@arm.com, Drew.Reed@arm.com,
andersson@kernel.org, conor+dt@kernel.org,
devicetree@vger.kernel.org, krzysztof.kozlowski+dt@linaro.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-remoteproc@vger.kernel.org,
liviu.dudau@arm.com, lpieralisi@kernel.org, robh@kernel.org,
sudeep.holla@arm.com, robin.murphy@arm.com
Subject: Re: [PATCH v2 1/5] dt-bindings: remoteproc: sse710: Add the External Systems remote processors
Date: Mon, 23 Sep 2024 12:49:45 +0100 [thread overview]
Message-ID: <20240923114945.GA133670@e130802.arm.com> (raw)
In-Reply-To: <e37a0542-d405-4d15-84d2-4c7b1385d3ef@kernel.org>
Hi Krzysztof,
> >>>>>>>>> + '#extsys-id':
> >>>>>>>>
> >>>>>>>> '#' is not correct for sure, that's not a cell specifier.
> >>>>>>>>
> >>>>>>>> But anyway, we do not accept in general instance IDs.
> >>>>>>>
> >>>>>>> I'm happy to replace the instance ID with another solution.
> >>>>>>> In our case the remoteproc instance does not have a base address
> >>>>>>> to use. So, we can't put remoteproc@address
> >>>>>>>
> >>>>>>> What do you recommend in this case please ?
> >>>>>>
> >>>>>> Waiting one month to respond is a great way to drop all context from my
> >>>>>> memory. The emails are not even available for me - gone from inbox.
> >>>>>>
> >>>>>> Bus addressing could note it. Or you have different devices, so
> >>>>>> different compatibles. Tricky to say, because you did not describe the
> >>>>>> hardware really and it's one month later...
> >>>>>>
> >>>>>
> >>>>> Sorry for waiting. I was in holidays.
> >>>>>
> >>>>> I'll add more documentation about the external system for more clarity [1].
> >>>>>
> >>>>> Basically, Linux runs on the Cortex-A35. The External system is a
> >>>>> Cortex-M core. The Cortex-A35 can not access the memory of the Cortex-M.
> >>>>> It can only control Cortex-M core using the reset control and status registers mapped
> >>>>> in the memory space of the Cortex-A35.
> >>>>
> >>>> That's pretty standard.
> >>>>
> >>>> It does not explain me why bus addressing or different compatible are
> >>>> not sufficient here.
> >>>
> >>> Using an instance ID was a design choice.
> >>> I'm happy to replace it with the use of compatible and match data (WIP).
> >>>
> >>> The match data will be pointing to a data structure containing the right offsets
> >>> to be used with regmap APIs.
> >>>
> >>> syscon node is used to represent the Host Base System Control register area [1]
> >>> where the external system reset registers are mapped (EXT_SYS*).
> >>>
> >>> The nodes will look like this:
> >>>
> >>> syscon@1a010000 {
> >>> compatible = "arm,sse710-host-base-sysctrl", "simple-mfd", "syscon";
> >>> reg = <0x1a010000 0x1000>;
> >>>
> >>> #address-cells = <1>;
> >>> #size-cells = <1>;
> >>>
> >>> remoteproc@310 {
> >>> compatible = "arm,sse710-extsys0";
> >>> reg = <0x310 4>;
> >>
> >> Uh, why do you create device nodes for one word? This really suggests it
> >> is part of parent device and your split is artificial.
> >
> > The external system registers (described by the remoteproc node) are part
> > of the parent device (the Host Base System Control register area) described
> > by syscon.
> >
> > In case of the external system 0 , its registers are located at offset 0x310
> > (physical address: 0x1a010310)
> >
> > When instantiating the devices without @address, the DTC compiler
> > detects 2 nodes with the same name (remoteproc).
>
> There should be no children at all. DT is not for instantiating your
> drivers. I claim you have only one device and that's
> arm,sse710-host-base-sysctrl. If you create child node for one word,
> that's not a device.
The Host Base System Control [3] is the big block containing various functionalities (MMIO registers).
Among the functionalities, the two remote cores registers (aka External system 0 and 1).
The remote cores have two registers each.
1/ In the v1 patchset, a valid point was made by the community:
Right now it seems somewhat tenuous to describe two consecutive
32-bit registers as separate "reg" entries, but *maybe* it's OK if that's
all there ever is. However if it's actually going to end up needing several
more additional MMIO and/or memory regions for other functionality, then
describing each register and location individually is liable to get
unmanageable really fast, and a higher-level functional grouping (e.g. these
reset-related registers together as a single 8-byte region) would likely be
a better design.
The Exernal system registers are part of a bigger block with other functionality in place.
MFD/syscon might be better way to use these registers. You never know in
future you might want to use another set of 2-4 registers with a different
functionality in another driver.
I would see if it makes sense to put together a single binding for
this "Host Base System Control" register (not sure what exactly that means).
Use MFD/regmap you access parts of this block. The remoteproc driver can
then be semi-generic (meaning applicable to group of similar platforms)
based on the platform compatible and use this regmap to provide the
functionality needed.
2/ There are many examples in the kernel that use syscon as a parent node of
child nodes for devices located at an offset from the syscon base address.
Please see these two examples [1][2]. I'm trying to follow a similar design if that
makes sense.
3/ Since there are two registers for each remote core. I'm suggesting to set the
size in the reg property to 8. The driver will read the match data to get the right
offset to be used with regmap APIs.
Suggested nodes:
syscon@1a010000 {
compatible = "arm,sse710-host-base-sysctrl", "simple-mfd", "syscon";
reg = <0x1a010000 0x1000>;
#address-cells = <1>;
#size-cells = <1>;
remoteproc@310 {
compatible = "arm,sse710-extsys0";
reg = <0x310 8>;
firmware-name = "es_flashfw.elf";
mboxes = <&mhu0_hes0 0 1>, <&mhu0_es0h 0 1>;
mbox-names = "txes0", "rxes0";
memory-region = <&extsys0_vring0>, <&extsys0_vring1>;
};
remoteproc@318 {
compatible = "arm,sse710-extsys1";
reg = <0x318 8>;
firmware-name = "es_flashfw.elf";
mboxes = <&mhu0_hes1 0 1>, <&mhu0_es1h 0 1>;
mbox-names = "txes0", "rxes0";
memory-region = <&extsys1_vring0>, <&extsys1_vring1>;
};
};
[1]: Documentation/devicetree/bindings/clock/sprd,sc9863a-clk.yaml
syscon@20e00000 {
compatible = "sprd,sc9863a-glbregs", "syscon", "simple-mfd";
reg = <0x20e00000 0x4000>;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0 0x20e00000 0x4000>;
apahb_gate: apahb-gate@0 {
compatible = "sprd,sc9863a-apahb-gate";
reg = <0x0 0x1020>;
#clock-cells = <1>;
};
};
[2]: Documentation/devicetree/bindings/arm/arm,juno-fpga-apb-regs.yaml:
syscon@10000 {
compatible = "arm,juno-fpga-apb-regs", "syscon", "simple-mfd";
reg = <0x010000 0x1000>;
ranges = <0x0 0x10000 0x1000>;
#address-cells = <1>;
#size-cells = <1>;
led@8,0 {
compatible = "register-bit-led";
reg = <0x08 0x04>;
offset = <0x08>;
mask = <0x01>;
label = "vexpress:0";
linux,default-trigger = "heartbeat";
default-state = "on";
};
};
[3]: https://developer.arm.com/documentation/102342/0000/Programmers-model/Register-descriptions/Host-Base-System-Control-register-summary
Cheers,
Abdellatif
next prev parent reply other threads:[~2024-09-23 11:51 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-01 16:42 [PATCH 0/3] remoteproc: introduce Arm remoteproc support abdellatif.elkhlifi
2024-03-01 16:42 ` [PATCH 1/3] remoteproc: Add Arm remoteproc driver abdellatif.elkhlifi
2024-03-04 18:30 ` Rob Herring
2024-03-04 18:42 ` Mathieu Poirier
2024-03-07 19:40 ` Abdellatif El Khlifi
2024-03-08 16:44 ` Mathieu Poirier
2024-03-11 11:44 ` Abdellatif El Khlifi
2024-03-12 16:29 ` Mathieu Poirier
2024-03-12 17:32 ` Abdellatif El Khlifi
2024-03-13 16:25 ` Mathieu Poirier
2024-03-13 17:17 ` Abdellatif El Khlifi
2024-03-14 14:52 ` Mathieu Poirier
2024-03-14 14:59 ` Sudeep Holla
2024-03-14 15:16 ` Abdellatif El Khlifi
2024-03-14 15:24 ` Sudeep Holla
2024-03-14 16:29 ` Mathieu Poirier
2024-03-25 17:13 ` Abdellatif El Khlifi
2024-03-26 14:20 ` Mathieu Poirier
2024-03-26 17:14 ` Abdellatif El Khlifi
2024-08-22 17:09 ` [PATCH v2 0/5] remoteproc: arm64: Introduce remoteproc support for Corstone-1000 External Systems Abdellatif El Khlifi
2024-08-22 17:09 ` [PATCH v2 1/5] dt-bindings: remoteproc: sse710: Add the External Systems remote processors Abdellatif El Khlifi
2024-08-22 18:25 ` Rob Herring (Arm)
2024-08-23 6:23 ` Krzysztof Kozlowski
2024-09-19 9:35 ` Abdellatif El Khlifi
2024-09-19 10:04 ` Krzysztof Kozlowski
2024-09-19 14:57 ` Abdellatif El Khlifi
2024-09-20 12:42 ` Krzysztof Kozlowski
2024-09-20 14:19 ` Abdellatif El Khlifi
2024-09-20 14:56 ` Krzysztof Kozlowski
2024-09-20 16:38 ` Abdellatif El Khlifi
2024-09-21 18:20 ` Krzysztof Kozlowski
2024-09-23 11:49 ` Abdellatif El Khlifi [this message]
2024-09-23 15:29 ` Krzysztof Kozlowski
2024-09-23 17:19 ` Abdellatif El Khlifi
2024-09-27 7:57 ` Krzysztof Kozlowski
2024-09-22 18:58 ` Krzysztof Kozlowski
2024-09-27 17:54 ` Robin Murphy
2024-10-09 9:46 ` Abdellatif El Khlifi
2024-08-22 17:09 ` [PATCH v2 2/5] dt-bindings: arm: sse710: Add Host Base System Control Abdellatif El Khlifi
2024-08-23 6:25 ` Krzysztof Kozlowski
2024-08-22 17:09 ` [PATCH v2 3/5] arm64: dts: corstone1000: Add MHU nodes used by the External System Abdellatif El Khlifi
2024-08-22 17:09 ` [PATCH v2 4/5] arm64: dts: corstone1000: Add External System support Abdellatif El Khlifi
2024-08-22 17:09 ` [PATCH v2 5/5] remoteproc: arm64: corstone1000: Add the External Systems driver Abdellatif El Khlifi
2024-09-18 15:40 ` Abdellatif El Khlifi
2024-09-19 8:37 ` Mathieu Poirier
2024-03-01 16:42 ` [PATCH 2/3] arm64: dts: Add corstone1000 external system device node abdellatif.elkhlifi
2024-03-01 19:27 ` Krzysztof Kozlowski
2024-03-08 12:21 ` Sudeep Holla
2024-03-08 14:25 ` Abdellatif El Khlifi
2024-03-01 16:42 ` [PATCH 3/3] dt-bindings: remoteproc: Add Arm remoteproc abdellatif.elkhlifi
2024-03-01 19:30 ` Krzysztof Kozlowski
2024-03-08 12:29 ` Sudeep Holla
2024-03-08 13:54 ` Abdellatif El Khlifi
2024-03-13 19:59 ` Robin Murphy
2024-03-14 13:49 ` Abdellatif El Khlifi
2024-03-14 13:56 ` Krzysztof Kozlowski
2024-03-14 15:20 ` Abdellatif El Khlifi
2024-03-14 15:19 ` Sudeep Holla
2024-03-15 14:22 ` Abdellatif El Khlifi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240923114945.GA133670@e130802.arm.com \
--to=abdellatif.elkhlifi@arm.com \
--cc=Adam.Johnston@arm.com \
--cc=Drew.Reed@arm.com \
--cc=Hugues.KambaMpiana@arm.com \
--cc=andersson@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=lpieralisi@kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=robh@kernel.org \
--cc=robin.murphy@arm.com \
--cc=sudeep.holla@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).