On 27 February 2013 07:15, Kuo-Jung Su <dant...@gmail.com> wrote: > From: Kuo-Jung Su <dant...@faraday-tech.com> > > The s->addr should be reset along with the s->addrlen, > or it might have the previous address shifted to MSB > and then causes problem to nand erase operation. > > Signed-off-by: Kuo-Jung Su <dant...@faraday-tech.com> > --- > hw/nand.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/hw/nand.c b/hw/nand.c > index 7f40ebf..3cf91c5 100644 > --- a/hw/nand.c > +++ b/hw/nand.c > @@ -511,6 +511,7 @@ void nand_setio(DeviceState *dev, uint32_t value) > nand_command(s); > > if (s->cmd != NAND_CMD_RANDOMREAD2) { > + s->addr = 0; > s->addrlen = 0; > } > }
I think this patch is probably right, but the code in nand_setio() is just awful. It's trying to implement the way some commands are "do something now" and some are "expect an address and do something when you have the full address" and some are "command now; address follows; final command to say now do it". But it's a pile of conditionals that I think are harder to understand than if there were a table of commands which were flagged for whether they wanted addresses or not. -- PMM