Message ID | 5f9277b84477f13890620d4dbda3804881142946.1739339173.git.gerickson@nuovations.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add QMI Device Service Request Rate-limit Option | expand |
Hi Grant, On 2/11/25 11:52 PM, Grant Erickson wrote: > The Quectel Wireless Solutions Co., Ltd. (2c7c) BG96 CAT-M1/NB-IoT > modem (0296) has a firmware issue where it can lock up and hang (not > responding to subsequent commands) due to high QMI service request > arrival rates. If the vendor and model match those, then rate limit > QMI service requests to no more than one every 2,000 us. > --- > plugins/udevng.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/plugins/udevng.c b/plugins/udevng.c > index 64875a47752b..e7cf494a70ff 100644 > --- a/plugins/udevng.c > +++ b/plugins/udevng.c > @@ -1118,6 +1118,20 @@ static gboolean setup_quectelqmi(struct modem_info *modem) > > DBG("%s", modem->syspath); > > + /* > + * The Quectel Wireless Solutions Co., Ltd. (2c7c) BG96 > + * CAT-M1/NB-IoT modem (0296) has a firmware issue where it can > + * lock up and hang (not responding to subsequent commands) due to > + * high QMI service request arrival rates. If the vendor and model > + * match those, then rate limit QMI service requests to no more > + * than one every 2,000 us. > + */ > + if (g_strcmp0(modem->vendor, "2c7c") == 0) { Please use ell for all new code. l_streq0 or so. > + if (g_strcmp0(modem->model, "0296") == 0) { > + ofono_modem_set_integer(modem->modem, "QMIMinReqPeriodUs", 2000); > + } > + } The {} are unnecessary. > + > for (list = modem->devices; list; list = g_slist_next(list)) { > const struct device_info *info = list->data; > const char *subsystem = Regards, -Denis
On Feb 12, 2025, at 11:30 AM, Denis Kenzior <denkenz@gmail.com> wrote: > On 2/11/25 11:52 PM, Grant Erickson wrote: >> The Quectel Wireless Solutions Co., Ltd. (2c7c) BG96 CAT-M1/NB-IoT >> modem (0296) has a firmware issue where it can lock up and hang (not >> responding to subsequent commands) due to high QMI service request >> arrival rates. If the vendor and model match those, then rate limit >> QMI service requests to no more than one every 2,000 us. >> --- >> plugins/udevng.c | 14 ++++++++++++++ >> 1 file changed, 14 insertions(+) >> diff --git a/plugins/udevng.c b/plugins/udevng.c >> index 64875a47752b..e7cf494a70ff 100644 >> --- a/plugins/udevng.c >> +++ b/plugins/udevng.c >> @@ -1118,6 +1118,20 @@ static gboolean setup_quectelqmi(struct modem_info *modem) >> DBG("%s", modem->syspath); >> + /* >> + * The Quectel Wireless Solutions Co., Ltd. (2c7c) BG96 >> + * CAT-M1/NB-IoT modem (0296) has a firmware issue where it can >> + * lock up and hang (not responding to subsequent commands) due to >> + * high QMI service request arrival rates. If the vendor and model >> + * match those, then rate limit QMI service requests to no more >> + * than one every 2,000 us. >> + */ >> + if (g_strcmp0(modem->vendor, "2c7c") == 0) { > > Please use ell for all new code. l_streq0 or so. > >> + if (g_strcmp0(modem->model, "0296") == 0) { >> + ofono_modem_set_integer(modem->modem, "QMIMinReqPeriodUs", 2000); >> + } >> + } > > The {} are unnecessary. Denis, Noted; will include both in a v2. Best, Grant
diff --git a/plugins/udevng.c b/plugins/udevng.c index 64875a47752b..e7cf494a70ff 100644 --- a/plugins/udevng.c +++ b/plugins/udevng.c @@ -1118,6 +1118,20 @@ static gboolean setup_quectelqmi(struct modem_info *modem) DBG("%s", modem->syspath); + /* + * The Quectel Wireless Solutions Co., Ltd. (2c7c) BG96 + * CAT-M1/NB-IoT modem (0296) has a firmware issue where it can + * lock up and hang (not responding to subsequent commands) due to + * high QMI service request arrival rates. If the vendor and model + * match those, then rate limit QMI service requests to no more + * than one every 2,000 us. + */ + if (g_strcmp0(modem->vendor, "2c7c") == 0) { + if (g_strcmp0(modem->model, "0296") == 0) { + ofono_modem_set_integer(modem->modem, "QMIMinReqPeriodUs", 2000); + } + } + for (list = modem->devices; list; list = g_slist_next(list)) { const struct device_info *info = list->data; const char *subsystem =