Hi Dante,

On Fri, Jan 25, 2013 at 5:25 PM, Peter Crosthwaite
<peter.crosthwa...@xilinx.com> wrote:
> Hi Dante,
>
> Sorry about the delay, and thanks for the contribution. Please run the
> patch through the provided checkpatch script (scripts/checkpatch.pl).
> There are a few whitespace errors that need to be fixed. Please also
> see the comment below.
>
> Regards,
> Peter
>
> On Thu, Jan 17, 2013 at 10:17 PM, Dante <dant...@faraday-tech.com> wrote:
>> Atmel, SST and Intel/Numonyx serial flash tend to power up
>> with the software protection bits set.
>> And thus the new m25p80.c in linux kernel would always tries
>> to use WREN(0x06) + WRSR(0x01) to turn-off the protection.
>> The WEL(0x02) of status register is supposed to be cleared
>> after WRSR(0x01).
>> There are some drivers (i.e my own tiny driver for RTOSes) would
>> check the WEL(0x02) in status register to make sure the protection
>> is correctly turned off, so this patch is mandatory to me.
>>
>> Signed-off-by: Kuo-Jung Su <dant...@faraday-tech.com>
>> ---
>>  hw/m25p80.c |   16 ++++++++++++++++
>>  1 file changed, 16 insertions(+)
>>
>> diff --git a/hw/m25p80.c b/hw/m25p80.c
>> index d392656..c8d0411 100644
>> --- a/hw/m25p80.c
>> +++ b/hw/m25p80.c
>> @@ -184,6 +184,7 @@ static const FlashPartInfo known_devices[] = {
>>
>>  typedef enum {
>>      NOP = 0,
>> +    WRSR = 0x1,
>>      WRDI = 0x4,
>>      RDSR = 0x5,
>>      WREN = 0x6,
>> @@ -377,6 +378,12 @@ static void complete_collecting_data(Flash *s)
>>      case ERASE_SECTOR:
>>          flash_erase(s, s->cur_addr, s->cmd_in_progress);
>>          break;
>> +    case WRSR:
>> +       if (s->write_enable) {
>> +               s->state = STATE_IDLE;
>
> Returning to the idle state should be unconditional, if
> (!s->write_enable), then if you issue a WRSR, you will get stuck in
> COLLECTING_DATA.
>

Reviewing this a little more, transitioning back to IDLE is handled by
the de-assertion of the chip-select. So you should by able to just
remove this s->state = STATE_IDLE altogether.

Regards,
Peter

> Regards,
> Peter
>
>> +               s->write_enable = false;
>> +       }
>> +       break;
>>      default:
>>          break;
>>      }
>> @@ -440,6 +447,15 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>>          s->len = 0;
>>          s->state = STATE_COLLECTING_DATA;
>>          break;
>> +
>> +       case WRSR:
>> +               if (s->write_enable) {
>> +                       s->needed_bytes = 1;
>> +                       s->pos = 0;
>> +               s->len = 0;
>> +                       s->state = STATE_COLLECTING_DATA;
>> +               }
>> +        break;
>>
>>      case WRDI:
>>          s->write_enable = false;
>> --
>> 1.7.9.5
>>
>>
>> ********************* Confidentiality Notice ************************
>> This electronic message and any attachments may contain
>> confidential and legally privileged information or
>> information which is otherwise protected from disclosure.
>> If you are not the intended recipient,please do not disclose
>> the contents, either in whole or in part, to anyone,and
>> immediately delete the message and any attachments from
>> your computer system and destroy all hard copies.
>> Thank you for your cooperation.
>> ***********************************************************************
>>

Reply via email to