* [PATCH V2 01/13] i3c: mipi-i3c-hci-pci: Set 64-bit DMA mask for Intel controllers
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 19:43 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 02/13] i3c: mipi-i3c-hci-pci: Move all Intel-related definitions together Adrian Hunter
` (11 subsequent siblings)
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
All Intel controllers support 64-bit DMA. Set the DMA mask accordingly.
This is needed only if there is no IOMMU configured, which is not
recommended, but possible.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
No need to check error from dma_set_mask_and_coherent() with a
64-bit mask
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index dd4484eff2f0..3cd15ca7d391 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -36,6 +36,8 @@ static int mipi_i3c_hci_pci_intel_init(struct pci_dev *pci)
if (!priv)
return -ENOMEM;
+ dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
+
/* Assert reset, wait for completion and release reset */
writel(0, priv + INTEL_PRIV_RESETS);
timeout = jiffies + msecs_to_jiffies(10);
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 01/13] i3c: mipi-i3c-hci-pci: Set 64-bit DMA mask for Intel controllers
2025-11-14 18:13 ` [PATCH V2 01/13] i3c: mipi-i3c-hci-pci: Set 64-bit DMA mask " Adrian Hunter
@ 2025-11-14 19:43 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-14 19:43 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:44PM +0200, Adrian Hunter wrote:
> All Intel controllers support 64-bit DMA. Set the DMA mask accordingly.
>
> This is needed only if there is no IOMMU configured, which is not
> recommended, but possible.
I think DMA mask is not related IOMMU at all, It indicates your DMA's
address widith. So this sentence is reduntant and confused. Suggest remove
it if no specific reason.
Frank
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>
>
> Changes in V2:
>
> No need to check error from dma_set_mask_and_coherent() with a
> 64-bit mask
>
> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index dd4484eff2f0..3cd15ca7d391 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -36,6 +36,8 @@ static int mipi_i3c_hci_pci_intel_init(struct pci_dev *pci)
> if (!priv)
> return -ENOMEM;
>
> + dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
> +
> /* Assert reset, wait for completion and release reset */
> writel(0, priv + INTEL_PRIV_RESETS);
> timeout = jiffies + msecs_to_jiffies(10);
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 02/13] i3c: mipi-i3c-hci-pci: Move all Intel-related definitions together
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 01/13] i3c: mipi-i3c-hci-pci: Set 64-bit DMA mask " Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 03/13] i3c: mipi-i3c-hci-pci: Rename some Intel-related identifiers Adrian Hunter
` (10 subsequent siblings)
12 siblings, 0 replies; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Move all Intel-related definitions together, to tidy the code slightly.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
None
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 3cd15ca7d391..3d854cee05df 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -17,14 +17,14 @@ struct mipi_i3c_hci_pci_info {
int (*init)(struct pci_dev *pci);
};
+static DEFINE_IDA(mipi_i3c_hci_pci_ida);
+
#define INTEL_PRIV_OFFSET 0x2b0
#define INTEL_PRIV_SIZE 0x28
#define INTEL_PRIV_RESETS 0x04
#define INTEL_PRIV_RESETS_RESET BIT(0)
#define INTEL_PRIV_RESETS_RESET_DONE BIT(1)
-static DEFINE_IDA(mipi_i3c_hci_pci_ida);
-
static int mipi_i3c_hci_pci_intel_init(struct pci_dev *pci)
{
unsigned long timeout;
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* [PATCH V2 03/13] i3c: mipi-i3c-hci-pci: Rename some Intel-related identifiers
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 01/13] i3c: mipi-i3c-hci-pci: Set 64-bit DMA mask " Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 02/13] i3c: mipi-i3c-hci-pci: Move all Intel-related definitions together Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 19:44 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 04/13] i3c: mipi-i3c-hci-pci: Use readl_poll_timeout() Adrian Hunter
` (9 subsequent siblings)
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Rename some Intel-related identifiers to ensure Intel-related identifiers
begin "intel_" or INTEL_, and for brevity removing purposeless "PRIV" in
preparation to add more register definitions.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Rename 'intel_init' to 'intel_i3c_init'
More explanation in commit message
.../i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 3d854cee05df..d434e2962740 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -21,11 +21,11 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
#define INTEL_PRIV_OFFSET 0x2b0
#define INTEL_PRIV_SIZE 0x28
-#define INTEL_PRIV_RESETS 0x04
-#define INTEL_PRIV_RESETS_RESET BIT(0)
-#define INTEL_PRIV_RESETS_RESET_DONE BIT(1)
+#define INTEL_RESETS 0x04
+#define INTEL_RESETS_RESET BIT(0)
+#define INTEL_RESETS_RESET_DONE BIT(1)
-static int mipi_i3c_hci_pci_intel_init(struct pci_dev *pci)
+static int intel_i3c_init(struct pci_dev *pci)
{
unsigned long timeout;
void __iomem *priv;
@@ -39,21 +39,21 @@ static int mipi_i3c_hci_pci_intel_init(struct pci_dev *pci)
dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
/* Assert reset, wait for completion and release reset */
- writel(0, priv + INTEL_PRIV_RESETS);
+ writel(0, priv + INTEL_RESETS);
timeout = jiffies + msecs_to_jiffies(10);
- while (!(readl(priv + INTEL_PRIV_RESETS) &
- INTEL_PRIV_RESETS_RESET_DONE)) {
+ while (!(readl(priv + INTEL_RESETS) &
+ INTEL_RESETS_RESET_DONE)) {
if (time_after(jiffies, timeout))
break;
cpu_relax();
}
- writel(INTEL_PRIV_RESETS_RESET, priv + INTEL_PRIV_RESETS);
+ writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
return 0;
}
static struct mipi_i3c_hci_pci_info intel_info = {
- .init = mipi_i3c_hci_pci_intel_init,
+ .init = intel_i3c_init,
};
static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 03/13] i3c: mipi-i3c-hci-pci: Rename some Intel-related identifiers
2025-11-14 18:13 ` [PATCH V2 03/13] i3c: mipi-i3c-hci-pci: Rename some Intel-related identifiers Adrian Hunter
@ 2025-11-14 19:44 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-14 19:44 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:46PM +0200, Adrian Hunter wrote:
> Rename some Intel-related identifiers to ensure Intel-related identifiers
> begin "intel_" or INTEL_, and for brevity removing purposeless "PRIV" in
> preparation to add more register definitions.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
>
>
> Changes in V2:
>
> Rename 'intel_init' to 'intel_i3c_init'
> More explanation in commit message
>
>
> .../i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index 3d854cee05df..d434e2962740 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -21,11 +21,11 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
>
> #define INTEL_PRIV_OFFSET 0x2b0
> #define INTEL_PRIV_SIZE 0x28
> -#define INTEL_PRIV_RESETS 0x04
> -#define INTEL_PRIV_RESETS_RESET BIT(0)
> -#define INTEL_PRIV_RESETS_RESET_DONE BIT(1)
> +#define INTEL_RESETS 0x04
> +#define INTEL_RESETS_RESET BIT(0)
> +#define INTEL_RESETS_RESET_DONE BIT(1)
>
> -static int mipi_i3c_hci_pci_intel_init(struct pci_dev *pci)
> +static int intel_i3c_init(struct pci_dev *pci)
> {
> unsigned long timeout;
> void __iomem *priv;
> @@ -39,21 +39,21 @@ static int mipi_i3c_hci_pci_intel_init(struct pci_dev *pci)
> dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
>
> /* Assert reset, wait for completion and release reset */
> - writel(0, priv + INTEL_PRIV_RESETS);
> + writel(0, priv + INTEL_RESETS);
> timeout = jiffies + msecs_to_jiffies(10);
> - while (!(readl(priv + INTEL_PRIV_RESETS) &
> - INTEL_PRIV_RESETS_RESET_DONE)) {
> + while (!(readl(priv + INTEL_RESETS) &
> + INTEL_RESETS_RESET_DONE)) {
> if (time_after(jiffies, timeout))
> break;
> cpu_relax();
> }
> - writel(INTEL_PRIV_RESETS_RESET, priv + INTEL_PRIV_RESETS);
> + writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
>
> return 0;
> }
>
> static struct mipi_i3c_hci_pci_info intel_info = {
> - .init = mipi_i3c_hci_pci_intel_init,
> + .init = intel_i3c_init,
> };
>
> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 04/13] i3c: mipi-i3c-hci-pci: Use readl_poll_timeout()
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (2 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 03/13] i3c: mipi-i3c-hci-pci: Rename some Intel-related identifiers Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 19:44 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 05/13] i3c: mipi-i3c-hci-pci: Constify driver data Adrian Hunter
` (8 subsequent siblings)
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Use readl_poll_timeout() instead of open-coding the polling loop.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Change 10000 to (10 * USEC_PER_MSEC)
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index d434e2962740..30915d78045e 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -8,6 +8,7 @@
*/
#include <linux/acpi.h>
#include <linux/idr.h>
+#include <linux/iopoll.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
@@ -24,11 +25,12 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
#define INTEL_RESETS 0x04
#define INTEL_RESETS_RESET BIT(0)
#define INTEL_RESETS_RESET_DONE BIT(1)
+#define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
static int intel_i3c_init(struct pci_dev *pci)
{
- unsigned long timeout;
void __iomem *priv;
+ u32 reg;
priv = devm_ioremap(&pci->dev,
pci_resource_start(pci, 0) + INTEL_PRIV_OFFSET,
@@ -40,13 +42,9 @@ static int intel_i3c_init(struct pci_dev *pci)
/* Assert reset, wait for completion and release reset */
writel(0, priv + INTEL_RESETS);
- timeout = jiffies + msecs_to_jiffies(10);
- while (!(readl(priv + INTEL_RESETS) &
- INTEL_RESETS_RESET_DONE)) {
- if (time_after(jiffies, timeout))
- break;
- cpu_relax();
- }
+ readl_poll_timeout(priv + INTEL_RESETS, reg,
+ reg & INTEL_RESETS_RESET_DONE, 0,
+ INTEL_RESETS_TIMEOUT_US);
writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
return 0;
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 04/13] i3c: mipi-i3c-hci-pci: Use readl_poll_timeout()
2025-11-14 18:13 ` [PATCH V2 04/13] i3c: mipi-i3c-hci-pci: Use readl_poll_timeout() Adrian Hunter
@ 2025-11-14 19:44 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-14 19:44 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:47PM +0200, Adrian Hunter wrote:
> Use readl_poll_timeout() instead of open-coding the polling loop.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
>
>
> Changes in V2:
>
> Change 10000 to (10 * USEC_PER_MSEC)
>
>
> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index d434e2962740..30915d78045e 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -8,6 +8,7 @@
> */
> #include <linux/acpi.h>
> #include <linux/idr.h>
> +#include <linux/iopoll.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/pci.h>
> @@ -24,11 +25,12 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
> #define INTEL_RESETS 0x04
> #define INTEL_RESETS_RESET BIT(0)
> #define INTEL_RESETS_RESET_DONE BIT(1)
> +#define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
>
> static int intel_i3c_init(struct pci_dev *pci)
> {
> - unsigned long timeout;
> void __iomem *priv;
> + u32 reg;
>
> priv = devm_ioremap(&pci->dev,
> pci_resource_start(pci, 0) + INTEL_PRIV_OFFSET,
> @@ -40,13 +42,9 @@ static int intel_i3c_init(struct pci_dev *pci)
>
> /* Assert reset, wait for completion and release reset */
> writel(0, priv + INTEL_RESETS);
> - timeout = jiffies + msecs_to_jiffies(10);
> - while (!(readl(priv + INTEL_RESETS) &
> - INTEL_RESETS_RESET_DONE)) {
> - if (time_after(jiffies, timeout))
> - break;
> - cpu_relax();
> - }
> + readl_poll_timeout(priv + INTEL_RESETS, reg,
> + reg & INTEL_RESETS_RESET_DONE, 0,
> + INTEL_RESETS_TIMEOUT_US);
> writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
>
> return 0;
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 05/13] i3c: mipi-i3c-hci-pci: Constify driver data
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (3 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 04/13] i3c: mipi-i3c-hci-pci: Use readl_poll_timeout() Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 06/13] i3c: mipi-i3c-hci-pci: Factor out private registers ioremapping Adrian Hunter
` (7 subsequent siblings)
12 siblings, 0 replies; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Add const qualifier to driver data because it is constant.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
---
Changes in V2:
Add Frank's Rev'd-by
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 30915d78045e..abc7bad5e069 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -50,14 +50,14 @@ static int intel_i3c_init(struct pci_dev *pci)
return 0;
}
-static struct mipi_i3c_hci_pci_info intel_info = {
+static const struct mipi_i3c_hci_pci_info intel_info = {
.init = intel_i3c_init,
};
static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
const struct pci_device_id *id)
{
- struct mipi_i3c_hci_pci_info *info;
+ const struct mipi_i3c_hci_pci_info *info;
struct platform_device *pdev;
struct resource res[2];
int dev_id, ret;
@@ -93,7 +93,7 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
if (ret)
goto err;
- info = (struct mipi_i3c_hci_pci_info *)id->driver_data;
+ info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
if (info && info->init) {
ret = info->init(pci);
if (ret)
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* [PATCH V2 06/13] i3c: mipi-i3c-hci-pci: Factor out private registers ioremapping
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (4 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 05/13] i3c: mipi-i3c-hci-pci: Constify driver data Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 07/13] i3c: mipi-i3c-hci-pci: Factor out intel_reset() Adrian Hunter
` (6 subsequent siblings)
12 siblings, 0 replies; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
For neatness, factor out private registers ioremapping.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Re-based
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index abc7bad5e069..1e1f2c42bd74 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -27,14 +27,18 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
#define INTEL_RESETS_RESET_DONE BIT(1)
#define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
+static void __iomem *intel_priv(struct pci_dev *pci)
+{
+ resource_size_t base = pci_resource_start(pci, 0);
+
+ return devm_ioremap(&pci->dev, base + INTEL_PRIV_OFFSET, INTEL_PRIV_SIZE);
+}
+
static int intel_i3c_init(struct pci_dev *pci)
{
- void __iomem *priv;
+ void __iomem *priv = intel_priv(pci);
u32 reg;
- priv = devm_ioremap(&pci->dev,
- pci_resource_start(pci, 0) + INTEL_PRIV_OFFSET,
- INTEL_PRIV_SIZE);
if (!priv)
return -ENOMEM;
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* [PATCH V2 07/13] i3c: mipi-i3c-hci-pci: Factor out intel_reset()
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (5 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 06/13] i3c: mipi-i3c-hci-pci: Factor out private registers ioremapping Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 19:46 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 08/13] i3c: mipi-i3c-hci-pci: Allocate a structure for mipi_i3c_hci_pci device information Adrian Hunter
` (5 subsequent siblings)
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
For neatness, factor out intel_reset().
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Move location of intel_reset() to get a prettier diff
.../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 20 ++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 1e1f2c42bd74..b9794212b2fb 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -27,6 +27,18 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
#define INTEL_RESETS_RESET_DONE BIT(1)
#define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
+static void intel_reset(void __iomem *priv)
+{
+ u32 reg;
+
+ /* Assert reset, wait for completion and release reset */
+ writel(0, priv + INTEL_RESETS);
+ readl_poll_timeout(priv + INTEL_RESETS, reg,
+ reg & INTEL_RESETS_RESET_DONE, 0,
+ INTEL_RESETS_TIMEOUT_US);
+ writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
+}
+
static void __iomem *intel_priv(struct pci_dev *pci)
{
resource_size_t base = pci_resource_start(pci, 0);
@@ -37,19 +49,13 @@ static void __iomem *intel_priv(struct pci_dev *pci)
static int intel_i3c_init(struct pci_dev *pci)
{
void __iomem *priv = intel_priv(pci);
- u32 reg;
if (!priv)
return -ENOMEM;
dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
- /* Assert reset, wait for completion and release reset */
- writel(0, priv + INTEL_RESETS);
- readl_poll_timeout(priv + INTEL_RESETS, reg,
- reg & INTEL_RESETS_RESET_DONE, 0,
- INTEL_RESETS_TIMEOUT_US);
- writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
+ intel_reset(priv);
return 0;
}
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 07/13] i3c: mipi-i3c-hci-pci: Factor out intel_reset()
2025-11-14 18:13 ` [PATCH V2 07/13] i3c: mipi-i3c-hci-pci: Factor out intel_reset() Adrian Hunter
@ 2025-11-14 19:46 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-14 19:46 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:50PM +0200, Adrian Hunter wrote:
> For neatness, factor out intel_reset().
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
>
>
> Changes in V2:
>
> Move location of intel_reset() to get a prettier diff
>
>
> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 20 ++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index 1e1f2c42bd74..b9794212b2fb 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -27,6 +27,18 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
> #define INTEL_RESETS_RESET_DONE BIT(1)
> #define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
>
> +static void intel_reset(void __iomem *priv)
> +{
> + u32 reg;
> +
> + /* Assert reset, wait for completion and release reset */
> + writel(0, priv + INTEL_RESETS);
> + readl_poll_timeout(priv + INTEL_RESETS, reg,
> + reg & INTEL_RESETS_RESET_DONE, 0,
> + INTEL_RESETS_TIMEOUT_US);
> + writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
> +}
> +
> static void __iomem *intel_priv(struct pci_dev *pci)
> {
> resource_size_t base = pci_resource_start(pci, 0);
> @@ -37,19 +49,13 @@ static void __iomem *intel_priv(struct pci_dev *pci)
> static int intel_i3c_init(struct pci_dev *pci)
> {
> void __iomem *priv = intel_priv(pci);
> - u32 reg;
>
> if (!priv)
> return -ENOMEM;
>
> dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
>
> - /* Assert reset, wait for completion and release reset */
> - writel(0, priv + INTEL_RESETS);
> - readl_poll_timeout(priv + INTEL_RESETS, reg,
> - reg & INTEL_RESETS_RESET_DONE, 0,
> - INTEL_RESETS_TIMEOUT_US);
> - writel(INTEL_RESETS_RESET, priv + INTEL_RESETS);
> + intel_reset(priv);
>
> return 0;
> }
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 08/13] i3c: mipi-i3c-hci-pci: Allocate a structure for mipi_i3c_hci_pci device information
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (6 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 07/13] i3c: mipi-i3c-hci-pci: Factor out intel_reset() Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 09/13] i3c: mipi-i3c-hci-pci: Change callback parameter Adrian Hunter
` (4 subsequent siblings)
12 siblings, 0 replies; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Allocate a structure for mipi_i3c_hci_pci device information, in
preparation for additional changes that need to store mipi_i3c_hci_pci
device-specific information.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
---
Changes in V2:
Add Frank's Rev'd-by
.../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 29 ++++++++++++-------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index b9794212b2fb..8936e50eddf7 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -14,6 +14,10 @@
#include <linux/pci.h>
#include <linux/platform_device.h>
+struct mipi_i3c_hci_pci {
+ struct platform_device *pdev;
+};
+
struct mipi_i3c_hci_pci_info {
int (*init)(struct pci_dev *pci);
};
@@ -68,10 +72,14 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
const struct pci_device_id *id)
{
const struct mipi_i3c_hci_pci_info *info;
- struct platform_device *pdev;
+ struct mipi_i3c_hci_pci *hci;
struct resource res[2];
int dev_id, ret;
+ hci = devm_kzalloc(&pci->dev, sizeof(*hci), GFP_KERNEL);
+ if (!hci)
+ return -ENOMEM;
+
ret = pcim_enable_device(pci);
if (ret)
return ret;
@@ -92,14 +100,14 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
if (dev_id < 0)
return dev_id;
- pdev = platform_device_alloc("mipi-i3c-hci", dev_id);
- if (!pdev)
+ hci->pdev = platform_device_alloc("mipi-i3c-hci", dev_id);
+ if (!hci->pdev)
return -ENOMEM;
- pdev->dev.parent = &pci->dev;
- device_set_node(&pdev->dev, dev_fwnode(&pci->dev));
+ hci->pdev->dev.parent = &pci->dev;
+ device_set_node(&hci->pdev->dev, dev_fwnode(&pci->dev));
- ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res));
+ ret = platform_device_add_resources(hci->pdev, res, ARRAY_SIZE(res));
if (ret)
goto err;
@@ -110,23 +118,24 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
goto err;
}
- ret = platform_device_add(pdev);
+ ret = platform_device_add(hci->pdev);
if (ret)
goto err;
- pci_set_drvdata(pci, pdev);
+ pci_set_drvdata(pci, hci);
return 0;
err:
- platform_device_put(pdev);
+ platform_device_put(hci->pdev);
ida_free(&mipi_i3c_hci_pci_ida, dev_id);
return ret;
}
static void mipi_i3c_hci_pci_remove(struct pci_dev *pci)
{
- struct platform_device *pdev = pci_get_drvdata(pci);
+ struct mipi_i3c_hci_pci *hci = pci_get_drvdata(pci);
+ struct platform_device *pdev = hci->pdev;
int dev_id = pdev->id;
platform_device_unregister(pdev);
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* [PATCH V2 09/13] i3c: mipi-i3c-hci-pci: Change callback parameter
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (7 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 08/13] i3c: mipi-i3c-hci-pci: Allocate a structure for mipi_i3c_hci_pci device information Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 19:49 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 10/13] i3c: mipi-i3c-hci-pci: Add exit callback Adrian Hunter
` (3 subsequent siblings)
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Change ->init() callback parameter from a pointer to the PCI device to a
pointer to the locally defined mipi_i3c_hci_pci_info device information.
This is in preparation for consistency when adding more callbacks that will
need struct mipi_i3c_hci_pci_info.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Re-based
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 8936e50eddf7..7bfb9fe337b6 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -15,11 +15,12 @@
#include <linux/platform_device.h>
struct mipi_i3c_hci_pci {
+ struct pci_dev *pci;
struct platform_device *pdev;
};
struct mipi_i3c_hci_pci_info {
- int (*init)(struct pci_dev *pci);
+ int (*init)(struct mipi_i3c_hci_pci *hci);
};
static DEFINE_IDA(mipi_i3c_hci_pci_ida);
@@ -50,14 +51,14 @@ static void __iomem *intel_priv(struct pci_dev *pci)
return devm_ioremap(&pci->dev, base + INTEL_PRIV_OFFSET, INTEL_PRIV_SIZE);
}
-static int intel_i3c_init(struct pci_dev *pci)
+static int intel_i3c_init(struct mipi_i3c_hci_pci *hci)
{
- void __iomem *priv = intel_priv(pci);
+ void __iomem *priv = intel_priv(hci->pci);
if (!priv)
return -ENOMEM;
- dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
+ dma_set_mask_and_coherent(&hci->pci->dev, DMA_BIT_MASK(64));
intel_reset(priv);
@@ -80,6 +81,8 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
if (!hci)
return -ENOMEM;
+ hci->pci = pci;
+
ret = pcim_enable_device(pci);
if (ret)
return ret;
@@ -113,7 +116,7 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
if (info && info->init) {
- ret = info->init(pci);
+ ret = info->init(hci);
if (ret)
goto err;
}
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 09/13] i3c: mipi-i3c-hci-pci: Change callback parameter
2025-11-14 18:13 ` [PATCH V2 09/13] i3c: mipi-i3c-hci-pci: Change callback parameter Adrian Hunter
@ 2025-11-14 19:49 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-14 19:49 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:52PM +0200, Adrian Hunter wrote:
> Change ->init() callback parameter from a pointer to the PCI device to a
> pointer to the locally defined mipi_i3c_hci_pci_info device information.
from PCI device pointer to mipi_i3c_hci_pci_info device pointer.
> This is in preparation for consistency when adding more callbacks that will
> need struct mipi_i3c_hci_pci_info.
Prepare to add more callbacks in mipi_i3c_hci_pci_info.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>
>
> Changes in V2:
>
> Re-based
>
>
> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index 8936e50eddf7..7bfb9fe337b6 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -15,11 +15,12 @@
> #include <linux/platform_device.h>
>
> struct mipi_i3c_hci_pci {
> + struct pci_dev *pci;
> struct platform_device *pdev;
> };
>
> struct mipi_i3c_hci_pci_info {
> - int (*init)(struct pci_dev *pci);
> + int (*init)(struct mipi_i3c_hci_pci *hci);
> };
>
> static DEFINE_IDA(mipi_i3c_hci_pci_ida);
> @@ -50,14 +51,14 @@ static void __iomem *intel_priv(struct pci_dev *pci)
> return devm_ioremap(&pci->dev, base + INTEL_PRIV_OFFSET, INTEL_PRIV_SIZE);
> }
>
> -static int intel_i3c_init(struct pci_dev *pci)
> +static int intel_i3c_init(struct mipi_i3c_hci_pci *hci)
> {
> - void __iomem *priv = intel_priv(pci);
> + void __iomem *priv = intel_priv(hci->pci);
>
> if (!priv)
> return -ENOMEM;
>
> - dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(64));
> + dma_set_mask_and_coherent(&hci->pci->dev, DMA_BIT_MASK(64));
>
> intel_reset(priv);
>
> @@ -80,6 +81,8 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> if (!hci)
> return -ENOMEM;
>
> + hci->pci = pci;
> +
> ret = pcim_enable_device(pci);
> if (ret)
> return ret;
> @@ -113,7 +116,7 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
>
> info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
> if (info && info->init) {
> - ret = info->init(pci);
> + ret = info->init(hci);
> if (ret)
> goto err;
> }
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 10/13] i3c: mipi-i3c-hci-pci: Add exit callback
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (8 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 09/13] i3c: mipi-i3c-hci-pci: Change callback parameter Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 19:52 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 11/13] i3c: mipi-i3c-hci-pci: Allocate a structure for Intel controller information Adrian Hunter
` (2 subsequent siblings)
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Add ->exit() callback as a counterpart to ->init(). This is in
preparation for adding device-specific features that require cleanup
upon driver removal.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Re-based
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 7bfb9fe337b6..b962d3c2d510 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -17,10 +17,12 @@
struct mipi_i3c_hci_pci {
struct pci_dev *pci;
struct platform_device *pdev;
+ const struct mipi_i3c_hci_pci_info *info;
};
struct mipi_i3c_hci_pci_info {
int (*init)(struct mipi_i3c_hci_pci *hci);
+ void (*exit)(struct mipi_i3c_hci_pci *hci);
};
static DEFINE_IDA(mipi_i3c_hci_pci_ida);
@@ -72,7 +74,6 @@ static const struct mipi_i3c_hci_pci_info intel_info = {
static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
const struct pci_device_id *id)
{
- const struct mipi_i3c_hci_pci_info *info;
struct mipi_i3c_hci_pci *hci;
struct resource res[2];
int dev_id, ret;
@@ -114,9 +115,9 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
if (ret)
goto err;
- info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
- if (info && info->init) {
- ret = info->init(hci);
+ hci->info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
+ if (hci->info && hci->info->init) {
+ ret = hci->info->init(hci);
if (ret)
goto err;
}
@@ -141,6 +142,9 @@ static void mipi_i3c_hci_pci_remove(struct pci_dev *pci)
struct platform_device *pdev = hci->pdev;
int dev_id = pdev->id;
+ if (hci->info && hci->info->exit)
+ hci->info->exit(hci);
+
platform_device_unregister(pdev);
ida_free(&mipi_i3c_hci_pci_ida, dev_id);
}
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 10/13] i3c: mipi-i3c-hci-pci: Add exit callback
2025-11-14 18:13 ` [PATCH V2 10/13] i3c: mipi-i3c-hci-pci: Add exit callback Adrian Hunter
@ 2025-11-14 19:52 ` Frank Li
2025-11-14 19:59 ` Adrian Hunter
0 siblings, 1 reply; 33+ messages in thread
From: Frank Li @ 2025-11-14 19:52 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:53PM +0200, Adrian Hunter wrote:
> Add ->exit() callback as a counterpart to ->init(). This is in
> preparation for adding device-specific features that require cleanup
> upon driver removal.
Prepare to add device-specific features ...
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>
>
> Changes in V2:
>
> Re-based
>
>
> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index 7bfb9fe337b6..b962d3c2d510 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -17,10 +17,12 @@
> struct mipi_i3c_hci_pci {
> struct pci_dev *pci;
> struct platform_device *pdev;
> + const struct mipi_i3c_hci_pci_info *info;
> };
>
> struct mipi_i3c_hci_pci_info {
> int (*init)(struct mipi_i3c_hci_pci *hci);
> + void (*exit)(struct mipi_i3c_hci_pci *hci);
> };
>
> static DEFINE_IDA(mipi_i3c_hci_pci_ida);
> @@ -72,7 +74,6 @@ static const struct mipi_i3c_hci_pci_info intel_info = {
> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> const struct pci_device_id *id)
> {
> - const struct mipi_i3c_hci_pci_info *info;
> struct mipi_i3c_hci_pci *hci;
> struct resource res[2];
> int dev_id, ret;
> @@ -114,9 +115,9 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> if (ret)
> goto err;
>
> - info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
> - if (info && info->init) {
> - ret = info->init(hci);
> + hci->info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
> + if (hci->info && hci->info->init) {
> + ret = hci->info->init(hci);
This part's change does not belong to this patch.
Frank
> if (ret)
> goto err;
> }
> @@ -141,6 +142,9 @@ static void mipi_i3c_hci_pci_remove(struct pci_dev *pci)
> struct platform_device *pdev = hci->pdev;
> int dev_id = pdev->id;
>
> + if (hci->info && hci->info->exit)
> + hci->info->exit(hci);
> +
> platform_device_unregister(pdev);
> ida_free(&mipi_i3c_hci_pci_ida, dev_id);
> }
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 10/13] i3c: mipi-i3c-hci-pci: Add exit callback
2025-11-14 19:52 ` Frank Li
@ 2025-11-14 19:59 ` Adrian Hunter
2025-11-17 15:33 ` Frank Li
0 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 19:59 UTC (permalink / raw)
To: Frank Li; +Cc: alexandre.belloni, linux-i3c
On 14/11/2025 21:52, Frank Li wrote:
> On Fri, Nov 14, 2025 at 08:13:53PM +0200, Adrian Hunter wrote:
>> Add ->exit() callback as a counterpart to ->init(). This is in
>> preparation for adding device-specific features that require cleanup
>> upon driver removal.
>
> Prepare to add device-specific features ...
>
>>
>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>> ---
>>
>>
>> Changes in V2:
>>
>> Re-based
>>
>>
>> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 12 ++++++++----
>> 1 file changed, 8 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
>> index 7bfb9fe337b6..b962d3c2d510 100644
>> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
>> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
>> @@ -17,10 +17,12 @@
>> struct mipi_i3c_hci_pci {
>> struct pci_dev *pci;
>> struct platform_device *pdev;
>> + const struct mipi_i3c_hci_pci_info *info;
>> };
>>
>> struct mipi_i3c_hci_pci_info {
>> int (*init)(struct mipi_i3c_hci_pci *hci);
>> + void (*exit)(struct mipi_i3c_hci_pci *hci);
>> };
>>
>> static DEFINE_IDA(mipi_i3c_hci_pci_ida);
>> @@ -72,7 +74,6 @@ static const struct mipi_i3c_hci_pci_info intel_info = {
>> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
>> const struct pci_device_id *id)
>> {
>> - const struct mipi_i3c_hci_pci_info *info;
>> struct mipi_i3c_hci_pci *hci;
>> struct resource res[2];
>> int dev_id, ret;
>> @@ -114,9 +115,9 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
>> if (ret)
>> goto err;
>>
>> - info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
>> - if (info && info->init) {
>> - ret = info->init(hci);
>> + hci->info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
>> + if (hci->info && hci->info->init) {
>> + ret = hci->info->init(hci);
>
> This part's change does not belong to this patch.
hci->info is used in mipi_i3c_hci_pci_remove(). It has to be assigned.
>
> Frank
>
>> if (ret)
>> goto err;
>> }
>> @@ -141,6 +142,9 @@ static void mipi_i3c_hci_pci_remove(struct pci_dev *pci)
>> struct platform_device *pdev = hci->pdev;
>> int dev_id = pdev->id;
>>
>> + if (hci->info && hci->info->exit)
>> + hci->info->exit(hci);
>> +
>> platform_device_unregister(pdev);
>> ida_free(&mipi_i3c_hci_pci_ida, dev_id);
>> }
>> --
>> 2.51.0
>>
>>
>> --
>> linux-i3c mailing list
>> linux-i3c@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 10/13] i3c: mipi-i3c-hci-pci: Add exit callback
2025-11-14 19:59 ` Adrian Hunter
@ 2025-11-17 15:33 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-17 15:33 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 09:59:51PM +0200, Adrian Hunter wrote:
> On 14/11/2025 21:52, Frank Li wrote:
> > On Fri, Nov 14, 2025 at 08:13:53PM +0200, Adrian Hunter wrote:
> >> Add ->exit() callback as a counterpart to ->init(). This is in
> >> preparation for adding device-specific features that require cleanup
> >> upon driver removal.
> >
> > Prepare to add device-specific features ...
> >
> >>
> >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >> ---
> >>
> >>
> >> Changes in V2:
> >>
> >> Re-based
> >>
> >>
> >> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 12 ++++++++----
> >> 1 file changed, 8 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> >> index 7bfb9fe337b6..b962d3c2d510 100644
> >> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> >> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> >> @@ -17,10 +17,12 @@
> >> struct mipi_i3c_hci_pci {
> >> struct pci_dev *pci;
> >> struct platform_device *pdev;
> >> + const struct mipi_i3c_hci_pci_info *info;
> >> };
> >>
> >> struct mipi_i3c_hci_pci_info {
> >> int (*init)(struct mipi_i3c_hci_pci *hci);
> >> + void (*exit)(struct mipi_i3c_hci_pci *hci);
> >> };
> >>
> >> static DEFINE_IDA(mipi_i3c_hci_pci_ida);
> >> @@ -72,7 +74,6 @@ static const struct mipi_i3c_hci_pci_info intel_info = {
> >> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> >> const struct pci_device_id *id)
> >> {
> >> - const struct mipi_i3c_hci_pci_info *info;
> >> struct mipi_i3c_hci_pci *hci;
> >> struct resource res[2];
> >> int dev_id, ret;
> >> @@ -114,9 +115,9 @@ static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> >> if (ret)
> >> goto err;
> >>
> >> - info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
> >> - if (info && info->init) {
> >> - ret = info->init(hci);
> >> + hci->info = (const struct mipi_i3c_hci_pci_info *)id->driver_data;
> >> + if (hci->info && hci->info->init) {
> >> + ret = hci->info->init(hci);
> >
> > This part's change does not belong to this patch.
>
> hci->info is used in mipi_i3c_hci_pci_remove(). It has to be assigned.
Okay!
Frank
>
> >
> > Frank
> >
> >> if (ret)
> >> goto err;
> >> }
> >> @@ -141,6 +142,9 @@ static void mipi_i3c_hci_pci_remove(struct pci_dev *pci)
> >> struct platform_device *pdev = hci->pdev;
> >> int dev_id = pdev->id;
> >>
> >> + if (hci->info && hci->info->exit)
> >> + hci->info->exit(hci);
> >> +
> >> platform_device_unregister(pdev);
> >> ida_free(&mipi_i3c_hci_pci_ida, dev_id);
> >> }
> >> --
> >> 2.51.0
> >>
> >>
> >> --
> >> linux-i3c mailing list
> >> linux-i3c@lists.infradead.org
> >> http://lists.infradead.org/mailman/listinfo/linux-i3c
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 11/13] i3c: mipi-i3c-hci-pci: Allocate a structure for Intel controller information
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (9 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 10/13] i3c: mipi-i3c-hci-pci: Add exit callback Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 20:11 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
2025-11-14 18:13 ` [PATCH V2 13/13] i3c: mipi-i3c-hci-pci: Set d3cold_delay to 0 " Adrian Hunter
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Allocate a structure for Intel controller information, in preparation
additional changes that need to store Intel device-specific information.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Re-based
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index b962d3c2d510..3f391b0854ae 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -18,6 +18,7 @@ struct mipi_i3c_hci_pci {
struct pci_dev *pci;
struct platform_device *pdev;
const struct mipi_i3c_hci_pci_info *info;
+ void *private;
};
struct mipi_i3c_hci_pci_info {
@@ -34,6 +35,10 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
#define INTEL_RESETS_RESET_DONE BIT(1)
#define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
+struct intel_host {
+ void __iomem *priv;
+};
+
static void intel_reset(void __iomem *priv)
{
u32 reg;
@@ -55,13 +60,17 @@ static void __iomem *intel_priv(struct pci_dev *pci)
static int intel_i3c_init(struct mipi_i3c_hci_pci *hci)
{
+ struct intel_host *host = devm_kzalloc(&hci->pci->dev, sizeof(*host), GFP_KERNEL);
void __iomem *priv = intel_priv(hci->pci);
- if (!priv)
+ if (!host || !priv)
return -ENOMEM;
dma_set_mask_and_coherent(&hci->pci->dev, DMA_BIT_MASK(64));
+ hci->private = host;
+ host->priv = priv;
+
intel_reset(priv);
return 0;
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 11/13] i3c: mipi-i3c-hci-pci: Allocate a structure for Intel controller information
2025-11-14 18:13 ` [PATCH V2 11/13] i3c: mipi-i3c-hci-pci: Allocate a structure for Intel controller information Adrian Hunter
@ 2025-11-14 20:11 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-14 20:11 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:54PM +0200, Adrian Hunter wrote:
> Allocate a structure for Intel controller information, in preparation
> additional changes that need to store Intel device-specific information.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
I think this patch help less, you can direct squash to next one.
Frank
>
>
> Changes in V2:
>
> Re-based
>
>
> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index b962d3c2d510..3f391b0854ae 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -18,6 +18,7 @@ struct mipi_i3c_hci_pci {
> struct pci_dev *pci;
> struct platform_device *pdev;
> const struct mipi_i3c_hci_pci_info *info;
> + void *private;
> };
>
> struct mipi_i3c_hci_pci_info {
> @@ -34,6 +35,10 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
> #define INTEL_RESETS_RESET_DONE BIT(1)
> #define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
>
> +struct intel_host {
> + void __iomem *priv;
> +};
> +
> static void intel_reset(void __iomem *priv)
> {
> u32 reg;
> @@ -55,13 +60,17 @@ static void __iomem *intel_priv(struct pci_dev *pci)
>
> static int intel_i3c_init(struct mipi_i3c_hci_pci *hci)
> {
> + struct intel_host *host = devm_kzalloc(&hci->pci->dev, sizeof(*host), GFP_KERNEL);
> void __iomem *priv = intel_priv(hci->pci);
>
> - if (!priv)
> + if (!host || !priv)
> return -ENOMEM;
>
> dma_set_mask_and_coherent(&hci->pci->dev, DMA_BIT_MASK(64));
>
> + hci->private = host;
> + host->priv = priv;
> +
> intel_reset(priv);
>
> return 0;
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (10 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 11/13] i3c: mipi-i3c-hci-pci: Allocate a structure for Intel controller information Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 20:09 ` Frank Li
2025-11-14 18:13 ` [PATCH V2 13/13] i3c: mipi-i3c-hci-pci: Set d3cold_delay to 0 " Adrian Hunter
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
Implement PM ->set_latency_tolerance() callback to set LTR register values.
Also expose LTR register values via debugfs.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Make use of FIELD_PREP()
Improve handling of values that exceed the maximum
.../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
1 file changed, 125 insertions(+)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 3f391b0854ae..2c827e877d29 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -7,12 +7,15 @@
* Author: Jarkko Nikula <jarkko.nikula@linux.intel.com>
*/
#include <linux/acpi.h>
+#include <linux/bitfield.h>
+#include <linux/debugfs.h>
#include <linux/idr.h>
#include <linux/iopoll.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
+#include <linux/pm_qos.h>
struct mipi_i3c_hci_pci {
struct pci_dev *pci;
@@ -35,10 +38,122 @@ static DEFINE_IDA(mipi_i3c_hci_pci_ida);
#define INTEL_RESETS_RESET_DONE BIT(1)
#define INTEL_RESETS_TIMEOUT_US (10 * USEC_PER_MSEC)
+#define INTEL_ACTIVELTR 0x0c
+#define INTEL_IDLELTR 0x10
+
+#define INTEL_LTR_REQ BIT(15)
+#define INTEL_LTR_SCALE_MASK GENMASK(11, 10)
+#define INTEL_LTR_SCALE_1US FIELD_PREP(INTEL_LTR_SCALE_MASK, 2)
+#define INTEL_LTR_SCALE_32US FIELD_PREP(INTEL_LTR_SCALE_MASK, 3)
+#define INTEL_LTR_VALUE_MASK GENMASK(9, 0)
+
struct intel_host {
void __iomem *priv;
+ u32 active_ltr;
+ u32 idle_ltr;
+ struct dentry *debugfs_root;
};
+static void intel_cache_ltr(struct intel_host *host)
+{
+ host->active_ltr = readl(host->priv + INTEL_ACTIVELTR);
+ host->idle_ltr = readl(host->priv + INTEL_IDLELTR);
+}
+
+static void intel_ltr_set(struct device *dev, s32 val)
+{
+ struct mipi_i3c_hci_pci *hci = dev_get_drvdata(dev);
+ struct intel_host *host = hci->private;
+ u32 ltr;
+
+ /*
+ * Program latency tolerance (LTR) accordingly what has been asked
+ * by the PM QoS layer or disable it in case we were passed
+ * negative value or PM_QOS_LATENCY_ANY.
+ */
+ ltr = readl(host->priv + INTEL_ACTIVELTR);
+
+ if (val == PM_QOS_LATENCY_ANY || val < 0) {
+ ltr &= ~INTEL_LTR_REQ;
+ } else {
+ ltr |= INTEL_LTR_REQ;
+ ltr &= ~INTEL_LTR_SCALE_MASK;
+ ltr &= ~INTEL_LTR_VALUE_MASK;
+
+ if (val > INTEL_LTR_VALUE_MASK) {
+ val >>= 5;
+ if (val > INTEL_LTR_VALUE_MASK)
+ val = INTEL_LTR_VALUE_MASK;
+ ltr |= INTEL_LTR_SCALE_32US | val;
+ } else {
+ ltr |= INTEL_LTR_SCALE_1US | val;
+ }
+ }
+
+ if (ltr == host->active_ltr)
+ return;
+
+ writel(ltr, host->priv + INTEL_ACTIVELTR);
+ writel(ltr, host->priv + INTEL_IDLELTR);
+
+ /* Cache the values into intel_host structure */
+ intel_cache_ltr(host);
+}
+
+static void intel_ltr_expose(struct device *dev)
+{
+ dev->power.set_latency_tolerance = intel_ltr_set;
+ dev_pm_qos_expose_latency_tolerance(dev);
+}
+
+static void intel_ltr_hide(struct device *dev)
+{
+ dev_pm_qos_hide_latency_tolerance(dev);
+ dev->power.set_latency_tolerance = NULL;
+}
+
+static struct dentry *intel_actualize_debugfs_root(bool add)
+{
+ static struct dentry *debugfs_root;
+ static DEFINE_MUTEX(lock);
+ static int ref_cnt;
+
+ guard(mutex)(&lock);
+
+ ref_cnt += add ? 1 : -1;
+
+ if (ref_cnt) {
+ if (IS_ERR_OR_NULL(debugfs_root))
+ debugfs_root = debugfs_create_dir("intel_i3c", NULL);
+ } else {
+ debugfs_remove(debugfs_root);
+ debugfs_root = NULL;
+ }
+
+ return debugfs_root;
+}
+
+static void intel_add_debugfs(struct mipi_i3c_hci_pci *hci)
+{
+ struct dentry *debugfs_root = intel_actualize_debugfs_root(true);
+ struct dentry *dir = debugfs_create_dir(dev_name(&hci->pci->dev), debugfs_root);
+ struct intel_host *host = hci->private;
+
+ intel_cache_ltr(host);
+
+ host->debugfs_root = dir;
+ debugfs_create_x32("active_ltr", 0444, dir, &host->active_ltr);
+ debugfs_create_x32("idle_ltr", 0444, dir, &host->idle_ltr);
+}
+
+static void intel_remove_debugfs(struct mipi_i3c_hci_pci *hci)
+{
+ struct intel_host *host = hci->private;
+
+ debugfs_remove_recursive(host->debugfs_root);
+ intel_actualize_debugfs_root(false);
+}
+
static void intel_reset(void __iomem *priv)
{
u32 reg;
@@ -73,11 +188,21 @@ static int intel_i3c_init(struct mipi_i3c_hci_pci *hci)
intel_reset(priv);
+ intel_ltr_expose(&hci->pci->dev);
+ intel_add_debugfs(hci);
+
return 0;
}
+static void intel_exit(struct mipi_i3c_hci_pci *hci)
+{
+ intel_remove_debugfs(hci);
+ intel_ltr_hide(&hci->pci->dev);
+}
+
static const struct mipi_i3c_hci_pci_info intel_info = {
.init = intel_i3c_init,
+ .exit = intel_exit,
};
static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-14 18:13 ` [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
@ 2025-11-14 20:09 ` Frank Li
2025-11-17 11:36 ` Adrian Hunter
0 siblings, 1 reply; 33+ messages in thread
From: Frank Li @ 2025-11-14 20:09 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
>
> Implement PM ->set_latency_tolerance() callback to set LTR register values.
> Also expose LTR register values via debugfs.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>
>
> Changes in V2:
>
> Make use of FIELD_PREP()
> Improve handling of values that exceed the maximum
>
>
> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
> 1 file changed, 125 insertions(+)
>
...
> +static void intel_ltr_expose(struct device *dev)
> +{
> + dev->power.set_latency_tolerance = intel_ltr_set;
> + dev_pm_qos_expose_latency_tolerance(dev);
> +}
> +
> +static void intel_ltr_hide(struct device *dev)
> +{
> + dev_pm_qos_hide_latency_tolerance(dev);
> + dev->power.set_latency_tolerance = NULL;
> +}
> +
> +static struct dentry *intel_actualize_debugfs_root(bool add)
> +{
> + static struct dentry *debugfs_root;
> + static DEFINE_MUTEX(lock);
> + static int ref_cnt;
> +
> + guard(mutex)(&lock);
> +
> + ref_cnt += add ? 1 : -1;
> +
> + if (ref_cnt) {
> + if (IS_ERR_OR_NULL(debugfs_root))
> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
I think it'd better to create common "i3c" debugfs root. So your device
use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
root.
Frank
...
> +
> static const struct mipi_i3c_hci_pci_info intel_info = {
> .init = intel_i3c_init,
> + .exit = intel_exit,
> };
>
> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-14 20:09 ` Frank Li
@ 2025-11-17 11:36 ` Adrian Hunter
2025-11-17 15:59 ` Frank Li
0 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-17 11:36 UTC (permalink / raw)
To: Frank Li; +Cc: alexandre.belloni, linux-i3c
On 14/11/2025 22:09, Frank Li wrote:
> On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
>> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
>>
>> Implement PM ->set_latency_tolerance() callback to set LTR register values.
>> Also expose LTR register values via debugfs.
>>
>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>> ---
>>
>>
>> Changes in V2:
>>
>> Make use of FIELD_PREP()
>> Improve handling of values that exceed the maximum
>>
>>
>> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
>> 1 file changed, 125 insertions(+)
>>
> ...
>> +static void intel_ltr_expose(struct device *dev)
>> +{
>> + dev->power.set_latency_tolerance = intel_ltr_set;
>> + dev_pm_qos_expose_latency_tolerance(dev);
>> +}
>> +
>> +static void intel_ltr_hide(struct device *dev)
>> +{
>> + dev_pm_qos_hide_latency_tolerance(dev);
>> + dev->power.set_latency_tolerance = NULL;
>> +}
>> +
>> +static struct dentry *intel_actualize_debugfs_root(bool add)
>> +{
>> + static struct dentry *debugfs_root;
>> + static DEFINE_MUTEX(lock);
>> + static int ref_cnt;
>> +
>> + guard(mutex)(&lock);
>> +
>> + ref_cnt += add ? 1 : -1;
>> +
>> + if (ref_cnt) {
>> + if (IS_ERR_OR_NULL(debugfs_root))
>> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
>
> I think it'd better to create common "i3c" debugfs root. So your device
> use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
> root.
The debugfs files are being created for the PCI device to contain PCI
LTR information. The i3c module has nothing to do with that.
Also, currently, there is no module dependency between this PCI driver
and i3c, but a dependency would be necessary to coordinate the creation
and deletion of an 'i3c' debugfs directory.
The extra complexity can't be justified.
>
> ...
>
>> +
>> static const struct mipi_i3c_hci_pci_info intel_info = {
>> .init = intel_i3c_init,
>> + .exit = intel_exit,
>> };
>>
>> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
>> --
>> 2.51.0
>>
>>
>> --
>> linux-i3c mailing list
>> linux-i3c@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-17 11:36 ` Adrian Hunter
@ 2025-11-17 15:59 ` Frank Li
2025-11-17 17:47 ` Adrian Hunter
0 siblings, 1 reply; 33+ messages in thread
From: Frank Li @ 2025-11-17 15:59 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Mon, Nov 17, 2025 at 01:36:36PM +0200, Adrian Hunter wrote:
> On 14/11/2025 22:09, Frank Li wrote:
> > On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
> >> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
> >>
> >> Implement PM ->set_latency_tolerance() callback to set LTR register values.
> >> Also expose LTR register values via debugfs.
> >>
> >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >> ---
> >>
> >>
> >> Changes in V2:
> >>
> >> Make use of FIELD_PREP()
> >> Improve handling of values that exceed the maximum
> >>
> >>
> >> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
> >> 1 file changed, 125 insertions(+)
> >>
> > ...
> >> +static void intel_ltr_expose(struct device *dev)
> >> +{
> >> + dev->power.set_latency_tolerance = intel_ltr_set;
> >> + dev_pm_qos_expose_latency_tolerance(dev);
> >> +}
> >> +
> >> +static void intel_ltr_hide(struct device *dev)
> >> +{
> >> + dev_pm_qos_hide_latency_tolerance(dev);
> >> + dev->power.set_latency_tolerance = NULL;
> >> +}
> >> +
> >> +static struct dentry *intel_actualize_debugfs_root(bool add)
> >> +{
> >> + static struct dentry *debugfs_root;
> >> + static DEFINE_MUTEX(lock);
> >> + static int ref_cnt;
> >> +
> >> + guard(mutex)(&lock);
> >> +
> >> + ref_cnt += add ? 1 : -1;
> >> +
> >> + if (ref_cnt) {
> >> + if (IS_ERR_OR_NULL(debugfs_root))
> >> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
> >
> > I think it'd better to create common "i3c" debugfs root. So your device
> > use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
> > root.
>
> The debugfs files are being created for the PCI device to contain PCI
> LTR information. The i3c module has nothing to do with that.
>
> Also, currently, there is no module dependency between this PCI driver
> and i3c, but a dependency would be necessary to coordinate the creation
> and deletion of an 'i3c' debugfs directory.
>
> The extra complexity can't be justified.
Don't post new versin before we close open discussion. I see your post
patch before this message.
So, I think not necessary to create to root, which cause complex, (need
lock, and refer counter).
Frank
>
> >
> > ...
> >
> >> +
> >> static const struct mipi_i3c_hci_pci_info intel_info = {
> >> .init = intel_i3c_init,
> >> + .exit = intel_exit,
> >> };
> >>
> >> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> >> --
> >> 2.51.0
> >>
> >>
> >> --
> >> linux-i3c mailing list
> >> linux-i3c@lists.infradead.org
> >> http://lists.infradead.org/mailman/listinfo/linux-i3c
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-17 15:59 ` Frank Li
@ 2025-11-17 17:47 ` Adrian Hunter
2025-11-17 17:54 ` Frank Li
0 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-17 17:47 UTC (permalink / raw)
To: Frank Li; +Cc: alexandre.belloni, linux-i3c
On 17/11/2025 17:59, Frank Li wrote:
> On Mon, Nov 17, 2025 at 01:36:36PM +0200, Adrian Hunter wrote:
>> On 14/11/2025 22:09, Frank Li wrote:
>>> On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
>>>> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
>>>>
>>>> Implement PM ->set_latency_tolerance() callback to set LTR register values.
>>>> Also expose LTR register values via debugfs.
>>>>
>>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>>>> ---
>>>>
>>>>
>>>> Changes in V2:
>>>>
>>>> Make use of FIELD_PREP()
>>>> Improve handling of values that exceed the maximum
>>>>
>>>>
>>>> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
>>>> 1 file changed, 125 insertions(+)
>>>>
>>> ...
>>>> +static void intel_ltr_expose(struct device *dev)
>>>> +{
>>>> + dev->power.set_latency_tolerance = intel_ltr_set;
>>>> + dev_pm_qos_expose_latency_tolerance(dev);
>>>> +}
>>>> +
>>>> +static void intel_ltr_hide(struct device *dev)
>>>> +{
>>>> + dev_pm_qos_hide_latency_tolerance(dev);
>>>> + dev->power.set_latency_tolerance = NULL;
>>>> +}
>>>> +
>>>> +static struct dentry *intel_actualize_debugfs_root(bool add)
>>>> +{
>>>> + static struct dentry *debugfs_root;
>>>> + static DEFINE_MUTEX(lock);
>>>> + static int ref_cnt;
>>>> +
>>>> + guard(mutex)(&lock);
>>>> +
>>>> + ref_cnt += add ? 1 : -1;
>>>> +
>>>> + if (ref_cnt) {
>>>> + if (IS_ERR_OR_NULL(debugfs_root))
>>>> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
>>>
>>> I think it'd better to create common "i3c" debugfs root. So your device
>>> use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
>>> root.
>>
>> The debugfs files are being created for the PCI device to contain PCI
>> LTR information. The i3c module has nothing to do with that.
>>
>> Also, currently, there is no module dependency between this PCI driver
>> and i3c, but a dependency would be necessary to coordinate the creation
>> and deletion of an 'i3c' debugfs directory.
>>
>> The extra complexity can't be justified.
>
> Don't post new versin before we close open discussion. I see your post
> patch before this message.
Sorry, but it is late in the release cycle, and it saves time when we
are in different time zones.
>
> So, I think not necessary to create to root, which cause complex, (need
> lock, and refer counter).
So you are OK with V3?
>
> Frank
>
>>
>>>
>>> ...
>>>
>>>> +
>>>> static const struct mipi_i3c_hci_pci_info intel_info = {
>>>> .init = intel_i3c_init,
>>>> + .exit = intel_exit,
>>>> };
>>>>
>>>> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
>>>> --
>>>> 2.51.0
>>>>
>>>>
>>>> --
>>>> linux-i3c mailing list
>>>> linux-i3c@lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/linux-i3c
>>
>>
>> --
>> linux-i3c mailing list
>> linux-i3c@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-17 17:47 ` Adrian Hunter
@ 2025-11-17 17:54 ` Frank Li
2025-11-17 18:09 ` Adrian Hunter
0 siblings, 1 reply; 33+ messages in thread
From: Frank Li @ 2025-11-17 17:54 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Mon, Nov 17, 2025 at 07:47:05PM +0200, Adrian Hunter wrote:
> On 17/11/2025 17:59, Frank Li wrote:
> > On Mon, Nov 17, 2025 at 01:36:36PM +0200, Adrian Hunter wrote:
> >> On 14/11/2025 22:09, Frank Li wrote:
> >>> On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
> >>>> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
> >>>>
> >>>> Implement PM ->set_latency_tolerance() callback to set LTR register values.
> >>>> Also expose LTR register values via debugfs.
> >>>>
> >>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >>>> ---
> >>>>
> >>>>
> >>>> Changes in V2:
> >>>>
> >>>> Make use of FIELD_PREP()
> >>>> Improve handling of values that exceed the maximum
> >>>>
> >>>>
> >>>> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
> >>>> 1 file changed, 125 insertions(+)
> >>>>
> >>> ...
> >>>> +static void intel_ltr_expose(struct device *dev)
> >>>> +{
> >>>> + dev->power.set_latency_tolerance = intel_ltr_set;
> >>>> + dev_pm_qos_expose_latency_tolerance(dev);
> >>>> +}
> >>>> +
> >>>> +static void intel_ltr_hide(struct device *dev)
> >>>> +{
> >>>> + dev_pm_qos_hide_latency_tolerance(dev);
> >>>> + dev->power.set_latency_tolerance = NULL;
> >>>> +}
> >>>> +
> >>>> +static struct dentry *intel_actualize_debugfs_root(bool add)
> >>>> +{
> >>>> + static struct dentry *debugfs_root;
> >>>> + static DEFINE_MUTEX(lock);
> >>>> + static int ref_cnt;
> >>>> +
> >>>> + guard(mutex)(&lock);
> >>>> +
> >>>> + ref_cnt += add ? 1 : -1;
> >>>> +
> >>>> + if (ref_cnt) {
> >>>> + if (IS_ERR_OR_NULL(debugfs_root))
> >>>> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
> >>>
> >>> I think it'd better to create common "i3c" debugfs root. So your device
> >>> use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
> >>> root.
> >>
> >> The debugfs files are being created for the PCI device to contain PCI
> >> LTR information. The i3c module has nothing to do with that.
> >>
> >> Also, currently, there is no module dependency between this PCI driver
> >> and i3c, but a dependency would be necessary to coordinate the creation
> >> and deletion of an 'i3c' debugfs directory.
> >>
> >> The extra complexity can't be justified.
> >
> > Don't post new versin before we close open discussion. I see your post
> > patch before this message.
>
> Sorry, but it is late in the release cycle, and it saves time when we
> are in different time zones.
>
> >
> > So, I think not necessary to create to root, which cause complex, (need
> > lock, and refer counter).
>
> So you are OK with V3?
In v3, still create "intel_i3c" root dir, how about direct create dev
under root
debugfs_create_dir(dev_name(&hci->pci->dev), NULL);
to reduce unneccesary complex, (like mutex lock and ref counter).
Frank
>
> >
> > Frank
> >
> >>
> >>>
> >>> ...
> >>>
> >>>> +
> >>>> static const struct mipi_i3c_hci_pci_info intel_info = {
> >>>> .init = intel_i3c_init,
> >>>> + .exit = intel_exit,
> >>>> };
> >>>>
> >>>> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> >>>> --
> >>>> 2.51.0
> >>>>
> >>>>
> >>>> --
> >>>> linux-i3c mailing list
> >>>> linux-i3c@lists.infradead.org
> >>>> http://lists.infradead.org/mailman/listinfo/linux-i3c
> >>
> >>
> >> --
> >> linux-i3c mailing list
> >> linux-i3c@lists.infradead.org
> >> http://lists.infradead.org/mailman/listinfo/linux-i3c
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-17 17:54 ` Frank Li
@ 2025-11-17 18:09 ` Adrian Hunter
2025-11-17 18:56 ` Frank Li
0 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-17 18:09 UTC (permalink / raw)
To: Frank Li; +Cc: alexandre.belloni, linux-i3c
On 17/11/2025 19:54, Frank Li wrote:
> On Mon, Nov 17, 2025 at 07:47:05PM +0200, Adrian Hunter wrote:
>> On 17/11/2025 17:59, Frank Li wrote:
>>> On Mon, Nov 17, 2025 at 01:36:36PM +0200, Adrian Hunter wrote:
>>>> On 14/11/2025 22:09, Frank Li wrote:
>>>>> On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
>>>>>> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
>>>>>>
>>>>>> Implement PM ->set_latency_tolerance() callback to set LTR register values.
>>>>>> Also expose LTR register values via debugfs.
>>>>>>
>>>>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>>>>>> ---
>>>>>>
>>>>>>
>>>>>> Changes in V2:
>>>>>>
>>>>>> Make use of FIELD_PREP()
>>>>>> Improve handling of values that exceed the maximum
>>>>>>
>>>>>>
>>>>>> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
>>>>>> 1 file changed, 125 insertions(+)
>>>>>>
>>>>> ...
>>>>>> +static void intel_ltr_expose(struct device *dev)
>>>>>> +{
>>>>>> + dev->power.set_latency_tolerance = intel_ltr_set;
>>>>>> + dev_pm_qos_expose_latency_tolerance(dev);
>>>>>> +}
>>>>>> +
>>>>>> +static void intel_ltr_hide(struct device *dev)
>>>>>> +{
>>>>>> + dev_pm_qos_hide_latency_tolerance(dev);
>>>>>> + dev->power.set_latency_tolerance = NULL;
>>>>>> +}
>>>>>> +
>>>>>> +static struct dentry *intel_actualize_debugfs_root(bool add)
>>>>>> +{
>>>>>> + static struct dentry *debugfs_root;
>>>>>> + static DEFINE_MUTEX(lock);
>>>>>> + static int ref_cnt;
>>>>>> +
>>>>>> + guard(mutex)(&lock);
>>>>>> +
>>>>>> + ref_cnt += add ? 1 : -1;
>>>>>> +
>>>>>> + if (ref_cnt) {
>>>>>> + if (IS_ERR_OR_NULL(debugfs_root))
>>>>>> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
>>>>>
>>>>> I think it'd better to create common "i3c" debugfs root. So your device
>>>>> use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
>>>>> root.
>>>>
>>>> The debugfs files are being created for the PCI device to contain PCI
>>>> LTR information. The i3c module has nothing to do with that.
>>>>
>>>> Also, currently, there is no module dependency between this PCI driver
>>>> and i3c, but a dependency would be necessary to coordinate the creation
>>>> and deletion of an 'i3c' debugfs directory.
>>>>
>>>> The extra complexity can't be justified.
>>>
>>> Don't post new versin before we close open discussion. I see your post
>>> patch before this message.
>>
>> Sorry, but it is late in the release cycle, and it saves time when we
>> are in different time zones.
>>
>>>
>>> So, I think not necessary to create to root, which cause complex, (need
>>> lock, and refer counter).
>>
>> So you are OK with V3?
>
> In v3, still create "intel_i3c" root dir, how about direct create dev
> under root
>
> debugfs_create_dir(dev_name(&hci->pci->dev), NULL);
>
> to reduce unneccesary complex, (like mutex lock and ref counter).
Could do. I added intel_i3c to match intel_lpss which is also
PCI devices with LTR e.g.
# tree /sys/kernel/debug/intel_lpss
/sys/kernel/debug/intel_lpss
|-- 0000:00:19.0
| |-- active_ltr
| |-- capabilities
| `-- idle_ltr
`-- 0000:00:19.1
|-- active_ltr
|-- capabilities
`-- idle_ltr
3 directories, 6 files
# tree /sys/kernel/debug/intel_i3c
/sys/kernel/debug/intel_i3c
|-- 0000:00:11.0
| |-- active_ltr
| `-- idle_ltr
`-- 0000:00:11.1
|-- active_ltr
`-- idle_ltr
3 directories, 4 files
#
>
> Frank
>
>>
>>>
>>> Frank
>>>
>>>>
>>>>>
>>>>> ...
>>>>>
>>>>>> +
>>>>>> static const struct mipi_i3c_hci_pci_info intel_info = {
>>>>>> .init = intel_i3c_init,
>>>>>> + .exit = intel_exit,
>>>>>> };
>>>>>>
>>>>>> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
>>>>>> --
>>>>>> 2.51.0
>>>>>>
>>>>>>
>>>>>> --
>>>>>> linux-i3c mailing list
>>>>>> linux-i3c@lists.infradead.org
>>>>>> http://lists.infradead.org/mailman/listinfo/linux-i3c
>>>>
>>>>
>>>> --
>>>> linux-i3c mailing list
>>>> linux-i3c@lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/linux-i3c
>>
>>
>> --
>> linux-i3c mailing list
>> linux-i3c@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-17 18:09 ` Adrian Hunter
@ 2025-11-17 18:56 ` Frank Li
2025-11-17 19:07 ` Adrian Hunter
0 siblings, 1 reply; 33+ messages in thread
From: Frank Li @ 2025-11-17 18:56 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Mon, Nov 17, 2025 at 08:09:41PM +0200, Adrian Hunter wrote:
> On 17/11/2025 19:54, Frank Li wrote:
> > On Mon, Nov 17, 2025 at 07:47:05PM +0200, Adrian Hunter wrote:
> >> On 17/11/2025 17:59, Frank Li wrote:
> >>> On Mon, Nov 17, 2025 at 01:36:36PM +0200, Adrian Hunter wrote:
> >>>> On 14/11/2025 22:09, Frank Li wrote:
> >>>>> On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
> >>>>>> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
> >>>>>>
> >>>>>> Implement PM ->set_latency_tolerance() callback to set LTR register values.
> >>>>>> Also expose LTR register values via debugfs.
> >>>>>>
> >>>>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >>>>>> ---
> >>>>>>
> >>>>>>
> >>>>>> Changes in V2:
> >>>>>>
> >>>>>> Make use of FIELD_PREP()
> >>>>>> Improve handling of values that exceed the maximum
> >>>>>>
> >>>>>>
> >>>>>> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
> >>>>>> 1 file changed, 125 insertions(+)
> >>>>>>
> >>>>> ...
> >>>>>> +static void intel_ltr_expose(struct device *dev)
> >>>>>> +{
> >>>>>> + dev->power.set_latency_tolerance = intel_ltr_set;
> >>>>>> + dev_pm_qos_expose_latency_tolerance(dev);
> >>>>>> +}
> >>>>>> +
> >>>>>> +static void intel_ltr_hide(struct device *dev)
> >>>>>> +{
> >>>>>> + dev_pm_qos_hide_latency_tolerance(dev);
> >>>>>> + dev->power.set_latency_tolerance = NULL;
> >>>>>> +}
> >>>>>> +
> >>>>>> +static struct dentry *intel_actualize_debugfs_root(bool add)
> >>>>>> +{
> >>>>>> + static struct dentry *debugfs_root;
> >>>>>> + static DEFINE_MUTEX(lock);
> >>>>>> + static int ref_cnt;
> >>>>>> +
> >>>>>> + guard(mutex)(&lock);
> >>>>>> +
> >>>>>> + ref_cnt += add ? 1 : -1;
> >>>>>> +
> >>>>>> + if (ref_cnt) {
> >>>>>> + if (IS_ERR_OR_NULL(debugfs_root))
> >>>>>> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
> >>>>>
> >>>>> I think it'd better to create common "i3c" debugfs root. So your device
> >>>>> use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
> >>>>> root.
> >>>>
> >>>> The debugfs files are being created for the PCI device to contain PCI
> >>>> LTR information. The i3c module has nothing to do with that.
> >>>>
> >>>> Also, currently, there is no module dependency between this PCI driver
> >>>> and i3c, but a dependency would be necessary to coordinate the creation
> >>>> and deletion of an 'i3c' debugfs directory.
> >>>>
> >>>> The extra complexity can't be justified.
> >>>
> >>> Don't post new versin before we close open discussion. I see your post
> >>> patch before this message.
> >>
> >> Sorry, but it is late in the release cycle, and it saves time when we
> >> are in different time zones.
> >>
> >>>
> >>> So, I think not necessary to create to root, which cause complex, (need
> >>> lock, and refer counter).
> >>
> >> So you are OK with V3?
> >
> > In v3, still create "intel_i3c" root dir, how about direct create dev
> > under root
> >
> > debugfs_create_dir(dev_name(&hci->pci->dev), NULL);
> >
> > to reduce unneccesary complex, (like mutex lock and ref counter).
>
> Could do. I added intel_i3c to match intel_lpss which is also
> PCI devices with LTR e.g.
You can use similar method to create root at module_init.
static int __init intel_lpss_init(void)
{
intel_lpss_debugfs = debugfs_create_dir("intel_lpss", NULL);
return 0;
}
module_init(intel_lpss_init);
Frank
>
> # tree /sys/kernel/debug/intel_lpss
> /sys/kernel/debug/intel_lpss
> |-- 0000:00:19.0
> | |-- active_ltr
> | |-- capabilities
> | `-- idle_ltr
> `-- 0000:00:19.1
> |-- active_ltr
> |-- capabilities
> `-- idle_ltr
>
> 3 directories, 6 files
> # tree /sys/kernel/debug/intel_i3c
> /sys/kernel/debug/intel_i3c
> |-- 0000:00:11.0
> | |-- active_ltr
> | `-- idle_ltr
> `-- 0000:00:11.1
> |-- active_ltr
> `-- idle_ltr
>
> 3 directories, 4 files
> #
>
>
> >
> > Frank
> >
> >>
> >>>
> >>> Frank
> >>>
> >>>>
> >>>>>
> >>>>> ...
> >>>>>
> >>>>>> +
> >>>>>> static const struct mipi_i3c_hci_pci_info intel_info = {
> >>>>>> .init = intel_i3c_init,
> >>>>>> + .exit = intel_exit,
> >>>>>> };
> >>>>>>
> >>>>>> static int mipi_i3c_hci_pci_probe(struct pci_dev *pci,
> >>>>>> --
> >>>>>> 2.51.0
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> linux-i3c mailing list
> >>>>>> linux-i3c@lists.infradead.org
> >>>>>> http://lists.infradead.org/mailman/listinfo/linux-i3c
> >>>>
> >>>>
> >>>> --
> >>>> linux-i3c mailing list
> >>>> linux-i3c@lists.infradead.org
> >>>> http://lists.infradead.org/mailman/listinfo/linux-i3c
> >>
> >>
> >> --
> >> linux-i3c mailing list
> >> linux-i3c@lists.infradead.org
> >> http://lists.infradead.org/mailman/listinfo/linux-i3c
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-17 18:56 ` Frank Li
@ 2025-11-17 19:07 ` Adrian Hunter
2025-11-17 19:35 ` Frank Li
0 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-17 19:07 UTC (permalink / raw)
To: Frank Li; +Cc: alexandre.belloni, linux-i3c
On 17/11/2025 20:56, Frank Li wrote:
> On Mon, Nov 17, 2025 at 08:09:41PM +0200, Adrian Hunter wrote:
>> On 17/11/2025 19:54, Frank Li wrote:
>>> On Mon, Nov 17, 2025 at 07:47:05PM +0200, Adrian Hunter wrote:
>>>> On 17/11/2025 17:59, Frank Li wrote:
>>>>> On Mon, Nov 17, 2025 at 01:36:36PM +0200, Adrian Hunter wrote:
>>>>>> On 14/11/2025 22:09, Frank Li wrote:
>>>>>>> On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
>>>>>>>> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
>>>>>>>>
>>>>>>>> Implement PM ->set_latency_tolerance() callback to set LTR register values.
>>>>>>>> Also expose LTR register values via debugfs.
>>>>>>>>
>>>>>>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>>>>>>>> ---
>>>>>>>>
>>>>>>>>
>>>>>>>> Changes in V2:
>>>>>>>>
>>>>>>>> Make use of FIELD_PREP()
>>>>>>>> Improve handling of values that exceed the maximum
>>>>>>>>
>>>>>>>>
>>>>>>>> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
>>>>>>>> 1 file changed, 125 insertions(+)
>>>>>>>>
>>>>>>> ...
>>>>>>>> +static void intel_ltr_expose(struct device *dev)
>>>>>>>> +{
>>>>>>>> + dev->power.set_latency_tolerance = intel_ltr_set;
>>>>>>>> + dev_pm_qos_expose_latency_tolerance(dev);
>>>>>>>> +}
>>>>>>>> +
>>>>>>>> +static void intel_ltr_hide(struct device *dev)
>>>>>>>> +{
>>>>>>>> + dev_pm_qos_hide_latency_tolerance(dev);
>>>>>>>> + dev->power.set_latency_tolerance = NULL;
>>>>>>>> +}
>>>>>>>> +
>>>>>>>> +static struct dentry *intel_actualize_debugfs_root(bool add)
>>>>>>>> +{
>>>>>>>> + static struct dentry *debugfs_root;
>>>>>>>> + static DEFINE_MUTEX(lock);
>>>>>>>> + static int ref_cnt;
>>>>>>>> +
>>>>>>>> + guard(mutex)(&lock);
>>>>>>>> +
>>>>>>>> + ref_cnt += add ? 1 : -1;
>>>>>>>> +
>>>>>>>> + if (ref_cnt) {
>>>>>>>> + if (IS_ERR_OR_NULL(debugfs_root))
>>>>>>>> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
>>>>>>>
>>>>>>> I think it'd better to create common "i3c" debugfs root. So your device
>>>>>>> use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
>>>>>>> root.
>>>>>>
>>>>>> The debugfs files are being created for the PCI device to contain PCI
>>>>>> LTR information. The i3c module has nothing to do with that.
>>>>>>
>>>>>> Also, currently, there is no module dependency between this PCI driver
>>>>>> and i3c, but a dependency would be necessary to coordinate the creation
>>>>>> and deletion of an 'i3c' debugfs directory.
>>>>>>
>>>>>> The extra complexity can't be justified.
>>>>>
>>>>> Don't post new versin before we close open discussion. I see your post
>>>>> patch before this message.
>>>>
>>>> Sorry, but it is late in the release cycle, and it saves time when we
>>>> are in different time zones.
>>>>
>>>>>
>>>>> So, I think not necessary to create to root, which cause complex, (need
>>>>> lock, and refer counter).
>>>>
>>>> So you are OK with V3?
>>>
>>> In v3, still create "intel_i3c" root dir, how about direct create dev
>>> under root
>>>
>>> debugfs_create_dir(dev_name(&hci->pci->dev), NULL);
>>>
>>> to reduce unneccesary complex, (like mutex lock and ref counter).
>>
>> Could do. I added intel_i3c to match intel_lpss which is also
>> PCI devices with LTR e.g.
>
> You can use similar method to create root at module_init.
>
> static int __init intel_lpss_init(void)
> {
> intel_lpss_debugfs = debugfs_create_dir("intel_lpss", NULL);
> return 0;
> }
> module_init(intel_lpss_init);
mipi-i3c-hci-pci is not an Intel driver. It can be used for any
PCI device that supports MIPI I3C.
At module init, the driver does not know whether there are any
Intel PCI devices, so it does not know whether to create "intel_i3c".
Nor does it know whether other (non-Intel) devices need debugfs.
It would be preferable to use either the current approach, or as
you already suggested debugfs_create_dir(dev_name(&hci->pci->dev), NULL)
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread* Re: [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers
2025-11-17 19:07 ` Adrian Hunter
@ 2025-11-17 19:35 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-17 19:35 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Mon, Nov 17, 2025 at 09:07:05PM +0200, Adrian Hunter wrote:
> On 17/11/2025 20:56, Frank Li wrote:
> > On Mon, Nov 17, 2025 at 08:09:41PM +0200, Adrian Hunter wrote:
> >> On 17/11/2025 19:54, Frank Li wrote:
> >>> On Mon, Nov 17, 2025 at 07:47:05PM +0200, Adrian Hunter wrote:
> >>>> On 17/11/2025 17:59, Frank Li wrote:
> >>>>> On Mon, Nov 17, 2025 at 01:36:36PM +0200, Adrian Hunter wrote:
> >>>>>> On 14/11/2025 22:09, Frank Li wrote:
> >>>>>>> On Fri, Nov 14, 2025 at 08:13:55PM +0200, Adrian Hunter wrote:
> >>>>>>>> Add support for Latency Tolerance Reporting (LTR) for Intel controllers.
> >>>>>>>>
> >>>>>>>> Implement PM ->set_latency_tolerance() callback to set LTR register values.
> >>>>>>>> Also expose LTR register values via debugfs.
> >>>>>>>>
> >>>>>>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >>>>>>>> ---
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Changes in V2:
> >>>>>>>>
> >>>>>>>> Make use of FIELD_PREP()
> >>>>>>>> Improve handling of values that exceed the maximum
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 125 ++++++++++++++++++
> >>>>>>>> 1 file changed, 125 insertions(+)
> >>>>>>>>
> >>>>>>> ...
> >>>>>>>> +static void intel_ltr_expose(struct device *dev)
> >>>>>>>> +{
> >>>>>>>> + dev->power.set_latency_tolerance = intel_ltr_set;
> >>>>>>>> + dev_pm_qos_expose_latency_tolerance(dev);
> >>>>>>>> +}
> >>>>>>>> +
> >>>>>>>> +static void intel_ltr_hide(struct device *dev)
> >>>>>>>> +{
> >>>>>>>> + dev_pm_qos_hide_latency_tolerance(dev);
> >>>>>>>> + dev->power.set_latency_tolerance = NULL;
> >>>>>>>> +}
> >>>>>>>> +
> >>>>>>>> +static struct dentry *intel_actualize_debugfs_root(bool add)
> >>>>>>>> +{
> >>>>>>>> + static struct dentry *debugfs_root;
> >>>>>>>> + static DEFINE_MUTEX(lock);
> >>>>>>>> + static int ref_cnt;
> >>>>>>>> +
> >>>>>>>> + guard(mutex)(&lock);
> >>>>>>>> +
> >>>>>>>> + ref_cnt += add ? 1 : -1;
> >>>>>>>> +
> >>>>>>>> + if (ref_cnt) {
> >>>>>>>> + if (IS_ERR_OR_NULL(debugfs_root))
> >>>>>>>> + debugfs_root = debugfs_create_dir("intel_i3c", NULL);
> >>>>>>>
> >>>>>>> I think it'd better to create common "i3c" debugfs root. So your device
> >>>>>>> use debugfs_create_dir(dev_name(&hci->pci->dev), ...) under this common
> >>>>>>> root.
> >>>>>>
> >>>>>> The debugfs files are being created for the PCI device to contain PCI
> >>>>>> LTR information. The i3c module has nothing to do with that.
> >>>>>>
> >>>>>> Also, currently, there is no module dependency between this PCI driver
> >>>>>> and i3c, but a dependency would be necessary to coordinate the creation
> >>>>>> and deletion of an 'i3c' debugfs directory.
> >>>>>>
> >>>>>> The extra complexity can't be justified.
> >>>>>
> >>>>> Don't post new versin before we close open discussion. I see your post
> >>>>> patch before this message.
> >>>>
> >>>> Sorry, but it is late in the release cycle, and it saves time when we
> >>>> are in different time zones.
> >>>>
> >>>>>
> >>>>> So, I think not necessary to create to root, which cause complex, (need
> >>>>> lock, and refer counter).
> >>>>
> >>>> So you are OK with V3?
> >>>
> >>> In v3, still create "intel_i3c" root dir, how about direct create dev
> >>> under root
> >>>
> >>> debugfs_create_dir(dev_name(&hci->pci->dev), NULL);
> >>>
> >>> to reduce unneccesary complex, (like mutex lock and ref counter).
> >>
> >> Could do. I added intel_i3c to match intel_lpss which is also
> >> PCI devices with LTR e.g.
> >
> > You can use similar method to create root at module_init.
> >
> > static int __init intel_lpss_init(void)
> > {
> > intel_lpss_debugfs = debugfs_create_dir("intel_lpss", NULL);
> > return 0;
> > }
> > module_init(intel_lpss_init);
>
> mipi-i3c-hci-pci is not an Intel driver. It can be used for any
> PCI device that supports MIPI I3C.
>
> At module init, the driver does not know whether there are any
> Intel PCI devices, so it does not know whether to create "intel_i3c".
> Nor does it know whether other (non-Intel) devices need debugfs.
>
> It would be preferable to use either the current approach, or as
> you already suggested debugfs_create_dir(dev_name(&hci->pci->dev), NULL)
Okay use Debugfs_create_dir(dev_name(&hci->pci->dev), NULL).
Frank
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH V2 13/13] i3c: mipi-i3c-hci-pci: Set d3cold_delay to 0 for Intel controllers
2025-11-14 18:13 [PATCH V2 00/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
` (11 preceding siblings ...)
2025-11-14 18:13 ` [PATCH V2 12/13] i3c: mipi-i3c-hci-pci: Add LTR support for Intel controllers Adrian Hunter
@ 2025-11-14 18:13 ` Adrian Hunter
2025-11-14 20:10 ` Frank Li
12 siblings, 1 reply; 33+ messages in thread
From: Adrian Hunter @ 2025-11-14 18:13 UTC (permalink / raw)
To: alexandre.belloni; +Cc: Frank.Li, linux-i3c
Set d3cold_delay to 0 for Intel controllers because a delay is not needed.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changes in V2:
Re-based
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
index 2c827e877d29..58e00301e5db 100644
--- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
+++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
@@ -183,6 +183,8 @@ static int intel_i3c_init(struct mipi_i3c_hci_pci *hci)
dma_set_mask_and_coherent(&hci->pci->dev, DMA_BIT_MASK(64));
+ hci->pci->d3cold_delay = 0;
+
hci->private = host;
host->priv = priv;
--
2.51.0
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply related [flat|nested] 33+ messages in thread* Re: [PATCH V2 13/13] i3c: mipi-i3c-hci-pci: Set d3cold_delay to 0 for Intel controllers
2025-11-14 18:13 ` [PATCH V2 13/13] i3c: mipi-i3c-hci-pci: Set d3cold_delay to 0 " Adrian Hunter
@ 2025-11-14 20:10 ` Frank Li
0 siblings, 0 replies; 33+ messages in thread
From: Frank Li @ 2025-11-14 20:10 UTC (permalink / raw)
To: Adrian Hunter; +Cc: alexandre.belloni, linux-i3c
On Fri, Nov 14, 2025 at 08:13:56PM +0200, Adrian Hunter wrote:
> Set d3cold_delay to 0 for Intel controllers because a delay is not needed.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
>
>
> Changes in V2:
>
> Re-based
>
>
> drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> index 2c827e877d29..58e00301e5db 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
> @@ -183,6 +183,8 @@ static int intel_i3c_init(struct mipi_i3c_hci_pci *hci)
>
> dma_set_mask_and_coherent(&hci->pci->dev, DMA_BIT_MASK(64));
>
> + hci->pci->d3cold_delay = 0;
> +
> hci->private = host;
> host->priv = priv;
>
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
^ permalink raw reply [flat|nested] 33+ messages in thread