get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 806578,
    "url": "http://patchwork.ozlabs.org/api/patches/806578/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1503927503-29065-5-git-send-email-tariqt@mellanox.com/",
    "project": {
        "id": 7,
        "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api",
        "name": "Linux network development",
        "link_name": "netdev",
        "list_id": "netdev.vger.kernel.org",
        "list_email": "netdev@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1503927503-29065-5-git-send-email-tariqt@mellanox.com>",
    "list_archive_url": null,
    "date": "2017-08-28T13:38:23",
    "name": "[net-next,4/4] net/mlx4: Add user mac FW update support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "06f93a980cf364988527879ec41e305df98967fb",
    "submitter": {
        "id": 68926,
        "url": "http://patchwork.ozlabs.org/api/people/68926/?format=api",
        "name": "Tariq Toukan",
        "email": "tariqt@mellanox.com"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1503927503-29065-5-git-send-email-tariqt@mellanox.com/mbox/",
    "series": [
        {
            "id": 170,
            "url": "http://patchwork.ozlabs.org/api/series/170/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=170",
            "date": "2017-08-28T13:38:21",
            "name": "mlx4 misc patches",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/170/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/806578/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/806578/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@ozlabs.org",
        "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xgtCx5dHMz9sNq\n\tfor <patchwork-incoming@ozlabs.org>;\n\tMon, 28 Aug 2017 23:39:25 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751332AbdH1NjX (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tMon, 28 Aug 2017 09:39:23 -0400",
            "from mail-il-dmz.mellanox.com ([193.47.165.129]:38592 \"EHLO\n\tmellanox.co.il\" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org\n\twith ESMTP id S1751190AbdH1NjM (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Mon, 28 Aug 2017 09:39:12 -0400",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n\ttariqt@mellanox.com)\n\twith ESMTPS (AES256-SHA encrypted); 28 Aug 2017 16:39:08 +0300",
            "from dev-l-vrt-206-006.mtl.labs.mlnx\n\t(dev-l-vrt-206-006.mtl.labs.mlnx [10.134.206.6])\n\tby labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v7SDd79J014764;\n\tMon, 28 Aug 2017 16:39:07 +0300"
        ],
        "From": "Tariq Toukan <tariqt@mellanox.com>",
        "To": "\"David S. Miller\" <davem@davemloft.net>",
        "Cc": "netdev@vger.kernel.org, Eran Ben Elisha <eranbe@mellanox.com>,\n\tMoshe Shemesh <moshe@mellanox.com>, Tariq Toukan <tariqt@mellanox.com>",
        "Subject": "[PATCH net-next 4/4] net/mlx4: Add user mac FW update support",
        "Date": "Mon, 28 Aug 2017 16:38:23 +0300",
        "Message-Id": "<1503927503-29065-5-git-send-email-tariqt@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1503927503-29065-1-git-send-email-tariqt@mellanox.com>",
        "References": "<1503927503-29065-1-git-send-email-tariqt@mellanox.com>",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "From: Moshe Shemesh <moshe@mellanox.com>\n\nAdding support for updating the FW on new port mac, when port mac change\nis requested by the user. This info is required by the FW as OEM\nmanagement tools require this info directly from the NIC FW.\nCheck device capability bit to verify the FW supports user mac.\nIf the FW does support it, use set_port command to notify the FW on the\nnew mac.\nThe feature is relevant only to PF port mac.\n\nSigned-off-by: Moshe Shemesh <moshe@mellanox.com>\nSigned-off-by: Tariq Toukan <tariqt@mellanox.com>\n---\n drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 23 +++++++++++++++++++++--\n drivers/net/ethernet/mellanox/mlx4/fw.c        |  5 +++++\n drivers/net/ethernet/mellanox/mlx4/main.c      |  3 +++\n drivers/net/ethernet/mellanox/mlx4/mlx4.h      |  2 ++\n drivers/net/ethernet/mellanox/mlx4/port.c      | 25 +++++++++++++++++++++++++\n include/linux/mlx4/device.h                    |  2 ++\n 6 files changed, 58 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c\nindex 6e67ca7aa7f5..3753943aec0f 100644\n--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c\n+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c\n@@ -732,6 +732,21 @@ static int mlx4_en_replace_mac(struct mlx4_en_priv *priv, int qpn,\n \treturn __mlx4_replace_mac(dev, priv->port, qpn, new_mac_u64);\n }\n \n+static void mlx4_en_update_user_mac(struct mlx4_en_priv *priv,\n+\t\t\t\t    unsigned char new_mac[ETH_ALEN + 2])\n+{\n+\tstruct mlx4_en_dev *mdev = priv->mdev;\n+\tint err;\n+\n+\tif (!(mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_USER_MAC_EN))\n+\t\treturn;\n+\n+\terr = mlx4_SET_PORT_user_mac(mdev->dev, priv->port, new_mac);\n+\tif (err)\n+\t\ten_err(priv, \"Failed to pass user MAC(%pM) to Firmware for port %d, with error %d\\n\",\n+\t\t       new_mac, priv->port, err);\n+}\n+\n static int mlx4_en_do_set_mac(struct mlx4_en_priv *priv,\n \t\t\t      unsigned char new_mac[ETH_ALEN + 2])\n {\n@@ -766,8 +781,12 @@ static int mlx4_en_set_mac(struct net_device *dev, void *addr)\n \tmutex_lock(&mdev->state_lock);\n \tmemcpy(new_mac, saddr->sa_data, ETH_ALEN);\n \terr = mlx4_en_do_set_mac(priv, new_mac);\n-\tif (!err)\n-\t\tmemcpy(dev->dev_addr, saddr->sa_data, ETH_ALEN);\n+\tif (err)\n+\t\tgoto out;\n+\n+\tmemcpy(dev->dev_addr, saddr->sa_data, ETH_ALEN);\n+\tmlx4_en_update_user_mac(priv, new_mac);\n+out:\n \tmutex_unlock(&mdev->state_lock);\n \n \treturn err;\ndiff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c\nindex 10cfb058a9de..d4c7c15cb4ad 100644\n--- a/drivers/net/ethernet/mellanox/mlx4/fw.c\n+++ b/drivers/net/ethernet/mellanox/mlx4/fw.c\n@@ -162,6 +162,7 @@ static void dump_dev_cap_flags2(struct mlx4_dev *dev, u64 flags)\n \t\t[35] = \"Diag counters per port\",\n \t\t[36] = \"QinQ VST mode support\",\n \t\t[37] = \"sl to vl mapping table change event support\",\n+\t\t[38] = \"user MAC support\",\n \t};\n \tint i;\n \n@@ -778,6 +779,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)\n #define QUERY_DEV_CAP_MAX_DESC_SZ_SQ_OFFSET\t0x52\n #define QUERY_DEV_CAP_MAX_SG_RQ_OFFSET\t\t0x55\n #define QUERY_DEV_CAP_MAX_DESC_SZ_RQ_OFFSET\t0x56\n+#define QUERY_DEV_CAP_USER_MAC_EN_OFFSET\t0x5C\n #define QUERY_DEV_CAP_SVLAN_BY_QP_OFFSET\t0x5D\n #define QUERY_DEV_CAP_MAX_QP_MCG_OFFSET\t\t0x61\n #define QUERY_DEV_CAP_RSVD_MCG_OFFSET\t\t0x62\n@@ -949,6 +951,9 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)\n \tMLX4_GET(size, outbox, QUERY_DEV_CAP_MAX_DESC_SZ_SQ_OFFSET);\n \tdev_cap->max_sq_desc_sz = size;\n \n+\tMLX4_GET(field, outbox, QUERY_DEV_CAP_USER_MAC_EN_OFFSET);\n+\tif (field & (1 << 2))\n+\t\tdev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_USER_MAC_EN;\n \tMLX4_GET(field, outbox, QUERY_DEV_CAP_SVLAN_BY_QP_OFFSET);\n \tif (field & 0x1)\n \t\tdev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_SVLAN_BY_QP;\ndiff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c\nindex e6413a8a5f07..c631d157b97d 100644\n--- a/drivers/net/ethernet/mellanox/mlx4/main.c\n+++ b/drivers/net/ethernet/mellanox/mlx4/main.c\n@@ -1029,6 +1029,9 @@ static int mlx4_slave_cap(struct mlx4_dev *dev)\n \tdev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_TS;\n \tmlx4_warn(dev, \"Timestamping is not supported in slave mode\\n\");\n \n+\tdev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_USER_MAC_EN;\n+\tmlx4_dbg(dev, \"User MAC FW update is not supported in slave mode\\n\");\n+\n \tslave_adjust_steering_mode(dev, dev_cap, hca_param);\n \tmlx4_dbg(dev, \"RSS support for IP fragments is %s\\n\",\n \t\t hca_param->rss_ip_frags ? \"on\" : \"off\");\ndiff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h\nindex 706d7f21ac5c..16f1e097d33a 100644\n--- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h\n+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h\n@@ -807,6 +807,8 @@ struct mlx4_set_port_general_context {\n \tu8 phv_en;\n \tu8 reserved6[5];\n \t__be16 user_mtu;\n+\tu16 reserved7;\n+\tu8 user_mac[6];\n };\n \n struct mlx4_set_port_rqp_calc_context {\ndiff --git a/drivers/net/ethernet/mellanox/mlx4/port.c b/drivers/net/ethernet/mellanox/mlx4/port.c\nindex 4e36e287d605..3ef3406ff4cb 100644\n--- a/drivers/net/ethernet/mellanox/mlx4/port.c\n+++ b/drivers/net/ethernet/mellanox/mlx4/port.c\n@@ -52,6 +52,7 @@\n \n #define MLX4_FLAG2_V_IGNORE_FCS_MASK\t\tBIT(1)\n #define MLX4_FLAG2_V_USER_MTU_MASK\t\tBIT(5)\n+#define MLX4_FLAG2_V_USER_MAC_MASK\t\tBIT(6)\n #define MLX4_FLAG_V_MTU_MASK\t\t\tBIT(0)\n #define MLX4_FLAG_V_PPRX_MASK\t\t\tBIT(1)\n #define MLX4_FLAG_V_PPTX_MASK\t\t\tBIT(2)\n@@ -1700,6 +1701,30 @@ int mlx4_SET_PORT_user_mtu(struct mlx4_dev *dev, u8 port, u16 user_mtu)\n }\n EXPORT_SYMBOL(mlx4_SET_PORT_user_mtu);\n \n+int mlx4_SET_PORT_user_mac(struct mlx4_dev *dev, u8 port, u8 *user_mac)\n+{\n+\tstruct mlx4_cmd_mailbox *mailbox;\n+\tstruct mlx4_set_port_general_context *context;\n+\tu32 in_mod;\n+\tint err;\n+\n+\tmailbox = mlx4_alloc_cmd_mailbox(dev);\n+\tif (IS_ERR(mailbox))\n+\t\treturn PTR_ERR(mailbox);\n+\tcontext = mailbox->buf;\n+\tcontext->flags2 |= MLX4_FLAG2_V_USER_MAC_MASK;\n+\tmemcpy(context->user_mac, user_mac, sizeof(context->user_mac));\n+\n+\tin_mod = MLX4_SET_PORT_GENERAL << 8 | port;\n+\terr = mlx4_cmd(dev, mailbox->dma, in_mod, MLX4_SET_PORT_ETH_OPCODE,\n+\t\t       MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B,\n+\t\t       MLX4_CMD_NATIVE);\n+\n+\tmlx4_free_cmd_mailbox(dev, mailbox);\n+\treturn err;\n+}\n+EXPORT_SYMBOL(mlx4_SET_PORT_user_mac);\n+\n int mlx4_SET_PORT_fcs_check(struct mlx4_dev *dev, u8 port, u8 ignore_fcs_value)\n {\n \tstruct mlx4_cmd_mailbox *mailbox;\ndiff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h\nindex 9844606f9491..89c0e7f7cd9b 100644\n--- a/include/linux/mlx4/device.h\n+++ b/include/linux/mlx4/device.h\n@@ -224,6 +224,7 @@ enum {\n \tMLX4_DEV_CAP_FLAG2_DIAG_PER_PORT\t= 1ULL <<  35,\n \tMLX4_DEV_CAP_FLAG2_SVLAN_BY_QP          = 1ULL <<  36,\n \tMLX4_DEV_CAP_FLAG2_SL_TO_VL_CHANGE_EVENT = 1ULL << 37,\n+\tMLX4_DEV_CAP_FLAG2_USER_MAC_EN\t\t= 1ULL << 38,\n };\n \n enum {\n@@ -1377,6 +1378,7 @@ int mlx4_flow_steer_promisc_remove(struct mlx4_dev *dev, u8 port,\n int __mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac);\n int mlx4_SET_PORT_general(struct mlx4_dev *dev, u8 port, int mtu,\n \t\t\t  u8 pptx, u8 pfctx, u8 pprx, u8 pfcrx);\n+int mlx4_SET_PORT_user_mac(struct mlx4_dev *dev, u8 port, u8 *user_mac);\n int mlx4_SET_PORT_user_mtu(struct mlx4_dev *dev, u8 port, u16 user_mtu);\n int mlx4_SET_PORT_qpn_calc(struct mlx4_dev *dev, u8 port, u32 base_qpn,\n \t\t\t   u8 promisc);\n",
    "prefixes": [
        "net-next",
        "4/4"
    ]
}