diff mbox

[v5,01/13] m25p80: Add support for continuous read out of RDSR and READ_FSR

Message ID 20171029101343.15544-2-frasse.iglesias@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Francisco Iglesias Oct. 29, 2017, 10:13 a.m. UTC
Add support for continuous read out of the RDSR and READ_FSR status
registers until the chip select is deasserted. This feature is supported
by amongst others 1 or more flashtypes manufactured by Numonyx (Micron),
Windbond, SST, Gigadevice, Eon and Macronix.

Signed-off-by: Francisco Iglesias <frasse.iglesias@gmail.com>
Acked-by: Marcin Krzemiński <mar.krzeminski@gmail.com>
Acked-by: Alistair Francis <alistair.francis@xilinx.com>
---
 hw/block/m25p80.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Comments

mar.krzeminski Oct. 29, 2017, 3:08 p.m. UTC | #1
W dniu 29.10.2017 o 11:13, Francisco Iglesias pisze:
> Add support for continuous read out of the RDSR and READ_FSR status
> registers until the chip select is deasserted. This feature is supported
> by amongst others 1 or more flashtypes manufactured by Numonyx (Micron),
> Windbond, SST, Gigadevice, Eon and Macronix.
>
> Signed-off-by: Francisco Iglesias <frasse.iglesias@gmail.com>
> Acked-by: Marcin Krzemiński <mar.krzeminski@gmail.com>
> Acked-by: Alistair Francis <alistair.francis@xilinx.com>
> ---
>   hw/block/m25p80.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
> index a2438b9..2971519 100644
> --- a/hw/block/m25p80.c
> +++ b/hw/block/m25p80.c
> @@ -423,6 +423,7 @@ typedef struct Flash {
>       uint8_t data[M25P80_INTERNAL_DATA_BUFFER_SZ];
>       uint32_t len;
>       uint32_t pos;
> +    bool data_read_loop;
I am sorry I have not seen this first time - data_read_loop should goes 
to vmstate_m25p80.

>       uint8_t needed_bytes;
>       uint8_t cmd_in_progress;
>       uint32_t cur_addr;
> @@ -983,6 +984,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>           }
>           s->pos = 0;
>           s->len = 1;
> +        s->data_read_loop = true;
>           s->state = STATE_READING_DATA;
>           break;
>   
> @@ -993,6 +995,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>           }
>           s->pos = 0;
>           s->len = 1;
> +        s->data_read_loop = true;
>           s->state = STATE_READING_DATA;
>           break;
>   
> @@ -1133,6 +1136,7 @@ static int m25p80_cs(SSISlave *ss, bool select)
>           s->pos = 0;
>           s->state = STATE_IDLE;
>           flash_sync_dirty(s, -1);
> +        s->data_read_loop = false;
>       }
>   
>       DB_PRINT_L(0, "%sselect\n", select ? "de" : "");
> @@ -1198,7 +1202,9 @@ static uint32_t m25p80_transfer8(SSISlave *ss, uint32_t tx)
>           s->pos++;
>           if (s->pos == s->len) {
>               s->pos = 0;
> -            s->state = STATE_IDLE;
> +            if (!s->data_read_loop) {
> +                s->state = STATE_IDLE;
> +            }
>           }
>           break;
>
Francisco Iglesias Oct. 31, 2017, 11:26 a.m. UTC | #2
Hi Marcin,

Huge thank you once again for reviewing and your time! I'll update above i
next version of the patch series. I'll remove the Acks so the patch can be
revisited (if it is ok for you that keep it just let me know and I'll do
so!).

Best regards,
Francisco Iglesias


On 29 Oct 2017 16:08, "mar.krzeminski" <mar.krzeminski@gmail.com> wrote:

