On 6 January 2014 15:46, Peter Maydell <peter.mayd...@linaro.org> wrote:

> On 11 December 2013 13:56, Michel Pollet <buser...@gmail.com> wrote:
>
> This implements just enough of the digctl IO block to allow
> > linux to believe it's running on (currently only) an imx23.
> >
> > Signed-off-by: Michel Pollet <buser...@gmail.com>
> > ---
> >  hw/arm/Makefile.objs  |   1 +
> >  hw/arm/imx23_digctl.c | 110
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 111 insertions(+)
> >  create mode 100644 hw/arm/imx23_digctl.c
> >
> > diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs
> > index 78b5614..9adcb96 100644
> > --- a/hw/arm/Makefile.objs
> > +++ b/hw/arm/Makefile.objs
> > @@ -5,3 +5,4 @@ obj-y += tosa.o versatilepb.o vexpress.o virt.o
> xilinx_zynq.o z2.o
> >
> >  obj-y += armv7m.o exynos4210.o pxa2xx.o pxa2xx_gpio.o pxa2xx_pic.o
> >  obj-y += omap1.o omap2.o strongarm.o
> > +obj-$(CONFIG_MXS) += imx23_digctl.o
> > diff --git a/hw/arm/imx23_digctl.c b/hw/arm/imx23_digctl.c
> > new file mode 100644
> > index 0000000..b7cd1ff
> > --- /dev/null
> > +++ b/hw/arm/imx23_digctl.c
> > @@ -0,0 +1,110 @@
> > +/*
> > + * imx23_digctl.c
> > + *
> > + * Copyright: Michel Pollet <buser...@gmail.com>
> > + *
> > + * QEMU Licence
> > + */
> > +
> > +/*
> > + * This module implements a very basic IO block for the digctl of the
> imx23
> > + * Basically there is no real logic, just constant registers return,
> the most
> > + * used one bing the "chip id" that is used by the various linux drivers
> > + * to differentiate between imx23 and 28.
> > + *
> > + * The module consists mostly of read/write registers that the
> bootloader and
> > + * kernel are quite happy to 'set' to whatever value they believe they
> set...
> > + */
> > +
> > +#include "hw/sysbus.h"
> > +#include "hw/arm/mxs.h"
> > +
> > +enum {
> > +    HW_DIGCTL_RAMCTL = 0x3,
> > +    HW_DIGCTL_CHIPID = 0x31,
> > +};
> > +
> > +typedef struct imx23_digctl_state {
> > +    SysBusDevice busdev;
> > +    MemoryRegion iomem;
> > +
> > +    uint32_t   reg[0x2000 / 4];
> > +} imx23_digctl_state;
>
> I'm not generally a fan of "big reg[] array" like this.
> In real hardware are these typically constant read/only
> registers, or do they actually do something? Does the
> hardware really have a full set of 2048 registers here,
> or are there gaps?
>

This block contains most of the 'general purpose' registers, ram timing and
all that jazz; there are a lot of write to it at init time, but it's
otherwise mostly ignored. Also, there's very little to do about it
functionally for qemu's purpose.


>
> I'd rather have us implement just the minimal set
> required for things to boot, with LOG_UNIMP (and
> read-zero/write-ignored) for the rest. That makes
> it easier to add actual implementations later
> (and your migration state is not 0x2000 bytes of random
> undifferentiated stuff).
>
>
I will re-add the trace for both write and read and see if I can narrow the
range down; it will be linux specific, tho, that's why I thought a
'catchall' block was more appropriate.


> thanks
> -- PMM
>

Thanks,
M

Reply via email to