linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources
@ 2023-06-20 16:35 Andy Shevchenko
  2023-06-20 16:35 ` [PATCH v1 2/2] ACPI: platform: Move SMB0001 HID to the header and reuse Andy Shevchenko
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Andy Shevchenko @ 2023-06-20 16:35 UTC (permalink / raw)
  To: Andy Shevchenko, Rafael J. Wysocki, Wolfram Sang, linux-acpi,
	linux-kernel, linux-i2c, acpica-devel
  Cc: Rafael J. Wysocki, Len Brown, Andi Shyti, Robert Moore, Michael Brunner

After switchind i2c-scmi driver to be a plaform one it stopped
being enumerated on number of Kontron platformsm, because it's
listed in the forbidden_id_list.

To resolve the situation, split the list to generic one and
another that holds devices that has to be skiped if and only if
they have bogus resources attached (_CRS method returns some).

Fixes: 03d4287add6e ("i2c: scmi: Convert to be a platform driver")
Closes: https://lore.kernel.org/r/60c1756765b9a3f1eab0dcbd84f59f00fe1caf48.camel@kontron.com
Reported-by: Michael Brunner <michael.brunner@kontron.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/acpi/acpi_platform.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index fe00a5783f53..089a98bd18bf 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -19,13 +19,17 @@
 
 #include "internal.h"
 
+static const struct acpi_device_id forbidden_id_with_resourses[] = {
+	{"SMB0001",  0},	/* ACPI SMBUS virtual device */
+	{ }
+};
+
 static const struct acpi_device_id forbidden_id_list[] = {
 	{"ACPI0009", 0},	/* IOxAPIC */
 	{"ACPI000A", 0},	/* IOAPIC */
 	{"PNP0000",  0},	/* PIC */
 	{"PNP0100",  0},	/* Timer */
 	{"PNP0200",  0},	/* AT DMA Controller */
-	{"SMB0001",  0},	/* ACPI SMBUS virtual device */
 	{ }
 };
 
@@ -83,6 +87,15 @@ static void acpi_platform_fill_resource(struct acpi_device *adev,
 		dest->parent = pci_find_resource(to_pci_dev(parent), dest);
 }
 
+static int acpi_platform_resource_count(struct acpi_resource *ares, void *data)
+{
+	int *count = data;
+
+	*count = *count + 1;
+
+	return 1;
+}
+
 /**
  * acpi_create_platform_device - Create platform device for ACPI device node
  * @adev: ACPI device node to create a platform device for.
@@ -103,7 +116,8 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
 	struct resource_entry *rentry;
 	struct list_head resource_list;
 	struct resource *resources = NULL;
-	int count;
+	int count = 0;
+	int ret;
 
 	/* If the ACPI node already has a physical device attached, skip it. */
 	if (adev->physical_node_count)
@@ -113,6 +127,15 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
 		return ERR_PTR(-EINVAL);
 
 	INIT_LIST_HEAD(&resource_list);
+	ret = acpi_dev_get_resources(adev, &resource_list, acpi_platform_resource_count, &count);
+	if (ret < 0)
+		return ERR_PTR(ret);
+
+	acpi_dev_free_resource_list(&resource_list);
+
+	if (count > 0 && !acpi_match_device_ids(adev, forbidden_id_with_resourses))
+		return ERR_PTR(-EINVAL);
+
 	count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
 	if (count < 0)
 		return NULL;
-- 
2.40.0.1.gaa8946217a0b


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 2/2] ACPI: platform: Move SMB0001 HID to the header and reuse
  2023-06-20 16:35 [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Andy Shevchenko
@ 2023-06-20 16:35 ` Andy Shevchenko
  2023-06-21  9:31   ` Andi Shyti
  2023-06-21  7:46 ` [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Michael Brunner
  2023-06-21  9:30 ` Andi Shyti
  2 siblings, 1 reply; 8+ messages in thread
From: Andy Shevchenko @ 2023-06-20 16:35 UTC (permalink / raw)
  To: Andy Shevchenko, Rafael J. Wysocki, Wolfram Sang, linux-acpi,
	linux-kernel, linux-i2c, acpica-devel
  Cc: Rafael J. Wysocki, Len Brown, Andi Shyti, Robert Moore

There are at least two places in the kernel that are using
the SMB0001 HID. Make it to be available via acpi_drivers.h
header file. While at it, replace hard coded one with a
definition.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/acpi/acpi_platform.c  | 2 +-
 drivers/i2c/busses/i2c-scmi.c | 3 ---
 include/acpi/acpi_drivers.h   | 2 ++
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index 089a98bd18bf..e86f76ee3473 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -20,7 +20,7 @@
 #include "internal.h"
 
 static const struct acpi_device_id forbidden_id_with_resourses[] = {
-	{"SMB0001",  0},	/* ACPI SMBUS virtual device */
+	{ACPI_SMBUS_MS_HID,  0},	/* ACPI SMBUS virtual device */
 	{ }
 };
 
diff --git a/drivers/i2c/busses/i2c-scmi.c b/drivers/i2c/busses/i2c-scmi.c
index 104570292241..421735acfa14 100644
--- a/drivers/i2c/busses/i2c-scmi.c
+++ b/drivers/i2c/busses/i2c-scmi.c
@@ -13,9 +13,6 @@
 #include <linux/i2c.h>
 #include <linux/acpi.h>
 
-/* SMBUS HID definition as supported by Microsoft Windows */
-#define ACPI_SMBUS_MS_HID		"SMB0001"
-
 struct smbus_methods_t {
 	char *mt_info;
 	char *mt_sbr;
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index 8372b0e7fd15..b14d165632e7 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -27,6 +27,8 @@
 #define ACPI_BAY_HID			"LNXIOBAY"
 #define ACPI_DOCK_HID			"LNXDOCK"
 #define ACPI_ECDT_HID			"LNXEC"
+/* SMBUS HID definition as supported by Microsoft Windows */
+#define ACPI_SMBUS_MS_HID		"SMB0001"
 /* Quirk for broken IBM BIOSes */
 #define ACPI_SMBUS_IBM_HID		"SMBUSIBM"
 
-- 
2.40.0.1.gaa8946217a0b


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources
  2023-06-20 16:35 [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Andy Shevchenko
  2023-06-20 16:35 ` [PATCH v1 2/2] ACPI: platform: Move SMB0001 HID to the header and reuse Andy Shevchenko
@ 2023-06-21  7:46 ` Michael Brunner
  2023-06-21  9:30   ` Andi Shyti
  2023-06-21  9:30 ` Andi Shyti
  2 siblings, 1 reply; 8+ messages in thread
From: Michael Brunner @ 2023-06-21  7:46 UTC (permalink / raw)
  To: andriy.shevchenko, acpica-devel, rafael.j.wysocki, linux-kernel,
	linux-i2c, wsa, linux-acpi
  Cc: robert.moore, rafael, lenb, andi.shyti

On Tue, 2023-06-20 at 19:35 +0300, Andy Shevchenko wrote:
> After switchind i2c-scmi driver to be a plaform one it stopped
> being enumerated on number of Kontron platformsm, because it's
> listed in the forbidden_id_list.
> 
> To resolve the situation, split the list to generic one and
> another that holds devices that has to be skiped if and only if
> they have bogus resources attached (_CRS method returns some).
> 
> Fixes: 03d4287add6e ("i2c: scmi: Convert to be a platform driver")
> Closes: https://lore.kernel.org/r/60c1756765b9a3f1eab0dcbd84f59f00fe1caf48.camel@kontron.com
> Reported-by: Michael Brunner <michael.brunner@kontron.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Works as expected - the SMB0001 device shows up as platform device and
the i2c-scmi driver is enumerated again on the affected boards.
Thanks a lot!

Best regards,
  Michael Brunner

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources
  2023-06-20 16:35 [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Andy Shevchenko
  2023-06-20 16:35 ` [PATCH v1 2/2] ACPI: platform: Move SMB0001 HID to the header and reuse Andy Shevchenko
  2023-06-21  7:46 ` [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Michael Brunner
@ 2023-06-21  9:30 ` Andi Shyti
  2 siblings, 0 replies; 8+ messages in thread
From: Andi Shyti @ 2023-06-21  9:30 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Rafael J. Wysocki, Wolfram Sang, linux-acpi, linux-kernel,
	linux-i2c, acpica-devel, Rafael J. Wysocki, Len Brown,
	Robert Moore, Michael Brunner

Hi Andy,

On Tue, Jun 20, 2023 at 07:35:33PM +0300, Andy Shevchenko wrote:
> After switchind i2c-scmi driver to be a plaform one it stopped

/switchind/switching/
/one/one,/

> being enumerated on number of Kontron platformsm, because it's

/platformsm/platforms/

> listed in the forbidden_id_list.
> 
> To resolve the situation, split the list to generic one and
> another that holds devices that has to be skiped if and only if

/skiped/skipped/

> they have bogus resources attached (_CRS method returns some).
> 
> Fixes: 03d4287add6e ("i2c: scmi: Convert to be a platform driver")
> Closes: https://lore.kernel.org/r/60c1756765b9a3f1eab0dcbd84f59f00fe1caf48.camel@kontron.com
> Reported-by: Michael Brunner <michael.brunner@kontron.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  drivers/acpi/acpi_platform.c | 27 +++++++++++++++++++++++++--
>  1 file changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
> index fe00a5783f53..089a98bd18bf 100644
> --- a/drivers/acpi/acpi_platform.c
> +++ b/drivers/acpi/acpi_platform.c
> @@ -19,13 +19,17 @@
>  
>  #include "internal.h"
>  
> +static const struct acpi_device_id forbidden_id_with_resourses[] = {
> +	{"SMB0001",  0},	/* ACPI SMBUS virtual device */
> +	{ }
> +};
> +
>  static const struct acpi_device_id forbidden_id_list[] = {
>  	{"ACPI0009", 0},	/* IOxAPIC */
>  	{"ACPI000A", 0},	/* IOAPIC */
>  	{"PNP0000",  0},	/* PIC */
>  	{"PNP0100",  0},	/* Timer */
>  	{"PNP0200",  0},	/* AT DMA Controller */
> -	{"SMB0001",  0},	/* ACPI SMBUS virtual device */
>  	{ }
>  };
>  
> @@ -83,6 +87,15 @@ static void acpi_platform_fill_resource(struct acpi_device *adev,
>  		dest->parent = pci_find_resource(to_pci_dev(parent), dest);
>  }
>  
> +static int acpi_platform_resource_count(struct acpi_resource *ares, void *data)
> +{
> +	int *count = data;
> +
> +	*count = *count + 1;
> +
> +	return 1;
> +}
> +
>  /**
>   * acpi_create_platform_device - Create platform device for ACPI device node
>   * @adev: ACPI device node to create a platform device for.
> @@ -103,7 +116,8 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
>  	struct resource_entry *rentry;
>  	struct list_head resource_list;
>  	struct resource *resources = NULL;
> -	int count;
> +	int count = 0;
> +	int ret;
>  
>  	/* If the ACPI node already has a physical device attached, skip it. */
>  	if (adev->physical_node_count)
> @@ -113,6 +127,15 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
>  		return ERR_PTR(-EINVAL);
>  
>  	INIT_LIST_HEAD(&resource_list);
> +	ret = acpi_dev_get_resources(adev, &resource_list, acpi_platform_resource_count, &count);
> +	if (ret < 0)
> +		return ERR_PTR(ret);
> +
> +	acpi_dev_free_resource_list(&resource_list);
> +
> +	if (count > 0 && !acpi_match_device_ids(adev, forbidden_id_with_resourses))
> +		return ERR_PTR(-EINVAL);

... so that you rule out first the devices in this list.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org> 

Andi

> +
>  	count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
>  	if (count < 0)
>  		return NULL;
> -- 
> 2.40.0.1.gaa8946217a0b
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources
  2023-06-21  7:46 ` [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Michael Brunner
@ 2023-06-21  9:30   ` Andi Shyti
  2023-06-21 13:19     ` andriy.shevchenko
  0 siblings, 1 reply; 8+ messages in thread
From: Andi Shyti @ 2023-06-21  9:30 UTC (permalink / raw)
  To: Michael Brunner
  Cc: andriy.shevchenko, acpica-devel, rafael.j.wysocki, linux-kernel,
	linux-i2c, wsa, linux-acpi, robert.moore, rafael, lenb

On Wed, Jun 21, 2023 at 07:46:42AM +0000, Michael Brunner wrote:
> On Tue, 2023-06-20 at 19:35 +0300, Andy Shevchenko wrote:
> > After switchind i2c-scmi driver to be a plaform one it stopped
> > being enumerated on number of Kontron platformsm, because it's
> > listed in the forbidden_id_list.
> > 
> > To resolve the situation, split the list to generic one and
> > another that holds devices that has to be skiped if and only if
> > they have bogus resources attached (_CRS method returns some).
> > 
> > Fixes: 03d4287add6e ("i2c: scmi: Convert to be a platform driver")
> > Closes: https://lore.kernel.org/r/60c1756765b9a3f1eab0dcbd84f59f00fe1caf48.camel@kontron.com
> > Reported-by: Michael Brunner <michael.brunner@kontron.com>
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> 
> Works as expected - the SMB0001 device shows up as platform device and
> the i2c-scmi driver is enumerated again on the affected boards.
> Thanks a lot!

is this a "Tested-by: Michael Brunner <michael.brunner@kontron.com>" :)

Andi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v1 2/2] ACPI: platform: Move SMB0001 HID to the header and reuse
  2023-06-20 16:35 ` [PATCH v1 2/2] ACPI: platform: Move SMB0001 HID to the header and reuse Andy Shevchenko
@ 2023-06-21  9:31   ` Andi Shyti
  0 siblings, 0 replies; 8+ messages in thread
From: Andi Shyti @ 2023-06-21  9:31 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Rafael J. Wysocki, Wolfram Sang, linux-acpi, linux-kernel,
	linux-i2c, acpica-devel, Rafael J. Wysocki, Len Brown,
	Robert Moore

Hi Andy,

On Tue, Jun 20, 2023 at 07:35:34PM +0300, Andy Shevchenko wrote:
> There are at least two places in the kernel that are using
> the SMB0001 HID. Make it to be available via acpi_drivers.h
> header file. While at it, replace hard coded one with a
> definition.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org> 

Andi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources
  2023-06-21  9:30   ` Andi Shyti
@ 2023-06-21 13:19     ` andriy.shevchenko
  2023-06-21 13:28       ` Michael Brunner
  0 siblings, 1 reply; 8+ messages in thread
From: andriy.shevchenko @ 2023-06-21 13:19 UTC (permalink / raw)
  To: Andi Shyti
  Cc: Michael Brunner, acpica-devel, rafael.j.wysocki, linux-kernel,
	linux-i2c, wsa, linux-acpi, robert.moore, rafael, lenb

On Wed, Jun 21, 2023 at 11:30:56AM +0200, Andi Shyti wrote:
> On Wed, Jun 21, 2023 at 07:46:42AM +0000, Michael Brunner wrote:
> > On Tue, 2023-06-20 at 19:35 +0300, Andy Shevchenko wrote:
> > > After switchind i2c-scmi driver to be a plaform one it stopped
> > > being enumerated on number of Kontron platformsm, because it's
> > > listed in the forbidden_id_list.
> > > 
> > > To resolve the situation, split the list to generic one and
> > > another that holds devices that has to be skiped if and only if
> > > they have bogus resources attached (_CRS method returns some).
> > > 
> > > Fixes: 03d4287add6e ("i2c: scmi: Convert to be a platform driver")
> > > Closes: https://lore.kernel.org/r/60c1756765b9a3f1eab0dcbd84f59f00fe1caf48.camel@kontron.com
> > > Reported-by: Michael Brunner <michael.brunner@kontron.com>
> > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > 
> > Works as expected - the SMB0001 device shows up as platform device and
> > the i2c-scmi driver is enumerated again on the affected boards.
> > Thanks a lot!
> 
> is this a "Tested-by: Michael Brunner <michael.brunner@kontron.com>" :)