>
>
> W dniu 29.10.2017 o 11:13, Francisco Iglesias pisze:
>
>> Add support for continuous read out of the RDSR and READ_FSR status
>> registers until the chip select is deasserted. This feature is supported
>> by amongst others 1 or more flashtypes manufactured by Numonyx (Micron),
>> Windbond, SST, Gigadevice, Eon and Macronix.
>>
>> Signed-off-by: Francisco Iglesias <frasse.iglesias@gmail.com>
>> Acked-by: Marcin Krzemiński <mar.krzeminski@gmail.com>
>> Acked-by: Alistair Francis <alistair.francis@xilinx.com>
>> ---
>>   hw/block/m25p80.c | 8 +++++++-
>>   1 file changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
>> index a2438b9..2971519 100644
>> --- a/hw/block/m25p80.c
>> +++ b/hw/block/m25p80.c
>> @@ -423,6 +423,7 @@ typedef struct Flash {
>>       uint8_t data[M25P80_INTERNAL_DATA_BUFFER_SZ];
>>       uint32_t len;
>>       uint32_t pos;
>> +    bool data_read_loop;
>>
> I am sorry I have not seen this first time - data_read_loop should goes to
> vmstate_m25p80.
>
>       uint8_t needed_bytes;
>>       uint8_t cmd_in_progress;
>>       uint32_t cur_addr;
>> @@ -983,6 +984,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>>           }
>>           s->pos = 0;
>>           s->len = 1;
>> +        s->data_read_loop = true;
>>           s->state = STATE_READING_DATA;
>>           break;
>>   @@ -993,6 +995,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>>           }
>>           s->pos = 0;
>>           s->len = 1;
>> +        s->data_read_loop = true;
>>           s->state = STATE_READING_DATA;
>>           break;
>>   @@ -1133,6 +1136,7 @@ static int m25p80_cs(SSISlave *ss, bool select)
>>           s->pos = 0;
>>           s->state = STATE_IDLE;
>>           flash_sync_dirty(s, -1);
>> +        s->data_read_loop = false;
>>       }
>>         DB_PRINT_L(0, "%sselect\n", select ? "de" : "");
>> @@ -1198,7 +1202,9 @@ static uint32_t m25p80_transfer8(SSISlave *ss,
>> uint32_t tx)
>>           s->pos++;
>>           if (s->pos == s->len) {
>>               s->pos = 0;
>> -            s->state = STATE_IDLE;
>> +            if (!s->data_read_loop) {
>> +                s->state = STATE_IDLE;
>> +            }
>>           }
>>           break;
>>
>>
>
>
mar.krzeminski Oct. 31, 2017, 11:55 a.m. UTC | #3
W dniu 31.10.2017 o 12:26, francisco iglesias pisze:
> Hi Marcin,
>
> Huge thank you once again for reviewing and your time! I'll update 
> above i next version of the patch series. I'll remove the Acks so the 
> patch can be revisited (if it is ok for you that keep it just let me 
> know and I'll do so!).
>
> Best regards,
> Francisco Iglesias
If you change the code please remove me Acks. It is no problem to review 
again.

Thanks,
Marcin
diff mbox

Patch

diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
index a2438b9..2971519 100644
--- a/hw/block/m25p80.c
+++ b/hw/block/m25p80.c
@@ -423,6 +423,7 @@  typedef struct Flash {
     uint8_t data[M25P80_INTERNAL_DATA_BUFFER_SZ];
     uint32_t len;
     uint32_t pos;
+    bool data_read_loop;
     uint8_t needed_bytes;
     uint8_t cmd_in_progress;
     uint32_t cur_addr;
@@ -983,6 +984,7 @@  static void decode_new_cmd(Flash *s, uint32_t value)
         }
         s->pos = 0;
         s->len = 1;
+        s->data_read_loop = true;
         s->state = STATE_READING_DATA;
         break;
 
@@ -993,6 +995,7 @@  static void decode_new_cmd(Flash *s, uint32_t value)
         }
         s->pos = 0;
         s->len = 1;
+        s->data_read_loop = true;
         s->state = STATE_READING_DATA;
         break;
 
@@ -1133,6 +1136,7 @@  static int m25p80_cs(SSISlave *ss, bool select)
         s->pos = 0;
         s->state = STATE_IDLE;
         flash_sync_dirty(s, -1);
+        s->data_read_loop = false;
     }
 
     DB_PRINT_L(0, "%sselect\n", select ? "de" : "");
@@ -1198,7 +1202,9 @@  static uint32_t m25p80_transfer8(SSISlave *ss, uint32_t tx)
         s->pos++;
         if (s->pos == s->len) {
             s->pos = 0;
-            s->state = STATE_IDLE;
+            if (!s->data_read_loop) {
+                s->state = STATE_IDLE;
+            }
         }
         break;