mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
@ 2023-03-19 15:49 Wolfram Sang
  2023-03-19 15:49 ` [PATCH 1/3] mtd: nand: atmel: legacy: add 'algo' to use Wolfram Sang
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Wolfram Sang @ 2023-03-19 15:49 UTC (permalink / raw)
  To: barebox; +Cc: Wolfram Sang

While trying to unbrick my Calao USB-A9G20, barebox couldn't read the
NAND BB tables unlike the binary-only barebox from 2013. The first two
patches fix that. The third one is a cleanup.

Happy hacking!


Wolfram Sang (3):
  mtd: nand: atmel: legacy: add 'algo' to use
  mtd: nand: atmel: legacy: use proper ecc_shift
  mtd: nand: atmel: legacy: remove superfluous code

 drivers/mtd/nand/atmel/legacy.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

-- 
2.35.1




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

* [PATCH 1/3] mtd: nand: atmel: legacy: add 'algo' to use
  2023-03-19 15:49 [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Wolfram Sang
@ 2023-03-19 15:49 ` Wolfram Sang
  2023-03-19 15:49 ` [PATCH 2/3] mtd: nand: atmel: legacy: use proper ecc_shift Wolfram Sang
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2023-03-19 15:49 UTC (permalink / raw)
  To: barebox; +Cc: Wolfram Sang

Fixes "WARNING: Unsupported ECC algorithm!" on my USB-A9G20.

Fixes: b6bcd96de5 ("mtd: nand: Update to Linux-5.9")
Signed-off-by: Wolfram Sang <wsa@kernel.org>
---

Or maybe we should make HAMMING the default fallback in nand_base.c?

 drivers/mtd/nand/atmel/legacy.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/mtd/nand/atmel/legacy.c b/drivers/mtd/nand/atmel/legacy.c
index 44cd4d07e8..ea1fd64ad8 100644
--- a/drivers/mtd/nand/atmel/legacy.c
+++ b/drivers/mtd/nand/atmel/legacy.c
@@ -1246,6 +1246,10 @@ static int __init atmel_nand_probe(struct device *dev)
 		nand_chip->ecc.mode = NAND_ECC_HW;
 	}
 
+	if (pdata->ecc_mode == NAND_ECC_SOFT) {
+		nand_chip->ecc.algo = NAND_ECC_ALGO_HAMMING;
+	}
+
 	nand_chip->legacy.chip_delay = 40;		/* 40us command delay time */
 
 	if (IS_ENABLED(CONFIG_NAND_ECC_BCH) &&
-- 
2.35.1




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

* [PATCH 2/3] mtd: nand: atmel: legacy: use proper ecc_shift
  2023-03-19 15:49 [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Wolfram Sang
  2023-03-19 15:49 ` [PATCH 1/3] mtd: nand: atmel: legacy: add 'algo' to use Wolfram Sang
@ 2023-03-19 15:49 ` Wolfram Sang
  2023-03-19 15:49 ` [PATCH 3/3] mtd: nand: atmel: legacy: remove superfluous code Wolfram Sang
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2023-03-19 15:49 UTC (permalink / raw)
  To: barebox; +Cc: Wolfram Sang

The logic of the ternary operator is broken because '1 << x' is always
true even if 'x' is 0. Convert the logic to really use either the pdata
value or a sane default. Fixes "WARNING: Total number of ECC bytes
exceeded oobsize" on my USB-A9G20.

Fixes: babffbb193 ("mtd: atmel_nand: Add per board ECC setup")
Signed-off-by: Wolfram Sang <wsa@kernel.org>
---

The other option is to revert babffbb193. I don't see any user. The code
was obviously not enough tested as well.

 drivers/mtd/nand/atmel/legacy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/atmel/legacy.c b/drivers/mtd/nand/atmel/legacy.c
index ea1fd64ad8..184cf465e3 100644
--- a/drivers/mtd/nand/atmel/legacy.c
+++ b/drivers/mtd/nand/atmel/legacy.c
@@ -1240,7 +1240,7 @@ static int __init atmel_nand_probe(struct device *dev)
 
 	nand_chip->ecc.mode = pdata->ecc_mode;
 	nand_chip->ecc.strength = pdata->ecc_strength ? : 1;
-	nand_chip->ecc.size = 1 << pdata->ecc_size_shift ? : 512;
+	nand_chip->ecc.size = 1 << (pdata->ecc_size_shift ? : 9);
 
 	if (pdata->ecc_mode == NAND_ECC_HW) {
 		nand_chip->ecc.mode = NAND_ECC_HW;
-- 
2.35.1




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

* [PATCH 3/3] mtd: nand: atmel: legacy: remove superfluous code
  2023-03-19 15:49 [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Wolfram Sang
  2023-03-19 15:49 ` [PATCH 1/3] mtd: nand: atmel: legacy: add 'algo' to use Wolfram Sang
  2023-03-19 15:49 ` [PATCH 2/3] mtd: nand: atmel: legacy: use proper ecc_shift Wolfram Sang
@ 2023-03-19 15:49 ` Wolfram Sang
  2023-03-19 18:51 ` [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Sam Ravnborg
  2023-03-22  7:41 ` Sascha Hauer
  4 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2023-03-19 15:49 UTC (permalink / raw)
  To: barebox; +Cc: Wolfram Sang

54bccadddd always populates 'ecc_mode' but forgot to remove the
code which overwrote the previously hardcoded 'NAND_ECC_SOFT'
when needed. This is obsolete now.

Fixes: 54bccadddd ("mtd: atmel_nand: retrieve ecc_mode from pdata")
Signed-off-by: Wolfram Sang <wsa@kernel.org>
---
 drivers/mtd/nand/atmel/legacy.c | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/drivers/mtd/nand/atmel/legacy.c b/drivers/mtd/nand/atmel/legacy.c
index 184cf465e3..cf402549b8 100644
--- a/drivers/mtd/nand/atmel/legacy.c
+++ b/drivers/mtd/nand/atmel/legacy.c
@@ -1242,21 +1242,12 @@ static int __init atmel_nand_probe(struct device *dev)
 	nand_chip->ecc.strength = pdata->ecc_strength ? : 1;
 	nand_chip->ecc.size = 1 << (pdata->ecc_size_shift ? : 9);
 
-	if (pdata->ecc_mode == NAND_ECC_HW) {
-		nand_chip->ecc.mode = NAND_ECC_HW;
-	}
-
 	if (pdata->ecc_mode == NAND_ECC_SOFT) {
 		nand_chip->ecc.algo = NAND_ECC_ALGO_HAMMING;
 	}
 
 	nand_chip->legacy.chip_delay = 40;		/* 40us command delay time */
 
-	if (IS_ENABLED(CONFIG_NAND_ECC_BCH) &&
-			pdata->ecc_mode == NAND_ECC_SOFT_BCH) {
-		nand_chip->ecc.mode = NAND_ECC_SOFT_BCH;
-	}
-
 	if (host->board->bus_width_16) {	/* 16-bit bus width */
 		nand_chip->options |= NAND_BUSWIDTH_16;
 		nand_chip->legacy.read_buf = atmel_read_buf16;
-- 
2.35.1




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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-19 15:49 [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Wolfram Sang
                   ` (2 preceding siblings ...)
  2023-03-19 15:49 ` [PATCH 3/3] mtd: nand: atmel: legacy: remove superfluous code Wolfram Sang
@ 2023-03-19 18:51 ` Sam Ravnborg
  2023-03-19 21:28   ` Wolfram Sang
  2023-03-22  7:41 ` Sascha Hauer
  4 siblings, 1 reply; 17+ messages in thread
From: Sam Ravnborg @ 2023-03-19 18:51 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: barebox

Hi Wolfram.

On Sun, Mar 19, 2023 at 04:49:06PM +0100, Wolfram Sang wrote:
> While trying to unbrick my Calao USB-A9G20, barebox couldn't read the
> NAND BB tables unlike the binary-only barebox from 2013. The first two
> patches fix that. The third one is a cleanup.

It is only a few weeks ago I argued that there was no users of the older
at91sam* boards, and then you prove me wrong here.

I will try to remember that you may be able to test should someone
decide to move the barebox support for qil_a9g20 to DT and add PBL
support in the process.

	Sam



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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-19 18:51 ` [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Sam Ravnborg
@ 2023-03-19 21:28   ` Wolfram Sang
  2023-03-21  8:58     ` Sascha Hauer
  0 siblings, 1 reply; 17+ messages in thread
From: Wolfram Sang @ 2023-03-19 21:28 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: barebox

[-- Attachment #1: Type: text/plain, Size: 620 bytes --]

Hi Sam,

> It is only a few weeks ago I argued that there was no users of the older
> at91sam* boards, and then you prove me wrong here.

At your service ;)

> I will try to remember that you may be able to test should someone
> decide to move the barebox support for qil_a9g20 to DT and add PBL
> support in the process.

I am still new to at91 and barebox, but AFAICS the PBL support is only
for MCI currently? I have an USB-A9G20-C01 and this one does not have SD
exposed. The later version A9G20-LPW has it, but I don't own such a
device, sadly. I really like the Calao USB form factor.

Happy hacking,

   Wolfram


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-19 21:28   ` Wolfram Sang
@ 2023-03-21  8:58     ` Sascha Hauer
  2023-03-21  9:44       ` Alexander Dahl
                         ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Sascha Hauer @ 2023-03-21  8:58 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: Sam Ravnborg, barebox

Hi Wolfram,

Nice to hear from you here ;)

On Sun, Mar 19, 2023 at 10:28:07PM +0100, Wolfram Sang wrote:
> Hi Sam,
> 
> > It is only a few weeks ago I argued that there was no users of the older
> > at91sam* boards, and then you prove me wrong here.
> 
> At your service ;)
> 
> > I will try to remember that you may be able to test should someone
> > decide to move the barebox support for qil_a9g20 to DT and add PBL
> > support in the process.
> 
> I am still new to at91 and barebox, but AFAICS the PBL support is only
> for MCI currently?

As of 4e410f3e68280 PBL is always used on AT91.

I have no idea how the SDRAM setup is done on the USB-A9G20. There seems
to be SDRAM setup code for the USB-A9263, but not for the USB-A9G20. Is
there some AT91Bootstrap required?

Anyway, what's really missing is DT support. I scribbled a patch to get
you started in case you are motivated. Basically it's: Compile in the
device tree, throw away all the device registration from the board code,
see where it gets you and fix the fallout ;)

