Commit f180524a authored by Adrian Hunter's avatar Adrian Hunter Committed by Alexandre Belloni
Browse files

i3c: mipi-i3c-hci: Introduce helper to restore DAT



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: default avatarAdrian Hunter <adrian.hunter@intel.com>
Reviewed-by: default avatarFrank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20260113072702.16268-10-adrian.hunter@intel.com


Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent a372cfac
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
+9 −0
Original line number Diff line number Diff line
@@ -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,
};