All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
       [not found] <mailman.4124.1628923685.660.u-boot@lists.denx.de>
@ 2021-08-14  7:59 ` Gérald Kerma
  2021-08-16  8:50   ` Luka Kovacic
  0 siblings, 1 reply; 18+ messages in thread
From: Gérald Kerma @ 2021-08-14  7:59 UTC (permalink / raw)
  To: Luka Kovacic, Pali Rohár
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun,,
	sr, sjg, patrick.delaunay, xypron.glpk

Héllo,
> Message: 2
> Date: Fri, 13 Aug 2021 12:03:57 +0200
> From: Luka Kovacic<luka.kovacic@sartura.hr>
> To: Pali Roh?r<pali@kernel.org>
> Cc:u-boot@lists.denx.de, Robert Marko<robert.marko@sartura.hr>,
> 	Luka Perkov<luka.perkov@sartura.hr>, Marek Behun
> 	<marek.behun@nic.cz>,sr@denx.de,sjg@chromium.org,
> 	patrick.delaunay@foss.st.com,xypron.glpk@gmx.de
> Subject: Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra
> 	board support
> Message-ID:
> 	<CADZsf3buKpgUJq_2yP1zakQbf0Hoq_4oPLdi69_d+qoR+Hbn0w@mail.gmail.com>
> Content-Type: text/plain; charset="UTF-8"
>
> Hello Pali,
>
> On Fri, Aug 13, 2021 at 11:27 AM Pali Roh?r<pali@kernel.org>  wrote:
>> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
>>> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
>>> Technologies, Inc.
>>>
>>> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
>>> Peripherals:
>>>   - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
>>>   - RTC clock (PCF8563)
>>>   - USB 3.0 port
>>>   - USB 2.0 port
>>>   - 4x LED
>>>   - UART over Micro-USB
>>>   - M.2 slot (2280)
>>>   - Mini PCI-E slot
>>>
>>> Additionally, automatic import of the Marvell hw_info parameters is
>>> enabled via the recently added mac command for A37XX platforms.
>>> The parameters stored in Marvell hw_info are usually the board serial
>>> number and MAC addresses.
>>>
>>> Signed-off-by: Luka Kovacic<luka.kovacic@sartura.hr>
>>> Cc: Luka Perkov<luka.perkov@sartura.hr>
>>> Cc: Robert Marko<robert.marko@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
>> ...

Thanks, all, for this job.

I am available for testing (if needed) on EspressoBin V7, with eMMC, and 
EspressoBin Ultra.

I have issue on EspressoBin Ultra, with the v2 patch for 
EspressoBin-Ultra, on OpenWrt 21.02-RC, fw_printenv do not works... (CRC 
Error)
I have the same issue with the Marvell (GlobalScale) u-Boot, factory and 
upgraded version.

Environments variables are correctly managed from the u-Boot itself.

Regards,
Gérald Kerma

PS : I am only registered to the digest, so I hope my mail will not be 
disturbing...

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-14  7:59 ` [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support Gérald Kerma
@ 2021-08-16  8:50   ` Luka Kovacic
  2021-08-16  9:47     ` Gérald Kerma
  0 siblings, 1 reply; 18+ messages in thread
From: Luka Kovacic @ 2021-08-16  8:50 UTC (permalink / raw)
  To: Gérald Kerma
  Cc: Pali Rohár, u-boot, Robert Marko, Luka Perkov, Marek Behun, ,
	Stefan Roese, sjg, patrick.delaunay, xypron.glpk

Hello Gerald,

On Sat, Aug 14, 2021 at 9:59 AM Gérald Kerma <gandalf@gk2.net> wrote:
>
> Héllo,
> > Message: 2
> > Date: Fri, 13 Aug 2021 12:03:57 +0200
> > From: Luka Kovacic<luka.kovacic@sartura.hr>
> > To: Pali Roh?r<pali@kernel.org>
> > Cc:u-boot@lists.denx.de, Robert Marko<robert.marko@sartura.hr>,
> >       Luka Perkov<luka.perkov@sartura.hr>, Marek Behun
> >       <marek.behun@nic.cz>,sr@denx.de,sjg@chromium.org,
> >       patrick.delaunay@foss.st.com,xypron.glpk@gmx.de
> > Subject: Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra
> >       board support
> > Message-ID:
> >       <CADZsf3buKpgUJq_2yP1zakQbf0Hoq_4oPLdi69_d+qoR+Hbn0w@mail.gmail.com>
> > Content-Type: text/plain; charset="UTF-8"
> >
> > Hello Pali,
> >
> > On Fri, Aug 13, 2021 at 11:27 AM Pali Roh?r<pali@kernel.org>  wrote:
> >> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> >>> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> >>> Technologies, Inc.
> >>>
> >>> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> >>> Peripherals:
> >>>   - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> >>>   - RTC clock (PCF8563)
> >>>   - USB 3.0 port
> >>>   - USB 2.0 port
> >>>   - 4x LED
> >>>   - UART over Micro-USB
> >>>   - M.2 slot (2280)
> >>>   - Mini PCI-E slot
> >>>
> >>> Additionally, automatic import of the Marvell hw_info parameters is
> >>> enabled via the recently added mac command for A37XX platforms.
> >>> The parameters stored in Marvell hw_info are usually the board serial
> >>> number and MAC addresses.
> >>>
> >>> Signed-off-by: Luka Kovacic<luka.kovacic@sartura.hr>
> >>> Cc: Luka Perkov<luka.perkov@sartura.hr>
> >>> Cc: Robert Marko<robert.marko@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
> >> ...
>
> Thanks, all, for this job.
>
> I am available for testing (if needed) on EspressoBin V7, with eMMC, and
> EspressoBin Ultra.

Thanks for offering your help. Can you test the following patchset
(v4), when it's out,
as some implementation issues still have to be resolved here?

>
> I have issue on EspressoBin Ultra, with the v2 patch for
> EspressoBin-Ultra, on OpenWrt 21.02-RC, fw_printenv do not works... (CRC
> Error)
> I have the same issue with the Marvell (GlobalScale) u-Boot, factory and
> upgraded version.

Did you specify the U-Boot environment location correctly in the fw_printenv
config?

> Environments variables are correctly managed from the u-Boot itself.
>
> Regards,
> Gérald Kerma
>
> PS : I am only registered to the digest, so I hope my mail will not be
> disturbing...

Kind regards,
Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-16  8:50   ` Luka Kovacic
@ 2021-08-16  9:47     ` Gérald Kerma
  0 siblings, 0 replies; 18+ messages in thread
From: Gérald Kerma @ 2021-08-16  9:47 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: Pali Rohár, u-boot, Robert Marko, Luka Perkov, Marek Behun,,
	Stefan Roese, sjg, patrick.delaunay, xypron.glpk

Héllo Luka,

Le 16/08/2021 à 10:50, Luka Kovacic a écrit :
> Hello Gerald,
>
> On Sat, Aug 14, 2021 at 9:59 AM Gérald Kerma <gandalf@gk2.net> wrote:
>> Héllo,
>>> Message: 2
>>> Date: Fri, 13 Aug 2021 12:03:57 +0200
>>> From: Luka Kovacic<luka.kovacic@sartura.hr>
>>> To: Pali Roh?r<pali@kernel.org>
>>> Cc:u-boot@lists.denx.de, Robert Marko<robert.marko@sartura.hr>,
>>>        Luka Perkov<luka.perkov@sartura.hr>, Marek Behun
>>>        <marek.behun@nic.cz>,sr@denx.de,sjg@chromium.org,
>>>        patrick.delaunay@foss.st.com,xypron.glpk@gmx.de
>>> Subject: Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra
>>>        board support
>>> Message-ID:
>>>        <CADZsf3buKpgUJq_2yP1zakQbf0Hoq_4oPLdi69_d+qoR+Hbn0w@mail.gmail.com>
>>> Content-Type: text/plain; charset="UTF-8"
>>>
>>> Hello Pali,
>>>
>>> On Fri, Aug 13, 2021 at 11:27 AM Pali Roh?r<pali@kernel.org>  wrote:
>>>> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
>>>>> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
>>>>> Technologies, Inc.
>>>>>
>>>>> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
>>>>> Peripherals:
>>>>>    - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
>>>>>    - RTC clock (PCF8563)
>>>>>    - USB 3.0 port
>>>>>    - USB 2.0 port
>>>>>    - 4x LED
>>>>>    - UART over Micro-USB
>>>>>    - M.2 slot (2280)
>>>>>    - Mini PCI-E slot
>>>>>
>>>>> Additionally, automatic import of the Marvell hw_info parameters is
>>>>> enabled via the recently added mac command for A37XX platforms.
>>>>> The parameters stored in Marvell hw_info are usually the board serial
>>>>> number and MAC addresses.
>>>>>
>>>>> Signed-off-by: Luka Kovacic<luka.kovacic@sartura.hr>
>>>>> Cc: Luka Perkov<luka.perkov@sartura.hr>
>>>>> Cc: Robert Marko<robert.marko@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
>>>> ...
>> Thanks, all, for this job.
>>
>> I am available for testing (if needed) on EspressoBin V7, with eMMC, and
>> EspressoBin Ultra.
> Thanks for offering your help. Can you test the following patchset
> (v4), when it's out,
> as some implementation issues still have to be resolved here?

Sure...

>> I have issue on EspressoBin Ultra, with the v2 patch for
>> EspressoBin-Ultra, on OpenWrt 21.02-RC, fw_printenv do not works... (CRC
>> Error)
>> I have the same issue with the Marvell (GlobalScale) u-Boot, factory and
>> upgraded version.
> Did you specify the U-Boot environment location correctly in the fw_printenv
> config?
I think so : but It do not works...

root@ULTRA-5G:~# cat /etc/fw_env.config
#/dev/mtd0 0x3f0000 0x10000 0x10000 1
/dev/mtd2 0x0 0x10000 0x10000 1
root@ULTRA-5G:~# fw_printenv
Warning: Bad CRC, using default environment
bootcmd=bootp; setenv bootargs root=/dev/nfs 
nfsroot=${serverip}:${rootpath} 
ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; bootm
bootdelay=5
baudrate=115200

>> Environments variables are correctly managed from the u-Boot itself.
>>
>> Regards,
>> Gérald Kerma
>>
>> PS : I am only registered to the digest, so I hope my mail will not be
>> disturbing...
> Kind regards,
> Luka

Best regards,
Gérald

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-09-24 18:30               ` Pali Rohár
@ 2021-09-27  8:31                 ` Luka Kovacic
  0 siblings, 0 replies; 18+ messages in thread
From: Luka Kovacic @ 2021-09-27  8:31 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Stefan Roese, u-boot, Robert Marko, Luka Perkov, Marek Behun,
	sjg, patrick.delaunay, xypron.glpk

Hello Pali,

> Hello Luka! Do you need some help with this?

I wasn't able to get to this yet, as I am working on something else
right now and will circle back to the ESPRESSOBin-Ultra shortly.

Kind regards,
Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13 10:46             ` Pali Rohár
@ 2021-09-24 18:30               ` Pali Rohár
  2021-09-27  8:31                 ` Luka Kovacic
  0 siblings, 1 reply; 18+ messages in thread
From: Pali Rohár @ 2021-09-24 18:30 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: Stefan Roese, u-boot, Robert Marko, Luka Perkov, Marek Behun,
	sjg, patrick.delaunay, xypron.glpk

On Friday 13 August 2021 12:46:38 Pali Rohár wrote:
> On Friday 13 August 2021 12:25:46 Luka Kovacic wrote:
> > Hello Stefan and Pali,
> > 
> > On Fri, Aug 13, 2021 at 11:58 AM Stefan Roese <sr@denx.de> wrote:
> > >
> > > Hi,
> > >
> > > On 13.08.21 11:54, Pali Rohár wrote:
> > > > On Friday 13 August 2021 11:08:08 Luka Kovacic wrote:
> > > >> Hello Pali,
> > > >>
> > > >> On Fri, Aug 13, 2021 at 10:14 AM Pali Rohár <pali@kernel.org> wrote:
> > > >>>
> > > >>> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > > >>>> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > > >>>> Technologies, Inc.
> > > >>>>
> > > >>>> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > > >>>> Peripherals:
> > > >>>>   - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> > > >>>>   - RTC clock (PCF8563)
> > > >>>>   - USB 3.0 port
> > > >>>>   - USB 2.0 port
> > > >>>>   - 4x LED
> > > >>>>   - UART over Micro-USB
> > > >>>>   - M.2 slot (2280)
> > > >>>>   - Mini PCI-E slot
> > > >>>>
> > > >>>> Additionally, automatic import of the Marvell hw_info parameters is
> > > >>>> enabled via the recently added mac command for A37XX platforms.
> > > >>>> The parameters stored in Marvell hw_info are usually the board serial
> > > >>>> number and MAC addresses.
> > > >>>>
> > > >>>> Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > > >>>> Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > >>>> Cc: Robert Marko <robert.marko@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.
> > 
> > I understand your points and concerns.
> > 
> > I'm just worried that this counterproductive as I don't see the same thing
> > happening in Linux and looking at this we could make similar arguments
> > for other boards, which aren't so different from the ESPRESSOBin boards
> > with the exception of the name.
> 
> I have already opened this question also in Linux, but there was no feedback:
> https://lore.kernel.org/linux-devicetree/20201022140007.hppmeyt34lubotbc@pali/t/#u
> 
> Anyway, as U-Boot can detect variant of the board, it also can load
> specific DTS kernel file for detected variant. So it has still advantage
> even when Linux does not use it (yet).
> 
> Also another argument is maintenance. This patch adds lot of lines of
> code and lot of them are duplicated. It means that somebody has to
> maintain it. So if Ultra variant can be supported by single binary too
> it should mean less code in U-Boot for Ultra (but needs to check!!!) and
> less code for maintaining.
> 
> > >
> > > > 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.

