Add detecting and parsing EEE device capability.

Recently EEE functionality support has been introduced to E610 FW.
Currently ixgbe driver has no possibility to detect whether NVM
loaded on given adapter supports EEE.

There's dedicated device capability element reflecting FW support
for given EEE link speed.

Reviewed-by: Aleksandr Loktionov <[email protected]>
Signed-off-by: Jedrzej Jagielski <[email protected]>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c      | 3 +++
 drivers/net/ethernet/intel/ixgbe/ixgbe_type_e610.h | 7 +++++++
 include/linux/intel/libie/adminq.h                 | 1 +
 3 files changed, 11 insertions(+)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c 
b/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c
index c2f8189a0738..9ae1e3620ee1 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_e610.c
@@ -628,6 +628,9 @@ static bool ixgbe_parse_e610_caps(struct ixgbe_hw *hw,
                        (phys_id & IXGBE_EXT_TOPO_DEV_IMG_PROG_EN) != 0;
                break;
        }
+       case LIBIE_AQC_CAPS_EEE:
+               caps->eee_support = (u8)number;
+               break;
        default:
                /* Not one of the recognized common capabilities */
                return false;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type_e610.h 
b/drivers/net/ethernet/intel/ixgbe/ixgbe_type_e610.h
index cde148eec38d..11dc7fc71b71 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type_e610.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type_e610.h
@@ -892,6 +892,7 @@ struct ixgbe_hw_caps {
        u8 apm_wol_support;
        u8 acpi_prog_mthd;
        u8 proxy_support;
+       u8 eee_support;
        bool nvm_update_pending_nvm;
        bool nvm_update_pending_orom;
        bool nvm_update_pending_netlist;
@@ -927,6 +928,12 @@ struct ixgbe_hw_caps {
 
 #define IXGBE_OROM_CIV_SIGNATURE       "$CIV"
 
+#define IXGBE_EEE_SUPPORT_100BASE_TX   BIT(0)
+#define IXGBE_EEE_SUPPORT_1000BASE_T   BIT(1)
+#define IXGBE_EEE_SUPPORT_10GBASE_T    BIT(2)
+#define IXGBE_EEE_SUPPORT_5GBASE_T     BIT(3)
+#define IXGBE_EEE_SUPPORT_2_5GBASE_T   BIT(4)
+
 struct ixgbe_orom_civd_info {
        u8 signature[4];        /* Must match ASCII '$CIV' characters */
        u8 checksum;            /* Simple modulo 256 sum of all structure bytes 
must equal 0 */
diff --git a/include/linux/intel/libie/adminq.h 
b/include/linux/intel/libie/adminq.h
index ab13bd777a28..839114d8975a 100644
--- a/include/linux/intel/libie/adminq.h
+++ b/include/linux/intel/libie/adminq.h
@@ -196,6 +196,7 @@ LIBIE_CHECK_STRUCT_LEN(16, libie_aqc_list_caps);
 #define LIBIE_AQC_BIT_ROCEV2_LAG                       BIT(0)
 #define LIBIE_AQC_BIT_SRIOV_LAG                                BIT(1)
 #define LIBIE_AQC_BIT_SRIOV_AA_LAG                     BIT(2)
+#define LIBIE_AQC_CAPS_EEE                             0x009B
 #define LIBIE_AQC_CAPS_FLEX10                          0x00F1
 #define LIBIE_AQC_CAPS_CEM                             0x00F2
 
-- 
2.31.1

Reply via email to