Message ID | 20220112194118.178026-10-luca@z3ntu.xyz |
---|---|
State | New |
Headers | show |
Series | Initial MSM8953 & Fairphone 3 support | expand |
On Wed 12 Jan 13:40 CST 2022, Luca Weiss wrote: > From: Vladimir Lypak <vladimir.lypak@gmail.com> > > RPM Firmware on variety of newer SoCs such as MSM8917 (also likely > MSM8937, MSM8940, MSM8952), MSM8953 and on some MSM8916 devices) doesn't > initiate opening of the SMD channel if it was previously opened by > bootloader. This doesn't allow probing of smd-rpm driver on such devices > because there is a check that requires RPM this behaviour. > > Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> > Reviewed-by: Konrad Dybcio <konrad.dybcio@somainline.org> > --- > drivers/rpmsg/qcom_smd.c | 8 +------- > 1 file changed, 1 insertion(+), 7 deletions(-) > > diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c > index 8da1b5cb31b3..6a01ef932b01 100644 > --- a/drivers/rpmsg/qcom_smd.c > +++ b/drivers/rpmsg/qcom_smd.c > @@ -1280,19 +1280,13 @@ static void qcom_channel_state_worker(struct work_struct *work) > unsigned long flags; > > /* > - * Register a device for any closed channel where the remote processor > - * is showing interest in opening the channel. > + * Register a device for any closed channel. > */ > spin_lock_irqsave(&edge->channels_lock, flags); > list_for_each_entry(channel, &edge->channels, list) { > if (channel->state != SMD_CHANNEL_CLOSED) > continue; > > - remote_state = GET_RX_CHANNEL_INFO(channel, state); > - if (remote_state != SMD_CHANNEL_OPENING && > - remote_state != SMD_CHANNEL_OPENED) > - continue; The second time you boot the modem (e.g. after a firmware crash), we will find a whole bunch of channels here and attempt to open them in order, but the modem will refuse to open most of them until the IPCRTR channel has been opened and we have done the rmtfs dance - at which time we have timed out opening a bunch of channels and things are in a broken state. As such, this has been proven to not work :( Regards, Bjorn > - > if (channel->registered) > continue; > > -- > 2.34.1 >
diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c index 8da1b5cb31b3..6a01ef932b01 100644 --- a/drivers/rpmsg/qcom_smd.c +++ b/drivers/rpmsg/qcom_smd.c @@ -1280,19 +1280,13 @@ static void qcom_channel_state_worker(struct work_struct *work) unsigned long flags; /* - * Register a device for any closed channel where the remote processor - * is showing interest in opening the channel. + * Register a device for any closed channel. */ spin_lock_irqsave(&edge->channels_lock, flags); list_for_each_entry(channel, &edge->channels, list) { if (channel->state != SMD_CHANNEL_CLOSED) continue; - remote_state = GET_RX_CHANNEL_INFO(channel, state); - if (remote_state != SMD_CHANNEL_OPENING && - remote_state != SMD_CHANNEL_OPENED) - continue; - if (channel->registered) continue;