qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 1/6] hw/misc/dyn_sysbus_binding: helpers for


From: Alexander Graf
Subject: Re: [Qemu-devel] [PATCH v3 1/6] hw/misc/dyn_sysbus_binding: helpers for sysbus device dynamic binding
Date: Wed, 10 Sep 2014 16:38:40 +0200


> Am 10.09.2014 um 16:18 schrieb Paolo Bonzini <address@hidden>:
> 
> Il 10/09/2014 15:51, Eric Auger ha scritto:
>>> On 09/10/2014 12:09 PM, Alexander Graf wrote:
>>> 
>>> 
>>>> On 10.09.14 12:05, Paolo Bonzini wrote:
>>>> Il 10/09/2014 11:56, Alexander Graf ha scritto:
>>>>> 
>>>>> 
>>>>>> On 10.09.14 11:43, Paolo Bonzini wrote:
>>>>>> Il 10/09/2014 11:31, Alexander Graf ha scritto:
>>>>>>>>> Yeah, please do the registration in sysbus.c, not in virt.c.  There is
>>>>>>>>> no reason to make the platform_bus_init_notify+DynSysbusNotifier
>>>>>>>>> interface public.  The code in sysbus.c can fill in the fields.
>>>>>>> Sysbus != Platform bus. Sysbus is an in-QEMU representation of a
>>>>>>> pseudo-bus that we put all devices onto that we consider unsorted.
>>>>>>> 
>>>>>>> Platform bus is a machine representation of an actual bus that devices
>>>>>>> are attached to. These devices usually are sysbus devices.
>>>>>> 
>>>>>> Is there any difference between the two?
>>>>>> 
>>>>>> Take a machine that has two chips, a SoC that does everything except
>>>>>> USB, and a USB controller chip.
>>>>>> 
>>>>>> Strictly speaking the USB controller chip would be on a "platform bus",
>>>>>> but we would likely put it on sysbus.
>>>>>> 
>>>>>> Why should it matter whether the devices are static or dynamic, for the
>>>>>> sake of calling something the "system" or the "platform" bus?  I would
>>>>>> say that QEMU calls "sysbus" the platform bus.
>>>>>> 
>>>>>> Some devices (e.g. the local APIC in x86, or the in-core timers and GIC
>>>>>> in ARM) should probably not be in sysbus at all, and should attach
>>>>>> directly to the CPU address space.  But that is a quirk in the modeling
>>>>>> of those devices, it shouldn't mean that sysbus is not a "platform" bus.
>>>>> 
>>>>> On e500 for example, we have a predefined CCSR region. That is a machine
>>>>> defined "platform bus". The offsets inside that region are strictly
>>>>> defined by the spec.
>>>>> 
>>>>> Now take the serial ports. We have space for 2 serial ports inside of
>>>>> that CCSR region. We can spawn these 2 ports in the machine file based
>>>>> on -serial, but if you want to spawn them with -device, how do you tell
>>>>> the machine whether they should go into the "big bucket platform bus" or
>>>>> the "CCSR platform bus"?
>>>> 
>>>> Two possibilities:
>>>> 
>>>> 1) you would use two instances of sysbus (one default, one created by
>>>> the board) and specify ",bus=ccsr" on the command line when you want to
>>>> add the device to the CCSR region.
>>>> 
>>>> The two would work exactly the same way, only with different algorithms
>>>> for resource allocation.
>>>> 
>>>> 2) similar to ISA, you would create a new ccsr-bus device and a new
>>>> ccsr-serial device, and use -device ccsr-serial,index=[0|1],chardev=foo
>>>> to specify which of the two serial ports this is for.  Most of the fdt
>>>> magic could be shared by the sysbus and CCSR cases.
>>>> 
>>>> I think I prefer (2)...
>>> 
>>> Fair enough.
>>> 
>>> As far as moving "platform bus" logic into sysbus, I'd really like to
>>> hold back and see what this whole thing ends up getting used for first.
>>> 
>>> So for now, I'd definitely prefer to keep "platform bus" logic and
>>> "sysbus" logic separate. If we realize that every user only ever uses
>>> the dynamic sysbus creation in conjunction with our "platform bus"
>>> implementation, we can merge them.
>> 
>> Hi Paolo, Alex,
>> 
>> I understand I keep the code in a separate module from sysbus.c. Is that
>> the shared conclusion?
> 
> I don't think so, but maybe I misunderstood what Alex wrote.

I still think it shouldn't be inside the sysbus files. You can use sysbus 
devices without a platform bus.

Alex

> 
> Paolo
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]