]> www.infradead.org Git - users/jedix/linux-maple.git/commit
i3c: master: svc: use spin_lock_irqsave at svc_i3c_master_ibi_work()
authorFrank Li <Frank.Li@nxp.com>
Wed, 2 Oct 2024 14:50:36 +0000 (10:50 -0400)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Thu, 31 Oct 2024 22:53:39 +0000 (23:53 +0100)
commitf36f6624cbacb31d25d2cc11dfb1e74cd2a3996e
tree29feece016db316bdff40ef11275a98bed173fcf
parent6a12f56f7392cfdd2f31ef9a090ccadadae548e8
i3c: master: svc: use spin_lock_irqsave at svc_i3c_master_ibi_work()

According to I3C spec ver 1.1, 09-Jun-2021, section 5.1.2.5:

The I3C Controller shall hold SCL low while the Bus is in ACK/NACK Phase of
I3C/I2C transfer. But maximum stall time is 100us. The IRQs have to be
disabled to prevent schedule during the whole I3C transaction, otherwise,
the I3C bus timeout may happen if any irq or schedule happen during
transaction.

Replace mutex with spin_lock_irqsave() to avoid stalling SCL more than
100us.

Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20241002-svc-i3c-hj-v6-4-7e6e1d3569ae@nxp.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/i3c/master/svc-i3c-master.c