* [PATCH v3 1/8] ACPI: utils: Add acpi_dev_uid_to_integer() helper to get _UID as integer
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 2/8] ACPI: LPSS: Refactor _UID handling to use acpi_dev_uid_to_integer() Andy Shevchenko
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore
Some users interpret _UID only as integer and for them it's easier to
have an integer representation of _UID. Add respective helper for that.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/acpi/utils.c | 24 ++++++++++++++++++++++++
include/acpi/acpi_bus.h | 1 +
include/linux/acpi.h | 5 +++++
3 files changed, 30 insertions(+)
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 4acd6f7d1395..2ea14648a661 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -793,6 +793,30 @@ bool acpi_dev_hid_uid_match(struct acpi_device *adev,
}
EXPORT_SYMBOL(acpi_dev_hid_uid_match);
+/**
+ * acpi_dev_uid_to_integer - treat ACPI device _UID as integer
+ * @adev: ACPI device to get _UID from
+ * @integer: output buffer for integer
+ *
+ * Considers _UID as integer and converts it to @integer.
+ *
+ * Returns 0 on success, or negative error code otherwise.
+ */
+int acpi_dev_uid_to_integer(struct acpi_device *adev, u64 *integer)
+{
+ const char *uid;
+
+ if (!adev)
+ return -ENODEV;
+
+ uid = acpi_device_uid(adev);
+ if (!uid)
+ return -ENODATA;
+
+ return kstrtou64(uid, 0, integer);
+}
+EXPORT_SYMBOL(acpi_dev_uid_to_integer);
+
/**
* acpi_dev_found - Detect presence of a given ACPI device in the namespace.
* @hid: Hardware ID of the device.
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 42f76f2c2d49..1804d7a70918 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -739,6 +739,7 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev)
}
bool acpi_dev_hid_uid_match(struct acpi_device *adev, const char *hid2, const char *uid2);
+int acpi_dev_uid_to_integer(struct acpi_device *adev, u64 *integer);
void acpi_dev_clear_dependencies(struct acpi_device *supplier);
bool acpi_dev_ready_for_enumeration(const struct acpi_device *device);
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index ed4aa395cc49..619b2b1e4fb4 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -799,6 +799,11 @@ acpi_dev_hid_uid_match(struct acpi_device *adev, const char *hid2, const char *u
return false;
}
+static inline int acpi_dev_uid_to_integer(struct acpi_device *adev, u64 *integer)
+{
+ return -ENODEV;
+}
+
static inline struct acpi_device *
acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
{
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 2/8] ACPI: LPSS: Refactor _UID handling to use acpi_dev_uid_to_integer()
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 1/8] ACPI: utils: Add acpi_dev_uid_to_integer() helper to get _UID " Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 3/8] ACPI: x86: " Andy Shevchenko
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/acpi/acpi_lpss.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 7a73528aa9c2..f08ffa75f4a7 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -167,10 +167,10 @@ static struct pwm_lookup byt_pwm_lookup[] = {
static void byt_pwm_setup(struct lpss_private_data *pdata)
{
- struct acpi_device *adev = pdata->adev;
+ u64 uid;
/* Only call pwm_add_table for the first PWM controller */
- if (!adev->pnp.unique_id || strcmp(adev->pnp.unique_id, "1"))
+ if (acpi_dev_uid_to_integer(pdata->adev, &uid) || uid != 1)
return;
pwm_add_table(byt_pwm_lookup, ARRAY_SIZE(byt_pwm_lookup));
@@ -180,14 +180,13 @@ static void byt_pwm_setup(struct lpss_private_data *pdata)
static void byt_i2c_setup(struct lpss_private_data *pdata)
{
- const char *uid_str = acpi_device_uid(pdata->adev);
acpi_handle handle = pdata->adev->handle;
unsigned long long shared_host = 0;
acpi_status status;
- long uid = 0;
+ u64 uid;
- /* Expected to always be true, but better safe then sorry */
- if (uid_str && !kstrtol(uid_str, 10, &uid) && uid) {
+ /* Expected to always be successfull, but better safe then sorry */
+ if (!acpi_dev_uid_to_integer(pdata->adev, &uid) && uid) {
/* Detect I2C bus shared with PUNIT and ignore its d3 status */
status = acpi_evaluate_integer(handle, "_SEM", NULL, &shared_host);
if (ACPI_SUCCESS(status) && shared_host)
@@ -211,10 +210,10 @@ static struct pwm_lookup bsw_pwm_lookup[] = {
static void bsw_pwm_setup(struct lpss_private_data *pdata)
{
- struct acpi_device *adev = pdata->adev;
+ u64 uid;
/* Only call pwm_add_table for the first PWM controller */
- if (!adev->pnp.unique_id || strcmp(adev->pnp.unique_id, "1"))
+ if (acpi_dev_uid_to_integer(pdata->adev, &uid) || uid != 1)
return;
pwm_add_table(bsw_pwm_lookup, ARRAY_SIZE(bsw_pwm_lookup));
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 3/8] ACPI: x86: Refactor _UID handling to use acpi_dev_uid_to_integer()
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 1/8] ACPI: utils: Add acpi_dev_uid_to_integer() helper to get _UID " Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 2/8] ACPI: LPSS: Refactor _UID handling to use acpi_dev_uid_to_integer() Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 4/8] i2c: amd-mp2-plat: " Andy Shevchenko
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/acpi/x86/utils.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c
index 664070fc8349..2764b4778ce7 100644
--- a/drivers/acpi/x86/utils.c
+++ b/drivers/acpi/x86/utils.c
@@ -351,11 +351,17 @@ int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *s
struct acpi_device *adev = ACPI_COMPANION(controller_parent);
const struct dmi_system_id *dmi_id;
long quirks = 0;
+ u64 uid;
+ int ret;
*skip = false;
- /* !dev_is_platform() to not match on PNP enumerated debug UARTs */
- if (!adev || !adev->pnp.unique_id || !dev_is_platform(controller_parent))
+ ret = acpi_dev_uid_to_integer(adev, &uid);
+ if (ret)
+ return 0;
+
+ /* to not match on PNP enumerated debug UARTs */
+ if (!dev_is_platform(controller_parent))
return 0;
dmi_id = dmi_first_match(acpi_quirk_skip_dmi_ids);
@@ -363,10 +369,10 @@ int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *s
quirks = (unsigned long)dmi_id->driver_data;
if (quirks & ACPI_QUIRK_UART1_TTY_UART2_SKIP) {
- if (!strcmp(adev->pnp.unique_id, "1"))
+ if (uid == 1)
return -ENODEV; /* Create tty cdev instead of serdev */
- if (!strcmp(adev->pnp.unique_id, "2"))
+ if (uid == 2)
*skip = true;
}
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 4/8] i2c: amd-mp2-plat: Refactor _UID handling to use acpi_dev_uid_to_integer()
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
` (2 preceding siblings ...)
2022-09-13 16:31 ` [PATCH v3 3/8] ACPI: x86: " Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 5/8] i2c: mlxbf: " Andy Shevchenko
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore, Wolfram Sang
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Wolfram Sang <wsa@kernel.org>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/i2c/busses/i2c-amd-mp2-plat.c | 27 +++++++++------------------
1 file changed, 9 insertions(+), 18 deletions(-)
diff --git a/drivers/i2c/busses/i2c-amd-mp2-plat.c b/drivers/i2c/busses/i2c-amd-mp2-plat.c
index 84b7e6cbc67b..423fe0c8a471 100644
--- a/drivers/i2c/busses/i2c-amd-mp2-plat.c
+++ b/drivers/i2c/busses/i2c-amd-mp2-plat.c
@@ -244,14 +244,18 @@ static const struct i2c_adapter_quirks amd_i2c_dev_quirks = {
static int i2c_amd_probe(struct platform_device *pdev)
{
+ struct device *dev = &pdev->dev;
int ret;
struct amd_i2c_dev *i2c_dev;
- struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
struct amd_mp2_dev *mp2_dev;
- const char *uid;
+ u64 uid;
- if (!adev)
- return -ENODEV;
+ ret = acpi_dev_uid_to_integer(ACPI_COMPANION(dev), &uid);
+ if (ret)
+ return dev_err_probe(dev, ret, "missing UID/bus id!\n");
+ if (uid >= 2)
+ return dev_err_probe(dev, -EINVAL, "incorrect UID/bus id \"%llu\"!\n", uid);
+ dev_dbg(dev, "bus id is %llu\n", uid);
/* The ACPI namespace doesn't contain information about which MP2 PCI
* device an AMDI0011 ACPI device is related to, so assume that there's
@@ -266,6 +270,7 @@ static int i2c_amd_probe(struct platform_device *pdev)
if (!i2c_dev)
return -ENOMEM;
+ i2c_dev->common.bus_id = uid;
i2c_dev->common.mp2_dev = mp2_dev;
i2c_dev->pdev = pdev;
platform_set_drvdata(pdev, i2c_dev);
@@ -276,20 +281,6 @@ static int i2c_amd_probe(struct platform_device *pdev)
i2c_dev->common.resume = &i2c_amd_resume;
#endif
- uid = adev->pnp.unique_id;
- if (!uid) {
- dev_err(&pdev->dev, "missing UID/bus id!\n");
- return -EINVAL;
- } else if (strcmp(uid, "0") == 0) {
- i2c_dev->common.bus_id = 0;
- } else if (strcmp(uid, "1") == 0) {
- i2c_dev->common.bus_id = 1;
- } else {
- dev_err(&pdev->dev, "incorrect UID/bus id \"%s\"!\n", uid);
- return -EINVAL;
- }
- dev_dbg(&pdev->dev, "bus id is %u\n", i2c_dev->common.bus_id);
-
/* Register the adapter */
amd_mp2_pm_runtime_get(mp2_dev);
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 5/8] i2c: mlxbf: Refactor _UID handling to use acpi_dev_uid_to_integer()
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
` (3 preceding siblings ...)
2022-09-13 16:31 ` [PATCH v3 4/8] i2c: amd-mp2-plat: " Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 6/8] perf: qcom_l2_pmu: " Andy Shevchenko
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore, Wolfram Sang
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Wolfram Sang <wsa@kernel.org>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/i2c/busses/i2c-mlxbf.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/drivers/i2c/busses/i2c-mlxbf.c b/drivers/i2c/busses/i2c-mlxbf.c
index 8716032f030a..32235c62f3d2 100644
--- a/drivers/i2c/busses/i2c-mlxbf.c
+++ b/drivers/i2c/busses/i2c-mlxbf.c
@@ -2229,35 +2229,27 @@ MODULE_DEVICE_TABLE(acpi, mlxbf_i2c_acpi_ids);
static int mlxbf_i2c_acpi_probe(struct device *dev, struct mlxbf_i2c_priv *priv)
{
const struct acpi_device_id *aid;
- struct acpi_device *adev;
- unsigned long bus_id = 0;
- const char *uid;
+ u64 bus_id;
int ret;
if (acpi_disabled)
return -ENOENT;
- adev = ACPI_COMPANION(dev);
- if (!adev)
- return -ENXIO;
-
aid = acpi_match_device(mlxbf_i2c_acpi_ids, dev);
if (!aid)
return -ENODEV;
priv->chip = (struct mlxbf_i2c_chip_info *)aid->driver_data;
- uid = acpi_device_uid(adev);
- if (!uid || !(*uid)) {
+ ret = acpi_dev_uid_to_integer(ACPI_COMPANION(dev), &bus_id);
+ if (ret) {
dev_err(dev, "Cannot retrieve UID\n");
- return -ENODEV;
+ return ret;
}
- ret = kstrtoul(uid, 0, &bus_id);
- if (!ret)
- priv->bus = bus_id;
+ priv->bus = bus_id;
- return ret;
+ return 0;
}
#else
static int mlxbf_i2c_acpi_probe(struct device *dev, struct mlxbf_i2c_priv *priv)
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 6/8] perf: qcom_l2_pmu: Refactor _UID handling to use acpi_dev_uid_to_integer()
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
` (4 preceding siblings ...)
2022-09-13 16:31 ` [PATCH v3 5/8] i2c: mlxbf: " Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 7/8] spi: pxa2xx: " Andy Shevchenko
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/perf/qcom_l2_pmu.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/perf/qcom_l2_pmu.c b/drivers/perf/qcom_l2_pmu.c
index 30234c261b05..aaca6db7d8f6 100644
--- a/drivers/perf/qcom_l2_pmu.c
+++ b/drivers/perf/qcom_l2_pmu.c
@@ -840,16 +840,16 @@ static int l2_cache_pmu_probe_cluster(struct device *dev, void *data)
{
struct platform_device *pdev = to_platform_device(dev->parent);
struct platform_device *sdev = to_platform_device(dev);
- struct acpi_device *adev = ACPI_COMPANION(dev);
struct l2cache_pmu *l2cache_pmu = data;
struct cluster_pmu *cluster;
- unsigned long fw_cluster_id;
+ u64 fw_cluster_id;
int err;
int irq;
- if (!adev || kstrtoul(adev->pnp.unique_id, 10, &fw_cluster_id) < 0) {
+ err = acpi_dev_uid_to_integer(ACPI_COMPANION(dev), &fw_cluster_id);
+ if (err) {
dev_err(&pdev->dev, "unable to read ACPI uid\n");
- return -ENODEV;
+ return err;
}
cluster = devm_kzalloc(&pdev->dev, sizeof(*cluster), GFP_KERNEL);
@@ -879,7 +879,7 @@ static int l2_cache_pmu_probe_cluster(struct device *dev, void *data)
}
dev_info(&pdev->dev,
- "Registered L2 cache PMU cluster %ld\n", fw_cluster_id);
+ "Registered L2 cache PMU cluster %lld\n", fw_cluster_id);
spin_lock_init(&cluster->pmu_lock);
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 7/8] spi: pxa2xx: Refactor _UID handling to use acpi_dev_uid_to_integer()
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
` (5 preceding siblings ...)
2022-09-13 16:31 ` [PATCH v3 6/8] perf: qcom_l2_pmu: " Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-13 16:31 ` [PATCH v3 8/8] efi/dev-path-parser: " Andy Shevchenko
2022-09-19 16:37 ` [PATCH v3 0/8] ACPI: unify _UID handling as integer Rafael J. Wysocki
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Mark Brown <broonie@kernel.org>
---
drivers/spi/spi-pxa2xx.c | 37 ++++++++++---------------------------
1 file changed, 10 insertions(+), 27 deletions(-)
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index 986ffc4bf1ed..2bf21c2e7a52 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1441,31 +1441,6 @@ static const struct of_device_id pxa2xx_spi_of_match[] = {
};
MODULE_DEVICE_TABLE(of, pxa2xx_spi_of_match);
-#ifdef CONFIG_ACPI
-
-static int pxa2xx_spi_get_port_id(struct device *dev)
-{
- struct acpi_device *adev;
- unsigned int devid;
- int port_id = -1;
-
- adev = ACPI_COMPANION(dev);
- if (adev && adev->pnp.unique_id &&
- !kstrtouint(adev->pnp.unique_id, 0, &devid))
- port_id = devid;
- return port_id;
-}
-
-#else /* !CONFIG_ACPI */
-
-static int pxa2xx_spi_get_port_id(struct device *dev)
-{
- return -1;
-}
-
-#endif /* CONFIG_ACPI */
-
-
#ifdef CONFIG_PCI
static bool pxa2xx_spi_idma_filter(struct dma_chan *chan, void *param)
@@ -1479,13 +1454,16 @@ static struct pxa2xx_spi_controller *
pxa2xx_spi_init_pdata(struct platform_device *pdev)
{
struct pxa2xx_spi_controller *pdata;
+ struct device *dev = &pdev->dev;
+ struct device *parent = dev->parent;
struct ssp_device *ssp;
struct resource *res;
- struct device *parent = pdev->dev.parent;
struct pci_dev *pcidev = dev_is_pci(parent) ? to_pci_dev(parent) : NULL;
const struct pci_device_id *pcidev_id = NULL;
enum pxa_ssp_type type;
const void *match;
+ int status;
+ u64 uid;
if (pcidev)
pcidev_id = pci_match_id(pxa2xx_spi_pci_compound_match, pcidev);
@@ -1529,7 +1507,12 @@ pxa2xx_spi_init_pdata(struct platform_device *pdev)
ssp->type = type;
ssp->dev = &pdev->dev;
- ssp->port_id = pxa2xx_spi_get_port_id(&pdev->dev);
+
+ status = acpi_dev_uid_to_integer(ACPI_COMPANION(dev), &uid);
+ if (status)
+ ssp->port_id = -1;
+ else
+ ssp->port_id = uid;
pdata->is_slave = device_property_read_bool(&pdev->dev, "spi-slave");
pdata->num_chipselect = 1;
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 8/8] efi/dev-path-parser: Refactor _UID handling to use acpi_dev_uid_to_integer()
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
` (6 preceding siblings ...)
2022-09-13 16:31 ` [PATCH v3 7/8] spi: pxa2xx: " Andy Shevchenko
@ 2022-09-13 16:31 ` Andy Shevchenko
2022-09-19 16:37 ` [PATCH v3 0/8] ACPI: unify _UID handling as integer Rafael J. Wysocki
8 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2022-09-13 16:31 UTC (permalink / raw)
To: Rafael J. Wysocki, Andy Shevchenko, Hans de Goede,
Ard Biesheuvel, Wolfram Sang, Mark Brown, linux-acpi,
linux-kernel, linux-efi, linux-i2c, linux-arm-msm,
linux-arm-kernel, linux-spi, devel
Cc: Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore
ACPI utils provide acpi_dev_uid_to_integer() helper to extract _UID as
an integer. Use it instead of custom approach.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
---
drivers/firmware/efi/dev-path-parser.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/firmware/efi/dev-path-parser.c b/drivers/firmware/efi/dev-path-parser.c
index eb9c65f97841..f80d87c199c3 100644
--- a/drivers/firmware/efi/dev-path-parser.c
+++ b/drivers/firmware/efi/dev-path-parser.c
@@ -15,9 +15,11 @@
static long __init parse_acpi_path(const struct efi_dev_path *node,
struct device *parent, struct device **child)
{
- char hid[ACPI_ID_LEN], uid[11]; /* UINT_MAX + null byte */
struct acpi_device *adev;
struct device *phys_dev;
+ char hid[ACPI_ID_LEN];
+ u64 uid;
+ int ret;
if (node->header.length != 12)
return -EINVAL;
@@ -27,12 +29,12 @@ static long __init parse_acpi_path(const struct efi_dev_path *node,
'A' + ((node->acpi.hid >> 5) & 0x1f) - 1,
'A' + ((node->acpi.hid >> 0) & 0x1f) - 1,
node->acpi.hid >> 16);
- sprintf(uid, "%u", node->acpi.uid);
for_each_acpi_dev_match(adev, hid, NULL, -1) {
- if (adev->pnp.unique_id && !strcmp(adev->pnp.unique_id, uid))
+ ret = acpi_dev_uid_to_integer(adev, &uid);
+ if (ret == 0 && node->acpi.uid == uid)
break;
- if (!adev->pnp.unique_id && node->acpi.uid == 0)
+ if (ret == -ENODATA && node->acpi.uid == 0)
break;
}
if (!adev)
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 0/8] ACPI: unify _UID handling as integer
2022-09-13 16:31 [PATCH v3 0/8] ACPI: unify _UID handling as integer Andy Shevchenko
` (7 preceding siblings ...)
2022-09-13 16:31 ` [PATCH v3 8/8] efi/dev-path-parser: " Andy Shevchenko
@ 2022-09-19 16:37 ` Rafael J. Wysocki
8 siblings, 0 replies; 10+ messages in thread
From: Rafael J. Wysocki @ 2022-09-19 16:37 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Rafael J. Wysocki, Hans de Goede, Ard Biesheuvel, Wolfram Sang,
Mark Brown, ACPI Devel Maling List, Linux Kernel Mailing List,
linux-efi, linux-i2c, linux-arm-msm, Linux ARM, linux-spi,
open list:ACPI COMPONENT ARCHITECTURE (ACPICA),
Rafael J. Wysocki, Len Brown, Elie Morisse, Nehal Shah,
Shyam Sundar S K, Khalil Blaiech, Andy Gross, Bjorn Andersson,
Konrad Dybcio, Will Deacon, Mark Rutland, Daniel Mack,
Haojian Zhuang, Robert Jarzmik, Robert Moore
On Tue, Sep 13, 2022 at 6:32 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> This series is about unification on how we handle ACPI _UID when
> it's known to be an integer-in-the-string.
>
> The idea of merging either all via ACPI tree, or taking ACPI stuff
> for the v6.1 while the rest may be picked up later on by respective
> maintainers separately (currently only perf patch is not tagged).
>
> Partially compile-tested (x86-64).
>
> Changelog v3:
> - fixed dev_dbg() specifier to be in align with the variable type (LKP)
> - made use of temporary dev variable beyond the ACPI scope (LKP)
> - added tags to I²C patches (Wolfram)
I've replaced the previous version of this patch series in my tree
with this one.
Thanks!
> Changelog v2:
> - rebased pxa2xx patch to be applied against current Linux kernel code
> - fixed uninitialized variable adev in use (mlxbf)
> - dropped unneeded temporary variable adev (qcom_l2_pmu)
> - changed type for ret in patch 8 (Hans)
> - swapped conditions to check ret == 0 first (Ard)
> - added tags (Mark, Ard, Hans)
>
> Andy Shevchenko (8):
> ACPI: utils: Add acpi_dev_uid_to_integer() helper to get _UID as
> integer
> ACPI: LPSS: Refactor _UID handling to use acpi_dev_uid_to_integer()
> ACPI: x86: Refactor _UID handling to use acpi_dev_uid_to_integer()
> i2c: amd-mp2-plat: Refactor _UID handling to use
> acpi_dev_uid_to_integer()
> i2c: mlxbf: Refactor _UID handling to use acpi_dev_uid_to_integer()
> perf: qcom_l2_pmu: Refactor _UID handling to use
> acpi_dev_uid_to_integer()
> spi: pxa2xx: Refactor _UID handling to use acpi_dev_uid_to_integer()
> efi/dev-path-parser: Refactor _UID handling to use
> acpi_dev_uid_to_integer()
>
> drivers/acpi/acpi_lpss.c | 15 +++++------
> drivers/acpi/utils.c | 24 +++++++++++++++++
> drivers/acpi/x86/utils.c | 14 +++++++---
> drivers/firmware/efi/dev-path-parser.c | 10 ++++---
> drivers/i2c/busses/i2c-amd-mp2-plat.c | 27 +++++++------------
> drivers/i2c/busses/i2c-mlxbf.c | 20 +++++---------
> drivers/perf/qcom_l2_pmu.c | 10 +++----
> drivers/spi/spi-pxa2xx.c | 37 +++++++-------------------
> include/acpi/acpi_bus.h | 1 +
> include/linux/acpi.h | 5 ++++
> 10 files changed, 83 insertions(+), 80 deletions(-)
>
> --
> 2.35.1
>
^ permalink raw reply [flat|nested] 10+ messages in thread