ice: add documentation for FW logging

Add documentation for FW logging in
Documentation/networking/device_drivers/ethernet/intel/ice.rst

Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
Paul M Stillwell Jr 2023-12-12 21:07:15 -08:00 committed by Tony Nguyen
parent 9d3535e719
commit d96f04e05f

View file

@ -895,6 +895,147 @@ driver writes raw bytes by the GNSS object to the receiver through i2c. Please
refer to the hardware GNSS module documentation for configuration details.
Firmware (FW) logging
---------------------
The driver supports FW logging via the debugfs interface on PF 0 only. The FW
running on the NIC must support FW logging; if the FW doesn't support FW logging
the 'fwlog' file will not get created in the ice debugfs directory.
Module configuration
~~~~~~~~~~~~~~~~~~~~
Firmware logging is configured on a per module basis. Each module can be set to
a value independent of the other modules (unless the module 'all' is specified).
The modules will be instantiated under the 'fwlog/modules' directory.
The user can set the log level for a module by writing to the module file like
this::
# echo <log_level> > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/<module>
where
* log_level is a name as described below. Each level includes the
messages from the previous/lower level
* none
* error
* warning
* normal
* verbose
* module is a name that represents the module to receive events for. The
module names are
* general
* ctrl
* link
* link_topo
* dnl
* i2c
* sdp
* mdio
* adminq
* hdma
* lldp
* dcbx
* dcb
* xlr
* nvm
* auth
* vpd
* iosf
* parser
* sw
* scheduler
* txq
* rsvd
* post
* watchdog
* task_dispatch
* mng
* synce
* health
* tsdrv
* pfreg
* mdlver
* all
The name 'all' is special and allows the user to set all of the modules to the
specified log_level or to read the log_level of all of the modules.
Example usage to configure the modules
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To set a single module to 'verbose'::
# echo verbose > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/link
To set multiple modules then issue the command multiple times::
# echo verbose > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/link
# echo warning > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/ctrl
# echo none > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/dcb
To set all the modules to the same value::
# echo normal > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/all
To read the log_level of a specific module (e.g. module 'general')::
# cat /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/general
To read the log_level of all the modules::
# cat /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/modules/all
Enabling FW log
~~~~~~~~~~~~~~~
Configuring the modules indicates to the FW that the configured modules should
generate events that the driver is interested in, but it **does not** send the
events to the driver until the enable message is sent to the FW. To do this
the user can write a 1 (enable) or 0 (disable) to 'fwlog/enable'. An example
is::
# echo 1 > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/enable
Retrieving FW log data
~~~~~~~~~~~~~~~~~~~~~~
The FW log data can be retrieved by reading from 'fwlog/data'. The user can
write any value to 'fwlog/data' to clear the data. The data can only be cleared
when FW logging is disabled. The FW log data is a binary file that is sent to
Intel and used to help debug user issues.
An example to read the data is::
# cat /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/data > fwlog.bin
An example to clear the data is::
# echo 0 > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/data
Changing how often the log events are sent to the driver
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The driver receives FW log data from the Admin Receive Queue (ARQ). The
frequency that the FW sends the ARQ events can be configured by writing to
'fwlog/nr_messages'. The range is 1-128 (1 means push every log message, 128
means push only when the max AQ command buffer is full). The suggested value is
10. The user can see what the value is configured to by reading
'fwlog/nr_messages'. An example to set the value is::
# echo 50 > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/nr_messages
Configuring the amount of memory used to store FW log data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The driver stores FW log data within the driver. The default size of the memory
used to store the data is 1MB. Some use cases may require more or less data so
the user can change the amount of memory that is allocated for FW log data.
To change the amount of memory then write to 'fwlog/log_size'. The value must be
one of: 128K, 256K, 512K, 1M, or 2M. FW logging must be disabled to change the
value. An example of changing the value is::
# echo 128K > /sys/kernel/debug/ice/0000\:18\:00.0/fwlog/log_size
Performance Optimization
========================
Driver defaults are meant to fit a wide variety of workloads, but if further