From: Andre Heider Date: Sat, 2 Nov 2019 12:14:08 +0000 (+0100) Subject: uboot-mvebu: add support for espressobin X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=72bb66caad5ac79294c92cb1ca115942b59080e1;p=openwrt%2Fstaging%2Fdedeckeh.git 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 --- 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 +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 +--- + 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 +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 +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 +--- + 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 +- * Konstantin Porotchkin ++ * Romain Perier + * +- * 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 = ð0; +- 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-speed = ; +- }; +- +- phy1 { +- phy-type = ; +- phy-speed = ; +- }; +- +- phy2 { +- phy-type = ; +- phy-speed = ; +- }; +-}; +- +-ð0 { +- 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 ++ * Konstantin Porotchkin ++ * ++ * 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 = ð0; ++ 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-speed = ; ++ }; ++ ++ phy1 { ++ phy-type = ; ++ phy-speed = ; ++ }; ++ ++ phy2 { ++ phy-type = ; ++ phy-speed = ; ++ }; ++}; ++ ++ð0 { ++ 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 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 +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 +--- + 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 ++ * Konstantin Porotchkin ++ * ++ */ ++/* ++ * 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 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 +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 +--- + 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 + #include ++#include + #include + #include + #include +@@ -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