Regards,
 Sascha


---------------------------8<---------------------------

>From 9aa1026fd4a713e958e83fa3cad6875b8ce14474 Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
Date: Tue, 21 Mar 2023 09:45:41 +0100
Subject: [PATCH] usb-a9g20-dt-wip

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/boards/usb-a926x/init.c              | 416 +-----------------
 .../arm/boards/usb-a926x/usb_a9260_lowlevel.c |   8 +-
 .../arm/boards/usb-a926x/usb_a9263_lowlevel.c |   4 +-
 arch/arm/configs/usb_a9g20_defconfig          |  11 +-
 arch/arm/dts/Makefile                         |   3 +
 arch/arm/dts/usb_a9260.dts                    |   1 +
 arch/arm/dts/usb_a9263.dts                    |   1 +
 arch/arm/dts/usb_a9g20.dts                    |   1 +
 8 files changed, 20 insertions(+), 425 deletions(-)
 create mode 100644 arch/arm/dts/usb_a9260.dts
 create mode 100644 arch/arm/dts/usb_a9263.dts
 create mode 100644 arch/arm/dts/usb_a9g20.dts

diff --git a/arch/arm/boards/usb-a926x/init.c b/arch/arm/boards/usb-a926x/init.c
index f91a6b1454..7735edf8aa 100644
--- a/arch/arm/boards/usb-a926x/init.c
+++ b/arch/arm/boards/usb-a926x/init.c
@@ -5,422 +5,8 @@
 #include <net.h>
 #include <init.h>
 #include <environment.h>
-#include <asm/armlinux.h>
-#include <generated/mach-types.h>
-#include <fs.h>
-#include <fcntl.h>
-#include <io.h>
-#include <envfs.h>
-#include <mach/at91/hardware.h>
-#include <mach/at91/at91sam926x.h>
-#include <nand.h>
-#include <linux/sizes.h>
-#include <linux/mtd/nand.h>
-#include <linux/mtd/rawnand.h>
-#include <linux/clk.h>
-#include <mach/at91/board.h>
-#include <mach/at91/at91sam9_smc.h>
-#include <mach/at91/at91sam9_sdramc.h>
-#include <gpio.h>
-#include <led.h>
-#include <mach/at91/iomux.h>
-#include <mach/at91/at91_pmc.h>
-#include <mach/at91/at91_rstc.h>
-#include <gpio_keys.h>
-#include <readkey.h>
-#include <spi/spi.h>
 #include <input/input.h>
