Linux MMIO Access Settings Can Affect fwupdate Commands On Intel Network Controllers

On some Linux kernels, memory mapped IO (MMIO) access is set to strict mode to prevent access to MMIO memory from user space utilities. When the kernel is running in this mode, fwupdate will not be able to access Intel-based network controllers.

If the fwupdate list or update command is run with kernel MMIO access is set to iomem=strict, the following can occur:

  • fwupdate will display a warning to the console, for example:

    # ./fwupdate list controller
    
    WARNING: Due to strict MMIO memory settings in the running kernel
    some network controllers may not be accessible.
    See Hardware Management Pack documentation regarding iomem kernel
    settings required for firmware update of these devices.

    This warning informs you that fwupdate might not be able to access some network controllers. If fwupdate cannot access a device, it will not be able to list or update the device. As a result, no Intel network controllers will be listed in the fwupdate list controller output, though other updatable controllers will be listed.

  • fwupdate produces a warning message in dmesg/syslog, for example:

    kernel: Program fwupdate tried to access /dev/mem between c4a00000->c4a01000.

    This is an informational message that fwupdate attempted to access restricted memory and will not cause an issue with the operation of the OS. There will be one of these messages logged each time fwupdate is run with the kernel in strict MMIO access mode.

  • If the fwupdate update command is run in quiet (silent) mode, no messages are displayed to the console. A warning that the command failed can be captured in the output xml inventory when using the -o option. You can then see a <warning> entry for each device affected by this issue. For example, in the output xml file you might see:

      <device>
        <devicetype>Controller</devicetype>
        <devicesubtype>NET</devicesubtype>
        <devicename>c10</devicename>
        <modelnumber>0x1528</modelnumber>
        <manufacturer>Intel</manufacturer>
        <node_id>Generic WWN:00:10:E0:57:7A:1E PCI Addr:82:00.0</node_id>
        <xml_support>N/A</xml_support>
        <pci_address>82:00.0</pci_address>
        <pci_vendor_id>0x8086</pci_vendor_id>
        <product_name>Intel X540 Gigabit Ethernet Controller</product_name>
        <warning>Firmware version data is not readable. Please see
    Hardware Management Pack documentation and release notes for 
    more information on kernel configuration.</warning>
      </device>

Workaround

If you encounter this issue, perform one of the following actions to allow fwupdate to access and list or update these devices.

  • Add iomem=relaxed to the kernel command line.

  • Run with a kernel version that does not restrict MMIO memory access to the user space.