Bug 100000

Summary: EM7455 reports switching to GPRS
Product: ModemManager Reporter: Aleksander Morgado <aleksander>
Component: generalAssignee: ModemManager bug user <modemmanager>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium CC: dcbw
Version: git master   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description Aleksander Morgado 2017-02-28 09:42:02 UTC
Looks like we're reporting a change to GPRS on a EM7455, running in MBIM mode, but with QCDM checks via TTY:

Лют 28 12:37:26 junocat ModemManager[1057]: <debug> (ttyUSB0): --> 4b 08 01 00 66 f5 7e
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> (ttyUSB0): <-- 4b 08 01 00 08 0a 41 85 02 00 09 61 64 00 00 00 00 00 00 00 00 00 03 de ad 00 00 00 00 00 05 05 31 23 7e
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> (ttyUSB0): --> 4b 04 0f 00 d5 ca 7e
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> (ttyUSB0): <-- 4b 04 0f 00 08 0a 41 85 02 00 09 61 64 08 29 75 20 57 51 35 41 36 08 0b 5c 7e
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> QCDM operating mode: 5
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> QCDM system mode: 5
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> QCDM hybrid pref: 0
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> QCDM WCDMA open: 0
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> QCDM EVDO open: 0
Лют 28 12:37:26 junocat ModemManager[1057]: <debug> Modem /org/freedesktop/ModemManager1/Modem/6: access technology changed (umts, hsdpa, hsupa -> gprs)

If I'm not mistaken this isn't possible, as the module doesn't support 2G.
Comment 1 Dan Williams 2017-02-28 19:27:12 UTC
Three bugs here, I think:

1) WCDMA subsystem L1 state 0x08 (4th byte from the end) is QCDM_WCDMA_L1_STATE_DEACTIVATE which MM doesn't recognize as an active WCDMA state, and thus ctx->wcdma_open=0 and MM assumes GPRS.  But turns out that's wrong, the state should really be "PCH_SLEEP" which is a valid WCDMA connected state.  I'll update libqcdm.

2) If the sysmode is QCDM_CMD_CM_SUBSYS_STATE_INFO_SYSTEM_MODE_WCDMA (QCDM system mode 5) MM shouldn't fall back to GPRS since that enum value indicates GPRS is not supposed to be enabled (as opposed to MODE_GSM and MODE_GW).

3) Why are we bothering to check QCDM for access tech when MBIM can already provide that? :)
Comment 2 Dan Williams 2017-02-28 19:47:47 UTC
Patches sent to list for the first two items.

[PATCH 1/2] libqcdm: fix WCDMA L1 Manager states
[PATCH 2/2] broadband-modem: fix QCDM access tech reporting for WCDMA system modes
Comment 3 Aleksander Morgado 2017-02-28 23:59:39 UTC
> 3) Why are we bothering to check QCDM for access tech when MBIM can already
> provide that? :)

Looks like the MBIM implementation doesn't subclass "load_access_technologies" and therefore we just take what's in the generic MMBroadbandModem.

IIRC there isn't an explicit MBIM message to query this, so should we just cache whatever access tech we get reported via other messages, and then return the cached value in a subclassed "load_access_technologies"?
Comment 4 Aleksander Morgado 2017-03-01 00:00:49 UTC
(In reply to Dan Williams from comment #2)
> Patches sent to list for the first two items.
> 
> [PATCH 1/2] libqcdm: fix WCDMA L1 Manager states
> [PATCH 2/2] broadband-modem: fix QCDM access tech reporting for WCDMA system
> modes

+1 for both
Comment 5 Dan Williams 2017-03-01 15:51:35 UTC
(In reply to Aleksander Morgado from comment #3)
> > 3) Why are we bothering to check QCDM for access tech when MBIM can already
> > provide that? :)
> 
> Looks like the MBIM implementation doesn't subclass
> "load_access_technologies" and therefore we just take what's in the generic
> MMBroadbandModem.
> 
> IIRC there isn't an explicit MBIM message to query this, so should we just
> cache whatever access tech we get reported via other messages, and then
> return the cached value in a subclassed "load_access_technologies"?

Yeah, that's what should happen.  Icera kinda does this already (but only because the unsolicited regex captures the solicited command response too).

But really, couldn't we just set the load_access_tech/finish hooks to NULL and let the unsolicited messaging handle access tech updates?
Comment 6 Dan Williams 2017-03-01 15:51:50 UTC
(In reply to Aleksander Morgado from comment #4)
> (In reply to Dan Williams from comment #2)
> > Patches sent to list for the first two items.
> > 
> > [PATCH 1/2] libqcdm: fix WCDMA L1 Manager states
> > [PATCH 2/2] broadband-modem: fix QCDM access tech reporting for WCDMA system
> > modes
> 
> +1 for both

Pushed to git master, 1-6, and 1-4.
Comment 7 Aleksander Morgado 2017-03-01 17:35:19 UTC
(In reply to Dan Williams from comment #5)
> (In reply to Aleksander Morgado from comment #3)
> > > 3) Why are we bothering to check QCDM for access tech when MBIM can already
> > > provide that? :)
> > 
> > Looks like the MBIM implementation doesn't subclass
> > "load_access_technologies" and therefore we just take what's in the generic
> > MMBroadbandModem.
> > 
> > IIRC there isn't an explicit MBIM message to query this, so should we just
> > cache whatever access tech we get reported via other messages, and then
> > return the cached value in a subclassed "load_access_technologies"?
> 
> Yeah, that's what should happen.  Icera kinda does this already (but only
> because the unsolicited regex captures the solicited command response too).
> 
> But really, couldn't we just set the load_access_tech/finish hooks to NULL
> and let the unsolicited messaging handle access tech updates?

Hah, yeah, probably, let me test that.
Comment 8 Aleksander Morgado 2017-03-01 17:49:56 UTC
(In reply to Aleksander Morgado from comment #7)
> (In reply to Dan Williams from comment #5)
> > (In reply to Aleksander Morgado from comment #3)
> > > > 3) Why are we bothering to check QCDM for access tech when MBIM can already
> > > > provide that? :)
> > > 
> > > Looks like the MBIM implementation doesn't subclass
> > > "load_access_technologies" and therefore we just take what's in the generic
> > > MMBroadbandModem.
> > > 
> > > IIRC there isn't an explicit MBIM message to query this, so should we just
> > > cache whatever access tech we get reported via other messages, and then
> > > return the cached value in a subclassed "load_access_technologies"?
> > 
> > Yeah, that's what should happen.  Icera kinda does this already (but only
> > because the unsolicited regex captures the solicited command response too).
> > 
> > But really, couldn't we just set the load_access_tech/finish hooks to NULL
> > and let the unsolicited messaging handle access tech updates?
> 
> Hah, yeah, probably, let me test that.

Pushed to master, mm-1-6 and mm-1-4.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.