-
-static void usb_a9260_set_board_type(void)
-{
-	if (machine_is_usb_a9g20())
-		armlinux_set_architecture(MACH_TYPE_USB_A9G20);
-	else if (machine_is_usb_a9263())
-		armlinux_set_architecture(MACH_TYPE_USB_A9263);
-	else
-		armlinux_set_architecture(MACH_TYPE_USB_A9260);
-}
-
-#if defined(CONFIG_NAND_ATMEL)
-static struct atmel_nand_data nand_pdata = {
-	.ale		= 21,
-	.cle		= 22,
-	.det_pin	= -EINVAL,
-	.rdy_pin	= AT91_PIN_PC13,
-	.enable_pin	= AT91_PIN_PC14,
-	.ecc_mode	= NAND_ECC_SOFT,
-	.on_flash_bbt	= 1,
-};
-
-static struct sam9_smc_config usb_a9260_nand_smc_config = {
-	.ncs_read_setup		= 0,
-	.nrd_setup		= 1,
-	.ncs_write_setup	= 0,
-	.nwe_setup		= 1,
-
-	.ncs_read_pulse		= 3,
-	.nrd_pulse		= 3,
-	.ncs_write_pulse	= 3,
-	.nwe_pulse		= 3,
-
-	.read_cycle		= 5,
-	.write_cycle		= 5,
-
-	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
-	.tdf_cycles		= 2,
-};
-
-static struct sam9_smc_config usb_a9g20_nand_smc_config = {
-	.ncs_read_setup		= 0,
-	.nrd_setup		= 2,
-	.ncs_write_setup	= 0,
-	.nwe_setup		= 2,
-
-	.ncs_read_pulse		= 4,
-	.nrd_pulse		= 4,
-	.ncs_write_pulse	= 4,
-	.nwe_pulse		= 4,
-
-	.read_cycle		= 7,
-	.write_cycle		= 7,
-
-	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
-	.tdf_cycles		= 3,
-};
-
-static void usb_a9260_add_device_nand(void)
-{
-	/* configure chip-select 3 (NAND) */
-	if (machine_is_usb_a9g20())
-		sam9_smc_configure(0, 3, &usb_a9g20_nand_smc_config);
-	else
-		sam9_smc_configure(0, 3, &usb_a9260_nand_smc_config);
-
-	if (machine_is_usb_a9263()) {
-		nand_pdata.rdy_pin	= AT91_PIN_PA22;
-		nand_pdata.enable_pin	= AT91_PIN_PD15;
-	}
-
-	at91_add_device_nand(&nand_pdata);
-}
-#else
-static void usb_a9260_add_device_nand(void) {}
-#endif
-
-#if defined(CONFIG_DRIVER_NET_MACB)
-static struct macb_platform_data macb_pdata = {
-	.phy_interface	= PHY_INTERFACE_MODE_RMII,
-	.phy_addr	= -1,
-};
-
-static void usb_a9260_phy_reset(void)
-{
-	at91_set_gpio_input(AT91_PIN_PA14, 0);
-	at91_set_gpio_input(AT91_PIN_PA15, 0);
-	at91_set_gpio_input(AT91_PIN_PA17, 0);
-	at91_set_gpio_input(AT91_PIN_PA25, 0);
-	at91_set_gpio_input(AT91_PIN_PA26, 0);
-	at91_set_gpio_input(AT91_PIN_PA28, 0);
-
-	/* same address for the different supported SoCs */
-	at91sam_phy_reset(IOMEM(AT91SAM926X_BASE_RSTC));
-}
-
-static void usb_a9260_add_device_eth(void)
-{
-	usb_a9260_phy_reset();
-	at91_add_device_eth(0, &macb_pdata);
-}
-#else
-static void usb_a9260_add_device_eth(void) {}
-#endif
-
-#if defined(CONFIG_DRIVER_SPI_ATMEL)
-static const struct spi_board_info usb_a9263_spi_devices[] = {
-	{
-		.name		= "mtd_dataflash",
-		.chip_select	= 0,
-		.max_speed_hz	= 15 * 1000 * 1000,
-		.bus_num	= 0,
-	}
-};
-
-static const struct spi_board_info usb_a9g20_spi_devices[] = {
-	{
-		.name		= "spi_mci",
-		.chip_select	= 0,
-		.max_speed_hz	= 25 * 1000 * 1000,
-		.bus_num	= 1,
-	}
-};
-
-static unsigned spi0_standard_cs_a9263[] = { AT91_PIN_PA5 };
-static struct at91_spi_platform_data spi_a9263_pdata = {
-	.chipselect = spi0_standard_cs_a9263,
-	.num_chipselect = ARRAY_SIZE(spi0_standard_cs_a9263),
-};
-
-static unsigned spi0_standard_cs_a9g20[] = { AT91_PIN_PB3 };
-static struct at91_spi_platform_data spi_a9g20_pdata = {
-	.chipselect = spi0_standard_cs_a9g20,
-	.num_chipselect = ARRAY_SIZE(spi0_standard_cs_a9g20),
-};
-
-static void usb_a9260_add_spi(void)
-{
-	if (machine_is_usb_a9263()) {
-		spi_register_board_info(usb_a9263_spi_devices,
-				ARRAY_SIZE(usb_a9263_spi_devices));
-		at91_add_device_spi(0, &spi_a9263_pdata);
-	} else if (machine_is_usb_a9g20() && at91sam9260_is_low_power_sdram()) {
-		spi_register_board_info(usb_a9g20_spi_devices,
-				ARRAY_SIZE(usb_a9g20_spi_devices));
-		at91_add_device_spi(1, &spi_a9g20_pdata);
-	}
-}
-#else
-static void usb_a9260_add_spi(void) {}
-#endif
-
-#if defined(CONFIG_MCI_ATMEL)
-static struct atmel_mci_platform_data __initdata usb_a9260_mci_data = {
-	.bus_width	= 4,
-	.detect_pin     = -EINVAL,
-	.wp_pin		= -EINVAL,
-};
-
-static void usb_a9260_add_device_mci(void)
-{
-	at91_add_device_mci(0, &usb_a9260_mci_data);
-}
-#else
-static void usb_a9260_add_device_mci(void) {}
-#endif
-
-#if defined(CONFIG_USB_OHCI)
-static struct at91_usbh_data ek_usbh_data = {
-	.ports		= 2,
-	.vbus_pin	= { -EINVAL, -EINVAL },
-};
-
-static void usb_a9260_add_device_usb(void)
-{
-	at91_add_device_usbh_ohci(&ek_usbh_data);
-}
-#else
-static void usb_a9260_add_device_usb(void) {}
-#endif
-
-#ifdef CONFIG_USB_GADGET_DRIVER_AT91
-/*
- * USB Device port
- */
-static struct at91_udc_data __initdata ek_udc_data = {
-	.vbus_pin	= AT91_PIN_PB11,
-	.pullup_pin	= -EINVAL,		/* pull-up driven by UDC */
-};
-
-static void __init ek_add_device_udc(void)
-{
-	if (machine_is_usb_a9260() || machine_is_usb_a9g20())
-		ek_udc_data.vbus_pin = AT91_PIN_PC5;
-
-	at91_add_device_udc(&ek_udc_data);
-}
-#else
-static void __init ek_add_device_udc(void) {}
-#endif
-
-#ifdef CONFIG_LED_GPIO
-struct gpio_led led = {
-	.gpio = AT91_PIN_PB21,
-	.led = {
-		.name = "user_led",
-	},
-};
-
-static void __init ek_add_led(void)
-{
-	if (machine_is_usb_a9263())
-		led.active_low = 1;
-
-	at91_set_gpio_output(led.gpio, led.active_low);
-	led_gpio_register(&led);
-}
-#else
-static void ek_add_led(void) {}
-#endif
-
-static int usb_a9260_mem_init(void)
-{
-	at91_add_device_sdram(0);
-
-	return 0;
-}
-mem_initcall(usb_a9260_mem_init);
-
-static void __init ek_add_device_button(void)
-{
-	at91_set_GPIO_periph(AT91_PIN_PB10, 1);	/* user push button, pull up enabled */
-	at91_set_deglitch(AT91_PIN_PB10, 1);
-
-	export_env_ull("dfu_button", AT91_PIN_PB10);
-}
-
-#ifdef CONFIG_CALAO_DAB_MMX
-struct gpio_led dab_mmx_leds[] = {
-	{
-		.gpio = AT91_PIN_PB20,
-		.led = {
-			.name = "user_led1",
-		},
-	}, {
-		.gpio = AT91_PIN_PB21,
-		.led = {
-			.name = "user_led2",
-		},
-	}, {
-		.gpio = AT91_PIN_PB22,
-		.led = {
-			.name = "user_led3",
-		},
-	}, {
-		.gpio = AT91_PIN_PB23,
-		.led = {
-			.name = "user_led4",
-		},
-	}, {
-		.gpio = AT91_PIN_PB24,
-		.led = {
-			.name = "red",
-		},
-	}, {
-		.gpio = AT91_PIN_PB30,
-		.led = {
-			.name = "orange",
-		},
-	}, {
-		.gpio = AT91_PIN_PB31,
-		.led = {
-			.name = "green",
-		},
-	},
-};
-
-#ifdef CONFIG_KEYBOARD_GPIO
-struct gpio_keys_button keys[] = {
-	{
-		.code = KEY_UP,
-		.gpio = AT91_PIN_PB25,
-	}, {
-		.code = KEY_HOME,
-		.gpio = AT91_PIN_PB13,
-	}, {
-		.code = KEY_DOWN,
-		.gpio = AT91_PIN_PA26,
-	}, {
-		.code = KEY_ENTER,
-		.gpio = AT91_PIN_PC9,
-	},
-};
-
-struct gpio_keys_platform_data gk_pdata = {
-	.buttons = keys,
-	.nbuttons = ARRAY_SIZE(keys),
-};
-
-static void usb_a9260_keyboard_device_dab_mmx(void)
-{
-	int i;
-
-	for (i = 0; i < gk_pdata.nbuttons; i++) {
-		/* user push button, pull up enabled */
-		keys[i].active_low = 1;
-		at91_set_GPIO_periph(keys[i].gpio, keys[i].active_low);
-		at91_set_deglitch(keys[i].gpio, 1);
-	}
-
-	add_gpio_keys_device(DEVICE_ID_DYNAMIC, &gk_pdata);
-}
-#else
-static void usb_a9260_keyboard_device_dab_mmx(void) {}
-#endif
-
-static void usb_a9260_device_dab_mmx(void)
-{
-	int i;
-
-	usb_a9260_keyboard_device_dab_mmx();
-
-	for (i = 0; i < ARRAY_SIZE(dab_mmx_leds); i++) {
-		dab_mmx_leds[i].active_low = 1;
-		at91_set_gpio_output(dab_mmx_leds[i].gpio, dab_mmx_leds[i].active_low);
-		led_gpio_register(&dab_mmx_leds[i]);
-	}
-}
-#else
-static void usb_a9260_device_dab_mmx(void) {}
-#endif
-
-static int usb_a9260_devices_init(void)
-{
-	usb_a9260_add_device_nand();
-	usb_a9260_add_device_mci();
-	usb_a9260_add_device_eth();
-	usb_a9260_add_spi();
-	usb_a9260_add_device_usb();
-	ek_add_device_udc();
-	ek_add_led();
-	ek_add_device_button();
-	usb_a9260_device_dab_mmx();
-
-	usb_a9260_set_board_type();
-
-	devfs_add_partition("nand0", 0x00000, SZ_128K, DEVFS_PARTITION_FIXED, "at91bootstrap_raw");
-	dev_add_bb_dev("at91bootstrap_raw", "at91bootstrap");
-	devfs_add_partition("nand0", SZ_128K, SZ_256K, DEVFS_PARTITION_FIXED, "self_raw");
-	dev_add_bb_dev("self_raw", "self0");
-	devfs_add_partition("nand0", SZ_256K + SZ_128K, SZ_128K, DEVFS_PARTITION_FIXED, "env_raw");
-	dev_add_bb_dev("env_raw", "env0");
-	devfs_add_partition("nand0", SZ_512K, SZ_128K, DEVFS_PARTITION_FIXED, "env_raw1");
-	dev_add_bb_dev("env_raw1", "env1");
-
-	if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC))
-		defaultenv_append_directory(defaultenv_usb_a926x);
-
-	return 0;
-}
-device_initcall(usb_a9260_devices_init);
-
-#ifndef CONFIG_CONSOLE_NONE
-static int usb_a9260_console_init(void)
-{
-	struct device *dev;
-
-	if (machine_is_usb_a9260()) {
-		barebox_set_model("Calao USB-A9260");
-		barebox_set_hostname("usb-a9260");
-	} else if (machine_is_usb_a9g20()) {
-		barebox_set_model("Calao USB-A9G20");
-		barebox_set_hostname("usb-a9g20");
-	} else {
-		barebox_set_model("Calao USB-A9263");
-		barebox_set_hostname("usb-a9263");
-	}
-
-	at91_register_uart(0, 0);
-
-	if (IS_ENABLED(CONFIG_CALAO_DAB_MMX)) {
-		at91_register_uart(2, 0);
-
-		dev = at91_register_uart(4, 0);
-		dev_set_param(dev, "active", "");
-	}
-
-	return 0;
-}
-console_initcall(usb_a9260_console_init);
-#endif
+#include <mach/at91/board.h>
 
 static int usb_a9260_main_clock(void)
 {
diff --git a/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c b/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c
index 66753669d6..dd521f2131 100644
--- a/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c
+++ b/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c
@@ -12,6 +12,8 @@
 #include <mach/at91/at91sam9260.h>
 #include <mach/at91/hardware.h>
 
+extern char __dtb_usb_a9260_start[];
+
 AT91_ENTRY_FUNCTION(start_usb_a9260, r0, r1, r2)
 {
 	arm_cpu_lowlevel_init();
@@ -20,9 +22,11 @@ AT91_ENTRY_FUNCTION(start_usb_a9260, r0, r1, r2)
 
 	barebox_arm_entry(AT91_CHIPSELECT_1,
 			  at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)),
-			  NULL);
+			  __dtb_usb_a9260_start);
 }
 
+extern char __dtb_usb_a9g20_start[];
+
 AT91_ENTRY_FUNCTION(start_usb_a9g20, r0, r1, r2)
 {
 	arm_cpu_lowlevel_init();
@@ -31,5 +35,5 @@ AT91_ENTRY_FUNCTION(start_usb_a9g20, r0, r1, r2)
 
 	barebox_arm_entry(AT91_CHIPSELECT_1,
 			  at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)),
-			  NULL);
+			  __dtb_usb_a9g20_start);
 }
diff --git a/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c b/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c
index eda534c68e..2adf80dfb5 100644
--- a/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c
+++ b/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c
@@ -105,6 +105,8 @@ static void __bare_init usb_a9263_board_config(struct at91sam926x_board_cfg *cfg
 		AT91_RSTC_RSTTYP_WATCHDOG;
 }
 
+extern char __dtb_usb_a9263_start[];
+
 static void __bare_init usb_a9263_init(bool has_mem_128m)
 {
 	struct at91sam926x_board_cfg cfg;
@@ -118,7 +120,7 @@ static void __bare_init usb_a9263_init(bool has_mem_128m)
 	at91sam9263_board_init(&cfg);
 
 	barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc),