Michael, indeed, it would be nice to have a formal tag.
After that I will send a v2 with tags and fixed typos
as Andi noticed (thank you, Andi!).


-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources
  2023-06-21 13:19     ` andriy.shevchenko
@ 2023-06-21 13:28       ` Michael Brunner
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Brunner @ 2023-06-21 13:28 UTC (permalink / raw)
  To: andriy.shevchenko, andi.shyti
  Cc: wsa, rafael, acpica-devel, lenb, linux-kernel, rafael.j.wysocki,
	linux-acpi, linux-i2c, robert.moore

On Wed, 2023-06-21 at 16:19 +0300, andriy.shevchenko@linux.intel.com
wrote:
> On Wed, Jun 21, 2023 at 11:30:56AM +0200, Andi Shyti wrote:
> > On Wed, Jun 21, 2023 at 07:46:42AM +0000, Michael Brunner wrote:
> > > On Tue, 2023-06-20 at 19:35 +0300, Andy Shevchenko wrote:
> > > > After switchind i2c-scmi driver to be a plaform one it stopped
> > > > being enumerated on number of Kontron platformsm, because it's
> > > > listed in the forbidden_id_list.
> > > >
> > > > To resolve the situation, split the list to generic one and
> > > > another that holds devices that has to be skiped if and only if
> > > > they have bogus resources attached (_CRS method returns some).
> > > >
> > > > Fixes: 03d4287add6e ("i2c: scmi: Convert to be a platform
> > > > driver")
> > > > Closes:
> > > > https://lore.kernel.org/r/60c1756765b9a3f1eab0dcbd84f59f00fe1caf48.camel@kontron.com
> > > > Reported-by: Michael Brunner <michael.brunner@kontron.com>
> > > > Signed-off-by: Andy Shevchenko <
> > > > andriy.shevchenko@linux.intel.com>
> > >
> > > Works as expected - the SMB0001 device shows up as platform
> > > device and
> > > the i2c-scmi driver is enumerated again on the affected boards.
> > > Thanks a lot!
> >
> > is this a "Tested-by: Michael Brunner <michael.brunner@kontron.com>
> > " :)
>
> Michael, indeed, it would be nice to have a formal tag.
> After that I will send a v2 with tags and fixed typos
> as Andi noticed (thank you, Andi!).

No problem:

Tested-by: Michael Brunner <michael.brunner@kontron.com>

Best regards,
  Michael

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-06-21 13:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-20 16:35 [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Andy Shevchenko
2023-06-20 16:35 ` [PATCH v1 2/2] ACPI: platform: Move SMB0001 HID to the header and reuse Andy Shevchenko
2023-06-21  9:31   ` Andi Shyti
2023-06-21  7:46 ` [PATCH v1 1/2] ACPI: platform: Ignore SMB0001 only when it has resources Michael Brunner
2023-06-21  9:30   ` Andi Shyti
2023-06-21 13:19     ` andriy.shevchenko
2023-06-21 13:28       ` Michael Brunner
2023-06-21  9:30 ` Andi Shyti

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).