[U-Boot] [U-Boot,v2 6/6] sf: Set QUAD enable bit support

Jagan Teki jagannadh.teki at gmail.com
Thu Jan 31 19:49:10 CET 2013


Hi Mike/Simon,

Any further comments on this.

I have tested on real h/w target as well.

Thanks,
Jagan.

On Sun, Dec 23, 2012 at 11:23 PM, Jagan Teki <jagannadh.teki at gmail.com> wrote:
> Tested on real hardware, works fine.
>
> Tested-by: Jagannadha Sutradharudu Teki <jagannadh.teki at gmail.com>
>
> Thanks,
> Jagan.
>
> On Wed, Dec 19, 2012 at 9:57 PM, Jagannadha Sutradharudu Teki
> <jagannadh.teki at gmail.com> wrote:
>> This patch provides support to set the QUAD enable bit on flash.
>>
>> QUAD enable bit needs to set before performing any QUAD IO operations
>> on respective SPI flashes.
>>
>> User need to use spi_flash_set_quad_enable_bit() to set the
>> QUAD enable bit based on their usage.
>>
>> Signed-off-by: Jagannadha Sutradharudu Teki <jagannadh.teki at gmail.com>
>> ---
>> Changes in v2:
>>         Improved code logic
>>
>>  drivers/mtd/spi/spi_flash.c          |   31 +++++++++++++++++++++++++++++++
>>  drivers/mtd/spi/spi_flash_internal.h |    4 ++++
>>  2 files changed, 35 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
>> index 5bddde4..675a0bf 100644
>> --- a/drivers/mtd/spi/spi_flash.c
>> +++ b/drivers/mtd/spi/spi_flash.c
>> @@ -329,6 +329,37 @@ int spi_flash_cmd_read_config(struct spi_flash *flash, void *data)
>>         return 0;
>>  }
>>
>> +int spi_flash_set_quad_enable_bit(struct spi_flash *flash)
>> +{
>> +       u8 data = 0, write_done = 0;
>> +       int ret, pass;
>> +
>> +       for (pass = 0; pass < 2; pass++) {
>> +               ret = spi_flash_cmd_read_config(flash, (void *)&data);
>> +               if (ret < 0) {
>> +                       debug("SF: fail to read config register\n");
>> +                       return ret;
>> +               }
>> +
>> +               if (data & STATUS_QEB) {
>> +                       debug("SF: quad enable bit is set.\n");
>> +                       return ret;
>> +               } else if (write_done != 1) {
>> +                       debug("SF: need to set quad enable bit\n");
>> +
>> +                       write_done = 1;
>> +                       ret = spi_flash_cmd_write_config(flash, STATUS_QEB);
>> +                       if (ret < 0) {
>> +                               debug("SF: fail to write quad enable bit\n");
>> +                               return ret;
>> +                       }
>> +               }
>> +       }
>> +
>> +       debug("SF: fail to set quad enable bit\n");
>> +       return -1;
>> +}
>> +
>>  /*
>>   * The following table holds all device probe functions
>>   *
>> diff --git a/drivers/mtd/spi/spi_flash_internal.h b/drivers/mtd/spi/spi_flash_internal.h
>> index 844e82e..15c7ac4 100644
>> --- a/drivers/mtd/spi/spi_flash_internal.h
>> +++ b/drivers/mtd/spi/spi_flash_internal.h
>> @@ -31,6 +31,7 @@
>>
>>  /* Common status */
>>  #define STATUS_WIP                     0x01
>> +#define STATUS_QEB                     0x02
>>
>>  /* Send a single-byte command to the device and read the response */
>>  int spi_flash_cmd(struct spi_slave *spi, u8 cmd, void *response, size_t len);
>> @@ -87,6 +88,9 @@ int spi_flash_cmd_write_config(struct spi_flash *flash, u8 cr);
>>  /* Read the config register */
>>  int spi_flash_cmd_read_config(struct spi_flash *flash, void *data);
>>
>> +/* Set the QUAD enable bit */
>> +int spi_flash_set_quad_enable_bit(struct spi_flash *flash);
>> +
>>  /*
>>   * Same as spi_flash_cmd_read() except it also claims/releases the SPI
>>   * bus. Used as common part of the ->read() operation.
>> --
>> 1.7.0.4
>>


More information about the U-Boot mailing list