From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Zhang Rui <rui.zhang@intel.com>
Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
bhelgaas@google.com, matthew.garrett@nebula.com,
rafael.j.wysocki@intel.com, dmitry.torokhov@gmail.com
Subject: Re: [PATCH V6 07/11] ACPI: introduce dummy lpss scan handler
Date: Thu, 22 May 2014 12:57:27 +0300 [thread overview]
Message-ID: <20140522095727.GD1651@lahna.fi.intel.com> (raw)
In-Reply-To: <1400684219.13930.37.camel@rzhang1-toshiba>
On Wed, May 21, 2014 at 10:56:59PM +0800, Zhang Rui wrote:
> On 三, 2014-05-21 at 11:48 +0300, Mika Westerberg wrote:
> > On Thu, May 15, 2014 at 02:44:12PM +0800, Zhang Rui wrote:
> > > The new ACPI device enumeration mechanism, which will be introduced
> > > in a later patch, will enumerate the _HID devices w/o any scan
> > > handler attached to platform bus.
> > > This means that, for the devices that are attached to a configurable
> > > scan handler, we should make sure no platform devices would be
> > > created for them even if the scan handler is compiled out.
> > >
> > > Fix this problem for lpss devices by introducing a dummy
> > > lpss scan handler in this patch.
> > >
> > > Plus, if lpt_clk_init() fails, we need this dummy scan handler as well.
> > >
> > > Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> > > ---
> > > drivers/acpi/Makefile | 2 +-
> > > drivers/acpi/acpi_lpss.c | 69 ++++++++++++++++++++++++++++++++++--------------
> > > drivers/acpi/internal.h | 4 ---
> > > 3 files changed, 50 insertions(+), 25 deletions(-)
> > >
> > > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> > > index 171efc2..605eff7 100644
> > > --- a/drivers/acpi/Makefile
> > > +++ b/drivers/acpi/Makefile
> > > @@ -39,7 +39,7 @@ acpi-y += processor_core.o
> > > acpi-y += ec.o
> > > acpi-$(CONFIG_ACPI_DOCK) += dock.o
> > > acpi-y += pci_root.o pci_link.o pci_irq.o
> > > -acpi-$(CONFIG_X86_INTEL_LPSS) += acpi_lpss.o
> > > +acpi-y += acpi_lpss.o
> > > acpi-y += acpi_platform.o
> > > acpi-y += acpi_pnp.o
> > > acpi-y += power.o
> > > diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
> > > index 69e29f4..965428f 100644
> > > --- a/drivers/acpi/acpi_lpss.c
> > > +++ b/drivers/acpi/acpi_lpss.c
> > > @@ -24,6 +24,8 @@
> > >
> > > ACPI_MODULE_NAME("acpi_lpss");
> > >
> > > +#ifdef CONFIG_X86_INTEL_LPSS
> > > +
> > > #define LPSS_CLK_SIZE 0x04
> > > #define LPSS_LTR_SIZE 0x18
> > >
> > > @@ -159,40 +161,50 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
> > > .shared_clock = &i2c_clock,
> > > };
> > >
> > > +#define LPSS_PTR(desc) ((unsigned long)&desc)
> > > +
> > > +#else
> > > +
> > > +#define LPSS_PTR(desc) 0
> > > +
> > > +#endif
> > > +
> > > static const struct acpi_device_id acpi_lpss_device_ids[] = {
> > > /* Generic LPSS devices */
> > > - { "INTL9C60", (unsigned long)&lpss_dma_desc },
> > > + { "INTL9C60", LPSS_PTR(lpss_dma_desc) },
> > >
> > > /* Lynxpoint LPSS devices */
> > > - { "INT33C0", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C1", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C2", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C3", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C4", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT33C5", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT33C6", (unsigned long)&lpt_sdio_dev_desc },
> > > + { "INT33C0", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C1", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C2", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C3", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C4", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT33C5", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT33C6", LPSS_PTR(lpt_sdio_dev_desc) },
> > > { "INT33C7", },
> > >
> > > /* BayTrail LPSS devices */
> > > - { "80860F09", (unsigned long)&byt_pwm_dev_desc },
> > > - { "80860F0A", (unsigned long)&byt_uart_dev_desc },
> > > - { "80860F0E", (unsigned long)&byt_spi_dev_desc },
> > > - { "80860F14", (unsigned long)&byt_sdio_dev_desc },
> > > - { "80860F41", (unsigned long)&byt_i2c_dev_desc },
> > > + { "80860F09", LPSS_PTR(byt_pwm_dev_desc) },
> > > + { "80860F0A", LPSS_PTR(byt_uart_dev_desc) },
> > > + { "80860F0E", LPSS_PTR(byt_spi_dev_desc) },
> > > + { "80860F14", LPSS_PTR(byt_sdio_dev_desc) },
> > > + { "80860F41", LPSS_PTR(byt_i2c_dev_desc) },
> > > { "INT33B2", },
> > >
> > > - { "INT3430", (unsigned long)&lpt_dev_desc },
> > > - { "INT3431", (unsigned long)&lpt_dev_desc },
> > > - { "INT3432", (unsigned long)&lpt_dev_desc },
> > > - { "INT3433", (unsigned long)&lpt_dev_desc },
> > > - { "INT3434", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT3435", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT3436", (unsigned long)&lpt_sdio_dev_desc },
> > > + { "INT3430", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3431", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3432", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3433", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3434", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT3435", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT3436", LPSS_PTR(lpt_sdio_dev_desc) },
> > > { "INT3437", },
> > >
> > > { }
> > > };
> > >
> > > +#ifdef CONFIG_X86_INTEL_LPSS
> > > +
> > > static int is_memory(struct acpi_resource *res, void *not_used)
> > > {
> > > struct resource r;
> > > @@ -511,10 +523,27 @@ static struct acpi_scan_handler lpss_handler = {
> > > .unbind = acpi_lpss_unbind,
> > > };
> > >
> > > +#endif /* CONFIG_X86_INTEL_LPSS */
> > > +
> > > +static int acpi_lpss_dummy_attach(struct acpi_device *adev,
> > > + const struct acpi_device_id *id)
> > > +{
> > > + return 1;
> > > +}
> > > +
> > > +static struct acpi_scan_handler lpss_dummy_handler = {
> > > + .ids = acpi_lpss_device_ids,
> > > + .attach = acpi_lpss_dummy_attach,
> > > +};
> > > +
> > > void __init acpi_lpss_init(void)
> > > {
> > > +#ifdef CONFIG_X86_INTEL_LPSS
> > > if (!lpt_clk_init()) {
> > > bus_register_notifier(&platform_bus_type, &acpi_lpss_nb);
> > > acpi_scan_add_handler(&lpss_handler);
> > > + return;
> > > }
> > > +#endif
> >
> > This whole #ifndef dance is ugly as hell. Can't we do any better?
> >
> > > + acpi_scan_add_handler(&lpss_dummy_handler);
> >
> > Also I don't like these "dummy" things at all. Can't we make the code
> > work so that those are not needed?
> >
> well, I'm not sure how to make it work w/o dummy handlers.
> Do you have any idea?
>
> Oh, wait, as the .attach() callback for all the dummy handler just do
> one thing, aka, return 1 to attach the device, I think maybe we can have
> an acpi_scan_handler_dummy_attach() which does the same thing in
> drivers/acpi/scan.c, and invoke it for scan handlers w/o .attach().
> In this way, we do not need a dummy handler, but the #ifdef thing is
> still needed, to set/clear the .attach() callback.
> I will do a double check if this proposal sounds okay to you.
Yes it sounds ok to me.
I tried to figure out some way to get rid of the #ifdefs but couldn't
find any reasonable solution :-(
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Zhang Rui <rui.zhang@intel.com>
Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
bhelgaas@google.com, matthew.garrett@nebula.com,
rafael.j.wysocki@intel.com, dmitry.torokhov@gmail.com
Subject: Re: [PATCH V6 07/11] ACPI: introduce dummy lpss scan handler
Date: Thu, 22 May 2014 12:57:27 +0300 [thread overview]
Message-ID: <20140522095727.GD1651@lahna.fi.intel.com> (raw)
In-Reply-To: <1400684219.13930.37.camel@rzhang1-toshiba>
On Wed, May 21, 2014 at 10:56:59PM +0800, Zhang Rui wrote:
> On 三, 2014-05-21 at 11:48 +0300, Mika Westerberg wrote:
> > On Thu, May 15, 2014 at 02:44:12PM +0800, Zhang Rui wrote:
> > > The new ACPI device enumeration mechanism, which will be introduced
> > > in a later patch, will enumerate the _HID devices w/o any scan
> > > handler attached to platform bus.
> > > This means that, for the devices that are attached to a configurable
> > > scan handler, we should make sure no platform devices would be
> > > created for them even if the scan handler is compiled out.
> > >
> > > Fix this problem for lpss devices by introducing a dummy
> > > lpss scan handler in this patch.
> > >
> > > Plus, if lpt_clk_init() fails, we need this dummy scan handler as well.
> > >
> > > Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> > > ---
> > > drivers/acpi/Makefile | 2 +-
> > > drivers/acpi/acpi_lpss.c | 69 ++++++++++++++++++++++++++++++++++--------------
> > > drivers/acpi/internal.h | 4 ---
> > > 3 files changed, 50 insertions(+), 25 deletions(-)
> > >
> > > diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
> > > index 171efc2..605eff7 100644
> > > --- a/drivers/acpi/Makefile
> > > +++ b/drivers/acpi/Makefile
> > > @@ -39,7 +39,7 @@ acpi-y += processor_core.o
> > > acpi-y += ec.o
> > > acpi-$(CONFIG_ACPI_DOCK) += dock.o
> > > acpi-y += pci_root.o pci_link.o pci_irq.o
> > > -acpi-$(CONFIG_X86_INTEL_LPSS) += acpi_lpss.o
> > > +acpi-y += acpi_lpss.o
> > > acpi-y += acpi_platform.o
> > > acpi-y += acpi_pnp.o
> > > acpi-y += power.o
> > > diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
> > > index 69e29f4..965428f 100644
> > > --- a/drivers/acpi/acpi_lpss.c
> > > +++ b/drivers/acpi/acpi_lpss.c
> > > @@ -24,6 +24,8 @@
> > >
> > > ACPI_MODULE_NAME("acpi_lpss");
> > >
> > > +#ifdef CONFIG_X86_INTEL_LPSS
> > > +
> > > #define LPSS_CLK_SIZE 0x04
> > > #define LPSS_LTR_SIZE 0x18
> > >
> > > @@ -159,40 +161,50 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
> > > .shared_clock = &i2c_clock,
> > > };
> > >
> > > +#define LPSS_PTR(desc) ((unsigned long)&desc)
> > > +
> > > +#else
> > > +
> > > +#define LPSS_PTR(desc) 0
> > > +
> > > +#endif
> > > +
> > > static const struct acpi_device_id acpi_lpss_device_ids[] = {
> > > /* Generic LPSS devices */
> > > - { "INTL9C60", (unsigned long)&lpss_dma_desc },
> > > + { "INTL9C60", LPSS_PTR(lpss_dma_desc) },
> > >
> > > /* Lynxpoint LPSS devices */
> > > - { "INT33C0", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C1", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C2", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C3", (unsigned long)&lpt_dev_desc },
> > > - { "INT33C4", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT33C5", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT33C6", (unsigned long)&lpt_sdio_dev_desc },
> > > + { "INT33C0", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C1", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C2", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C3", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT33C4", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT33C5", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT33C6", LPSS_PTR(lpt_sdio_dev_desc) },
> > > { "INT33C7", },
> > >
> > > /* BayTrail LPSS devices */
> > > - { "80860F09", (unsigned long)&byt_pwm_dev_desc },
> > > - { "80860F0A", (unsigned long)&byt_uart_dev_desc },
> > > - { "80860F0E", (unsigned long)&byt_spi_dev_desc },
> > > - { "80860F14", (unsigned long)&byt_sdio_dev_desc },
> > > - { "80860F41", (unsigned long)&byt_i2c_dev_desc },
> > > + { "80860F09", LPSS_PTR(byt_pwm_dev_desc) },
> > > + { "80860F0A", LPSS_PTR(byt_uart_dev_desc) },
> > > + { "80860F0E", LPSS_PTR(byt_spi_dev_desc) },
> > > + { "80860F14", LPSS_PTR(byt_sdio_dev_desc) },
> > > + { "80860F41", LPSS_PTR(byt_i2c_dev_desc) },
> > > { "INT33B2", },
> > >
> > > - { "INT3430", (unsigned long)&lpt_dev_desc },
> > > - { "INT3431", (unsigned long)&lpt_dev_desc },
> > > - { "INT3432", (unsigned long)&lpt_dev_desc },
> > > - { "INT3433", (unsigned long)&lpt_dev_desc },
> > > - { "INT3434", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT3435", (unsigned long)&lpt_uart_dev_desc },
> > > - { "INT3436", (unsigned long)&lpt_sdio_dev_desc },
> > > + { "INT3430", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3431", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3432", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3433", LPSS_PTR(lpt_dev_desc) },
> > > + { "INT3434", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT3435", LPSS_PTR(lpt_uart_dev_desc) },
> > > + { "INT3436", LPSS_PTR(lpt_sdio_dev_desc) },
> > > { "INT3437", },
> > >
> > > { }
> > > };
> > >
> > > +#ifdef CONFIG_X86_INTEL_LPSS
> > > +
> > > static int is_memory(struct acpi_resource *res, void *not_used)
> > > {
> > > struct resource r;
> > > @@ -511,10 +523,27 @@ static struct acpi_scan_handler lpss_handler = {
> > > .unbind = acpi_lpss_unbind,
> > > };
> > >
> > > +#endif /* CONFIG_X86_INTEL_LPSS */
> > > +
> > > +static int acpi_lpss_dummy_attach(struct acpi_device *adev,
> > > + const struct acpi_device_id *id)
> > > +{
> > > + return 1;
> > > +}
> > > +
> > > +static struct acpi_scan_handler lpss_dummy_handler = {
> > > + .ids = acpi_lpss_device_ids,
> > > + .attach = acpi_lpss_dummy_attach,
> > > +};
> > > +
> > > void __init acpi_lpss_init(void)
> > > {
> > > +#ifdef CONFIG_X86_INTEL_LPSS
> > > if (!lpt_clk_init()) {
> > > bus_register_notifier(&platform_bus_type, &acpi_lpss_nb);
> > > acpi_scan_add_handler(&lpss_handler);
> > > + return;
> > > }
> > > +#endif
> >
> > This whole #ifndef dance is ugly as hell. Can't we do any better?
> >
> > > + acpi_scan_add_handler(&lpss_dummy_handler);
> >
> > Also I don't like these "dummy" things at all. Can't we make the code
> > work so that those are not needed?
> >
> well, I'm not sure how to make it work w/o dummy handlers.
> Do you have any idea?
>
> Oh, wait, as the .attach() callback for all the dummy handler just do
> one thing, aka, return 1 to attach the device, I think maybe we can have
> an acpi_scan_handler_dummy_attach() which does the same thing in
> drivers/acpi/scan.c, and invoke it for scan handlers w/o .attach().
> In this way, we do not need a dummy handler, but the #ifdef thing is
> still needed, to set/clear the .attach() callback.
> I will do a double check if this proposal sounds okay to you.
Yes it sounds ok to me.
I tried to figure out some way to get rid of the #ifdefs but couldn't
find any reasonable solution :-(
next prev parent reply other threads:[~2014-05-22 9:57 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-15 6:44 [PATCH V6 00/11] ACPI: ACPI enumeration rework Zhang Rui
2014-05-15 6:44 ` Zhang Rui
2014-05-15 6:44 ` [PATCH V6 01/11] ACPI: introduce .match() callback for ACPI scan handler Zhang Rui
2014-05-15 6:44 ` [PATCH V6 02/11] PNPACPI: use whilte list for pnpacpi device enumeration Zhang Rui
2014-05-15 6:44 ` [PATCH V6 03/11] ACPI: remove ids that does not comply with the ACPI PNP id rule Zhang Rui
2014-05-15 6:44 ` [PATCH V6 04/11] ACPI: remove unsupported serial PNP ids from acpi pnp scan handler id lsit Zhang Rui
2014-05-15 6:44 ` [PATCH V6 05/11] ACPI: introduce dummy container scan handler Zhang Rui
2014-05-15 6:44 ` [PATCH V6 06/11] ACPI: introduce dummy memory hotplug " Zhang Rui
2014-05-15 6:44 ` [PATCH V6 07/11] ACPI: introduce dummy lpss " Zhang Rui
2014-05-21 8:48 ` Mika Westerberg
2014-05-21 14:56 ` Zhang Rui
2014-05-22 9:57 ` Mika Westerberg [this message]
2014-05-22 9:57 ` Mika Westerberg
2014-05-15 6:44 ` [PATCH V6 08/11] ACPI: introduce platform_id flag Zhang Rui
2014-05-15 6:44 ` [PATCH V6 09/11] ACPI: introduce flag .is_master_device Zhang Rui
2014-05-21 8:52 ` Mika Westerberg
2014-05-21 11:10 ` Rafael J. Wysocki
2014-05-21 11:04 ` Mika Westerberg
2014-05-21 11:59 ` Rafael J. Wysocki
2014-05-21 15:09 ` Zhang Rui
2014-05-22 8:08 ` Mika Westerberg
2014-05-22 8:08 ` Mika Westerberg
2014-05-21 14:43 ` Zhang Rui
2014-05-21 14:43 ` Zhang Rui
2014-05-22 8:51 ` Mika Westerberg
2014-05-22 14:26 ` Zhang Rui
2014-05-15 6:44 ` [PATCH V6 10/11] ACPI: use platform bus as the default bus for _HID enumeration Zhang Rui
2014-05-22 9:58 ` Mika Westerberg
2014-05-15 6:44 ` [PATCH V6 11/11] ACPI: introduce acpi platform exclude id list Zhang Rui
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=20140522095727.GD1651@lahna.fi.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew.garrett@nebula.com \
--cc=rafael.j.wysocki@intel.com \
--cc=rui.zhang@intel.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.