Re: [PATCH v3 01/15] ARM: mvebu: add Netgear RN102 support

Marco Felsch <[email protected]> Mon, 3 Aug 2026 15:43:59 +0200
Newsgroups org.infradead.lists.barebox
Message-ID <vcqxg6s7erwuuxe62wdhecqrqsuao427vigelmvkg5pqjamvz7@46g5a3zsbs43>
On 26-08-03, Sascha Hauer wrote:
> On 2026-08-02 15:16, Luca Lauro via B4 Relay wrote:
> > From: Luca Lauro <[email protected]>
> > 
> > This adds full support for the Netgear ReadyNAS 102, including:
> > 
> >  - board driver matching on "netgear,rn102"
> >  - lowlevel initialization
> >  - barebox overlay with environment, state backend and
> > 	NAND partition layout
> >  - Kconfig entry
> >  - image support
> > 
> > Signed-off-by: Luca Lauro <[email protected]>
> > ---
> >  arch/arm/boards/Makefile                 |   1 +
> >  arch/arm/boards/netgear-rn102/Makefile   |   4 +
> >  arch/arm/boards/netgear-rn102/board.c    | 243 +++++++++++++++++++++++++++++++
> >  arch/arm/boards/netgear-rn102/lowlevel.c |  58 ++++++++
> >  arch/arm/dts/Makefile                    |   1 +
> >  arch/arm/dts/armada-370-rn102-bb.dts     |  82 +++++++++++
> >  arch/arm/mach-mvebu/Kconfig              |   4 +
> >  images/Makefile.mvebu                    |  10 ++
> >  8 files changed, 403 insertions(+)
> > 
> > diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
> > index dd2f2c324e..aca1b45a81 100644
> > --- a/arch/arm/boards/Makefile
> > +++ b/arch/arm/boards/Makefile
> > @@ -64,6 +64,7 @@ obj-$(CONFIG_MACH_MARVELL_ARMADA_XP_DB)		+= marvell-armada-xp-db/
> >  obj-$(CONFIG_MACH_MX23EVK)			+= freescale-mx23-evk/
> >  obj-$(CONFIG_MACH_MX28EVK)			+= freescale-mx28-evk/
> >  obj-$(CONFIG_MACH_MYIRTECH_X335X)		+= myirtech-x335x/
> > +obj-$(CONFIG_MACH_NETGEAR_RN102)		+= netgear-rn102/
> >  obj-$(CONFIG_MACH_NETGEAR_RN104)		+= netgear-rn104/
> >  obj-$(CONFIG_MACH_NETGEAR_RN2120)		+= netgear-rn2120/
> >  obj-$(CONFIG_MACH_NVIDIA_BEAVER)		+= nvidia-beaver/
> > diff --git a/arch/arm/boards/netgear-rn102/Makefile b/arch/arm/boards/netgear-rn102/Makefile
> > new file mode 100644
> > index 0000000000..da63d2625f
> > --- /dev/null
> > +++ b/arch/arm/boards/netgear-rn102/Makefile
> > @@ -0,0 +1,4 @@
> > +# SPDX-License-Identifier: GPL-2.0-only
> > +
> > +obj-y += board.o
> > +lwl-y += lowlevel.o
> > diff --git a/arch/arm/boards/netgear-rn102/board.c b/arch/arm/boards/netgear-rn102/board.c
> > new file mode 100644
> > index 0000000000..dba3d11518
> > --- /dev/null
> > +++ b/arch/arm/boards/netgear-rn102/board.c
> > @@ -0,0 +1,243 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +
> > +#include <common.h>
> > +#include <init.h>
> > +#include <gpio.h>
> > +#include <driver.h>
> > +#include <of.h>
> > +#include <linux/device.h>
> > +#include <linux/mbus.h>
> > +#include <mach/mvebu/armada-370-xp-regs.h>
> > +#include <bbu.h>
> > +
> > +/*
> > + *  Early GPIO0 MMIO
> > + *
> > + * GPIO driver arrives too late for the disks to be
> > + * ready in time for AHCI driver probe.
> 
> barebox supports deep probe which means the devices are made available
> once needed or requested. Provided your dts carries the
> barebox,deep-probe property you can do this:
> 
> of_device_ensure_probed_by_alias("gpio0");
> of_device_ensure_probed_by_alias("gpio1");
> of_device_ensure_probed_by_alias("gpio2");
> 
> From that on the GPIO driver should be probed and you can use it.
> 
> It shouldn't be necessary to duplicate the GPIO driver here.
> 
> > +/*
> > + * RN102 board driver
> > + *
> > + * Preferred pattern: board-specific code as a platform driver
> > + * matching on the root DT node ("netgear,rn102").
> > + */
> > +static int rn102_probe(struct device *dev)
> > +{
> > +	/* CFU configuration */
> > +	writel(0xC6, 0xf1020228);
> > +
> > +	setup_usb0();
> > +	setup_bays();
> > +	init_disks();
> > +
> > +	/* Barebox Update handlers */
> > +	bbu_register_std_file_update("bootloader", 0,
> > +					 "/dev/nand0.bootloader",
> > +					 filetype_kwbimage_v1);
> > +
> > +	bbu_register_std_file_update("kernel", 0,
> > +					 "/dev/nand0.kernel",
> > +					 filetype_arm_zimage);
> > +
> > +	bbu_register_std_file_update("minirootfs", 0,
> > +					 "/dev/nand0.minirootfs",
> > +					 filetype_gzip);
> 
> That is a creative use of barebox update handlers. They are designed for
> updating barebox itself, not arbitrary other components.
> 
> I must think about this.

Hint:
You can expose the kernel and minirootfs via fastboot partitions to get
a nice user interface. Barebox can talk the fastboot protocol over USB
or NET.

Regards,
  Marco