Message ID | 20190108155354.8591-5-kraxel@redhat.com |
---|---|
State | New |
Headers | show |
Series | None | expand |
Thanks, Gerd. On Tue, 8 Jan 2019 at 23:54, Gerd Hoffmann <kraxel@redhat.com> wrote: > > From: Hongbo Zhang <hongbo.zhang@linaro.org> > > This patch introduces a new system bus generic EHCI controller. > For the system bus EHCI controller, we've already had "xlnx", > "exynos4210", "tegra2", "ppc4xx" and "fusbh200", they are specific and > only suitable for their own platforms, platforms such as an Arm server, > may need a generic system bus EHCI controller, this patch creates it, > and the kernel driver ehci_platform.c works well on it. > > Signed-off-by: Hongbo Zhang <hongbo.zhang@linaro.org> > Message-id: 1546077657-22637-1-git-send-email-hongbo.zhang@linaro.org > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > hw/usb/hcd-ehci.h | 1 + > hw/usb/hcd-ehci-sysbus.c | 17 +++++++++++++++++ > 2 files changed, 18 insertions(+) > > diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h > index 0bc364b286..cd30b5d5e0 100644 > --- a/hw/usb/hcd-ehci.h > +++ b/hw/usb/hcd-ehci.h > @@ -342,6 +342,7 @@ typedef struct EHCIPCIState { > > > #define TYPE_SYS_BUS_EHCI "sysbus-ehci-usb" > +#define TYPE_PLATFORM_EHCI "platform-ehci-usb" > #define TYPE_EXYNOS4210_EHCI "exynos4210-ehci-usb" > #define TYPE_TEGRA2_EHCI "tegra2-ehci-usb" > #define TYPE_PPC4xx_EHCI "ppc4xx-ehci-usb" > diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c > index 3b83beb140..331faf8bc3 100644 > --- a/hw/usb/hcd-ehci-sysbus.c > +++ b/hw/usb/hcd-ehci-sysbus.c > @@ -94,6 +94,22 @@ static const TypeInfo ehci_type_info = { > .class_size = sizeof(SysBusEHCIClass), > }; > > +static void ehci_platform_class_init(ObjectClass *oc, void *data) > +{ > + SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc); > + DeviceClass *dc = DEVICE_CLASS(oc); > + > + sec->capsbase = 0x0; > + sec->opregbase = 0x20; > + set_bit(DEVICE_CATEGORY_USB, dc->categories); > +} > + > +static const TypeInfo ehci_platform_type_info = { > + .name = TYPE_PLATFORM_EHCI, > + .parent = TYPE_SYS_BUS_EHCI, > + .class_init = ehci_platform_class_init, > +}; > + > static void ehci_xlnx_class_init(ObjectClass *oc, void *data) > { > SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc); > @@ -245,6 +261,7 @@ static const TypeInfo ehci_fusbh200_type_info = { > static void ehci_sysbus_register_types(void) > { > type_register_static(&ehci_type_info); > + type_register_static(&ehci_platform_type_info); > type_register_static(&ehci_xlnx_type_info); > type_register_static(&ehci_exynos4210_type_info); > type_register_static(&ehci_tegra2_type_info); > -- > 2.9.3 >
diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h index 0bc364b286..cd30b5d5e0 100644 --- a/hw/usb/hcd-ehci.h +++ b/hw/usb/hcd-ehci.h @@ -342,6 +342,7 @@ typedef struct EHCIPCIState { #define TYPE_SYS_BUS_EHCI "sysbus-ehci-usb" +#define TYPE_PLATFORM_EHCI "platform-ehci-usb" #define TYPE_EXYNOS4210_EHCI "exynos4210-ehci-usb" #define TYPE_TEGRA2_EHCI "tegra2-ehci-usb" #define TYPE_PPC4xx_EHCI "ppc4xx-ehci-usb" diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c index 3b83beb140..331faf8bc3 100644 --- a/hw/usb/hcd-ehci-sysbus.c +++ b/hw/usb/hcd-ehci-sysbus.c @@ -94,6 +94,22 @@ static const TypeInfo ehci_type_info = { .class_size = sizeof(SysBusEHCIClass), }; +static void ehci_platform_class_init(ObjectClass *oc, void *data) +{ + SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc); + DeviceClass *dc = DEVICE_CLASS(oc); + + sec->capsbase = 0x0; + sec->opregbase = 0x20; + set_bit(DEVICE_CATEGORY_USB, dc->categories); +} + +static const TypeInfo ehci_platform_type_info = { + .name = TYPE_PLATFORM_EHCI, + .parent = TYPE_SYS_BUS_EHCI, + .class_init = ehci_platform_class_init, +}; + static void ehci_xlnx_class_init(ObjectClass *oc, void *data) { SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc); @@ -245,6 +261,7 @@ static const TypeInfo ehci_fusbh200_type_info = { static void ehci_sysbus_register_types(void) { type_register_static(&ehci_type_info); + type_register_static(&ehci_platform_type_info); type_register_static(&ehci_xlnx_type_info); type_register_static(&ehci_exynos4210_type_info); type_register_static(&ehci_tegra2_type_info);