get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/9953/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 9953,
    "url": "http://patches.dpdk.org/api/patches/9953/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1453171693-25571-3-git-send-email-wenzhuo.lu@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1453171693-25571-3-git-send-email-wenzhuo.lu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1453171693-25571-3-git-send-email-wenzhuo.lu@intel.com",
    "date": "2016-01-19T02:48:03",
    "name": "[dpdk-dev,02/12] ixgbe/base: add new devices and mac type",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f834751c3cde12f4aef15e4e970e64ea6c1af5d6",
    "submitter": {
        "id": 258,
        "url": "http://patches.dpdk.org/api/people/258/?format=api",
        "name": "Wenzhuo Lu",
        "email": "wenzhuo.lu@intel.com"
    },
    "delegate": {
        "id": 10,
        "url": "http://patches.dpdk.org/api/users/10/?format=api",
        "username": "bruce",
        "first_name": "Bruce",
        "last_name": "Richardson",
        "email": "bruce.richardson@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1453171693-25571-3-git-send-email-wenzhuo.lu@intel.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/9953/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/9953/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 89AEE8E96;\n\tTue, 19 Jan 2016 03:48:27 +0100 (CET)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n\tby dpdk.org (Postfix) with ESMTP id 06DDF8E95\n\tfor <dev@dpdk.org>; Tue, 19 Jan 2016 03:48:25 +0100 (CET)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n\tby fmsmga104.fm.intel.com with ESMTP; 18 Jan 2016 18:48:25 -0800",
            "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby orsmga003.jf.intel.com with ESMTP; 18 Jan 2016 18:48:24 -0800",
            "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id u0J2mMqP009391;\n\tTue, 19 Jan 2016 10:48:22 +0800",
            "from shecgisg004.sh.intel.com (localhost [127.0.0.1])\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP\n\tid u0J2mJOM025621; Tue, 19 Jan 2016 10:48:21 +0800",
            "(from wenzhuol@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id u0J2mJee025617; \n\tTue, 19 Jan 2016 10:48:19 +0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.22,315,1449561600\"; d=\"scan'208\";a=\"729848208\"",
        "From": "Wenzhuo Lu <wenzhuo.lu@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Tue, 19 Jan 2016 10:48:03 +0800",
        "Message-Id": "<1453171693-25571-3-git-send-email-wenzhuo.lu@intel.com>",
        "X-Mailer": "git-send-email 1.7.4.1",
        "In-Reply-To": "<1453171693-25571-1-git-send-email-wenzhuo.lu@intel.com>",
        "References": "<1453171693-25571-1-git-send-email-wenzhuo.lu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 02/12] ixgbe/base: add new devices and mac type",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add new X550EM_a devices and their mac types, X550EM_a\nand X550EM_a_vf.\nUpdate the code to use the new devices and mac types.\n\nSigned-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>\n---\n drivers/net/ixgbe/base/ixgbe_82599.c  |  4 +-\n drivers/net/ixgbe/base/ixgbe_api.c    | 23 +++++++++\n drivers/net/ixgbe/base/ixgbe_common.c |  1 +\n drivers/net/ixgbe/base/ixgbe_dcb.c    | 10 ++++\n drivers/net/ixgbe/base/ixgbe_mbx.c    |  2 +\n drivers/net/ixgbe/base/ixgbe_type.h   | 58 +++++++++++++++++----\n drivers/net/ixgbe/base/ixgbe_x550.c   | 97 ++++++++++++++++++++++++++++++++++-\n drivers/net/ixgbe/base/ixgbe_x550.h   |  4 ++\n 8 files changed, 188 insertions(+), 11 deletions(-)",
    "diff": "diff --git a/drivers/net/ixgbe/base/ixgbe_82599.c b/drivers/net/ixgbe/base/ixgbe_82599.c\nindex 2318190..85114e9 100644\n--- a/drivers/net/ixgbe/base/ixgbe_82599.c\n+++ b/drivers/net/ixgbe/base/ixgbe_82599.c\n@@ -1411,7 +1411,8 @@ void ixgbe_set_fdir_drop_queue_82599(struct ixgbe_hw *hw, u8 dropqueue)\n \t/* Set drop queue */\n \tfdirctrl |= (dropqueue << IXGBE_FDIRCTRL_DROP_Q_SHIFT);\n \tif ((hw->mac.type == ixgbe_mac_X550) ||\n-\t    (hw->mac.type == ixgbe_mac_X550EM_x))\n+\t    (hw->mac.type == ixgbe_mac_X550EM_x) ||\n+\t    (hw->mac.type == ixgbe_mac_X550EM_a))\n \t\tfdirctrl |= IXGBE_FDIRCTRL_DROP_NO_MATCH;\n \n \tIXGBE_WRITE_REG(hw, IXGBE_FDIRCMD,\n@@ -1833,6 +1834,7 @@ s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw,\n \t\tswitch (hw->mac.type) {\n \t\tcase ixgbe_mac_X550:\n \t\tcase ixgbe_mac_X550EM_x:\n+\t\tcase ixgbe_mac_X550EM_a:\n \t\t\tIXGBE_WRITE_REG(hw, IXGBE_FDIRSCTPM, ~fdirtcpm);\n \t\t\tbreak;\n \t\tdefault:\ndiff --git a/drivers/net/ixgbe/base/ixgbe_api.c b/drivers/net/ixgbe/base/ixgbe_api.c\nindex 8ed55e3..18f7cbd 100644\n--- a/drivers/net/ixgbe/base/ixgbe_api.c\n+++ b/drivers/net/ixgbe/base/ixgbe_api.c\n@@ -52,6 +52,10 @@ static const u32 ixgbe_mvals_X550EM_x[IXGBE_MVALS_IDX_LIMIT] = {\n \tIXGBE_MVALS_INIT(_X550EM_x)\n };\n \n+static const u32 ixgbe_mvals_X550EM_a[IXGBE_MVALS_IDX_LIMIT] = {\n+\tIXGBE_MVALS_INIT(_X550EM_a)\n+};\n+\n /**\n  * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg\n  * @hw: pointer to hardware structure\n@@ -102,12 +106,14 @@ s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)\n \t\tstatus = ixgbe_init_ops_X550(hw);\n \t\tbreak;\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tstatus = ixgbe_init_ops_X550EM(hw);\n \t\tbreak;\n \tcase ixgbe_mac_82599_vf:\n \tcase ixgbe_mac_X540_vf:\n \tcase ixgbe_mac_X550_vf:\n \tcase ixgbe_mac_X550EM_x_vf:\n+\tcase ixgbe_mac_X550EM_a_vf:\n \t\tstatus = ixgbe_init_ops_vf(hw);\n \t\tbreak;\n \tdefault:\n@@ -200,6 +206,18 @@ s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)\n \t\thw->mac.type = ixgbe_mac_X550EM_x;\n \t\thw->mvals = ixgbe_mvals_X550EM_x;\n \t\tbreak;\n+\tcase IXGBE_DEV_ID_X550EM_A_KR:\n+\tcase IXGBE_DEV_ID_X550EM_A_KR_L:\n+\tcase IXGBE_DEV_ID_X550EM_A_SFP_N:\n+\tcase IXGBE_DEV_ID_X550EM_A_1G_T:\n+\tcase IXGBE_DEV_ID_X550EM_A_1G_T_L:\n+\tcase IXGBE_DEV_ID_X550EM_A_10G_T:\n+\tcase IXGBE_DEV_ID_X550EM_A_QSFP:\n+\tcase IXGBE_DEV_ID_X550EM_A_QSFP_N:\n+\tcase IXGBE_DEV_ID_X550EM_A_SFP:\n+\t\thw->mac.type = ixgbe_mac_X550EM_a;\n+\t\thw->mvals = ixgbe_mvals_X550EM_a;\n+\t\tbreak;\n \tcase IXGBE_DEV_ID_X550_VF:\n \tcase IXGBE_DEV_ID_X550_VF_HV:\n \t\thw->mac.type = ixgbe_mac_X550_vf;\n@@ -210,6 +228,11 @@ s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)\n \t\thw->mac.type = ixgbe_mac_X550EM_x_vf;\n \t\thw->mvals = ixgbe_mvals_X550EM_x;\n \t\tbreak;\n+\tcase IXGBE_DEV_ID_X550EM_A_VF:\n+\tcase IXGBE_DEV_ID_X550EM_A_VF_HV:\n+\t\thw->mac.type = ixgbe_mac_X550EM_a_vf;\n+\t\thw->mvals = ixgbe_mvals_X550EM_a;\n+\t\tbreak;\n \tdefault:\n \t\tret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;\n \t\tERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,\ndiff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c\nindex 0c060f0..ec61408 100644\n--- a/drivers/net/ixgbe/base/ixgbe_common.c\n+++ b/drivers/net/ixgbe/base/ixgbe_common.c\n@@ -3570,6 +3570,7 @@ u16 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tpcie_offset = IXGBE_PCIE_MSIX_82599_CAPS;\n \t\tmax_msix_count = IXGBE_MAX_MSIX_VECTORS_82599;\n \t\tbreak;\ndiff --git a/drivers/net/ixgbe/base/ixgbe_dcb.c b/drivers/net/ixgbe/base/ixgbe_dcb.c\nindex 29d7889..9a6a508 100644\n--- a/drivers/net/ixgbe/base/ixgbe_dcb.c\n+++ b/drivers/net/ixgbe/base/ixgbe_dcb.c\n@@ -398,6 +398,7 @@ s32 ixgbe_dcb_get_tc_stats(struct ixgbe_hw *hw, struct ixgbe_hw_stats *stats,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_get_tc_stats_82599(hw, stats, tc_count);\n \t\tbreak;\n \tdefault:\n@@ -426,6 +427,7 @@ s32 ixgbe_dcb_get_pfc_stats(struct ixgbe_hw *hw, struct ixgbe_hw_stats *stats,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_get_pfc_stats_82599(hw, stats, tc_count);\n \t\tbreak;\n \tdefault:\n@@ -465,6 +467,7 @@ s32 ixgbe_dcb_config_rx_arbiter_cee(struct ixgbe_hw *hw,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_config_rx_arbiter_82599(hw, refill, max, bwgid,\n \t\t\t\t\t\t\ttsa, map);\n \t\tbreak;\n@@ -504,6 +507,7 @@ s32 ixgbe_dcb_config_tx_desc_arbiter_cee(struct ixgbe_hw *hw,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_config_tx_desc_arbiter_82599(hw, refill, max,\n \t\t\t\t\t\t\t     bwgid, tsa);\n \t\tbreak;\n@@ -545,6 +549,7 @@ s32 ixgbe_dcb_config_tx_data_arbiter_cee(struct ixgbe_hw *hw,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_config_tx_data_arbiter_82599(hw, refill, max,\n \t\t\t\t\t\t\t     bwgid, tsa,\n \t\t\t\t\t\t\t     map);\n@@ -580,6 +585,7 @@ s32 ixgbe_dcb_config_pfc_cee(struct ixgbe_hw *hw,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_config_pfc_82599(hw, pfc_en, map);\n \t\tbreak;\n \tdefault:\n@@ -606,6 +612,7 @@ s32 ixgbe_dcb_config_tc_stats(struct ixgbe_hw *hw)\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_config_tc_stats_82599(hw, NULL);\n \t\tbreak;\n \tdefault:\n@@ -648,6 +655,7 @@ s32 ixgbe_dcb_hw_config_cee(struct ixgbe_hw *hw,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tixgbe_dcb_config_82599(hw, dcb_config);\n \t\tret = ixgbe_dcb_hw_config_82599(hw, dcb_config->link_speed,\n \t\t\t\t\t\trefill, max, bwgid,\n@@ -680,6 +688,7 @@ s32 ixgbe_dcb_config_pfc(struct ixgbe_hw *hw, u8 pfc_en, u8 *map)\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tret = ixgbe_dcb_config_pfc_82599(hw, pfc_en, map);\n \t\tbreak;\n \tdefault:\n@@ -703,6 +712,7 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw *hw, u16 *refill, u16 *max,\n \tcase ixgbe_mac_X540:\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \t\tixgbe_dcb_config_rx_arbiter_82599(hw, refill, max, bwg_id,\n \t\t\t\t\t\t  tsa, map);\n \t\tixgbe_dcb_config_tx_desc_arbiter_82599(hw, refill, max, bwg_id,\ndiff --git a/drivers/net/ixgbe/base/ixgbe_mbx.c b/drivers/net/ixgbe/base/ixgbe_mbx.c\nindex e2d969f..042e5cc 100644\n--- a/drivers/net/ixgbe/base/ixgbe_mbx.c\n+++ b/drivers/net/ixgbe/base/ixgbe_mbx.c\n@@ -617,6 +617,7 @@ STATIC s32 ixgbe_check_for_rst_pf(struct ixgbe_hw *hw, u16 vf_number)\n \t\tbreak;\n \tcase ixgbe_mac_X550:\n \tcase ixgbe_mac_X550EM_x:\n+\tcase ixgbe_mac_X550EM_a:\n \tcase ixgbe_mac_X540:\n \t\tvflre = IXGBE_READ_REG(hw, IXGBE_VFLREC(reg_offset));\n \t\tbreak;\n@@ -765,6 +766,7 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)\n \tif (hw->mac.type != ixgbe_mac_82599EB &&\n \t    hw->mac.type != ixgbe_mac_X550 &&\n \t    hw->mac.type != ixgbe_mac_X550EM_x &&\n+\t    hw->mac.type != ixgbe_mac_X550EM_a &&\n \t    hw->mac.type != ixgbe_mac_X540)\n \t\treturn;\n \ndiff --git a/drivers/net/ixgbe/base/ixgbe_type.h b/drivers/net/ixgbe/base/ixgbe_type.h\nindex 14896d7..1285cfd 100644\n--- a/drivers/net/ixgbe/base/ixgbe_type.h\n+++ b/drivers/net/ixgbe/base/ixgbe_type.h\n@@ -129,6 +129,16 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_DEV_ID_X540T1\t\t\t0x1560\n #define IXGBE_DEV_ID_X550T\t\t\t0x1563\n #define IXGBE_DEV_ID_X550T1\t\t\t0x15D1\n+/* Placeholder value, pending official value. */\n+#define IXGBE_DEV_ID_X550EM_A_KR\t\t0x15C2\n+#define IXGBE_DEV_ID_X550EM_A_KR_L\t\t0x15C3\n+#define IXGBE_DEV_ID_X550EM_A_SFP_N\t\t0x15C4\n+#define IXGBE_DEV_ID_X550EM_A_1G_T\t\t0x15C6\n+#define IXGBE_DEV_ID_X550EM_A_1G_T_L\t\t0x15C7\n+#define IXGBE_DEV_ID_X550EM_A_10G_T\t\t0x15C8\n+#define IXGBE_DEV_ID_X550EM_A_QSFP\t\t0x15CA\n+#define IXGBE_DEV_ID_X550EM_A_QSFP_N\t\t0x15CC\n+#define IXGBE_DEV_ID_X550EM_A_SFP\t\t0x15CE\n #define IXGBE_DEV_ID_X550EM_X_KX4\t\t0x15AA\n #define IXGBE_DEV_ID_X550EM_X_KR\t\t0x15AB\n #define IXGBE_DEV_ID_X550EM_X_SFP\t\t0x15AC\n@@ -136,6 +146,8 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_DEV_ID_X550EM_X_1G_T\t\t0x15AE\n #define IXGBE_DEV_ID_X550_VF_HV\t\t\t0x1564\n #define IXGBE_DEV_ID_X550_VF\t\t\t0x1565\n+#define IXGBE_DEV_ID_X550EM_A_VF\t\t0x15C5\n+#define IXGBE_DEV_ID_X550EM_A_VF_HV\t\t0x15B4\n #define IXGBE_DEV_ID_X550EM_X_VF\t\t0x15A8\n #define IXGBE_DEV_ID_X550EM_X_VF_HV\t\t0x15A9\n \n@@ -154,6 +166,7 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_I2CCTL_X540\tIXGBE_I2CCTL_82599\n #define IXGBE_I2CCTL_X550\t0x15F5C\n #define IXGBE_I2CCTL_X550EM_x\tIXGBE_I2CCTL_X550\n+#define IXGBE_I2CCTL_X550EM_a\tIXGBE_I2CCTL_X550\n #define IXGBE_I2CCTL_BY_MAC(_hw) IXGBE_BY_MAC((_hw), I2CCTL)\n #define IXGBE_PHY_GPIO\t\t0x00028\n #define IXGBE_MAC_GPIO\t\t0x00030\n@@ -171,7 +184,8 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_EEC_X540\t\tIXGBE_EEC\n #define IXGBE_EEC_X550\t\tIXGBE_EEC\n #define IXGBE_EEC_X550EM_x\tIXGBE_EEC\n-#define IXGBE_EEC_BY_MAC(_hw)\tIXGBE_EEC\n+#define IXGBE_EEC_X550EM_a\t0x15FF8\n+#define IXGBE_EEC_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), EEC)\n \n #define IXGBE_EERD\t\t0x10014\n #define IXGBE_EEWR\t\t0x10018\n@@ -180,7 +194,8 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_FLA_X540\t\tIXGBE_FLA\n #define IXGBE_FLA_X550\t\tIXGBE_FLA\n #define IXGBE_FLA_X550EM_x\tIXGBE_FLA\n-#define IXGBE_FLA_BY_MAC(_hw)\tIXGBE_FLA\n+#define IXGBE_FLA_X550EM_a\t0x15F6C\n+#define IXGBE_FLA_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), FLA)\n \n #define IXGBE_EEMNGCTL\t0x10110\n #define IXGBE_EEMNGDATA\t0x10114\n@@ -193,13 +208,15 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_GRC_X540\t\tIXGBE_GRC\n #define IXGBE_GRC_X550\t\tIXGBE_GRC\n #define IXGBE_GRC_X550EM_x\tIXGBE_GRC\n-#define IXGBE_GRC_BY_MAC(_hw)\tIXGBE_GRC\n+#define IXGBE_GRC_X550EM_a\t0x15F64\n+#define IXGBE_GRC_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), GRC)\n \n #define IXGBE_SRAMREL\t\t0x10210\n #define IXGBE_SRAMREL_X540\tIXGBE_SRAMREL\n #define IXGBE_SRAMREL_X550\tIXGBE_SRAMREL\n #define IXGBE_SRAMREL_X550EM_x\tIXGBE_SRAMREL\n-#define IXGBE_SRAMREL_BY_MAC(_hw)\tIXGBE_SRAMREL\n+#define IXGBE_SRAMREL_X550EM_a\t0x15F6C\n+#define IXGBE_SRAMREL_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), SRAMREL)\n \n #define IXGBE_PHYDBG\t0x10218\n \n@@ -215,36 +232,42 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_I2C_CLK_IN_X540\t\tIXGBE_I2C_CLK_IN\n #define IXGBE_I2C_CLK_IN_X550\t\t0x00004000\n #define IXGBE_I2C_CLK_IN_X550EM_x\tIXGBE_I2C_CLK_IN_X550\n+#define IXGBE_I2C_CLK_IN_X550EM_a\tIXGBE_I2C_CLK_IN_X550\n #define IXGBE_I2C_CLK_IN_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), I2C_CLK_IN)\n \n #define IXGBE_I2C_CLK_OUT\t\t0x00000002\n #define IXGBE_I2C_CLK_OUT_X540\t\tIXGBE_I2C_CLK_OUT\n #define IXGBE_I2C_CLK_OUT_X550\t\t0x00000200\n #define IXGBE_I2C_CLK_OUT_X550EM_x\tIXGBE_I2C_CLK_OUT_X550\n+#define IXGBE_I2C_CLK_OUT_X550EM_a\tIXGBE_I2C_CLK_OUT_X550\n #define IXGBE_I2C_CLK_OUT_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), I2C_CLK_OUT)\n \n #define IXGBE_I2C_DATA_IN\t\t0x00000004\n #define IXGBE_I2C_DATA_IN_X540\t\tIXGBE_I2C_DATA_IN\n #define IXGBE_I2C_DATA_IN_X550\t\t0x00001000\n #define IXGBE_I2C_DATA_IN_X550EM_x\tIXGBE_I2C_DATA_IN_X550\n+#define IXGBE_I2C_DATA_IN_X550EM_a\tIXGBE_I2C_DATA_IN_X550\n #define IXGBE_I2C_DATA_IN_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), I2C_DATA_IN)\n \n #define IXGBE_I2C_DATA_OUT\t\t0x00000008\n #define IXGBE_I2C_DATA_OUT_X540\t\tIXGBE_I2C_DATA_OUT\n #define IXGBE_I2C_DATA_OUT_X550\t\t0x00000400\n #define IXGBE_I2C_DATA_OUT_X550EM_x\tIXGBE_I2C_DATA_OUT_X550\n+#define IXGBE_I2C_DATA_OUT_X550EM_a\tIXGBE_I2C_DATA_OUT_X550\n #define IXGBE_I2C_DATA_OUT_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), I2C_DATA_OUT)\n \n #define IXGBE_I2C_DATA_OE_N_EN\t\t0\n #define IXGBE_I2C_DATA_OE_N_EN_X540\tIXGBE_I2C_DATA_OE_N_EN\n #define IXGBE_I2C_DATA_OE_N_EN_X550\t0x00000800\n #define IXGBE_I2C_DATA_OE_N_EN_X550EM_x\tIXGBE_I2C_DATA_OE_N_EN_X550\n+#define IXGBE_I2C_DATA_OE_N_EN_X550EM_a\tIXGBE_I2C_DATA_OE_N_EN_X550\n #define IXGBE_I2C_DATA_OE_N_EN_BY_MAC(_hw) IXGBE_BY_MAC((_hw), I2C_DATA_OE_N_EN)\n \n #define IXGBE_I2C_BB_EN\t\t\t0\n #define IXGBE_I2C_BB_EN_X540\t\tIXGBE_I2C_BB_EN\n #define IXGBE_I2C_BB_EN_X550\t\t0x00000100\n #define IXGBE_I2C_BB_EN_X550EM_x\tIXGBE_I2C_BB_EN_X550\n+#define IXGBE_I2C_BB_EN_X550EM_a\tIXGBE_I2C_BB_EN_X550\n \n #define IXGBE_I2C_BB_EN_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), I2C_BB_EN)\n \n@@ -252,6 +275,7 @@ POSSIBILITY OF SUCH DAMAGE.\n #define IXGBE_I2C_CLK_OE_N_EN_X540\tIXGBE_I2C_CLK_OE_N_EN\n #define IXGBE_I2C_CLK_OE_N_EN_X550\t0x00002000\n #define IXGBE_I2C_CLK_OE_N_EN_X550EM_x\tIXGBE_I2C_CLK_OE_N_EN_X550\n+#define IXGBE_I2C_CLK_OE_N_EN_X550EM_a\tIXGBE_I2C_CLK_OE_N_EN_X550\n #define IXGBE_I2C_CLK_OE_N_EN_BY_MAC(_hw) IXGBE_BY_MAC((_hw), I2C_CLK_OE_N_EN)\n #define IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT\t500\n \n@@ -1064,26 +1088,30 @@ struct ixgbe_dmac_config {\n #define IXGBE_FACTPS_X540\tIXGBE_FACTPS\n #define IXGBE_FACTPS_X550\tIXGBE_FACTPS\n #define IXGBE_FACTPS_X550EM_x\tIXGBE_FACTPS\n-#define IXGBE_FACTPS_BY_MAC(_hw)\tIXGBE_FACTPS\n+#define IXGBE_FACTPS_X550EM_a\t0x15FEC\n+#define IXGBE_FACTPS_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), FACTPS)\n \n #define IXGBE_PCIEANACTL\t0x11040\n #define IXGBE_SWSM\t\t0x10140\n #define IXGBE_SWSM_X540\t\tIXGBE_SWSM\n #define IXGBE_SWSM_X550\t\tIXGBE_SWSM\n #define IXGBE_SWSM_X550EM_x\tIXGBE_SWSM\n-#define IXGBE_SWSM_BY_MAC(_hw)\tIXGBE_SWSM\n+#define IXGBE_SWSM_X550EM_a\t0x15F70\n+#define IXGBE_SWSM_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), SWSM)\n \n #define IXGBE_FWSM\t\t0x10148\n #define IXGBE_FWSM_X540\t\tIXGBE_FWSM\n #define IXGBE_FWSM_X550\t\tIXGBE_FWSM\n #define IXGBE_FWSM_X550EM_x\tIXGBE_FWSM\n-#define IXGBE_FWSM_BY_MAC(_hw)\tIXGBE_FWSM\n+#define IXGBE_FWSM_X550EM_a\t0x15F74\n+#define IXGBE_FWSM_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), FWSM)\n \n #define IXGBE_SWFW_SYNC\t\tIXGBE_GSSR\n #define IXGBE_SWFW_SYNC_X540\tIXGBE_SWFW_SYNC\n #define IXGBE_SWFW_SYNC_X550\tIXGBE_SWFW_SYNC\n #define IXGBE_SWFW_SYNC_X550EM_x\tIXGBE_SWFW_SYNC\n-#define IXGBE_SWFW_SYNC_BY_MAC(_hw)\tIXGBE_SWFW_SYNC\n+#define IXGBE_SWFW_SYNC_X550EM_a\t0x15F78\n+#define IXGBE_SWFW_SYNC_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), SWFW_SYNC)\n \n #define IXGBE_GSSR\t\t0x10160\n #define IXGBE_MREVID\t\t0x11064\n@@ -1110,6 +1138,8 @@ struct ixgbe_dmac_config {\n #define IXGBE_CIAD_X550\t\t0x11510\n #define IXGBE_CIAA_X550EM_x\tIXGBE_CIAA_X550\n #define IXGBE_CIAD_X550EM_x\tIXGBE_CIAD_X550\n+#define IXGBE_CIAA_X550EM_a\tIXGBE_CIAA_X550\n+#define IXGBE_CIAD_X550EM_a\tIXGBE_CIAD_X550\n #define IXGBE_CIAA_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), CIAA)\n #define IXGBE_CIAD_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), CIAD)\n #define IXGBE_PICAUSE\t\t0x110B0\n@@ -1602,6 +1632,9 @@ struct ixgbe_dmac_config {\n #define IXGBE_SDP0_GPIEN_X550EM_x\tIXGBE_SDP0_GPIEN_X540\n #define IXGBE_SDP1_GPIEN_X550EM_x\tIXGBE_SDP1_GPIEN_X540\n #define IXGBE_SDP2_GPIEN_X550EM_x\tIXGBE_SDP2_GPIEN_X540\n+#define IXGBE_SDP0_GPIEN_X550EM_a\tIXGBE_SDP0_GPIEN_X540\n+#define IXGBE_SDP1_GPIEN_X550EM_a\tIXGBE_SDP1_GPIEN_X540\n+#define IXGBE_SDP2_GPIEN_X550EM_a\tIXGBE_SDP2_GPIEN_X540\n #define IXGBE_SDP0_GPIEN_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), SDP0_GPIEN)\n #define IXGBE_SDP1_GPIEN_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), SDP1_GPIEN)\n #define IXGBE_SDP2_GPIEN_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), SDP2_GPIEN)\n@@ -1792,6 +1825,9 @@ enum {\n #define IXGBE_EICR_GPI_SDP0_X550EM_x\tIXGBE_EICR_GPI_SDP0_X540\n #define IXGBE_EICR_GPI_SDP1_X550EM_x\tIXGBE_EICR_GPI_SDP1_X540\n #define IXGBE_EICR_GPI_SDP2_X550EM_x\tIXGBE_EICR_GPI_SDP2_X540\n+#define IXGBE_EICR_GPI_SDP0_X550EM_a\tIXGBE_EICR_GPI_SDP0_X540\n+#define IXGBE_EICR_GPI_SDP1_X550EM_a\tIXGBE_EICR_GPI_SDP1_X540\n+#define IXGBE_EICR_GPI_SDP2_X550EM_a\tIXGBE_EICR_GPI_SDP2_X540\n #define IXGBE_EICR_GPI_SDP0_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), EICR_GPI_SDP0)\n #define IXGBE_EICR_GPI_SDP1_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), EICR_GPI_SDP1)\n #define IXGBE_EICR_GPI_SDP2_BY_MAC(_hw)\tIXGBE_BY_MAC((_hw), EICR_GPI_SDP2)\n@@ -2167,6 +2203,7 @@ enum {\n #define IXGBE_GSSR_FLASH_SM\t\t0x0010\n #define IXGBE_GSSR_NVM_UPDATE_SM\t0x0200\n #define IXGBE_GSSR_SW_MNG_SM\t\t0x0400\n+#define IXGBE_GSSR_TOKEN_SM\t0x40000000 /* SW bit for shared access */\n #define IXGBE_GSSR_SHARED_I2C_SM 0x1806 /* Wait for both phys and both I2Cs */\n #define IXGBE_GSSR_I2C_MASK\t0x1800\n #define IXGBE_GSSR_NVM_PHY_MASK\t0xF\n@@ -3201,7 +3238,8 @@ struct ixgbe_adv_tx_context_desc {\n #define IXGBE_ADVTXD_TUNNEL_TYPE_SHIFT\t16 /* Adv Tx Desc Tunnel Type shift */\n #define IXGBE_ADVTXD_OUTERIPCS_SHIFT\t17 /* Adv Tx Desc OUTERIPCS Shift */\n #define IXGBE_ADVTXD_TUNNEL_TYPE_NVGRE\t1  /* Adv Tx Desc Tunnel Type NVGRE */\n-\n+/* Adv Tx Desc OUTERIPCS Shift for X550EM_a */\n+#define IXGBE_ADVTXD_OUTERIPCS_SHIFT_X550EM_a\t26\n /* Autonegotiation advertised speeds */\n typedef u32 ixgbe_autoneg_advertised;\n /* Link speed */\n@@ -3440,8 +3478,10 @@ enum ixgbe_mac_type {\n \tixgbe_mac_X540_vf,\n \tixgbe_mac_X550,\n \tixgbe_mac_X550EM_x,\n+\tixgbe_mac_X550EM_a,\n \tixgbe_mac_X550_vf,\n \tixgbe_mac_X550EM_x_vf,\n+\tixgbe_mac_X550EM_a_vf,\n \tixgbe_num_macs\n };\n \ndiff --git a/drivers/net/ixgbe/base/ixgbe_x550.c b/drivers/net/ixgbe/base/ixgbe_x550.c\nindex 4ca7998..1571b14 100644\n--- a/drivers/net/ixgbe/base/ixgbe_x550.c\n+++ b/drivers/net/ixgbe/base/ixgbe_x550.c\n@@ -80,9 +80,14 @@ s32 ixgbe_init_ops_X550(struct ixgbe_hw *hw)\n \tmac->ops.mdd_event = ixgbe_mdd_event_X550;\n \tmac->ops.restore_mdd_vf = ixgbe_restore_mdd_vf_X550;\n \tmac->ops.disable_rx = ixgbe_disable_rx_x550;\n-\tif (hw->device_id == IXGBE_DEV_ID_X550EM_X_10G_T) {\n+\tswitch (hw->device_id) {\n+\tcase IXGBE_DEV_ID_X550EM_X_10G_T:\n+\tcase IXGBE_DEV_ID_X550EM_A_10G_T:\n \t\thw->mac.ops.led_on = ixgbe_led_on_t_X550em;\n \t\thw->mac.ops.led_off = ixgbe_led_off_t_X550em;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n \t}\n \treturn ret_val;\n }\n@@ -330,22 +335,36 @@ STATIC void ixgbe_setup_mux_ctl(struct ixgbe_hw *hw)\n STATIC s32 ixgbe_identify_phy_x550em(struct ixgbe_hw *hw)\n {\n \tswitch (hw->device_id) {\n+\tcase IXGBE_DEV_ID_X550EM_A_SFP:\n+\t\thw->phy.phy_semaphore_mask = IXGBE_GSSR_TOKEN_SM;\n+\t\tif (hw->bus.lan_id)\n+\t\t\thw->phy.phy_semaphore_mask |= IXGBE_GSSR_PHY1_SM;\n+\t\telse\n+\t\t\thw->phy.phy_semaphore_mask |= IXGBE_GSSR_PHY0_SM;\n+\t\treturn ixgbe_identify_module_generic(hw);\n \tcase IXGBE_DEV_ID_X550EM_X_SFP:\n \t\t/* set up for CS4227 usage */\n \t\thw->phy.phy_semaphore_mask = IXGBE_GSSR_SHARED_I2C_SM;\n \t\tixgbe_setup_mux_ctl(hw);\n \t\tixgbe_check_cs4227(hw);\n+\t\t/* Fallthrough */\n \n+\tcase IXGBE_DEV_ID_X550EM_A_SFP_N:\n \t\treturn ixgbe_identify_module_generic(hw);\n \t\tbreak;\n \tcase IXGBE_DEV_ID_X550EM_X_KX4:\n \t\thw->phy.type = ixgbe_phy_x550em_kx4;\n \t\tbreak;\n \tcase IXGBE_DEV_ID_X550EM_X_KR:\n+\tcase IXGBE_DEV_ID_X550EM_A_KR:\n+\tcase IXGBE_DEV_ID_X550EM_A_KR_L:\n \t\thw->phy.type = ixgbe_phy_x550em_kr;\n \t\tbreak;\n \tcase IXGBE_DEV_ID_X550EM_X_1G_T:\n \tcase IXGBE_DEV_ID_X550EM_X_10G_T:\n+\tcase IXGBE_DEV_ID_X550EM_A_1G_T:\n+\tcase IXGBE_DEV_ID_X550EM_A_1G_T_L:\n+\tcase IXGBE_DEV_ID_X550EM_A_10G_T:\n \t\treturn ixgbe_identify_phy_generic(hw);\n \tdefault:\n \t\tbreak;\n@@ -420,6 +439,10 @@ s32 ixgbe_init_ops_X550EM(struct ixgbe_hw *hw)\n \t\tmac->ops.acquire_swfw_sync = ixgbe_acquire_swfw_sync_X550em;\n \t\tmac->ops.release_swfw_sync = ixgbe_release_swfw_sync_X550em;\n \t}\n+\tif (hw->mac.type == ixgbe_mac_X550EM_a) {\n+\t\tmac->ops.read_iosf_sb_reg = ixgbe_read_iosf_sb_reg_x550a;\n+\t\tmac->ops.write_iosf_sb_reg = ixgbe_write_iosf_sb_reg_x550a;\n+\t}\n \n \tmac->ops.get_media_type = ixgbe_get_media_type_X550em;\n \tmac->ops.setup_sfp = ixgbe_setup_sfp_modules_X550em;\n@@ -898,6 +921,69 @@ out:\n }\n \n /**\n+ *  ixgbe_write_iosf_sb_reg_x550a - Writes a value to specified register\n+ *  of the IOSF device\n+ *  @hw: pointer to hardware structure\n+ *  @reg_addr: 32 bit PHY register to write\n+ *  @device_type: 3 bit device type\n+ *  @data: Data to write to the register\n+ **/\n+s32 ixgbe_write_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,\n+\tu32 device_type, u32 data)\n+{\n+\tstruct ixgbe_hic_internal_phy_req write_cmd;\n+\ts32 status;\n+\tUNREFERENCED_1PARAMETER(device_type);\n+\n+\twrite_cmd.hdr.cmd = FW_INT_PHY_REQ_CMD;\n+\twrite_cmd.hdr.buf_len = FW_INT_PHY_REQ_LEN;\n+\twrite_cmd.port_number = hw->bus.lan_id;\n+\twrite_cmd.command_type = FW_INT_PHY_REQ_WRITE;\n+\twrite_cmd.address = (u16)reg_addr;\n+\twrite_cmd.rsv1 = 0;\n+\twrite_cmd.write_data = data;\n+\twrite_cmd.pad = 0;\n+\n+\tstatus = ixgbe_host_interface_command(hw, (u32 *)&write_cmd,\n+\t\tsizeof(write_cmd), IXGBE_HI_COMMAND_TIMEOUT, false);\n+\n+\treturn status;\n+}\n+\n+/**\n+ *  ixgbe_read_iosf_sb_reg_x550a - Writes a value to specified register\n+ *  of the IOSF device.\n+ *  @hw: pointer to hardware structure\n+ *  @reg_addr: 32 bit PHY register to write\n+ *  @device_type: 3 bit device type\n+ *  @data: Pointer to read data from the register\n+ **/\n+s32 ixgbe_read_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,\n+\tu32 device_type, u32 *data)\n+{\n+\tstruct ixgbe_hic_internal_phy_req read_cmd;\n+\ts32 status;\n+\tUNREFERENCED_1PARAMETER(device_type);\n+\n+\tread_cmd.hdr.cmd = FW_INT_PHY_REQ_CMD;\n+\tread_cmd.hdr.buf_len = FW_INT_PHY_REQ_LEN;\n+\tread_cmd.port_number = hw->bus.lan_id;\n+\tread_cmd.command_type = FW_INT_PHY_REQ_READ;\n+\tread_cmd.address = (u16)reg_addr;\n+\tread_cmd.rsv1 = 0;\n+\tread_cmd.write_data = 0;\n+\tread_cmd.pad = 0;\n+\n+\tstatus = ixgbe_host_interface_command(hw, (u32 *)&read_cmd,\n+\t\tsizeof(read_cmd), IXGBE_HI_COMMAND_TIMEOUT, true);\n+\n+\t/* Extract the register value from the response. */\n+\t*data = ((struct ixgbe_hic_internal_phy_resp *)&read_cmd)->read_data;\n+\n+\treturn status;\n+}\n+\n+/**\n  *  ixgbe_disable_mdd_X550\n  *  @hw: pointer to hardware structure\n  *\n@@ -1056,13 +1142,22 @@ enum ixgbe_media_type ixgbe_get_media_type_X550em(struct ixgbe_hw *hw)\n \tswitch (hw->device_id) {\n \tcase IXGBE_DEV_ID_X550EM_X_KR:\n \tcase IXGBE_DEV_ID_X550EM_X_KX4:\n+\tcase IXGBE_DEV_ID_X550EM_A_KR:\n+\tcase IXGBE_DEV_ID_X550EM_A_KR_L:\n \t\tmedia_type = ixgbe_media_type_backplane;\n \t\tbreak;\n \tcase IXGBE_DEV_ID_X550EM_X_SFP:\n+\tcase IXGBE_DEV_ID_X550EM_A_SFP:\n+\tcase IXGBE_DEV_ID_X550EM_A_SFP_N:\n+\tcase IXGBE_DEV_ID_X550EM_A_QSFP:\n+\tcase IXGBE_DEV_ID_X550EM_A_QSFP_N:\n \t\tmedia_type = ixgbe_media_type_fiber;\n \t\tbreak;\n \tcase IXGBE_DEV_ID_X550EM_X_1G_T:\n \tcase IXGBE_DEV_ID_X550EM_X_10G_T:\n+\tcase IXGBE_DEV_ID_X550EM_A_1G_T:\n+\tcase IXGBE_DEV_ID_X550EM_A_1G_T_L:\n+\tcase IXGBE_DEV_ID_X550EM_A_10G_T:\n \t\tmedia_type = ixgbe_media_type_copper;\n \t\tbreak;\n \tdefault:\ndiff --git a/drivers/net/ixgbe/base/ixgbe_x550.h b/drivers/net/ixgbe/base/ixgbe_x550.h\nindex a436686..47efa7c 100644\n--- a/drivers/net/ixgbe/base/ixgbe_x550.h\n+++ b/drivers/net/ixgbe/base/ixgbe_x550.h\n@@ -69,6 +69,10 @@ s32 ixgbe_write_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr,\n \t\t\t\t u32 device_type, u32 data);\n s32 ixgbe_read_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr,\n \tu32 device_type, u32 *data);\n+s32 ixgbe_write_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,\n+\tu32 device_type, u32 data);\n+s32 ixgbe_read_iosf_sb_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr,\n+\tu32 device_type, u32 *data);\n void ixgbe_disable_mdd_X550(struct ixgbe_hw *hw);\n void ixgbe_enable_mdd_X550(struct ixgbe_hw *hw);\n void ixgbe_mdd_event_X550(struct ixgbe_hw *hw, u32 *vf_bitmap);\n",
    "prefixes": [
        "dpdk-dev",
        "02/12"
    ]
}