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

Marek Vasut marex at denx.de
Fri May 15 11:36:11 CEST 2015


On Friday, May 15, 2015 at 10:47:46 AM, Pavel Machek wrote:
> > >> Seems like nothing much doing in micron side
> > >> 
> > >>         switch (JEDEC_MFR(info)) {
> > >>         case CFI_MFR_ST: /* Micron, actually */
> > >>         
> > >>                 /* Some Micron need WREN command; all will accept it
> > >>                 */ need_wren = true;
> > > 
> > > Umm. Take a closer look.
> > > 
> > > There's no break, so it continues below.
> > 
> > Ohh.. So Linux works for you.. then is it?
> 
> Well, yes, but this code patch is actually not tested in my case,
> because u-boot already resets it for Linux.
> 
> Anyway, is this what you'd like to see?

Was my idea of checking in which mode the SPI NOR is first discarded ?

[...]

> @@ -233,6 +234,30 @@ static int spi_flash_validate_params(struct spi_slave
> *spi, u8 *idcode, flash->poll_cmd = CMD_FLAG_STATUS;
>  #endif
> 
> +	if (params->flags & MICRON_RESET) {
> +#define CMD_RESET_ENABLE 0x66
> +#define CMD_RESET_MEMORY 0x99
> +	  int ret;

The indent here seems funny.

I think it'd be better to pull this reset procedure into a separate function.

> +		/*
> +		 * 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-byte addressing mode.
> +		 */
> +		ret = spi_flash_cmd(spi, CMD_RESET_ENABLE, NULL, 0);
> +		if (ret) {
> +			printf("SF: Failed issue enable reset command\n");
> +			return ret;
> +		}
> +
> +		ret = spi_flash_cmd(spi, CMD_RESET_MEMORY, NULL, 0);
> +		if (ret) {
> +			printf("SF: Failed issue reset command\n");
> +			return ret;
> +		}
> +
> +		printf("SF: Device software reset\n");
> +	}

Otherwise I think it's OK.


More information about the U-Boot mailing list