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.

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