-	                  NULL);
+	                  __dtb_usb_a9263_start);
 }
 
 AT91_ENTRY_FUNCTION(start_usb_a9263, r0, r1, r2)
diff --git a/arch/arm/configs/usb_a9g20_defconfig b/arch/arm/configs/usb_a9g20_defconfig
index cca8ee6097..93566bac15 100644
--- a/arch/arm/configs/usb_a9g20_defconfig
+++ b/arch/arm/configs/usb_a9g20_defconfig
@@ -1,15 +1,13 @@
 CONFIG_ARCH_AT91=y
 CONFIG_ARCH_AT91SAM9G20=y
 CONFIG_MACH_USB_A9G20=y
-CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
 CONFIG_AEABI=y
 CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
-CONFIG_PBL_IMAGE=y
 CONFIG_MMU=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
 CONFIG_EXPERIMENTAL=y
 CONFIG_MALLOC_TLSF=y
 CONFIG_PROMPT="USB-9G20:"
-CONFIG_GLOB=y
 CONFIG_PROMPT_HUSH_PS2="y"
 CONFIG_HUSH_FANCY_PROMPT=y
 CONFIG_CMDLINE_EDITING=y
@@ -20,7 +18,7 @@ CONFIG_BOOTM_VERBOSE=y
 CONFIG_BOOTM_INITRD=y
 CONFIG_BOOTM_OFTREE=y
 CONFIG_BOOTM_OFTREE_UIMAGE=y
-CONFIG_CONSOLE_ACTIVATE_ALL=y
+CONFIG_CONSOLE_ACTIVATE_NONE=y
 CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y
 # CONFIG_CMD_ARM_CPUINFO is not set
 CONFIG_LONGHELP=y
@@ -58,14 +56,13 @@ CONFIG_NET=y
 CONFIG_NET_NFS=y
 CONFIG_NET_NETCONSOLE=y
 CONFIG_NET_RESOLV=y
+CONFIG_OFDEVICE=y
+CONFIG_OF_BAREBOX_DRIVERS=y
 CONFIG_DRIVER_NET_MACB=y
 CONFIG_DRIVER_SPI_ATMEL=y
 CONFIG_MTD=y
 # CONFIG_MTD_OOB_DEVICE is not set
 CONFIG_NAND=y
-# CONFIG_NAND_ECC_HW is not set
-# CONFIG_NAND_ECC_HW_SYNDROME is not set
-# CONFIG_NAND_ECC_HW_NONE is not set
 CONFIG_NAND_ATMEL=y
 CONFIG_USB_GADGET=y
 CONFIG_USB_GADGET_DFU=y
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 0a7cceb461..66432ec7ac 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -171,6 +171,9 @@ lwl-$(CONFIG_MACH_WARP7) += imx7s-warp.dtb.o
 lwl-$(CONFIG_MACH_VF610_TWR) += vf610-twr.dtb.o
 lwl-$(CONFIG_MACH_WEBASTO_CCBV2) += imx6ul-webasto-ccbv2.dtb.o
 lwl-$(CONFIG_MACH_WEBASTO_CCBV2) += imx6ul-webasto-marvel.dtb.o
+lwl-$(CONFIG_MACH_USB_A9G20) += usb_a9g20.dtb.o
+lwl-$(CONFIG_MACH_USB_A9260) += usb_a9260.dtb.o
+lwl-$(CONFIG_MACH_USB_A9263) += usb_a9263.dtb.o
 lwl-$(CONFIG_MACH_ZII_RDU1) +=	\
 	imx51-zii-rdu1.dtb.o		\
 	imx51-zii-scu2-mezz.dtb.o	\
