Message ID | 20171029101343.15544-2-frasse.iglesias@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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; >
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; >> >> > >
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 --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;