OK,Peter Thanks. I got your point,In my case SoC is from TI which uses cortexa-15 as CPU core and example(Borad) would be keystone 2 EVM .
I guess I need to divide my emulation in three steps 1)Emulation of SoC 2)Emulation of board. 3)Emulation of Devices(Ethernet controller). Please correct me if I am wrong . Thanks Rajan On Fri, Jan 24, 2014 at 11:45 PM, Peter Crosthwaite < peter.crosthwa...@xilinx.com> wrote: > On Sat, Jan 25, 2014 at 5:18 PM, rajan pathak <rajanpath...@gmail.com> > wrote: > > Thanks Andreas and Peter Crosthwate for your response .Your comments are > > really helpful. > > > > What I understood of your answers that firstly, I need to have keystone > > soc's initialized/emulated inside hw/arm, > > Yes. > > right(it would be equivalent of > > adding machine model) ? > > > > And no - SoC are not machine models. There are several violators of > this rule in-tree including Zynq and Highbank off the top of my head. > Our suggestion to look at Allwinner is because it is the most recently > reviewed and accepted so it is stylistically up to date. > > Boards are machine models (more about that below) - you will need that too. > > > To what extent ,we should emulate the SoC ,is it only the CPU we need to > > emulate? > > > > As Peter pointed out kernel in my case is Device tree driven rather board > > files approach. > > > > Kernel compiled for Allwinner SoC uses Board files approach,So how > different > > it would to write machine model > > in my case? > > > > Not at all. That's a Kernel problem. We do have device tree support in > QEMU from a bootloader point-of-view, but such kernel design > descisions do not (or rather should not) flow-on to QEMU hardware > emulation in any way. Just think about the hardware and the kernel is > merely one of many possible softwares that could run on your model. > > > Can I reuse Allwinner SoC code to emulate Ketsone SoC? > > > > +static void aw_a10_init(Object *obj) > > +{ > > + AwA10State *s = AW_A10(obj); > > + DeviceState *dev; > > + > > + object_initialize(&s->cpu, sizeof(s->cpu), "cortex-a8-" > TYPE_ARM_CPU); > > + object_property_add_child(obj, "cpu", OBJECT(&s->cpu), NULL); > > + > > + object_initialize(&s->intc, sizeof(s->timer), TYPE_AW_A10_PIC); > > + dev = DEVICE(&s->intc); > > + qdev_set_parent_bus(dev, sysbus_get_default()); > > + > > + object_initialize(&s->timer, sizeof(s->timer), TYPE_AW_A10_PIT); > > + dev = DEVICE(&s->timer); > > + qdev_set_parent_bus(dev, sysbus_get_default()); > > +} > > + > > > > Yes that looks like a good place to be reading - that is SoC level code. > > > Also,I didn't understand below lines from Andreas answer. > > > > > > >to use it you need a standard machine definition, > > > >> such as the EVMK2Hx in your case (some evaluation/reference board rather > > > >> than custom industry boards). Then test that code using a Linux (or > > > >> firmware or other OS) that runs on the real board > > > > Do you have an easily-obtainable eval board that you are using or > would ideally use for your work should you be doing this in real > hardware? If so - that's what you should model. In Allwinners case, > the one picked was the "cubieboard". > > Check the later versions of the allwinner series to see the clear > separation of the three levels - Board, SoC and Devices. > hw/arm/cubieboard.c is good reading WRT to this. > > Regards, > Peter > > > > > Thanks > > Rajan > > > > > > > > . > > > > > > On Fri, Jan 24, 2014 at 4:06 PM, Peter Crosthwaite > > <peter.crosthwa...@xilinx.com> wrote: > >> > >> On Fri, Jan 24, 2014 at 7:52 AM, Andreas Färber <afaer...@suse.de> > wrote: > >> > Am 23.01.2014 21:02, schrieb rajan pathak: > >> >>> I'm not clear what you're trying to do here; could > >> >>> you try rephrasing your question? Are you just trying > >> >>> to use the existing working QEMU emulation of a > >> >>> Cortex-A15 board and ethernet controller, or to do > >> >>> something else? > >> >> > >> >> To be very specific I am trying to emulate Ethernet controller of > >> >> KeyStone 2 device from TI > >> >> > >> > >> Device tree driven Linux should minimise the pain of swapping ethernet > >> drivers out to give you a guest that tests such a strange (and > >> non-existant board). TBH, its not a bad starting point to: > >> > >> 1: Write your device model in hw/net > >> 2: Take an ARM Linux port you know works on QEMU > >> 3: Switch on your enet driver in Kconfig > >> 4: Hack device tree to have your ethernet rather than the actual one > >> 5: Hack qemu to have your ethernet instead of real one > >> 6: Boot. > >> > >> But Andreas is right. To do it properly you really need to get the > >> machine model for your actual system going. > >> > >> >> > >> >> > http://processors.wiki.ti.com/index.php/MCSDK_User_Guide_for_KeyStone_II > >> >> > >> >> It is based on CortexA-15 Processor series. So I thought I can use > >> >> vexpress_defconfig and can call > >> >> my Emulated Ethernet controller instead of LAN9118 from vexpress.c. > >> >> > >> > >> Why is the ARM variant really relevant to ethernet controller bringup > >> anyway? I'm not sure what A15 specific features are going to warrant > >> bending over backwards to make a hybrid that has A15 + substituted > >> ethernet. > >> > >> >> After that I will place my Emulated Ethernet controller code(which > >> >> haven't started) inside hw/net . > >> >> > >> >> Is the right way to go forward? > >> > > >> > No, it isn't. If you want to emulate the KeyStone II SoC, then please > do > >> > just that. You will find recent examples on the list of new SoCs that > >> > have been added, including sunxi/A10 and DIGIC. > >> > >> Allwinner is a particularly relevant example. They upstreamed their > >> baseport (CPU, RAM, UART, Timer and Intc only) recently as a minimal > >> series, but are just now adding their ethernet as follow up. > >> > >> This is a good approach, upstream the absolute bare minimum machine > >> model as first series to get a boot. Then go after the optional > >> peripheral device models. > >> > >> So, the Ethernet > >> > controller would be a new device in hw/net/, it is initialized by a > SoC > >> > device in hw/arm/ and to use it you need a standard machine > definition, > >> > such as the EVMK2Hx in your case (some evaluation/reference board > rather > >> > than custom industry boards). Then test that code using a Linux (or > >> > firmware or other OS) that runs on the real board. > >> > > >> > >> Yes, just a new ethernet controller in hw/net is going to be a hard > >> sell without going the extra effort of adding a relevant machine model > >> that uses it. > >> > >> Regards, > >> Peter > >> > >> > Regards, > >> > Andreas > >> > > >> > -- > >> > SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany > >> > GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG > Nürnberg > >> > > > > > >