diff --git a/arch/arm/dts/usb_a9260.dts b/arch/arm/dts/usb_a9260.dts
new file mode 100644
index 0000000000..c034bb6544
--- /dev/null
+++ b/arch/arm/dts/usb_a9260.dts
@@ -0,0 +1 @@
+#include <arm/usb_a9260.dts>
diff --git a/arch/arm/dts/usb_a9263.dts b/arch/arm/dts/usb_a9263.dts
new file mode 100644
index 0000000000..5455a6e916
--- /dev/null
+++ b/arch/arm/dts/usb_a9263.dts
@@ -0,0 +1 @@
+#include <arm/usb_a9263.dts>
diff --git a/arch/arm/dts/usb_a9g20.dts b/arch/arm/dts/usb_a9g20.dts
new file mode 100644
index 0000000000..2989f423d8
--- /dev/null
+++ b/arch/arm/dts/usb_a9g20.dts
@@ -0,0 +1 @@
+#include <arm/usb_a9g20.dts>
-- 
2.30.2


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21  8:58     ` Sascha Hauer
@ 2023-03-21  9:44       ` Alexander Dahl
  2023-03-21 16:48         ` Sam Ravnborg
  2023-03-21 17:20       ` Wolfram Sang
  2023-04-27 17:26       ` Wolfram Sang
  2 siblings, 1 reply; 17+ messages in thread
From: Alexander Dahl @ 2023-03-21  9:44 UTC (permalink / raw)
  To: barebox

Hello Sascha,

Am Tue, Mar 21, 2023 at 09:58:48AM +0100 schrieb Sascha Hauer:
> Hi Wolfram,
> 
> Nice to hear from you here ;)
> 
> On Sun, Mar 19, 2023 at 10:28:07PM +0100, Wolfram Sang wrote:
> > Hi Sam,
> > 
> > > It is only a few weeks ago I argued that there was no users of the older
> > > at91sam* boards, and then you prove me wrong here.
> > 
> > At your service ;)
> > 
> > > I will try to remember that you may be able to test should someone
> > > decide to move the barebox support for qil_a9g20 to DT and add PBL
> > > support in the process.
> > 
> > I am still new to at91 and barebox, but AFAICS the PBL support is only
> > for MCI currently?
> 
> As of 4e410f3e68280 PBL is always used on AT91.
> 
> I have no idea how the SDRAM setup is done on the USB-A9G20. There seems
> to be SDRAM setup code for the USB-A9263, but not for the USB-A9G20. Is
> there some AT91Bootstrap required?

I can not speak for this particular board, but for others with the
same SoC (AT91SAM9G20).  The vendor approach is to setup the SDRAM
(and maybe more) in at91bootstrap, however those old SoCs are not
supported in recent version 4.x of that anymore, 3.x should work, I
never tried that for sam9g20 (we still use 1.x for those SoCs).
at91bootstrap then usually loads U-Boot from flash to SDRAM and starts
U-Boot.

You can do the same init in U-Boot SPL as well without the "real"
at91bootstrap, I think I saw that for other boards with similar SoCs.
And from what I saw here, barebox has the concept of multiple stages
as well, right?  So SDRAM must be initialized there in the very first
stage after ROM code running from (tiny) internal SRAM, equivalent to
what at91bootstrap does, before relocating to SDRAM.  There's no magic
thing the ROM code can do for you on that platform.

HTH & Greets
Alex

> 
> Anyway, what's really missing is DT support. I scribbled a patch to get
> you started in case you are motivated. Basically it's: Compile in the
> device tree, throw away all the device registration from the board code,
> see where it gets you and fix the fallout ;)
> 
> Regards,
>  Sascha
> 
> 
> ---------------------------8<---------------------------
> 
> From 9aa1026fd4a713e958e83fa3cad6875b8ce14474 Mon Sep 17 00:00:00 2001
> From: Sascha Hauer <s.hauer@pengutronix.de>
> Date: Tue, 21 Mar 2023 09:45:41 +0100
> Subject: [PATCH] usb-a9g20-dt-wip
> 
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
>  arch/arm/boards/usb-a926x/init.c              | 416 +-----------------
>  .../arm/boards/usb-a926x/usb_a9260_lowlevel.c |   8 +-
>  .../arm/boards/usb-a926x/usb_a9263_lowlevel.c |   4 +-
>  arch/arm/configs/usb_a9g20_defconfig          |  11 +-
>  arch/arm/dts/Makefile                         |   3 +
>  arch/arm/dts/usb_a9260.dts                    |   1 +
>  arch/arm/dts/usb_a9263.dts                    |   1 +
>  arch/arm/dts/usb_a9g20.dts                    |   1 +
>  8 files changed, 20 insertions(+), 425 deletions(-)
>  create mode 100644 arch/arm/dts/usb_a9260.dts
>  create mode 100644 arch/arm/dts/usb_a9263.dts
>  create mode 100644 arch/arm/dts/usb_a9g20.dts
> 
> diff --git a/arch/arm/boards/usb-a926x/init.c b/arch/arm/boards/usb-a926x/init.c
> index f91a6b1454..7735edf8aa 100644
> --- a/arch/arm/boards/usb-a926x/init.c
> +++ b/arch/arm/boards/usb-a926x/init.c
> @@ -5,422 +5,8 @@
>  #include <net.h>
>  #include <init.h>
>  #include <environment.h>
> -#include <asm/armlinux.h>
> -#include <generated/mach-types.h>
> -#include <fs.h>
> -#include <fcntl.h>
> -#include <io.h>
> -#include <envfs.h>
> -#include <mach/at91/hardware.h>
> -#include <mach/at91/at91sam926x.h>
> -#include <nand.h>
> -#include <linux/sizes.h>
> -#include <linux/mtd/nand.h>
> -#include <linux/mtd/rawnand.h>
> -#include <linux/clk.h>
> -#include <mach/at91/board.h>
> -#include <mach/at91/at91sam9_smc.h>
> -#include <mach/at91/at91sam9_sdramc.h>
> -#include <gpio.h>
> -#include <led.h>
> -#include <mach/at91/iomux.h>
> -#include <mach/at91/at91_pmc.h>
> -#include <mach/at91/at91_rstc.h>
> -#include <gpio_keys.h>
> -#include <readkey.h>
> -#include <spi/spi.h>
>  #include <input/input.h>
> -
> -static void usb_a9260_set_board_type(void)
> -{
> -	if (machine_is_usb_a9g20())
> -		armlinux_set_architecture(MACH_TYPE_USB_A9G20);
> -	else if (machine_is_usb_a9263())
> -		armlinux_set_architecture(MACH_TYPE_USB_A9263);
> -	else
> -		armlinux_set_architecture(MACH_TYPE_USB_A9260);
> -}
> -
> -#if defined(CONFIG_NAND_ATMEL)
> -static struct atmel_nand_data nand_pdata = {
> -	.ale		= 21,
> -	.cle		= 22,
> -	.det_pin	= -EINVAL,
> -	.rdy_pin	= AT91_PIN_PC13,
> -	.enable_pin	= AT91_PIN_PC14,
> -	.ecc_mode	= NAND_ECC_SOFT,
> -	.on_flash_bbt	= 1,
> -};
> -
> -static struct sam9_smc_config usb_a9260_nand_smc_config = {
> -	.ncs_read_setup		= 0,
> -	.nrd_setup		= 1,
> -	.ncs_write_setup	= 0,
> -	.nwe_setup		= 1,
> -
> -	.ncs_read_pulse		= 3,
> -	.nrd_pulse		= 3,
> -	.ncs_write_pulse	= 3,
> -	.nwe_pulse		= 3,
> -
> -	.read_cycle		= 5,
> -	.write_cycle		= 5,
> -
> -	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
> -	.tdf_cycles		= 2,
> -};
> -
> -static struct sam9_smc_config usb_a9g20_nand_smc_config = {
> -	.ncs_read_setup		= 0,
> -	.nrd_setup		= 2,
> -	.ncs_write_setup	= 0,
> -	.nwe_setup		= 2,
> -
> -	.ncs_read_pulse		= 4,
> -	.nrd_pulse		= 4,
> -	.ncs_write_pulse	= 4,
> -	.nwe_pulse		= 4,
> -
> -	.read_cycle		= 7,
> -	.write_cycle		= 7,
> -
> -	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
> -	.tdf_cycles		= 3,
> -};
> -
> -static void usb_a9260_add_device_nand(void)
> -{
> -	/* configure chip-select 3 (NAND) */
> -	if (machine_is_usb_a9g20())
> -		sam9_smc_configure(0, 3, &usb_a9g20_nand_smc_config);
> -	else
> -		sam9_smc_configure(0, 3, &usb_a9260_nand_smc_config);
> -
> -	if (machine_is_usb_a9263()) {
> -		nand_pdata.rdy_pin	= AT91_PIN_PA22;
> -		nand_pdata.enable_pin	= AT91_PIN_PD15;
> -	}
> -
> -	at91_add_device_nand(&nand_pdata);
> -}
> -#else
> -static void usb_a9260_add_device_nand(void) {}
> -#endif
> -
> -#if defined(CONFIG_DRIVER_NET_MACB)
> -static struct macb_platform_data macb_pdata = {
> -	.phy_interface	= PHY_INTERFACE_MODE_RMII,
> -	.phy_addr	= -1,
> -};
> -
> -static void usb_a9260_phy_reset(void)
> -{
> -	at91_set_gpio_input(AT91_PIN_PA14, 0);
> -	at91_set_gpio_input(AT91_PIN_PA15, 0);
> -	at91_set_gpio_input(AT91_PIN_PA17, 0);
> -	at91_set_gpio_input(AT91_PIN_PA25, 0);
> -	at91_set_gpio_input(AT91_PIN_PA26, 0);
> -	at91_set_gpio_input(AT91_PIN_PA28, 0);
> -
> -	/* same address for the different supported SoCs */
> -	at91sam_phy_reset(IOMEM(AT91SAM926X_BASE_RSTC));
> -}
> -
> -static void usb_a9260_add_device_eth(void)
> -{
> -	usb_a9260_phy_reset();
> -	at91_add_device_eth(0, &macb_pdata);
> -}
> -#else
> -static void usb_a9260_add_device_eth(void) {}
> -#endif
> -
> -#if defined(CONFIG_DRIVER_SPI_ATMEL)
> -static const struct spi_board_info usb_a9263_spi_devices[] = {
> -	{
> -		.name		= "mtd_dataflash",
> -		.chip_select	= 0,
> -		.max_speed_hz	= 15 * 1000 * 1000,
> -		.bus_num	= 0,
> -	}
> -};
> -
> -static const struct spi_board_info usb_a9g20_spi_devices[] = {
> -	{
> -		.name		= "spi_mci",
> -		.chip_select	= 0,
> -		.max_speed_hz	= 25 * 1000 * 1000,
> -		.bus_num	= 1,
> -	}
> -};
> -
> -static unsigned spi0_standard_cs_a9263[] = { AT91_PIN_PA5 };
> -static struct at91_spi_platform_data spi_a9263_pdata = {
> -	.chipselect = spi0_standard_cs_a9263,
> -	.num_chipselect = ARRAY_SIZE(spi0_standard_cs_a9263),
> -};
> -
> -static unsigned spi0_standard_cs_a9g20[] = { AT91_PIN_PB3 };
> -static struct at91_spi_platform_data spi_a9g20_pdata = {
> -	.chipselect = spi0_standard_cs_a9g20,
> -	.num_chipselect = ARRAY_SIZE(spi0_standard_cs_a9g20),
> -};
> -
> -static void usb_a9260_add_spi(void)
> -{
> -	if (machine_is_usb_a9263()) {
> -		spi_register_board_info(usb_a9263_spi_devices,
> -				ARRAY_SIZE(usb_a9263_spi_devices));
> -		at91_add_device_spi(0, &spi_a9263_pdata);
> -	} else if (machine_is_usb_a9g20() && at91sam9260_is_low_power_sdram()) {
> -		spi_register_board_info(usb_a9g20_spi_devices,
> -				ARRAY_SIZE(usb_a9g20_spi_devices));
> -		at91_add_device_spi(1, &spi_a9g20_pdata);
> -	}
> -}
> -#else
> -static void usb_a9260_add_spi(void) {}
> -#endif
> -
> -#if defined(CONFIG_MCI_ATMEL)
> -static struct atmel_mci_platform_data __initdata usb_a9260_mci_data = {
> -	.bus_width	= 4,
> -	.detect_pin     = -EINVAL,
> -	.wp_pin		= -EINVAL,
> -};
> -
> -static void usb_a9260_add_device_mci(void)
> -{
> -	at91_add_device_mci(0, &usb_a9260_mci_data);
> -}
> -#else
> -static void usb_a9260_add_device_mci(void) {}
> -#endif
> -
> -#if defined(CONFIG_USB_OHCI)
> -static struct at91_usbh_data ek_usbh_data = {
> -	.ports		= 2,
> -	.vbus_pin	= { -EINVAL, -EINVAL },
> -};
> -
> -static void usb_a9260_add_device_usb(void)
> -{
> -	at91_add_device_usbh_ohci(&ek_usbh_data);
> -}
> -#else
> -static void usb_a9260_add_device_usb(void) {}
> -#endif
> -
> -#ifdef CONFIG_USB_GADGET_DRIVER_AT91
> -/*
> - * USB Device port
> - */
> -static struct at91_udc_data __initdata ek_udc_data = {
> -	.vbus_pin	= AT91_PIN_PB11,
> -	.pullup_pin	= -EINVAL,		/* pull-up driven by UDC */
> -};
> -
> -static void __init ek_add_device_udc(void)
> -{
> -	if (machine_is_usb_a9260() || machine_is_usb_a9g20())
> -		ek_udc_data.vbus_pin = AT91_PIN_PC5;
> -
> -	at91_add_device_udc(&ek_udc_data);
> -}
> -#else
> -static void __init ek_add_device_udc(void) {}
> -#endif
> -
> -#ifdef CONFIG_LED_GPIO
> -struct gpio_led led = {
> -	.gpio = AT91_PIN_PB21,
> -	.led = {
> -		.name = "user_led",
> -	},
> -};
> -
> -static void __init ek_add_led(void)
> -{
> -	if (machine_is_usb_a9263())
> -		led.active_low = 1;
> -
> -	at91_set_gpio_output(led.gpio, led.active_low);
> -	led_gpio_register(&led);
> -}
> -#else
> -static void ek_add_led(void) {}
> -#endif
> -
> -static int usb_a9260_mem_init(void)
> -{
> -	at91_add_device_sdram(0);
> -
> -	return 0;
> -}
> -mem_initcall(usb_a9260_mem_init);
> -
> -static void __init ek_add_device_button(void)
> -{
> -	at91_set_GPIO_periph(AT91_PIN_PB10, 1);	/* user push button, pull up enabled */
> -	at91_set_deglitch(AT91_PIN_PB10, 1);
> -
> -	export_env_ull("dfu_button", AT91_PIN_PB10);
> -}
> -
> -#ifdef CONFIG_CALAO_DAB_MMX
> -struct gpio_led dab_mmx_leds[] = {
> -	{
> -		.gpio = AT91_PIN_PB20,
> -		.led = {
> -			.name = "user_led1",
> -		},
> -	}, {
> -		.gpio = AT91_PIN_PB21,
> -		.led = {
> -			.name = "user_led2",
> -		},
> -	}, {
> -		.gpio = AT91_PIN_PB22,
> -		.led = {
> -			.name = "user_led3",
> -		},
> -	}, {
> -		.gpio = AT91_PIN_PB23,
> -		.led = {
> -			.name = "user_led4",
> -		},
> -	}, {
> -		.gpio = AT91_PIN_PB24,
> -		.led = {
> -			.name = "red",
> -		},
> -	}, {
> -		.gpio = AT91_PIN_PB30,
> -		.led = {
> -			.name = "orange",
> -		},
> -	}, {
> -		.gpio = AT91_PIN_PB31,
> -		.led = {
> -			.name = "green",
> -		},
> -	},
> -};
> -
> -#ifdef CONFIG_KEYBOARD_GPIO
> -struct gpio_keys_button keys[] = {
> -	{
> -		.code = KEY_UP,
> -		.gpio = AT91_PIN_PB25,
> -	}, {
> -		.code = KEY_HOME,
> -		.gpio = AT91_PIN_PB13,
> -	}, {
> -		.code = KEY_DOWN,
> -		.gpio = AT91_PIN_PA26,
> -	}, {
> -		.code = KEY_ENTER,
> -		.gpio = AT91_PIN_PC9,
> -	},
> -};
> -
> -struct gpio_keys_platform_data gk_pdata = {
> -	.buttons = keys,
> -	.nbuttons = ARRAY_SIZE(keys),
> -};
> -
> -static void usb_a9260_keyboard_device_dab_mmx(void)
> -{
> -	int i;
> -
> -	for (i = 0; i < gk_pdata.nbuttons; i++) {
> -		/* user push button, pull up enabled */
> -		keys[i].active_low = 1;
> -		at91_set_GPIO_periph(keys[i].gpio, keys[i].active_low);
> -		at91_set_deglitch(keys[i].gpio, 1);
> -	}
> -
> -	add_gpio_keys_device(DEVICE_ID_DYNAMIC, &gk_pdata);
> -}
> -#else
> -static void usb_a9260_keyboard_device_dab_mmx(void) {}
> -#endif
> -
> -static void usb_a9260_device_dab_mmx(void)
> -{
> -	int i;
> -
> -	usb_a9260_keyboard_device_dab_mmx();
> -
> -	for (i = 0; i < ARRAY_SIZE(dab_mmx_leds); i++) {
> -		dab_mmx_leds[i].active_low = 1;
> -		at91_set_gpio_output(dab_mmx_leds[i].gpio, dab_mmx_leds[i].active_low);
> -		led_gpio_register(&dab_mmx_leds[i]);
> -	}
> -}
> -#else
> -static void usb_a9260_device_dab_mmx(void) {}
> -#endif
> -
> -static int usb_a9260_devices_init(void)
> -{
> -	usb_a9260_add_device_nand();
> -	usb_a9260_add_device_mci();
> -	usb_a9260_add_device_eth();
> -	usb_a9260_add_spi();
> -	usb_a9260_add_device_usb();
> -	ek_add_device_udc();
> -	ek_add_led();
> -	ek_add_device_button();
> -	usb_a9260_device_dab_mmx();
> -
> -	usb_a9260_set_board_type();
> -
> -	devfs_add_partition("nand0", 0x00000, SZ_128K, DEVFS_PARTITION_FIXED, "at91bootstrap_raw");
> -	dev_add_bb_dev("at91bootstrap_raw", "at91bootstrap");
> -	devfs_add_partition("nand0", SZ_128K, SZ_256K, DEVFS_PARTITION_FIXED, "self_raw");
> -	dev_add_bb_dev("self_raw", "self0");
> -	devfs_add_partition("nand0", SZ_256K + SZ_128K, SZ_128K, DEVFS_PARTITION_FIXED, "env_raw");
> -	dev_add_bb_dev("env_raw", "env0");
> -	devfs_add_partition("nand0", SZ_512K, SZ_128K, DEVFS_PARTITION_FIXED, "env_raw1");
> -	dev_add_bb_dev("env_raw1", "env1");
> -
> -	if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC))
> -		defaultenv_append_directory(defaultenv_usb_a926x);
> -
> -	return 0;
> -}
> -device_initcall(usb_a9260_devices_init);
> -
> -#ifndef CONFIG_CONSOLE_NONE
> -static int usb_a9260_console_init(void)
> -{
> -	struct device *dev;
> -
> -	if (machine_is_usb_a9260()) {
> -		barebox_set_model("Calao USB-A9260");
> -		barebox_set_hostname("usb-a9260");
> -	} else if (machine_is_usb_a9g20()) {
> -		barebox_set_model("Calao USB-A9G20");
> -		barebox_set_hostname("usb-a9g20");
> -	} else {
> -		barebox_set_model("Calao USB-A9263");
> -		barebox_set_hostname("usb-a9263");
> -	}
> -
> -	at91_register_uart(0, 0);
> -
> -	if (IS_ENABLED(CONFIG_CALAO_DAB_MMX)) {
> -		at91_register_uart(2, 0);
> -
> -		dev = at91_register_uart(4, 0);
> -		dev_set_param(dev, "active", "");
> -	}
> -
> -	return 0;
> -}
> -console_initcall(usb_a9260_console_init);
> -#endif
> +#include <mach/at91/board.h>
>  
>  static int usb_a9260_main_clock(void)
>  {
> diff --git a/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c b/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c
> index 66753669d6..dd521f2131 100644
> --- a/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c
> +++ b/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c
> @@ -12,6 +12,8 @@
>  #include <mach/at91/at91sam9260.h>
>  #include <mach/at91/hardware.h>
>  
> +extern char __dtb_usb_a9260_start[];
> +
>  AT91_ENTRY_FUNCTION(start_usb_a9260, r0, r1, r2)
>  {
>  	arm_cpu_lowlevel_init();
> @@ -20,9 +22,11 @@ AT91_ENTRY_FUNCTION(start_usb_a9260, r0, r1, r2)
>  
>  	barebox_arm_entry(AT91_CHIPSELECT_1,
>  			  at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)),
> -			  NULL);
> +			  __dtb_usb_a9260_start);
>  }
>  
> +extern char __dtb_usb_a9g20_start[];
> +
>  AT91_ENTRY_FUNCTION(start_usb_a9g20, r0, r1, r2)
>  {
>  	arm_cpu_lowlevel_init();
> @@ -31,5 +35,5 @@ AT91_ENTRY_FUNCTION(start_usb_a9g20, r0, r1, r2)
>  
>  	barebox_arm_entry(AT91_CHIPSELECT_1,
>  			  at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)),
> -			  NULL);
> +			  __dtb_usb_a9g20_start);
>  }
> diff --git a/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c b/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c
> index eda534c68e..2adf80dfb5 100644
> --- a/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c
> +++ b/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c
> @@ -105,6 +105,8 @@ static void __bare_init usb_a9263_board_config(struct at91sam926x_board_cfg *cfg
>  		AT91_RSTC_RSTTYP_WATCHDOG;
>  }
>  
> +extern char __dtb_usb_a9263_start[];
> +
>  static void __bare_init usb_a9263_init(bool has_mem_128m)
>  {
>  	struct at91sam926x_board_cfg cfg;
> @@ -118,7 +120,7 @@ static void __bare_init usb_a9263_init(bool has_mem_128m)
>  	at91sam9263_board_init(&cfg);
>  
>  	barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc),
> -	                  NULL);
> +	                  __dtb_usb_a9263_start);
>  }
>  
>  AT91_ENTRY_FUNCTION(start_usb_a9263, r0, r1, r2)
> diff --git a/arch/arm/configs/usb_a9g20_defconfig b/arch/arm/configs/usb_a9g20_defconfig
> index cca8ee6097..93566bac15 100644
> --- a/arch/arm/configs/usb_a9g20_defconfig
> +++ b/arch/arm/configs/usb_a9g20_defconfig
> @@ -1,15 +1,13 @@
>  CONFIG_ARCH_AT91=y
>  CONFIG_ARCH_AT91SAM9G20=y
>  CONFIG_MACH_USB_A9G20=y
> -CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
>  CONFIG_AEABI=y
>  CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
> -CONFIG_PBL_IMAGE=y
>  CONFIG_MMU=y
> +CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
>  CONFIG_EXPERIMENTAL=y
>  CONFIG_MALLOC_TLSF=y
>  CONFIG_PROMPT="USB-9G20:"
> -CONFIG_GLOB=y
>  CONFIG_PROMPT_HUSH_PS2="y"
>  CONFIG_HUSH_FANCY_PROMPT=y
>  CONFIG_CMDLINE_EDITING=y
> @@ -20,7 +18,7 @@ CONFIG_BOOTM_VERBOSE=y
>  CONFIG_BOOTM_INITRD=y
>  CONFIG_BOOTM_OFTREE=y
>  CONFIG_BOOTM_OFTREE_UIMAGE=y
> -CONFIG_CONSOLE_ACTIVATE_ALL=y
> +CONFIG_CONSOLE_ACTIVATE_NONE=y
>  CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y
>  # CONFIG_CMD_ARM_CPUINFO is not set
>  CONFIG_LONGHELP=y
> @@ -58,14 +56,13 @@ CONFIG_NET=y
>  CONFIG_NET_NFS=y
>  CONFIG_NET_NETCONSOLE=y
>  CONFIG_NET_RESOLV=y
> +CONFIG_OFDEVICE=y
> +CONFIG_OF_BAREBOX_DRIVERS=y
>  CONFIG_DRIVER_NET_MACB=y
>  CONFIG_DRIVER_SPI_ATMEL=y
>  CONFIG_MTD=y
>  # CONFIG_MTD_OOB_DEVICE is not set
>  CONFIG_NAND=y
> -# CONFIG_NAND_ECC_HW is not set
> -# CONFIG_NAND_ECC_HW_SYNDROME is not set
> -# CONFIG_NAND_ECC_HW_NONE is not set
>  CONFIG_NAND_ATMEL=y
>  CONFIG_USB_GADGET=y
>  CONFIG_USB_GADGET_DFU=y
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 0a7cceb461..66432ec7ac 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -171,6 +171,9 @@ lwl-$(CONFIG_MACH_WARP7) += imx7s-warp.dtb.o
>  lwl-$(CONFIG_MACH_VF610_TWR) += vf610-twr.dtb.o
>  lwl-$(CONFIG_MACH_WEBASTO_CCBV2) += imx6ul-webasto-ccbv2.dtb.o
>  lwl-$(CONFIG_MACH_WEBASTO_CCBV2) += imx6ul-webasto-marvel.dtb.o
> +lwl-$(CONFIG_MACH_USB_A9G20) += usb_a9g20.dtb.o
> +lwl-$(CONFIG_MACH_USB_A9260) += usb_a9260.dtb.o
> +lwl-$(CONFIG_MACH_USB_A9263) += usb_a9263.dtb.o
>  lwl-$(CONFIG_MACH_ZII_RDU1) +=	\
>  	imx51-zii-rdu1.dtb.o		\
>  	imx51-zii-scu2-mezz.dtb.o	\
> diff --git a/arch/arm/dts/usb_a9260.dts b/arch/arm/dts/usb_a9260.dts
> new file mode 100644
> index 0000000000..c034bb6544
> --- /dev/null
> +++ b/arch/arm/dts/usb_a9260.dts
> @@ -0,0 +1 @@
> +#include <arm/usb_a9260.dts>
> diff --git a/arch/arm/dts/usb_a9263.dts b/arch/arm/dts/usb_a9263.dts
> new file mode 100644
> index 0000000000..5455a6e916
> --- /dev/null
> +++ b/arch/arm/dts/usb_a9263.dts
> @@ -0,0 +1 @@
> +#include <arm/usb_a9263.dts>
> diff --git a/arch/arm/dts/usb_a9g20.dts b/arch/arm/dts/usb_a9g20.dts
> new file mode 100644
> index 0000000000..2989f423d8
> --- /dev/null
> +++ b/arch/arm/dts/usb_a9g20.dts
> @@ -0,0 +1 @@
> +#include <arm/usb_a9g20.dts>
> -- 
> 2.30.2
> 
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 



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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21  9:44       ` Alexander Dahl
@ 2023-03-21 16:48         ` Sam Ravnborg
  0 siblings, 0 replies; 17+ messages in thread
From: Sam Ravnborg @ 2023-03-21 16:48 UTC (permalink / raw)
  To: barebox

Hi Alexander.

On Tue, Mar 21, 2023 at 10:44:25AM +0100, Alexander Dahl wrote:
> Hello Sascha,
> 
> Am Tue, Mar 21, 2023 at 09:58:48AM +0100 schrieb Sascha Hauer:
> > Hi Wolfram,
> > 
> > Nice to hear from you here ;)
> > 
> > On Sun, Mar 19, 2023 at 10:28:07PM +0100, Wolfram Sang wrote:
> > > Hi Sam,
> > > 
> > > > It is only a few weeks ago I argued that there was no users of the older
> > > > at91sam* boards, and then you prove me wrong here.
> > > 
> > > At your service ;)
> > > 
> > > > I will try to remember that you may be able to test should someone
> > > > decide to move the barebox support for qil_a9g20 to DT and add PBL
> > > > support in the process.
> > > 
> > > I am still new to at91 and barebox, but AFAICS the PBL support is only
> > > for MCI currently?
> > 
> > As of 4e410f3e68280 PBL is always used on AT91.
> > 
> > I have no idea how the SDRAM setup is done on the USB-A9G20. There seems
> > to be SDRAM setup code for the USB-A9263, but not for the USB-A9G20. Is
> > there some AT91Bootstrap required?
> 
> I can not speak for this particular board, but for others with the
> same SoC (AT91SAM9G20).  The vendor approach is to setup the SDRAM
> (and maybe more) in at91bootstrap, however those old SoCs are not
> supported in recent version 4.x of that anymore, 3.x should work, I
> never tried that for sam9g20 (we still use 1.x for those SoCs).
> at91bootstrap then usually loads U-Boot from flash to SDRAM and starts
> U-Boot.
> 
> You can do the same init in U-Boot SPL as well without the "real"
> at91bootstrap, I think I saw that for other boards with similar SoCs.
> And from what I saw here, barebox has the concept of multiple stages
> as well, right?  So SDRAM must be initialized there in the very first
> stage after ROM code running from (tiny) internal SRAM, equivalent to
> what at91bootstrap does, before relocating to SDRAM.  There's no magic
> thing the ROM code can do for you on that platform.

When I added support to skov-arm9cpu to use barebox as replacement for
at91bootstrap the sdram init looked like this [1]:

static void sam9263_sdramc_init(unsigned int mck)
{
+       const struct at91sam9_sdramc_config config =
+       {
+               .sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0),
+               .mr = 0,
+               .tr = (mck * 7) / 1000000, // TODO 140 versus 0x13c (316)?
+               .cr = AT91_SDRAMC_NC_10 | AT91_SDRAMC_NR_13 | AT91_SDRAMC_CAS_2
+                     | AT91_SDRAMC_NB_4 | AT91_SDRAMC_DBW_32
+                     | AT91_SDRAMC_TWR_2 | AT91_SDRAMC_TRC_7
+                     | AT91_SDRAMC_TRP_2 | AT91_SDRAMC_TRCD_2
+                     | AT91_SDRAMC_TRAS_5 | AT91_SDRAMC_TXSR_8,
+               .lpr = 0,
+               .mdr = AT91_SDRAMC_MD_SDRAM,
+       };
+
+       /* Define PDC[31:16] as DATA[31:16] */
+       at91_mux_gpio_disable(IOMEM(AT91SAM9263_BASE_PIOD), 0xffff0000);
+       /* No pull-up for D[31:16] */
+       at91_mux_set_pullup(IOMEM(AT91SAM9263_BASE_PIOD), 0xffff0000, true);
+       /* PD16 to PD31 are pheripheral A */
+       at91_mux_set_A_periph(IOMEM(AT91SAM9263_BASE_PIOD), 0xffff0000);
}

On my too long todo list is to complete this work and upstream this for
both this and the at91sam9263ek board.

Anyway - DT support is the first step. Replacing at91bootstrap can
always come later.

[1] https://lore.barebox.org/barebox/20220628203849.2785611-1-sam@ravnborg.org/

	Sam



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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21  8:58     ` Sascha Hauer
  2023-03-21  9:44       ` Alexander Dahl
@ 2023-03-21 17:20       ` Wolfram Sang
  2023-03-21 19:02         ` Sam Ravnborg
  2023-04-27 17:26       ` Wolfram Sang
  2 siblings, 1 reply; 17+ messages in thread
