[openwrt/openwrt] uboot-mvebu: add support for espressobin

LEDE Commits lede-commits at lists.infradead.org
Fri Sep 18 16:41:54 EDT 2020


hauke pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/72bb66caad5ac79294c92cb1ca115942b59080e1

commit 72bb66caad5ac79294c92cb1ca115942b59080e1
Author: Andre Heider <a.heider at gmail.com>
AuthorDate: Sat Nov 2 13:14:08 2019 +0100

    uboot-mvebu: add support for espressobin
    
    This builds two u-boot binaries: one for boards without eMMC and one
    with.
    
    Signed-off-by: Andre Heider <a.heider at gmail.com>
---
 package/boot/uboot-mvebu/Makefile                  |  17 +
 ...dhci-Add-missing-common-host-capabilities.patch |  43 +++
 ...rmada-3720-espressobin-use-Linux-model-co.patch |  45 +++
 ...rmada-3720-espressobin-split-common-parts.patch | 369 +++++++++++++++++++++
 ...3720-add-support-for-boards-with-populate.patch |  89 +++++
 ...spressobin-Set-environment-variable-fdtfi.patch | 100 ++++++
 6 files changed, 663 insertions(+)

diff --git a/package/boot/uboot-mvebu/Makefile b/package/boot/uboot-mvebu/Makefile
index 8db3c1272d..9a1b5ed63d 100644
--- a/package/boot/uboot-mvebu/Makefile
+++ b/package/boot/uboot-mvebu/Makefile
@@ -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
index 0000000000..fa41f01526
--- /dev/null
+++ b/package/boot/uboot-mvebu/patches/130-mmc-xenon_sdhci-Add-missing-common-host-capabilities.patch
@@ -0,0 +1,43 @@
+From 264c45575ec6a3d507dc4e43954b8a78283aca6c Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider at 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 at 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
index 0000000000..1aef9db900
--- /dev/null
+++ b/package/boot/uboot-mvebu/patches/131-arm64-dts-armada-3720-espressobin-use-Linux-model-co.patch
@@ -0,0 +1,45 @@
+From 753947e2c374820dcbc9c86626812aeb7d460653 Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider at 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
index 0000000000..d3af221c01
--- /dev/null
+++ b/package/boot/uboot-mvebu/patches/132-arm64-dts-armada-3720-espressobin-split-common-parts.patch
@@ -0,0 +1,369 @@
+From ee59573dd531df96de0d9dc8e79b34ed3716c864 Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider at 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 at 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 at free-electrons.com>
+- * Konstantin Porotchkin <kostap at marvell.com>
++ * Romain Perier <romain.perier at 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 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 = <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 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;
+-	};
+-};
+-
+-/* 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 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"
++
++/ {
++	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 = <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 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;
++	};
++};
++
++/* 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
index 0000000000..f35b45d0e1
--- /dev/null
+++ b/package/boot/uboot-mvebu/patches/133-arm64-dts-a3720-add-support-for-boards-with-populate.patch
@@ -0,0 +1,89 @@
+From 83908b6e2e5a7d7b0f4d040ffb4bf3ce6807b8fe Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider at 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 at 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 at free-electrons.com>
++ * Konstantin Porotchkin <kostap at 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 at 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
index 0000000000..fd270ddae2
--- /dev/null
+++ b/package/boot/uboot-mvebu/patches/134-arm-mvebu-Espressobin-Set-environment-variable-fdtfi.patch
@@ -0,0 +1,100 @@
+From d59406482c1847959305a986376b35e57da28e69 Mon Sep 17 00:00:00 2001
+From: Andre Heider <a.heider at 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 at 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



More information about the lede-commits mailing list