* [RFC PATCH 0/4] can: bxcan: add support for ST bxCAN controller @ 2022-08-17 14:35 Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings Dario Binacchi ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Dario Binacchi @ 2022-08-17 14:35 UTC (permalink / raw) To: linux-kernel Cc: Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, David S. Miller, Eric Dumazet, Jakub Kicinski, Krzysztof Kozlowski, Maxime Coquelin, Paolo Abeni, Rob Herring, Wolfgang Grandegger, devicetree, linux-arm-kernel, linux-can, linux-stm32, netdev The series adds support for the basic extended CAN controller (bxCAN) found in many low- to middle-end STM32 SoCs. The driver has been tested on the stm32f469i-discovery board with a kernel version 5.19.0-rc2 in loopback + silent mode: ip link set can0 type can bitrate 125000 loopback on listen-only on ip link set up can0 candump can0 -L & cansend can0 300#AC.AB.AD.AE.75.49.AD.D1 For uboot and kernel compilation, as well as for rootfs creation I used buildroot: make stm32f469_disco_sd_defconfig make but I had to patch can-utils and busybox as can-utils and iproute are not compiled for MMU-less microcotrollers. In the case of can-utils, replacing the calls to fork() with vfork(), I was able to compile the package with working candump and cansend applications, while in the case of iproute, I ran into more than one problem and finally I decided to extend busybox's ip link command for CAN-type devices. I'm still wondering if it was really necessary, but this way I was able to test the driver. Dario Binacchi (4): dt-bindings: net: can: add STM32 bxcan DT bindings ARM: dts: stm32: add CAN support on stm32f429 ARM: dts: stm32: add pin map for CAN controller on stm32f4 can: bxcan: add support for ST bxCAN controller .../devicetree/bindings/net/can/st,bxcan.yaml | 139 +++ arch/arm/boot/dts/stm32f4-pinctrl.dtsi | 32 + arch/arm/boot/dts/stm32f429.dtsi | 30 + drivers/net/can/Kconfig | 1 + drivers/net/can/Makefile | 1 + drivers/net/can/bxcan/Kconfig | 34 + drivers/net/can/bxcan/Makefile | 4 + drivers/net/can/bxcan/bxcan-core.c | 201 ++++ drivers/net/can/bxcan/bxcan-core.h | 33 + drivers/net/can/bxcan/bxcan-drv.c | 980 ++++++++++++++++++ 10 files changed, 1455 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/can/st,bxcan.yaml create mode 100644 drivers/net/can/bxcan/Kconfig create mode 100644 drivers/net/can/bxcan/Makefile create mode 100644 drivers/net/can/bxcan/bxcan-core.c create mode 100644 drivers/net/can/bxcan/bxcan-core.h create mode 100644 drivers/net/can/bxcan/bxcan-drv.c -- 2.32.0 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings 2022-08-17 14:35 [RFC PATCH 0/4] can: bxcan: add support for ST bxCAN controller Dario Binacchi @ 2022-08-17 14:35 ` Dario Binacchi 2022-08-18 8:22 ` Krzysztof Kozlowski 2022-08-17 14:35 ` [RFC PATCH 2/4] ARM: dts: stm32: add CAN support on stm32f429 Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 3/4] ARM: dts: stm32: add pin map for CAN controller on stm32f4 Dario Binacchi 2 siblings, 1 reply; 9+ messages in thread From: Dario Binacchi @ 2022-08-17 14:35 UTC (permalink / raw) To: linux-kernel Cc: Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, Dario Binacchi, David S. Miller, Eric Dumazet, Jakub Kicinski, Krzysztof Kozlowski, Paolo Abeni, Rob Herring, Wolfgang Grandegger, devicetree, linux-can, netdev Add documentation of device tree bindings for the STM32 basic extended CAN (bxcan) controller. Signed-off-by: Dario Binacchi <dariobin@libero.it> Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> --- .../devicetree/bindings/net/can/st,bxcan.yaml | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/can/st,bxcan.yaml diff --git a/Documentation/devicetree/bindings/net/can/st,bxcan.yaml b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml new file mode 100644 index 000000000000..f4cfd26e4785 --- /dev/null +++ b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml @@ -0,0 +1,139 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/can/st,bxcan.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: STMicroelectronics bxCAN controller Device Tree Bindings + +description: STMicroelectronics BxCAN controller for CAN bus + +maintainers: + - Dario Binacchi <dario.binacchi@amarulasolutions.com> + +allOf: + - $ref: can-controller.yaml# + +properties: + compatible: + enum: + - st,stm32-bxcan-core + + reg: + maxItems: 1 + + resets: + maxItems: 1 + + clocks: + description: + Input clock for registers access + maxItems: 1 + + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + +required: + - compatible + - reg + - resets + - clocks + - '#address-cells' + - '#size-cells' + +additionalProperties: false + +patternProperties: + "^can@[0-9]+$": + type: object + description: + A CAN block node contains two subnodes, representing each one a CAN + instance available on the machine. + + properties: + compatible: + enum: + - st,stm32-bxcan + + master: + description: + Master and slave mode of the bxCAN peripheral is only relevant + if the chip has two CAN peripherals. In that case they share + some of the required logic, and that means you cannot use the + slave CAN without the master CAN. + type: boolean + + reg: + description: | + Offset of CAN instance in CAN block. Valid values are: + - 0x0: CAN1 + - 0x400: CAN2 + maxItems: 1 + + interrupts: + items: + - description: transmit interrupt + - description: FIFO 0 receive interrupt + - description: FIFO 1 receive interrupt + - description: status change error interrupt + + interrupt-names: + items: + - const: tx + - const: rx0 + - const: rx1 + - const: sce + + resets: + maxItems: 1 + + clocks: + description: + Input clock for registers access + maxItems: 1 + + additionalProperties: false + + required: + - compatible + - reg + - interrupts + - resets + +examples: + - | + #include <dt-bindings/clock/stm32fx-clock.h> + #include <dt-bindings/mfd/stm32f4-rcc.h> + + can: can@40006400 { + compatible = "st,stm32-bxcan-core"; + reg = <0x40006400 0x800>; + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN1)>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + + can1: can@0 { + compatible = "st,stm32-bxcan"; + reg = <0x0>; + interrupts = <19>, <20>, <21>, <22>; + interrupt-names = "tx", "rx0", "rx1", "sce"; + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; + master; + status = "disabled"; + }; + + can2: can@400 { + compatible = "st,stm32-bxcan"; + reg = <0x400>; + interrupts = <63>, <64>, <65>, <66>; + interrupt-names = "tx", "rx0", "rx1", "sce"; + resets = <&rcc STM32F4_APB1_RESET(CAN2)>; + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN2)>; + status = "disabled"; + }; + }; -- 2.32.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings 2022-08-17 14:35 ` [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings Dario Binacchi @ 2022-08-18 8:22 ` Krzysztof Kozlowski 2022-08-20 8:08 ` Dario Binacchi 0 siblings, 1 reply; 9+ messages in thread From: Krzysztof Kozlowski @ 2022-08-18 8:22 UTC (permalink / raw) To: Dario Binacchi, linux-kernel Cc: Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, David S. Miller, Eric Dumazet, Jakub Kicinski, Krzysztof Kozlowski, Paolo Abeni, Rob Herring, Wolfgang Grandegger, devicetree, linux-can, netdev On 17/08/2022 17:35, Dario Binacchi wrote: > Add documentation of device tree bindings for the STM32 basic extended > CAN (bxcan) controller. > > Signed-off-by: Dario Binacchi <dariobin@libero.it> > Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> You do not need two SoBs. Keep only one, matching the From field. > --- > > .../devicetree/bindings/net/can/st,bxcan.yaml | 139 ++++++++++++++++++ > 1 file changed, 139 insertions(+) > create mode 100644 Documentation/devicetree/bindings/net/can/st,bxcan.yaml > > diff --git a/Documentation/devicetree/bindings/net/can/st,bxcan.yaml b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml > new file mode 100644 > index 000000000000..f4cfd26e4785 > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml File name like compatible, so st,stm32-bxcan-core.yaml (or some other name, see comment later) > @@ -0,0 +1,139 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/net/can/st,bxcan.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: STMicroelectronics bxCAN controller Device Tree Bindings s/Device Tree Bindings// > + > +description: STMicroelectronics BxCAN controller for CAN bus > + > +maintainers: > + - Dario Binacchi <dario.binacchi@amarulasolutions.com> > + > +allOf: > + - $ref: can-controller.yaml# > + > +properties: > + compatible: > + enum: > + - st,stm32-bxcan-core compatibles are supposed to be specific. If this is some type of micro-SoC, then it should have its name/number. If it is dedicated device, is the final name bxcan core? Google says the first is true, so you miss specific device part. > + > + reg: > + maxItems: 1 > + > + resets: > + maxItems: 1 > + > + clocks: > + description: > + Input clock for registers access > + maxItems: 1 > + > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > +required: > + - compatible > + - reg > + - resets > + - clocks > + - '#address-cells' > + - '#size-cells' > + > +additionalProperties: false > + > +patternProperties: This goes after "properties: in top level (before "required"). > + "^can@[0-9]+$": > + type: object > + description: > + A CAN block node contains two subnodes, representing each one a CAN > + instance available on the machine. > + > + properties: > + compatible: > + enum: > + - st,stm32-bxcan Why exactly do you need compatible for the child? Is it an entierly separate device? Comments about specific part are applied here as well. > + > + master: Is this a standard property? I don't see it anywhere else. Non-standard properties require vendor prefix. > + description: > + Master and slave mode of the bxCAN peripheral is only relevant > + if the chip has two CAN peripherals. In that case they share > + some of the required logic, and that means you cannot use the > + slave CAN without the master CAN. > + type: boolean > + > + reg: > + description: | > + Offset of CAN instance in CAN block. Valid values are: > + - 0x0: CAN1 > + - 0x400: CAN2 > + maxItems: 1 > + > + interrupts: > + items: > + - description: transmit interrupt > + - description: FIFO 0 receive interrupt > + - description: FIFO 1 receive interrupt > + - description: status change error interrupt > + > + interrupt-names: > + items: > + - const: tx > + - const: rx0 > + - const: rx1 > + - const: sce > + > + resets: > + maxItems: 1 > + > + clocks: > + description: > + Input clock for registers access > + maxItems: 1 > + > + additionalProperties: false > + > + required: > + - compatible > + - reg > + - interrupts > + - resets > + > +examples: > + - | > + #include <dt-bindings/clock/stm32fx-clock.h> > + #include <dt-bindings/mfd/stm32f4-rcc.h> > + > + can: can@40006400 { > + compatible = "st,stm32-bxcan-core"; > + reg = <0x40006400 0x800>; > + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; > + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN1)>; > + #address-cells = <1>; > + #size-cells = <0>; > + status = "disabled"; No status in examples. > + > + can1: can@0 { > + compatible = "st,stm32-bxcan"; > + reg = <0x0>; > + interrupts = <19>, <20>, <21>, <22>; > + interrupt-names = "tx", "rx0", "rx1", "sce"; > + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; > + master; > + status = "disabled"; No status in examples. > + }; > + > + can2: can@400 { > + compatible = "st,stm32-bxcan"; > + reg = <0x400>; > + interrupts = <63>, <64>, <65>, <66>; > + interrupt-names = "tx", "rx0", "rx1", "sce"; > + resets = <&rcc STM32F4_APB1_RESET(CAN2)>; > + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN2)>; > + status = "disabled"; No status in examples. > + }; > + }; Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings 2022-08-18 8:22 ` Krzysztof Kozlowski @ 2022-08-20 8:08 ` Dario Binacchi 2022-08-22 17:39 ` Krzysztof Kozlowski 0 siblings, 1 reply; 9+ messages in thread From: Dario Binacchi @ 2022-08-20 8:08 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: linux-kernel, Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, David S. Miller, Eric Dumazet, Jakub Kicinski, Krzysztof Kozlowski, Paolo Abeni, Rob Herring, Wolfgang Grandegger, devicetree, linux-can, netdev Hi Krzysztof, On Thu, Aug 18, 2022 at 10:22 AM Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> wrote: > > On 17/08/2022 17:35, Dario Binacchi wrote: > > Add documentation of device tree bindings for the STM32 basic extended > > CAN (bxcan) controller. > > > > Signed-off-by: Dario Binacchi <dariobin@libero.it> > > Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> > > You do not need two SoBs. Keep only one, matching the From field. I started implementing this driver in my spare time, so my intention was to keep track of it. > > > --- > > > > .../devicetree/bindings/net/can/st,bxcan.yaml | 139 ++++++++++++++++++ > > 1 file changed, 139 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/net/can/st,bxcan.yaml > > > > diff --git a/Documentation/devicetree/bindings/net/can/st,bxcan.yaml b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml > > new file mode 100644 > > index 000000000000..f4cfd26e4785 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml > > File name like compatible, so st,stm32-bxcan-core.yaml (or some other > name, see comment later) > > > @@ -0,0 +1,139 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/net/can/st,bxcan.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: STMicroelectronics bxCAN controller Device Tree Bindings > > s/Device Tree Bindings// > > > + > > +description: STMicroelectronics BxCAN controller for CAN bus > > + > > +maintainers: > > + - Dario Binacchi <dario.binacchi@amarulasolutions.com> > > + > > +allOf: > > + - $ref: can-controller.yaml# > > + > > +properties: > > + compatible: > > + enum: > > + - st,stm32-bxcan-core > > compatibles are supposed to be specific. If this is some type of > micro-SoC, then it should have its name/number. If it is dedicated > device, is the final name bxcan core? Google says the first is true, so > you miss specific device part. I don't know if I understand correctly, I hope the change in version 2 is what you requested. > > > + > > + reg: > > + maxItems: 1 > > + > > + resets: > > + maxItems: 1 > > + > > + clocks: > > + description: > > + Input clock for registers access > > + maxItems: 1 > > + > > + '#address-cells': > > + const: 1 > > + > > + '#size-cells': > > + const: 0 > > + > > +required: > > + - compatible > > + - reg > > + - resets > > + - clocks > > + - '#address-cells' > > + - '#size-cells' > > + > > +additionalProperties: false > > + > > +patternProperties: > > This goes after "properties: in top level (before "required"). > > > + "^can@[0-9]+$": > > + type: object > > + description: > > + A CAN block node contains two subnodes, representing each one a CAN > > + instance available on the machine. > > + > > + properties: > > + compatible: > > + enum: > > + - st,stm32-bxcan > > Why exactly do you need compatible for the child? Is it an entierly > separate device? I took inspiration from other drivers for ST microcontroller peripherals (e. g. drivers/iio/adc/stm32-adc-core.c, drivers/iio/adc/stm32-adc.c) where some resources are shared between the peripheral instances. In the case of CAN, master (CAN1) and slave (CAN2) share the registers for configuring the filters and the clock. In the core module you can find the functions about the shared resources, while the childrens implement the driver. > > Comments about specific part are applied here as well. > > > + > > + master: > > Is this a standard property? no > I don't see it anywhere else. Non-standard > properties require vendor prefix. ok, you'll find it in V2. Thanks and regards, Dario > > > + description: > > + Master and slave mode of the bxCAN peripheral is only relevant > > + if the chip has two CAN peripherals. In that case they share > > + some of the required logic, and that means you cannot use the > > + slave CAN without the master CAN. > > + type: boolean > > + > > + reg: > > + description: | > > + Offset of CAN instance in CAN block. Valid values are: > > + - 0x0: CAN1 > > + - 0x400: CAN2 > > + maxItems: 1 > > + > > + interrupts: > > + items: > > + - description: transmit interrupt > > + - description: FIFO 0 receive interrupt > > + - description: FIFO 1 receive interrupt > > + - description: status change error interrupt > > + > > + interrupt-names: > > + items: > > + - const: tx > > + - const: rx0 > > + - const: rx1 > > + - const: sce > > + > > + resets: > > + maxItems: 1 > > + > > + clocks: > > + description: > > + Input clock for registers access > > + maxItems: 1 > > + > > + additionalProperties: false > > + > > + required: > > + - compatible > > + - reg > > + - interrupts > > + - resets > > + > > +examples: > > + - | > > + #include <dt-bindings/clock/stm32fx-clock.h> > > + #include <dt-bindings/mfd/stm32f4-rcc.h> > > + > > + can: can@40006400 { > > + compatible = "st,stm32-bxcan-core"; > > + reg = <0x40006400 0x800>; > > + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; > > + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN1)>; > > + #address-cells = <1>; > > + #size-cells = <0>; > > + status = "disabled"; > > No status in examples. > > > + > > + can1: can@0 { > > + compatible = "st,stm32-bxcan"; > > + reg = <0x0>; > > + interrupts = <19>, <20>, <21>, <22>; > > + interrupt-names = "tx", "rx0", "rx1", "sce"; > > + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; > > + master; > > + status = "disabled"; > > No status in examples. > > > > + }; > > + > > + can2: can@400 { > > + compatible = "st,stm32-bxcan"; > > + reg = <0x400>; > > + interrupts = <63>, <64>, <65>, <66>; > > + interrupt-names = "tx", "rx0", "rx1", "sce"; > > + resets = <&rcc STM32F4_APB1_RESET(CAN2)>; > > + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN2)>; > > + status = "disabled"; > > No status in examples. > > > + }; > > + }; > > > Best regards, > Krzysztof -- Dario Binacchi Embedded Linux Developer dario.binacchi@amarulasolutions.com __________________________________ Amarula Solutions SRL Via Le Canevare 30, 31100 Treviso, Veneto, IT T. +39 042 243 5310 info@amarulasolutions.com www.amarulasolutions.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings 2022-08-20 8:08 ` Dario Binacchi @ 2022-08-22 17:39 ` Krzysztof Kozlowski 2022-08-26 7:20 ` Dario Binacchi 0 siblings, 1 reply; 9+ messages in thread From: Krzysztof Kozlowski @ 2022-08-22 17:39 UTC (permalink / raw) To: Dario Binacchi Cc: linux-kernel, Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, David S. Miller, Eric Dumazet, Jakub Kicinski, Krzysztof Kozlowski, Paolo Abeni, Rob Herring, Wolfgang Grandegger, devicetree, linux-can, netdev On 20/08/2022 11:08, Dario Binacchi wrote: > Hi Krzysztof, > > On Thu, Aug 18, 2022 at 10:22 AM Krzysztof Kozlowski > <krzysztof.kozlowski@linaro.org> wrote: >> >> On 17/08/2022 17:35, Dario Binacchi wrote: >>> Add documentation of device tree bindings for the STM32 basic extended >>> CAN (bxcan) controller. >>> >>> Signed-off-by: Dario Binacchi <dariobin@libero.it> >>> Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> >> >> You do not need two SoBs. Keep only one, matching the From field. > > I started implementing this driver in my spare time, so my intention > was to keep track of it. SoB is not related to copyrights. Keep personal copyrights (with/next to work ones), but SoB is coming from a person and that's only one. Choose one "person". > >> >>> --- >>> >>> .../devicetree/bindings/net/can/st,bxcan.yaml | 139 ++++++++++++++++++ >>> 1 file changed, 139 insertions(+) >>> create mode 100644 Documentation/devicetree/bindings/net/can/st,bxcan.yaml >>> >>> diff --git a/Documentation/devicetree/bindings/net/can/st,bxcan.yaml b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml >>> new file mode 100644 >>> index 000000000000..f4cfd26e4785 >>> --- /dev/null >>> +++ b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml >> >> File name like compatible, so st,stm32-bxcan-core.yaml (or some other >> name, see comment later) > >> >>> @@ -0,0 +1,139 @@ >>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) >>> +%YAML 1.2 >>> +--- >>> +$id: http://devicetree.org/schemas/net/can/st,bxcan.yaml# >>> +$schema: http://devicetree.org/meta-schemas/core.yaml# >>> + >>> +title: STMicroelectronics bxCAN controller Device Tree Bindings >> >> s/Device Tree Bindings// > >> >>> + >>> +description: STMicroelectronics BxCAN controller for CAN bus >>> + >>> +maintainers: >>> + - Dario Binacchi <dario.binacchi@amarulasolutions.com> >>> + >>> +allOf: >>> + - $ref: can-controller.yaml# >>> + >>> +properties: >>> + compatible: >>> + enum: >>> + - st,stm32-bxcan-core >> >> compatibles are supposed to be specific. If this is some type of >> micro-SoC, then it should have its name/number. If it is dedicated >> device, is the final name bxcan core? Google says the first is true, so >> you miss specific device part. > > I don't know if I understand correctly, I hope the change in version 2 > is what you requested. What is the name of the SoC, where this is in? > >> >>> + >>> + reg: >>> + maxItems: 1 >>> + >>> + resets: >>> + maxItems: 1 >>> + >>> + clocks: >>> + description: >>> + Input clock for registers access >>> + maxItems: 1 >>> + >>> + '#address-cells': >>> + const: 1 >>> + >>> + '#size-cells': >>> + const: 0 >>> + >>> +required: >>> + - compatible >>> + - reg >>> + - resets >>> + - clocks >>> + - '#address-cells' >>> + - '#size-cells' >>> + >>> +additionalProperties: false >>> + >>> +patternProperties: >> >> This goes after "properties: in top level (before "required"). >> >>> + "^can@[0-9]+$": >>> + type: object >>> + description: >>> + A CAN block node contains two subnodes, representing each one a CAN >>> + instance available on the machine. >>> + >>> + properties: >>> + compatible: >>> + enum: >>> + - st,stm32-bxcan >> >> Why exactly do you need compatible for the child? Is it an entierly >> separate device? > > I took inspiration from other drivers for ST microcontroller > peripherals (e. g. drivers/iio/adc/stm32-adc-core.c, > drivers/iio/adc/stm32-adc.c) where > some resources are shared between the peripheral instances. In the > case of CAN, master (CAN1) and slave (CAN2) share the registers for > configuring the filters and the clock. > In the core module you can find the functions about the shared > resources, while the childrens implement the driver. In both cases you refer to the driver, but we talk here about bindings which are rather not related. So I repeat the question - is the child entirely separate device which can be used in other devices? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings 2022-08-22 17:39 ` Krzysztof Kozlowski @ 2022-08-26 7:20 ` Dario Binacchi 0 siblings, 0 replies; 9+ messages in thread From: Dario Binacchi @ 2022-08-26 7:20 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: linux-kernel, Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, David S. Miller, Eric Dumazet, Jakub Kicinski, Krzysztof Kozlowski, Paolo Abeni, Rob Herring, Wolfgang Grandegger, devicetree, linux-can, netdev Hi Krzysztof, On Mon, Aug 22, 2022 at 7:39 PM Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> wrote: > > On 20/08/2022 11:08, Dario Binacchi wrote: > > Hi Krzysztof, > > > > On Thu, Aug 18, 2022 at 10:22 AM Krzysztof Kozlowski > > <krzysztof.kozlowski@linaro.org> wrote: > >> > >> On 17/08/2022 17:35, Dario Binacchi wrote: > >>> Add documentation of device tree bindings for the STM32 basic extended > >>> CAN (bxcan) controller. > >>> > >>> Signed-off-by: Dario Binacchi <dariobin@libero.it> > >>> Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> > >> > >> You do not need two SoBs. Keep only one, matching the From field. > > > > I started implementing this driver in my spare time, so my intention > > was to keep track of it. > > SoB is not related to copyrights. Keep personal copyrights (with/next to > work ones), but SoB is coming from a person and that's only one. Choose > one "person". Ok, I got it. > > > > >> > >>> --- > >>> > >>> .../devicetree/bindings/net/can/st,bxcan.yaml | 139 ++++++++++++++++++ > >>> 1 file changed, 139 insertions(+) > >>> create mode 100644 Documentation/devicetree/bindings/net/can/st,bxcan.yaml > >>> > >>> diff --git a/Documentation/devicetree/bindings/net/can/st,bxcan.yaml b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml > >>> new file mode 100644 > >>> index 000000000000..f4cfd26e4785 > >>> --- /dev/null > >>> +++ b/Documentation/devicetree/bindings/net/can/st,bxcan.yaml > >> > >> File name like compatible, so st,stm32-bxcan-core.yaml (or some other > >> name, see comment later) > > > >> > >>> @@ -0,0 +1,139 @@ > >>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > >>> +%YAML 1.2 > >>> +--- > >>> +$id: http://devicetree.org/schemas/net/can/st,bxcan.yaml# > >>> +$schema: http://devicetree.org/meta-schemas/core.yaml# > >>> + > >>> +title: STMicroelectronics bxCAN controller Device Tree Bindings > >> > >> s/Device Tree Bindings// > > > >> > >>> + > >>> +description: STMicroelectronics BxCAN controller for CAN bus > >>> + > >>> +maintainers: > >>> + - Dario Binacchi <dario.binacchi@amarulasolutions.com> > >>> + > >>> +allOf: > >>> + - $ref: can-controller.yaml# > >>> + > >>> +properties: > >>> + compatible: > >>> + enum: > >>> + - st,stm32-bxcan-core > >> > >> compatibles are supposed to be specific. If this is some type of > >> micro-SoC, then it should have its name/number. If it is dedicated > >> device, is the final name bxcan core? Google says the first is true, so > >> you miss specific device part. > > > > I don't know if I understand correctly, I hope the change in version 2 > > is what you requested. > > What is the name of the SoC, where this is in? STM32F4 > > > > >> > >>> + > >>> + reg: > >>> + maxItems: 1 > >>> + > >>> + resets: > >>> + maxItems: 1 > >>> + > >>> + clocks: > >>> + description: > >>> + Input clock for registers access > >>> + maxItems: 1 > >>> + > >>> + '#address-cells': > >>> + const: 1 > >>> + > >>> + '#size-cells': > >>> + const: 0 > >>> + > >>> +required: > >>> + - compatible > >>> + - reg > >>> + - resets > >>> + - clocks > >>> + - '#address-cells' > >>> + - '#size-cells' > >>> + > >>> +additionalProperties: false > >>> + > >>> +patternProperties: > >> > >> This goes after "properties: in top level (before "required"). > >> > >>> + "^can@[0-9]+$": > >>> + type: object > >>> + description: > >>> + A CAN block node contains two subnodes, representing each one a CAN > >>> + instance available on the machine. > >>> + > >>> + properties: > >>> + compatible: > >>> + enum: > >>> + - st,stm32-bxcan > >> > >> Why exactly do you need compatible for the child? Is it an entierly > >> separate device? > > > > I took inspiration from other drivers for ST microcontroller > > peripherals (e. g. drivers/iio/adc/stm32-adc-core.c, > > drivers/iio/adc/stm32-adc.c) where > > some resources are shared between the peripheral instances. In the > > case of CAN, master (CAN1) and slave (CAN2) share the registers for > > configuring the filters and the clock. > > In the core module you can find the functions about the shared > > resources, while the childrens implement the driver. > > In both cases you refer to the driver, but we talk here about bindings > which are rather not related. So I repeat the question - is the child > entirely separate device which can be used in other devices? IMHO, I think so. Thanks and regards, Dario > > > Best regards, > Krzysztof -- Dario Binacchi Embedded Linux Developer dario.binacchi@amarulasolutions.com __________________________________ Amarula Solutions SRL Via Le Canevare 30, 31100 Treviso, Veneto, IT T. +39 042 243 5310 info@amarulasolutions.com www.amarulasolutions.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC PATCH 2/4] ARM: dts: stm32: add CAN support on stm32f429 2022-08-17 14:35 [RFC PATCH 0/4] can: bxcan: add support for ST bxCAN controller Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings Dario Binacchi @ 2022-08-17 14:35 ` Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 3/4] ARM: dts: stm32: add pin map for CAN controller on stm32f4 Dario Binacchi 2 siblings, 0 replies; 9+ messages in thread From: Dario Binacchi @ 2022-08-17 14:35 UTC (permalink / raw) To: linux-kernel Cc: Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, Dario Binacchi, Krzysztof Kozlowski, Maxime Coquelin, Rob Herring, devicetree, linux-arm-kernel, linux-stm32 Add support for bxcan (Basic eXtended CAN controller) to STM32F429. The chip contains two CAN peripherals, CAN1 the master and CAN2 the slave, that share some of the required logic like clock and filters. This means that the slave CAN can't be used without the master CAN. Signed-off-by: Dario Binacchi <dariobin@libero.it> Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> --- arch/arm/boot/dts/stm32f429.dtsi | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/arch/arm/boot/dts/stm32f429.dtsi b/arch/arm/boot/dts/stm32f429.dtsi index c31ceb821231..28db387ad5e8 100644 --- a/arch/arm/boot/dts/stm32f429.dtsi +++ b/arch/arm/boot/dts/stm32f429.dtsi @@ -362,6 +362,36 @@ i2c3: i2c@40005c00 { status = "disabled"; }; + can: can@40006400 { + compatible = "st,stm32-bxcan-core"; + reg = <0x40006400 0x800>; + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN1)>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + + can1: can@0 { + compatible = "st,stm32-bxcan"; + reg = <0x0>; + interrupts = <19>, <20>, <21>, <22>; + interrupt-names = "tx", "rx0", "rx1", "sce"; + resets = <&rcc STM32F4_APB1_RESET(CAN1)>; + master; + status = "disabled"; + }; + + can2: can@400 { + compatible = "st,stm32-bxcan"; + reg = <0x400>; + interrupts = <63>, <64>, <65>, <66>; + interrupt-names = "tx", "rx0", "rx1", "sce"; + resets = <&rcc STM32F4_APB1_RESET(CAN2)>; + clocks = <&rcc 0 STM32F4_APB1_CLOCK(CAN2)>; + status = "disabled"; + }; + }; + dac: dac@40007400 { compatible = "st,stm32f4-dac-core"; reg = <0x40007400 0x400>; -- 2.32.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC PATCH 3/4] ARM: dts: stm32: add pin map for CAN controller on stm32f4 2022-08-17 14:35 [RFC PATCH 0/4] can: bxcan: add support for ST bxCAN controller Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 2/4] ARM: dts: stm32: add CAN support on stm32f429 Dario Binacchi @ 2022-08-17 14:35 ` Dario Binacchi 2022-08-18 8:22 ` Krzysztof Kozlowski 2 siblings, 1 reply; 9+ messages in thread From: Dario Binacchi @ 2022-08-17 14:35 UTC (permalink / raw) To: linux-kernel Cc: Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, Dario Binacchi, Krzysztof Kozlowski, Maxime Coquelin, Rob Herring, devicetree, linux-arm-kernel, linux-stm32 Add pin configurations for using CAN controller on stm32f469-disco board. They are located on the Arduino compatible connector CN5 (CAN1) and on the extension connector CN12 (CAN2). Signed-off-by: Dario Binacchi <dariobin@libero.it> Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> --- arch/arm/boot/dts/stm32f4-pinctrl.dtsi | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/arch/arm/boot/dts/stm32f4-pinctrl.dtsi b/arch/arm/boot/dts/stm32f4-pinctrl.dtsi index 500bcc302d42..a8709363898a 100644 --- a/arch/arm/boot/dts/stm32f4-pinctrl.dtsi +++ b/arch/arm/boot/dts/stm32f4-pinctrl.dtsi @@ -448,6 +448,38 @@ pins2 { slew-rate = <2>; }; }; + + can1_pins_a: can1-0 { + pins1 { + pinmux = <STM32_PINMUX('B', 9, AF9)>; /* CAN1_TX */ + }; + pins2 { + pinmux = <STM32_PINMUX('B', 8, AF9)>; /* CAN1_RX */ + bias-pull-up; + }; + }; + + can2_pins_a: can2-0 { + pins1 { + pinmux = <STM32_PINMUX('B', 13, AF9)>; /* CAN2_TX */ + }; + pins2 { + pinmux = <STM32_PINMUX('B', 5, AF9)>; /* CAN2_RX */ + bias-pull-up; + }; + }; + + can2_pins_b: can2-1 { + pins1 { + pinmux = <STM32_PINMUX('B', 13, AF9)>; /* CAN2_TX */ + + }; + pins2 { + pinmux = <STM32_PINMUX('B', 12, AF9)>; /* CAN2_RX */ + bias-pull-up; + }; + }; + }; }; }; -- 2.32.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 3/4] ARM: dts: stm32: add pin map for CAN controller on stm32f4 2022-08-17 14:35 ` [RFC PATCH 3/4] ARM: dts: stm32: add pin map for CAN controller on stm32f4 Dario Binacchi @ 2022-08-18 8:22 ` Krzysztof Kozlowski 0 siblings, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2022-08-18 8:22 UTC (permalink / raw) To: Dario Binacchi, linux-kernel Cc: Alexandre Torgue, Amarula patchwork, michael, Marc Kleine-Budde, Dario Binacchi, Krzysztof Kozlowski, Maxime Coquelin, Rob Herring, devicetree, linux-arm-kernel, linux-stm32 On 17/08/2022 17:35, Dario Binacchi wrote: > Add pin configurations for using CAN controller on stm32f469-disco > board. They are located on the Arduino compatible connector CN5 (CAN1) > and on the extension connector CN12 (CAN2). > > + > + can2_pins_b: can2-1 { > + pins1 { > + pinmux = <STM32_PINMUX('B', 13, AF9)>; /* CAN2_TX */ > + > + }; > + pins2 { > + pinmux = <STM32_PINMUX('B', 12, AF9)>; /* CAN2_RX */ > + bias-pull-up; > + }; > + }; > + No need for blank line. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-08-26 7:20 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-08-17 14:35 [RFC PATCH 0/4] can: bxcan: add support for ST bxCAN controller Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 1/4] dt-bindings: net: can: add STM32 bxcan DT bindings Dario Binacchi 2022-08-18 8:22 ` Krzysztof Kozlowski 2022-08-20 8:08 ` Dario Binacchi 2022-08-22 17:39 ` Krzysztof Kozlowski 2022-08-26 7:20 ` Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 2/4] ARM: dts: stm32: add CAN support on stm32f429 Dario Binacchi 2022-08-17 14:35 ` [RFC PATCH 3/4] ARM: dts: stm32: add pin map for CAN controller on stm32f4 Dario Binacchi 2022-08-18 8:22 ` Krzysztof Kozlowski
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).