From: Wolfram Sang @ 2023-03-21 17:20 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Sam Ravnborg, barebox

[-- Attachment #1: Type: text/plain, Size: 1278 bytes --]

Hi Sascha!

> Nice to hear from you here ;)

Yeah, it has been only 10 years... :)

> I have no idea how the SDRAM setup is done on the USB-A9G20. There seems
> to be SDRAM setup code for the USB-A9263, but not for the USB-A9G20. Is
> there some AT91Bootstrap required?

Yes. There is a bootstrap required: https://github.com/linux4sam/at91bootstrap
However, an old version is needed. I am still fighting the details.

I accidently erased it, so my journey for unbricking the device began.
at91bootstrap, openocd, barebox - they all once supported A9G20, but
nowadays all of them were broken. Well, I fixed openocd and barebox
mostly so far, the bootstrap is still the missing piece.

Super interesting about the A9263 setup code. I missed it so far. Does
that mean that barebox can replace the at91bootstrap?

> Anyway, what's really missing is DT support. I scribbled a patch to get
> you started in case you are motivated. Basically it's: Compile in the

Motivated? No way ;) Obliged? More so. But first, I want to unbrick my
device. First make it work, then make it beautiful.

That being said, the two patches from this series are okay? I'd think
they are still needed for other legacy systems even if I convert A9G20
to DT in some ages.

