[PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support

Stefan Roese sr at denx.de
Fri Aug 13 11:58:19 CEST 2021


Hi,

On 13.08.21 11:54, Pali Rohár wrote:
> On Friday 13 August 2021 11:08:08 Luka Kovacic wrote:
>> Hello Pali,
>>
>> On Fri, Aug 13, 2021 at 10:14 AM Pali Rohár <pali at kernel.org> wrote:
>>>
>>> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
>>>> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
>>>> Technologies, Inc.
>>>>
>>>> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
>>>> Peripherals:
>>>>   - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
>>>>   - RTC clock (PCF8563)
>>>>   - USB 3.0 port
>>>>   - USB 2.0 port
>>>>   - 4x LED
>>>>   - UART over Micro-USB
>>>>   - M.2 slot (2280)
>>>>   - Mini PCI-E slot
>>>>
>>>> Additionally, automatic import of the Marvell hw_info parameters is
>>>> enabled via the recently added mac command for A37XX platforms.
>>>> The parameters stored in Marvell hw_info are usually the board serial
>>>> number and MAC addresses.
>>>>
>>>> Signed-off-by: Luka Kovacic <luka.kovacic at sartura.hr>
>>>> Cc: Luka Perkov <luka.perkov at sartura.hr>
>>>> Cc: Robert Marko <robert.marko at sartura.hr>
>>>> ---
>>>>   arch/arm/dts/Makefile                         |   1 +
>>>>   .../arm/dts/armada-3720-espressobin-ultra.dts | 114 ++++++++++
>>>>   arch/arm/dts/armada-3720-espressobin.dts      | 199 +----------------
>>>>   arch/arm/dts/armada-3720-espressobin.dtsi     | 210 ++++++++++++++++++
>>>>   board/Marvell/mvebu_armada-37xx/MAINTAINERS   |   8 +
>>>>   board/Marvell/mvebu_armada-37xx/board.c       |  92 +++++++-
>>>>   .../mvebu_espressobin-ultra-88f3720_defconfig |  93 ++++++++
>>>>   7 files changed, 514 insertions(+), 203 deletions(-)
>>>>   create mode 100644 arch/arm/dts/armada-3720-espressobin-ultra.dts
>>>>   create mode 100644 arch/arm/dts/armada-3720-espressobin.dtsi
>>>>   create mode 100644 configs/mvebu_espressobin-ultra-88f3720_defconfig
>>>
>>> Hello Luka! Please look at my comments from previous review:
>>> https://lore.kernel.org/u-boot/20210227004852.5urcwnn6uxehuk72@pali/
>>>
>>> I think it is not a good idea to duplicate espressobin code, specially
>>> now when differences between v5, v7, non-emmc and emmc were
>>> de-duplicated and correctly detected at runtime. Just use one DTS and
>>> one config file and differences can be handled in board code functions
>>> "board_fix_fdt" and "board_late_init".
>>
>> I believe that patching the DTS at runtime diminishes the value of
>> device trees in the first case.
>>
>> As far as the v5, v7, non-emmc and emmc boards go I do understand
>> that, as they are physically similar and more or less different revisions
>> of the same board.
>>
>> The ESPRESSOBin Ultra board is completely different from those boards
>> physically and so I doesn't make sense to me, why we would merge all
>> of them into one device tree.
> 
> See email for reasons:
> https://lore.kernel.org/u-boot/20210301154101.ke5j2r3lazjlxrsl@pali/
> 
> Anyway, I'm looking at differences between ultra and non-ultra boards
> which are used by U-Boot... And I see only:
> * switch configuration & phy
> * i2c rtc
> * sdhci slot
> 
> Other changes are not used by U-Boot (led).
> 
> For switch configuration & phy there is already custom code in U-Boot
> board file. For sdhci slot there is also (to enable/disable eMMC after
> detection).
> 
> So the only difference is presence of i2c rtc, right?
> 
> I guess it does not make much sense to copy and duplicate whole DTS and
> also defconfig file for such small differences. Insertion of just few
> nodes is not a big problem.
> 
> These boars are not very different, and having tons of u-boot binaries
> for every combination just complicate it as explained in above email.

I fully agree with Pali. It's much more conveniant to just have one
U-Boot target (and binary) which can handle multiple board variants
by runtime detection. I would very much welcome to see the support for
the "Ultra" variant added this way.

> If you need help with this I can try to do something... as I was already
> involved in unification of all v5/v7/emmc/non-emmc variants into one
> binary with one DTS.

Thanks Pali for all your work here.

Thanks,
Stefan

>> I resorted to the Linux way and used a common dtsi for both the
>> ESPRESSOBin - which is the base and the ESPRESSOBin-Ultra.
>>
>>>
>>>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
>>>> index c42715ead4..f21c9c94d3 100644
>>>> --- a/arch/arm/dts/Makefile
>>>> +++ b/arch/arm/dts/Makefile
>>>> @@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
>>>>   dtb-$(CONFIG_ARCH_MVEBU) +=                  \
>>>>        armada-3720-db.dtb                      \
>>>>        armada-3720-espressobin.dtb             \
>>>> +     armada-3720-espressobin-ultra.dtb       \
>>>>        armada-3720-turris-mox.dtb              \
>>>>        armada-3720-uDPU.dtb                    \
>>>>        armada-375-db.dtb                       \
>>>> diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
>>>> new file mode 100644
>>>> index 0000000000..5ad0c723e3
>>>> --- /dev/null
>>>> +++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
>>>> @@ -0,0 +1,114 @@
>>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>>>> +/*
>>>> + * Device Tree file for ESPRESSObin-Ultra board
>>>> + * Copyright (C) 2016 Marvell
>>>> + * Copyright (C) 2019 Globalscale technologies, Inc.
>>>> + * Copyright (C) 2021 Sartura Ltd.
>>>> + *
>>>> + * Author: Jason Hung <jhung at globalscaletechnologies.com>
>>>> + * Author: Luka Kovacic <luka.kovacic at sartura.hr>
>>>> + * Author: Vladimir Vid <vladimir.vid at sartura.hr>
>>>> + */
>>>> +
>>>> +/dts-v1/;
>>>> +
>>>> +#include "armada-3720-espressobin.dtsi"
>>>> +
>>>> +/ {
>>>> +     model = "Globalscale Marvell ESPRESSOBin Ultra Board";
>>>> +     compatible = "globalscale,espressobin-ultra", "marvell,armada3720", "marvell,armada3710";
>>>> +
>>>> +     gpio-leds {
>>>> +             pinctrl-names = "default";
>>>> +             pinctrl-0 = <&led1_pins>, <&led2_pins>, <&led3_pins>, <&led4_pins>;
>>>> +             compatible = "gpio-leds";
>>>> +
>>>> +             led1 {
>>>> +                     label = "led1";
>>>> +                     gpios = <&gpionb 11 GPIO_ACTIVE_LOW>;
>>>> +                     default-state = "on";
>>>> +             };
>>>> +             led2 {
>>>> +                     label = "led2";
>>>> +                     gpios = <&gpionb 12 GPIO_ACTIVE_LOW>;
>>>> +                     default-state = "on";
>>>> +             };
>>>> +             led3 {
>>>> +                     label = "led3";
>>>> +                     gpios = <&gpionb 13 GPIO_ACTIVE_LOW>;
>>>> +                     default-state = "on";
>>>> +             };
>>>> +             led4 {
>>>> +                     label = "led4";
>>>> +                     gpios = <&gpionb 14 GPIO_ACTIVE_LOW>;
>>>> +                     default-state = "on";
>>>> +             };
>>>> +     };
>>>> +};
>>>> +
>>>> +&pinctrl_nb {
>>>> +     led1_pins: led1-pins {
>>>> +             groups = "pwm0";
>>>> +             function = "gpio";
>>>> +     };
>>>> +     led2_pins: led2-pins {
>>>> +             groups = "pwm1";
>>>> +             function = "gpio";
>>>> +     };
>>>> +     led3_pins: led3-pins {
>>>> +             groups = "pwm2";
>>>> +             function = "gpio";
>>>> +     };
>>>> +     led4_pins: led4-pins {
>>>> +             groups = "pwm3";
>>>> +             function = "gpio";
>>>> +     };
>>>> +};
>>>> +
>>>> +&eth0 {
>>>> +     status = "okay";
>>>> +     phy_addr = <0x3>;
>>>> +};
>>>> +
>>>> +&i2c0 {
>>>> +     status = "okay";
>>>> +     #address-cells = <1>;
>>>> +     #size-cells = <0>;
>>>> +     rtc at 51 {
>>>> +             compatible = "nxp,pcf8563";
>>>> +             reg = <0x51>;
>>>> +     };
>>>> +};
>>>> +
>>>> +&sata {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +&sdhci0 {
>>>> +     status = "disabled";
>>>> +};
>>>> +
>>>> +&sdhci1 {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +&spi0 {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +/* Exported on the micro USB connector through an FTDI */
>>>> +&uart0 {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +&usb2 {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +&usb3 {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +&pcie0 {
>>>> +     status = "okay";
>>>> +};
>>>> diff --git a/arch/arm/dts/armada-3720-espressobin.dts b/arch/arm/dts/armada-3720-espressobin.dts
>>>> index cba6139be6..925ce6a38e 100644
>>>> --- a/arch/arm/dts/armada-3720-espressobin.dts
>>>> +++ b/arch/arm/dts/armada-3720-espressobin.dts
>>>> @@ -1,210 +1,15 @@
>>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>>>>   /*
>>>>    * Device Tree file for Marvell Armada 3720 community board
>>>>    * (ESPRESSOBin)
>>>>    * Copyright (C) 2016 Marvell
>>>> - *
>>>> - * Gregory CLEMENT <gregory.clement at free-electrons.com>
>>>> - * Konstantin Porotchkin <kostap at marvell.com>
>>>> - *
>>>> - * This file is dual-licensed: you can use it either under the terms
>>>> - * of the GPL or the X11 license, at your option. Note that this dual
>>>> - * licensing only applies to this file, and not this project as a
>>>> - * whole.
>>>> - *
>>>> - *  a) This file is free software; you can redistribute it and/or
>>>> - *     modify it under the terms of the GNU General Public License as
>>>> - *     published by the Free Software Foundation; either version 2 of the
>>>> - *     License, or (at your option) any later version.
>>>> - *
>>>> - *     This file is distributed in the hope that it will be useful
>>>> - *     but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>> - *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>>> - *     GNU General Public License for more details.
>>>> - *
>>>> - * Or, alternatively
>>>> - *
>>>> - *  b) Permission is hereby granted, free of charge, to any person
>>>> - *     obtaining a copy of this software and associated documentation
>>>> - *     files (the "Software"), to deal in the Software without
>>>> - *     restriction, including without limitation the rights to use
>>>> - *     copy, modify, merge, publish, distribute, sublicense, and/or
>>>> - *     sell copies of the Software, and to permit persons to whom the
>>>> - *     Software is furnished to do so, subject to the following
>>>> - *     conditions:
>>>> - *
>>>> - *     The above copyright notice and this permission notice shall be
>>>> - *     included in all copies or substantial portions of the Software.
>>>> - *
>>>> - *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
>>>> - *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
>>>> - *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>>>> - *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
>>>> - *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
>>>> - *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>>>> - *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>>>> - *     OTHER DEALINGS IN THE SOFTWARE.
>>>>    */
>>>>
>>>>   /dts-v1/;
>>>>
>>>> -#include "armada-372x.dtsi"
>>>> +#include "armada-3720-espressobin.dtsi"
>>>>
>>>>   / {
>>>>        model = "Globalscale Marvell ESPRESSOBin Board";
>>>>        compatible = "globalscale,espressobin", "marvell,armada3720", "marvell,armada3710";
>>>> -
>>>> -     chosen {
>>>> -             stdout-path = "serial0:115200n8";
>>>> -     };
>>>> -
>>>> -     aliases {
>>>> -             ethernet0 = &eth0;
>>>> -             i2c0 = &i2c0;
>>>> -             spi0 = &spi0;
>>>> -     };
>>>> -
>>>> -     memory {
>>>> -             device_type = "memory";
>>>> -             reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
>>>> -     };
>>>> -
>>>> -     vcc_sd_reg0: regulator at 0 {
>>>> -             compatible = "regulator-gpio";
>>>> -             regulator-name = "vcc_sd0";
>>>> -             regulator-min-microvolt = <1800000>;
>>>> -             regulator-max-microvolt = <3300000>;
>>>> -             regulator-type = "voltage";
>>>> -             states = <1800000 0x1
>>>> -                       3300000 0x0>;
>>>> -             gpios = <&gpionb 4 GPIO_ACTIVE_HIGH>;
>>>> -     };
>>>> -};
>>>> -
>>>> -&comphy {
>>>> -     max-lanes = <3>;
>>>> -     phy0 {
>>>> -             phy-type = <COMPHY_TYPE_USB3_HOST0>;
>>>> -             phy-speed = <COMPHY_SPEED_5G>;
>>>> -     };
>>>> -
>>>> -     phy1 {
>>>> -             phy-type = <COMPHY_TYPE_PEX0>;
>>>> -             phy-speed = <COMPHY_SPEED_2_5G>;
>>>> -     };
>>>> -
>>>> -     phy2 {
>>>> -             phy-type = <COMPHY_TYPE_SATA0>;
>>>> -             phy-speed = <COMPHY_SPEED_5G>;
>>>> -     };
>>>> -};
>>>> -
>>>> -&eth0 {
>>>> -     status = "okay";
>>>> -     pinctrl-names = "default";
>>>> -     pinctrl-0 = <&rgmii_pins>, <&smi_pins>;
>>>> -     phy-mode = "rgmii";
>>>> -     phy_addr = <0x1>;
>>>> -     fixed-link {
>>>> -             speed = <1000>;
>>>> -             full-duplex;
>>>> -     };
>>>> -};
>>>> -
>>>> -&i2c0 {
>>>> -     pinctrl-names = "default";
>>>> -     pinctrl-0 = <&i2c1_pins>;
>>>> -     status = "okay";
>>>> -};
>>>> -
>>>> -/* CON3 */
>>>> -&sata {
>>>> -     status = "okay";
>>>> -};
>>>> -
>>>> -&sdhci0 {
>>>> -     pinctrl-names = "default";
>>>> -     pinctrl-0 = <&sdio_pins>;
>>>> -     bus-width = <4>;
>>>> -     cd-gpios = <&gpionb 3 GPIO_ACTIVE_LOW>;
>>>> -     vqmmc-supply = <&vcc_sd_reg0>;
>>>> -     status = "okay";
>>>> -};
>>>> -
>>>> -/* U11 */
>>>> -&sdhci1 {
>>>> -     non-removable;
>>>> -     bus-width = <8>;
>>>> -     mmc-ddr-1_8v;
>>>> -     mmc-hs400-1_8v;
>>>> -     marvell,xenon-emmc;
>>>> -     marvell,xenon-tun-count = <9>;
>>>> -     marvell,pad-type = "fixed-1-8v";
>>>> -
>>>> -     pinctrl-names = "default";
>>>> -     pinctrl-0 = <&mmc_pins>;
>>>> -     status = "okay";
>>>> -
>>>> -     #address-cells = <1>;
>>>> -     #size-cells = <0>;
>>>> -     mmccard: mmccard at 0 {
>>>> -             compatible = "mmc-card";
>>>> -             reg = <0>;
>>>> -     };
>>>> -};
>>>> -
>>>> -&spi0 {
>>>> -     status = "okay";
>>>> -     pinctrl-names = "default";
>>>> -     pinctrl-0 = <&spi_quad_pins>;
>>>> -
>>>> -     spi-flash at 0 {
>>>> -             #address-cells = <1>;
>>>> -             #size-cells = <1>;
>>>> -             compatible = "st,m25p128", "jedec,spi-nor";
>>>> -             reg = <0>; /* Chip select 0 */
>>>> -             spi-max-frequency = <50000000>;
>>>> -             m25p,fast-read;
>>>> -
>>>> -#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>>>> -             partitions {
>>>> -                     compatible = "fixed-partitions";
>>>> -                     #address-cells = <1>;
>>>> -                     #size-cells = <1>;
>>>> -
>>>> -                     partition at firmware {
>>>> -                             reg = <0 CONFIG_ENV_OFFSET>;
>>>> -                             label = "firmware";
>>>> -                     };
>>>> -
>>>> -                     partition at u-boot-env {
>>>> -                             reg = <CONFIG_ENV_OFFSET CONFIG_ENV_SIZE>;
>>>> -                             label = "u-boot-env";
>>>> -                     };
>>>> -             };
>>>> -#endif
>>>> -     };
>>>> -};
>>>> -
>>>> -/* Exported on the micro USB connector CON32 through an FTDI */
>>>> -&uart0 {
>>>> -     pinctrl-names = "default";
>>>> -     pinctrl-0 = <&uart1_pins>;
>>>> -     status = "okay";
>>>> -};
>>>> -
>>>> -/* CON29 */
>>>> -&usb2 {
>>>> -     status = "okay";
>>>> -};
>>>> -
>>>> -/* CON31 */
>>>> -&usb3 {
>>>> -     status = "okay";
>>>> -};
>>>> -
>>>> -&pcie0 {
>>>> -     pinctrl-names = "default";
>>>> -     pinctrl-0 = <&pcie_pins>;
>>>> -     reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>;
>>>> -     status = "okay";
>>>>   };
>>>> diff --git a/arch/arm/dts/armada-3720-espressobin.dtsi b/arch/arm/dts/armada-3720-espressobin.dtsi
>>>> new file mode 100644
>>>> index 0000000000..cba6139be6
>>>> --- /dev/null
>>>> +++ b/arch/arm/dts/armada-3720-espressobin.dtsi
>>>> @@ -0,0 +1,210 @@
>>>> +/*
>>>> + * Device Tree file for Marvell Armada 3720 community board
>>>> + * (ESPRESSOBin)
>>>> + * Copyright (C) 2016 Marvell
>>>> + *
>>>> + * Gregory CLEMENT <gregory.clement at free-electrons.com>
>>>> + * Konstantin Porotchkin <kostap at marvell.com>
>>>> + *
>>>> + * This file is dual-licensed: you can use it either under the terms
>>>> + * of the GPL or the X11 license, at your option. Note that this dual
>>>> + * licensing only applies to this file, and not this project as a
>>>> + * whole.
>>>> + *
>>>> + *  a) This file is free software; you can redistribute it and/or
>>>> + *     modify it under the terms of the GNU General Public License as
>>>> + *     published by the Free Software Foundation; either version 2 of the
>>>> + *     License, or (at your option) any later version.
>>>> + *
>>>> + *     This file is distributed in the hope that it will be useful
>>>> + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>> + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>>> + *     GNU General Public License for more details.
>>>> + *
>>>> + * Or, alternatively
>>>> + *
>>>> + *  b) Permission is hereby granted, free of charge, to any person
>>>> + *     obtaining a copy of this software and associated documentation
>>>> + *     files (the "Software"), to deal in the Software without
>>>> + *     restriction, including without limitation the rights to use
>>>> + *     copy, modify, merge, publish, distribute, sublicense, and/or
>>>> + *     sell copies of the Software, and to permit persons to whom the
>>>> + *     Software is furnished to do so, subject to the following
>>>> + *     conditions:
>>>> + *
>>>> + *     The above copyright notice and this permission notice shall be
>>>> + *     included in all copies or substantial portions of the Software.
>>>> + *
>>>> + *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
>>>> + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
>>>> + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>>>> + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
>>>> + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
>>>> + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>>>> + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>>>> + *     OTHER DEALINGS IN THE SOFTWARE.
>>>> + */
>>>> +
>>>> +/dts-v1/;
>>>> +
>>>> +#include "armada-372x.dtsi"
>>>> +
>>>> +/ {
>>>> +     model = "Globalscale Marvell ESPRESSOBin Board";
>>>> +     compatible = "globalscale,espressobin", "marvell,armada3720", "marvell,armada3710";
>>>> +
>>>> +     chosen {
>>>> +             stdout-path = "serial0:115200n8";
>>>> +     };
>>>> +
>>>> +     aliases {
>>>> +             ethernet0 = &eth0;
>>>> +             i2c0 = &i2c0;
>>>> +             spi0 = &spi0;
>>>> +     };
>>>> +
>>>> +     memory {
>>>> +             device_type = "memory";
>>>> +             reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
>>>> +     };
>>>> +
>>>> +     vcc_sd_reg0: regulator at 0 {
>>>> +             compatible = "regulator-gpio";
>>>> +             regulator-name = "vcc_sd0";
>>>> +             regulator-min-microvolt = <1800000>;
>>>> +             regulator-max-microvolt = <3300000>;
>>>> +             regulator-type = "voltage";
>>>> +             states = <1800000 0x1
>>>> +                       3300000 0x0>;
>>>> +             gpios = <&gpionb 4 GPIO_ACTIVE_HIGH>;
>>>> +     };
>>>> +};
>>>> +
>>>> +&comphy {
>>>> +     max-lanes = <3>;
>>>> +     phy0 {
>>>> +             phy-type = <COMPHY_TYPE_USB3_HOST0>;
>>>> +             phy-speed = <COMPHY_SPEED_5G>;
>>>> +     };
>>>> +
>>>> +     phy1 {
>>>> +             phy-type = <COMPHY_TYPE_PEX0>;
>>>> +             phy-speed = <COMPHY_SPEED_2_5G>;
>>>> +     };
>>>> +
>>>> +     phy2 {
>>>> +             phy-type = <COMPHY_TYPE_SATA0>;
>>>> +             phy-speed = <COMPHY_SPEED_5G>;
>>>> +     };
>>>> +};
>>>> +
>>>> +&eth0 {
>>>> +     status = "okay";
>>>> +     pinctrl-names = "default";
>>>> +     pinctrl-0 = <&rgmii_pins>, <&smi_pins>;
>>>> +     phy-mode = "rgmii";
>>>> +     phy_addr = <0x1>;
>>>> +     fixed-link {
>>>> +             speed = <1000>;
>>>> +             full-duplex;
>>>> +     };
>>>> +};
>>>> +
>>>> +&i2c0 {
>>>> +     pinctrl-names = "default";
>>>> +     pinctrl-0 = <&i2c1_pins>;
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +/* CON3 */
>>>> +&sata {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +&sdhci0 {
>>>> +     pinctrl-names = "default";
>>>> +     pinctrl-0 = <&sdio_pins>;
>>>> +     bus-width = <4>;
>>>> +     cd-gpios = <&gpionb 3 GPIO_ACTIVE_LOW>;
>>>> +     vqmmc-supply = <&vcc_sd_reg0>;
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +/* U11 */
>>>> +&sdhci1 {
>>>> +     non-removable;
>>>> +     bus-width = <8>;
>>>> +     mmc-ddr-1_8v;
>>>> +     mmc-hs400-1_8v;
>>>> +     marvell,xenon-emmc;
>>>> +     marvell,xenon-tun-count = <9>;
>>>> +     marvell,pad-type = "fixed-1-8v";
>>>> +
>>>> +     pinctrl-names = "default";
>>>> +     pinctrl-0 = <&mmc_pins>;
>>>> +     status = "okay";
>>>> +
>>>> +     #address-cells = <1>;
>>>> +     #size-cells = <0>;
>>>> +     mmccard: mmccard at 0 {
>>>> +             compatible = "mmc-card";
>>>> +             reg = <0>;
>>>> +     };
>>>> +};
>>>> +
>>>> +&spi0 {
>>>> +     status = "okay";
>>>> +     pinctrl-names = "default";
>>>> +     pinctrl-0 = <&spi_quad_pins>;
>>>> +
>>>> +     spi-flash at 0 {
>>>> +             #address-cells = <1>;
>>>> +             #size-cells = <1>;
>>>> +             compatible = "st,m25p128", "jedec,spi-nor";
>>>> +             reg = <0>; /* Chip select 0 */
>>>> +             spi-max-frequency = <50000000>;
>>>> +             m25p,fast-read;
>>>> +
>>>> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>>>> +             partitions {
>>>> +                     compatible = "fixed-partitions";
>>>> +                     #address-cells = <1>;
>>>> +                     #size-cells = <1>;
>>>> +
>>>> +                     partition at firmware {
>>>> +                             reg = <0 CONFIG_ENV_OFFSET>;
>>>> +                             label = "firmware";
>>>> +                     };
>>>> +
>>>> +                     partition at u-boot-env {
>>>> +                             reg = <CONFIG_ENV_OFFSET CONFIG_ENV_SIZE>;
>>>> +                             label = "u-boot-env";
>>>> +                     };
>>>> +             };
>>>> +#endif
>>>> +     };
>>>> +};
>>>> +
>>>> +/* Exported on the micro USB connector CON32 through an FTDI */
>>>> +&uart0 {
>>>> +     pinctrl-names = "default";
>>>> +     pinctrl-0 = <&uart1_pins>;
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +/* CON29 */
>>>> +&usb2 {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +/* CON31 */
>>>> +&usb3 {
>>>> +     status = "okay";
>>>> +};
>>>> +
>>>> +&pcie0 {
>>>> +     pinctrl-names = "default";
>>>> +     pinctrl-0 = <&pcie_pins>;
>>>> +     reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>;
>>>> +     status = "okay";
>>>> +};
>>>> diff --git a/board/Marvell/mvebu_armada-37xx/MAINTAINERS b/board/Marvell/mvebu_armada-37xx/MAINTAINERS
>>>> index f2c0a582d7..d69af832fc 100644
>>>> --- a/board/Marvell/mvebu_armada-37xx/MAINTAINERS
>>>> +++ b/board/Marvell/mvebu_armada-37xx/MAINTAINERS
>>>> @@ -10,6 +10,14 @@ M: Konstantin Porotchkin <kostap at marvell.com>
>>>>   S:   Maintained
>>>>   F:   configs/mvebu_espressobin-88f3720_defconfig
>>>>
>>>> +ESPRESSOBin-Ultra BOARD
>>>> +M:   Luka Kovacic <luka.kovacic at sartura.hr>
>>>> +M:   Robert Marko <robert.marko at sartura.hr>
>>>> +M:   Luka Perkov <luka.perkov at sartura.hr>
>>>> +S:   Maintained
>>>> +F:   arch/arm/dts/armada-3720-espressobin-ultra.dts
>>>> +F:   configs/mvebu_espressobin-ultra-88f3720_defconfig
>>>> +
>>>>   uDPU BOARD
>>>>   M:   Vladimir Vid <vladimir.vid at sartura.hr>
>>>>   S:   Maintained
>>>> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
>>>> index 2de9c2ac17..21c1eb7b22 100644
>>>> --- a/board/Marvell/mvebu_armada-37xx/board.c
>>>> +++ b/board/Marvell/mvebu_armada-37xx/board.c
>>>> @@ -11,6 +11,7 @@
>>>>   #include <i2c.h>
>>>>   #include <init.h>
>>>>   #include <mmc.h>
>>>> +#include <miiphy.h>
>>>>   #include <phy.h>
>>>>   #include <asm/global_data.h>
>>>>   #include <asm/io.h>
>>>> @@ -55,6 +56,15 @@ DECLARE_GLOBAL_DATA_PTR;
>>>>   #define MVEBU_G2_SMI_PHY_CMD_REG     (24)
>>>>   #define MVEBU_G2_SMI_PHY_DATA_REG    (25)
>>>>
>>>> +/* Marvell 88E1512 */
>>>> +#define MII_MARVELL_PHY_PAGE         22
>>>> +
>>>> +#define MV88E1512_GENERAL_CTRL               20
>>>> +#define MV88E1512_MODE_SGMII         1
>>>> +#define MV88E1512_RESET_OFFS         15
>>>> +
>>>> +#define ULTRA_MV88E1512_PHYADDR              0x1
>>>> +
>>>>   /*
>>>>    * Memory Controller Registers
>>>>    *
>>>> @@ -282,12 +292,68 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
>>>>        return 0;
>>>>   }
>>>>
>>>> -/* Bring-up board-specific network stuff */
>>>> -int board_network_enable(struct mii_dev *bus)
>>>> +void force_phy_88e1512_sgmii_to_copper(u16 devaddr)
>>>>   {
>>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
>>>> -             return 0;
>>>> +     const char *name;
>>>> +     u16 reg;
>>>> +
>>>> +     name = miiphy_get_current_dev();
>>>> +     if (name) {
>>>> +             /* SGMII-to-Copper mode initialization */
>>>> +
>>>> +             /* Select page 18 */
>>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0x12);
>>>> +             /* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */
>>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
>>>> +             reg &= ~0x7;
>>>> +             reg |= MV88E1512_MODE_SGMII;
>>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
>>>> +             /* PHY reset is necessary after changing MODE[2:0] */
>>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
>>>> +             reg |= 1 << MV88E1512_RESET_OFFS;
>>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
>>>> +             /* Reset page selection */
>>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0);
>>>> +             udelay(100);
>>>> +     }
>>>> +}
>>>> +
>>>> +int board_network_enable_espressobin_ultra(struct mii_dev *bus)
>>>> +{
>>>> +     int i;
>>>> +     /* Setup 88E1512 SGMII-to-Copper mode */
>>>> +     force_phy_88e1512_sgmii_to_copper(ULTRA_MV88E1512_PHYADDR);
>>>>
>>>> +     /*
>>>> +      * FIXME: remove this code once Topaz driver gets available
>>>> +      * A3720 ESPRESSObin Ultra Board Only
>>>> +      * Configure Topaz switch (88E6341)
>>>> +      * Set port 1,2,3,4,5 to forwarding Mode (through Switch Port registers)
>>>> +      */
>>>> +     for (i = 0; i <= 5; i++) {
>>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(i),
>>>> +                                       MVEBU_SW_PORT_CTRL_REG,
>>>> +                                       i == 5 ? 0x7c : 0x7f);
>>>> +     }
>>>> +
>>>> +     /* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
>>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(0),
>>>> +                               MVEBU_SW_LINK_CTRL_REG, 0xe002);
>>>> +
>>>> +     /* Power up PHY 1, 2, 3, 4, 5 (through Global 2 registers) */
>>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
>>>> +                               MVEBU_G2_SMI_PHY_DATA_REG, 0x1140);
>>>> +     for (i = 1; i <= 5; i++) {
>>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
>>>> +                                       MVEBU_G2_SMI_PHY_CMD_REG, 0x9400 +
>>>> +                                       (MVEBU_PORT_CTRL_SMI_ADDR(i) << 5));
>>>> +     }
>>>> +
>>>> +     return 0;
>>>> +}
>>>> +
>>>> +int board_network_enable_espressobin(struct mii_dev *bus)
>>>> +{
>>>>        /*
>>>>         * FIXME: remove this code once Topaz driver gets available
>>>>         * A3720 Community Board Only
>>>> @@ -328,6 +394,16 @@ int board_network_enable(struct mii_dev *bus)
>>>>        return 0;
>>>>   }
>>>>
>>>> +/* Bring-up the board-specific networking */
>>>> +int board_network_enable(struct mii_dev *bus)
>>>> +{
>>>> +     if (of_machine_is_compatible("globalscale,espressobin"))
>>>> +             return board_network_enable_espressobin(bus);
>>>> +     if (of_machine_is_compatible("globalscale,espressobin-ultra"))
>>>> +             return board_network_enable_espressobin_ultra(bus);
>>>> +     return 0;
>>>> +}
>>>> +
>>>>   #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_ENV_IS_IN_SPI_FLASH)
>>>>   int ft_board_setup(void *blob, struct bd_info *bd)
>>>>   {
>>>> @@ -336,8 +412,12 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>>>>        int parts_off;
>>>>        int part_off;
>>>>
>>>> -     /* Fill SPI MTD partitions for Linux kernel on Espressobin */
>>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
>>>> +     /*
>>>> +      * Fill SPI MTD partitions for the Linux kernel on ESPRESSOBin and
>>>> +      * ESPRESSOBin Ultra boards.
>>>> +      */
>>>> +     if (!of_machine_is_compatible("globalscale,espressobin") &&
>>>> +         !of_machine_is_compatible("globalscale,espressobin-ultra"))
>>>>                return 0;
>>>>
>>>>        spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
>>>> diff --git a/configs/mvebu_espressobin-ultra-88f3720_defconfig b/configs/mvebu_espressobin-ultra-88f3720_defconfig
>>>> new file mode 100644
>>>> index 0000000000..1bac0a96ad
>>>> --- /dev/null
>>>> +++ b/configs/mvebu_espressobin-ultra-88f3720_defconfig
>>>> @@ -0,0 +1,93 @@
>>>> +CONFIG_ARM=y
>>>> +CONFIG_ARCH_CPU_INIT=y
>>>> +CONFIG_ARCH_MVEBU=y
>>>> +CONFIG_SYS_TEXT_BASE=0x00000000
>>>> +CONFIG_SYS_MALLOC_F_LEN=0x2000
>>>> +CONFIG_NR_DRAM_BANKS=1
>>>> +CONFIG_TARGET_MVEBU_ARMADA_37XX=y
>>>> +CONFIG_ENV_SIZE=0x10000
>>>> +CONFIG_ENV_OFFSET=0x3F0000
>>>> +CONFIG_ENV_SECT_SIZE=0x10000
>>>> +CONFIG_DM_GPIO=y
>>>> +CONFIG_DEBUG_UART_BASE=0xd0012000
>>>> +CONFIG_DEFAULT_DEVICE_TREE="armada-3720-espressobin-ultra"
>>>> +CONFIG_DEBUG_UART=y
>>>> +CONFIG_AHCI=y
>>>> +CONFIG_DISTRO_DEFAULTS=y
>>>> +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
>>>> +CONFIG_OF_BOARD_SETUP=y
>>>> +CONFIG_FIT=y
>>>> +CONFIG_FIT_VERBOSE=y
>>>> +CONFIG_FIT_BEST_MATCH=y
>>>> +CONFIG_AUTOBOOT_KEYED=y
>>>> +CONFIG_AUTOBOOT_PROMPT="Autoboot in %d seconds, to stop use 's' key\n"
>>>> +CONFIG_AUTOBOOT_STOP_STR="s"
>>>> +CONFIG_AUTOBOOT_KEYED_CTRLC=y
>>>> +CONFIG_HUSH_PARSER=y
>>>> +CONFIG_SYS_CONSOLE_INFO_QUIET=y
>>>> +# CONFIG_DISPLAY_CPUINFO is not set
>>>> +# CONFIG_DISPLAY_BOARDINFO is not set
>>>> +CONFIG_DISPLAY_BOARDINFO_LATE=y
>>>> +CONFIG_ARCH_EARLY_INIT_R=y
>>>> +CONFIG_BOARD_EARLY_INIT_F=y
>>>> +CONFIG_BOARD_LATE_INIT=y
>>>> +# CONFIG_CMD_FLASH is not set
>>>> +CONFIG_CMD_GPIO=y
>>>> +CONFIG_CMD_I2C=y
>>>> +CONFIG_CMD_MMC=y
>>>> +CONFIG_CMD_MTD=y
>>>> +CONFIG_CMD_PCI=y
>>>> +CONFIG_CMD_SPI=y
>>>> +CONFIG_CMD_USB=y
>>>> +CONFIG_CMD_WDT=y
>>>> +# CONFIG_CMD_SETEXPR is not set
>>>> +CONFIG_CMD_TFTPPUT=y
>>>> +CONFIG_CMD_CACHE=y
>>>> +CONFIG_CMD_TIME=y
>>>> +CONFIG_CMD_MVEBU_BUBT=y
>>>> +CONFIG_MVEBU_MAC_HW_INFO=y
>>>> +CONFIG_CMD_EXT4_WRITE=y
>>>> +CONFIG_MAC_PARTITION=y
>>>> +CONFIG_ENV_OVERWRITE=y
>>>> +CONFIG_ENV_IS_IN_SPI_FLASH=y
>>>> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
>>>> +CONFIG_NET_RANDOM_ETHADDR=y
>>>> +CONFIG_AHCI_MVEBU=y
>>>> +CONFIG_CLK=y
>>>> +CONFIG_CLK_MVEBU=y
>>>> +CONFIG_DM_I2C=y
>>>> +CONFIG_MISC=y
>>>> +CONFIG_MMC_SDHCI=y
>>>> +CONFIG_MMC_SDHCI_SDMA=y
>>>> +CONFIG_MMC_SDHCI_XENON=y
>>>> +CONFIG_MTD=y
>>>> +CONFIG_DM_MTD=y
>>>> +CONFIG_SF_DEFAULT_MODE=0
>>>> +CONFIG_SPI_FLASH_MACRONIX=y
>>>> +CONFIG_SPI_FLASH_MTD=y
>>>> +CONFIG_PHY_MARVELL=y
>>>> +CONFIG_PHY_GIGE=y
>>>> +CONFIG_MVNETA=y
>>>> +CONFIG_PCI=y
>>>> +CONFIG_PCI_AARDVARK=y
>>>> +CONFIG_PHY=y
>>>> +CONFIG_MVEBU_COMPHY_SUPPORT=y
>>>> +CONFIG_PINCTRL=y
>>>> +CONFIG_PINCTRL_ARMADA_37XX=y
>>>> +CONFIG_DM_REGULATOR_GPIO=y
>>>> +CONFIG_DEBUG_UART_SHIFT=2
>>>> +CONFIG_DEBUG_UART_ANNOUNCE=y
>>>> +CONFIG_MVEBU_A3700_UART=y
>>>> +CONFIG_MVEBU_A3700_SPI=y
>>>> +CONFIG_USB=y
>>>> +CONFIG_USB_XHCI_HCD=y
>>>> +CONFIG_USB_EHCI_HCD=y
>>>> +CONFIG_USB_HOST_ETHER=y
>>>> +# CONFIG_WATCHDOG_AUTOSTART is not set
>>>> +CONFIG_WDT=y
>>>> +CONFIG_WDT_ARMADA_37XX=y
>>>> +CONFIG_SHA1=y
>>>> +CONFIG_DM_RTC=y
>>>> +CONFIG_RTC_PCF8563=y
>>>> +CONFIG_LED=y
>>>> +CONFIG_LED_GPIO=y
>>>> --
>>>> 2.31.1
>>>>
>>
>> Kind regards,
>> Luka


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list