3G/LTE Modem (Huawei ME909u -521) on boot - USB driver not loading



  • Hi,

    We managed to successfully setup the PPP connection with the Huawei ME909u modem. I have no issues with the connection itself. However, when we reboot the system the PPP connection never tries to reconnect automatically.

    After some analysis, we found that the modem is not detected properly on warm/cold boot. As you can see from the dmesg output : ugen1.3: <unknown>at usbus1 (disconnected)</unknown> , the usb device is not recognized correctly.

    dmesg after boot:

    usbus0: 5.0Gbps Super Speed USB v3.0
    usbus1: 480Mbps High Speed USB v2.0
    ugen0.1: <0x1022> at usbus0
    uhub0: <0x1022 XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus0
    ugen1.1: <amd> at usbus1
    uhub1: <amd 1="" 9="" ehci="" root="" hub,="" class="" 0,="" rev="" 2.00="" 1.00,="" addr=""> on usbus1
    uhub0: 4 ports with 4 removable, self powered
    uhub1: 2 ports with 2 removable, self powered
    ugen1.2: <vendor 0x0438=""> at usbus1
    uhub2: <vendor 2="" 9="" 0x0438="" product="" 0x7900,="" class="" 0,="" rev="" 2.00="" 0.18,="" addr=""> on usbus1
    uhub2: 4 ports with 4 removable, self powered
    ugen1.3: <unknown> at usbus1 (disconnected)</unknown></vendor></vendor></amd></amd>
    

    If we unplug and plug it again, the modem is detected correctly with all the serial ports available.

    dmesg after unplug and plug:

    ugen1.3: <huawei technology=""> at usbus1
    u3g0: <huawei mobile="" connect="" -="" modem=""> on usbus1
    u3g0: Found 5 ports.</huawei></huawei>
    

    We tried to manually load u3g module, but it look like it is part of the kernel itself and it is not necessary.

    > kldload u3g
    kldload: can't load u3g: module already loaded or in kernel
    

    The system we are using is

    System:	PC Engines APU2
    Version: 2.3.3-RELEASE (amd64)
    

    content of /boot/loader.conf

    autoboot_delay="3"
    umodem_load="YES"
    u3g_load="YES"
    ucom_load="YES"
    boot_serial="YES"
    console="comconsole"
    comconsole_speed="115200"
    hw.usb.no_pf="1"
    

    Could some one please tell me setup procedure so that the modem is detected correctly on warm/cold boot? and eventually establishing the PPP connection.



  • This could be a possible workaround.

    By resetting the usb bus number 1 early in the boot process triggers the modem to reload. On reload the drivers are loaded again, and the serial port are exposed properly.

    https://doc.pfsense.org/index.php/Executing_commands_at_boot_time

    <earlyshellcmd>usbconfig -u 1 reset</earlyshellcmd>
    

    There are two other products on this bus, we don't know yet if there are any side-effects.

    ugen0.1: <xhci root="" hub="" 0x1022=""> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA)
    ugen1.1: <ehci root="" hub="" amd=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
    ugen1.2: <product 0x7900="" vendor="" 0x0438=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (100mA)
    ugen1.3: <huawei mobile="" huawei="" technology=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)</huawei></product></ehci></xhci>
    

    If some one has a better solution/suggestion, please update us.



  • @rite2dinesh:

    This could be a possible workaround.

    By resetting the usb bus number 1 early in the boot process triggers the modem to reload. On reload the drivers are loaded again, and the serial port are exposed properly.

    https://doc.pfsense.org/index.php/Executing_commands_at_boot_time

    <earlyshellcmd>usbconfig -u 1 reset</earlyshellcmd>
    

    There are two other products on this bus, we don't know yet if there are any side-effects.

    ugen0.1: <xhci root="" hub="" 0x1022=""> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA)
    ugen1.1: <ehci root="" hub="" amd=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
    ugen1.2: <product 0x7900="" vendor="" 0x0438=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (100mA)
    ugen1.3: <huawei mobile="" huawei="" technology=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)</huawei></product></ehci></xhci>
    

    If some one has a better solution/suggestion, please update us.

    I have the same problem.
    Could you explain what do I do?
    Thank u



  • Thanks, this worked.

    Slam

    @rite2dinesh:

    This could be a possible workaround.

    By resetting the usb bus number 1 early in the boot process triggers the modem to reload. On reload the drivers are loaded again, and the serial port are exposed properly.

    https://doc.pfsense.org/index.php/Executing_commands_at_boot_time

    <earlyshellcmd>usbconfig -u 1 reset</earlyshellcmd>
    

    There are two other products on this bus, we don't know yet if there are any side-effects.

    ugen0.1: <xhci root="" hub="" 0x1022=""> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA)
    ugen1.1: <ehci root="" hub="" amd=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
    ugen1.2: <product 0x7900="" vendor="" 0x0438=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (100mA)
    ugen1.3: <huawei mobile="" huawei="" technology=""> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)</huawei></product></ehci></xhci>
    

    If some one has a better solution/suggestion, please update us.



  • I installed a shellcmd

    php -r 'require_once("shaper.inc"); require_once("filter.inc"); interface_ppps_configure('opt2');'

    to fix this issue.

    Replace opt2 with the optx you are using.



  • I have exactly same problem. ME909u-521 not recognized.

    Board: PC Engines APU3B4 (with 1 mSATA and 2 mPCIe slots)
    pdSense 2.4.0 amd64, FreeBSD 11.1-realease-p1
    LTE modem: Huawei ME909u-521

    Dmesg says: ugen2.3: <unknown>at usbus2 (disconnected).

    I added <earlyshellcmd>usbconfig -u 2 reset</earlyshellcmd> above <system>-part to config.xml.
    Rebooted. I get still the same 'unknown' message.

    I tried manually run that 'usbconfig -u 2 reset' from command line, then I get
    'usbconfig: could not open device: No error: 0'

    What is going wrong here?</system></unknown>



  • @arundsis:

    I have exactly same problem. ME909u-521 not recognized.

    Board: PC Engines APU3B4 (with 1 mSATA and 2 mPCIe slots)
    pdSense 2.4.0 amd64, FreeBSD 11.1-realease-p1
    LTE modem: Huawei ME909u-521

    Dmesg says: ugen2.3: <unknown>at usbus2 (disconnected).

    I added <earlyshellcmd>usbconfig -u 2 reset</earlyshellcmd> above <system>-part to config.xml.
    Rebooted. I get still the same 'unknown' message.

    I tried manually run that 'usbconfig -u 2 reset' from command line, then I get
    'usbconfig: could not open device: No error: 0'

    What is going wrong here?</system></unknown>

    Are you sure you are using the correct device id?



  • Set delay to 40s



  • I have changed the delay from 3 s to 41 s, even 63 - no help.

    I changed the Huawei module to another mPCIe slot, no change.

    If the module is removed, then the ' <unknown>at usbus2…' line in dmesg disappears.

    Updated pfSense to the newest 2.4.2. No change :-(

    Clearly the system can not identify the Huawei module or the module is broken.
    Or the module is an uncompatible subversion or something.

    Any good ideas ? Is it possible the module is in some strange mode?
    It is not very easy to test the module/MB combination with some other OS.</unknown>



  • @johnkeates:

    @arundsis:

    I have exactly same problem. ME909u-521 not recognized.

    Board: PC Engines APU3B4 (with 1 mSATA and 2 mPCIe slots)
    pdSense 2.4.0 amd64, FreeBSD 11.1-realease-p1
    LTE modem: Huawei ME909u-521

    Dmesg says: ugen2.3: <unknown>at usbus2 (disconnected).

    I added <earlyshellcmd>usbconfig -u 2 reset</earlyshellcmd> above <system>-part to config.xml.
    Rebooted. I get still the same 'unknown' message.

    I tried manually run that 'usbconfig -u 2 reset' from command line, then I get
    'usbconfig: could not open device: No error: 0'

    What is going wrong here?</system></unknown>

    Are you sure you are using the correct device id?

    No I am not :-(

    But how can I get one ?

    usbconfig dump_device_desc :

    ugen1.1: <amd ehci="" root="" hub="">at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps)
    pwr=SAVE (0mA)

    bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0200
      bDeviceClass = 0x0009  <hub>bDeviceSubClass = 0x0000
      bDeviceProtocol = 0x0001
      bMaxPacketSize0 = 0x0040
      idVendor = 0x0000
      idProduct = 0x0000
      bcdDevice = 0x0100
      iManufacturer = 0x0001  <amd>iProduct = 0x0002  <ehci root="" hub="">iSerialNumber = 0x0000  <no string="">bNumConfigurations = 0x0001

    ugen2.1: <amd ehci="" root="" hub="">at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps)
    pwr=SAVE (0mA)

    bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0200
      bDeviceClass = 0x0009  <hub>bDeviceSubClass = 0x0000
      bDeviceProtocol = 0x0001
      bMaxPacketSize0 = 0x0040
      idVendor = 0x0000
      idProduct = 0x0000
      bcdDevice = 0x0100
      iManufacturer = 0x0001  <amd>iProduct = 0x0002  <ehci root="" hub="">iSerialNumber = 0x0000  <no string="">bNumConfigurations = 0x0001

    ugen0.1: <0x1022 XHCI root HUB> at usbus0, cfg=0 md=HOST spd=SUPER
    (5.0Gbps) pwr=SAVE (0mA)

    bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0300
      bDeviceClass = 0x0009  <hub>bDeviceSubClass = 0x0000
      bDeviceProtocol = 0x0003
      bMaxPacketSize0 = 0x0009
      idVendor = 0x0000
      idProduct = 0x0000
      bcdDevice = 0x0100
      iManufacturer = 0x0001  <0x1022>
      iProduct = 0x0002  <xhci root="" hub="">iSerialNumber = 0x0000  <no string="">bNumConfigurations = 0x0001

    ugen1.2: <vendor 0x0438="" product="" 0x7900="">at usbus1, cfg=0 md=HOST spd=HIGH
    (480Mbps) pwr=SAVE (100mA)

    bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0200
      bDeviceClass = 0x0009  <hub>bDeviceSubClass = 0x0000
      bDeviceProtocol = 0x0001
      bMaxPacketSize0 = 0x0040
      idVendor = 0x0438
      idProduct = 0x7900
      bcdDevice = 0x0018
      iManufacturer = 0x0000  <no string="">iProduct = 0x0000  <no string="">iSerialNumber = 0x0000  <no string="">bNumConfigurations = 0x0001

    ugen2.2: <vendor 0x0438="" product="" 0x7900="">at usbus2, cfg=0 md=HOST spd=HIGH
    (480Mbps) pwr=SAVE (100mA)

    bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0200
      bDeviceClass = 0x0009  <hub>bDeviceSubClass = 0x0000
      bDeviceProtocol = 0x0001
      bMaxPacketSize0 = 0x0040
      idVendor = 0x0438
      idProduct = 0x7900
      bcdDevice = 0x0018
      iManufacturer = 0x0000  <no string="">iProduct = 0x0000  <no string="">iSerialNumber = 0x0000  <no string="">bNumConfigurations = 0x0001</no></no></no></hub></vendor></no></no></no></hub></vendor></no></xhci></hub></no></ehci></amd></hub></amd></no></ehci></amd></hub></amd>



  • Hi,

    i had the same problem… the ME909u-521 was not found with usbconfig. I got the message "...(disconnected)" for the USB Device in the log file (dmesg).
    also the usbreset did not work for me..

    I asume this is a timing problem.
    My original installation was on a 16G mSATA SSD. Boot was very fast and everything was o.k. but the huawei card was not detected.
    I tried Linux boot from USB Stick, and the card was found correct.
    also, if i boot pfsense from usb stick.... much slower than Sata SSD, the ME909 is found and works. I have rebooted this config several times and had no more issues that the device cuaU0.0-4 devices not available.

    i will try to put some delays in the boot process, to bring my ME909 card online even with the SATA SSD....

    regards



  • Do you have found how to slow boot down?

    /boot/loader.conf setting increases the wait time in boot OK, but does not resolve the original problem - identifying the 909u-521 :-/

    I have run out of ideas.



  • I installed pfSense on a slow USB-memory-stick, and booted from that.
    ME909u-521 gets identified and shows 5 serial ports, from cuaU0.0 to 0.4
    Configured PPP to port /dev/cuaU0.0, and added &F0E1Q0 to init string.
    Yes, it connects and works.

    Now the problem still lies how to make it work from much faster SSD-disk…



  • @arundsis:

    I installed pfSense on a slow USB-memory-stick, and booted from that.
    ME909u-521 gets identified and shows 5 serial ports, from cuaU0.0 to 0.4
    Configured PPP to port /dev/cuaU0.0, and added &F0E1Q0 to init string.
    Yes, it connects and works.

    Now the problem still lies how to make it work from much faster SSD-disk…

    Have you figured out how to solve this I am having what seems to be the same problem with a Sierra MC7355



  • Hi guys.

    I have here the same problem.
    On the running system, plugged off the miniPCIe modem, plugged it in again an its recognized.
    But that can't be the plan.
    Any new advisories to get the modem recognized?

    Tried all the recommendations, no luck.

    Cheers
    Nora



  • Hi
    some more output:
    After plugged off and plugged in the modem.

    
    ugen2.3: <huawei technology="">at usbus2
    u3g0: <huawei mobile="" connect="" -="" modem="">on usbus2
    u3g0: Found 5 ports.
    ugen2.3: <huawei technology="">at usbus2 (disconnected)
    u3g0: at uhub4, port 3, addr 3 (disconnected)
    ugen2.3: <huawei technology="">at usbus2
    u3g0: <huawei mobile="" connect="" -="" modem="">on usbus2
    u3g0: Found 5 ports.</huawei></huawei></huawei></huawei></huawei> 
    

    then the usbconfig dump_device_desc

    
    ..
    ..
    ugen2.3: <huawei mobile="" huawei="" technology="">at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
    
      bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0200
      bDeviceClass = 0x0000  <probed by="" interface="" class="">bDeviceSubClass = 0x0000
      bDeviceProtocol = 0x0000
      bMaxPacketSize0 = 0x0040
      idVendor = 0x12d1
      idProduct = 0x1573
      bcdDevice = 0x0228
      iManufacturer = 0x0001  <huawei technology="">iProduct = 0x0002  <huawei mobile="">iSerialNumber = 0x0003  <0123456712ABCA17>
      bNumConfigurations = 0x0003</huawei></huawei></probed></huawei> 
    

    Where can we do some configuration to recognize this card?
    I found an other peace of documentation here:
    I don't know if i'm allowed to post an foreign URL ?
    But I don't know if this could help?

    Any help is greatly appreciated

    Nora



  • Usbmodeswitch is needed with some usb-type modemsticks, it can change the stick's mode to modem, from the original usb-memory-mode offering typically some installer software for Windows.

    As far as I know, ME909 mPCIe-module does not need usbmodeswitch, at least not for it's original purpose.

    But maybe it can still be possible to help or re-run the recognition procedure with usbmodeswitch, I don't know.

    I quess the core of this problem is somewhere in FreeBSD code, maybe some driver or other USB-related thing causing a timing problem and locking the bus/module.
    The best alternative would be if some BSD- or pfSense developer looked at it…



  • @nora:

    I have here the same problem.
    On the running system, plugged off the miniPCIe modem, plugged it in again an its recognized.
    But that can't be the plan.
    Any new advisories to get the modem recognized?

    I've spent a substantial amount of time struggling with this issue: APU board, Huawei ME909u-521, boot from SSD disk. It doesn't matter if the modem is plugged into the motherboard connector or into a USB connector using adapter. Neither this is pfSense-spesific, OPNsense does the same, actually it's the underlying up-to-date freeBSD. AFAIK, old enough (maybe 9.x?) freeBSD did work. But it seems to be essential that 1) the board used is APU and 2) having the Huawei module plugged in during cold boot, the result will be a failure. Plug it in when the system is running, it works.

    I've been in touch with PC Engines' support, last week I heard they were able to reproduce the problem and promised to investigate it. So I'll keep my fingers crossed there will be a bios update to fix this some day.

    As a workaround I'm using Sierra MC7455 in my most urgent application. It works out-of-the-box, needs no init strings. Unfortunately I've found no way how to get any info about the radio link quality while the connection is active.



  • Hi

    I've been in touch with PC Engines' support, last week I heard they were able to reproduce the problem and promised to investigate it. So I'll keep my fingers crossed there will be a bios update to fix this some day.

    Is this topic covered in some forum / git on pcengines?
    Any news about it?

    As a workaround I'm using Sierra MC7455 in my most urgent application. It works out-of-the-box, needs no init strings. Unfortunately I've found no way how to get any info about the radio link quality while the connection is active.

    I hope there is a solution nearly.
    I don't want to spend an other 100$ for an other LTE card.

    Best regards
    Nora



  • Hello again

    Any further tries.

    I updated the BIOS of the apu3b4 from legacy 4.0.7.1 to legacy apu3 v4.0.12
    I tought it might be helping.
    Created the USB install media
    and made the install.
    While booting the install media it sees the Huawai modem:

    
    ..
    ugen1.3: <huawei technology="">at usbus1
    u3g0: <huawei mobile="" connect="" -="" modem="">on usbus1
    u3g0: Found 5 ports.
    ..</huawei></huawei> 
    

    After install is competed, it doesn't recognise it anymore:

    
    ..
    ugen1.3: <unknown>at usbus1 (disconnected)
    ..</unknown> 
    

    What can be done to reslove this issue?

    I read on pcengines, there's a new board revision, Version apu3c:

    • Improve compatibility with LTE modem modules: Disconnect SMB_DAT / SMB_CLK signals (1.8V level on Quectel).
    • Improve compatibility with LTE modem modules: No stuff diodes D4 / D17, option resistor bypass (extremely low VIL on Huawei modems, sensitive to incoming EMI).
    • Optional SIM presence indicator / SIM card detect.
    • Disable non-functional NCT5104D watchdog timer.
    • Increase 3.3V current limit to allow for two simultaneous LTE modems.
    • Some DFM changes.

    Any help is appreciated
    Cheers
    Nora



  • @nora:

    I updated the BIOS of the apu3b4 from legacy 4.0.7.1 to legacy apu3 v4.0.12

    What can be done to reslove this issue?

    I recommend trying v4.0.16 bios. After the very first tests I've made, it looks promising. The bios seems to be already available on PC Engines' page, I got it directly from their support a few days ago. But I believe it's exactly the same version…


  • Netgate Administrator

    So the problem here is simply that the modem is not given enough time to initialise at boot?

    You could try increasing the value of kern.cam.boot_delay or autoboot_delay in loader.conf(.local).

    Steve