ionic: add module eeprom channel data to ionic_if and ethtool
authorShannon Nelson <shannon.nelson@amd.com>
Tue, 15 Apr 2025 23:13:16 +0000 (16:13 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 22 Apr 2025 10:27:30 +0000 (12:27 +0200)
Make the CMIS module type's page 17 channel data available for
ethtool to request.  As done previously, carve space for this
data from the port_info reserved space.

In the future, if additional pages are needed, a new firmware
AdminQ command will be added for accessing random pages.

Reviewed-by: Brett Creeley <brett.creeley@amd.com>
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250415231317.40616-4-shannon.nelson@amd.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c
drivers/net/ethernet/pensando/ionic/ionic_if.h

index 0d2ef808237b4f00e8dad8fd10465b7910ab717e..92f30ff2d63167bbc9debbe22885f9c03744d121 100644 (file)
@@ -999,6 +999,9 @@ static int ionic_get_module_eeprom_by_page(struct net_device *netdev,
        case 2:
                src = &idev->port_info->sprom_page2[page_data->offset - 128];
                break;
+       case 17:
+               src = &idev->port_info->sprom_page17[page_data->offset - 128];
+               break;
        default:
                return -EOPNOTSUPP;
        }
index 23218208b71182da54ee74d1ae54b26d2f2ecc4a..f1ddbe9994a3b8fe4a5ed577c500232a3ad79786 100644 (file)
@@ -2842,6 +2842,7 @@ union ionic_port_identity {
  * @sprom_epage:     Extended Transceiver sprom
  * @sprom_page1:     Extended Transceiver sprom, page 1
  * @sprom_page2:     Extended Transceiver sprom, page 2
+ * @sprom_page17:    Extended Transceiver sprom, page 17
  * @rsvd:            reserved byte(s)
  * @pb_stats:        uplink pb drop stats
  */
@@ -2853,13 +2854,14 @@ struct ionic_port_info {
                struct ionic_mgmt_port_stats mgmt_stats;
        };
        union {
-               u8     sprom_epage[256];
+               u8     sprom_epage[384];
                struct {
                        u8 sprom_page1[128];
                        u8 sprom_page2[128];
+                       u8 sprom_page17[128];
                };
        };
-       u8     rsvd[504];
+       u8     rsvd[376];
 
        /* pb_stats must start at 2k offset */
        struct ionic_port_pb_stats  pb_stats;