* [Qemu-devel] [PATCH v1 0/5] Nand Cleanup
@ 2013-06-18 11:07 peter.crosthwaite
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code peter.crosthwaite
` (5 more replies)
0 siblings, 6 replies; 17+ messages in thread
From: peter.crosthwaite @ 2013-06-18 11:07 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, Peter Crosthwaite, edgar.iglesias
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Misc refactorings and cleanup of NAND.
Peter Crosthwaite (5):
block/nand: Factor out common code
block/nand: Formatting sweep
block/nand: QOM casting sweep
block/nand: Convert Sysbus::init to Device::realize
nand: Don't inherit from Sysbus
hw/block/nand.c | 89 +++++++++++++++++++++++++++++++--------------------------
1 file changed, 49 insertions(+), 40 deletions(-)
--
1.8.3.rc1.44.gb387c77.dirty
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code
2013-06-18 11:07 [Qemu-devel] [PATCH v1 0/5] Nand Cleanup peter.crosthwaite
@ 2013-06-18 11:08 ` peter.crosthwaite
2013-06-19 8:09 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2013-06-19 8:54 ` [Qemu-devel] " Peter Maydell
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 2/5] block/nand: Formatting sweep peter.crosthwaite
` (4 subsequent siblings)
5 siblings, 2 replies; 17+ messages in thread
From: peter.crosthwaite @ 2013-06-18 11:08 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, peter.maydell, Peter Crosthwaite, edgar.iglesias
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Most of this computation of s->iolen is the same for both the if and
else paths here. Factor out the common parts outside the if.
Cc: qemu-trivial@nongnu.org
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
hw/block/nand.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/hw/block/nand.c b/hw/block/nand.c
index 087ca14..6309f93 100644
--- a/hw/block/nand.c
+++ b/hw/block/nand.c
@@ -272,10 +272,10 @@ static void nand_command(NANDFlashState *s)
break;
offset = s->addr & ((1 << s->addr_shift) - 1);
s->blk_load(s, s->addr, offset);
- if (s->gnd)
- s->iolen = (1 << s->page_shift) - offset;
- else
- s->iolen = (1 << s->page_shift) + (1 << s->oob_shift) - offset;
+ s->iolen = (1 << s->page_shift) - offset;
+ if (!s->gnd) {
+ s->iolen += 1 << s->oob_shift;
+ }
break;
case NAND_CMD_RESET:
--
1.8.3.rc1.44.gb387c77.dirty
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH v1 2/5] block/nand: Formatting sweep
2013-06-18 11:07 [Qemu-devel] [PATCH v1 0/5] Nand Cleanup peter.crosthwaite
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code peter.crosthwaite
@ 2013-06-18 11:08 ` peter.crosthwaite
2013-06-19 7:53 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2013-06-18 11:10 ` [Qemu-devel] [PATCH v1 3/5] block/nand: QOM casting sweep peter.crosthwaite
` (3 subsequent siblings)
5 siblings, 1 reply; 17+ messages in thread
From: peter.crosthwaite @ 2013-06-18 11:08 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, peter.maydell, Peter Crosthwaite, edgar.iglesias
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Make this code closer to passing checkpatch. Mostly missing braces, but
a few rogue tabs in there as well.
Cc: qemu-trivial@nongnu.org
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
hw/block/nand.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/hw/block/nand.c b/hw/block/nand.c
index 6309f93..de0a022 100644
--- a/hw/block/nand.c
+++ b/hw/block/nand.c
@@ -298,10 +298,8 @@ static void nand_command(NANDFlashState *s)
case NAND_CMD_BLOCKERASE2:
s->addr &= (1ull << s->addrlen * 8) - 1;
- if (nand_flash_ids[s->chip_id].options & NAND_SAMSUNG_LP)
- s->addr <<= 16;
- else
- s->addr <<= 8;
+ s->addr <<= nand_flash_ids[s->chip_id].options & NAND_SAMSUNG_LP ?
+ 16 : 8;
if (s->wp) {
s->blk_erase(s);
@@ -464,10 +462,11 @@ void nand_setpins(DeviceState *dev, uint8_t cle, uint8_t ale,
s->ce = ce;
s->wp = wp;
s->gnd = gnd;
- if (wp)
+ if (wp) {
s->status |= NAND_IOSTATUS_UNPROTCT;
- else
+ } else {
s->status &= ~NAND_IOSTATUS_UNPROTCT;
+ }
}
void nand_getpins(DeviceState *dev, int *rb)
@@ -489,13 +488,12 @@ void nand_setio(DeviceState *dev, uint32_t value)
return;
}
}
- if (value == NAND_CMD_READ0)
+ if (value == NAND_CMD_READ0) {
s->offset = 0;
- else if (value == NAND_CMD_READ1) {
+ } else if (value == NAND_CMD_READ1) {
s->offset = 0x100;
value = NAND_CMD_READ0;
- }
- else if (value == NAND_CMD_READ2) {
+ } else if (value == NAND_CMD_READ2) {
s->offset = 1 << s->page_shift;
value = NAND_CMD_READ0;
}
@@ -508,8 +506,9 @@ void nand_setio(DeviceState *dev, uint32_t value)
s->cmd == NAND_CMD_BLOCKERASE2 ||
s->cmd == NAND_CMD_NOSERIALREAD2 ||
s->cmd == NAND_CMD_RANDOMREAD2 ||
- s->cmd == NAND_CMD_RESET)
+ s->cmd == NAND_CMD_RESET) {
nand_command(s);
+ }
if (s->cmd != NAND_CMD_RANDOMREAD2) {
s->addrlen = 0;
@@ -596,8 +595,9 @@ uint32_t nand_getio(DeviceState *dev)
s->iolen = (1 << s->page_shift) + (1 << s->oob_shift) - offset;
}
- if (s->ce || s->iolen <= 0)
+ if (s->ce || s->iolen <= 0) {
return 0;
+ }
for (offset = s->buswidth; offset--;) {
x |= s->ioaddr[offset] << (offset << 3);
@@ -696,8 +696,9 @@ static void glue(nand_blk_erase_, PAGE_SIZE)(NANDFlashState *s)
uint8_t iobuf[0x200] = { [0 ... 0x1ff] = 0xff, };
addr = s->addr & ~((1 << (ADDR_SHIFT + s->erase_shift)) - 1);
- if (PAGE(addr) >= s->pages)
+ if (PAGE(addr) >= s->pages) {
return;
+ }
if (!s->bdrv) {
memset(s->storage + PAGE_START(addr),
@@ -725,11 +726,12 @@ static void glue(nand_blk_erase_, PAGE_SIZE)(NANDFlashState *s)
memset(iobuf, 0xff, 0x200);
i = (addr & ~0x1ff) + 0x200;
for (addr += ((PAGE_SIZE + OOB_SIZE) << s->erase_shift) - 0x200;
- i < addr; i += 0x200)
+ i < addr; i += 0x200) {
if (bdrv_write(s->bdrv, i >> 9, iobuf, 1) < 0) {
printf("%s: write error in sector %" PRIu64 "\n",
__func__, i >> 9);
}
+ }
page = i >> 9;
if (bdrv_read(s->bdrv, page, iobuf, 1) < 0) {
@@ -745,8 +747,9 @@ static void glue(nand_blk_erase_, PAGE_SIZE)(NANDFlashState *s)
static void glue(nand_blk_load_, PAGE_SIZE)(NANDFlashState *s,
uint64_t addr, int offset)
{
- if (PAGE(addr) >= s->pages)
+ if (PAGE(addr) >= s->pages) {
return;
+ }
if (s->bdrv) {
if (s->mem_oob) {
--
1.8.3.rc1.44.gb387c77.dirty
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH v1 3/5] block/nand: QOM casting sweep
2013-06-18 11:07 [Qemu-devel] [PATCH v1 0/5] Nand Cleanup peter.crosthwaite
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code peter.crosthwaite
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 2/5] block/nand: Formatting sweep peter.crosthwaite
@ 2013-06-18 11:10 ` peter.crosthwaite
2013-06-19 10:52 ` Andreas Färber
2013-06-18 11:11 ` [Qemu-devel] [PATCH v1 4/5] block/nand: Convert Sysbus::init to Device::realize peter.crosthwaite
` (2 subsequent siblings)
5 siblings, 1 reply; 17+ messages in thread
From: peter.crosthwaite @ 2013-06-18 11:10 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, Peter Crosthwaite, afaerber, edgar.iglesias
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Define and use standard QOM cast macro. Remove usages of DO_UPCAST and
direct -> style casting.
Cc: afaerber@suse.de
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
hw/block/nand.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/hw/block/nand.c b/hw/block/nand.c
index de0a022..d2469f5 100644
--- a/hw/block/nand.c
+++ b/hw/block/nand.c
@@ -82,6 +82,11 @@ struct NANDFlashState {
uint32_t ioaddr_vmstate;
};
+#define TYPE_NAND "nand"
+
+#define NAND(obj) \
+ OBJECT_CHECK(NANDFlashState, (obj), TYPE_NAND)
+
static void mem_and(uint8_t *dest, const uint8_t *src, size_t n)
{
/* Like memcpy() but we logical-AND the data into the destination */
@@ -224,7 +229,7 @@ static const struct {
static void nand_reset(DeviceState *dev)
{
- NANDFlashState *s = FROM_SYSBUS(NANDFlashState, SYS_BUS_DEVICE(dev));
+ NANDFlashState *s = NAND(dev);
s->cmd = NAND_CMD_READ0;
s->addr = 0;
s->addrlen = 0;
@@ -279,7 +284,7 @@ static void nand_command(NANDFlashState *s)
break;
case NAND_CMD_RESET:
- nand_reset(&s->busdev.qdev);
+ nand_reset(DEVICE(s));
break;
case NAND_CMD_PAGEPROGRAM1:
@@ -319,14 +324,14 @@ static void nand_command(NANDFlashState *s)
static void nand_pre_save(void *opaque)
{
- NANDFlashState *s = opaque;
+ NANDFlashState *s = NAND(opaque);
s->ioaddr_vmstate = s->ioaddr - s->io;
}
static int nand_post_load(void *opaque, int version_id)
{
- NANDFlashState *s = opaque;
+ NANDFlashState *s = NAND(opaque);
if (s->ioaddr_vmstate > sizeof(s->io)) {
return -EINVAL;
@@ -365,7 +370,7 @@ static const VMStateDescription vmstate_nand = {
static int nand_device_init(SysBusDevice *dev)
{
int pagesize;
- NANDFlashState *s = FROM_SYSBUS(NANDFlashState, dev);
+ NANDFlashState *s = NAND(dev);
s->buswidth = nand_flash_ids[s->chip_id].width >> 3;
s->size = nand_flash_ids[s->chip_id].size << 20;
@@ -436,7 +441,7 @@ static void nand_class_init(ObjectClass *klass, void *data)
}
static const TypeInfo nand_info = {
- .name = "nand",
+ .name = TYPE_NAND,
.parent = TYPE_SYS_BUS_DEVICE,
.instance_size = sizeof(NANDFlashState),
.class_init = nand_class_init,
@@ -456,7 +461,8 @@ static void nand_register_types(void)
void nand_setpins(DeviceState *dev, uint8_t cle, uint8_t ale,
uint8_t ce, uint8_t wp, uint8_t gnd)
{
- NANDFlashState *s = (NANDFlashState *) dev;
+ NANDFlashState *s = NAND(dev);
+
s->cle = cle;
s->ale = ale;
s->ce = ce;
@@ -477,7 +483,8 @@ void nand_getpins(DeviceState *dev, int *rb)
void nand_setio(DeviceState *dev, uint32_t value)
{
int i;
- NANDFlashState *s = (NANDFlashState *) dev;
+ NANDFlashState *s = NAND(dev);
+
if (!s->ce && s->cle) {
if (nand_flash_ids[s->chip_id].options & NAND_SAMSUNG_LP) {
if (s->cmd == NAND_CMD_READ0 && value == NAND_CMD_LPREAD2)
@@ -581,7 +588,7 @@ uint32_t nand_getio(DeviceState *dev)
{
int offset;
uint32_t x = 0;
- NANDFlashState *s = (NANDFlashState *) dev;
+ NANDFlashState *s = NAND(dev);
/* Allow sequential reading */
if (!s->iolen && s->cmd == NAND_CMD_READ0) {
--
1.8.3.rc1.44.gb387c77.dirty
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH v1 4/5] block/nand: Convert Sysbus::init to Device::realize
2013-06-18 11:07 [Qemu-devel] [PATCH v1 0/5] Nand Cleanup peter.crosthwaite
` (2 preceding siblings ...)
2013-06-18 11:10 ` [Qemu-devel] [PATCH v1 3/5] block/nand: QOM casting sweep peter.crosthwaite
@ 2013-06-18 11:11 ` peter.crosthwaite
2013-06-19 10:56 ` Andreas Färber
2013-06-18 11:12 ` [Qemu-devel] [PATCH v1 5/5] nand: Don't inherit from Sysbus peter.crosthwaite
2013-06-25 18:16 ` [Qemu-devel] [PATCH v1 0/5] Nand Cleanup Peter Maydell
5 siblings, 1 reply; 17+ messages in thread
From: peter.crosthwaite @ 2013-06-18 11:11 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, Peter Crosthwaite, afaerber, edgar.iglesias
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
The prescribed transition from Sysbus::init function to a
Device::realize.
Cc: afaerber@suse.de
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
hw/block/nand.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/hw/block/nand.c b/hw/block/nand.c
index d2469f5..8dca3bc 100644
--- a/hw/block/nand.c
+++ b/hw/block/nand.c
@@ -367,7 +367,7 @@ static const VMStateDescription vmstate_nand = {
}
};
-static int nand_device_init(SysBusDevice *dev)
+static void nand_realize(DeviceState *dev, Error **errp)
{
int pagesize;
NANDFlashState *s = NAND(dev);
@@ -393,16 +393,17 @@ static int nand_device_init(SysBusDevice *dev)
nand_init_2048(s);
break;
default:
- error_report("Unsupported NAND block size");
- return -1;
+ error_setg(errp, "Unsupported NAND block size %#x\n",
+ 1 << s->page_shift);
+ return;
}
pagesize = 1 << s->oob_shift;
s->mem_oob = 1;
if (s->bdrv) {
if (bdrv_is_read_only(s->bdrv)) {
- error_report("Can't use a read-only drive");
- return -1;
+ error_setg(errp, "Can't use a read-only drive");
+ return;
}
if (bdrv_getlength(s->bdrv) >=
(s->pages << s->page_shift) + (s->pages << s->oob_shift)) {
@@ -418,8 +419,6 @@ static int nand_device_init(SysBusDevice *dev)
}
/* Give s->ioaddr a sane value in case we save state before it is used. */
s->ioaddr = s->io;
-
- return 0;
}
static Property nand_properties[] = {
@@ -432,9 +431,8 @@ static Property nand_properties[] = {
static void nand_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
- SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
- k->init = nand_device_init;
+ dc->realize = nand_realize;
dc->reset = nand_reset;
dc->vmsd = &vmstate_nand;
dc->props = nand_properties;
--
1.8.3.rc1.44.gb387c77.dirty
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH v1 5/5] nand: Don't inherit from Sysbus
2013-06-18 11:07 [Qemu-devel] [PATCH v1 0/5] Nand Cleanup peter.crosthwaite
` (3 preceding siblings ...)
2013-06-18 11:11 ` [Qemu-devel] [PATCH v1 4/5] block/nand: Convert Sysbus::init to Device::realize peter.crosthwaite
@ 2013-06-18 11:12 ` peter.crosthwaite
2013-06-19 11:06 ` Andreas Färber
2013-06-25 18:16 ` [Qemu-devel] [PATCH v1 0/5] Nand Cleanup Peter Maydell
5 siblings, 1 reply; 17+ messages in thread
From: peter.crosthwaite @ 2013-06-18 11:12 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, Peter Crosthwaite, afaerber, edgar.iglesias
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Nand chips are not sysbus devices - they do not have any sense of MMIO,
nor interrupts. Re-parent to TYPE_DEVICE accordingly.
Cc: afaerber@suse.de
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
hw/block/nand.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/hw/block/nand.c b/hw/block/nand.c
index 8dca3bc..072de7c 100644
--- a/hw/block/nand.c
+++ b/hw/block/nand.c
@@ -21,7 +21,7 @@
# include "hw/hw.h"
# include "hw/block/flash.h"
# include "sysemu/blockdev.h"
-# include "hw/sysbus.h"
+#include "hw/qdev.h"
#include "qemu/error-report.h"
# define NAND_CMD_READ0 0x00
@@ -54,7 +54,8 @@
typedef struct NANDFlashState NANDFlashState;
struct NANDFlashState {
- SysBusDevice busdev;
+ DeviceState parent_obj;
+
uint8_t manf_id, chip_id;
uint8_t buswidth; /* in BYTES */
int size, pages;
@@ -440,7 +441,7 @@ static void nand_class_init(ObjectClass *klass, void *data)
static const TypeInfo nand_info = {
.name = TYPE_NAND,
- .parent = TYPE_SYS_BUS_DEVICE,
+ .parent = TYPE_DEVICE,
.instance_size = sizeof(NANDFlashState),
.class_init = nand_class_init,
};
--
1.8.3.rc1.44.gb387c77.dirty
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [Qemu-trivial] [PATCH v1 2/5] block/nand: Formatting sweep
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 2/5] block/nand: Formatting sweep peter.crosthwaite
@ 2013-06-19 7:53 ` Michael Tokarev
0 siblings, 0 replies; 17+ messages in thread
From: Michael Tokarev @ 2013-06-19 7:53 UTC (permalink / raw)
To: peter.crosthwaite; +Cc: qemu-trivial, peter.maydell, qemu-devel, edgar.iglesias
18.06.2013 15:08, peter.crosthwaite@xilinx.com пишет:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> Make this code closer to passing checkpatch. Mostly missing braces, but
> a few rogue tabs in there as well.
Thanks, applied to the trivial patches queue.
/mjt
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [Qemu-trivial] [PATCH v1 1/5] block/nand: Factor out common code
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code peter.crosthwaite
@ 2013-06-19 8:09 ` Michael Tokarev
2013-06-19 8:13 ` Peter Crosthwaite
2013-07-31 23:49 ` Peter Crosthwaite
2013-06-19 8:54 ` [Qemu-devel] " Peter Maydell
1 sibling, 2 replies; 17+ messages in thread
From: Michael Tokarev @ 2013-06-19 8:09 UTC (permalink / raw)
To: peter.crosthwaite
Cc: Kevin Wolf, peter.maydell, qemu-trivial, qemu-devel,
Stefan Hajnoczi, edgar.iglesias
18.06.2013 15:08, peter.crosthwaite@xilinx.com wrote:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> Most of this computation of s->iolen is the same for both the if and
> else paths here. Factor out the common parts outside the if.
>
> Cc: qemu-trivial@nongnu.org
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
>
> hw/block/nand.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/hw/block/nand.c b/hw/block/nand.c
> index 087ca14..6309f93 100644
> --- a/hw/block/nand.c
> +++ b/hw/block/nand.c
> @@ -272,10 +272,10 @@ static void nand_command(NANDFlashState *s)
> break;
> offset = s->addr & ((1 << s->addr_shift) - 1);
> s->blk_load(s, s->addr, offset);
> - if (s->gnd)
> - s->iolen = (1 << s->page_shift) - offset;
> - else
> - s->iolen = (1 << s->page_shift) + (1 << s->oob_shift) - offset;
> + s->iolen = (1 << s->page_shift) - offset;
> + if (!s->gnd) {
> + s->iolen += 1 << s->oob_shift;
> + }
Hm. Can s->iolen become negative here?
addr_shift can be either less or greather than page_shift. When addr_shift
is larger than page_shift (addr_shift=16, page_shift=11), offset may be up
to 65535, in which case s->iolen may be -63487, even without additional
oob_shift.
I dunno if this is a concern, just.. asking.
Besides, exactly the same expression is used in nand_getio() down this file,
maybe a common function is in order? :)
And looking at this file, I think it deserves some good type changes. For
example, all these _shift are unsigned, and most are actually used as masks,
in form (1<<shift), instead of directly (except of erase_shift).
Thanks,
/mjt
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [Qemu-trivial] [PATCH v1 1/5] block/nand: Factor out common code
2013-06-19 8:09 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
@ 2013-06-19 8:13 ` Peter Crosthwaite
2013-06-19 8:47 ` Michael Tokarev
2013-07-31 23:49 ` Peter Crosthwaite
1 sibling, 1 reply; 17+ messages in thread
From: Peter Crosthwaite @ 2013-06-19 8:13 UTC (permalink / raw)
To: Michael Tokarev
Cc: Kevin Wolf, peter.maydell, qemu-trivial, qemu-devel,
Stefan Hajnoczi, edgar.iglesias
Hi Michael,
On Wed, Jun 19, 2013 at 6:09 PM, Michael Tokarev <mjt@tls.msk.ru> wrote:
> 18.06.2013 15:08, peter.crosthwaite@xilinx.com wrote:
>> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>>
>> Most of this computation of s->iolen is the same for both the if and
>> else paths here. Factor out the common parts outside the if.
>>
>> Cc: qemu-trivial@nongnu.org
>>
>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>> ---
>>
>> hw/block/nand.c | 8 ++++----
>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/hw/block/nand.c b/hw/block/nand.c
>> index 087ca14..6309f93 100644
>> --- a/hw/block/nand.c
>> +++ b/hw/block/nand.c
>> @@ -272,10 +272,10 @@ static void nand_command(NANDFlashState *s)
>> break;
>> offset = s->addr & ((1 << s->addr_shift) - 1);
>> s->blk_load(s, s->addr, offset);
>> - if (s->gnd)
>> - s->iolen = (1 << s->page_shift) - offset;
>> - else
>> - s->iolen = (1 << s->page_shift) + (1 << s->oob_shift) - offset;
>> + s->iolen = (1 << s->page_shift) - offset;
>> + if (!s->gnd) {
>> + s->iolen += 1 << s->oob_shift;
>> + }
>
> Hm. Can s->iolen become negative here?
>
> addr_shift can be either less or greather than page_shift. When addr_shift
> is larger than page_shift (addr_shift=16, page_shift=11), offset may be up
> to 65535, in which case s->iolen may be -63487, even without additional
> oob_shift.
>
> I dunno if this is a concern, just.. asking.
>
> Besides, exactly the same expression is used in nand_getio() down this file,
> maybe a common function is in order? :)
>
> And looking at this file, I think it deserves some good type changes. For
> example, all these _shift are unsigned, and most are actually used as masks,
> in form (1<<shift), instead of directly (except of erase_shift).
>
All sounds fair. Ill have another look in the context of type
changing, and factoring out some commonality. Your able to take P2
without conflict? :)
Regards,
Peter
> Thanks,
>
> /mjt
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [Qemu-trivial] [PATCH v1 1/5] block/nand: Factor out common code
2013-06-19 8:13 ` Peter Crosthwaite
@ 2013-06-19 8:47 ` Michael Tokarev
0 siblings, 0 replies; 17+ messages in thread
From: Michael Tokarev @ 2013-06-19 8:47 UTC (permalink / raw)
To: Peter Crosthwaite; +Cc: qemu-trivial, qemu-devel
19.06.2013 12:13, Peter Crosthwaite wrote:
[]
> All sounds fair. Ill have another look in the context of type
> changing, and factoring out some commonality. Your able to take P2
> without conflict? :)
Thanks!
And sure, either with or without your next reformatting
(block/nand: Formatting sweep) -- either on top of it or
without it -- is okay.
/mjt
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code peter.crosthwaite
2013-06-19 8:09 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
@ 2013-06-19 8:54 ` Peter Maydell
1 sibling, 0 replies; 17+ messages in thread
From: Peter Maydell @ 2013-06-19 8:54 UTC (permalink / raw)
To: peter.crosthwaite; +Cc: qemu-trivial, edgar.iglesias, qemu-devel
On 18 June 2013 12:08, <peter.crosthwaite@xilinx.com> wrote:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> Most of this computation of s->iolen is the same for both the if and
> else paths here. Factor out the common parts outside the if.
>
> Cc: qemu-trivial@nongnu.org
Please don't cc qemu-trivial on half a patchset: it makes
it awkward to commit to a submaintainer tree if half of
it has already gone somewhere else.
thanks
-- PMM
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH v1 3/5] block/nand: QOM casting sweep
2013-06-18 11:10 ` [Qemu-devel] [PATCH v1 3/5] block/nand: QOM casting sweep peter.crosthwaite
@ 2013-06-19 10:52 ` Andreas Färber
0 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2013-06-19 10:52 UTC (permalink / raw)
To: peter.crosthwaite; +Cc: peter.maydell, qemu-devel, edgar.iglesias
Am 18.06.2013 13:10, schrieb peter.crosthwaite@xilinx.com:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> Define and use standard QOM cast macro. Remove usages of DO_UPCAST and
> direct -> style casting.
>
> Cc: afaerber@suse.de
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
>
> hw/block/nand.c | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/hw/block/nand.c b/hw/block/nand.c
> index de0a022..d2469f5 100644
> --- a/hw/block/nand.c
> +++ b/hw/block/nand.c
[...]
> @@ -319,14 +324,14 @@ static void nand_command(NANDFlashState *s)
>
> static void nand_pre_save(void *opaque)
> {
> - NANDFlashState *s = opaque;
> + NANDFlashState *s = NAND(opaque);
>
> s->ioaddr_vmstate = s->ioaddr - s->io;
> }
>
> static int nand_post_load(void *opaque, int version_id)
> {
> - NANDFlashState *s = opaque;
> + NANDFlashState *s = NAND(opaque);
>
> if (s->ioaddr_vmstate > sizeof(s->io)) {
> return -EINVAL;
[snip]
These two are not strictly necessary, but either way:
Reviewed-by: Andreas Färber <afaerber@suse.de>
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH v1 4/5] block/nand: Convert Sysbus::init to Device::realize
2013-06-18 11:11 ` [Qemu-devel] [PATCH v1 4/5] block/nand: Convert Sysbus::init to Device::realize peter.crosthwaite
@ 2013-06-19 10:56 ` Andreas Färber
0 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2013-06-19 10:56 UTC (permalink / raw)
To: peter.crosthwaite; +Cc: peter.maydell, qemu-devel, edgar.iglesias
Am 18.06.2013 13:11, schrieb peter.crosthwaite@xilinx.com:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> The prescribed transition from Sysbus::init function to a
> Device::realize.
>
> Cc: afaerber@suse.de
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
>
> hw/block/nand.c | 16 +++++++---------
> 1 file changed, 7 insertions(+), 9 deletions(-)
Due to chip_id property we can't seem to split anything off from realize.
Reviewed-by: Andreas Färber <afaerber@suse.de>
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH v1 5/5] nand: Don't inherit from Sysbus
2013-06-18 11:12 ` [Qemu-devel] [PATCH v1 5/5] nand: Don't inherit from Sysbus peter.crosthwaite
@ 2013-06-19 11:06 ` Andreas Färber
0 siblings, 0 replies; 17+ messages in thread
From: Andreas Färber @ 2013-06-19 11:06 UTC (permalink / raw)
To: peter.crosthwaite; +Cc: peter.maydell, qemu-devel, edgar.iglesias
Am 18.06.2013 13:12, schrieb peter.crosthwaite@xilinx.com:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
> Nand chips are not sysbus devices - they do not have any sense of MMIO,
> nor interrupts. Re-parent to TYPE_DEVICE accordingly.
>
> Cc: afaerber@suse.de
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
>
> hw/block/nand.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
CPUs are bus-less devices and work fine so far, so
Reviewed-by: Andreas Färber <afaerber@suse.de>
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH v1 0/5] Nand Cleanup
2013-06-18 11:07 [Qemu-devel] [PATCH v1 0/5] Nand Cleanup peter.crosthwaite
` (4 preceding siblings ...)
2013-06-18 11:12 ` [Qemu-devel] [PATCH v1 5/5] nand: Don't inherit from Sysbus peter.crosthwaite
@ 2013-06-25 18:16 ` Peter Maydell
2013-06-26 0:37 ` Peter Crosthwaite
5 siblings, 1 reply; 17+ messages in thread
From: Peter Maydell @ 2013-06-25 18:16 UTC (permalink / raw)
To: peter.crosthwaite; +Cc: edgar.iglesias, qemu-devel
On 18 June 2013 12:07, <peter.crosthwaite@xilinx.com> wrote:
> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>
>
> Misc refactorings and cleanup of NAND.
>
>
> Peter Crosthwaite (5):
> block/nand: Factor out common code
> block/nand: Formatting sweep
> block/nand: QOM casting sweep
> block/nand: Convert Sysbus::init to Device::realize
> nand: Don't inherit from Sysbus
I've applied patches 3..5 to arm-devs.next.
Thanks
-- PMM
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH v1 0/5] Nand Cleanup
2013-06-25 18:16 ` [Qemu-devel] [PATCH v1 0/5] Nand Cleanup Peter Maydell
@ 2013-06-26 0:37 ` Peter Crosthwaite
0 siblings, 0 replies; 17+ messages in thread
From: Peter Crosthwaite @ 2013-06-26 0:37 UTC (permalink / raw)
To: Peter Maydell; +Cc: edgar.iglesias, qemu-devel
On Wed, Jun 26, 2013 at 4:16 AM, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 18 June 2013 12:07, <peter.crosthwaite@xilinx.com> wrote:
>> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>>
>>
>> Misc refactorings and cleanup of NAND.
>>
>>
>> Peter Crosthwaite (5):
>> block/nand: Factor out common code
>> block/nand: Formatting sweep
>> block/nand: QOM casting sweep
>> block/nand: Convert Sysbus::init to Device::realize
>> nand: Don't inherit from Sysbus
>
> I've applied patches 3..5 to arm-devs.next.
>
Thanks,
Regards
Peter
> Thanks
> -- PMM
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [Qemu-trivial] [PATCH v1 1/5] block/nand: Factor out common code
2013-06-19 8:09 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2013-06-19 8:13 ` Peter Crosthwaite
@ 2013-07-31 23:49 ` Peter Crosthwaite
1 sibling, 0 replies; 17+ messages in thread
From: Peter Crosthwaite @ 2013-07-31 23:49 UTC (permalink / raw)
To: Michael Tokarev
Cc: Kevin Wolf, peter.maydell, qemu-trivial, qemu-devel,
Stefan Hajnoczi, edgar.iglesias
On Wed, Jun 19, 2013 at 6:09 PM, Michael Tokarev <mjt@tls.msk.ru> wrote:
> 18.06.2013 15:08, peter.crosthwaite@xilinx.com wrote:
>> From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>>
>> Most of this computation of s->iolen is the same for both the if and
>> else paths here. Factor out the common parts outside the if.
>>
>> Cc: qemu-trivial@nongnu.org
>>
>> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
>> ---
>>
>> hw/block/nand.c | 8 ++++----
>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/hw/block/nand.c b/hw/block/nand.c
>> index 087ca14..6309f93 100644
>> --- a/hw/block/nand.c
>> +++ b/hw/block/nand.c
>> @@ -272,10 +272,10 @@ static void nand_command(NANDFlashState *s)
>> break;
>> offset = s->addr & ((1 << s->addr_shift) - 1);
>> s->blk_load(s, s->addr, offset);
>> - if (s->gnd)
>> - s->iolen = (1 << s->page_shift) - offset;
>> - else
>> - s->iolen = (1 << s->page_shift) + (1 << s->oob_shift) - offset;
>> + s->iolen = (1 << s->page_shift) - offset;
>> + if (!s->gnd) {
>> + s->iolen += 1 << s->oob_shift;
>> + }
>
> Hm. Can s->iolen become negative here?
>
> addr_shift can be either less or greather than page_shift. When addr_shift
> is larger than page_shift (addr_shift=16, page_shift=11), offset may be up
> to 65535, in which case s->iolen may be -63487, even without additional
> oob_shift.
>
> I dunno if this is a concern, just.. asking.
>
> Besides, exactly the same expression is used in nand_getio() down this file,
> maybe a common function is in order? :)
>
Factored this out. Just added it to nand_blk_load_XXX().
Regards,
Peter
> And looking at this file, I think it deserves some good type changes. For
> example, all these _shift are unsigned, and most are actually used as masks,
> in form (1<<shift), instead of directly (except of erase_shift).
>
> Thanks,
>
> /mjt
>
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2013-07-31 23:50 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-18 11:07 [Qemu-devel] [PATCH v1 0/5] Nand Cleanup peter.crosthwaite
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 1/5] block/nand: Factor out common code peter.crosthwaite
2013-06-19 8:09 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2013-06-19 8:13 ` Peter Crosthwaite
2013-06-19 8:47 ` Michael Tokarev
2013-07-31 23:49 ` Peter Crosthwaite
2013-06-19 8:54 ` [Qemu-devel] " Peter Maydell
2013-06-18 11:08 ` [Qemu-devel] [PATCH v1 2/5] block/nand: Formatting sweep peter.crosthwaite
2013-06-19 7:53 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2013-06-18 11:10 ` [Qemu-devel] [PATCH v1 3/5] block/nand: QOM casting sweep peter.crosthwaite
2013-06-19 10:52 ` Andreas Färber
2013-06-18 11:11 ` [Qemu-devel] [PATCH v1 4/5] block/nand: Convert Sysbus::init to Device::realize peter.crosthwaite
2013-06-19 10:56 ` Andreas Färber
2013-06-18 11:12 ` [Qemu-devel] [PATCH v1 5/5] nand: Don't inherit from Sysbus peter.crosthwaite
2013-06-19 11:06 ` Andreas Färber
2013-06-25 18:16 ` [Qemu-devel] [PATCH v1 0/5] Nand Cleanup Peter Maydell
2013-06-26 0:37 ` Peter Crosthwaite
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.