On Thu, Oct 25, 2012 at 11:14 PM, Gerd Hoffmann <[email protected]> wrote: > On 10/25/12 14:56, Peter Crosthwaite wrote: >> On Thu, Oct 25, 2012 at 10:16 PM, Peter Maydell >> <[email protected]> wrote: >>> On 25 October 2012 13:12, Gerd Hoffmann <[email protected]> wrote: >>>>> +static inline void zynq_init_usb(uint32_t base_addr, qemu_irq irq) >>>>> +{ >>>>> + DeviceState *dev = qdev_create(NULL, "ehci-sysbus"); >>>> >>>> I'd suggest to have a "ehci-sysbus-zynq" device instead which sets >>>> capsbase & opregbase in ->init() ... >>>> >>>>> + qdev_prop_set_uint16(dev, "capabase", 0x100); >>>>> + qdev_prop_set_uint32(dev, "opregbase", 0x140); >>>> >>>> ... then drop these lines. >>> >>> That sounds weird to me -- properties are exactly the mechanism >>> for having a device which is configurable. Why have two differently >>> named devices which only differ in the value of a configurable >>> property? > >> Yes I agree. Creating a now QOM definition for every variant of a >> device is tedious. EHCI provides a nice abstraction which should not >> have awareness of its particular implementations. > > Maybe "zynq" is the wrong abstraction and this should be named by the > actual ehci chip implementation (which could be the same for a bunch of > sysbus boards). > > But, yes, different chips should have different QOM definitions. Like > we have a bunch of different uhci variants with a QOM definition for > each of them. >
Can we at least take a data driven approach to this? Get the device names and their varying parameters into a big table up top and they just create N device defs from it? hw/m25p80 is one example of a device that does something similar although the variation is selected using a single qdev prop rather than the QOM names. > cheers, > Gerd > >
