Message ID | 20210809063645.2289988-9-xiaoning.wang@nxp.com (mailing list archive) |
---|---|
State | Accepted |
Commit | f0721dafe41fe21dd5e1130b99bb5f0da32cf1aa |
Headers | show |
Series | i3c: master: svc: some bug fixes and add runtime pm support | expand |
Hi Clark, Clark Wang <xiaoning.wang@nxp.com> wrote on Mon, 9 Aug 2021 14:36:45 +0800: > If enable interrupt in the svc_i3c_master_bus_init() but do not call > enable ibi in the device driver, it will cause a kernel dump in the > svc_i3c_master_handle_ibi() when a slave start occurs on the i3c bus, > because the data->ibi_pool is not initialized. > So only enable the interrupt in svc_i3c_master_enable_ibi() function. Is this situation actually happening or is this purely theoretical? Anyway this doesn't hurt so: Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> > > Signed-off-by: Clark Wang <xiaoning.wang@nxp.com> > --- > V4: New patch in this patchset > --- > drivers/i3c/master/svc-i3c-master.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c > index 77f67d407acd..b802afd8eb7d 100644 > --- a/drivers/i3c/master/svc-i3c-master.c > +++ b/drivers/i3c/master/svc-i3c-master.c > @@ -569,8 +569,6 @@ static int svc_i3c_master_bus_init(struct i3c_master_controller *m) > if (ret) > goto rpm_out; > > - svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART); > - > rpm_out: > pm_runtime_mark_last_busy(master->dev); > pm_runtime_put_autosuspend(master->dev); > @@ -1398,6 +1396,8 @@ static int svc_i3c_master_enable_ibi(struct i3c_dev_desc *dev) > return ret; > } > > + svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART); > + > return i3c_master_enec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR); > } > > @@ -1407,6 +1407,8 @@ static int svc_i3c_master_disable_ibi(struct i3c_dev_desc *dev) > struct svc_i3c_master *master = to_svc_i3c_master(m); > int ret; > > + svc_i3c_master_disable_interrupts(master); > + > ret = i3c_master_disec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR); > > pm_runtime_mark_last_busy(master->dev); Thanks, Miquèl
diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 77f67d407acd..b802afd8eb7d 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -569,8 +569,6 @@ static int svc_i3c_master_bus_init(struct i3c_master_controller *m) if (ret) goto rpm_out; - svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART); - rpm_out: pm_runtime_mark_last_busy(master->dev); pm_runtime_put_autosuspend(master->dev); @@ -1398,6 +1396,8 @@ static int svc_i3c_master_enable_ibi(struct i3c_dev_desc *dev) return ret; } + svc_i3c_master_enable_interrupts(master, SVC_I3C_MINT_SLVSTART); + return i3c_master_enec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR); } @@ -1407,6 +1407,8 @@ static int svc_i3c_master_disable_ibi(struct i3c_dev_desc *dev) struct svc_i3c_master *master = to_svc_i3c_master(m); int ret; + svc_i3c_master_disable_interrupts(master); + ret = i3c_master_disec_locked(m, dev->info.dyn_addr, I3C_CCC_EVENT_SIR); pm_runtime_mark_last_busy(master->dev);
If enable interrupt in the svc_i3c_master_bus_init() but do not call enable ibi in the device driver, it will cause a kernel dump in the svc_i3c_master_handle_ibi() when a slave start occurs on the i3c bus, because the data->ibi_pool is not initialized. So only enable the interrupt in svc_i3c_master_enable_ibi() function. Signed-off-by: Clark Wang <xiaoning.wang@nxp.com> --- V4: New patch in this patchset --- drivers/i3c/master/svc-i3c-master.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)