[U-Boot] [PATCH] mtd: sf: Add CONFIG_SPI_N25Q256A_RESET for software-reset

Marek Vasut marex at denx.de
Fri May 1 16:24:45 CEST 2015


On Friday, May 01, 2015 at 11:01:09 AM, Pavel Machek wrote:
> This is needed for the SoCFPGA booting from SPI NOR flash
> e.g. (N25Q256A) as long as u-boot-spl 2013 is used (newer one is not
> available).
> 
> Signed-off-by: Stefan Roese <sr at denx.de>
> Signed-off-by: Pavel Machek <pavel at denx.de>
> 
> ---
> 
> Ported to today's u-boot version.
> 
> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
> index 201471c..f7cfbd9 100644
> --- a/drivers/mtd/spi/sf_probe.c
> +++ b/drivers/mtd/spi/sf_probe.c
> @@ -347,6 +348,36 @@ int spi_flash_probe_slave(struct spi_slave *spi,
> struct spi_flash *flash) }
>  	}
> 
> +#ifdef CONFIG_SPI_N25Q256A_RESET

Should be CONFIG_SPI_MICRON_RESET, since other parts which can also be
used would have similar issue.

This should also be documented in README I believe. It'd be nice if you
added diffstat into your patches as it makes things easier during review.

> +#define CMD_RESET_ENABLE 0x66
> +#define CMD_RESET_MEMORY 0x99
> +	/*
> +	 * This is needed for the SoCFPGA booting from SPI NOR flash
> +	 * e.g. (N25Q256A), as U-Boot SPL 2013-socfpga (only version
> +	 * working on that board) sets 4-byt addressing mode.
> +	 *
> +	 * Additionally it may be good idea to change
> +	 * this line in the Linux SPI NOR flash driver:

Please submit a patch for Linux then. But this will be extremely
crappy and unreliable solution, so you should at least make the
kernel spit some warning upon shutdown so people are aware they
are doing something terribly wrong.

> +	 * { "n25q256a", INFO(0x20ba19, 0, 64 * 1024,  512,
> +	 *    SECT_4K | SHUTDOWN_3BYTE) },
> +	 *
> +	 * Add SHUTDOWN_3BYTE here.
> +	 */
> +	ret = spi_flash_cmd(spi, CMD_RESET_ENABLE, NULL, 0);
> +	if (ret) {
> +		printf("SF: Failed issue reset command\n");

I thought this was just a reset-enable command. If this command
fails, user won't be able to tell which of these two failed, so
it's a bad idea to use the same error message for both.

> +		goto err_read_id;
> +	}
> +
> +	ret = spi_flash_cmd(spi, CMD_RESET_MEMORY, NULL, 0);
> +	if (ret) {
> +		printf("SF: Failed issue reset command\n");
> +		goto err_read_id;
> +	}
> +
> +	printf("SF: Device software reset\n");
> +#endif
>  #ifdef CONFIG_OF_CONTROL
>  	if (spi_flash_decode_fdt(gd->fdt_blob, flash)) {
>  		debug("SF: FDT decode error\n");

Best regards,
Marek Vasut


More information about the U-Boot mailing list