i3c: master: svc: fix atomic issue
do_daa_locked() function is in a spin lock environment, use readl_poll_timeout_atomic() to replace the origin readl_poll_timeout(). Signed-off-by: Clark Wang <xiaoning.wang@nxp.com> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> Reviewed-by: Jun Li <jun.li@nxp.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Link: https://lore.kernel.org/r/20211227074529.1660398-3-xiaoning.wang@nxp.com
This commit is contained in:
parent
57d8d3fc06
commit
a84a9222b2
@ -656,8 +656,10 @@ static int svc_i3c_master_readb(struct svc_i3c_master *master, u8 *dst,
|
|||||||
u32 reg;
|
u32 reg;
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
|
ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
|
||||||
SVC_I3C_MSTATUS_RXPEND(reg), 0, 1000);
|
reg,
|
||||||
|
SVC_I3C_MSTATUS_RXPEND(reg),
|
||||||
|
0, 1000);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -687,7 +689,8 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master,
|
|||||||
* Either one slave will send its ID, or the assignment process
|
* Either one slave will send its ID, or the assignment process
|
||||||
* is done.
|
* is done.
|
||||||
*/
|
*/
|
||||||
ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
|
ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
|
||||||
|
reg,
|
||||||
SVC_I3C_MSTATUS_RXPEND(reg) |
|
SVC_I3C_MSTATUS_RXPEND(reg) |
|
||||||
SVC_I3C_MSTATUS_MCTRLDONE(reg),
|
SVC_I3C_MSTATUS_MCTRLDONE(reg),
|
||||||
1, 1000);
|
1, 1000);
|
||||||
@ -744,7 +747,8 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Wait for the slave to be ready to receive its address */
|
/* Wait for the slave to be ready to receive its address */
|
||||||
ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg,
|
ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS,
|
||||||
|
reg,
|
||||||
SVC_I3C_MSTATUS_MCTRLDONE(reg) &&
|
SVC_I3C_MSTATUS_MCTRLDONE(reg) &&
|
||||||
SVC_I3C_MSTATUS_STATE_DAA(reg) &&
|
SVC_I3C_MSTATUS_STATE_DAA(reg) &&
|
||||||
SVC_I3C_MSTATUS_BETWEEN(reg),
|
SVC_I3C_MSTATUS_BETWEEN(reg),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user