Thanks for your help!

   Wolfram

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21 17:20       ` Wolfram Sang
@ 2023-03-21 19:02         ` Sam Ravnborg
  2023-03-21 20:53           ` Sam Ravnborg
  2023-04-27 17:25           ` Wolfram Sang
  0 siblings, 2 replies; 17+ messages in thread
From: Sam Ravnborg @ 2023-03-21 19:02 UTC (permalink / raw)
  To: Wolfram Sang, Sascha Hauer, barebox

Hi Wolfram.

On Tue, Mar 21, 2023 at 06:20:45PM +0100, Wolfram Sang wrote:
> Hi Sascha!
> 
> > Nice to hear from you here ;)
> 
> Yeah, it has been only 10 years... :)
> 
> > I have no idea how the SDRAM setup is done on the USB-A9G20. There seems
> > to be SDRAM setup code for the USB-A9263, but not for the USB-A9G20. Is
> > there some AT91Bootstrap required?
> 
> Yes. There is a bootstrap required: https://github.com/linux4sam/at91bootstrap
> However, an old version is needed. I am still fighting the details.
> 
> I accidently erased it, so my journey for unbricking the device began.
> at91bootstrap, openocd, barebox - they all once supported A9G20, but
> nowadays all of them were broken. Well, I fixed openocd and barebox
> mostly so far, the bootstrap is still the missing piece.

