On Wed, 12 Mar 2025 at 10:44, Cédric Le Goater <c...@kaod.org> wrote:
>
> On 3/12/25 11:27, Philippe Mathieu-Daudé wrote:
> > + Cédric for Aspeed
> >
> > On 12/3/25 11:20, Peter Maydell wrote:
> >> The bug is that this is directly inheriting from TYPE_DEVICE,
> >> not from TYPE_SYSBUS_DEVICE. Doing the former is almost always
> >> wrong, because it means the device is never reset.
> >>
> >> (It looks like we do this wrong for other fsl SoCs too,
> >> but they're marked user_creatable = false.)
> >
> > IIRC it is deliberately that way for the Aspeed SoCs, because
> > otherwise there were issue when building the multi-SoC fby35 machines

Multi-SoC shouldn't have a problem with sysbus devices existing.
They just mean that you can't use the convenient sysbus_mmio_map()
function but have to be more careful with managing MemoryRegions
in the different SoCs and using sysbus_mmio_get_region() to get
a sysbus device's MMIO regions so you can manually map them to
the right places.

> AspeedSoCState was introduced long ago (2016) and the fby35 is "recent",
> from 2022. I am not sure that's the reason.
>
> Regarding the reset, the SoC functions are sysbus devices and all have
> a reset. The SoC doesn't have any. Maybe that's why we are not seeing
> issues.

Yeah, it works out in this case. But I think it is in general
a bad idea to add new direct-inheritors from TYPE_DEVICE.
If anybody needs to add a reset method to the SoC container
object in future then they'll be confused about why it doesn't
work, for instance.

I think that in general people expect that TYPE_DEVICE is
"devices are like this" and TYPE_SYSBUS_DEVICE is "if you
also need the sysbus-specifics, most notably providing MMIO
regions for registers". That's a totally reasonable expectation
but unfortunately it's wrong, because a few key parts of
"this is an internal device that we don't need users to create"
are only in TYPE_SYSBUS_DEVICE.

thanks
-- PMM

Reply via email to