[PATCH v3 3/3] ARM: dts: stm32: add initial support for stm32mp157-odyssey board

Marcin Słoniewski marcin.sloniewski at gmail.com
Fri Jul 24 10:09:38 EDT 2020


Hi,

pt., 24 lip 2020 o 11:17 Ahmad Fatoum <a.fatoum at pengutronix.de> napisał(a):
>
> Hi,
>
> On 7/23/20 9:43 PM, Marcin Słoniewski wrote:
> > Hello Ahmad,
> >
> > First of all thank you very much for your feedback, it was very helpful!
> >
> > śr., 22 lip 2020 o 08:40 Ahmad Fatoum <a.fatoum at pengutronix.de> napisał(a):
> >>
> >> On 7/21/20 8:53 PM, Marcin Sloniewski wrote:
> >>> Add support for Seeed Studio's stm32mp157c odyssey board.
> >>> Board consists of SoM with stm32mp157c with 4GB eMMC and 512 MB DDR3 RAM
> >>> and carrier board with USB and ETH interfaces, SD card connector,
> >>> wifi and BT chip AP6236.
> >>>
> >>> In this patch only basic kernel boot is supported and interfacing
> >>> SD card and on-board eMMC.
> >>>
> >>> Signed-off-by: Marcin Sloniewski <marcin.sloniewski at gmail.com>
> >>> ---
> >>>
> >>> Changes in v3:
> >>> - fix compilation on tip of stm32-next
> >>>   due to change in names for pinctrl
> >>> - fix deprecated binding for led node
> >>> - fix redundant "okay" statuses
> >>> - add phy part number for eth in comment
> >>
> >> You didn't address all my feedback on v2.
> > I posted today v4 of the patch-set with further changes.
> > Regarding watchdog from pmic: when using this watchdog
> > my board resets even though I feed the watchdog. I'm going to
> > use the internal watchdog for now and keep in mind that this
> > could be improved in future.
>
> Who turns on the watchdog? If it's in the bootloader,
> you can't rely on CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED feeding it till
> userspace takes over because the stpmic1_wdt doesn't populate
> WDOG_HW_RUNNING in status.
It's not turned on in bootloader (u-boot). I'm able to boot to userspace, but
the watchdog reboots board when using busybox's watchdog demon and when
I'm manually feeding it. Every other stm32mp1 based board isn't using
pmic watchdog,
so I guess it can be replaced by internal watchdog for now?
>
> > I changed phy address to 7, indeed you were right about it.
> > But unfortunately even though I set the address correctly phy
> > is still missing according to dmesg (I checked datasheet and schematics
> > the address is surely correct now).
> > That's something I would like to postpone a little bit as well for now.
>
> You sent out v4 with a phy address of 7 though.
> Did you get it working meanwhile?
Unfortunately not yet.
>
> >
> >>
> >>> Changes in v2:
> >>> - add new odyssey dts to Makefile
> >>>
> >>>  arch/arm/boot/dts/Makefile                    |   3 +-
> >>>  .../arm/boot/dts/stm32mp157c-odyssey-som.dtsi | 276 ++++++++++++++++++
> >>>  arch/arm/boot/dts/stm32mp157c-odyssey.dts     |  72 +++++
> >>>  3 files changed, 350 insertions(+), 1 deletion(-)
> >>>  create mode 100644 arch/arm/boot/dts/stm32mp157c-odyssey-som.dtsi
> >>>  create mode 100644 arch/arm/boot/dts/stm32mp157c-odyssey.dts
> >>>
> >>> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> >>> index e6a1cac0bfc7..a3ea2301c82c 100644
> >>> --- a/arch/arm/boot/dts/Makefile
> >>> +++ b/arch/arm/boot/dts/Makefile
> >>> @@ -1047,7 +1047,8 @@ dtb-$(CONFIG_ARCH_STM32) += \
> >>>       stm32mp157c-dk2.dtb \
> >>>       stm32mp157c-ed1.dtb \
> >>>       stm32mp157c-ev1.dtb \
> >>> -     stm32mp157c-lxa-mc1.dtb
> >>> +     stm32mp157c-lxa-mc1.dtb \
> >>> +     stm32mp157c-odyssey.dtb
> >>>  dtb-$(CONFIG_MACH_SUN4I) += \
> >>>       sun4i-a10-a1000.dtb \
> >>>       sun4i-a10-ba10-tvbox.dtb \
> >>> diff --git a/arch/arm/boot/dts/stm32mp157c-odyssey-som.dtsi b/arch/arm/boot/dts/stm32mp157c-odyssey-som.dtsi
> >>> new file mode 100644
> >>> index 000000000000..935632caddd6
> >>> --- /dev/null
> >>> +++ b/arch/arm/boot/dts/stm32mp157c-odyssey-som.dtsi
> >>> @@ -0,0 +1,276 @@
> >>> +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> >>> +/*
> >>> + * Copyright (C) 2020 Marcin Sloniewski <marcin.sloniewski at gmail.com>.
> >>> + */
> >>> +
> >>> +/dts-v1/;
> >>> +
> >>> +#include "stm32mp157.dtsi"
> >>> +#include "stm32mp15xc.dtsi"
> >>> +#include "stm32mp15-pinctrl.dtsi"
> >>> +#include "stm32mp15xxac-pinctrl.dtsi"
> >>> +#include <dt-bindings/gpio/gpio.h>
> >>> +#include <dt-bindings/leds/common.h>
> >>> +#include <dt-bindings/mfd/st,stpmic1.h>
> >>> +
> >>> +/ {
> >>> +     model = "Seeed Studio Odyssey-STM32MP157C SOM";
> >>> +     compatible = "seeed,stm32mp157c-odyssey-som", "st,stm32mp157";
> >>> +
> >>> +     memory at c0000000 {
> >>> +             device_type = "memory";
> >>> +             reg = <0xc0000000 0x20000000>;
> >>> +     };
> >>> +
> >>> +     reserved-memory {
> >>> +             #address-cells = <1>;
> >>> +             #size-cells = <1>;
> >>> +             ranges;
> >>> +
> >>> +             mcuram2: mcuram2 at 10000000 {
> >>> +                     compatible = "shared-dma-pool";
> >>> +                     reg = <0x10000000 0x40000>;
> >>> +                     no-map;
> >>> +             };
> >>> +
> >>> +             vdev0vring0: vdev0vring0 at 10040000 {
> >>> +                     compatible = "shared-dma-pool";
> >>> +                     reg = <0x10040000 0x1000>;
> >>> +                     no-map;
> >>> +             };
> >>> +
> >>> +             vdev0vring1: vdev0vring1 at 10041000 {
> >>> +                     compatible = "shared-dma-pool";
> >>> +                     reg = <0x10041000 0x1000>;
> >>> +                     no-map;
> >>> +             };
> >>> +
> >>> +             vdev0buffer: vdev0buffer at 10042000 {
> >>> +                     compatible = "shared-dma-pool";
> >>> +                     reg = <0x10042000 0x4000>;
> >>> +                     no-map;
> >>> +             };
> >>> +
> >>> +             mcuram: mcuram at 30000000 {
> >>> +                     compatible = "shared-dma-pool";
> >>> +                     reg = <0x30000000 0x40000>;
> >>> +                     no-map;
> >>> +             };
> >>> +
> >>> +             retram: retram at 38000000 {
> >>> +                     compatible = "shared-dma-pool";
> >>> +                     reg = <0x38000000 0x10000>;
> >>> +                     no-map;
> >>> +             };
> >>> +
> >>> +             gpu_reserved: gpu at d4000000 {
> >>> +                     reg = <0xd4000000 0x4000000>;
> >>> +                     no-map;
> >>> +             };
> >>> +     };
> >>> +
> >>> +     led {
> >>> +             compatible = "gpio-leds";
> >>> +             led-blue {
> >>> +                     color = <LED_COLOR_ID_BLUE>;
> >>> +                     function = LED_FUNCTION_HEARTBEAT;
> >>> +                     gpios = <&gpiog 3 GPIO_ACTIVE_HIGH>;
> >>> +                     linux,default-trigger = "heartbeat";
> >>> +             };
> >>> +     };
> >>> +};
> >>> +
> >>> +&gpu {
> >>> +     contiguous-area = <&gpu_reserved>;
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> +&i2c2 {
> >>> +     pinctrl-names = "default";
> >>> +     pinctrl-0 = <&i2c2_pins_a>;
> >>> +     i2c-scl-rising-time-ns = <185>;
> >>> +     i2c-scl-falling-time-ns = <20>;
> >>> +     status = "okay";
> >>> +     /* spare dmas for other usage */
> >>> +     /delete-property/dmas;
> >>> +     /delete-property/dma-names;
> >>> +
> >>> +     pmic: stpmic at 33 {
> >>> +             compatible = "st,stpmic1";
> >>> +             reg = <0x33>;
> >>> +             interrupts-extended = <&gpioa 0 IRQ_TYPE_EDGE_FALLING>;
> >>> +             interrupt-controller;
> >>> +             #interrupt-cells = <2>;
> >>> +
> >>> +             regulators {
> >>> +                     compatible = "st,stpmic1-regulators";
> >>> +                     ldo1-supply = <&v3v3>;
> >>> +                     ldo3-supply = <&vdd_ddr>;
> >>> +                     ldo6-supply = <&v3v3>;
> >>> +                     pwr_sw1-supply = <&bst_out>;
> >>> +                     pwr_sw2-supply = <&bst_out>;
> >>> +
> >>> +                     vddcore: buck1 {
> >>> +                             regulator-name = "vddcore";
> >>> +                             regulator-min-microvolt = <800000>;
> >>> +                             regulator-max-microvolt = <1350000>;
> >>> +                             regulator-always-on;
> >>> +                             regulator-initial-mode = <0>;
> >>> +                             regulator-over-current-protection;
> >>> +                     };
> >>> +
> >>> +                     vdd_ddr: buck2 {
> >>> +                             regulator-name = "vdd_ddr";
> >>> +                             regulator-min-microvolt = <1350000>;
> >>> +                             regulator-max-microvolt = <1350000>;
> >>> +                             regulator-always-on;
> >>> +                             regulator-initial-mode = <0>;
> >>> +                             regulator-over-current-protection;
> >>> +                     };
> >>> +
> >>> +                     vdd: buck3 {
> >>> +                             regulator-name = "vdd";
> >>> +                             regulator-min-microvolt = <3300000>;
> >>> +                             regulator-max-microvolt = <3300000>;
> >>> +                             regulator-always-on;
> >>> +                             st,mask-reset;
> >>> +                             regulator-initial-mode = <0>;
> >>> +                             regulator-over-current-protection;
> >>> +                     };
> >>> +
> >>> +                     v3v3: buck4 {
> >>> +                             regulator-name = "v3v3";
> >>> +                             regulator-min-microvolt = <3300000>;
> >>> +                             regulator-max-microvolt = <3300000>;
> >>> +                             regulator-always-on;
> >>> +                             regulator-over-current-protection;
> >>> +                             regulator-initial-mode = <0>;
> >>> +                     };
> >>> +
> >>> +                     v1v8_audio: ldo1 {
> >>> +                             regulator-name = "v1v8_audio";
> >>> +                             regulator-min-microvolt = <1800000>;
> >>> +                             regulator-max-microvolt = <1800000>;
> >>> +                             regulator-always-on;
> >>> +                             interrupts = <IT_CURLIM_LDO1 0>;
> >>> +                     };
> >>> +
> >>> +                     v3v3_hdmi: ldo2 {
> >>> +                             regulator-name = "v3v3_hdmi";
> >>> +                             regulator-min-microvolt = <3300000>;
> >>> +                             regulator-max-microvolt = <3300000>;
> >>> +                             regulator-always-on;
> >>> +                             interrupts = <IT_CURLIM_LDO2 0>;
> >>> +                     };
> >>> +
> >>> +                     vtt_ddr: ldo3 {
> >>> +                             regulator-name = "vtt_ddr";
> >>> +                             regulator-min-microvolt = <500000>;
> >>> +                             regulator-max-microvolt = <750000>;
> >>> +                             regulator-always-on;
> >>> +                             regulator-over-current-protection;
> >>> +                     };
> >>> +
> >>> +                     vdd_usb: ldo4 {
> >>> +                             regulator-name = "vdd_usb";
> >>> +                             regulator-min-microvolt = <3300000>;
> >>> +                             regulator-max-microvolt = <3300000>;
> >>> +                             interrupts = <IT_CURLIM_LDO4 0>;
> >>> +                     };
> >>> +
> >>> +                     vdda: ldo5 {
> >>> +                             regulator-name = "vdda";
> >>> +                             regulator-min-microvolt = <2900000>;
> >>> +                             regulator-max-microvolt = <2900000>;
> >>> +                             interrupts = <IT_CURLIM_LDO5 0>;
> >>> +                             regulator-boot-on;
> >>> +                     };
> >>> +
> >>> +                     v1v2_hdmi: ldo6 {
> >>> +                             regulator-name = "v1v2_hdmi";
> >>> +                             regulator-min-microvolt = <1200000>;
> >>> +                             regulator-max-microvolt = <1200000>;
> >>> +                             regulator-always-on;
> >>> +                             interrupts = <IT_CURLIM_LDO6 0>;
> >>> +                     };
> >>> +
> >>> +                     vref_ddr: vref_ddr {
> >>> +                             regulator-name = "vref_ddr";
> >>> +                             regulator-always-on;
> >>> +                             regulator-over-current-protection;
> >>> +                     };
> >>> +
> >>> +                      bst_out: boost {
> >>> +                             regulator-name = "bst_out";
> >>> +                             interrupts = <IT_OCP_BOOST 0>;
> >>> +                      };
> >>> +
> >>> +                     vbus_otg: pwr_sw1 {
> >>> +                             regulator-name = "vbus_otg";
> >>> +                             interrupts = <IT_OCP_OTG 0>;
> >>> +                      };
> >>> +
> >>> +                      vbus_sw: pwr_sw2 {
> >>> +                             regulator-name = "vbus_sw";
> >>> +                             interrupts = <IT_OCP_SWOUT 0>;
> >>> +                             regulator-active-discharge;
> >>> +                      };
> >>> +             };
> >>> +
> >>> +             onkey {
> >>> +                     compatible = "st,stpmic1-onkey";
> >>> +                     interrupts = <IT_PONKEY_F 0>, <IT_PONKEY_R 0>;
> >>> +                     interrupt-names = "onkey-falling", "onkey-rising";
> >>> +                     power-off-time-sec = <10>;
> >>> +             };
> >>> +
> >>> +             watchdog {
> >>> +                     compatible = "st,stpmic1-wdt";
> >>> +                     status = "disabled";
> >>> +             };
> >>> +     };
> >>> +};
> >>> +
> >>> +&ipcc {
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> +&iwdg2 {
> >>> +     timeout-sec = <32>;
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> +&m4_rproc {
> >>> +     memory-region = <&retram>, <&mcuram>, <&mcuram2>, <&vdev0vring0>,
> >>> +                     <&vdev0vring1>, <&vdev0buffer>;
> >>> +     mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>;
> >>> +     mbox-names = "vq0", "vq1", "shutdown";
> >>> +     interrupt-parent = <&exti>;
> >>> +     interrupts = <68 1>;
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> +&rng1 {
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> +&rtc {
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> +&sdmmc2 {
> >>> +     pinctrl-names = "default", "opendrain", "sleep";
> >>> +     pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;
> >>> +     pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_a>;
> >>> +     pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_a>;
> >>> +     non-removable;
> >>> +     no-sd;
> >>> +     no-sdio;
> >>> +     st,neg-edge;
> >>> +     bus-width = <4>;
> >>> +     vmmc-supply = <&v3v3>;
> >>> +     vqmmc-supply = <&v3v3>;
> >>> +     mmc-ddr-3_3v;
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> diff --git a/arch/arm/boot/dts/stm32mp157c-odyssey.dts b/arch/arm/boot/dts/stm32mp157c-odyssey.dts
> >>> new file mode 100644
> >>> index 000000000000..09edf6afa155
> >>> --- /dev/null
> >>> +++ b/arch/arm/boot/dts/stm32mp157c-odyssey.dts
> >>> @@ -0,0 +1,72 @@
> >>> +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> >>> +/*
> >>> + * Copyright (C) 2020 Marcin Sloniewski <marcin.sloniewski at gmail.com>.
> >>> + */
> >>> +
> >>> +/dts-v1/;
> >>> +
> >>> +#include "stm32mp157c-odyssey-som.dtsi"
> >>> +
> >>> +/ {
> >>> +     model = "Seeed Studio Odyssey-STM32MP157C Board";
> >>> +     compatible = "seeed,stm32mp157c-odyssey", "st,stm32mp157";
> >>> +
> >>> +     aliases {
> >>> +             ethernet0 = &ethernet0;
> >>> +             serial0 = &uart4;
> >>> +     };
> >>> +
> >>> +     chosen {
> >>> +             stdout-path = "serial0:115200n8";
> >>> +     };
> >>> +};
> >>> +
> >>> +&ethernet0 {
> >>> +     status = "okay";
> >>> +     pinctrl-0 = <&ethernet0_rgmii_pins_a>;
> >>> +     pinctrl-1 = <&ethernet0_rgmii_sleep_pins_a>;
> >>> +     pinctrl-names = "default", "sleep";
> >>> +     phy-mode = "rgmii-id";
> >>> +     max-speed = <1000>;
> >>> +     phy-handle = <&phy0>;
> >>> +
> >>> +     mdio0 {
> >>> +             #address-cells = <1>;
> >>> +             #size-cells = <0>;
> >>> +             compatible = "snps,dwmac-mdio";
> >>> +             phy0: ethernet-phy at 0 { /* KSZ9031RN */
> >>> +                     reg = <0>;
> >>> +             };
> >>> +     };
> >>> +};
> >>> +
> >>> +&i2c1 {
> >>> +     pinctrl-names = "default", "sleep";
> >>> +     pinctrl-0 = <&i2c1_pins_a>;
> >>> +     pinctrl-1 = <&i2c1_sleep_pins_a>;
> >>> +     i2c-scl-rising-time-ns = <100>;
> >>> +     i2c-scl-falling-time-ns = <7>;
> >>> +     status = "okay";
> >>> +     /delete-property/dmas;
> >>> +     /delete-property/dma-names;
> >>> +};
> >>> +
> >>> +&sdmmc1 {
> >>> +     pinctrl-names = "default", "opendrain", "sleep";
> >>> +     pinctrl-0 = <&sdmmc1_b4_pins_a>;
> >>> +     pinctrl-1 = <&sdmmc1_b4_od_pins_a>;
> >>> +     pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
> >>> +     cd-gpios = <&gpiob 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
> >>> +     disable-wp;
> >>> +     st,neg-edge;
> >>> +     bus-width = <4>;
> >>> +     vmmc-supply = <&v3v3>;
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>> +&uart4 {
> >>> +     pinctrl-names = "default";
> >>> +     pinctrl-0 = <&uart4_pins_a>;
> >>> +     status = "okay";
> >>> +};
> >>> +
> >>>
> >>
> >> --
> >> Pengutronix e.K.                           |                             |
> >> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> >> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> >> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> >
>
> --
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the linux-arm-kernel mailing list