From: Akhil R <akhilrajeev@nvidia.com>
To: Alexandre Belloni <alexandre.belloni@bootlin.com>,
Frank Li <Frank.Li@nxp.com>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Robert Moore <robert.moore@intel.com>,
"Len Brown" <lenb@kernel.org>, Guenter Roeck <linux@roeck-us.net>,
Philipp Zabel <p.zabel@pengutronix.de>,
Eric Biggers <ebiggers@kernel.org>,
"Fredrik Markstrom" <fredrik.markstrom@est.tech>,
Miquel Raynal <miquel.raynal@bootlin.com>,
Thierry Reding <thierry.reding@kernel.org>,
"Jon Hunter" <jonathanh@nvidia.com>,
Suresh Mangipudi <smangipudi@nvidia.com>,
<linux-tegra@vger.kernel.org>, <linux-i3c@lists.infradead.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-acpi@vger.kernel.org>, <acpica-devel@lists.linux.dev>,
<linux-hwmon@vger.kernel.org>
Cc: Akhil R <akhilrajeev@nvidia.com>
Subject: [PATCH 06/12] i3c: master: Add support for devices without PID
Date: Wed, 18 Mar 2026 22:57:19 +0530 [thread overview]
Message-ID: <20260318172820.13771-7-akhilrajeev@nvidia.com> (raw)
In-Reply-To: <20260318172820.13771-1-akhilrajeev@nvidia.com>
Devices using SETAASA for address assignment are not required to have
a 48-bit PID according to the I3C specification. Allow such devices to
register and use the static address where PID was required.
Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
---
drivers/i3c/master.c | 51 ++++++++++++++++++++++++++++++++++----------
1 file changed, 40 insertions(+), 11 deletions(-)
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index 40a3bb734234..0cce75bb05b0 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -1835,8 +1835,17 @@ i3c_master_register_new_i3c_devs(struct i3c_master_controller *master)
desc->dev->dev.type = &i3c_device_type;
desc->dev->dev.bus = &i3c_bus_type;
desc->dev->dev.release = i3c_device_release;
- dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id,
- desc->info.pid);
+
+ /*
+ * For devices without PID (e.g., SETAASA devices), use
+ * static address for naming instead.
+ */
+ if (desc->info.pid)
+ dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id,
+ desc->info.pid);
+ else
+ dev_set_name(&desc->dev->dev, "%d-static_addr-%02x", master->bus.id,
+ desc->info.static_addr);
if (desc->boardinfo)
device_set_node(&desc->dev->dev, desc->boardinfo->fwnode);
@@ -2281,8 +2290,18 @@ static void i3c_master_attach_boardinfo(struct i3c_dev_desc *i3cdev)
struct i3c_dev_boardinfo *i3cboardinfo;
list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) {
- if (i3cdev->info.pid != i3cboardinfo->pid)
- continue;
+ /*
+ * For devices without PID (e.g., SETAASA devices), match by
+ * static address. For devices with PID, match by PID.
+ */
+ if (i3cboardinfo->pid) {
+ if (i3cdev->info.pid != i3cboardinfo->pid)
+ continue;
+ } else {
+ if (!i3cboardinfo->static_addr ||
+ i3cdev->info.static_addr != i3cboardinfo->static_addr)
+ continue;
+ }
i3cdev->boardinfo = i3cboardinfo;
i3cdev->info.static_addr = i3cboardinfo->static_addr;
@@ -2296,8 +2315,12 @@ i3c_master_search_i3c_dev_duplicate(struct i3c_dev_desc *refdev)
struct i3c_master_controller *master = i3c_dev_get_master(refdev);
struct i3c_dev_desc *i3cdev;
+ if (!refdev->info.pid)
+ return NULL;
+
i3c_bus_for_each_i3cdev(&master->bus, i3cdev) {
- if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid)
+ if (i3cdev != refdev && i3cdev->info.pid &&
+ i3cdev->info.pid == refdev->info.pid)
return i3cdev;
}
@@ -2582,9 +2605,15 @@ i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master,
boardinfo->pid = ((u64)reg[1] << 32) | reg[2];
- if ((boardinfo->pid & GENMASK_ULL(63, 48)) ||
- I3C_PID_RND_LOWER_32BITS(boardinfo->pid))
- return -EINVAL;
+ /* For SETAASA devices, validate the static address instead of PID */
+ if (boardinfo->static_addr_method & I3C_ADDR_METHOD_SETAASA) {
+ if (!boardinfo->static_addr)
+ return -EINVAL;
+ } else {
+ if ((boardinfo->pid & GENMASK_ULL(63, 48)) ||
+ I3C_PID_RND_LOWER_32BITS(boardinfo->pid))
+ return -EINVAL;
+ }
boardinfo->init_dyn_addr = init_dyn_addr;
boardinfo->fwnode = fwnode_handle_get(fwnode);
@@ -2607,10 +2636,10 @@ static int i3c_master_add_of_dev(struct i3c_master_controller *master,
return ret;
/*
- * The manufacturer ID can't be 0. If reg[1] == 0 that means we're
- * dealing with an I2C device.
+ * I3C device should have either the manufacturer ID specified or the
+ * address discovery method specified. Else treat it as an I2C device.
*/
- if (!reg[1])
+ if (!reg[1] && !fwnode_property_present(fwnode, "mipi-i3c-static-method"))
ret = i3c_master_add_i2c_boardinfo(master, fwnode, reg);
else
ret = i3c_master_add_i3c_boardinfo(master, fwnode, reg);
--
2.50.1
WARNING: multiple messages have this Message-ID (diff)
From: Akhil R <akhilrajeev@nvidia.com>
To: Alexandre Belloni <alexandre.belloni@bootlin.com>,
Frank Li <Frank.Li@nxp.com>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Robert Moore <robert.moore@intel.com>,
"Len Brown" <lenb@kernel.org>, Guenter Roeck <linux@roeck-us.net>,
Philipp Zabel <p.zabel@pengutronix.de>,
Eric Biggers <ebiggers@kernel.org>,
"Fredrik Markstrom" <fredrik.markstrom@est.tech>,
Miquel Raynal <miquel.raynal@bootlin.com>,
Thierry Reding <thierry.reding@kernel.org>,
"Jon Hunter" <jonathanh@nvidia.com>,
Suresh Mangipudi <smangipudi@nvidia.com>,
<linux-tegra@vger.kernel.org>, <linux-i3c@lists.infradead.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-acpi@vger.kernel.org>, <acpica-devel@lists.linux.dev>,
<linux-hwmon@vger.kernel.org>
Cc: Akhil R <akhilrajeev@nvidia.com>
Subject: [PATCH 06/12] i3c: master: Add support for devices without PID
Date: Wed, 18 Mar 2026 22:57:19 +0530 [thread overview]
Message-ID: <20260318172820.13771-7-akhilrajeev@nvidia.com> (raw)
In-Reply-To: <20260318172820.13771-1-akhilrajeev@nvidia.com>
Devices using SETAASA for address assignment are not required to have
a 48-bit PID according to the I3C specification. Allow such devices to
register and use the static address where PID was required.
Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
---
drivers/i3c/master.c | 51 ++++++++++++++++++++++++++++++++++----------
1 file changed, 40 insertions(+), 11 deletions(-)
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
index 40a3bb734234..0cce75bb05b0 100644
--- a/drivers/i3c/master.c
+++ b/drivers/i3c/master.c
@@ -1835,8 +1835,17 @@ i3c_master_register_new_i3c_devs(struct i3c_master_controller *master)
desc->dev->dev.type = &i3c_device_type;
desc->dev->dev.bus = &i3c_bus_type;
desc->dev->dev.release = i3c_device_release;
- dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id,
- desc->info.pid);
+
+ /*
+ * For devices without PID (e.g., SETAASA devices), use
+ * static address for naming instead.
+ */
+ if (desc->info.pid)
+ dev_set_name(&desc->dev->dev, "%d-%llx", master->bus.id,
+ desc->info.pid);
+ else
+ dev_set_name(&desc->dev->dev, "%d-static_addr-%02x", master->bus.id,
+ desc->info.static_addr);
if (desc->boardinfo)
device_set_node(&desc->dev->dev, desc->boardinfo->fwnode);
@@ -2281,8 +2290,18 @@ static void i3c_master_attach_boardinfo(struct i3c_dev_desc *i3cdev)
struct i3c_dev_boardinfo *i3cboardinfo;
list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) {
- if (i3cdev->info.pid != i3cboardinfo->pid)
- continue;
+ /*
+ * For devices without PID (e.g., SETAASA devices), match by
+ * static address. For devices with PID, match by PID.
+ */
+ if (i3cboardinfo->pid) {
+ if (i3cdev->info.pid != i3cboardinfo->pid)
+ continue;
+ } else {
+ if (!i3cboardinfo->static_addr ||
+ i3cdev->info.static_addr != i3cboardinfo->static_addr)
+ continue;
+ }
i3cdev->boardinfo = i3cboardinfo;
i3cdev->info.static_addr = i3cboardinfo->static_addr;
@@ -2296,8 +2315,12 @@ i3c_master_search_i3c_dev_duplicate(struct i3c_dev_desc *refdev)
struct i3c_master_controller *master = i3c_dev_get_master(refdev);
struct i3c_dev_desc *i3cdev;
+ if (!refdev->info.pid)
+ return NULL;
+
i3c_bus_for_each_i3cdev(&master->bus, i3cdev) {
- if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid)
+ if (i3cdev != refdev && i3cdev->info.pid &&
+ i3cdev->info.pid == refdev->info.pid)
return i3cdev;
}
@@ -2582,9 +2605,15 @@ i3c_master_add_i3c_boardinfo(struct i3c_master_controller *master,
boardinfo->pid = ((u64)reg[1] << 32) | reg[2];
- if ((boardinfo->pid & GENMASK_ULL(63, 48)) ||
- I3C_PID_RND_LOWER_32BITS(boardinfo->pid))
- return -EINVAL;
+ /* For SETAASA devices, validate the static address instead of PID */
+ if (boardinfo->static_addr_method & I3C_ADDR_METHOD_SETAASA) {
+ if (!boardinfo->static_addr)
+ return -EINVAL;
+ } else {
+ if ((boardinfo->pid & GENMASK_ULL(63, 48)) ||
+ I3C_PID_RND_LOWER_32BITS(boardinfo->pid))
+ return -EINVAL;
+ }
boardinfo->init_dyn_addr = init_dyn_addr;
boardinfo->fwnode = fwnode_handle_get(fwnode);
@@ -2607,10 +2636,10 @@ static int i3c_master_add_of_dev(struct i3c_master_controller *master,
return ret;
/*
- * The manufacturer ID can't be 0. If reg[1] == 0 that means we're
- * dealing with an I2C device.
+ * I3C device should have either the manufacturer ID specified or the
+ * address discovery method specified. Else treat it as an I2C device.
*/
- if (!reg[1])
+ if (!reg[1] && !fwnode_property_present(fwnode, "mipi-i3c-static-method"))
ret = i3c_master_add_i2c_boardinfo(master, fwnode, reg);
else
ret = i3c_master_add_i3c_boardinfo(master, fwnode, reg);
--
2.50.1
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
next prev parent reply other threads:[~2026-03-18 17:30 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-18 17:27 [PATCH 00/12] i3c: Support ACPI and SETAASA device discovery Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:27 ` [PATCH 01/12] dt-bindings: i3c: Add mipi-i3c-static-method to support SETAASA Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:31 ` Conor Dooley
2026-03-18 17:31 ` Conor Dooley
2026-03-19 8:46 ` Akhil R
2026-03-19 8:46 ` Akhil R
2026-03-19 9:39 ` Krzysztof Kozlowski
2026-03-19 9:39 ` Krzysztof Kozlowski
2026-03-19 17:01 ` Akhil R
2026-03-19 17:01 ` Akhil R
2026-03-19 17:14 ` Krzysztof Kozlowski
2026-03-19 17:14 ` Krzysztof Kozlowski
2026-03-19 18:13 ` Akhil R
2026-03-19 18:13 ` Akhil R
2026-03-26 15:05 ` Rob Herring
2026-03-26 15:05 ` Rob Herring
2026-03-26 15:44 ` Alexandre Belloni
2026-03-26 15:44 ` Alexandre Belloni
2026-03-27 8:18 ` Akhil R
2026-03-27 8:18 ` Akhil R
2026-03-27 8:27 ` Alexandre Belloni
2026-03-27 8:27 ` Alexandre Belloni
2026-03-27 11:42 ` Akhil R
2026-03-27 11:42 ` Akhil R
2026-03-27 17:06 ` Alexandre Belloni
2026-03-27 17:06 ` Alexandre Belloni
2026-03-30 5:26 ` Akhil R
2026-03-30 5:26 ` Akhil R
2026-03-18 17:27 ` [PATCH 02/12] ACPICA: Read LVR from the I2C resource descriptor Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:27 ` [PATCH 03/12] i3c: master: Use unified device property interface Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-19 14:22 ` Frank Li
2026-03-19 14:22 ` Frank Li
2026-03-26 15:18 ` Rob Herring
2026-03-26 15:18 ` Rob Herring
2026-03-18 17:27 ` [PATCH 04/12] i3c: master: Support ACPI enumeration Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-19 14:29 ` Frank Li
2026-03-19 14:29 ` Frank Li
2026-03-19 17:45 ` Akhil R
2026-03-19 17:45 ` Akhil R
2026-03-22 16:55 ` kernel test robot
2026-03-22 16:55 ` kernel test robot
2026-03-22 17:47 ` kernel test robot
2026-03-22 17:47 ` kernel test robot
2026-03-23 18:42 ` Akhil R
2026-03-23 18:42 ` Akhil R
2026-03-23 18:54 ` Guenter Roeck
2026-03-23 18:54 ` Guenter Roeck
2026-03-24 8:43 ` Alexandre Belloni
2026-03-24 8:43 ` Alexandre Belloni
2026-03-24 17:22 ` Akhil R
2026-03-24 17:22 ` Akhil R
2026-03-25 10:59 ` Thierry Reding
2026-03-25 10:59 ` Thierry Reding
2026-03-31 10:09 ` Akhil R
2026-03-31 10:09 ` Akhil R
2026-03-18 17:27 ` [PATCH 05/12] i3c: master: Add support for devices using SETAASA Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:27 ` Akhil R [this message]
2026-03-18 17:27 ` [PATCH 06/12] i3c: master: Add support for devices without PID Akhil R
2026-03-18 17:27 ` [PATCH 07/12] i3c: master: match I3C device through DT and ACPI Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:27 ` [PATCH 08/12] i3c: dw-i3c-master: Add SETAASA as supported CCC Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:27 ` [PATCH 09/12] i3c: dw-i3c-master: Add a quirk to skip clock and reset Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:27 ` [PATCH 10/12] i3c: dw-i3c-master: Add ACPI ID for Tegra410 Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 17:27 ` [PATCH 11/12] hwmon: spd5118: Add I3C support Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-18 18:19 ` Alexandre Belloni
2026-03-18 18:19 ` Alexandre Belloni
2026-03-18 18:53 ` Guenter Roeck
2026-03-18 18:53 ` Guenter Roeck
2026-03-19 4:35 ` Akhil R
2026-03-19 4:35 ` Akhil R
2026-03-19 14:34 ` Guenter Roeck
2026-03-19 14:34 ` Guenter Roeck
2026-03-19 17:55 ` Akhil R
2026-03-19 17:55 ` Akhil R
2026-03-19 18:18 ` Guenter Roeck
2026-03-19 18:18 ` Guenter Roeck
2026-03-18 17:27 ` [PATCH 12/12] arm64: defconfig: Enable I3C and SPD5118 hwmon Akhil R
2026-03-18 17:27 ` Akhil R
2026-03-19 9:40 ` Krzysztof Kozlowski
2026-03-19 9:40 ` Krzysztof Kozlowski
2026-03-19 17:09 ` Akhil R
2026-03-19 17:09 ` Akhil R
2026-03-19 17:15 ` Krzysztof Kozlowski
2026-03-19 17:15 ` Krzysztof Kozlowski
2026-03-19 18:17 ` Akhil R
2026-03-19 18:17 ` Akhil R
2026-03-25 10:31 ` Thierry Reding
2026-03-25 10:31 ` Thierry Reding
2026-03-25 10:59 ` Krzysztof Kozlowski
2026-03-25 10:59 ` Krzysztof Kozlowski
2026-03-25 11:03 ` Krzysztof Kozlowski
2026-03-25 11:03 ` Krzysztof Kozlowski
2026-03-25 12:58 ` Thierry Reding
2026-03-25 12:58 ` Thierry Reding
2026-03-25 13:10 ` Krzysztof Kozlowski
2026-03-25 13:10 ` Krzysztof Kozlowski
2026-03-25 12:41 ` Thierry Reding
2026-03-25 12:41 ` Thierry Reding
2026-03-25 12:47 ` Krzysztof Kozlowski
2026-03-25 12:47 ` Krzysztof Kozlowski
2026-03-25 13:05 ` Thierry Reding
2026-03-25 13:05 ` Thierry Reding
2026-03-25 13:13 ` Krzysztof Kozlowski
2026-03-25 13:13 ` Krzysztof Kozlowski
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=20260318172820.13771-7-akhilrajeev@nvidia.com \
--to=akhilrajeev@nvidia.com \
--cc=Frank.Li@nxp.com \
--cc=acpica-devel@lists.linux.dev \
--cc=alexandre.belloni@bootlin.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=ebiggers@kernel.org \
--cc=fredrik.markstrom@est.tech \
--cc=jonathanh@nvidia.com \
--cc=krzk+dt@kernel.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-i3c@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=miquel.raynal@bootlin.com \
--cc=p.zabel@pengutronix.de \
--cc=rafael@kernel.org \
--cc=robert.moore@intel.com \
--cc=robh@kernel.org \
--cc=smangipudi@nvidia.com \
--cc=thierry.reding@kernel.org \
/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.