All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@fr.ibm.com>
To: marcin.krzeminski@nokia.com, qemu-devel@nongnu.org
Cc: crosthwaitepeter@gmail.com, pawel.lenkow@itlen.com,
	rfsw-patches@mlist.nsn-inter.net
Subject: Re: [Qemu-devel] [PATCH v5 05/11] block: m25p80: 4byte address mode
Date: Mon, 21 Mar 2016 18:47:22 +0100	[thread overview]
Message-ID: <56F033AA.4090501@fr.ibm.com> (raw)
In-Reply-To: <1458498493-13906-6-git-send-email-marcin.krzeminski@nokia.com>

Hello again,

One question below.


On 03/20/2016 07:28 PM, marcin.krzeminski@nokia.com wrote:
> From: Marcin Krzeminski <marcin.krzeminski@nokia.com>
> 
> This patch adds only 4byte address mode (does not cover dummy cycles).
> This mode is needed to access more than 16 MiB of flash.
> 
> Signed-off-by: Marcin Krzeminski <marcin.krzeminski@nokia.com>
> Reviewed-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> ---
>  hw/block/m25p80.c | 43 +++++++++++++++++++++++++++++++++----------
>  1 file changed, 33 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
> index c5de4ee..101a43f 100644
> --- a/hw/block/m25p80.c
> +++ b/hw/block/m25p80.c
> @@ -237,6 +237,9 @@ typedef enum {
>      ERASE_32K = 0x52,
>      ERASE_SECTOR = 0xd8,
> 
> +    EN_4BYTE_ADDR = 0xB7,
> +    EX_4BYTE_ADDR = 0xE9,
> +
>      EXTEND_ADDR_READ = 0xC8,
>      EXTEND_ADDR_WRITE = 0xC5,
> 
> @@ -269,6 +272,7 @@ typedef struct Flash {
>      uint8_t cmd_in_progress;
>      uint64_t cur_addr;
>      bool write_enable;
> +    bool four_bytes_address_mode;
>      bool reset_enable;
>      uint8_t ear;
> 
> @@ -406,12 +410,25 @@ void flash_write8(Flash *s, uint64_t addr, uint8_t data)
>      s->dirty_page = page;
>  }
> 
> +static inline int get_addr_length(Flash *s)
> +{
> +    return s->four_bytes_address_mode ? 4 : 3;
> +}
> +
>  static void complete_collecting_data(Flash *s)
>  {
> -    s->cur_addr = s->data[0] << 16;
> -    s->cur_addr |= s->data[1] << 8;
> -    s->cur_addr |= s->data[2];
> -    s->cur_addr += (s->ear & 0x3) * MAX_3BYTES_SIZE;
> +    int i;
> +
> +    s->cur_addr = 0;
> +
> +    for (i = 0; i < get_addr_length(s); ++i) {
> +        s->cur_addr <<= 8;
> +        s->cur_addr |= s->data[i];
> +    }
> +
> +    if (get_addr_length(s) == 3) {
> +        s->cur_addr += (s->ear & 0x3) * MAX_3BYTES_SIZE;
> +    }
> 
>      s->state = STATE_IDLE;
> 
> @@ -452,6 +469,7 @@ static void reset_memory(Flash *s)
>      s->cmd_in_progress = NOP;
>      s->cur_addr = 0;
>      s->ear = 0;
> +    s->four_bytes_address_mode = false;
>      s->len = 0;
>      s->needed_bytes = 0;
>      s->pos = 0;
> @@ -480,7 +498,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>      case DPP:
>      case QPP:
>      case PP:
> -        s->needed_bytes = 3;
> +        s->needed_bytes = get_addr_length(s);
>          s->pos = 0;
>          s->len = 0;
>          s->state = STATE_COLLECTING_DATA;
> @@ -489,7 +507,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>      case FAST_READ:
>      case DOR:
>      case QOR:
> -        s->needed_bytes = 4;
> +        s->needed_bytes = get_addr_length(s) + 1;
>          s->pos = 0;
>          s->len = 0;
>          s->state = STATE_COLLECTING_DATA;
> @@ -501,9 +519,8 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>          case JEDEC_SPANSION:
>              s->needed_bytes = 4;
>              break;
> -        case JEDEC_NUMONYX:

JEDEC_NUMONYX is being removed ?

>          default:
> -            s->needed_bytes = 5;
> +            s->needed_bytes = get_addr_length(s) + 2;
>          }
>          s->pos = 0;
>          s->len = 0;
> @@ -516,9 +533,8 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>          case JEDEC_SPANSION:
>              s->needed_bytes = 6;
>              break;
> -        case JEDEC_NUMONYX:

and here also. Is that a typo ? 

Thanks,

C.


>          default:
> -            s->needed_bytes = 8;
> +            s->needed_bytes = get_addr_length(s) + 4;
>          }
>          s->pos = 0;
>          s->len = 0;
> @@ -575,6 +591,12 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>          break;
>      case NOP:
>          break;
> +    case EN_4BYTE_ADDR:
> +        s->four_bytes_address_mode = true;
> +        break;
> +    case EX_4BYTE_ADDR:
> +        s->four_bytes_address_mode = false;
> +        break;
>      case EXTEND_ADDR_READ:
>          s->data[0] = s->ear;
>          s->pos = 0;
> @@ -729,6 +751,7 @@ static const VMStateDescription vmstate_m25p80 = {
>          VMSTATE_UINT8(cmd_in_progress, Flash),
>          VMSTATE_UINT64(cur_addr, Flash),
>          VMSTATE_BOOL(write_enable, Flash),
> +        VMSTATE_BOOL(four_bytes_address_mode, Flash),
>          VMSTATE_UINT8(ear, Flash),
>          VMSTATE_BOOL(reset_enable, Flash),
>          VMSTATE_END_OF_LIST()
> 

  reply	other threads:[~2016-03-21 17:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-20 18:28 [Qemu-devel] [PATCH v5 00/11] Support for N25Q256/512 and AT25128/256 marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 01/11] block: m25p80: Removed unused variable marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 02/11] block: m25p80: RESET_ENABLE and RESET_MEMORY commands marcin.krzeminski
2016-03-21 17:02   ` Cédric Le Goater
2016-03-21 17:38     ` [Qemu-devel] ODP: " Krzeminski, Marcin (Nokia - PL/Wroclaw)
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 03/11] block: m25p80: Widen flags variable marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 04/11] block: m25p80: Extend address mode marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 05/11] block: m25p80: 4byte " marcin.krzeminski
2016-03-21 17:47   ` Cédric Le Goater [this message]
2016-03-21 18:00     ` [Qemu-devel] ODP: " Krzeminski, Marcin (Nokia - PL/Wroclaw)
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 06/11] block: m25p80: Add configuration registers marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 07/11] block: m25p80: Dummy cycles for N25Q256/512 marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 08/11] block: m25p80: Fast read and 4bytes commands marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 09/11] block: m25p80: Implemented FSR register marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 10/11] block: m25p80: n25q256a/n25q512a models marcin.krzeminski
2016-03-20 18:28 ` [Qemu-devel] [PATCH v5 11/11] block: m25p80: at25128a/at25256a models marcin.krzeminski
2016-03-23 15:30 ` [Qemu-devel] [PATCH v5 00/11] Support for N25Q256/512 and AT25128/256 Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56F033AA.4090501@fr.ibm.com \
    --to=clg@fr.ibm.com \
    --cc=crosthwaitepeter@gmail.com \
    --cc=marcin.krzeminski@nokia.com \
    --cc=pawel.lenkow@itlen.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rfsw-patches@mlist.nsn-inter.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.