* [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs
@ 2024-07-14 16:28 Yuntao Dai
2024-07-14 16:36 ` [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox Yuntao Dai
` (3 more replies)
0 siblings, 4 replies; 17+ messages in thread
From: Yuntao Dai @ 2024-07-14 16:28 UTC (permalink / raw)
To: jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama,
paul.walmsley, palmer, aou
Cc: linux-kernel, devicetree, linux-riscv, Yuntao Dai
Add mailbox support for Sophgo cv18x SoCs, and test on both cv1800b SoC for
milkv-duo and cv1812h SoC for milkv-duo256m
Changes in v2:
- drop 'recvid' 'sender' in dt-bindings
- fix compatible to 'cv1800-mailbox', and change filenames too
- change #mbox-cell to 2, for <channel tagert_cpu>
- add struct cv1800_mbox_chan_priv and function cv1800_mbox_xlate to extract
informations in mbox devicetree node of mailbox client
Yuntao Dai (3):
dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox
riscv: dts: add mailbox for Sophgo cv18x SoCs
mailbox: sophgo: add mailbox driver for cv18x SoCs
.../mailbox/sophgo,cv1800-mailbox.yaml | 61 ++++++
arch/riscv/boot/dts/sophgo/cv18xx.dtsi | 9 +
drivers/mailbox/Kconfig | 11 +
drivers/mailbox/Makefile | 2 +
drivers/mailbox/cv1800-mailbox.c | 203 ++++++++++++++++++
5 files changed, 286 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml
create mode 100644 drivers/mailbox/cv1800-mailbox.c
--
2.17.1
^ permalink raw reply [flat|nested] 17+ messages in thread* [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox 2024-07-14 16:28 [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs Yuntao Dai @ 2024-07-14 16:36 ` Yuntao Dai 2024-07-15 2:56 ` Inochi Amaoto 2024-07-14 16:36 ` [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs Yuntao Dai ` (2 subsequent siblings) 3 siblings, 1 reply; 17+ messages in thread From: Yuntao Dai @ 2024-07-14 16:36 UTC (permalink / raw) To: jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou Cc: linux-kernel, devicetree, linux-riscv, Yuntao Dai Add devicetree bindings documentation for Sophgo cv18x SoCs mailbox Signed-off-by: Yuntao Dai <d1581209858@live.com> --- .../mailbox/sophgo,cv1800-mailbox.yaml | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml diff --git a/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml new file mode 100644 index 000000000..05099d819 --- /dev/null +++ b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml @@ -0,0 +1,61 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mailbox/sophgo,cv1800-mailbox.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Sophgo cv1800 mailbox controller + +maintainers: + - Yuntao Dai <d1581209858@live.com> + +description: + The Sophgo cv18x SoCs mailbox has 8 channels and 8 bytes per channel for + different processors. Any processer can write data in a channel, and + set co-responding register to raise interrupt to notice another processor, + and it is allowed to send data to itself. + Sophgo cv18x SoCs has 3 processors and numbered as + <1> C906L + <2> C906B + <3> 8051 + +properties: + compatible: + enum: + - sophgo,cv1800-mailbox + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-names: + const: mailbox + + "#mbox-cells": + const: 2 + description: + The first cell indicates which channel is used, the second cell indicates + sending to which processor + +required: + - compatible + - reg + - interrupts + - "#mbox-cells" + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/irq.h> + + mailbox: mailbox@1900000 { + compatible = "sophgo,cv1800-mailbox"; + reg = <0x01900000 0x1000>; + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "mailbox"; + interrupt-parent = <&plic>; + #mbox-cells = <2>; + }; -- 2.17.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox 2024-07-14 16:36 ` [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox Yuntao Dai @ 2024-07-15 2:56 ` Inochi Amaoto 2024-07-15 16:15 ` Conor Dooley [not found] ` <IA1PR20MB49537F9F04E601413EA1C86FBBA12@IA1PR20MB4953.namprd20.prod.outlook.c om> 0 siblings, 2 replies; 17+ messages in thread From: Inochi Amaoto @ 2024-07-15 2:56 UTC (permalink / raw) To: Yuntao Dai, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou Cc: linux-kernel, devicetree, linux-riscv On Mon, Jul 15, 2024 at 12:36:45AM GMT, Yuntao Dai wrote: > Add devicetree bindings documentation for Sophgo cv18x SoCs mailbox > > Signed-off-by: Yuntao Dai <d1581209858@live.com> > --- > .../mailbox/sophgo,cv1800-mailbox.yaml | 61 +++++++++++++++++++ > 1 file changed, 61 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml > > diff --git a/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml > new file mode 100644 > index 000000000..05099d819 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml > @@ -0,0 +1,61 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/mailbox/sophgo,cv1800-mailbox.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Sophgo cv1800 mailbox controller > + > +maintainers: > + - Yuntao Dai <d1581209858@live.com> > + > +description: > + The Sophgo cv18x SoCs mailbox has 8 channels and 8 bytes per channel for > + different processors. Any processer can write data in a channel, and > + set co-responding register to raise interrupt to notice another processor, > + and it is allowed to send data to itself. > + Sophgo cv18x SoCs has 3 processors and numbered as > + <1> C906L > + <2> C906B > + <3> 8051 > + Unify the "cv18x" (at least it should be cv18xx) and cv1800 in your binding. > +properties: > + compatible: > + enum: > + - sophgo,cv1800-mailbox > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + interrupt-names: > + const: mailbox I think this is not necessary, there is only one interrupt. > + > + "#mbox-cells": > + const: 2 > + description: > + The first cell indicates which channel is used, the second cell indicates > + sending to which processor > + > +required: > + - compatible > + - reg > + - interrupts > + - "#mbox-cells" > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/interrupt-controller/irq.h> > + > + mailbox: mailbox@1900000 { > + compatible = "sophgo,cv1800-mailbox"; > + reg = <0x01900000 0x1000>; > + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "mailbox"; > + interrupt-parent = <&plic>; Remove "interrupt-parent". > + #mbox-cells = <2>; > + }; > -- > 2.17.1 > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox 2024-07-15 2:56 ` Inochi Amaoto @ 2024-07-15 16:15 ` Conor Dooley 2024-07-17 17:06 ` Yuntao Dai [not found] ` <IA1PR20MB49537F9F04E601413EA1C86FBBA12@IA1PR20MB4953.namprd20.prod.outlook.c om> 1 sibling, 1 reply; 17+ messages in thread From: Conor Dooley @ 2024-07-15 16:15 UTC (permalink / raw) To: Inochi Amaoto Cc: Yuntao Dai, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, paul.walmsley, palmer, aou, linux-kernel, devicetree, linux-riscv [-- Attachment #1: Type: text/plain, Size: 2942 bytes --] On Mon, Jul 15, 2024 at 10:56:38AM +0800, Inochi Amaoto wrote: > On Mon, Jul 15, 2024 at 12:36:45AM GMT, Yuntao Dai wrote: > > Add devicetree bindings documentation for Sophgo cv18x SoCs mailbox > > > > Signed-off-by: Yuntao Dai <d1581209858@live.com> > > --- > > .../mailbox/sophgo,cv1800-mailbox.yaml | 61 +++++++++++++++++++ > > 1 file changed, 61 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml > > > > diff --git a/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml > > new file mode 100644 > > index 000000000..05099d819 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml > > @@ -0,0 +1,61 @@ > > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/mailbox/sophgo,cv1800-mailbox.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Sophgo cv1800 mailbox controller > > + > > +maintainers: > > + - Yuntao Dai <d1581209858@live.com> > > + > > +description: > > + The Sophgo cv18x SoCs mailbox has 8 channels and 8 bytes per channel for > > + different processors. Any processer can write data in a channel, and > > + set co-responding register to raise interrupt to notice another processor, > > + and it is allowed to send data to itself. > > + Sophgo cv18x SoCs has 3 processors and numbered as > > + <1> C906L > > + <2> C906B > > + <3> 8051 > > + > > Unify the "cv18x" (at least it should be cv18xx) and cv1800 in your binding. > > > +properties: > > + compatible: > > + enum: > > + - sophgo,cv1800-mailbox > > + > > + reg: > > + maxItems: 1 > > + > > + interrupts: > > + maxItems: 1 > > + > > + interrupt-names: > > + const: mailbox > > I think this is not necessary, there is only one interrupt. > > > + > > + "#mbox-cells": > > + const: 2 > > + description: > > + The first cell indicates which channel is used, the second cell indicates > > + sending to which processor > > + > > +required: > > + - compatible > > + - reg > > + - interrupts > > + - "#mbox-cells" > > + > > +additionalProperties: false > > + > > +examples: > > + - | > > + #include <dt-bindings/interrupt-controller/irq.h> > > + > > + mailbox: mailbox@1900000 { And while you're fixing the things Inochi pointed out, drop the "mailbox:" label, you've got no references to it. > > + compatible = "sophgo,cv1800-mailbox"; > > + reg = <0x01900000 0x1000>; > > + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; > > + interrupt-names = "mailbox"; > > + interrupt-parent = <&plic>; > > Remove "interrupt-parent". > > > + #mbox-cells = <2>; > > + }; > > -- > > 2.17.1 > > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox 2024-07-15 16:15 ` Conor Dooley @ 2024-07-17 17:06 ` Yuntao Dai 2024-07-17 17:12 ` Conor Dooley 0 siblings, 1 reply; 17+ messages in thread From: Yuntao Dai @ 2024-07-17 17:06 UTC (permalink / raw) To: Conor Dooley Cc: Inochi Amaoto, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, paul.walmsley, palmer, aou, linux-kernel, devicetree, linux-riscv On Tue, Jul 16, 2024 at 12:15 AM, Conor Dooley <conor@kernel.org> wrote: > On Mon, Jul 15, 2024 at 10:56:38AM +0800, Inochi Amaoto wrote: >> On Mon, Jul 15, 2024 at 12:36:45AM GMT, Yuntao Dai wrote: >> > Add devicetree bindings documentation for Sophgo cv18x SoCs >> mailbox >> > >> > Signed-off-by: Yuntao Dai <d1581209858@live.com> >> > --- >> > .../mailbox/sophgo,cv1800-mailbox.yaml | 61 >> +++++++++++++++++++ >> > 1 file changed, 61 insertions(+) >> > create mode 100644 >> Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> > >> > diff --git >> a/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> > new file mode 100644 >> > index 000000000..05099d819 >> > --- /dev/null >> > +++ >> b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> > @@ -0,0 +1,61 @@ >> > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) >> > +%YAML 1.2 >> > +--- >> > +$id: >> http://devicetree.org/schemas/mailbox/sophgo,cv1800-mailbox.yaml# >> > +$schema: http://devicetree.org/meta-schemas/core.yaml# >> > + >> > +title: Sophgo cv1800 mailbox controller >> > + >> > +maintainers: >> > + - Yuntao Dai <d1581209858@live.com> >> > + >> > +description: >> > + The Sophgo cv18x SoCs mailbox has 8 channels and 8 bytes per >> channel for >> > + different processors. Any processer can write data in a >> channel, and >> > + set co-responding register to raise interrupt to notice >> another processor, >> > + and it is allowed to send data to itself. >> > + Sophgo cv18x SoCs has 3 processors and numbered as >> > + <1> C906L >> > + <2> C906B >> > + <3> 8051 >> > + >> >> Unify the "cv18x" (at least it should be cv18xx) and cv1800 in your >> binding. >> >> > +properties: >> > + compatible: >> > + enum: >> > + - sophgo,cv1800-mailbox >> > + >> > + reg: >> > + maxItems: 1 >> > + >> > + interrupts: >> > + maxItems: 1 >> > + >> > + interrupt-names: >> > + const: mailbox >> >> I think this is not necessary, there is only one interrupt. >> >> > + >> > + "#mbox-cells": >> > + const: 2 >> > + description: >> > + The first cell indicates which channel is used, the second >> cell indicates >> > + sending to which processor >> > + >> > +required: >> > + - compatible >> > + - reg >> > + - interrupts >> > + - "#mbox-cells" >> > + >> > +additionalProperties: false >> > + >> > +examples: >> > + - | >> > + #include <dt-bindings/interrupt-controller/irq.h> >> > + >> > + mailbox: mailbox@1900000 { > > And while you're fixing the things Inochi pointed out, drop the > "mailbox:" label, you've got no references to it. > Yes, in this patch there is no references to it, but mailbox client node will need it. I tested this patch using mailbox-test as the client, like: " mailbox-test { compatible = "mailbox-test"; mbox-names = "rx", "tx"; mboxes = <&mailbox 0 1 &mailbox 1 2>; }; " If you think it is better to drop the label in this patch, I will drop it. >> > + compatible = "sophgo,cv1800-mailbox"; >> > + reg = <0x01900000 0x1000>; >> > + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; >> > + interrupt-names = "mailbox"; >> > + interrupt-parent = <&plic>; >> >> Remove "interrupt-parent". >> >> > + #mbox-cells = <2>; >> > + }; >> > -- >> > 2.17.1 >> > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox 2024-07-17 17:06 ` Yuntao Dai @ 2024-07-17 17:12 ` Conor Dooley 0 siblings, 0 replies; 17+ messages in thread From: Conor Dooley @ 2024-07-17 17:12 UTC (permalink / raw) To: Yuntao Dai Cc: Inochi Amaoto, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, paul.walmsley, palmer, aou, linux-kernel, devicetree, linux-riscv [-- Attachment #1: Type: text/plain, Size: 850 bytes --] On Thu, Jul 18, 2024 at 01:06:46AM +0800, Yuntao Dai wrote: > > > > +examples: > > > > + - | > > > > + #include <dt-bindings/interrupt-controller/irq.h> > > > > + > > > > + mailbox: mailbox@1900000 { > > > > And while you're fixing the things Inochi pointed out, drop the > > "mailbox:" label, you've got no references to it. > > > > Yes, in this patch there is no references to it, but mailbox client node > will need it. > I tested this patch using mailbox-test as the client, like: > " > mailbox-test { > compatible = "mailbox-test"; > mbox-names = "rx", "tx"; > mboxes = <&mailbox 0 1 &mailbox 1 2>; > }; > " > > If you think it is better to drop the label in this patch, I will drop it. Just drop it from the example, you can keep it in the actual dts. We try to keep these examples to a minimum. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <IA1PR20MB49537F9F04E601413EA1C86FBBA12@IA1PR20MB4953.namprd20.prod.outlook.c om>]
* Re: [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox [not found] ` <IA1PR20MB49537F9F04E601413EA1C86FBBA12@IA1PR20MB4953.namprd20.prod.outlook.c om> @ 2024-07-17 17:02 ` Yuntao Dai 0 siblings, 0 replies; 17+ messages in thread From: Yuntao Dai @ 2024-07-17 17:02 UTC (permalink / raw) To: Inochi Amaoto Cc: jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, paul.walmsley, palmer, aou, linux-kernel, devicetree, linux-riscv On Mon, Jul 15, 2024 at 10:56 AM, Inochi Amaoto <inochiama@outlook.com> wrote: > On Mon, Jul 15, 2024 at 12:36:45AM GMT, Yuntao Dai wrote: >> Add devicetree bindings documentation for Sophgo cv18x SoCs mailbox >> >> Signed-off-by: Yuntao Dai <d1581209858@live.com> >> --- >> .../mailbox/sophgo,cv1800-mailbox.yaml | 61 >> +++++++++++++++++++ >> 1 file changed, 61 insertions(+) >> create mode 100644 >> Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> >> diff --git >> a/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> new file mode 100644 >> index 000000000..05099d819 >> --- /dev/null >> +++ >> b/Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> @@ -0,0 +1,61 @@ >> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: >> http://devicetree.org/schemas/mailbox/sophgo,cv1800-mailbox.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: Sophgo cv1800 mailbox controller >> + >> +maintainers: >> + - Yuntao Dai <d1581209858@live.com> >> + >> +description: >> + The Sophgo cv18x SoCs mailbox has 8 channels and 8 bytes per >> channel for >> + different processors. Any processer can write data in a channel, >> and >> + set co-responding register to raise interrupt to notice another >> processor, >> + and it is allowed to send data to itself. >> + Sophgo cv18x SoCs has 3 processors and numbered as >> + <1> C906L >> + <2> C906B >> + <3> 8051 >> + > > Unify the "cv18x" (at least it should be cv18xx) and cv1800 in your > binding. > sg200x SoCs and cv18xx SoCs share the same mailbox IP, so I use 'cv18xx' in descriptions, while cv1800 having these three cores, sg200x and cv1812 have one more Arm core. I use 'cv1800-mailbox' in compatible because this driver only tested on cv1800. What do you think is more appropriate to do? I want to support the sg200x after vendor provides an example that can enable linux on the Arm core. However, I haven't found a way to do this yet. Maybe I can do this in next patch, update bindings, driver implemtation and add another compatible string for sg200x? >> +properties: >> + compatible: >> + enum: >> + - sophgo,cv1800-mailbox >> + >> + reg: >> + maxItems: 1 >> + >> + interrupts: >> + maxItems: 1 >> + >> + interrupt-names: >> + const: mailbox > > I think this is not necessary, there is only one interrupt. > I will fix it >> + >> + "#mbox-cells": >> + const: 2 >> + description: >> + The first cell indicates which channel is used, the second >> cell indicates >> + sending to which processor >> + >> +required: >> + - compatible >> + - reg >> + - interrupts >> + - "#mbox-cells" >> + >> +additionalProperties: false >> + >> +examples: >> + - | >> + #include <dt-bindings/interrupt-controller/irq.h> >> + >> + mailbox: mailbox@1900000 { >> + compatible = "sophgo,cv1800-mailbox"; >> + reg = <0x01900000 0x1000>; >> + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; >> + interrupt-names = "mailbox"; >> + interrupt-parent = <&plic>; > > Remove "interrupt-parent". I will fix it > >> + #mbox-cells = <2>; >> + }; >> -- >> 2.17.1 >> ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs 2024-07-14 16:28 [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs Yuntao Dai 2024-07-14 16:36 ` [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox Yuntao Dai @ 2024-07-14 16:36 ` Yuntao Dai 2024-07-15 2:53 ` Inochi Amaoto 2024-07-19 1:19 ` Samuel Holland 2024-07-14 16:36 ` [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for " Yuntao Dai 2024-07-16 12:55 ` [PATCH v2 0/3] riscv: sophgo: add mailbox support " Chen Wang 3 siblings, 2 replies; 17+ messages in thread From: Yuntao Dai @ 2024-07-14 16:36 UTC (permalink / raw) To: jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou Cc: linux-kernel, devicetree, linux-riscv, Yuntao Dai Add mailbox node for Sophgo cv18x SoCs Signed-off-by: Yuntao Dai <d1581209858@live.com> --- arch/riscv/boot/dts/sophgo/cv18xx.dtsi | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/riscv/boot/dts/sophgo/cv18xx.dtsi b/arch/riscv/boot/dts/sophgo/cv18xx.dtsi index 891932ae4..1c7035737 100644 --- a/arch/riscv/boot/dts/sophgo/cv18xx.dtsi +++ b/arch/riscv/boot/dts/sophgo/cv18xx.dtsi @@ -310,5 +310,14 @@ reg = <0x74000000 0x10000>; interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>; }; + + mailbox: mailbox@1900000 { + compatible = "sophgo,cv1800-mailbox"; + reg = <0x01900000 0x1000>; + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "mailbox"; + interrupt-parent = <&plic>; + #mbox-cells = <2>; + }; }; }; -- 2.17.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs 2024-07-14 16:36 ` [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs Yuntao Dai @ 2024-07-15 2:53 ` Inochi Amaoto 2024-07-19 1:19 ` Samuel Holland 1 sibling, 0 replies; 17+ messages in thread From: Inochi Amaoto @ 2024-07-15 2:53 UTC (permalink / raw) To: Yuntao Dai, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou Cc: linux-kernel, devicetree, linux-riscv On Mon, Jul 15, 2024 at 12:36:46AM GMT, Yuntao Dai wrote: > Add mailbox node for Sophgo cv18x SoCs > > Signed-off-by: Yuntao Dai <d1581209858@live.com> > --- > arch/riscv/boot/dts/sophgo/cv18xx.dtsi | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/riscv/boot/dts/sophgo/cv18xx.dtsi b/arch/riscv/boot/dts/sophgo/cv18xx.dtsi > index 891932ae4..1c7035737 100644 > --- a/arch/riscv/boot/dts/sophgo/cv18xx.dtsi > +++ b/arch/riscv/boot/dts/sophgo/cv18xx.dtsi > @@ -310,5 +310,14 @@ > reg = <0x74000000 0x10000>; > interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>; > }; > + > + mailbox: mailbox@1900000 { > + compatible = "sophgo,cv1800-mailbox"; > + reg = <0x01900000 0x1000>; > + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "mailbox"; > + interrupt-parent = <&plic>; interrupt-parent is not needed, which is already set globally. > + #mbox-cells = <2>; > + }; > }; > }; > -- > 2.17.1 > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs 2024-07-14 16:36 ` [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs Yuntao Dai 2024-07-15 2:53 ` Inochi Amaoto @ 2024-07-19 1:19 ` Samuel Holland 1 sibling, 0 replies; 17+ messages in thread From: Samuel Holland @ 2024-07-19 1:19 UTC (permalink / raw) To: Yuntao Dai Cc: linux-kernel, devicetree, linux-riscv, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou On 2024-07-14 11:36 AM, Yuntao Dai wrote: > Add mailbox node for Sophgo cv18x SoCs > > Signed-off-by: Yuntao Dai <d1581209858@live.com> > --- > arch/riscv/boot/dts/sophgo/cv18xx.dtsi | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/riscv/boot/dts/sophgo/cv18xx.dtsi b/arch/riscv/boot/dts/sophgo/cv18xx.dtsi > index 891932ae4..1c7035737 100644 > --- a/arch/riscv/boot/dts/sophgo/cv18xx.dtsi > +++ b/arch/riscv/boot/dts/sophgo/cv18xx.dtsi > @@ -310,5 +310,14 @@ > reg = <0x74000000 0x10000>; > interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>; > }; > + > + mailbox: mailbox@1900000 { Please keep nodes sorted by unit address. > + compatible = "sophgo,cv1800-mailbox"; > + reg = <0x01900000 0x1000>; > + interrupts = <101 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "mailbox"; > + interrupt-parent = <&plic>; > + #mbox-cells = <2>; > + }; > }; > }; ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for cv18x SoCs 2024-07-14 16:28 [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs Yuntao Dai 2024-07-14 16:36 ` [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox Yuntao Dai 2024-07-14 16:36 ` [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs Yuntao Dai @ 2024-07-14 16:36 ` Yuntao Dai 2024-07-15 1:59 ` kernel test robot ` (2 more replies) 2024-07-16 12:55 ` [PATCH v2 0/3] riscv: sophgo: add mailbox support " Chen Wang 3 siblings, 3 replies; 17+ messages in thread From: Yuntao Dai @ 2024-07-14 16:36 UTC (permalink / raw) To: jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou Cc: linux-kernel, devicetree, linux-riscv, Yuntao Dai Add mailbox controller driver for cv18x SoCs, tested on mailbox-test client. Signed-off-by: Yuntao Dai <d1581209858@live.com> --- drivers/mailbox/Kconfig | 11 ++ drivers/mailbox/Makefile | 2 + drivers/mailbox/cv1800-mailbox.c | 203 +++++++++++++++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 drivers/mailbox/cv1800-mailbox.c diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig index 3b8842c4a..db856ec7e 100644 --- a/drivers/mailbox/Kconfig +++ b/drivers/mailbox/Kconfig @@ -286,4 +286,15 @@ config QCOM_IPCC acts as an interrupt controller for receiving interrupts from clients. Say Y here if you want to build this driver. +config CV1800_MBOX + tristate "cv1800 mailbox" + depends on OF + depends on ARCH_SOPHGO || COMPILE_TEST + help + Mailbox driver implementation for Sophgo cv180x SoCs. This driver + can be used to send message between different processors in SoC. Any + processer can write data in a channel, and set co-responding register + to raise interrupt to notice another processor, and it is allowed to + send data to itself. + endif diff --git a/drivers/mailbox/Makefile b/drivers/mailbox/Makefile index 5cf2f54de..2c6db8c5c 100644 --- a/drivers/mailbox/Makefile +++ b/drivers/mailbox/Makefile @@ -62,3 +62,5 @@ obj-$(CONFIG_SUN6I_MSGBOX) += sun6i-msgbox.o obj-$(CONFIG_SPRD_MBOX) += sprd-mailbox.o obj-$(CONFIG_QCOM_IPCC) += qcom-ipcc.o + +obj-$(CONFIG_CV1800_MBOX) += cv1800-mailbox.o \ No newline at end of file diff --git a/drivers/mailbox/cv1800-mailbox.c b/drivers/mailbox/cv1800-mailbox.c new file mode 100644 index 000000000..a3b214b4d --- /dev/null +++ b/drivers/mailbox/cv1800-mailbox.c @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <linux/device.h> +#include <linux/err.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/kfifo.h> +#include <linux/mailbox_controller.h> +#include <linux/mailbox_client.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#define RECV_CPU 2 + +#define MAILBOX_MAX_CHAN 0x0008 +#define MAILBOX_DONE_OFFSET 0x0002 +#define MAILBOX_CONTEXT_SIZE 0x0040 +#define MAILBOX_CONTEXT_OFFSET 0x0400 + +#define MBOX_EN_REG(cpu) (cpu << 2) +#define MBOX_DONE_REG(cpu) ((cpu << 2) + MAILBOX_DONE_OFFSET) + +#define MBOX_SET_CLR_REG(cpu) (0x10 + (cpu << 4)) +#define MBOX_SET_INT_REG(cpu) (0x18 + (cpu << 4)) + +#define MBOX_SET_REG 0x60 + +/** + * cv1800 mailbox channel private data + * @idx: index of channel + * @cpu: send to which processor + */ +struct cv1800_mbox_chan_priv { + int idx; + int cpu; +}; + +struct cv1800_mbox { + struct mbox_controller mbox; + struct cv1800_mbox_chan_priv priv[MAILBOX_MAX_CHAN]; + struct mbox_chan chans[MAILBOX_MAX_CHAN]; + u64 __iomem *content[MAILBOX_MAX_CHAN]; + void __iomem *mbox_base; + int recvid; +}; + +static irqreturn_t cv1800_mbox_isr(int irq, void *dev_id) +{ + struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; + size_t i; + + for (i = 0; i < MAILBOX_MAX_CHAN; i++) { + if (mbox->content[i] && mbox->chans[i].cl) { + mbox_chan_received_data(&mbox->chans[i], + mbox->content[i]); + mbox->content[i] = NULL; + return IRQ_HANDLED; + } + } + return IRQ_NONE; +} + +static irqreturn_t cv1800_mbox_irq(int irq, void *dev_id) +{ + struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; + u64 __iomem *addr; + u8 set, valid; + size_t i; + + set = readb(mbox->mbox_base + MBOX_SET_INT_REG(RECV_CPU)); + + if (!set) + return IRQ_NONE; + + for (i = 0; i < MAILBOX_MAX_CHAN; i++) { + valid = set & (1 << i); + addr = (u64 *)(mbox->mbox_base + MAILBOX_CONTEXT_OFFSET) + i; + if (valid) { + mbox->content[i] = addr; + writeb(valid, + mbox->mbox_base + MBOX_SET_CLR_REG(RECV_CPU)); + writeb(~valid, mbox->mbox_base + MBOX_EN_REG(RECV_CPU)); + return IRQ_WAKE_THREAD; + } + } + + return IRQ_NONE; +} + +static int cv1800_mbox_send_data(struct mbox_chan *chan, void *data) +{ + struct cv1800_mbox_chan_priv *priv = + (struct cv1800_mbox_chan_priv *)chan->con_priv; + struct cv1800_mbox *mbox = dev_get_drvdata(chan->mbox->dev); + u64 __iomem *addr; + u8 en, valid; + + int idx = priv->idx; + int cpu = priv->cpu; + + addr = (u64 *)(mbox->mbox_base + MAILBOX_CONTEXT_OFFSET) + idx; + memcpy_toio(addr, data, 8); + + valid = 1 << idx; + writeb(valid, mbox->mbox_base + MBOX_SET_CLR_REG(cpu)); + en = readb(mbox->mbox_base + MBOX_EN_REG(cpu)); + writeb(en | valid, mbox->mbox_base + MBOX_EN_REG(cpu)); + writeb(valid, mbox->mbox_base + MBOX_SET_REG); + + return 0; +} + +static bool cv1800_last_tx_done(struct mbox_chan *chan) +{ + return true; +} + +static const struct mbox_chan_ops cv1800_mbox_chan_ops = { + .send_data = cv1800_mbox_send_data, + .last_tx_done = cv1800_last_tx_done, +}; + +static struct mbox_chan *cv1800_mbox_xlate(struct mbox_controller *mbox, + const struct of_phandle_args *spec) +{ + struct cv1800_mbox_chan_priv *priv; + + int idx = spec->args[0]; + int cpu = spec->args[1]; + + if (idx >= mbox->num_chans) + return ERR_PTR(-EINVAL); + + priv = mbox->chans[idx].con_priv; + priv->cpu = cpu; + + return &mbox->chans[idx]; +} + +static const struct of_device_id cv1800_mbox_of_match[] = { + { .compatible = "sophgo,cv1800-mailbox", }, + {}, +}; +MODULE_DEVICE_TABLE(of, cv1800_mbox_of_match); + +static int cv1800_mbox_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct cv1800_mbox *mb; + int irq, idx, err; + + if (!dev->of_node) + return -ENODEV; + + mb = devm_kzalloc(dev, sizeof(*mb), GFP_KERNEL); + if (!mb) + return -ENOMEM; + + mb->mbox_base = devm_of_iomap(dev, dev->of_node, 0, NULL); + if (IS_ERR(mb->mbox_base)) + return dev_err_probe(dev, PTR_ERR(mb->mbox_base), + "Failed to map resource\n"); + + mb->mbox.dev = dev; + mb->mbox.chans = mb->chans; + mb->mbox.txdone_poll = true; + mb->mbox.ops = &cv1800_mbox_chan_ops; + mb->mbox.num_chans = MAILBOX_MAX_CHAN; + mb->mbox.of_xlate = cv1800_mbox_xlate; + + irq = platform_get_irq_byname(pdev, "mailbox"); + err = devm_request_threaded_irq(dev, irq, cv1800_mbox_irq, + cv1800_mbox_isr, IRQF_ONESHOT, + dev_name(&pdev->dev), mb); + if (err < 0) + return dev_err_probe(dev, err, "Failed to register irq\n"); + + for (idx = 0; idx < MAILBOX_MAX_CHAN; idx++) { + mb->priv[idx].idx = idx; + mb->mbox.chans[idx].con_priv = &mb->priv[idx]; + } + + err = devm_mbox_controller_register(dev, &mb->mbox); + if (err) + return dev_err_probe(dev, err, "Failed to register mailbox\n"); + + platform_set_drvdata(pdev, mb); + return 0; +} + +static struct platform_driver cv1800_mbox_driver = { + .driver = { + .name = "cv1800-mbox", + .of_match_table = cv1800_mbox_of_match, + }, + .probe = cv1800_mbox_probe, +}; + +module_platform_driver(cv1800_mbox_driver); + +MODULE_DESCRIPTION("cv1800 mailbox driver"); +MODULE_LICENSE("GPL"); -- 2.17.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for cv18x SoCs 2024-07-14 16:36 ` [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for " Yuntao Dai @ 2024-07-15 1:59 ` kernel test robot 2024-07-15 9:09 ` kernel test robot 2024-07-19 1:35 ` Samuel Holland 2 siblings, 0 replies; 17+ messages in thread From: kernel test robot @ 2024-07-15 1:59 UTC (permalink / raw) To: Yuntao Dai, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou Cc: oe-kbuild-all, linux-kernel, devicetree, linux-riscv, Yuntao Dai Hi Yuntao, kernel test robot noticed the following build warnings: [auto build test WARNING on robh/for-next] [also build test WARNING on linus/master v6.10 next-20240712] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Yuntao-Dai/dt-bindings-mailbox-add-Sophgo-cv18x-SoCs-mailbox/20240715-003952 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next patch link: https://lore.kernel.org/r/SYBP282MB2238F93565D20F0A5F3EEB6BC4A02%40SYBP282MB2238.AUSP282.PROD.OUTLOOK.COM patch subject: [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for cv18x SoCs config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20240715/202407150911.KZchf5cj-lkp@intel.com/config) compiler: alpha-linux-gcc (GCC) 13.3.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240715/202407150911.KZchf5cj-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202407150911.KZchf5cj-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/mailbox/cv1800-mailbox.c:30: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst * cv1800 mailbox channel private data vim +30 drivers/mailbox/cv1800-mailbox.c 28 29 /** > 30 * cv1800 mailbox channel private data 31 * @idx: index of channel 32 * @cpu: send to which processor 33 */ 34 struct cv1800_mbox_chan_priv { 35 int idx; 36 int cpu; 37 }; 38 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for cv18x SoCs 2024-07-14 16:36 ` [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for " Yuntao Dai 2024-07-15 1:59 ` kernel test robot @ 2024-07-15 9:09 ` kernel test robot 2024-07-19 1:35 ` Samuel Holland 2 siblings, 0 replies; 17+ messages in thread From: kernel test robot @ 2024-07-15 9:09 UTC (permalink / raw) To: Yuntao Dai, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou Cc: oe-kbuild-all, linux-kernel, devicetree, linux-riscv, Yuntao Dai Hi Yuntao, kernel test robot noticed the following build warnings: [auto build test WARNING on robh/for-next] [also build test WARNING on linus/master v6.10 next-20240715] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Yuntao-Dai/dt-bindings-mailbox-add-Sophgo-cv18x-SoCs-mailbox/20240715-003952 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next patch link: https://lore.kernel.org/r/SYBP282MB2238F93565D20F0A5F3EEB6BC4A02%40SYBP282MB2238.AUSP282.PROD.OUTLOOK.COM patch subject: [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for cv18x SoCs config: powerpc-randconfig-r113-20240715 (https://download.01.org/0day-ci/archive/20240715/202407151649.ExTr3xXL-lkp@intel.com/config) compiler: powerpc-linux-gcc (GCC) 14.1.0 reproduce: (https://download.01.org/0day-ci/archive/20240715/202407151649.ExTr3xXL-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202407151649.ExTr3xXL-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/mailbox/cv1800-mailbox.c:56:62: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void *data @@ got unsigned long long [noderef] [usertype] __iomem * @@ drivers/mailbox/cv1800-mailbox.c:56:62: sparse: expected void *data drivers/mailbox/cv1800-mailbox.c:56:62: sparse: got unsigned long long [noderef] [usertype] __iomem * >> drivers/mailbox/cv1800-mailbox.c:78:25: sparse: sparse: cast removes address space '__iomem' of expression >> drivers/mailbox/cv1800-mailbox.c:78:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected unsigned long long [noderef] [usertype] __iomem *addr @@ got unsigned long long [usertype] * @@ drivers/mailbox/cv1800-mailbox.c:78:22: sparse: expected unsigned long long [noderef] [usertype] __iomem *addr drivers/mailbox/cv1800-mailbox.c:78:22: sparse: got unsigned long long [usertype] * drivers/mailbox/cv1800-mailbox.c:102:17: sparse: sparse: cast removes address space '__iomem' of expression drivers/mailbox/cv1800-mailbox.c:102:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected unsigned long long [noderef] [usertype] __iomem *addr @@ got unsigned long long [usertype] * @@ drivers/mailbox/cv1800-mailbox.c:102:14: sparse: expected unsigned long long [noderef] [usertype] __iomem *addr drivers/mailbox/cv1800-mailbox.c:102:14: sparse: got unsigned long long [usertype] * vim +56 drivers/mailbox/cv1800-mailbox.c 47 48 static irqreturn_t cv1800_mbox_isr(int irq, void *dev_id) 49 { 50 struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; 51 size_t i; 52 53 for (i = 0; i < MAILBOX_MAX_CHAN; i++) { 54 if (mbox->content[i] && mbox->chans[i].cl) { 55 mbox_chan_received_data(&mbox->chans[i], > 56 mbox->content[i]); 57 mbox->content[i] = NULL; 58 return IRQ_HANDLED; 59 } 60 } 61 return IRQ_NONE; 62 } 63 64 static irqreturn_t cv1800_mbox_irq(int irq, void *dev_id) 65 { 66 struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; 67 u64 __iomem *addr; 68 u8 set, valid; 69 size_t i; 70 71 set = readb(mbox->mbox_base + MBOX_SET_INT_REG(RECV_CPU)); 72 73 if (!set) 74 return IRQ_NONE; 75 76 for (i = 0; i < MAILBOX_MAX_CHAN; i++) { 77 valid = set & (1 << i); > 78 addr = (u64 *)(mbox->mbox_base + MAILBOX_CONTEXT_OFFSET) + i; 79 if (valid) { 80 mbox->content[i] = addr; 81 writeb(valid, 82 mbox->mbox_base + MBOX_SET_CLR_REG(RECV_CPU)); 83 writeb(~valid, mbox->mbox_base + MBOX_EN_REG(RECV_CPU)); 84 return IRQ_WAKE_THREAD; 85 } 86 } 87 88 return IRQ_NONE; 89 } 90 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for cv18x SoCs 2024-07-14 16:36 ` [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for " Yuntao Dai 2024-07-15 1:59 ` kernel test robot 2024-07-15 9:09 ` kernel test robot @ 2024-07-19 1:35 ` Samuel Holland 2024-07-22 17:02 ` Yuntao Dai 2 siblings, 1 reply; 17+ messages in thread From: Samuel Holland @ 2024-07-19 1:35 UTC (permalink / raw) To: Yuntao Dai Cc: linux-kernel, devicetree, linux-riscv, jassisinghbrar, robh, krzk+dt, conor+dt, unicorn_wang, inochiama, paul.walmsley, palmer, aou On 2024-07-14 11:36 AM, Yuntao Dai wrote: > Add mailbox controller driver for cv18x SoCs, tested on mailbox-test > client. > > Signed-off-by: Yuntao Dai <d1581209858@live.com> > --- > drivers/mailbox/Kconfig | 11 ++ > drivers/mailbox/Makefile | 2 + > drivers/mailbox/cv1800-mailbox.c | 203 +++++++++++++++++++++++++++++++ > 3 files changed, 216 insertions(+) > create mode 100644 drivers/mailbox/cv1800-mailbox.c > > diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig > index 3b8842c4a..db856ec7e 100644 > --- a/drivers/mailbox/Kconfig > +++ b/drivers/mailbox/Kconfig > @@ -286,4 +286,15 @@ config QCOM_IPCC > acts as an interrupt controller for receiving interrupts from clients. > Say Y here if you want to build this driver. > > +config CV1800_MBOX > + tristate "cv1800 mailbox" > + depends on OF This dependency is not necessary once the probe function is fixed (see below). > + depends on ARCH_SOPHGO || COMPILE_TEST > + help > + Mailbox driver implementation for Sophgo cv180x SoCs. This driver > + can be used to send message between different processors in SoC. Any > + processer can write data in a channel, and set co-responding register > + to raise interrupt to notice another processor, and it is allowed to > + send data to itself. > + > endif > diff --git a/drivers/mailbox/Makefile b/drivers/mailbox/Makefile > index 5cf2f54de..2c6db8c5c 100644 > --- a/drivers/mailbox/Makefile > +++ b/drivers/mailbox/Makefile > @@ -62,3 +62,5 @@ obj-$(CONFIG_SUN6I_MSGBOX) += sun6i-msgbox.o > obj-$(CONFIG_SPRD_MBOX) += sprd-mailbox.o > > obj-$(CONFIG_QCOM_IPCC) += qcom-ipcc.o > + > +obj-$(CONFIG_CV1800_MBOX) += cv1800-mailbox.o > \ No newline at end of file Please add the missing newline. > diff --git a/drivers/mailbox/cv1800-mailbox.c b/drivers/mailbox/cv1800-mailbox.c > new file mode 100644 > index 000000000..a3b214b4d > --- /dev/null > +++ b/drivers/mailbox/cv1800-mailbox.c > @@ -0,0 +1,203 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > + > +#include <linux/device.h> > +#include <linux/err.h> > +#include <linux/interrupt.h> > +#include <linux/io.h> > +#include <linux/kfifo.h> > +#include <linux/mailbox_controller.h> > +#include <linux/mailbox_client.h> > +#include <linux/module.h> > +#include <linux/platform_device.h> > +#include <linux/slab.h> > + > +#define RECV_CPU 2 > + > +#define MAILBOX_MAX_CHAN 0x0008 > +#define MAILBOX_DONE_OFFSET 0x0002 > +#define MAILBOX_CONTEXT_SIZE 0x0040 > +#define MAILBOX_CONTEXT_OFFSET 0x0400 > + > +#define MBOX_EN_REG(cpu) (cpu << 2) > +#define MBOX_DONE_REG(cpu) ((cpu << 2) + MAILBOX_DONE_OFFSET) > + > +#define MBOX_SET_CLR_REG(cpu) (0x10 + (cpu << 4)) > +#define MBOX_SET_INT_REG(cpu) (0x18 + (cpu << 4)) > + > +#define MBOX_SET_REG 0x60 > + > +/** > + * cv1800 mailbox channel private data > + * @idx: index of channel > + * @cpu: send to which processor > + */ > +struct cv1800_mbox_chan_priv { > + int idx; > + int cpu; > +}; > + > +struct cv1800_mbox { > + struct mbox_controller mbox; > + struct cv1800_mbox_chan_priv priv[MAILBOX_MAX_CHAN]; > + struct mbox_chan chans[MAILBOX_MAX_CHAN]; > + u64 __iomem *content[MAILBOX_MAX_CHAN]; > + void __iomem *mbox_base; > + int recvid; > +}; > + > +static irqreturn_t cv1800_mbox_isr(int irq, void *dev_id) > +{ > + struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; > + size_t i; > + > + for (i = 0; i < MAILBOX_MAX_CHAN; i++) { > + if (mbox->content[i] && mbox->chans[i].cl) { > + mbox_chan_received_data(&mbox->chans[i], > + mbox->content[i]); > + mbox->content[i] = NULL; > + return IRQ_HANDLED; Are you sure you only want to handle one channel per interrupt? Should this be "ret = IRQ_HANDLED;" or similar instead of early return? The same applies to cv1800_mbox_irq(). > + } > + } > + return IRQ_NONE; > +} > + > +static irqreturn_t cv1800_mbox_irq(int irq, void *dev_id) > +{ > + struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; > + u64 __iomem *addr; > + u8 set, valid; > + size_t i; > + > + set = readb(mbox->mbox_base + MBOX_SET_INT_REG(RECV_CPU)); > + > + if (!set) > + return IRQ_NONE; > + > + for (i = 0; i < MAILBOX_MAX_CHAN; i++) { > + valid = set & (1 << i); > + addr = (u64 *)(mbox->mbox_base + MAILBOX_CONTEXT_OFFSET) + i; > + if (valid) { > + mbox->content[i] = addr; > + writeb(valid, > + mbox->mbox_base + MBOX_SET_CLR_REG(RECV_CPU)); > + writeb(~valid, mbox->mbox_base + MBOX_EN_REG(RECV_CPU)); > + return IRQ_WAKE_THREAD; > + } > + } > + > + return IRQ_NONE; > +} > + > +static int cv1800_mbox_send_data(struct mbox_chan *chan, void *data) > +{ > + struct cv1800_mbox_chan_priv *priv = > + (struct cv1800_mbox_chan_priv *)chan->con_priv; > + struct cv1800_mbox *mbox = dev_get_drvdata(chan->mbox->dev); > + u64 __iomem *addr; > + u8 en, valid; > + > + int idx = priv->idx; > + int cpu = priv->cpu; > + > + addr = (u64 *)(mbox->mbox_base + MAILBOX_CONTEXT_OFFSET) + idx; > + memcpy_toio(addr, data, 8); > + > + valid = 1 << idx; > + writeb(valid, mbox->mbox_base + MBOX_SET_CLR_REG(cpu)); > + en = readb(mbox->mbox_base + MBOX_EN_REG(cpu)); > + writeb(en | valid, mbox->mbox_base + MBOX_EN_REG(cpu)); > + writeb(valid, mbox->mbox_base + MBOX_SET_REG); > + > + return 0; > +} > + > +static bool cv1800_last_tx_done(struct mbox_chan *chan) > +{ > + return true; Shouldn't this check MBOX_EN_REG(priv->cpu) or similar to check that the receiver has read the message? > +} > + > +static const struct mbox_chan_ops cv1800_mbox_chan_ops = { > + .send_data = cv1800_mbox_send_data, > + .last_tx_done = cv1800_last_tx_done, > +}; > + > +static struct mbox_chan *cv1800_mbox_xlate(struct mbox_controller *mbox, > + const struct of_phandle_args *spec) > +{ > + struct cv1800_mbox_chan_priv *priv; > + > + int idx = spec->args[0]; > + int cpu = spec->args[1]; > + > + if (idx >= mbox->num_chans) > + return ERR_PTR(-EINVAL); > + > + priv = mbox->chans[idx].con_priv; > + priv->cpu = cpu; > + > + return &mbox->chans[idx]; > +} > + > +static const struct of_device_id cv1800_mbox_of_match[] = { > + { .compatible = "sophgo,cv1800-mailbox", }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, cv1800_mbox_of_match); > + > +static int cv1800_mbox_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct cv1800_mbox *mb; > + int irq, idx, err; > + > + if (!dev->of_node) > + return -ENODEV; No need for this check. > + > + mb = devm_kzalloc(dev, sizeof(*mb), GFP_KERNEL); > + if (!mb) > + return -ENOMEM; > + > + mb->mbox_base = devm_of_iomap(dev, dev->of_node, 0, NULL); Please use devm_platform_ioremap_resource() here, which abstracts away the OF node. > + if (IS_ERR(mb->mbox_base)) > + return dev_err_probe(dev, PTR_ERR(mb->mbox_base), > + "Failed to map resource\n"); > + > + mb->mbox.dev = dev; > + mb->mbox.chans = mb->chans; > + mb->mbox.txdone_poll = true; > + mb->mbox.ops = &cv1800_mbox_chan_ops; > + mb->mbox.num_chans = MAILBOX_MAX_CHAN; > + mb->mbox.of_xlate = cv1800_mbox_xlate; > + > + irq = platform_get_irq_byname(pdev, "mailbox"); > + err = devm_request_threaded_irq(dev, irq, cv1800_mbox_irq, > + cv1800_mbox_isr, IRQF_ONESHOT, > + dev_name(&pdev->dev), mb); > + if (err < 0) > + return dev_err_probe(dev, err, "Failed to register irq\n"); > + > + for (idx = 0; idx < MAILBOX_MAX_CHAN; idx++) { > + mb->priv[idx].idx = idx; > + mb->mbox.chans[idx].con_priv = &mb->priv[idx]; > + } > + > + err = devm_mbox_controller_register(dev, &mb->mbox); > + if (err) > + return dev_err_probe(dev, err, "Failed to register mailbox\n"); > + > + platform_set_drvdata(pdev, mb); cv1800_mbox_send_data() could be called even inside devm_mbox_controller_register(), so this needs to be moved up. > + return 0; > +} > + > +static struct platform_driver cv1800_mbox_driver = { > + .driver = { > + .name = "cv1800-mbox", > + .of_match_table = cv1800_mbox_of_match, > + }, > + .probe = cv1800_mbox_probe, > +}; > + > +module_platform_driver(cv1800_mbox_driver); > + > +MODULE_DESCRIPTION("cv1800 mailbox driver"); > +MODULE_LICENSE("GPL"); ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for cv18x SoCs 2024-07-19 1:35 ` Samuel Holland @ 2024-07-22 17:02 ` Yuntao Dai 0 siblings, 0 replies; 17+ messages in thread From: Yuntao Dai @ 2024-07-22 17:02 UTC (permalink / raw) To: Samuel Holland Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, jassisinghbrar@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, unicorn_wang@outlook.com, inochiama@outlook.com, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu > From: Samuel Holland <samuel.holland@sifive.com> > Sent: Friday, July 19, 2024 09:35 > To: Yuntao Dai <d1581209858@live.com> > Cc: linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>; > devicetree@vger.kernel.org <devicetree@vger.kernel.org>; > linux-riscv@lists.infradead.org <linux-riscv@lists.infradead.org>; > jassisinghbrar@gmail.com <jassisinghbrar@gmail.com>; robh@kernel.org > <robh@kernel.org>; krzk+dt@kernel.org <krzk+dt@kernel.org>; > conor+dt@kernel.org <conor+dt@kernel.org>; unicorn_wang@outlook.com > <unicorn_wang@outlook.com>; inochiama@outlook.com > <inochiama@outlook.com>; paul.walmsley@sifive.com > <paul.walmsley@sifive.com>; palmer@dabbelt.com <palmer@dabbelt.com>; > aou@eecs.berkeley.edu <aou@eecs.berkeley.edu> > Subject: Re: [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for > cv18x SoCs > > On 2024-07-14 11:36 AM, Yuntao Dai wrote: > > Add mailbox controller driver for cv18x SoCs, tested on > mailbox-test > > client. > > > > Signed-off-by: Yuntao Dai <d1581209858@live.com> > > --- > > drivers/mailbox/Kconfig | 11 ++ > > drivers/mailbox/Makefile | 2 + > > drivers/mailbox/cv1800-mailbox.c | 203 > +++++++++++++++++++++++++++++++ > > 3 files changed, 216 insertions(+) > > create mode 100644 drivers/mailbox/cv1800-mailbox.c > > > > diff --git a/drivers/mailbox/Kconfig b/drivers/mailbox/Kconfig > > index 3b8842c4a..db856ec7e 100644 > > --- a/drivers/mailbox/Kconfig > > +++ b/drivers/mailbox/Kconfig > > @@ -286,4 +286,15 @@ config QCOM_IPCC > > acts as an interrupt controller for receiving interrupts > from clients. > > Say Y here if you want to build this driver. > > > > +config CV1800_MBOX > > + tristate "cv1800 mailbox" > > + depends on OF > > This dependency is not necessary once the probe function is fixed > (see below). > I will fix it. > > + depends on ARCH_SOPHGO || COMPILE_TEST > > + help > > + Mailbox driver implementation for Sophgo cv180x SoCs. This > driver > > + can be used to send message between different processors > in SoC. Any > > + processer can write data in a channel, and set > co-responding register > > + to raise interrupt to notice another processor, and it is > allowed to > > + send data to itself. > > + > > endif > > diff --git a/drivers/mailbox/Makefile b/drivers/mailbox/Makefile > > index 5cf2f54de..2c6db8c5c 100644 > > --- a/drivers/mailbox/Makefile > > +++ b/drivers/mailbox/Makefile > > @@ -62,3 +62,5 @@ obj-$(CONFIG_SUN6I_MSGBOX) += sun6i-msgbox.o > > obj-$(CONFIG_SPRD_MBOX) += sprd-mailbox.o > > > > obj-$(CONFIG_QCOM_IPCC) += qcom-ipcc.o > > + > > +obj-$(CONFIG_CV1800_MBOX) += cv1800-mailbox.o > > \ No newline at end of file > > Please add the missing newline. > > I will fix it > > diff --git a/drivers/mailbox/cv1800-mailbox.c > b/drivers/mailbox/cv1800-mailbox.c > > new file mode 100644 > > index 000000000..a3b214b4d > > --- /dev/null > > +++ b/drivers/mailbox/cv1800-mailbox.c > > @@ -0,0 +1,203 @@ > > +// SPDX-License-Identifier: GPL-2.0-or-later > > + > > +#include <linux/device.h> > > +#include <linux/err.h> > > +#include <linux/interrupt.h> > > +#include <linux/io.h> > > +#include <linux/kfifo.h> > > +#include <linux/mailbox_controller.h> > > +#include <linux/mailbox_client.h> > > +#include <linux/module.h> > > +#include <linux/platform_device.h> > > +#include <linux/slab.h> > > + > > +#define RECV_CPU 2 > > + > > +#define MAILBOX_MAX_CHAN 0x0008 > > +#define MAILBOX_DONE_OFFSET 0x0002 > > +#define MAILBOX_CONTEXT_SIZE 0x0040 > > +#define MAILBOX_CONTEXT_OFFSET 0x0400 > > + > > +#define MBOX_EN_REG(cpu) (cpu << 2) > > +#define MBOX_DONE_REG(cpu) ((cpu << 2) + MAILBOX_DONE_OFFSET) > > + > > +#define MBOX_SET_CLR_REG(cpu) (0x10 + (cpu << 4)) > > +#define MBOX_SET_INT_REG(cpu) (0x18 + (cpu << 4)) > > + > > +#define MBOX_SET_REG 0x60 > > + > > +/** > > + * cv1800 mailbox channel private data > > + * @idx: index of channel > > + * @cpu: send to which processor > > + */ > > +struct cv1800_mbox_chan_priv { > > + int idx; > > + int cpu; > > +}; > > + > > +struct cv1800_mbox { > > + struct mbox_controller mbox; > > + struct cv1800_mbox_chan_priv priv[MAILBOX_MAX_CHAN]; > > + struct mbox_chan chans[MAILBOX_MAX_CHAN]; > > + u64 __iomem *content[MAILBOX_MAX_CHAN]; > > + void __iomem *mbox_base; > > + int recvid; > > +}; > > + > > +static irqreturn_t cv1800_mbox_isr(int irq, void *dev_id) > > +{ > > + struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; > > + size_t i; > > + > > + for (i = 0; i < MAILBOX_MAX_CHAN; i++) { > > + if (mbox->content[i] && mbox->chans[i].cl) { > > + mbox_chan_received_data(&mbox->chans[i], > > + mbox->content[i]); > > + mbox->content[i] = NULL; > > + return IRQ_HANDLED; > > Are you sure you only want to handle one channel per interrupt? > Should this be > "ret = IRQ_HANDLED;" or similar instead of early return? The same > applies to > cv1800_mbox_irq(). > > I believe this approach can simplify the implementation. I utilize IRQ_ONESHOT to prevent interrupt racing, thereby avoiding the need for locking mbox->content in this scenario. And I see rockchip mailbox did the same thing. > > + } > > + } > > + return IRQ_NONE; > > +} > > + > > +static irqreturn_t cv1800_mbox_irq(int irq, void *dev_id) > > +{ > > + struct cv1800_mbox *mbox = (struct cv1800_mbox *)dev_id; > > + u64 __iomem *addr; > > + u8 set, valid; > > + size_t i; > > + > > + set = readb(mbox->mbox_base + MBOX_SET_INT_REG(RECV_CPU)); > > + > > + if (!set) > > + return IRQ_NONE; > > + > > + for (i = 0; i < MAILBOX_MAX_CHAN; i++) { > > + valid = set & (1 << i); > > + addr = (u64 *)(mbox->mbox_base + > MAILBOX_CONTEXT_OFFSET) + i; > > + if (valid) { > > + mbox->content[i] = addr; > > + writeb(valid, > > + mbox->mbox_base + > MBOX_SET_CLR_REG(RECV_CPU)); > > + writeb(~valid, mbox->mbox_base + > MBOX_EN_REG(RECV_CPU)); > > + return IRQ_WAKE_THREAD; > > + } > > + } > > + > > + return IRQ_NONE; > > +} > > + > > +static int cv1800_mbox_send_data(struct mbox_chan *chan, void > *data) > > +{ > > + struct cv1800_mbox_chan_priv *priv = > > + (struct cv1800_mbox_chan_priv *)chan->con_priv; > > + struct cv1800_mbox *mbox = dev_get_drvdata(chan->mbox->dev); > > + u64 __iomem *addr; > > + u8 en, valid; > > + > > + int idx = priv->idx; > > + int cpu = priv->cpu; > > + > > + addr = (u64 *)(mbox->mbox_base + MAILBOX_CONTEXT_OFFSET) + > idx; > > + memcpy_toio(addr, data, 8); > > + > > + valid = 1 << idx; > > + writeb(valid, mbox->mbox_base + MBOX_SET_CLR_REG(cpu)); > > + en = readb(mbox->mbox_base + MBOX_EN_REG(cpu)); > > + writeb(en | valid, mbox->mbox_base + MBOX_EN_REG(cpu)); > > + writeb(valid, mbox->mbox_base + MBOX_SET_REG); > > + > > + return 0; > > +} > > + > > +static bool cv1800_last_tx_done(struct mbox_chan *chan) > > +{ > > + return true; > > Shouldn't this check MBOX_EN_REG(priv->cpu) or similar to check that > the > receiver has read the message? > Yes, I think check MBOX_EN_REG(priv->cpu) is a good way to ensure content has been writen into hardware. And I think driver should only send the message and upper layer is responsible for ack and things like that. There is a vendor implementation of linux mailbox and RTOS mailbox: https://github.com/milkv-duo/duo-buildroot-sdk/blob/develop/linux_5.10/drivers/soc/cvitek/rtos_cmdqu/rtos_cmdqu.c https://github.com/milkv-duo/duo-buildroot-sdk/blob/develop/freertos/cvitek/task/comm/src/riscv64/comm_main.c These implementations define a protocol structure for communication between linux and RTOS, the linux mailbox controller just need to provide API for client and do not consider the content of msg. > > +} > > + > > +static const struct mbox_chan_ops cv1800_mbox_chan_ops = { > > + .send_data = cv1800_mbox_send_data, > > + .last_tx_done = cv1800_last_tx_done, > > +}; > > + > > +static struct mbox_chan *cv1800_mbox_xlate(struct mbox_controller > *mbox, > > + const struct > of_phandle_args *spec) > > +{ > > + struct cv1800_mbox_chan_priv *priv; > > + > > + int idx = spec->args[0]; > > + int cpu = spec->args[1]; > > + > > + if (idx >= mbox->num_chans) > > + return ERR_PTR(-EINVAL); > > + > > + priv = mbox->chans[idx].con_priv; > > + priv->cpu = cpu; > > + > > + return &mbox->chans[idx]; > > +} > > + > > +static const struct of_device_id cv1800_mbox_of_match[] = { > > + { .compatible = "sophgo,cv1800-mailbox", }, > > + {}, > > +}; > > +MODULE_DEVICE_TABLE(of, cv1800_mbox_of_match); > > + > > +static int cv1800_mbox_probe(struct platform_device *pdev) > > +{ > > + struct device *dev = &pdev->dev; > > + struct cv1800_mbox *mb; > > + int irq, idx, err; > > + > > + if (!dev->of_node) > > + return -ENODEV; > > No need for this check. I will fix it > > > + > > + mb = devm_kzalloc(dev, sizeof(*mb), GFP_KERNEL); > > + if (!mb) > > + return -ENOMEM; > > + > > + mb->mbox_base = devm_of_iomap(dev, dev->of_node, 0, NULL); > > Please use devm_platform_ioremap_resource() here, which abstracts > away the OF node. I will fix it > > > + if (IS_ERR(mb->mbox_base)) > > + return dev_err_probe(dev, PTR_ERR(mb->mbox_base), > > + "Failed to map resource\n"); > > + > > + mb->mbox.dev = dev; > > + mb->mbox.chans = mb->chans; > > + mb->mbox.txdone_poll = true; > > + mb->mbox.ops = &cv1800_mbox_chan_ops; > > + mb->mbox.num_chans = MAILBOX_MAX_CHAN; > > + mb->mbox.of_xlate = cv1800_mbox_xlate; > > + > > + irq = platform_get_irq_byname(pdev, "mailbox"); > > + err = devm_request_threaded_irq(dev, irq, cv1800_mbox_irq, > > + cv1800_mbox_isr, > IRQF_ONESHOT, > > + dev_name(&pdev->dev), mb); > > + if (err < 0) > > + return dev_err_probe(dev, err, "Failed to register > irq\n"); > > + > > + for (idx = 0; idx < MAILBOX_MAX_CHAN; idx++) { > > + mb->priv[idx].idx = idx; > > + mb->mbox.chans[idx].con_priv = &mb->priv[idx]; > > + } > > + > > + err = devm_mbox_controller_register(dev, &mb->mbox); > > + if (err) > > + return dev_err_probe(dev, err, "Failed to register > mailbox\n"); > > + > > + platform_set_drvdata(pdev, mb); > > cv1800_mbox_send_data() could be called even inside > devm_mbox_controller_register(), so this needs to be moved up. I will fix it > > > + return 0; > > +} > > + > > +static struct platform_driver cv1800_mbox_driver = { > > + .driver = { > > + .name = "cv1800-mbox", > > + .of_match_table = cv1800_mbox_of_match, > > + }, > > + .probe = cv1800_mbox_probe, > > +}; > > + > > +module_platform_driver(cv1800_mbox_driver); > > + > > +MODULE_DESCRIPTION("cv1800 mailbox driver"); > > +MODULE_LICENSE("GPL"); > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs 2024-07-14 16:28 [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs Yuntao Dai ` (2 preceding siblings ...) 2024-07-14 16:36 ` [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for " Yuntao Dai @ 2024-07-16 12:55 ` Chen Wang [not found] ` <MA0P287MB282276F453744C2ACC2FF627FEA22@MA0P287MB2822.INDP287.PROD.OUTLOOK.CO M> 3 siblings, 1 reply; 17+ messages in thread From: Chen Wang @ 2024-07-16 12:55 UTC (permalink / raw) To: Yuntao Dai, jassisinghbrar, robh, krzk+dt, conor+dt, inochiama, paul.walmsley, palmer, aou Cc: linux-kernel, devicetree, linux-riscv cv18x -> cv18xx, please check this for all patches, both title and message text. On 2024/7/15 0:28, Yuntao Dai wrote: > Add mailbox support for Sophgo cv18x SoCs, and test on both cv1800b SoC for > milkv-duo and cv1812h SoC for milkv-duo256m > > Changes in v2: > - drop 'recvid' 'sender' in dt-bindings > - fix compatible to 'cv1800-mailbox', and change filenames too > - change #mbox-cell to 2, for <channel tagert_cpu> > - add struct cv1800_mbox_chan_priv and function cv1800_mbox_xlate to extract > informations in mbox devicetree node of mailbox client > > Yuntao Dai (3): > dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox > riscv: dts: add mailbox for Sophgo cv18x SoCs > mailbox: sophgo: add mailbox driver for cv18x SoCs > > .../mailbox/sophgo,cv1800-mailbox.yaml | 61 ++++++ > arch/riscv/boot/dts/sophgo/cv18xx.dtsi | 9 + > drivers/mailbox/Kconfig | 11 + > drivers/mailbox/Makefile | 2 + > drivers/mailbox/cv1800-mailbox.c | 203 ++++++++++++++++++ > 5 files changed, 286 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml > create mode 100644 drivers/mailbox/cv1800-mailbox.c > ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <MA0P287MB282276F453744C2ACC2FF627FEA22@MA0P287MB2822.INDP287.PROD.OUTLOOK.CO M>]
* Re: [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs [not found] ` <MA0P287MB282276F453744C2ACC2FF627FEA22@MA0P287MB2822.INDP287.PROD.OUTLOOK.CO M> @ 2024-07-17 17:07 ` Yuntao Dai 0 siblings, 0 replies; 17+ messages in thread From: Yuntao Dai @ 2024-07-17 17:07 UTC (permalink / raw) To: Chen Wang Cc: jassisinghbrar, robh, krzk+dt, conor+dt, inochiama, paul.walmsley, palmer, aou, linux-kernel, devicetree, linux-riscv On Tue, Jul 16, 2024 at 8:55 PM, Chen Wang <unicorn_wang@outlook.com> wrote: > cv18x -> cv18xx, please check this for all patches, both title and > message text. > I will fix this > On 2024/7/15 0:28, Yuntao Dai wrote: >> Add mailbox support for Sophgo cv18x SoCs, and test on both cv1800b >> SoC for >> milkv-duo and cv1812h SoC for milkv-duo256m >> >> Changes in v2: >> - drop 'recvid' 'sender' in dt-bindings >> - fix compatible to 'cv1800-mailbox', and change filenames too >> - change #mbox-cell to 2, for <channel tagert_cpu> >> - add struct cv1800_mbox_chan_priv and function cv1800_mbox_xlate to >> extract >> informations in mbox devicetree node of mailbox client >> >> Yuntao Dai (3): >> dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox >> riscv: dts: add mailbox for Sophgo cv18x SoCs >> mailbox: sophgo: add mailbox driver for cv18x SoCs >> >> .../mailbox/sophgo,cv1800-mailbox.yaml | 61 ++++++ >> arch/riscv/boot/dts/sophgo/cv18xx.dtsi | 9 + >> drivers/mailbox/Kconfig | 11 + >> drivers/mailbox/Makefile | 2 + >> drivers/mailbox/cv1800-mailbox.c | 203 >> ++++++++++++++++++ >> 5 files changed, 286 insertions(+) >> create mode 100644 >> Documentation/devicetree/bindings/mailbox/sophgo,cv1800-mailbox.yaml >> create mode 100644 drivers/mailbox/cv1800-mailbox.c >> ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2024-07-22 17:02 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-14 16:28 [PATCH v2 0/3] riscv: sophgo: add mailbox support for cv18x SoCs Yuntao Dai
2024-07-14 16:36 ` [PATCH v2 1/3] dt-bindings: mailbox: add Sophgo cv18x SoCs mailbox Yuntao Dai
2024-07-15 2:56 ` Inochi Amaoto
2024-07-15 16:15 ` Conor Dooley
2024-07-17 17:06 ` Yuntao Dai
2024-07-17 17:12 ` Conor Dooley
[not found] ` <IA1PR20MB49537F9F04E601413EA1C86FBBA12@IA1PR20MB4953.namprd20.prod.outlook.c om>
2024-07-17 17:02 ` Yuntao Dai
2024-07-14 16:36 ` [PATCH v2 2/3] riscv: dts: add mailbox for Sophgo cv18x SoCs Yuntao Dai
2024-07-15 2:53 ` Inochi Amaoto
2024-07-19 1:19 ` Samuel Holland
2024-07-14 16:36 ` [PATCH v2 3/3] mailbox: sophgo: add mailbox driver for " Yuntao Dai
2024-07-15 1:59 ` kernel test robot
2024-07-15 9:09 ` kernel test robot
2024-07-19 1:35 ` Samuel Holland
2024-07-22 17:02 ` Yuntao Dai
2024-07-16 12:55 ` [PATCH v2 0/3] riscv: sophgo: add mailbox support " Chen Wang
[not found] ` <MA0P287MB282276F453744C2ACC2FF627FEA22@MA0P287MB2822.INDP287.PROD.OUTLOOK.CO M>
2024-07-17 17:07 ` Yuntao Dai
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox