[PATCH 09/17] i3c: mipi-i3c-hci: Introduce helper to restore DAT

Frank Li Frank.li at nxp.com
Fri Dec 19 08:37:20 PST 2025


On Fri, Dec 19, 2025 at 04:45:26PM +0200, Adrian Hunter wrote:
> Add a dedicated function to restore the Device Address Table (DAT) in
> preparation for Runtime PM support.  This will allow reprogramming the DAT
> after the controller resumes from a low-power state.
>
> Signed-off-by: Adrian Hunter <adrian.hunter at intel.com>
> ---

Reviewed-by: Frank Li <Frank.Li at nxp.com>

>  drivers/i3c/master/mipi-i3c-hci/dat.h    | 1 +
>  drivers/i3c/master/mipi-i3c-hci/dat_v1.c | 9 +++++++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/drivers/i3c/master/mipi-i3c-hci/dat.h b/drivers/i3c/master/mipi-i3c-hci/dat.h
> index 5277c65fc601..6881f19da77f 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/dat.h
> +++ b/drivers/i3c/master/mipi-i3c-hci/dat.h
> @@ -24,6 +24,7 @@ struct hci_dat_ops {
>  	void (*set_flags)(struct i3c_hci *hci, unsigned int dat_idx, u32 w0, u32 w1);
>  	void (*clear_flags)(struct i3c_hci *hci, unsigned int dat_idx, u32 w0, u32 w1);
>  	int (*get_index)(struct i3c_hci *hci, u8 address);
> +	void (*restore)(struct i3c_hci *hci);
>  };
>
>  extern const struct hci_dat_ops mipi_i3c_hci_dat_v1;
> diff --git a/drivers/i3c/master/mipi-i3c-hci/dat_v1.c b/drivers/i3c/master/mipi-i3c-hci/dat_v1.c
> index 644ab939be1c..852966aa20d9 100644
> --- a/drivers/i3c/master/mipi-i3c-hci/dat_v1.c
> +++ b/drivers/i3c/master/mipi-i3c-hci/dat_v1.c
> @@ -181,6 +181,14 @@ static int hci_dat_v1_get_index(struct i3c_hci *hci, u8 dev_addr)
>  	return -ENODEV;
>  }
>
> +static void hci_dat_v1_restore(struct i3c_hci *hci)
> +{
> +	for (int i = 0; i < hci->DAT_entries; i++) {
> +		writel(hci->DAT[i].w0, hci->DAT_regs + i * 8);
> +		writel(hci->DAT[i].w1, hci->DAT_regs + i * 8 + 4);
> +	}
> +}
> +
>  const struct hci_dat_ops mipi_i3c_hci_dat_v1 = {
>  	.init			= hci_dat_v1_init,
>  	.alloc_entry		= hci_dat_v1_alloc_entry,
> @@ -190,4 +198,5 @@ const struct hci_dat_ops mipi_i3c_hci_dat_v1 = {
>  	.set_flags		= hci_dat_v1_set_flags,
>  	.clear_flags		= hci_dat_v1_clear_flags,
>  	.get_index		= hci_dat_v1_get_index,
> +	.restore		= hci_dat_v1_restore,
>  };
> --
> 2.51.0
>
>
> --
> linux-i3c mailing list
> linux-i3c at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-i3c



More information about the linux-i3c mailing list