i3c: mipi-i3c-hci: Resume controller explicitly
authorJarkko Nikula <jarkko.nikula@linux.intel.com>
Thu, 21 Sep 2023 05:57:03 +0000 (08:57 +0300)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Mon, 25 Sep 2023 21:35:14 +0000 (23:35 +0200)
On an HW I'm using in enabling work the RESUME bit is not set in the
HC_CONTROLLER register when Host Controller goes to halt state. Value 1
should mean controller is suspended when reading and writing 1 resumes it.

Because of this erratic behaviour plain HC_CONTROL read and write back
won't resume the controller. Therefore do it by setting the RESUME bit
explicitly.

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Link: https://lore.kernel.org/r/20230921055704.1087277-12-jarkko.nikula@linux.intel.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/i3c/master/mipi-i3c-hci/core.c

index d7fe8e62820adcb267a59b43413a637e537dd785..1ae56a5699c6b63eee19e73031d28658e5e1d3ca 100644 (file)
@@ -174,8 +174,7 @@ static void i3c_hci_bus_cleanup(struct i3c_master_controller *m)
 
 void mipi_i3c_hci_resume(struct i3c_hci *hci)
 {
-       /* the HC_CONTROL_RESUME bit is R/W1C so just read and write back */
-       reg_write(HC_CONTROL, reg_read(HC_CONTROL));
+       reg_set(HC_CONTROL, HC_CONTROL_RESUME);
 }
 
 /* located here rather than pio.c because needed bits are in core reg space */