Hello Luka! Do you need some help with this?

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13 10:59           ` Pali Rohár
@ 2021-08-16  8:37             ` Luka Kovacic
  0 siblings, 0 replies; 18+ messages in thread
From: Luka Kovacic @ 2021-08-16  8:37 UTC (permalink / raw)
  To: Pali Rohár
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, Stefan Roese,
	sjg, patrick.delaunay, xypron.glpk

Hello Pali,

On Fri, Aug 13, 2021 at 12:59 PM Pali Rohár <pali@kernel.org> wrote:
>
> On Friday 13 August 2021 12:33:25 Luka Kovacic wrote:
> > On Fri, Aug 13, 2021 at 12:22 PM Pali Rohár <pali@kernel.org> wrote:
> > >
> > > On Friday 13 August 2021 12:03:57 Luka Kovacic wrote:
> > > > Hello Pali,
> > > >
> > > > On Fri, Aug 13, 2021 at 11:27 AM Pali Rohár <pali@kernel.org> wrote:
> > > > >
> > > > > On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > > > > > Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > > > > > Technologies, Inc.
> > > > > >
> > > > > > The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > > > > > Peripherals:
> > > > > >  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> > > > > >  - RTC clock (PCF8563)
> > > > > >  - USB 3.0 port
> > > > > >  - USB 2.0 port
> > > > > >  - 4x LED
> > > > > >  - UART over Micro-USB
> > > > > >  - M.2 slot (2280)
> > > > > >  - Mini PCI-E slot
> > > > > >
> > > > > > Additionally, automatic import of the Marvell hw_info parameters is
> > > > > > enabled via the recently added mac command for A37XX platforms.
> > > > > > The parameters stored in Marvell hw_info are usually the board serial
> > > > > > number and MAC addresses.
> > > > > >
> > > > > > Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > > > > > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > > > > Cc: Robert Marko <robert.marko@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
> > > > > ...
> > > > > > 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) {
> > > > >
> > > > > It is possible that phy is not available? As you are calling code below
> > > > > only in case name is not-NULL.
> > > >
> > > > Well, according to common/miiphyutil.c, it could also happen that it's NULL.
> > >
> > > I see. But if it happens, is not it fatal error for this board? If name
> > > is NULL then you cannot correctly configure board correctly, right?
> > >
> > > > >
> > > > > > +             /* 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);
> > > > >
> > > > > Why port 5 has different settings?
> > > >
> > > > It's to disable forwarding between the WAN port and LAN ports (I've
> > > > tested this).
> > > > I'm aware of this thread:
> > > > https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18
> > >
> > > Ok. But your change seems to not be correct. I'm looking at
> > > documentation and when low 2 bits in Port Control Register are zero then
> > > specified port is completely disabled.
> > >
> > > I agree that for disabled port is obviously disabled also forwarding.
> > > But I do not think it is what you want... Or, which behavior you want to
> > > achieve? From above added comment (which seems to be also copy+paste) it
> > > is not clear.
> > >
> >
> > I think it would be completely fine if the WAN port is disabled in U-Boot.
> > The current behaviour is that the LAN ports forward between each other and
> > are all accessible from U-Boot, while the WAN port is in no way accessible.
> > The link is up when testing the WAN port, but no traffic passes.
>
> For espressobin v5/v7 all ports are enabled, but forwarding is possible
> only in directions: "cpu to any non-cpu port" and "non-cpu port to cpu
> port". So between lan ports it is disabled and also between lan an wan.
>
> User may have custom settings in Linux where want to use e.g. two ports
> as wans (e.g. use one lan labeled port as wan2) and then during u-boot
> stage it would would break his network. That is why also forwarding
> between lan labeled ports is disabled.

I see, that makes sense.
I'll find a way to implement it like this.

>
> Or user may use custom vlan settings with authentication and then
> enabled forwarding in u-boot also can break network. This industrial
> Topaz switch has lot of HW functionality, so it is ideal for such kind
> of usage.
>
> > > Look at that my change which only disables forwarding between ports. And
> > > does not disable ports itself. It is already in newly renamed function
> > > board_network_enable_espressobin(). That is why I do not like copy+paste
> > > of code as it can be copied incorrectly, or differently without
> > > describing commenting why it is differently.
> > >
> > > I see that board_network_enable_espressobin_ultra() and
> > > board_network_enable_espressobin() are different. But they have some
> > > common parts, e.g. this port policy configuration. So at least this code
> > > path can be moved in some common function.
> >
> > I agree, these could be somehow unified. I will take a look.
> >
> > >
> > > > >
> > > > > > +     }
> > > > > > +
> > > > > > +     /* 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));
> > > > > > +     }
> > > > >
> > > > > It looks like that by copying board_network_enable_espressobin_ultra()
> > > > > function from Marvell U-Boot instead of using code which is in mainline
> > > > > function board_network_enable() for Espressobin, you are introducing a
> > > > > security hole, which is in Marvell U-Boot and which was fixed in
> > > > > mainline U-Boot for all supported Espressobin boards (see commit
> > > > > 48f2c8a37f700859a7004dce5adb116597a45700).
> > > > >
> > > > > I would really suggest to not blindly copy old code from Marvell into
> > > > > mainline U-Boot, as here we have fixed lot of issues.
> > > > >
> > > > > > +     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;
> > > > >
> > > > > According to kernel DTS file, it looks like that Espressobin Ultra has
> > > > > different MTD partitions as other variants... Therefore Ultra needs
> > > > > adjustments in this code.
> > > > >
> > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts?h=v5.13#n78
> > > >
> > > > That's true, I'll have to fix this.
> > >
> > > It is needed to call this function for ultra variant at all? Because as
> > > I understand ultra variant has fixed layout as specified in kernel DTS
> > > file and therefore it should not have any dynamic modification.
> > >
> > > Or is there any other issue?
>
> (This was about MTD partitions)

This won't be needed, thanks for pointing it out.

>
> > If the ports aren't correctly configured in U-Boot, Linux fails to configure the
> > Topaz switch.
>
> So this is a bug in Linux. Kernel really should not depend on specific
> network configuration done by bootloader.
>
> So DTS file for Ultra variant in Linux kernel is incomplete?
>
> I remember that DTS was merged into Linux kernel, but there were some
> issues and I do not know if they were fixed later after merging...

The DTS in the Linux kernel should be fine regarding networking, I think.
There was some issue with USB 3, so the node was disabled.

I'll check if it can be resolved.

>
> > In the current configuration traffic between LAN and WAN is blocked in U-Boot
> > and Linux correctly configures the Topaz switch.
> >
> > >
> > > > >
> > > > > >
> > > > > >       spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
> > > >
> > > > Kind regards,
> > > > Luka
> >
> > Kind regards,
> > Luka

Kind regards,
Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13 10:33         ` Luka Kovacic
@ 2021-08-13 10:59           ` Pali Rohár
  2021-08-16  8:37             ` Luka Kovacic
  0 siblings, 1 reply; 18+ messages in thread
From: Pali Rohár @ 2021-08-13 10:59 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, Stefan Roese,
	sjg, patrick.delaunay, xypron.glpk

On Friday 13 August 2021 12:33:25 Luka Kovacic wrote:
> On Fri, Aug 13, 2021 at 12:22 PM Pali Rohár <pali@kernel.org> wrote:
> >
> > On Friday 13 August 2021 12:03:57 Luka Kovacic wrote:
> > > Hello Pali,
> > >
> > > On Fri, Aug 13, 2021 at 11:27 AM Pali Rohár <pali@kernel.org> wrote:
> > > >
> > > > On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > > > > Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > > > > Technologies, Inc.
> > > > >
> > > > > The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > > > > Peripherals:
> > > > >  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> > > > >  - RTC clock (PCF8563)
> > > > >  - USB 3.0 port
> > > > >  - USB 2.0 port
> > > > >  - 4x LED
> > > > >  - UART over Micro-USB
> > > > >  - M.2 slot (2280)
> > > > >  - Mini PCI-E slot
> > > > >
> > > > > Additionally, automatic import of the Marvell hw_info parameters is
> > > > > enabled via the recently added mac command for A37XX platforms.
> > > > > The parameters stored in Marvell hw_info are usually the board serial
> > > > > number and MAC addresses.
> > > > >
> > > > > Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > > > > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > > > Cc: Robert Marko <robert.marko@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
> > > > ...
> > > > > 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) {
> > > >
> > > > It is possible that phy is not available? As you are calling code below
> > > > only in case name is not-NULL.
> > >
> > > Well, according to common/miiphyutil.c, it could also happen that it's NULL.
> >
> > I see. But if it happens, is not it fatal error for this board? If name
> > is NULL then you cannot correctly configure board correctly, right?
> >
> > > >
> > > > > +             /* 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);
> > > >
> > > > Why port 5 has different settings?
> > >
> > > It's to disable forwarding between the WAN port and LAN ports (I've
> > > tested this).
> > > I'm aware of this thread:
> > > https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18
> >
> > Ok. But your change seems to not be correct. I'm looking at
> > documentation and when low 2 bits in Port Control Register are zero then
> > specified port is completely disabled.
> >
> > I agree that for disabled port is obviously disabled also forwarding.
> > But I do not think it is what you want... Or, which behavior you want to
> > achieve? From above added comment (which seems to be also copy+paste) it
> > is not clear.
> >
> 
> I think it would be completely fine if the WAN port is disabled in U-Boot.
> The current behaviour is that the LAN ports forward between each other and
> are all accessible from U-Boot, while the WAN port is in no way accessible.
> The link is up when testing the WAN port, but no traffic passes.

For espressobin v5/v7 all ports are enabled, but forwarding is possible
only in directions: "cpu to any non-cpu port" and "non-cpu port to cpu
port". So between lan ports it is disabled and also between lan an wan.

User may have custom settings in Linux where want to use e.g. two ports
as wans (e.g. use one lan labeled port as wan2) and then during u-boot
stage it would would break his network. That is why also forwarding
between lan labeled ports is disabled.

Or user may use custom vlan settings with authentication and then
enabled forwarding in u-boot also can break network. This industrial
Topaz switch has lot of HW functionality, so it is ideal for such kind
of usage.

> > Look at that my change which only disables forwarding between ports. And
> > does not disable ports itself. It is already in newly renamed function
> > board_network_enable_espressobin(). That is why I do not like copy+paste
> > of code as it can be copied incorrectly, or differently without
> > describing commenting why it is differently.
> >
> > I see that board_network_enable_espressobin_ultra() and
> > board_network_enable_espressobin() are different. But they have some
> > common parts, e.g. this port policy configuration. So at least this code
> > path can be moved in some common function.
> 
> I agree, these could be somehow unified. I will take a look.
> 
> >
> > > >
> > > > > +     }
> > > > > +
> > > > > +     /* 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));
> > > > > +     }
> > > >
> > > > It looks like that by copying board_network_enable_espressobin_ultra()
> > > > function from Marvell U-Boot instead of using code which is in mainline
> > > > function board_network_enable() for Espressobin, you are introducing a
> > > > security hole, which is in Marvell U-Boot and which was fixed in
> > > > mainline U-Boot for all supported Espressobin boards (see commit
> > > > 48f2c8a37f700859a7004dce5adb116597a45700).
> > > >
> > > > I would really suggest to not blindly copy old code from Marvell into
> > > > mainline U-Boot, as here we have fixed lot of issues.
> > > >
> > > > > +     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;
> > > >
> > > > According to kernel DTS file, it looks like that Espressobin Ultra has
> > > > different MTD partitions as other variants... Therefore Ultra needs
> > > > adjustments in this code.
> > > >
> > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts?h=v5.13#n78
> > >
> > > That's true, I'll have to fix this.
> >
> > It is needed to call this function for ultra variant at all? Because as
> > I understand ultra variant has fixed layout as specified in kernel DTS
> > file and therefore it should not have any dynamic modification.
> >
> > Or is there any other issue?

(This was about MTD partitions)

> If the ports aren't correctly configured in U-Boot, Linux fails to configure the
> Topaz switch.

So this is a bug in Linux. Kernel really should not depend on specific
network configuration done by bootloader.

So DTS file for Ultra variant in Linux kernel is incomplete?

I remember that DTS was merged into Linux kernel, but there were some
issues and I do not know if they were fixed later after merging...

> In the current configuration traffic between LAN and WAN is blocked in U-Boot
> and Linux correctly configures the Topaz switch.
> 
> >
> > > >
> > > > >
> > > > >       spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
> > >
> > > Kind regards,
> > > Luka
> 
> Kind regards,
> Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13 10:25           ` Luka Kovacic
@ 2021-08-13 10:46             ` Pali Rohár
  2021-09-24 18:30               ` Pali Rohár
  0 siblings, 1 reply; 18+ messages in thread
From: Pali Rohár @ 2021-08-13 10:46 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: Stefan Roese, u-boot, Robert Marko, Luka Perkov, Marek Behun,
	sjg, patrick.delaunay, xypron.glpk

On Friday 13 August 2021 12:25:46 Luka Kovacic wrote:
> Hello Stefan and Pali,
> 
> On Fri, Aug 13, 2021 at 11:58 AM Stefan Roese <sr@denx.de> wrote:
> >
> > Hi,
> >
> > On 13.08.21 11:54, Pali Rohár wrote:
> > > On Friday 13 August 2021 11:08:08 Luka Kovacic wrote:
> > >> Hello Pali,
> > >>
> > >> On Fri, Aug 13, 2021 at 10:14 AM Pali Rohár <pali@kernel.org> wrote:
> > >>>
> > >>> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > >>>> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > >>>> Technologies, Inc.
> > >>>>
> > >>>> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > >>>> Peripherals:
> > >>>>   - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> > >>>>   - RTC clock (PCF8563)
> > >>>>   - USB 3.0 port
> > >>>>   - USB 2.0 port
> > >>>>   - 4x LED
> > >>>>   - UART over Micro-USB
> > >>>>   - M.2 slot (2280)
> > >>>>   - Mini PCI-E slot
> > >>>>
> > >>>> Additionally, automatic import of the Marvell hw_info parameters is
> > >>>> enabled via the recently added mac command for A37XX platforms.
> > >>>> The parameters stored in Marvell hw_info are usually the board serial
> > >>>> number and MAC addresses.
> > >>>>
> > >>>> Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > >>>> Cc: Luka Perkov <luka.perkov@sartura.hr>
> > >>>> Cc: Robert Marko <robert.marko@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.
> 
> I understand your points and concerns.
> 
> I'm just worried that this counterproductive as I don't see the same thing
> happening in Linux and looking at this we could make similar arguments
> for other boards, which aren't so different from the ESPRESSOBin boards
> with the exception of the name.

I have already opened this question also in Linux, but there was no feedback:
https://lore.kernel.org/linux-devicetree/20201022140007.hppmeyt34lubotbc@pali/t/#u

Anyway, as U-Boot can detect variant of the board, it also can load
specific DTS kernel file for detected variant. So it has still advantage
even when Linux does not use it (yet).

Also another argument is maintenance. This patch adds lot of lines of
code and lot of them are duplicated. It means that somebody has to
maintain it. So if Ultra variant can be supported by single binary too
it should mean less code in U-Boot for Ultra (but needs to check!!!) and
less code for maintaining.

> >
> > > If you need help with this I can try to do something... as I was already
> > > involved in unification of all v5/v7/emmc/non-emmc variants into one
> > > binary with one DTS.
> >
> > Thanks Pali for all your work here.
> >
> > Thanks,
> > Stefan
> >
> > >> I resorted to the Linux way and used a common dtsi for both the
> > >> ESPRESSOBin - which is the base and the ESPRESSOBin-Ultra.
> > >>
> > >>>
> > >>>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> > >>>> index c42715ead4..f21c9c94d3 100644
> > >>>> --- a/arch/arm/dts/Makefile
> > >>>> +++ b/arch/arm/dts/Makefile
> > >>>> @@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
> > >>>>   dtb-$(CONFIG_ARCH_MVEBU) +=                  \
> > >>>>        armada-3720-db.dtb                      \
> > >>>>        armada-3720-espressobin.dtb             \
> > >>>> +     armada-3720-espressobin-ultra.dtb       \
> > >>>>        armada-3720-turris-mox.dtb              \
> > >>>>        armada-3720-uDPU.dtb                    \
> > >>>>        armada-375-db.dtb                       \
> > >>>> diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> > >>>> new file mode 100644
> > >>>> index 0000000000..5ad0c723e3
> > >>>> --- /dev/null
> > >>>> +++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> > >>>> @@ -0,0 +1,114 @@
> > >>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> > >>>> +/*
> > >>>> + * Device Tree file for ESPRESSObin-Ultra board
> > >>>> + * Copyright (C) 2016 Marvell
> > >>>> + * Copyright (C) 2019 Globalscale technologies, Inc.
> > >>>> + * Copyright (C) 2021 Sartura Ltd.
> > >>>> + *
> > >>>> + * Author: Jason Hung <jhung@globalscaletechnologies.com>
> > >>>> + * Author: Luka Kovacic <luka.kovacic@sartura.hr>
> > >>>> + * Author: Vladimir Vid <vladimir.vid@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.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"
> > >>>> +#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.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"
> > >>>> +
> > >>>> +/ {
> > >>>> +     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 <kostap@marvell.com>
> > >>>>   S:   Maintained
> > >>>>   F:   configs/mvebu_espressobin-88f3720_defconfig
> > >>>>
> > >>>> +ESPRESSOBin-Ultra BOARD
> > >>>> +M:   Luka Kovacic <luka.kovacic@sartura.hr>
> > >>>> +M:   Robert Marko <robert.marko@sartura.hr>
> > >>>> +M:   Luka Perkov <luka.perkov@sartura.hr>
> > >>>> +S:   Maintained
> > >>>> +F:   arch/arm/dts/armada-3720-espressobin-ultra.dts
> > >>>> +F:   configs/mvebu_espressobin-ultra-88f3720_defconfig
> > >>>> +
> > >>>>   uDPU BOARD
> > >>>>   M:   Vladimir Vid <vladimir.vid@sartura.hr>
> > >>>>   S:   Maintained
> > >>>> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> > >>>> index 2de9c2ac17..21c1eb7b22 100644
> > >>>> --- a/board/Marvell/mvebu_armada-37xx/board.c
> > >>>> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> > >>>> @@ -11,6 +11,7 @@
> > >>>>   #include <i2c.h>
> > >>>>   #include <init.h>
> > >>>>   #include <mmc.h>
> > >>>> +#include <miiphy.h>
> > >>>>   #include <phy.h>
> > >>>>   #include <asm/global_data.h>
> > >>>>   #include <asm/io.h>
> > >>>> @@ -55,6 +56,15 @@ DECLARE_GLOBAL_DATA_PTR;
> > >>>>   #define MVEBU_G2_SMI_PHY_CMD_REG     (24)
> > >>>>   #define MVEBU_G2_SMI_PHY_DATA_REG    (25)
> > >>>>
> > >>>> +/* Marvell 88E1512 */
> > >>>> +#define MII_MARVELL_PHY_PAGE         22
> > >>>> +
> > >>>> +#define MV88E1512_GENERAL_CTRL               20
> > >>>> +#define MV88E1512_MODE_SGMII         1
> > >>>> +#define MV88E1512_RESET_OFFS         15
> > >>>> +
> > >>>> +#define ULTRA_MV88E1512_PHYADDR              0x1
> > >>>> +
> > >>>>   /*
> > >>>>    * Memory Controller Registers
> > >>>>    *
> > >>>> @@ -282,12 +292,68 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
> > >>>>        return 0;
> > >>>>   }
> > >>>>
> > >>>> -/* Bring-up board-specific network stuff */
> > >>>> -int board_network_enable(struct mii_dev *bus)
> > >>>> +void force_phy_88e1512_sgmii_to_copper(u16 devaddr)
> > >>>>   {
> > >>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
> > >>>> -             return 0;
> > >>>> +     const char *name;
> > >>>> +     u16 reg;
> > >>>> +
> > >>>> +     name = miiphy_get_current_dev();
> > >>>> +     if (name) {
> > >>>> +             /* SGMII-to-Copper mode initialization */
> > >>>> +
> > >>>> +             /* Select page 18 */
> > >>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0x12);
> > >>>> +             /* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */
> > >>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
> > >>>> +             reg &= ~0x7;
> > >>>> +             reg |= MV88E1512_MODE_SGMII;
> > >>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
> > >>>> +             /* PHY reset is necessary after changing MODE[2:0] */
> > >>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
> > >>>> +             reg |= 1 << MV88E1512_RESET_OFFS;
> > >>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
> > >>>> +             /* Reset page selection */
> > >>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0);
> > >>>> +             udelay(100);
> > >>>> +     }
> > >>>> +}
> > >>>> +
> > >>>> +int board_network_enable_espressobin_ultra(struct mii_dev *bus)
> > >>>> +{
> > >>>> +     int i;
> > >>>> +     /* Setup 88E1512 SGMII-to-Copper mode */
> > >>>> +     force_phy_88e1512_sgmii_to_copper(ULTRA_MV88E1512_PHYADDR);
> > >>>>
> > >>>> +     /*
> > >>>> +      * FIXME: remove this code once Topaz driver gets available
> > >>>> +      * A3720 ESPRESSObin Ultra Board Only
> > >>>> +      * Configure Topaz switch (88E6341)
> > >>>> +      * Set port 1,2,3,4,5 to forwarding Mode (through Switch Port registers)
> > >>>> +      */
> > >>>> +     for (i = 0; i <= 5; i++) {
> > >>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(i),
> > >>>> +                                       MVEBU_SW_PORT_CTRL_REG,
> > >>>> +                                       i == 5 ? 0x7c : 0x7f);
> > >>>> +     }
> > >>>> +
> > >>>> +     /* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
> > >>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(0),
> > >>>> +                               MVEBU_SW_LINK_CTRL_REG, 0xe002);
> > >>>> +
> > >>>> +     /* Power up PHY 1, 2, 3, 4, 5 (through Global 2 registers) */
> > >>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
> > >>>> +                               MVEBU_G2_SMI_PHY_DATA_REG, 0x1140);
> > >>>> +     for (i = 1; i <= 5; i++) {
> > >>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
> > >>>> +                                       MVEBU_G2_SMI_PHY_CMD_REG, 0x9400 +
> > >>>> +                                       (MVEBU_PORT_CTRL_SMI_ADDR(i) << 5));
> > >>>> +     }
> > >>>> +
> > >>>> +     return 0;
> > >>>> +}
> > >>>> +
> > >>>> +int board_network_enable_espressobin(struct mii_dev *bus)
> > >>>> +{
> > >>>>        /*
> > >>>>         * FIXME: remove this code once Topaz driver gets available
> > >>>>         * A3720 Community Board Only
> > >>>> @@ -328,6 +394,16 @@ int board_network_enable(struct mii_dev *bus)
> > >>>>        return 0;
> > >>>>   }
> > >>>>
> > >>>> +/* Bring-up the board-specific networking */
> > >>>> +int board_network_enable(struct mii_dev *bus)
> > >>>> +{
> > >>>> +     if (of_machine_is_compatible("globalscale,espressobin"))
> > >>>> +             return board_network_enable_espressobin(bus);
> > >>>> +     if (of_machine_is_compatible("globalscale,espressobin-ultra"))
> > >>>> +             return board_network_enable_espressobin_ultra(bus);
> > >>>> +     return 0;
> > >>>> +}
> > >>>> +
> > >>>>   #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_ENV_IS_IN_SPI_FLASH)
> > >>>>   int ft_board_setup(void *blob, struct bd_info *bd)
> > >>>>   {
> > >>>> @@ -336,8 +412,12 @@ int ft_board_setup(void *blob, struct bd_info *bd)
> > >>>>        int parts_off;
> > >>>>        int part_off;
> > >>>>
> > >>>> -     /* Fill SPI MTD partitions for Linux kernel on Espressobin */
> > >>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
> > >>>> +     /*
> > >>>> +      * Fill SPI MTD partitions for the Linux kernel on ESPRESSOBin and
> > >>>> +      * ESPRESSOBin Ultra boards.
> > >>>> +      */
> > >>>> +     if (!of_machine_is_compatible("globalscale,espressobin") &&
> > >>>> +         !of_machine_is_compatible("globalscale,espressobin-ultra"))
> > >>>>                return 0;
> > >>>>
> > >>>>        spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
> > >>>> diff --git a/configs/mvebu_espressobin-ultra-88f3720_defconfig b/configs/mvebu_espressobin-ultra-88f3720_defconfig
> > >>>> new file mode 100644
> > >>>> index 0000000000..1bac0a96ad
> > >>>> --- /dev/null
> > >>>> +++ b/configs/mvebu_espressobin-ultra-88f3720_defconfig
> > >>>> @@ -0,0 +1,93 @@
> > >>>> +CONFIG_ARM=y
> > >>>> +CONFIG_ARCH_CPU_INIT=y
> > >>>> +CONFIG_ARCH_MVEBU=y
> > >>>> +CONFIG_SYS_TEXT_BASE=0x00000000
> > >>>> +CONFIG_SYS_MALLOC_F_LEN=0x2000
> > >>>> +CONFIG_NR_DRAM_BANKS=1
> > >>>> +CONFIG_TARGET_MVEBU_ARMADA_37XX=y
> > >>>> +CONFIG_ENV_SIZE=0x10000
> > >>>> +CONFIG_ENV_OFFSET=0x3F0000
> > >>>> +CONFIG_ENV_SECT_SIZE=0x10000
> > >>>> +CONFIG_DM_GPIO=y
> > >>>> +CONFIG_DEBUG_UART_BASE=0xd0012000
> > >>>> +CONFIG_DEFAULT_DEVICE_TREE="armada-3720-espressobin-ultra"
> > >>>> +CONFIG_DEBUG_UART=y
> > >>>> +CONFIG_AHCI=y
> > >>>> +CONFIG_DISTRO_DEFAULTS=y
> > >>>> +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
> > >>>> +CONFIG_OF_BOARD_SETUP=y
> > >>>> +CONFIG_FIT=y
> > >>>> +CONFIG_FIT_VERBOSE=y
> > >>>> +CONFIG_FIT_BEST_MATCH=y
> > >>>> +CONFIG_AUTOBOOT_KEYED=y
> > >>>> +CONFIG_AUTOBOOT_PROMPT="Autoboot in %d seconds, to stop use 's' key\n"
> > >>>> +CONFIG_AUTOBOOT_STOP_STR="s"
> > >>>> +CONFIG_AUTOBOOT_KEYED_CTRLC=y
> > >>>> +CONFIG_HUSH_PARSER=y
> > >>>> +CONFIG_SYS_CONSOLE_INFO_QUIET=y
> > >>>> +# CONFIG_DISPLAY_CPUINFO is not set
> > >>>> +# CONFIG_DISPLAY_BOARDINFO is not set
> > >>>> +CONFIG_DISPLAY_BOARDINFO_LATE=y
> > >>>> +CONFIG_ARCH_EARLY_INIT_R=y
> > >>>> +CONFIG_BOARD_EARLY_INIT_F=y
> > >>>> +CONFIG_BOARD_LATE_INIT=y
> > >>>> +# CONFIG_CMD_FLASH is not set
> > >>>> +CONFIG_CMD_GPIO=y
> > >>>> +CONFIG_CMD_I2C=y
> > >>>> +CONFIG_CMD_MMC=y
> > >>>> +CONFIG_CMD_MTD=y
> > >>>> +CONFIG_CMD_PCI=y
> > >>>> +CONFIG_CMD_SPI=y
> > >>>> +CONFIG_CMD_USB=y
> > >>>> +CONFIG_CMD_WDT=y
> > >>>> +# CONFIG_CMD_SETEXPR is not set
> > >>>> +CONFIG_CMD_TFTPPUT=y
> > >>>> +CONFIG_CMD_CACHE=y
> > >>>> +CONFIG_CMD_TIME=y
> > >>>> +CONFIG_CMD_MVEBU_BUBT=y
> > >>>> +CONFIG_MVEBU_MAC_HW_INFO=y
> > >>>> +CONFIG_CMD_EXT4_WRITE=y
> > >>>> +CONFIG_MAC_PARTITION=y
> > >>>> +CONFIG_ENV_OVERWRITE=y
> > >>>> +CONFIG_ENV_IS_IN_SPI_FLASH=y
> > >>>> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> > >>>> +CONFIG_NET_RANDOM_ETHADDR=y
> > >>>> +CONFIG_AHCI_MVEBU=y
> > >>>> +CONFIG_CLK=y
> > >>>> +CONFIG_CLK_MVEBU=y
> > >>>> +CONFIG_DM_I2C=y
> > >>>> +CONFIG_MISC=y
> > >>>> +CONFIG_MMC_SDHCI=y
> > >>>> +CONFIG_MMC_SDHCI_SDMA=y
> > >>>> +CONFIG_MMC_SDHCI_XENON=y
> > >>>> +CONFIG_MTD=y
> > >>>> +CONFIG_DM_MTD=y
> > >>>> +CONFIG_SF_DEFAULT_MODE=0
> > >>>> +CONFIG_SPI_FLASH_MACRONIX=y
> > >>>> +CONFIG_SPI_FLASH_MTD=y
> > >>>> +CONFIG_PHY_MARVELL=y
> > >>>> +CONFIG_PHY_GIGE=y
> > >>>> +CONFIG_MVNETA=y
> > >>>> +CONFIG_PCI=y
> > >>>> +CONFIG_PCI_AARDVARK=y
> > >>>> +CONFIG_PHY=y
> > >>>> +CONFIG_MVEBU_COMPHY_SUPPORT=y
> > >>>> +CONFIG_PINCTRL=y
> > >>>> +CONFIG_PINCTRL_ARMADA_37XX=y
> > >>>> +CONFIG_DM_REGULATOR_GPIO=y
> > >>>> +CONFIG_DEBUG_UART_SHIFT=2
> > >>>> +CONFIG_DEBUG_UART_ANNOUNCE=y
> > >>>> +CONFIG_MVEBU_A3700_UART=y
> > >>>> +CONFIG_MVEBU_A3700_SPI=y
> > >>>> +CONFIG_USB=y
> > >>>> +CONFIG_USB_XHCI_HCD=y
> > >>>> +CONFIG_USB_EHCI_HCD=y
> > >>>> +CONFIG_USB_HOST_ETHER=y
> > >>>> +# CONFIG_WATCHDOG_AUTOSTART is not set
> > >>>> +CONFIG_WDT=y
> > >>>> +CONFIG_WDT_ARMADA_37XX=y
> > >>>> +CONFIG_SHA1=y
> > >>>> +CONFIG_DM_RTC=y
> > >>>> +CONFIG_RTC_PCF8563=y
> > >>>> +CONFIG_LED=y
> > >>>> +CONFIG_LED_GPIO=y
> > >>>> --
> > >>>> 2.31.1
> > >>>>
> > >>
> > >> Kind regards,
> > >> Luka
> >
> >
> > Viele Grüße,
> > Stefan
> >
> > --
> > DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> > Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de
> 
> Kind regards,
> Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13 10:22       ` Pali Rohár
@ 2021-08-13 10:33         ` Luka Kovacic
  2021-08-13 10:59           ` Pali Rohár
  0 siblings, 1 reply; 18+ messages in thread
From: Luka Kovacic @ 2021-08-13 10:33 UTC (permalink / raw)
  To: Pali Rohár
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, Stefan Roese,
	sjg, patrick.delaunay, xypron.glpk

On Fri, Aug 13, 2021 at 12:22 PM Pali Rohár <pali@kernel.org> wrote:
>
> On Friday 13 August 2021 12:03:57 Luka Kovacic wrote:
> > Hello Pali,
> >
> > On Fri, Aug 13, 2021 at 11:27 AM Pali Rohár <pali@kernel.org> wrote:
> > >
> > > On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > > > Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > > > Technologies, Inc.
> > > >
> > > > The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > > > Peripherals:
> > > >  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> > > >  - RTC clock (PCF8563)
> > > >  - USB 3.0 port
> > > >  - USB 2.0 port
> > > >  - 4x LED
> > > >  - UART over Micro-USB
> > > >  - M.2 slot (2280)
> > > >  - Mini PCI-E slot
> > > >
> > > > Additionally, automatic import of the Marvell hw_info parameters is
> > > > enabled via the recently added mac command for A37XX platforms.
> > > > The parameters stored in Marvell hw_info are usually the board serial
> > > > number and MAC addresses.
> > > >
> > > > Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > > > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > > Cc: Robert Marko <robert.marko@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
> > > ...
> > > > 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) {
> > >
> > > It is possible that phy is not available? As you are calling code below
> > > only in case name is not-NULL.
> >
> > Well, according to common/miiphyutil.c, it could also happen that it's NULL.
>
> I see. But if it happens, is not it fatal error for this board? If name
> is NULL then you cannot correctly configure board correctly, right?
>
> > >
> > > > +             /* 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);
> > >
> > > Why port 5 has different settings?
> >
> > It's to disable forwarding between the WAN port and LAN ports (I've
> > tested this).
> > I'm aware of this thread:
> > https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18
>
> Ok. But your change seems to not be correct. I'm looking at
> documentation and when low 2 bits in Port Control Register are zero then
> specified port is completely disabled.
>
> I agree that for disabled port is obviously disabled also forwarding.
> But I do not think it is what you want... Or, which behavior you want to
> achieve? From above added comment (which seems to be also copy+paste) it
> is not clear.
>

I think it would be completely fine if the WAN port is disabled in U-Boot.
The current behaviour is that the LAN ports forward between each other and
are all accessible from U-Boot, while the WAN port is in no way accessible.
The link is up when testing the WAN port, but no traffic passes.

> Look at that my change which only disables forwarding between ports. And
> does not disable ports itself. It is already in newly renamed function
> board_network_enable_espressobin(). That is why I do not like copy+paste
> of code as it can be copied incorrectly, or differently without
> describing commenting why it is differently.
>
> I see that board_network_enable_espressobin_ultra() and
> board_network_enable_espressobin() are different. But they have some
> common parts, e.g. this port policy configuration. So at least this code
> path can be moved in some common function.

I agree, these could be somehow unified. I will take a look.

>
> > >
> > > > +     }
> > > > +
> > > > +     /* 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));
> > > > +     }
> > >
> > > It looks like that by copying board_network_enable_espressobin_ultra()
> > > function from Marvell U-Boot instead of using code which is in mainline
> > > function board_network_enable() for Espressobin, you are introducing a
> > > security hole, which is in Marvell U-Boot and which was fixed in
> > > mainline U-Boot for all supported Espressobin boards (see commit
> > > 48f2c8a37f700859a7004dce5adb116597a45700).
> > >
> > > I would really suggest to not blindly copy old code from Marvell into
> > > mainline U-Boot, as here we have fixed lot of issues.
> > >
> > > > +     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;
> > >
> > > According to kernel DTS file, it looks like that Espressobin Ultra has
> > > different MTD partitions as other variants... Therefore Ultra needs
> > > adjustments in this code.
> > >
> > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts?h=v5.13#n78
> >
> > That's true, I'll have to fix this.
>
> It is needed to call this function for ultra variant at all? Because as
> I understand ultra variant has fixed layout as specified in kernel DTS
> file and therefore it should not have any dynamic modification.
>
> Or is there any other issue?

If the ports aren't correctly configured in U-Boot, Linux fails to configure the
Topaz switch.
In the current configuration traffic between LAN and WAN is blocked in U-Boot
and Linux correctly configures the Topaz switch.

>
> > >
> > > >
> > > >       spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
> >
> > Kind regards,
> > Luka

Kind regards,
Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13  9:58         ` Stefan Roese
@ 2021-08-13 10:25           ` Luka Kovacic
  2021-08-13 10:46             ` Pali Rohár
  0 siblings, 1 reply; 18+ messages in thread
From: Luka Kovacic @ 2021-08-13 10:25 UTC (permalink / raw)
  To: Stefan Roese, Pali Rohár
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, sjg,
	patrick.delaunay, xypron.glpk

Hello Stefan and Pali,

On Fri, Aug 13, 2021 at 11:58 AM Stefan Roese <sr@denx.de> wrote:
>
> Hi,
>
> On 13.08.21 11:54, Pali Rohár wrote:
> > On Friday 13 August 2021 11:08:08 Luka Kovacic wrote:
> >> Hello Pali,
> >>
> >> On Fri, Aug 13, 2021 at 10:14 AM Pali Rohár <pali@kernel.org> wrote:
> >>>
> >>> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> >>>> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> >>>> Technologies, Inc.
> >>>>
> >>>> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> >>>> Peripherals:
> >>>>   - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> >>>>   - RTC clock (PCF8563)
> >>>>   - USB 3.0 port
> >>>>   - USB 2.0 port
> >>>>   - 4x LED
> >>>>   - UART over Micro-USB
> >>>>   - M.2 slot (2280)
> >>>>   - Mini PCI-E slot
> >>>>
> >>>> Additionally, automatic import of the Marvell hw_info parameters is
> >>>> enabled via the recently added mac command for A37XX platforms.
> >>>> The parameters stored in Marvell hw_info are usually the board serial
> >>>> number and MAC addresses.
> >>>>
> >>>> Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> >>>> Cc: Luka Perkov <luka.perkov@sartura.hr>
> >>>> Cc: Robert Marko <robert.marko@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.

I understand your points and concerns.

I'm just worried that this counterproductive as I don't see the same thing
happening in Linux and looking at this we could make similar arguments
for other boards, which aren't so different from the ESPRESSOBin boards
with the exception of the name.

>
> > If you need help with this I can try to do something... as I was already
> > involved in unification of all v5/v7/emmc/non-emmc variants into one
> > binary with one DTS.
>
> Thanks Pali for all your work here.
>
> Thanks,
> Stefan
>
> >> I resorted to the Linux way and used a common dtsi for both the
> >> ESPRESSOBin - which is the base and the ESPRESSOBin-Ultra.
> >>
> >>>
> >>>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> >>>> index c42715ead4..f21c9c94d3 100644
> >>>> --- a/arch/arm/dts/Makefile
> >>>> +++ b/arch/arm/dts/Makefile
> >>>> @@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
> >>>>   dtb-$(CONFIG_ARCH_MVEBU) +=                  \
> >>>>        armada-3720-db.dtb                      \
> >>>>        armada-3720-espressobin.dtb             \
> >>>> +     armada-3720-espressobin-ultra.dtb       \
> >>>>        armada-3720-turris-mox.dtb              \
> >>>>        armada-3720-uDPU.dtb                    \
> >>>>        armada-375-db.dtb                       \
> >>>> diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> >>>> new file mode 100644
> >>>> index 0000000000..5ad0c723e3
> >>>> --- /dev/null
> >>>> +++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> >>>> @@ -0,0 +1,114 @@
> >>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> >>>> +/*
> >>>> + * Device Tree file for ESPRESSObin-Ultra board
> >>>> + * Copyright (C) 2016 Marvell
> >>>> + * Copyright (C) 2019 Globalscale technologies, Inc.
> >>>> + * Copyright (C) 2021 Sartura Ltd.
> >>>> + *
> >>>> + * Author: Jason Hung <jhung@globalscaletechnologies.com>
> >>>> + * Author: Luka Kovacic <luka.kovacic@sartura.hr>
> >>>> + * Author: Vladimir Vid <vladimir.vid@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.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"
> >>>> +#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.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"
> >>>> +
> >>>> +/ {
> >>>> +     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 <kostap@marvell.com>
> >>>>   S:   Maintained
> >>>>   F:   configs/mvebu_espressobin-88f3720_defconfig
> >>>>
> >>>> +ESPRESSOBin-Ultra BOARD
> >>>> +M:   Luka Kovacic <luka.kovacic@sartura.hr>
> >>>> +M:   Robert Marko <robert.marko@sartura.hr>
> >>>> +M:   Luka Perkov <luka.perkov@sartura.hr>
> >>>> +S:   Maintained
> >>>> +F:   arch/arm/dts/armada-3720-espressobin-ultra.dts
> >>>> +F:   configs/mvebu_espressobin-ultra-88f3720_defconfig
> >>>> +
> >>>>   uDPU BOARD
> >>>>   M:   Vladimir Vid <vladimir.vid@sartura.hr>
> >>>>   S:   Maintained
> >>>> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> >>>> index 2de9c2ac17..21c1eb7b22 100644
> >>>> --- a/board/Marvell/mvebu_armada-37xx/board.c
> >>>> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> >>>> @@ -11,6 +11,7 @@
> >>>>   #include <i2c.h>
> >>>>   #include <init.h>
> >>>>   #include <mmc.h>
> >>>> +#include <miiphy.h>
> >>>>   #include <phy.h>
> >>>>   #include <asm/global_data.h>
> >>>>   #include <asm/io.h>
> >>>> @@ -55,6 +56,15 @@ DECLARE_GLOBAL_DATA_PTR;
> >>>>   #define MVEBU_G2_SMI_PHY_CMD_REG     (24)
> >>>>   #define MVEBU_G2_SMI_PHY_DATA_REG    (25)
> >>>>
> >>>> +/* Marvell 88E1512 */
> >>>> +#define MII_MARVELL_PHY_PAGE         22
> >>>> +
> >>>> +#define MV88E1512_GENERAL_CTRL               20
> >>>> +#define MV88E1512_MODE_SGMII         1
> >>>> +#define MV88E1512_RESET_OFFS         15
> >>>> +
> >>>> +#define ULTRA_MV88E1512_PHYADDR              0x1
> >>>> +
> >>>>   /*
> >>>>    * Memory Controller Registers
> >>>>    *
> >>>> @@ -282,12 +292,68 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
> >>>>        return 0;
> >>>>   }
> >>>>
> >>>> -/* Bring-up board-specific network stuff */
> >>>> -int board_network_enable(struct mii_dev *bus)
> >>>> +void force_phy_88e1512_sgmii_to_copper(u16 devaddr)
> >>>>   {
> >>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
> >>>> -             return 0;
> >>>> +     const char *name;
> >>>> +     u16 reg;
> >>>> +
> >>>> +     name = miiphy_get_current_dev();
> >>>> +     if (name) {
> >>>> +             /* SGMII-to-Copper mode initialization */
> >>>> +
> >>>> +             /* Select page 18 */
> >>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0x12);
> >>>> +             /* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */
> >>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
> >>>> +             reg &= ~0x7;
> >>>> +             reg |= MV88E1512_MODE_SGMII;
> >>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
> >>>> +             /* PHY reset is necessary after changing MODE[2:0] */
> >>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
> >>>> +             reg |= 1 << MV88E1512_RESET_OFFS;
> >>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
> >>>> +             /* Reset page selection */
> >>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0);
> >>>> +             udelay(100);
> >>>> +     }
> >>>> +}
> >>>> +
> >>>> +int board_network_enable_espressobin_ultra(struct mii_dev *bus)
> >>>> +{
> >>>> +     int i;
> >>>> +     /* Setup 88E1512 SGMII-to-Copper mode */
> >>>> +     force_phy_88e1512_sgmii_to_copper(ULTRA_MV88E1512_PHYADDR);
> >>>>
> >>>> +     /*
> >>>> +      * FIXME: remove this code once Topaz driver gets available
> >>>> +      * A3720 ESPRESSObin Ultra Board Only
> >>>> +      * Configure Topaz switch (88E6341)
> >>>> +      * Set port 1,2,3,4,5 to forwarding Mode (through Switch Port registers)
> >>>> +      */
> >>>> +     for (i = 0; i <= 5; i++) {
> >>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(i),
> >>>> +                                       MVEBU_SW_PORT_CTRL_REG,
> >>>> +                                       i == 5 ? 0x7c : 0x7f);
> >>>> +     }
> >>>> +
> >>>> +     /* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
> >>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(0),
> >>>> +                               MVEBU_SW_LINK_CTRL_REG, 0xe002);
> >>>> +
> >>>> +     /* Power up PHY 1, 2, 3, 4, 5 (through Global 2 registers) */
> >>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
> >>>> +                               MVEBU_G2_SMI_PHY_DATA_REG, 0x1140);
> >>>> +     for (i = 1; i <= 5; i++) {
> >>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
> >>>> +                                       MVEBU_G2_SMI_PHY_CMD_REG, 0x9400 +
> >>>> +                                       (MVEBU_PORT_CTRL_SMI_ADDR(i) << 5));
> >>>> +     }
> >>>> +
> >>>> +     return 0;
> >>>> +}
> >>>> +
> >>>> +int board_network_enable_espressobin(struct mii_dev *bus)
> >>>> +{
> >>>>        /*
> >>>>         * FIXME: remove this code once Topaz driver gets available
> >>>>         * A3720 Community Board Only
> >>>> @@ -328,6 +394,16 @@ int board_network_enable(struct mii_dev *bus)
> >>>>        return 0;
> >>>>   }
> >>>>
> >>>> +/* Bring-up the board-specific networking */
> >>>> +int board_network_enable(struct mii_dev *bus)
> >>>> +{
> >>>> +     if (of_machine_is_compatible("globalscale,espressobin"))
> >>>> +             return board_network_enable_espressobin(bus);
> >>>> +     if (of_machine_is_compatible("globalscale,espressobin-ultra"))
> >>>> +             return board_network_enable_espressobin_ultra(bus);
> >>>> +     return 0;
> >>>> +}
> >>>> +
> >>>>   #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_ENV_IS_IN_SPI_FLASH)
> >>>>   int ft_board_setup(void *blob, struct bd_info *bd)
> >>>>   {
> >>>> @@ -336,8 +412,12 @@ int ft_board_setup(void *blob, struct bd_info *bd)
> >>>>        int parts_off;
> >>>>        int part_off;
> >>>>
> >>>> -     /* Fill SPI MTD partitions for Linux kernel on Espressobin */
> >>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
> >>>> +     /*
> >>>> +      * Fill SPI MTD partitions for the Linux kernel on ESPRESSOBin and
> >>>> +      * ESPRESSOBin Ultra boards.
> >>>> +      */
> >>>> +     if (!of_machine_is_compatible("globalscale,espressobin") &&
> >>>> +         !of_machine_is_compatible("globalscale,espressobin-ultra"))
> >>>>                return 0;
> >>>>
> >>>>        spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
> >>>> diff --git a/configs/mvebu_espressobin-ultra-88f3720_defconfig b/configs/mvebu_espressobin-ultra-88f3720_defconfig
> >>>> new file mode 100644
> >>>> index 0000000000..1bac0a96ad
> >>>> --- /dev/null
> >>>> +++ b/configs/mvebu_espressobin-ultra-88f3720_defconfig
> >>>> @@ -0,0 +1,93 @@
> >>>> +CONFIG_ARM=y
> >>>> +CONFIG_ARCH_CPU_INIT=y
> >>>> +CONFIG_ARCH_MVEBU=y
> >>>> +CONFIG_SYS_TEXT_BASE=0x00000000
> >>>> +CONFIG_SYS_MALLOC_F_LEN=0x2000
> >>>> +CONFIG_NR_DRAM_BANKS=1
> >>>> +CONFIG_TARGET_MVEBU_ARMADA_37XX=y
> >>>> +CONFIG_ENV_SIZE=0x10000
> >>>> +CONFIG_ENV_OFFSET=0x3F0000
> >>>> +CONFIG_ENV_SECT_SIZE=0x10000
> >>>> +CONFIG_DM_GPIO=y
> >>>> +CONFIG_DEBUG_UART_BASE=0xd0012000
> >>>> +CONFIG_DEFAULT_DEVICE_TREE="armada-3720-espressobin-ultra"
> >>>> +CONFIG_DEBUG_UART=y
> >>>> +CONFIG_AHCI=y
> >>>> +CONFIG_DISTRO_DEFAULTS=y
> >>>> +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
> >>>> +CONFIG_OF_BOARD_SETUP=y
> >>>> +CONFIG_FIT=y
> >>>> +CONFIG_FIT_VERBOSE=y
> >>>> +CONFIG_FIT_BEST_MATCH=y
> >>>> +CONFIG_AUTOBOOT_KEYED=y
> >>>> +CONFIG_AUTOBOOT_PROMPT="Autoboot in %d seconds, to stop use 's' key\n"
> >>>> +CONFIG_AUTOBOOT_STOP_STR="s"
> >>>> +CONFIG_AUTOBOOT_KEYED_CTRLC=y
> >>>> +CONFIG_HUSH_PARSER=y
> >>>> +CONFIG_SYS_CONSOLE_INFO_QUIET=y
> >>>> +# CONFIG_DISPLAY_CPUINFO is not set
> >>>> +# CONFIG_DISPLAY_BOARDINFO is not set
> >>>> +CONFIG_DISPLAY_BOARDINFO_LATE=y
> >>>> +CONFIG_ARCH_EARLY_INIT_R=y
> >>>> +CONFIG_BOARD_EARLY_INIT_F=y
> >>>> +CONFIG_BOARD_LATE_INIT=y
> >>>> +# CONFIG_CMD_FLASH is not set
> >>>> +CONFIG_CMD_GPIO=y
> >>>> +CONFIG_CMD_I2C=y
> >>>> +CONFIG_CMD_MMC=y
> >>>> +CONFIG_CMD_MTD=y
> >>>> +CONFIG_CMD_PCI=y
> >>>> +CONFIG_CMD_SPI=y
> >>>> +CONFIG_CMD_USB=y
> >>>> +CONFIG_CMD_WDT=y
> >>>> +# CONFIG_CMD_SETEXPR is not set
> >>>> +CONFIG_CMD_TFTPPUT=y
> >>>> +CONFIG_CMD_CACHE=y
> >>>> +CONFIG_CMD_TIME=y
> >>>> +CONFIG_CMD_MVEBU_BUBT=y
> >>>> +CONFIG_MVEBU_MAC_HW_INFO=y
> >>>> +CONFIG_CMD_EXT4_WRITE=y
> >>>> +CONFIG_MAC_PARTITION=y
> >>>> +CONFIG_ENV_OVERWRITE=y
> >>>> +CONFIG_ENV_IS_IN_SPI_FLASH=y
> >>>> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> >>>> +CONFIG_NET_RANDOM_ETHADDR=y
> >>>> +CONFIG_AHCI_MVEBU=y
> >>>> +CONFIG_CLK=y
> >>>> +CONFIG_CLK_MVEBU=y
> >>>> +CONFIG_DM_I2C=y
> >>>> +CONFIG_MISC=y
> >>>> +CONFIG_MMC_SDHCI=y
> >>>> +CONFIG_MMC_SDHCI_SDMA=y
> >>>> +CONFIG_MMC_SDHCI_XENON=y
> >>>> +CONFIG_MTD=y
> >>>> +CONFIG_DM_MTD=y
> >>>> +CONFIG_SF_DEFAULT_MODE=0
> >>>> +CONFIG_SPI_FLASH_MACRONIX=y
> >>>> +CONFIG_SPI_FLASH_MTD=y
> >>>> +CONFIG_PHY_MARVELL=y
> >>>> +CONFIG_PHY_GIGE=y
> >>>> +CONFIG_MVNETA=y
> >>>> +CONFIG_PCI=y
> >>>> +CONFIG_PCI_AARDVARK=y
> >>>> +CONFIG_PHY=y
> >>>> +CONFIG_MVEBU_COMPHY_SUPPORT=y
> >>>> +CONFIG_PINCTRL=y
> >>>> +CONFIG_PINCTRL_ARMADA_37XX=y
> >>>> +CONFIG_DM_REGULATOR_GPIO=y
> >>>> +CONFIG_DEBUG_UART_SHIFT=2
> >>>> +CONFIG_DEBUG_UART_ANNOUNCE=y
> >>>> +CONFIG_MVEBU_A3700_UART=y
> >>>> +CONFIG_MVEBU_A3700_SPI=y
> >>>> +CONFIG_USB=y
> >>>> +CONFIG_USB_XHCI_HCD=y
> >>>> +CONFIG_USB_EHCI_HCD=y
> >>>> +CONFIG_USB_HOST_ETHER=y
> >>>> +# CONFIG_WATCHDOG_AUTOSTART is not set
> >>>> +CONFIG_WDT=y
> >>>> +CONFIG_WDT_ARMADA_37XX=y
> >>>> +CONFIG_SHA1=y
> >>>> +CONFIG_DM_RTC=y
> >>>> +CONFIG_RTC_PCF8563=y
> >>>> +CONFIG_LED=y
> >>>> +CONFIG_LED_GPIO=y
> >>>> --
> >>>> 2.31.1
> >>>>
> >>
> >> Kind regards,
> >> Luka
>
>
> Viele Grüße,
> Stefan
>
> --
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

Kind regards,
Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13 10:03     ` Luka Kovacic
@ 2021-08-13 10:22       ` Pali Rohár
  2021-08-13 10:33         ` Luka Kovacic
  0 siblings, 1 reply; 18+ messages in thread
From: Pali Rohár @ 2021-08-13 10:22 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, sr, sjg,
	patrick.delaunay, xypron.glpk

On Friday 13 August 2021 12:03:57 Luka Kovacic wrote:
> Hello Pali,
> 
> On Fri, Aug 13, 2021 at 11:27 AM Pali Rohár <pali@kernel.org> wrote:
> >
> > On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > > Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > > Technologies, Inc.
> > >
> > > The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > > Peripherals:
> > >  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> > >  - RTC clock (PCF8563)
> > >  - USB 3.0 port
> > >  - USB 2.0 port
> > >  - 4x LED
> > >  - UART over Micro-USB
> > >  - M.2 slot (2280)
> > >  - Mini PCI-E slot
> > >
> > > Additionally, automatic import of the Marvell hw_info parameters is
> > > enabled via the recently added mac command for A37XX platforms.
> > > The parameters stored in Marvell hw_info are usually the board serial
> > > number and MAC addresses.
> > >
> > > Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > Cc: Robert Marko <robert.marko@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
> > ...
> > > 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) {
> >
> > It is possible that phy is not available? As you are calling code below
> > only in case name is not-NULL.
> 
> Well, according to common/miiphyutil.c, it could also happen that it's NULL.

I see. But if it happens, is not it fatal error for this board? If name
is NULL then you cannot correctly configure board correctly, right?

> >
> > > +             /* 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);
> >
> > Why port 5 has different settings?
> 
> It's to disable forwarding between the WAN port and LAN ports (I've
> tested this).
> I'm aware of this thread:
> https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18

Ok. But your change seems to not be correct. I'm looking at
documentation and when low 2 bits in Port Control Register are zero then
specified port is completely disabled.

I agree that for disabled port is obviously disabled also forwarding.
But I do not think it is what you want... Or, which behavior you want to
achieve? From above added comment (which seems to be also copy+paste) it
is not clear.

Look at that my change which only disables forwarding between ports. And
does not disable ports itself. It is already in newly renamed function
board_network_enable_espressobin(). That is why I do not like copy+paste
of code as it can be copied incorrectly, or differently without
describing commenting why it is differently.

I see that board_network_enable_espressobin_ultra() and
board_network_enable_espressobin() are different. But they have some
common parts, e.g. this port policy configuration. So at least this code
path can be moved in some common function.

> >
> > > +     }
> > > +
> > > +     /* 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));
> > > +     }
> >
> > It looks like that by copying board_network_enable_espressobin_ultra()
> > function from Marvell U-Boot instead of using code which is in mainline
> > function board_network_enable() for Espressobin, you are introducing a
> > security hole, which is in Marvell U-Boot and which was fixed in
> > mainline U-Boot for all supported Espressobin boards (see commit
> > 48f2c8a37f700859a7004dce5adb116597a45700).
> >
> > I would really suggest to not blindly copy old code from Marvell into
> > mainline U-Boot, as here we have fixed lot of issues.
> >
> > > +     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;
> >
> > According to kernel DTS file, it looks like that Espressobin Ultra has
> > different MTD partitions as other variants... Therefore Ultra needs
> > adjustments in this code.
> >
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts?h=v5.13#n78
> 
> That's true, I'll have to fix this.

It is needed to call this function for ultra variant at all? Because as
I understand ultra variant has fixed layout as specified in kernel DTS
file and therefore it should not have any dynamic modification.

Or is there any other issue?

> >
> > >
> > >       spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
> 
> Kind regards,
> Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13  9:27   ` Pali Rohár
@ 2021-08-13 10:03     ` Luka Kovacic
  2021-08-13 10:22       ` Pali Rohár
  0 siblings, 1 reply; 18+ messages in thread
From: Luka Kovacic @ 2021-08-13 10:03 UTC (permalink / raw)
  To: Pali Rohár
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, sr, sjg,
	patrick.delaunay, xypron.glpk

Hello Pali,

On Fri, Aug 13, 2021 at 11:27 AM Pali Rohár <pali@kernel.org> wrote:
>
> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > Technologies, Inc.
> >
> > The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > Peripherals:
> >  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> >  - RTC clock (PCF8563)
> >  - USB 3.0 port
> >  - USB 2.0 port
> >  - 4x LED
> >  - UART over Micro-USB
> >  - M.2 slot (2280)
> >  - Mini PCI-E slot
> >
> > Additionally, automatic import of the Marvell hw_info parameters is
> > enabled via the recently added mac command for A37XX platforms.
> > The parameters stored in Marvell hw_info are usually the board serial
> > number and MAC addresses.
> >
> > Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > Cc: Robert Marko <robert.marko@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
> ...
> > 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) {
>
> It is possible that phy is not available? As you are calling code below
> only in case name is not-NULL.

Well, according to common/miiphyutil.c, it could also happen that it's NULL.

>
> > +             /* 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);
>
> Why port 5 has different settings?

It's to disable forwarding between the WAN port and LAN ports (I've
tested this).
I'm aware of this thread:
https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/issues/18

>
> > +     }
> > +
> > +     /* 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));
> > +     }
>
> It looks like that by copying board_network_enable_espressobin_ultra()
> function from Marvell U-Boot instead of using code which is in mainline
> function board_network_enable() for Espressobin, you are introducing a
> security hole, which is in Marvell U-Boot and which was fixed in
> mainline U-Boot for all supported Espressobin boards (see commit
> 48f2c8a37f700859a7004dce5adb116597a45700).
>
> I would really suggest to not blindly copy old code from Marvell into
> mainline U-Boot, as here we have fixed lot of issues.
>
> > +     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;
>
> According to kernel DTS file, it looks like that Espressobin Ultra has
> different MTD partitions as other variants... Therefore Ultra needs
> adjustments in this code.
>
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts?h=v5.13#n78

That's true, I'll have to fix this.

>
> >
> >       spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");

Kind regards,
Luka

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13  9:54       ` Pali Rohár
@ 2021-08-13  9:58         ` Stefan Roese
  2021-08-13 10:25           ` Luka Kovacic
  0 siblings, 1 reply; 18+ messages in thread
From: Stefan Roese @ 2021-08-13  9:58 UTC (permalink / raw)
  To: Pali Rohár, Luka Kovacic
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, sjg,
	patrick.delaunay, xypron.glpk

Hi,

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

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

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

Thanks Pali for all your work here.

Thanks,
Stefan

>> I resorted to the Linux way and used a common dtsi for both the
>> ESPRESSOBin - which is the base and the ESPRESSOBin-Ultra.
>>
>>>
>>>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
>>>> index c42715ead4..f21c9c94d3 100644
>>>> --- a/arch/arm/dts/Makefile
>>>> +++ b/arch/arm/dts/Makefile
>>>> @@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
>>>>   dtb-$(CONFIG_ARCH_MVEBU) +=                  \
>>>>        armada-3720-db.dtb                      \
>>>>        armada-3720-espressobin.dtb             \
>>>> +     armada-3720-espressobin-ultra.dtb       \
>>>>        armada-3720-turris-mox.dtb              \
>>>>        armada-3720-uDPU.dtb                    \
>>>>        armada-375-db.dtb                       \
>>>> diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
>>>> new file mode 100644
>>>> index 0000000000..5ad0c723e3
>>>> --- /dev/null
>>>> +++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
>>>> @@ -0,0 +1,114 @@
>>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>>>> +/*
>>>> + * Device Tree file for ESPRESSObin-Ultra board
>>>> + * Copyright (C) 2016 Marvell
>>>> + * Copyright (C) 2019 Globalscale technologies, Inc.
>>>> + * Copyright (C) 2021 Sartura Ltd.
>>>> + *
>>>> + * Author: Jason Hung <jhung@globalscaletechnologies.com>
>>>> + * Author: Luka Kovacic <luka.kovacic@sartura.hr>
>>>> + * Author: Vladimir Vid <vladimir.vid@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.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"
>>>> +#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.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"
>>>> +
>>>> +/ {
>>>> +     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 <kostap@marvell.com>
>>>>   S:   Maintained
>>>>   F:   configs/mvebu_espressobin-88f3720_defconfig
>>>>
>>>> +ESPRESSOBin-Ultra BOARD
>>>> +M:   Luka Kovacic <luka.kovacic@sartura.hr>
>>>> +M:   Robert Marko <robert.marko@sartura.hr>
>>>> +M:   Luka Perkov <luka.perkov@sartura.hr>
>>>> +S:   Maintained
>>>> +F:   arch/arm/dts/armada-3720-espressobin-ultra.dts
>>>> +F:   configs/mvebu_espressobin-ultra-88f3720_defconfig
>>>> +
>>>>   uDPU BOARD
>>>>   M:   Vladimir Vid <vladimir.vid@sartura.hr>
>>>>   S:   Maintained
>>>> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
>>>> index 2de9c2ac17..21c1eb7b22 100644
>>>> --- a/board/Marvell/mvebu_armada-37xx/board.c
>>>> +++ b/board/Marvell/mvebu_armada-37xx/board.c
>>>> @@ -11,6 +11,7 @@
>>>>   #include <i2c.h>
>>>>   #include <init.h>
>>>>   #include <mmc.h>
>>>> +#include <miiphy.h>
>>>>   #include <phy.h>
>>>>   #include <asm/global_data.h>
>>>>   #include <asm/io.h>
>>>> @@ -55,6 +56,15 @@ DECLARE_GLOBAL_DATA_PTR;
>>>>   #define MVEBU_G2_SMI_PHY_CMD_REG     (24)
>>>>   #define MVEBU_G2_SMI_PHY_DATA_REG    (25)
>>>>
>>>> +/* Marvell 88E1512 */
>>>> +#define MII_MARVELL_PHY_PAGE         22
>>>> +
>>>> +#define MV88E1512_GENERAL_CTRL               20
>>>> +#define MV88E1512_MODE_SGMII         1
>>>> +#define MV88E1512_RESET_OFFS         15
>>>> +
>>>> +#define ULTRA_MV88E1512_PHYADDR              0x1
>>>> +
>>>>   /*
>>>>    * Memory Controller Registers
>>>>    *
>>>> @@ -282,12 +292,68 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
>>>>        return 0;
>>>>   }
>>>>
>>>> -/* Bring-up board-specific network stuff */
>>>> -int board_network_enable(struct mii_dev *bus)
>>>> +void force_phy_88e1512_sgmii_to_copper(u16 devaddr)
>>>>   {
>>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
>>>> -             return 0;
>>>> +     const char *name;
>>>> +     u16 reg;
>>>> +
>>>> +     name = miiphy_get_current_dev();
>>>> +     if (name) {
>>>> +             /* SGMII-to-Copper mode initialization */
>>>> +
>>>> +             /* Select page 18 */
>>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0x12);
>>>> +             /* In reg 20, write MODE[2:0] = 0x1 (SGMII to Copper) */
>>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
>>>> +             reg &= ~0x7;
>>>> +             reg |= MV88E1512_MODE_SGMII;
>>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
>>>> +             /* PHY reset is necessary after changing MODE[2:0] */
>>>> +             miiphy_read(name, devaddr, MV88E1512_GENERAL_CTRL, &reg);
>>>> +             reg |= 1 << MV88E1512_RESET_OFFS;
>>>> +             miiphy_write(name, devaddr, MV88E1512_GENERAL_CTRL, reg);
>>>> +             /* Reset page selection */
>>>> +             miiphy_write(name, devaddr, MII_MARVELL_PHY_PAGE, 0);
>>>> +             udelay(100);
>>>> +     }
>>>> +}
>>>> +
>>>> +int board_network_enable_espressobin_ultra(struct mii_dev *bus)
>>>> +{
>>>> +     int i;
>>>> +     /* Setup 88E1512 SGMII-to-Copper mode */
>>>> +     force_phy_88e1512_sgmii_to_copper(ULTRA_MV88E1512_PHYADDR);
>>>>
>>>> +     /*
>>>> +      * FIXME: remove this code once Topaz driver gets available
>>>> +      * A3720 ESPRESSObin Ultra Board Only
>>>> +      * Configure Topaz switch (88E6341)
>>>> +      * Set port 1,2,3,4,5 to forwarding Mode (through Switch Port registers)
>>>> +      */
>>>> +     for (i = 0; i <= 5; i++) {
>>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(i),
>>>> +                                       MVEBU_SW_PORT_CTRL_REG,
>>>> +                                       i == 5 ? 0x7c : 0x7f);
>>>> +     }
>>>> +
>>>> +     /* RGMII Delay on Port 0 (CPU port), force link to 1000Mbps */
>>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_PORT_CTRL_SMI_ADDR(0),
>>>> +                               MVEBU_SW_LINK_CTRL_REG, 0xe002);
>>>> +
>>>> +     /* Power up PHY 1, 2, 3, 4, 5 (through Global 2 registers) */
>>>> +     mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
>>>> +                               MVEBU_G2_SMI_PHY_DATA_REG, 0x1140);
>>>> +     for (i = 1; i <= 5; i++) {
>>>> +             mii_multi_chip_mode_write(bus, 3, MVEBU_SW_G2_SMI_ADDR,
>>>> +                                       MVEBU_G2_SMI_PHY_CMD_REG, 0x9400 +
>>>> +                                       (MVEBU_PORT_CTRL_SMI_ADDR(i) << 5));
>>>> +     }
>>>> +
>>>> +     return 0;
>>>> +}
>>>> +
>>>> +int board_network_enable_espressobin(struct mii_dev *bus)
>>>> +{
>>>>        /*
>>>>         * FIXME: remove this code once Topaz driver gets available
>>>>         * A3720 Community Board Only
>>>> @@ -328,6 +394,16 @@ int board_network_enable(struct mii_dev *bus)
>>>>        return 0;
>>>>   }
>>>>
>>>> +/* Bring-up the board-specific networking */
>>>> +int board_network_enable(struct mii_dev *bus)
>>>> +{
>>>> +     if (of_machine_is_compatible("globalscale,espressobin"))
>>>> +             return board_network_enable_espressobin(bus);
>>>> +     if (of_machine_is_compatible("globalscale,espressobin-ultra"))
>>>> +             return board_network_enable_espressobin_ultra(bus);
>>>> +     return 0;
>>>> +}
>>>> +
>>>>   #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_ENV_IS_IN_SPI_FLASH)
>>>>   int ft_board_setup(void *blob, struct bd_info *bd)
>>>>   {
>>>> @@ -336,8 +412,12 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>>>>        int parts_off;
>>>>        int part_off;
>>>>
>>>> -     /* Fill SPI MTD partitions for Linux kernel on Espressobin */
>>>> -     if (!of_machine_is_compatible("globalscale,espressobin"))
>>>> +     /*
>>>> +      * Fill SPI MTD partitions for the Linux kernel on ESPRESSOBin and
>>>> +      * ESPRESSOBin Ultra boards.
>>>> +      */
>>>> +     if (!of_machine_is_compatible("globalscale,espressobin") &&
>>>> +         !of_machine_is_compatible("globalscale,espressobin-ultra"))
>>>>                return 0;
>>>>
>>>>        spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
>>>> diff --git a/configs/mvebu_espressobin-ultra-88f3720_defconfig b/configs/mvebu_espressobin-ultra-88f3720_defconfig
>>>> new file mode 100644
>>>> index 0000000000..1bac0a96ad
>>>> --- /dev/null
>>>> +++ b/configs/mvebu_espressobin-ultra-88f3720_defconfig
>>>> @@ -0,0 +1,93 @@
>>>> +CONFIG_ARM=y
>>>> +CONFIG_ARCH_CPU_INIT=y
>>>> +CONFIG_ARCH_MVEBU=y
>>>> +CONFIG_SYS_TEXT_BASE=0x00000000
>>>> +CONFIG_SYS_MALLOC_F_LEN=0x2000
>>>> +CONFIG_NR_DRAM_BANKS=1
>>>> +CONFIG_TARGET_MVEBU_ARMADA_37XX=y
>>>> +CONFIG_ENV_SIZE=0x10000
>>>> +CONFIG_ENV_OFFSET=0x3F0000
>>>> +CONFIG_ENV_SECT_SIZE=0x10000
>>>> +CONFIG_DM_GPIO=y
>>>> +CONFIG_DEBUG_UART_BASE=0xd0012000
>>>> +CONFIG_DEFAULT_DEVICE_TREE="armada-3720-espressobin-ultra"
>>>> +CONFIG_DEBUG_UART=y
>>>> +CONFIG_AHCI=y
>>>> +CONFIG_DISTRO_DEFAULTS=y
>>>> +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
>>>> +CONFIG_OF_BOARD_SETUP=y
>>>> +CONFIG_FIT=y
>>>> +CONFIG_FIT_VERBOSE=y
>>>> +CONFIG_FIT_BEST_MATCH=y
>>>> +CONFIG_AUTOBOOT_KEYED=y
>>>> +CONFIG_AUTOBOOT_PROMPT="Autoboot in %d seconds, to stop use 's' key\n"
>>>> +CONFIG_AUTOBOOT_STOP_STR="s"
>>>> +CONFIG_AUTOBOOT_KEYED_CTRLC=y
>>>> +CONFIG_HUSH_PARSER=y
>>>> +CONFIG_SYS_CONSOLE_INFO_QUIET=y
>>>> +# CONFIG_DISPLAY_CPUINFO is not set
>>>> +# CONFIG_DISPLAY_BOARDINFO is not set
>>>> +CONFIG_DISPLAY_BOARDINFO_LATE=y
>>>> +CONFIG_ARCH_EARLY_INIT_R=y
>>>> +CONFIG_BOARD_EARLY_INIT_F=y
>>>> +CONFIG_BOARD_LATE_INIT=y
>>>> +# CONFIG_CMD_FLASH is not set
>>>> +CONFIG_CMD_GPIO=y
>>>> +CONFIG_CMD_I2C=y
>>>> +CONFIG_CMD_MMC=y
>>>> +CONFIG_CMD_MTD=y
>>>> +CONFIG_CMD_PCI=y
>>>> +CONFIG_CMD_SPI=y
>>>> +CONFIG_CMD_USB=y
>>>> +CONFIG_CMD_WDT=y
>>>> +# CONFIG_CMD_SETEXPR is not set
>>>> +CONFIG_CMD_TFTPPUT=y
>>>> +CONFIG_CMD_CACHE=y
>>>> +CONFIG_CMD_TIME=y
>>>> +CONFIG_CMD_MVEBU_BUBT=y
>>>> +CONFIG_MVEBU_MAC_HW_INFO=y
>>>> +CONFIG_CMD_EXT4_WRITE=y
>>>> +CONFIG_MAC_PARTITION=y
>>>> +CONFIG_ENV_OVERWRITE=y
>>>> +CONFIG_ENV_IS_IN_SPI_FLASH=y
>>>> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
>>>> +CONFIG_NET_RANDOM_ETHADDR=y
>>>> +CONFIG_AHCI_MVEBU=y
>>>> +CONFIG_CLK=y
>>>> +CONFIG_CLK_MVEBU=y
>>>> +CONFIG_DM_I2C=y
>>>> +CONFIG_MISC=y
>>>> +CONFIG_MMC_SDHCI=y
>>>> +CONFIG_MMC_SDHCI_SDMA=y
>>>> +CONFIG_MMC_SDHCI_XENON=y
>>>> +CONFIG_MTD=y
>>>> +CONFIG_DM_MTD=y
>>>> +CONFIG_SF_DEFAULT_MODE=0
>>>> +CONFIG_SPI_FLASH_MACRONIX=y
>>>> +CONFIG_SPI_FLASH_MTD=y
>>>> +CONFIG_PHY_MARVELL=y
>>>> +CONFIG_PHY_GIGE=y
>>>> +CONFIG_MVNETA=y
>>>> +CONFIG_PCI=y
>>>> +CONFIG_PCI_AARDVARK=y
>>>> +CONFIG_PHY=y
>>>> +CONFIG_MVEBU_COMPHY_SUPPORT=y
>>>> +CONFIG_PINCTRL=y
>>>> +CONFIG_PINCTRL_ARMADA_37XX=y
>>>> +CONFIG_DM_REGULATOR_GPIO=y
>>>> +CONFIG_DEBUG_UART_SHIFT=2
>>>> +CONFIG_DEBUG_UART_ANNOUNCE=y
>>>> +CONFIG_MVEBU_A3700_UART=y
>>>> +CONFIG_MVEBU_A3700_SPI=y
>>>> +CONFIG_USB=y
>>>> +CONFIG_USB_XHCI_HCD=y
>>>> +CONFIG_USB_EHCI_HCD=y
>>>> +CONFIG_USB_HOST_ETHER=y
>>>> +# CONFIG_WATCHDOG_AUTOSTART is not set
>>>> +CONFIG_WDT=y
>>>> +CONFIG_WDT_ARMADA_37XX=y
>>>> +CONFIG_SHA1=y
>>>> +CONFIG_DM_RTC=y
>>>> +CONFIG_RTC_PCF8563=y
>>>> +CONFIG_LED=y
>>>> +CONFIG_LED_GPIO=y
>>>> --
>>>> 2.31.1
>>>>
>>
>> Kind regards,
>> Luka


Viele Grüße,
Stefan

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

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13  9:08     ` Luka Kovacic
@ 2021-08-13  9:54       ` Pali Rohár
  2021-08-13  9:58         ` Stefan Roese
  0 siblings, 1 reply; 18+ messages in thread
From: Pali Rohár @ 2021-08-13  9:54 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, sr, sjg,
	patrick.delaunay, xypron.glpk

On Friday 13 August 2021 11:08:08 Luka Kovacic wrote:
> Hello Pali,
> 
> On Fri, Aug 13, 2021 at 10:14 AM Pali Rohár <pali@kernel.org> wrote:
> >
> > On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > > Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > > Technologies, Inc.
> > >
> > > The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > > Peripherals:
> > >  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> > >  - RTC clock (PCF8563)
> > >  - USB 3.0 port
> > >  - USB 2.0 port
> > >  - 4x LED
> > >  - UART over Micro-USB
> > >  - M.2 slot (2280)
> > >  - Mini PCI-E slot
> > >
> > > Additionally, automatic import of the Marvell hw_info parameters is
> > > enabled via the recently added mac command for A37XX platforms.
> > > The parameters stored in Marvell hw_info are usually the board serial
> > > number and MAC addresses.
> > >
> > > Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > > Cc: Robert Marko <robert.marko@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.

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.

> I resorted to the Linux way and used a common dtsi for both the
> ESPRESSOBin - which is the base and the ESPRESSOBin-Ultra.
> 
> >
> > > diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> > > index c42715ead4..f21c9c94d3 100644
> > > --- a/arch/arm/dts/Makefile
> > > +++ b/arch/arm/dts/Makefile
> > > @@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
> > >  dtb-$(CONFIG_ARCH_MVEBU) +=                  \
> > >       armada-3720-db.dtb                      \
> > >       armada-3720-espressobin.dtb             \
> > > +     armada-3720-espressobin-ultra.dtb       \
> > >       armada-3720-turris-mox.dtb              \
> > >       armada-3720-uDPU.dtb                    \
> > >       armada-375-db.dtb                       \
> > > diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> > > new file mode 100644
> > > index 0000000000..5ad0c723e3
> > > --- /dev/null
> > > +++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> > > @@ -0,0 +1,114 @@
> > > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> > > +/*
> > > + * Device Tree file for ESPRESSObin-Ultra board
> > > + * Copyright (C) 2016 Marvell
> > > + * Copyright (C) 2019 Globalscale technologies, Inc.
> > > + * Copyright (C) 2021 Sartura Ltd.
> > > + *
> > > + * Author: Jason Hung <jhung@globalscaletechnologies.com>
> > > + * Author: Luka Kovacic <luka.kovacic@sartura.hr>
> > > + * Author: Vladimir Vid <vladimir.vid@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.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"
> > > +#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.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"
> > > +
> > > +/ {
> > > +     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 <kostap@marvell.com>
> > >  S:   Maintained
> > >  F:   configs/mvebu_espressobin-88f3720_defconfig
> > >
> > > +ESPRESSOBin-Ultra BOARD
> > > +M:   Luka Kovacic <luka.kovacic@sartura.hr>
> > > +M:   Robert Marko <robert.marko@sartura.hr>
> > > +M:   Luka Perkov <luka.perkov@sartura.hr>
> > > +S:   Maintained
> > > +F:   arch/arm/dts/armada-3720-espressobin-ultra.dts
> > > +F:   configs/mvebu_espressobin-ultra-88f3720_defconfig
> > > +
> > >  uDPU BOARD
> > >  M:   Vladimir Vid <vladimir.vid@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

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-12 23:39 ` [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support Luka Kovacic
  2021-08-13  8:14   ` Pali Rohár
@ 2021-08-13  9:27   ` Pali Rohár
  2021-08-13 10:03     ` Luka Kovacic
  1 sibling, 1 reply; 18+ messages in thread
From: Pali Rohár @ 2021-08-13  9:27 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: u-boot, robert.marko, luka.perkov, marek.behun, sr, sjg,
	patrick.delaunay, xypron.glpk

On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> Technologies, Inc.
> 
> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> Peripherals:
>  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
>  - RTC clock (PCF8563)
>  - USB 3.0 port
>  - USB 2.0 port
>  - 4x LED
>  - UART over Micro-USB
>  - M.2 slot (2280)
>  - Mini PCI-E slot
> 
> Additionally, automatic import of the Marvell hw_info parameters is
> enabled via the recently added mac command for A37XX platforms.
> The parameters stored in Marvell hw_info are usually the board serial
> number and MAC addresses.
> 
> Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> Cc: Luka Perkov <luka.perkov@sartura.hr>
> Cc: Robert Marko <robert.marko@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
...
> 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) {

It is possible that phy is not available? As you are calling code below
only in case name is not-NULL.

> +		/* 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);

Why port 5 has different settings?

> +	}
> +
> +	/* 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));
> +	}

It looks like that by copying board_network_enable_espressobin_ultra()
function from Marvell U-Boot instead of using code which is in mainline
function board_network_enable() for Espressobin, you are introducing a
security hole, which is in Marvell U-Boot and which was fixed in
mainline U-Boot for all supported Espressobin boards (see commit
48f2c8a37f700859a7004dce5adb116597a45700).

I would really suggest to not blindly copy old code from Marvell into
mainline U-Boot, as here we have fixed lot of issues.

> +	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;

According to kernel DTS file, it looks like that Espressobin Ultra has
different MTD partitions as other variants... Therefore Ultra needs
adjustments in this code.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts?h=v5.13#n78

>  
>  	spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-13  8:14   ` Pali Rohár
@ 2021-08-13  9:08     ` Luka Kovacic
  2021-08-13  9:54       ` Pali Rohár
  0 siblings, 1 reply; 18+ messages in thread
From: Luka Kovacic @ 2021-08-13  9:08 UTC (permalink / raw)
  To: Pali Rohár
  Cc: u-boot, Robert Marko, Luka Perkov, Marek Behun, sr, sjg,
	patrick.delaunay, xypron.glpk

Hello Pali,

On Fri, Aug 13, 2021 at 10:14 AM Pali Rohár <pali@kernel.org> wrote:
>
> On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> > Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> > Technologies, Inc.
> >
> > The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> > Peripherals:
> >  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
> >  - RTC clock (PCF8563)
> >  - USB 3.0 port
> >  - USB 2.0 port
> >  - 4x LED
> >  - UART over Micro-USB
> >  - M.2 slot (2280)
> >  - Mini PCI-E slot
> >
> > Additionally, automatic import of the Marvell hw_info parameters is
> > enabled via the recently added mac command for A37XX platforms.
> > The parameters stored in Marvell hw_info are usually the board serial
> > number and MAC addresses.
> >
> > Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> > Cc: Luka Perkov <luka.perkov@sartura.hr>
> > Cc: Robert Marko <robert.marko@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.

I resorted to the Linux way and used a common dtsi for both the
ESPRESSOBin - which is the base and the ESPRESSOBin-Ultra.

>
> > diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> > index c42715ead4..f21c9c94d3 100644
> > --- a/arch/arm/dts/Makefile
> > +++ b/arch/arm/dts/Makefile
> > @@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
> >  dtb-$(CONFIG_ARCH_MVEBU) +=                  \
> >       armada-3720-db.dtb                      \
> >       armada-3720-espressobin.dtb             \
> > +     armada-3720-espressobin-ultra.dtb       \
> >       armada-3720-turris-mox.dtb              \
> >       armada-3720-uDPU.dtb                    \
> >       armada-375-db.dtb                       \
> > diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> > new file mode 100644
> > index 0000000000..5ad0c723e3
> > --- /dev/null
> > +++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> > @@ -0,0 +1,114 @@
> > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> > +/*
> > + * Device Tree file for ESPRESSObin-Ultra board
> > + * Copyright (C) 2016 Marvell
> > + * Copyright (C) 2019 Globalscale technologies, Inc.
> > + * Copyright (C) 2021 Sartura Ltd.
> > + *
> > + * Author: Jason Hung <jhung@globalscaletechnologies.com>
> > + * Author: Luka Kovacic <luka.kovacic@sartura.hr>
> > + * Author: Vladimir Vid <vladimir.vid@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.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"
> > +#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.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"
> > +
> > +/ {
> > +     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 <kostap@marvell.com>
> >  S:   Maintained
> >  F:   configs/mvebu_espressobin-88f3720_defconfig
> >
> > +ESPRESSOBin-Ultra BOARD
> > +M:   Luka Kovacic <luka.kovacic@sartura.hr>
> > +M:   Robert Marko <robert.marko@sartura.hr>
> > +M:   Luka Perkov <luka.perkov@sartura.hr>
> > +S:   Maintained
> > +F:   arch/arm/dts/armada-3720-espressobin-ultra.dts
> > +F:   configs/mvebu_espressobin-ultra-88f3720_defconfig
> > +
> >  uDPU BOARD
> >  M:   Vladimir Vid <vladimir.vid@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

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-12 23:39 ` [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support Luka Kovacic
@ 2021-08-13  8:14   ` Pali Rohár
  2021-08-13  9:08     ` Luka Kovacic
  2021-08-13  9:27   ` Pali Rohár
  1 sibling, 1 reply; 18+ messages in thread
From: Pali Rohár @ 2021-08-13  8:14 UTC (permalink / raw)
  To: Luka Kovacic
  Cc: u-boot, robert.marko, luka.perkov, marek.behun, sr, sjg,
	patrick.delaunay, xypron.glpk

On Friday 13 August 2021 01:39:38 Luka Kovacic wrote:
> Add initial support for the ESPRESSOBin-Ultra board from Globalscale
> Technologies, Inc.
> 
> The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
> Peripherals:
>  - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
>  - RTC clock (PCF8563)
>  - USB 3.0 port
>  - USB 2.0 port
>  - 4x LED
>  - UART over Micro-USB
>  - M.2 slot (2280)
>  - Mini PCI-E slot
> 
> Additionally, automatic import of the Marvell hw_info parameters is
> enabled via the recently added mac command for A37XX platforms.
> The parameters stored in Marvell hw_info are usually the board serial
> number and MAC addresses.
> 
> Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
> Cc: Luka Perkov <luka.perkov@sartura.hr>
> Cc: Robert Marko <robert.marko@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".

> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index c42715ead4..f21c9c94d3 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
>  dtb-$(CONFIG_ARCH_MVEBU) +=			\
>  	armada-3720-db.dtb			\
>  	armada-3720-espressobin.dtb		\
> +	armada-3720-espressobin-ultra.dtb	\
>  	armada-3720-turris-mox.dtb		\
>  	armada-3720-uDPU.dtb			\
>  	armada-375-db.dtb			\
> diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> new file mode 100644
> index 0000000000..5ad0c723e3
> --- /dev/null
> +++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
> @@ -0,0 +1,114 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Device Tree file for ESPRESSObin-Ultra board
> + * Copyright (C) 2016 Marvell
> + * Copyright (C) 2019 Globalscale technologies, Inc.
> + * Copyright (C) 2021 Sartura Ltd.
> + *
> + * Author: Jason Hung <jhung@globalscaletechnologies.com>
> + * Author: Luka Kovacic <luka.kovacic@sartura.hr>
> + * Author: Vladimir Vid <vladimir.vid@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.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"
> +#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.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"
> +
> +/ {
> +	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 <kostap@marvell.com>
>  S:	Maintained
>  F:	configs/mvebu_espressobin-88f3720_defconfig
>  
> +ESPRESSOBin-Ultra BOARD
> +M:	Luka Kovacic <luka.kovacic@sartura.hr>
> +M:	Robert Marko <robert.marko@sartura.hr>
> +M:	Luka Perkov <luka.perkov@sartura.hr>
> +S:	Maintained
> +F:	arch/arm/dts/armada-3720-espressobin-ultra.dts
> +F:	configs/mvebu_espressobin-ultra-88f3720_defconfig
> +
>  uDPU BOARD
>  M:	Vladimir Vid <vladimir.vid@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
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support
  2021-08-12 23:39 [PATCH v3 0/3] Add support for the GST ESPRESSOBin-Ultra board Luka Kovacic
@ 2021-08-12 23:39 ` Luka Kovacic
  2021-08-13  8:14   ` Pali Rohár
  2021-08-13  9:27   ` Pali Rohár
  0 siblings, 2 replies; 18+ messages in thread
From: Luka Kovacic @ 2021-08-12 23:39 UTC (permalink / raw)
  To: u-boot
  Cc: robert.marko, luka.perkov, marek.behun, pali, sr, sjg,
	patrick.delaunay, xypron.glpk, Luka Kovacic

Add initial support for the ESPRESSOBin-Ultra board from Globalscale
Technologies, Inc.

The board is based on the 64-bit dual-core Marvell Armada 3720 SoC.
Peripherals:
 - 5 Gigabit Ethernet ports (WAN has PoE, up to 30W, Topaz 6341 switch)
 - RTC clock (PCF8563)
 - USB 3.0 port
 - USB 2.0 port
 - 4x LED
 - UART over Micro-USB
 - M.2 slot (2280)
 - Mini PCI-E slot

Additionally, automatic import of the Marvell hw_info parameters is
enabled via the recently added mac command for A37XX platforms.
The parameters stored in Marvell hw_info are usually the board serial
number and MAC addresses.

Signed-off-by: Luka Kovacic <luka.kovacic@sartura.hr>
Cc: Luka Perkov <luka.perkov@sartura.hr>
Cc: Robert Marko <robert.marko@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

diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index c42715ead4..f21c9c94d3 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -213,6 +213,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
 dtb-$(CONFIG_ARCH_MVEBU) +=			\
 	armada-3720-db.dtb			\
 	armada-3720-espressobin.dtb		\
+	armada-3720-espressobin-ultra.dtb	\
 	armada-3720-turris-mox.dtb		\
 	armada-3720-uDPU.dtb			\
 	armada-375-db.dtb			\
diff --git a/arch/arm/dts/armada-3720-espressobin-ultra.dts b/arch/arm/dts/armada-3720-espressobin-ultra.dts
new file mode 100644
index 0000000000..5ad0c723e3
--- /dev/null
+++ b/arch/arm/dts/armada-3720-espressobin-ultra.dts
@@ -0,0 +1,114 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Device Tree file for ESPRESSObin-Ultra board
+ * Copyright (C) 2016 Marvell
+ * Copyright (C) 2019 Globalscale technologies, Inc.
+ * Copyright (C) 2021 Sartura Ltd.
+ *
+ * Author: Jason Hung <jhung@globalscaletechnologies.com>
+ * Author: Luka Kovacic <luka.kovacic@sartura.hr>
+ * Author: Vladimir Vid <vladimir.vid@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.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"
+#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.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"
+
+/ {
+	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 <kostap@marvell.com>
 S:	Maintained
 F:	configs/mvebu_espressobin-88f3720_defconfig
 
+ESPRESSOBin-Ultra BOARD
+M:	Luka Kovacic <luka.kovacic@sartura.hr>
+M:	Robert Marko <robert.marko@sartura.hr>
+M:	Luka Perkov <luka.perkov@sartura.hr>
+S:	Maintained
+F:	arch/arm/dts/armada-3720-espressobin-ultra.dts
+F:	configs/mvebu_espressobin-ultra-88f3720_defconfig
+
 uDPU BOARD
 M:	Vladimir Vid <vladimir.vid@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


^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2021-09-27  8:32 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <mailman.4124.1628923685.660.u-boot@lists.denx.de>
2021-08-14  7:59 ` [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support Gérald Kerma
2021-08-16  8:50   ` Luka Kovacic
2021-08-16  9:47     ` Gérald Kerma
2021-08-12 23:39 [PATCH v3 0/3] Add support for the GST ESPRESSOBin-Ultra board Luka Kovacic
2021-08-12 23:39 ` [PATCH v3 3/3] arm: mvebu: Initial ESPRESSOBin-Ultra board support Luka Kovacic
2021-08-13  8:14   ` Pali Rohár
2021-08-13  9:08     ` Luka Kovacic
2021-08-13  9:54       ` Pali Rohár
2021-08-13  9:58         ` Stefan Roese
2021-08-13 10:25           ` Luka Kovacic
2021-08-13 10:46             ` Pali Rohár
2021-09-24 18:30               ` Pali Rohár
2021-09-27  8:31                 ` Luka Kovacic
2021-08-13  9:27   ` Pali Rohár
2021-08-13 10:03     ` Luka Kovacic
2021-08-13 10:22       ` Pali Rohár
2021-08-13 10:33         ` Luka Kovacic
2021-08-13 10:59           ` Pali Rohár
2021-08-16  8:37             ` Luka Kovacic

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.