uboot-mvebu: add support for espressobin
authorAndre Heider <a.heider@gmail.com>
Sat, 2 Nov 2019 12:14:08 +0000 (13:14 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Fri, 18 Sep 2020 19:42:05 +0000 (21:42 +0200)
This builds two u-boot binaries: one for boards without eMMC and one
with.

Signed-off-by: Andre Heider <a.heider@gmail.com>
package/boot/uboot-mvebu/Makefile
package/boot/uboot-mvebu/patches/130-mmc-xenon_sdhci-Add-missing-common-host-capabilities.patch [new file with mode: 0644]
package/boot/uboot-mvebu/patches/131-arm64-dts-armada-3720-espressobin-use-Linux-model-co.patch [new file with mode: 0644]
package/boot/uboot-mvebu/patches/132-arm64-dts-armada-3720-espressobin-split-common-parts.patch [new file with mode: 0644]
package/boot/uboot-mvebu/patches/133-arm64-dts-a3720-add-support-for-boards-with-populate.patch [new file with mode: 0644]
package/boot/uboot-mvebu/patches/134-arm-mvebu-Espressobin-Set-environment-variable-fdtfi.patch [new file with mode: 0644]

index 8db3c1272d86b4b2c7908d99b661a3b6bf5197b7..9a1b5ed63d18258684ebc8fbd6acfc70d97c92b7 100644 (file)
@@ -36,6 +36,21 @@ define U-Boot/helios4
   UBOOT_IMAGE:=u-boot-spl.kwb
 endef
 
+define U-Boot/espressobin
+  NAME:=Marvell ESPRESSObin
+  BUILD_DEVICES:=globalscale_espressobin globalscale_espressobin-v7
+  BUILD_SUBTARGET:=cortexa53
+  UBOOT_CONFIG:=mvebu_espressobin-88f3720
+endef
+
+define U-Boot/espressobin-emmc
+  NAME:=Marvell ESPRESSObin
+  BUILD_DEVICES:=globalscale_espressobin-emmc globalscale_espressobin-v7-emmc
+  BUILD_SUBTARGET:=cortexa53
+  UBOOT_CONFIG:=mvebu_espressobin-88f3720
+  UBOOT_MAKE_FLAGS+=DEVICE_TREE=armada-3720-espressobin-emmc
+endef
+
 define U-Boot/uDPU
   NAME:=Methode uDPU
   BUILD_DEVICES:=methode_udpu
@@ -45,6 +60,8 @@ endef
 UBOOT_TARGETS:= \
        clearfog \
        helios4 \
+       espressobin \
+       espressobin-emmc \
        uDPU
 
 Build/Exports:=$(Host/Exports)
diff --git a/package/boot/uboot-mvebu/patches/130-mmc-xenon_sdhci-Add-missing-common-host-capabilities.patch b/package/boot/uboot-mvebu/patches/130-mmc-xenon_sdhci-Add-missing-common-host-capabilities.patch
new file mode 100644 (file)
index 0000000..fa41f01
--- /dev/null
@@ -0,0 +1,43 @@
+From 264c45575ec6a3d507dc4e43954b8a78283aca6c Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider@gmail.com>
+Date: Thu, 10 Sep 2020 17:58:43 +0200
+Subject: [PATCH] mmc: xenon_sdhci: Add missing common host capabilities
+
+Use mmc_of_parse() to set the common host properties. That includes
+"bus-width", so parsing it can be removed from the driver.
+
+But more importantly, "non-removable" is now respected, which fixes
+the usage of eMMC.
+
+Signed-off-by: Andre Heider <a.heider@gmail.com>
+---
+ drivers/mmc/xenon_sdhci.c | 18 ++++--------------
+ 1 file changed, 4 insertions(+), 14 deletions(-)
+
+--- a/drivers/mmc/xenon_sdhci.c
++++ b/drivers/mmc/xenon_sdhci.c
+@@ -485,20 +485,10 @@ static int xenon_sdhci_probe(struct udev
+               armada_3700_soc_pad_voltage_set(host);
+       host->host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_DDR_52MHz;
+-      switch (fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "bus-width",
+-              1)) {
+-      case 8:
+-              host->host_caps |= MMC_MODE_8BIT;
+-              break;
+-      case 4:
+-              host->host_caps |= MMC_MODE_4BIT;
+-              break;
+-      case 1:
+-              break;
+-      default:
+-              printf("Invalid \"bus-width\" value\n");
+-              return -EINVAL;
+-      }
++
++      ret = mmc_of_parse(dev, &plat->cfg);
++      if (ret)
++              return ret;
+       host->ops = &xenon_sdhci_ops;
diff --git a/package/boot/uboot-mvebu/patches/131-arm64-dts-armada-3720-espressobin-use-Linux-model-co.patch b/package/boot/uboot-mvebu/patches/131-arm64-dts-armada-3720-espressobin-use-Linux-model-co.patch
new file mode 100644 (file)
index 0000000..1aef9db
--- /dev/null
@@ -0,0 +1,45 @@
+From 753947e2c374820dcbc9c86626812aeb7d460653 Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider@gmail.com>
+Date: Fri, 4 Sep 2020 16:34:22 +0200
+Subject: [PATCH] arm64: dts: armada-3720-espressobin: use Linux
+ model/compatible strings
+
+Fix the actual board vendor and ease synching dts files from Linux.
+---
+ arch/arm/dts/armada-3720-espressobin.dts | 4 ++--
+ board/Marvell/mvebu_armada-37xx/board.c  | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/arch/arm/dts/armada-3720-espressobin.dts
++++ b/arch/arm/dts/armada-3720-espressobin.dts
+@@ -50,8 +50,8 @@
+ #include "armada-372x.dtsi"
+ / {
+-      model = "Marvell Armada 3720 Community Board ESPRESSOBin";
+-      compatible = "marvell,armada-3720-espressobin", "marvell,armada3720", "marvell,armada3710";
++      model = "Globalscale Marvell ESPRESSOBin Board";
++      compatible = "globalscale,espressobin", "marvell,armada3720", "marvell,armada3710";
+       chosen {
+               stdout-path = "serial0:115200n8";
+--- a/board/Marvell/mvebu_armada-37xx/board.c
++++ b/board/Marvell/mvebu_armada-37xx/board.c
+@@ -201,7 +201,7 @@ static int mii_multi_chip_mode_write(str
+ /* Bring-up board-specific network stuff */
+ int board_network_enable(struct mii_dev *bus)
+ {
+-      if (!of_machine_is_compatible("marvell,armada-3720-espressobin"))
++      if (!of_machine_is_compatible("globalscale,espressobin"))
+               return 0;
+       /*
+@@ -253,7 +253,7 @@ int ft_board_setup(void *blob, struct bd
+       int part_off;
+       /* Fill SPI MTD partitions for Linux kernel on Espressobin */
+-      if (!of_machine_is_compatible("marvell,armada-3720-espressobin"))
++      if (!of_machine_is_compatible("globalscale,espressobin"))
+               return 0;
+       spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
diff --git a/package/boot/uboot-mvebu/patches/132-arm64-dts-armada-3720-espressobin-split-common-parts.patch b/package/boot/uboot-mvebu/patches/132-arm64-dts-armada-3720-espressobin-split-common-parts.patch
new file mode 100644 (file)
index 0000000..d3af221
--- /dev/null
@@ -0,0 +1,369 @@
+From ee59573dd531df96de0d9dc8e79b34ed3716c864 Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider@gmail.com>
+Date: Fri, 4 Sep 2020 15:38:58 +0200
+Subject: [PATCH] arm64: dts: armada-3720-espressobin: split common parts to
+ .dtsi
+
+Move most of the dts to the new common
+arch/arm/dts/armada-3720-espressobin.dtsi file, just like Linux has.
+
+The dts itself is imported from Linux.
+
+Signed-off-by: Andre Heider <a.heider@gmail.com>
+---
+ arch/arm/dts/armada-3720-espressobin.dts      | 190 ++----------------
+ ...sobin.dts => armada-3720-espressobin.dtsi} |   3 -
+ 2 files changed, 20 insertions(+), 173 deletions(-)
+ rewrite arch/arm/dts/armada-3720-espressobin.dts (95%)
+ copy arch/arm/dts/{armada-3720-espressobin.dts => armada-3720-espressobin.dtsi} (96%)
+
+--- a/arch/arm/dts/armada-3720-espressobin.dts
++++ b/arch/arm/dts/armada-3720-espressobin.dts
+@@ -1,170 +1,20 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+ /*
+- * Device Tree file for Marvell Armada 3720 community board
+- * (ESPRESSOBin)
++ * Device Tree file for Globalscale Marvell ESPRESSOBin Board
+  * Copyright (C) 2016 Marvell
+  *
+- * Gregory CLEMENT <gregory.clement@free-electrons.com>
+- * Konstantin Porotchkin <kostap@marvell.com>
++ * Romain Perier <romain.perier@free-electrons.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.
++ */
++/*
++ * Schematic available at http://espressobin.net/wp-content/uploads/2017/08/ESPRESSObin_V5_Schematics.pdf
+  */
+ /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@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 = <PHY_TYPE_USB3_HOST0>;
+-              phy-speed = <PHY_SPEED_5G>;
+-      };
+-
+-      phy1 {
+-              phy-type = <PHY_TYPE_PEX0>;
+-              phy-speed = <PHY_SPEED_2_5G>;
+-      };
+-
+-      phy2 {
+-              phy-type = <PHY_TYPE_SATA0>;
+-              phy-speed = <PHY_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";
+-};
+-
+-&spi0 {
+-      status = "okay";
+-      pinctrl-names = "default";
+-      pinctrl-0 = <&spi_quad_pins>;
+-
+-      spi-flash@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;
+-      };
+-};
+-
+-/* 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";
+ };
+--- /dev/null
++++ b/arch/arm/dts/armada-3720-espressobin.dtsi
+@@ -0,0 +1,167 @@
++/*
++ * Device Tree file for Marvell Armada 3720 community board
++ * (ESPRESSOBin)
++ * Copyright (C) 2016 Marvell
++ *
++ * Gregory CLEMENT <gregory.clement@free-electrons.com>
++ * Konstantin Porotchkin <kostap@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"
++
++/ {
++      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@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 = <PHY_TYPE_USB3_HOST0>;
++              phy-speed = <PHY_SPEED_5G>;
++      };
++
++      phy1 {
++              phy-type = <PHY_TYPE_PEX0>;
++              phy-speed = <PHY_SPEED_2_5G>;
++      };
++
++      phy2 {
++              phy-type = <PHY_TYPE_SATA0>;
++              phy-speed = <PHY_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";
++};
++
++&spi0 {
++      status = "okay";
++      pinctrl-names = "default";
++      pinctrl-0 = <&spi_quad_pins>;
++
++      spi-flash@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;
++      };
++};
++
++/* 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/package/boot/uboot-mvebu/patches/133-arm64-dts-a3720-add-support-for-boards-with-populate.patch b/package/boot/uboot-mvebu/patches/133-arm64-dts-a3720-add-support-for-boards-with-populate.patch
new file mode 100644 (file)
index 0000000..f35b45d
--- /dev/null
@@ -0,0 +1,89 @@
+From 83908b6e2e5a7d7b0f4d040ffb4bf3ce6807b8fe Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider@gmail.com>
+Date: Fri, 4 Sep 2020 15:44:41 +0200
+Subject: [PATCH] arm64: dts: a3720: add support for boards with populated emmc
+
+Import armada-3720-espressobin-emmc.dts from Linux, but use sdhc1 for
+emmc, since sdhc0 is used for the sd card.
+
+Signed-off-by: Andre Heider <a.heider@gmail.com>
+---
+ arch/arm/dts/Makefile                         |  1 +
+ arch/arm/dts/armada-3720-espressobin-emmc.dts | 44 +++++++++++++++++++
+ doc/README.marvell                            |  7 ++-
+ 3 files changed, 50 insertions(+), 2 deletions(-)
+ create mode 100644 arch/arm/dts/armada-3720-espressobin-emmc.dts
+
+--- a/arch/arm/dts/Makefile
++++ b/arch/arm/dts/Makefile
+@@ -202,6 +202,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harm
+ dtb-$(CONFIG_ARCH_MVEBU) +=                   \
+       armada-3720-db.dtb                      \
+       armada-3720-espressobin.dtb             \
++      armada-3720-espressobin-emmc.dtb        \
+       armada-3720-turris-mox.dtb              \
+       armada-3720-uDPU.dtb                    \
+       armada-375-db.dtb                       \
+--- /dev/null
++++ b/arch/arm/dts/armada-3720-espressobin-emmc.dts
+@@ -0,0 +1,44 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++/*
++ * Device Tree file for Globalscale Marvell ESPRESSOBin Board with eMMC
++ * Copyright (C) 2018 Marvell
++ *
++ * Romain Perier <romain.perier@free-electrons.com>
++ * Konstantin Porotchkin <kostap@marvell.com>
++ *
++ */
++/*
++ * Schematic available at http://espressobin.net/wp-content/uploads/2017/08/ESPRESSObin_V5_Schematics.pdf
++ */
++
++/dts-v1/;
++
++#include "armada-3720-espressobin.dtsi"
++
++/ {
++      model = "Globalscale Marvell ESPRESSOBin Board (eMMC)";
++      compatible = "globalscale,espressobin-emmc", "globalscale,espressobin",
++                   "marvell,armada3720", "marvell,armada3710";
++};
++
++/* 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@0 {
++              compatible = "mmc-card";
++              reg = <0>;
++      };
++};
+--- a/doc/README.marvell
++++ b/doc/README.marvell
+@@ -43,8 +43,11 @@ Build Procedure
+         In order to prevent this, the required device-tree MUST be set during compilation.
+         All device-tree files are located in ./arch/arm/dts/ folder.
+-      For other DB boards (MacchiatoBin, EspressoBin and 3700 DB board) compile u-boot with
+-      just default device-tree from defconfig using:
++      For the EspressoBin board with populated eMMC device use
++              # make DEVICE_TREE=armada-3720-espressobin-emmc
++
++      For other DB boards (MacchiatoBin, EspressoBin without soldered eMMC and 3700 DB board)
++      compile u-boot with just default device-tree from defconfig using:
+               # make
diff --git a/package/boot/uboot-mvebu/patches/134-arm-mvebu-Espressobin-Set-environment-variable-fdtfi.patch b/package/boot/uboot-mvebu/patches/134-arm-mvebu-Espressobin-Set-environment-variable-fdtfi.patch
new file mode 100644 (file)
index 0000000..fd270dd
--- /dev/null
@@ -0,0 +1,100 @@
+From d59406482c1847959305a986376b35e57da28e69 Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider@gmail.com>
+Date: Sat, 5 Sep 2020 12:45:59 +0200
+Subject: [PATCH] arm: mvebu: Espressobin: Set environment variable fdtfile
+
+Required for the generic distro mechanism.
+
+Linux ships with 4 variants:
+marvell/armada-3720-espressobin-v7-emmc.dtb
+marvell/armada-3720-espressobin-v7.dtb
+marvell/armada-3720-espressobin-emmc.dtb
+marvell/armada-3720-espressobin.dtb
+
+Use available information to determine the appropriate filename.
+
+Tested on a v5 board without eMMC.
+
+Signed-off-by: Andre Heider <a.heider@gmail.com>
+---
+ board/Marvell/mvebu_armada-37xx/board.c     | 47 +++++++++++++++++++++
+ configs/mvebu_espressobin-88f3720_defconfig |  1 +
+ 2 files changed, 48 insertions(+)
+
+--- a/board/Marvell/mvebu_armada-37xx/board.c
++++ b/board/Marvell/mvebu_armada-37xx/board.c
+@@ -5,6 +5,7 @@
+ #include <common.h>
+ #include <dm.h>
++#include <env.h>
+ #include <i2c.h>
+ #include <init.h>
+ #include <phy.h>
+@@ -50,6 +51,22 @@ DECLARE_GLOBAL_DATA_PTR;
+ #define MVEBU_G2_SMI_PHY_CMD_REG      (24)
+ #define MVEBU_G2_SMI_PHY_DATA_REG     (25)
++/*
++ * Memory Controller Registers
++ *
++ * Assembled based on public information:
++ * https://gitlab.nic.cz/turris/mox-boot-builder/-/blob/master/wtmi/main.c#L332-336
++ * https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/blob/mv_ddr-armada-18.12/drivers/mv_ddr_mc6.h#L309-L332
++ *
++ * And checked against the written register values for the various topologies:
++ * https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/blob/mv_ddr-armada-atf-mainline/a3700/mv_ddr_tim.h
++ */
++#define A3700_CH0_MC_CTRL2_REG                MVEBU_REGISTER(0x002c4)
++#define A3700_MC_CTRL2_SDRAM_TYPE_MASK        0xf
++#define A3700_MC_CTRL2_SDRAM_TYPE_OFFS        4
++#define A3700_MC_CTRL2_SDRAM_TYPE_DDR3        2
++#define A3700_MC_CTRL2_SDRAM_TYPE_DDR4        3
++
+ int board_early_init_f(void)
+ {
+       return 0;
+@@ -63,6 +80,36 @@ int board_init(void)
+       return 0;
+ }
++#ifdef CONFIG_BOARD_LATE_INIT
++int board_late_init(void)
++{
++      bool ddr4, emmc;
++
++      if (env_get("fdtfile"))
++              return 0;
++
++      if (!of_machine_is_compatible("globalscale,espressobin"))
++              return 0;
++
++      /* If the memory controller has been configured for DDR4, we're running on v7 */
++      ddr4 = ((readl(A3700_CH0_MC_CTRL2_REG) >> A3700_MC_CTRL2_SDRAM_TYPE_OFFS)
++              & A3700_MC_CTRL2_SDRAM_TYPE_MASK) == A3700_MC_CTRL2_SDRAM_TYPE_DDR4;
++
++      emmc = of_machine_is_compatible("globalscale,espressobin-emmc");
++
++      if (ddr4 && emmc)
++              env_set("fdtfile", "marvell/armada-3720-espressobin-v7-emmc.dtb");
++      else if (ddr4)
++              env_set("fdtfile", "marvell/armada-3720-espressobin-v7.dtb");
++      else if (emmc)
++              env_set("fdtfile", "marvell/armada-3720-espressobin-emmc.dtb");
++      else
++              env_set("fdtfile", "marvell/armada-3720-espressobin.dtb");
++
++      return 0;
++}
++#endif
++
+ /* Board specific AHCI / SATA enable code */
+ int board_ahci_enable(void)
+ {
+--- a/configs/mvebu_espressobin-88f3720_defconfig
++++ b/configs/mvebu_espressobin-88f3720_defconfig
+@@ -84,3 +84,4 @@ CONFIG_USB_ETHER_RTL8152=y
+ CONFIG_USB_ETHER_SMSC95XX=y
+ CONFIG_SHA1=y
+ CONFIG_SHA256=y
++CONFIG_BOARD_LATE_INIT=y