[Intel-wired-lan] [PATCH net-next v11 0/5] add v2 FW logging for ice driver
Paul M Stillwell Jr
paul.m.stillwell.jr at intel.com
Mon Mar 13 23:18:36 UTC 2023
FW log support was added to the ice driver, but that version is no
longer supported. There is a newer version of FW logging (v2) that
adds more control knobs to get the exact data out of the FW
for debugging.
The interface for FW logging is debugfs. This was chosen based on a discussion
here: https://lore.kernel.org/netdev/20230214180712.53fc8ba2@kernel.org/
We talked about using devlink in a variety of ways, but none of those
options made any sense for the way the FW reports data. We briefly talked
about using ethtool, but that seemed to go by the wayside. Ultimately it
seems like using debugfs is the way to go so re-implement the code to use
that.
Additionally, instead of dumping the FW log output to syslog,
dump it to debugfs. The FW log data is really just binary
data that the FW log team decodes to determine what happens so the
translation from binary to some text output just slows things down
and results in potential dropped data. The structure for the debugfs
entry is: /sys/kernel/debug/ice/<pci device>/fwlog
Once enabled the FW log data is received as ARQ events that the driver
processes.
The FW logging is across all the PFs on the device, so restrict the
commands to only PF0.
The following debugfs commands are added:
- disable fwlog
- dump fwlog_cfg
- enable fwlog
- update fwlog_cfg <fwlog_level> <fwlog_events> <fwlog_resolution>
where
fwlog_level is a value from 0-4 as described below
Each level includes the messages from the previous/lower level
0 - no logging
1 - error logging
2 - warning logging
3 - normal logging
4 - verbose logging
fwlog_events is a value from 0-32 that represents the module to receive
events for. The values are sent as a hex value where each bit represents
a specific module. The module values are:
0 (0x00) - General
1 (0x01) - Control (Resets + Autoload)
2 (0x02) - Link Management
3 (0x03) - Link Topology Detection
4 (0x04) - DNL
5 (0x05) - I2C
6 (0x06) - SDP
7 (0x07) - MDIO
8 (0x08) - Admin Queue
9 (0x09) - HDMA
10 (0x0A) - LLDP
11 (0x0B) - DCBX
12 (0x0C) - DCB
13 (0x0D) - XLR
14 (0x0E) - NVM
15 (0x0F) - Authentication
16 (0x10) - VPD
17 (0x11) - IOSF
18 (0x12) - Parser
19 (0x13) - Switch
20 (0x14) - Scheduler
21 (0x15) - Tx Queue Management
22 (0x16) - Unsupported
23 (0x17) - Post
24 (0x18) - Watchdog
25 (0x19) - Task Dispatcher
26 (0x1A) - Manageability
27 (0x1B) - Synce
28 (0x1C) - Health
29 (0x1D) - Time Sync
30 (0x1E) - PF Registration
31 (0x1F) - Module Version
fwlog_resolution is the number of log messages to included
in a single ARQ event. 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 read the fwlog data by reading from the 'fwlog' file like this:
# cat /sys/kernel/debug/ice/<pci-dev>/fwlog > <filename>
---
v11:
- changed 'events' variable to be u32 instead of unsigned long since
the FW expects a 32-bit value. This caused some changes to a few
functions that pass 'events' and changed the parsing in debugfs.
Also fixed an issue with i386 cross compile where BIT_ULL() was
being used incorrectly and causing compiler issues on i386 because
the value was larger than the variable.
v10 at:
https://lore.kernel.org/intel-wired-lan/20230308235102.170-1-paul.m.stillwell.jr@intel.com/
v10:
- updated code to only create 'fwlog' file if FW logging is supported
- combined code under single ifdef in header file
- removed defines that were not used and added them when the correct patch is
applied
- added newline between defines and variables in structure
- moved include header into alphabetical order at top of file
- removed unnecessary casts
- updated return statements for more efficient code
- changed BIT() to BIT_ULL() to try to fix i386 cross compile issue
- fixed RCT issue
- added documentation in Documentation/networking/device-drivers/ethernet/intel/ice.rst
- updated commit messages appropriately
-
v9 at:
https://lore.kernel.org/intel-wired-lan/20230302215109.124-1-paul.m.stillwell.jr@intel.com/
v9:
- rewrote code to use debugfs instead of devlink
v8 at:
https://lore.kernel.org/intel-wired-lan/20230124221428.114-1-paul.m.stillwell.jr@intel.com/
v8:
- added vmalloc.h file for correct prototypes
- moved code change from patch 5 to patch 3 where it was supposed to be
- fixed a style issue
v7 at:
https://lore.kernel.org/intel-wired-lan/20230120233511.131-1-paul.m.stillwell.jr@intel.com/
v7:
- removed dev_info() in ice_debugfs_command_read() since it wasn't needed
- refactored ice_debugfs_command_read() to split the copying of the data and
the freeing of the buffers. This allows for better error recovery in case
the copy_to_user() fails
- changed allocation of fwlog buffers and structure from kernel memory to
virtual memory (vmalloc/vzalloc)
- fixed a compile bug
v6 at:
https://lore.kernel.org/intel-wired-lan/20230113222319.111-1-paul.m.stillwell.jr@intel.com/
v6:
- removed cache_cfg() based on feedback
- a couple of other minor changes based on feedback
v5 at:
https://lore.kernel.org/intel-wired-lan/20230111191906.131-1-paul.m.stillwell.jr@intel.com/
v5:
- handle devlink reload path correctly so debugfs directories don't get
added twice
- fix issue where code wrapped with CONFIG_DEBUG_FS was causing sparc
compile issues with multiple defines
No v4 cover letter
v4:
- actually changed the modes in ice.rst for new params
v3 at:
https://lore.kernel.org/intel-wired-lan/20221217045828.222-1-paul.m.stillwell.jr@intel.com/
v3:
- fixed ice.rst to have proper mode for new params and fixed formatting
v2 at:
https://lore.kernel.org/intel-wired-lan/20221209232748.189-1-paul.m.stillwell.jr@intel.com/
v2:
- removed some unused admin queue commands
- updated copyright in ice_fwlog.[ch] to 2022
- moved defines in structures under the variables and added blank line
- removed a couple of unused defines
- changed fwlog_support_ena to fwlog_supported to be clearer
- consolidated ice_devlink_param_id enum together
- changed ice_fwlog_set_support_ena() to ice_fwlog_set_supported()
- consolidated return status logic in ice_devlink_fwlog_enabled_set()
- pull up functions in ice_fwlog.c where appropriate
- add newline for FW Logging Commands comment
- changed any new u[8/16] loop variables to int
- moved ice_pf_fwlog_deinit() from patch 5 to patch 4
- changed error message to be clearer
- updated Documentation/networking/devlink/ice.rst
- updated commit messages with examples of devlink commands and using
debugfs to get log files
v1 at:
https://lore.kernel.org/intel-wired-lan/20221128214749.110-1-paul.m.stillwell.jr@intel.com/
Paul M Stillwell Jr (5):
ice: remove FW logging code
ice: enable debugfs to check FW logging status
ice: add ability to set FW log configuration
ice: enable FW logging based on stored configuration
ice: add ability to read FW logging data
.../device_drivers/ethernet/intel/ice.rst | 85 ++++
drivers/net/ethernet/intel/ice/Makefile | 4 +-
drivers/net/ethernet/intel/ice/ice.h | 31 ++
.../net/ethernet/intel/ice/ice_adminq_cmd.h | 161 ++++----
drivers/net/ethernet/intel/ice/ice_common.c | 218 +---------
drivers/net/ethernet/intel/ice/ice_common.h | 1 -
drivers/net/ethernet/intel/ice/ice_debugfs.c | 390 ++++++++++++++++++
drivers/net/ethernet/intel/ice/ice_fwlog.c | 362 ++++++++++++++++
drivers/net/ethernet/intel/ice/ice_fwlog.h | 57 +++
drivers/net/ethernet/intel/ice/ice_main.c | 133 +++++-
drivers/net/ethernet/intel/ice/ice_type.h | 22 +-
11 files changed, 1148 insertions(+), 316 deletions(-)
create mode 100644 drivers/net/ethernet/intel/ice/ice_debugfs.c
create mode 100644 drivers/net/ethernet/intel/ice/ice_fwlog.c
create mode 100644 drivers/net/ethernet/intel/ice/ice_fwlog.h
--
2.35.1
More information about the Intel-wired-lan
mailing list