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 <p...@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.kova...@sartura.hr>
Cc: Luka Perkov <luka.per...@sartura.hr>
Cc: Robert Marko <robert.ma...@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 <jh...@globalscaletechnologies.com>
+ * Author: Luka Kovacic <luka.kova...@sartura.hr>
+ * Author: Vladimir Vid <vladimir....@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@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.clem...@free-electrons.com>
- * Konstantin Porotchkin <kos...@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@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@0 {
-             compatible = "mmc-card";
-             reg = <0>;
-     };
-};
-
-&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;
-
-#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
-             partitions {
-                     compatible = "fixed-partitions";
-                     #address-cells = <1>;
-                     #size-cells = <1>;
-
-                     partition@firmware {
-                             reg = <0 CONFIG_ENV_OFFSET>;
-                             label = "firmware";
-                     };
-
-                     partition@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.clem...@free-electrons.com>
+ * Konstantin Porotchkin <kos...@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@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@0 {
+             compatible = "mmc-card";
+             reg = <0>;
+     };
+};
+
+&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;
+
+#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
+             partitions {
+                     compatible = "fixed-partitions";
+                     #address-cells = <1>;
+                     #size-cells = <1>;
+
+                     partition@firmware {
+                             reg = <0 CONFIG_ENV_OFFSET>;
+                             label = "firmware";
+                     };
+
+                     partition@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 <kos...@marvell.com>
  S:   Maintained
  F:   configs/mvebu_espressobin-88f3720_defconfig

+ESPRESSOBin-Ultra BOARD
+M:   Luka Kovacic <luka.kova...@sartura.hr>
+M:   Robert Marko <robert.ma...@sartura.hr>
+M:   Luka Perkov <luka.per...@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....@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: s...@denx.de

Reply via email to