You may be hit by the newer gcc optimize the delays in
the sdram init code in at91bootstrap.

This code:
	/* Step#4 The minimum pause of 200 us is provided to precede any single toggle */
        for (i = 0; i < 1000; i++) ;
Are optimized away with newer gcc's.
You can find it repeated several times in the init code.

I think this was the only part what broke at91bootstrap for me.
It was Ahmad, IIRC, that told me about it - so not my finding.

> 
> Super interesting about the A9263 setup code. I missed it so far. Does
> that mean that barebox can replace the at91bootstrap?
Yes. The patch series I pointed at generates a bare variant that I
successfully used to boot my board direct from ROMBOOT.
It is a direct replacement for at91bootstrap and loads barebox as the
next step bootloader.
I really like the way it is all integrated and how the two barebox
variants are built in one go.

	Sam

> 
> > Anyway, what's really missing is DT support. I scribbled a patch to get
> > you started in case you are motivated. Basically it's: Compile in the
> 
> Motivated? No way ;) Obliged? More so. But first, I want to unbrick my
> device. First make it work, then make it beautiful.
> 
> That being said, the two patches from this series are okay? I'd think
> they are still needed for other legacy systems even if I convert A9G20
> to DT in some ages.
> 
> Thanks for your help!
> 
>    Wolfram





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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21 19:02         ` Sam Ravnborg
@ 2023-03-21 20:53           ` Sam Ravnborg
  2023-03-21 21:42             ` Wolfram Sang
  2023-04-27 17:25           ` Wolfram Sang
  1 sibling, 1 reply; 17+ messages in thread
From: Sam Ravnborg @ 2023-03-21 20:53 UTC (permalink / raw)
  To: Wolfram Sang, Sascha Hauer, barebox

Hi all.

Correcting myself here.
> > 
> > Super interesting about the A9263 setup code. I missed it so far. Does
> > that mean that barebox can replace the at91bootstrap?
> Yes. The patch series I pointed at generates a bare variant that I
> successfully used to boot my board direct from ROMBOOT.
> It is a direct replacement for at91bootstrap and loads barebox as the
> next step bootloader.
The above is entirely correct - as the barebox variant supports booting from
SD card only, where at91bootstrap support additional boot sources.

Doable, but I did not have the need, so I did not look into it.


	Sam



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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21 20:53           ` Sam Ravnborg
@ 2023-03-21 21:42             ` Wolfram Sang
  2023-03-22  7:37               ` Sascha Hauer
  0 siblings, 1 reply; 17+ messages in thread
From: Wolfram Sang @ 2023-03-21 21:42 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: Sascha Hauer, barebox

[-- Attachment #1: Type: text/plain, Size: 575 bytes --]

Hi,

> > It is a direct replacement for at91bootstrap and loads barebox as the
> > next step bootloader.
> The above is entirely correct - as the barebox variant supports booting from
> SD card only, where at91bootstrap support additional boot sources.

So, I quickly built the bootstrap for A9263 and it was ~71KB in size.
This is OK for the A9263 with 96KB of SRAM, but the A9G20 only has
2x16KB. So, I think I'll need to update at91bootstrap to unbrick my
device. at91bootstrap is ~4-5KB from what I observed. But thanks for the
inspirtation!

Happy hacking,

   Wolfram


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21 21:42             ` Wolfram Sang
@ 2023-03-22  7:37               ` Sascha Hauer
  0 siblings, 0 replies; 17+ messages in thread
From: Sascha Hauer @ 2023-03-22  7:37 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: Sam Ravnborg, barebox

On Tue, Mar 21, 2023 at 10:42:21PM +0100, Wolfram Sang wrote:
> Hi,
> 
> > > It is a direct replacement for at91bootstrap and loads barebox as the
> > > next step bootloader.
> > The above is entirely correct - as the barebox variant supports booting from
> > SD card only, where at91bootstrap support additional boot sources.
> 
> So, I quickly built the bootstrap for A9263 and it was ~71KB in size.
> This is OK for the A9263 with 96KB of SRAM, but the A9G20 only has
> 2x16KB. So, I think I'll need to update at91bootstrap to unbrick my
> device. at91bootstrap is ~4-5KB from what I observed. But thanks for the
> inspirtation!

The barebox way to do that is to put an SD card driver (or whatever your
bootsource is) into the PBL, then let the boot ROM just load the PBL
part of the image. In the PBL configure SDRAM, use the SD card driver to
load the rest of the image (or the full image again) into SDRAM and jump
to it.

That might be out of scope for you right now as it requires some more
work.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-19 15:49 [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Wolfram Sang
                   ` (3 preceding siblings ...)
  2023-03-19 18:51 ` [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Sam Ravnborg
@ 2023-03-22  7:41 ` Sascha Hauer
  4 siblings, 0 replies; 17+ messages in thread
From: Sascha Hauer @ 2023-03-22  7:41 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: barebox

On Sun, Mar 19, 2023 at 04:49:06PM +0100, Wolfram Sang wrote:
> While trying to unbrick my Calao USB-A9G20, barebox couldn't read the
> NAND BB tables unlike the binary-only barebox from 2013. The first two
> patches fix that. The third one is a cleanup.
> 
> Happy hacking!
> 
> 
> Wolfram Sang (3):
>   mtd: nand: atmel: legacy: add 'algo' to use
>   mtd: nand: atmel: legacy: use proper ecc_shift
>   mtd: nand: atmel: legacy: remove superfluous code
> 
>  drivers/mtd/nand/atmel/legacy.c | 11 +++--------
>  1 file changed, 3 insertions(+), 8 deletions(-)

Applied, thanks

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21 19:02         ` Sam Ravnborg
  2023-03-21 20:53           ` Sam Ravnborg
@ 2023-04-27 17:25           ` Wolfram Sang
  1 sibling, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2023-04-27 17:25 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: Sascha Hauer, barebox

[-- Attachment #1: Type: text/plain, Size: 874 bytes --]


> > I accidently erased it, so my journey for unbricking the device began.
> > at91bootstrap, openocd, barebox - they all once supported A9G20, but
> > nowadays all of them were broken. Well, I fixed openocd and barebox
> > mostly so far, the bootstrap is still the missing piece.
> 
> You may be hit by the newer gcc optimize the delays in
> the sdram init code in at91bootstrap.

The issue was something else: SAM-BA failed to flash the bootstrap
because it couldn't get the SDRAM initialized before. I still didn't
figure out why. Flashing the bootstrap with barebox never got it
executed. I now found out that SAM-BA is modifying one vector at runtime
before flashing. What is 'endaddress of blob in RAM' becomes 'filesize
of blob'. If I modify my binary bootstrap like this, I can flash it with
barebox and finally have a working device again. Phew!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20
  2023-03-21  8:58     ` Sascha Hauer
  2023-03-21  9:44       ` Alexander Dahl
  2023-03-21 17:20       ` Wolfram Sang
@ 2023-04-27 17:26       ` Wolfram Sang
  2 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2023-04-27 17:26 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Sam Ravnborg, barebox

[-- Attachment #1: Type: text/plain, Size: 634 bytes --]

Hi Sascha,

> Anyway, what's really missing is DT support. I scribbled a patch to get
> you started in case you are motivated. Basically it's: Compile in the
> device tree, throw away all the device registration from the board code,
> see where it gets you and fix the fallout ;)

So, I tried this patch and if the fallout was just some errnos or
devices missing, I would have fixed it. Sadly, the actual fallout is
that the board doesn't boot without any printing. This needs more
debugging than what I am willing to invest currently. But I can bring
the device to Prague if someone from PTX wants to try.

All the best,

   Wolfram

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

end of thread, other threads:[~2023-04-27 17:27 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-19 15:49 [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Wolfram Sang
2023-03-19 15:49 ` [PATCH 1/3] mtd: nand: atmel: legacy: add 'algo' to use Wolfram Sang
2023-03-19 15:49 ` [PATCH 2/3] mtd: nand: atmel: legacy: use proper ecc_shift Wolfram Sang
2023-03-19 15:49 ` [PATCH 3/3] mtd: nand: atmel: legacy: remove superfluous code Wolfram Sang
2023-03-19 18:51 ` [PATCH 0/3] mtd: nand: atmel: legacy: fix boot on USB-A9G20 Sam Ravnborg
2023-03-19 21:28   ` Wolfram Sang
2023-03-21  8:58     ` Sascha Hauer
2023-03-21  9:44       ` Alexander Dahl
2023-03-21 16:48         ` Sam Ravnborg
2023-03-21 17:20       ` Wolfram Sang
2023-03-21 19:02         ` Sam Ravnborg
2023-03-21 20:53           ` Sam Ravnborg
2023-03-21 21:42             ` Wolfram Sang
2023-03-22  7:37               ` Sascha Hauer
2023-04-27 17:25           ` Wolfram Sang
2023-04-27 17:26       ` Wolfram Sang
2023-03-22  7:41 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox