All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
Cc: "peter.maydell@linaro.org" <peter.maydell@linaro.org>,
	"sameo@linux.intel.com" <sameo@linux.intel.com>,
	"shannon.zhaosl@gmail.com" <shannon.zhaosl@gmail.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	Linuxarm <linuxarm@huawei.com>,
	"eric.auger@redhat.com" <eric.auger@redhat.com>,
	"qemu-arm@nongnu.org" <qemu-arm@nongnu.org>,
	"xuwei \(O\)" <xuwei5@huawei.com>,
	"sebastien.boeuf@intel.com" <sebastien.boeuf@intel.com>
Subject: Re: [Qemu-arm] [PATCH v2 04/11] hw/arm/virt: Add virtual ACPI device
Date: Fri, 15 Mar 2019 09:41:48 +0100	[thread overview]
Message-ID: <20190315094148.7c3f09e2@redhat.com> (raw)
In-Reply-To: <5FC3163CFD30C246ABAA99954A238FA839314D1E@lhreml524-mbs.china.huawei.com>

On Thu, 14 Mar 2019 16:55:36 +0000
Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com> wrote:

> Hi Igor,
> 
> > -----Original Message-----
> > From: Igor Mammedov [mailto:imammedo@redhat.com]
> > Sent: 12 March 2019 15:48
> > To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> > Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org;
> > eric.auger@redhat.com; peter.maydell@linaro.org;
> > shannon.zhaosl@gmail.com; sameo@linux.intel.com;
> > sebastien.boeuf@intel.com; Linuxarm <linuxarm@huawei.com>; xuwei (O)
> > <xuwei5@huawei.com>
> > Subject: Re: [PATCH v2 04/11] hw/arm/virt: Add virtual ACPI device
> > 
> > On Fri, 8 Mar 2019 11:42:11 +0000
> > Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> wrote:
> >   
> > > From: Samuel Ortiz <sameo@linux.intel.com>
> > >
> > > This is to provide an acpi device interface for Arm/virt.
> > > This will be used by Arm/Virt to add hotplug support via
> > > ACPI GED device.
> > >
> > > Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
> > > Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
> > > ---
> > >  hw/arm/Makefile.objs  |   2 +-
> > >  hw/arm/virt-acpi.c    | 111  
> > ++++++++++++++++++++++++++++++++++++++++++++++++++
> > 
> > does it have to be ARM specific?
> > could it be shared with future x86/virt? (if it could then it would be better to put
> > into hw/acpi/)
> > also considering it implements vitual 'GED' device
> > why not s/virt-acpi/generic-event-device/ ?  
> 
> I think that's a good idea to make it generic and I had a quick go at it.
> 
> But the problem I am facing is as soon as sysbus_create_simple() is called from
> virt_acpi_init(), the realize() function gets called before it sets the VirtAcpiState
> members.

Lets look at it from the other side, what are the reasons to use inherit device
from TYPE_SYS_BUS_DEVICE and use sysbus_create_simple()?

 
> This creates a problem as acpi_memory_hotplug_init() and acpi_ged_init() are
> invoked from the realize() and it needs to have the base address, irq etc set based
> on the platform.
> 
> I tried using the qdev_prop_set_*() as well, but it also fails saying attempt to set
> property after it was realized.
> 
> Not sure what is the best way to solve this other than introducing a global struct to
> hold the configuration.
Globals are frowned upon, we shouldn't do add more.

> 
> Please let me know.
> 
> Thanks,
> Shameer
>  
> >   
> > >  include/hw/arm/virt.h |   1 +
> > >  3 files changed, 113 insertions(+), 1 deletion(-)
> > >  create mode 100644 hw/arm/virt-acpi.c
> > >
> > > diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs
> > > index fa57c7c..e0db3cd 100644
> > > --- a/hw/arm/Makefile.objs
> > > +++ b/hw/arm/Makefile.objs
> > > @@ -1,6 +1,6 @@
> > >  obj-y += boot.o sysbus-fdt.o
> > >  obj-$(CONFIG_ARM_VIRT) += virt.o
> > > -obj-$(CONFIG_ACPI) += virt-acpi-build.o
> > > +obj-$(CONFIG_ACPI) += virt-acpi-build.o virt-acpi.o
> > >  obj-$(CONFIG_DIGIC) += digic_boards.o
> > >  obj-$(CONFIG_EXYNOS4) += exynos4_boards.o
> > >  obj-$(CONFIG_HIGHBANK) += highbank.o
> > > diff --git a/hw/arm/virt-acpi.c b/hw/arm/virt-acpi.c
> > > new file mode 100644
> > > index 0000000..df8a02b
> > > --- /dev/null
> > > +++ b/hw/arm/virt-acpi.c
> > > @@ -0,0 +1,111 @@
> > > +/*
> > > + *
> > > + * Copyright (c) 2018 Intel Corporation
> > > + *
> > > + * This program is free software; you can redistribute it and/or modify it
> > > + * under the terms and conditions of the GNU General Public License,
> > > + * version 2 or later, as published by the Free Software Foundation.
> > > + *
> > > + * This program is distributed in the hope it will be useful, but WITHOUT
> > > + * ANY WARRANTY; without even the implied warranty of  
> > MERCHANTABILITY or  
> > > + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public  
> > License for  
> > > + * more details.
> > > + *
> > > + * You should have received a copy of the GNU General Public License along  
> > with  
> > > + * this program.  If not, see <http://www.gnu.org/licenses/>.
> > > + */
> > > +
> > > +#include "qemu/osdep.h"
> > > +#include "qemu/range.h"
> > > +#include "qapi/error.h"
> > > +#include "exec/address-spaces.h"
> > > +
> > > +#include "hw/hw.h"
> > > +#include "hw/hotplug.h"
> > > +#include "hw/sysbus.h"
> > > +#include "hw/arm/virt.h"
> > > +
> > > +#include "hw/acpi/acpi.h"
> > > +
> > > +typedef struct VirtAcpiState {
> > > +    SysBusDevice parent_obj;
> > > +} VirtAcpiState;
> > > +
> > > +#define TYPE_VIRT_ACPI "virt-acpi"
> > > +#define VIRT_ACPI(obj) \
> > > +    OBJECT_CHECK(VirtAcpiState, (obj), TYPE_VIRT_ACPI)
> > > +
> > > +static const VMStateDescription vmstate_acpi = {
> > > +    .name = "virt_acpi",
> > > +    .version_id = 1,
> > > +    .minimum_version_id = 1,
> > > +};
> > > +
> > > +static void virt_device_plug_cb(HotplugHandler *hotplug_dev,
> > > +                                DeviceState *dev, Error **errp)
> > > +{
> > > +}
> > > +
> > > +static void virt_device_unplug_request_cb(HotplugHandler *hotplug_dev,
> > > +                                          DeviceState *dev, Error  
> > **errp)  
> > > +{
> > > +}
> > > +
> > > +static void virt_device_unplug_cb(HotplugHandler *hotplug_dev,
> > > +                                  DeviceState *dev, Error **errp)
> > > +{
> > > +}
> > > +
> > > +static void virt_send_ged(AcpiDeviceIf *adev, AcpiEventStatusBits ev)
> > > +{
> > > +}
> > > +
> > > +static void virt_device_realize(DeviceState *dev, Error **errp)
> > > +{
> > > +}
> > > +
> > > +DeviceState *virt_acpi_init(void)
> > > +{
> > > +    return sysbus_create_simple(TYPE_VIRT_ACPI, -1, NULL);
> > > +}
> > > +
> > > +static Property virt_acpi_properties[] = {
> > > +    DEFINE_PROP_END_OF_LIST(),
> > > +};
> > > +
> > > +static void virt_acpi_class_init(ObjectClass *class, void *data)
> > > +{
> > > +    DeviceClass *dc = DEVICE_CLASS(class);
> > > +    HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(class);
> > > +    AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_CLASS(class);
> > > +
> > > +    dc->desc = "ACPI";
> > > +    dc->vmsd = &vmstate_acpi;
> > > +    dc->props = virt_acpi_properties;
> > > +    dc->realize = virt_device_realize;
> > > +
> > > +    hc->plug = virt_device_plug_cb;
> > > +    hc->unplug_request = virt_device_unplug_request_cb;
> > > +    hc->unplug = virt_device_unplug_cb;
> > > +
> > > +    adevc->send_event = virt_send_ged;
> > > +}
> > > +
> > > +static const TypeInfo virt_acpi_info = {
> > > +    .name          = TYPE_VIRT_ACPI,
> > > +    .parent        = TYPE_SYS_BUS_DEVICE,
> > > +    .instance_size = sizeof(VirtAcpiState),
> > > +    .class_init    = virt_acpi_class_init,
> > > +    .interfaces = (InterfaceInfo[]) {
> > > +        { TYPE_HOTPLUG_HANDLER },
> > > +        { TYPE_ACPI_DEVICE_IF },
> > > +        { }
> > > +    }
> > > +};
> > > +
> > > +static void virt_acpi_register_types(void)
> > > +{
> > > +    type_register_static(&virt_acpi_info);
> > > +}
> > > +
> > > +type_init(virt_acpi_register_types)
> > > diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> > > index 507517c..6076167 100644
> > > --- a/include/hw/arm/virt.h
> > > +++ b/include/hw/arm/virt.h
> > > @@ -145,6 +145,7 @@ typedef struct {
> > >      OBJECT_CLASS_CHECK(VirtMachineClass, klass,  
> > TYPE_VIRT_MACHINE)  
> > >
> > >  void virt_acpi_setup(VirtMachineState *vms);
> > > +DeviceState *virt_acpi_init(void);
> > >
> > >  /* Return the number of used redistributor regions  */
> > >  static inline int virt_gicv3_redist_region_count(VirtMachineState *vms)  
> 


  reply	other threads:[~2019-03-15  8:42 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-08 11:42 [Qemu-arm] [PATCH v2 00/11] ARM virt: ACPI memory hotplug support Shameer Kolothum
2019-03-08 11:42 ` [Qemu-devel] " Shameer Kolothum
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 01/11] hw/acpi: Move constant definitions to header files Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-08 16:09   ` [Qemu-arm] " Auger Eric
2019-03-08 16:09     ` [Qemu-devel] " Auger Eric
2019-03-08 17:16     ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-08 17:16       ` [Qemu-devel] " Shameerali Kolothum Thodi
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 02/11] hw/acpi: Make ACPI IO address space configurable Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-08 16:13   ` [Qemu-arm] " Auger Eric
2019-03-08 16:13     ` [Qemu-devel] " Auger Eric
2019-03-08 11:42 ` [Qemu-devel] [PATCH v2 03/11] hw/acpi: Do not create memory hotplug method when handler is not defined Shameer Kolothum
2019-03-08 11:42   ` Shameer Kolothum
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 04/11] hw/arm/virt: Add virtual ACPI device Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-11 13:24   ` Auger Eric
2019-03-11 17:36     ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-11 17:36       ` [Qemu-devel] " Shameerali Kolothum Thodi
2019-03-12 15:48   ` [Qemu-arm] " Igor Mammedov
2019-03-14 16:55     ` [Qemu-devel] " Shameerali Kolothum Thodi
2019-03-15  8:41       ` Igor Mammedov [this message]
2019-03-15 12:08         ` Shameerali Kolothum Thodi
2019-03-08 11:42 ` [Qemu-devel] [PATCH v2 05/11] hw/arm/virt: Add memory hotplug framework Shameer Kolothum
2019-03-08 11:42   ` Shameer Kolothum
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 06/11] hw/arm/virt: Add ACPI support for device memory cold-plug Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-11 13:32   ` Auger Eric
2019-03-11 17:37     ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-11 17:37       ` [Qemu-devel] " Shameerali Kolothum Thodi
2019-03-11 17:58       ` [Qemu-arm] " Auger Eric
2019-03-11 17:58         ` [Qemu-devel] " Auger Eric
2019-03-12 14:34         ` [Qemu-arm] " Igor Mammedov
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 07/11] hw/arm/virt-acpi-build: Add PC-DIMM in SRAT Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-11 14:55   ` [Qemu-arm] " Igor Mammedov
2019-03-11 14:55     ` [Qemu-devel] " Igor Mammedov
2019-03-12  9:57     ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-12 12:50       ` Igor Mammedov
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 08/11] hw/arm/boot: Expose the PC-DIMM nodes in the DT Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-11 14:58   ` [Qemu-arm] " Igor Mammedov
2019-03-11 14:58     ` [Qemu-devel] " Igor Mammedov
2019-03-12 15:13     ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-12 15:38       ` [Qemu-arm] [Qemu-devel] " Auger Eric
2019-03-12 16:39         ` Shameerali Kolothum Thodi
2019-03-12 16:47           ` Auger Eric
2019-03-12 16:56             ` Shameerali Kolothum Thodi
2019-03-13 11:12               ` Auger Eric
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 09/11] hw/acpi: Add ACPI Generic Event Device Support Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-11 20:23   ` Auger Eric
2019-03-14 11:33     ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-18 12:26   ` [Qemu-devel] " Igor Mammedov
2019-03-18 15:04     ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-18 17:00       ` Igor Mammedov
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 10/11] hw/arm/virt: Add GED device configuration and build aml Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-11 21:11   ` [Qemu-arm] " Auger Eric
2019-03-11 21:11     ` [Qemu-devel] " Auger Eric
2019-03-08 11:42 ` [Qemu-arm] [PATCH v2 11/11] hw/arm/virt: Add GED irq routing and Enable memory hotplug Shameer Kolothum
2019-03-08 11:42   ` [Qemu-devel] " Shameer Kolothum
2019-03-08 15:54 ` [Qemu-devel] [PATCH v2 00/11] ARM virt: ACPI memory hotplug support Auger Eric
2019-03-08 16:00   ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-03-08 16:00     ` [Qemu-devel] " Shameerali Kolothum Thodi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190315094148.7c3f09e2@redhat.com \
    --to=imammedo@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=linuxarm@huawei.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sameo@linux.intel.com \
    --cc=sebastien.boeuf@intel.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=shannon.zhaosl@gmail.com \
    --cc=xuwei5@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.