[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] hw/m25p80.c: add WRSR(0x01) support
From: |
Peter Crosthwaite |
Subject: |
Re: [Qemu-devel] [PATCH] hw/m25p80.c: add WRSR(0x01) support |
Date: |
Fri, 25 Jan 2013 17:25:03 -0800 |
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 <address@hidden> 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 <address@hidden>
> ---
> 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.
> ***********************************************************************
>