get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 53134,
    "url": "http://patches.dpdk.org/api/patches/53134/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/8daab002f486a50a0ad1aa02cd39513c732c94b8.1556525874.git.igor.russkikh@aquantia.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": "<8daab002f486a50a0ad1aa02cd39513c732c94b8.1556525874.git.igor.russkikh@aquantia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/8daab002f486a50a0ad1aa02cd39513c732c94b8.1556525874.git.igor.russkikh@aquantia.com",
    "date": "2019-04-29T08:20:15",
    "name": "[04/11] net/atlantic: eeprom get/set should consider offset",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "d7b16b411a48b913c6c2761134958e95780a46fb",
    "submitter": {
        "id": 1124,
        "url": "http://patches.dpdk.org/api/people/1124/?format=api",
        "name": "Igor Russkikh",
        "email": "igor.russkikh@aquantia.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/8daab002f486a50a0ad1aa02cd39513c732c94b8.1556525874.git.igor.russkikh@aquantia.com/mbox/",
    "series": [
        {
            "id": 4499,
            "url": "http://patches.dpdk.org/api/series/4499/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=4499",
            "date": "2019-04-29T08:20:07",
            "name": "Aquantia atlantic bugfixes",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/4499/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/53134/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/53134/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 9CC471B276;\n\tMon, 29 Apr 2019 10:20:24 +0200 (CEST)",
            "from NAM04-BN3-obe.outbound.protection.outlook.com\n\t(mail-eopbgr680081.outbound.protection.outlook.com [40.107.68.81])\n\tby dpdk.org (Postfix) with ESMTP id 2986E1B206;\n\tMon, 29 Apr 2019 10:20:17 +0200 (CEST)",
            "from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by\n\tDM6PR11MB2841.namprd11.prod.outlook.com (20.176.100.32) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.1835.13; Mon, 29 Apr 2019 08:20:16 +0000",
            "from DM6PR11MB3625.namprd11.prod.outlook.com\n\t([fe80::f035:2c20:5a61:7653]) by\n\tDM6PR11MB3625.namprd11.prod.outlook.com\n\t([fe80::f035:2c20:5a61:7653%3]) with mapi id 15.20.1835.010;\n\tMon, 29 Apr 2019 08:20:15 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=yTKIb7WX2dRRVZ+duHYMarHFcyErfsWz4VRZsroPoVs=;\n\tb=kz1dXyW2DWLjJX1mdIpIWHoRRbNwxzForTObweBwsTx85PWB9hqF1PTKOEIsVejVzG9BGsocyWZFfH+X4YNhtxz3YPCaMUhH+aoAbJ/2qkPkJ8A+jZS+bvl2Ta7Hy/HSwORkJmlsWHikVmE5PTFSIVlUnnx7nzlHXrgfopX5CBw=",
        "From": "Igor Russkikh <Igor.Russkikh@aquantia.com>",
        "To": "\"dev@dpdk.org\" <dev@dpdk.org>",
        "CC": "Pavel Belous <Pavel.Belous@aquantia.com>, Igor Russkikh\n\t<Igor.Russkikh@aquantia.com>, \"stable@dpdk.org\" <stable@dpdk.org>",
        "Thread-Topic": "[PATCH  04/11] net/atlantic: eeprom get/set should consider\n\toffset",
        "Thread-Index": "AQHU/mRfs2t+UBKUo0OqSueAV2G1dw==",
        "Date": "Mon, 29 Apr 2019 08:20:15 +0000",
        "Message-ID": "<8daab002f486a50a0ad1aa02cd39513c732c94b8.1556525874.git.igor.russkikh@aquantia.com>",
        "References": "<cover.1556525874.git.igor.russkikh@aquantia.com>",
        "In-Reply-To": "<cover.1556525874.git.igor.russkikh@aquantia.com>",
        "Accept-Language": "en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "HE1P190CA0016.EURP190.PROD.OUTLOOK.COM\n\t(2603:10a6:3:bc::26)\n\tTo DM6PR11MB3625.namprd11.prod.outlook.com\n\t(2603:10b6:5:13a::21)",
        "authentication-results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Igor.Russkikh@aquantia.com; ",
        "x-ms-exchange-messagesentrepresentingtype": "1",
        "x-mailer": "git-send-email 2.17.1",
        "x-originating-ip": "[95.79.108.179]",
        "x-ms-publictraffictype": "Email",
        "x-ms-office365-filtering-correlation-id": "08567be1-4aa2-4858-aaae-08d6cc7b81f6",
        "x-microsoft-antispam": "BCL:0; PCL:0;\n\tRULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020);\n\tSRVR:DM6PR11MB2841; ",
        "x-ms-traffictypediagnostic": "DM6PR11MB2841:",
        "x-microsoft-antispam-prvs": "<DM6PR11MB2841E88C9BD99EB61C8A4D2698390@DM6PR11MB2841.namprd11.prod.outlook.com>",
        "x-ms-oob-tlc-oobclassifiers": "OLM:221;",
        "x-forefront-prvs": "0022134A87",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(366004)(376002)(396003)(136003)(39840400004)(346002)(199004)(189003)(44832011)(99286004)(186003)(118296001)(478600001)(71200400001)(53936002)(6506007)(71190400001)(446003)(5660300002)(2351001)(14454004)(14444005)(486006)(66556008)(73956011)(66946007)(64756008)(66476007)(66446008)(386003)(52116002)(316002)(11346002)(2616005)(7736002)(476003)(72206003)(54906003)(305945005)(81166006)(1730700003)(2501003)(36756003)(76176011)(81156014)(6486002)(3846002)(66066001)(102836004)(6916009)(97736004)(8936002)(450100002)(86362001)(6116002)(6436002)(26005)(256004)(8676002)(50226002)(2906002)(25786009)(5640700003)(6512007)(68736007)(4326008);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB2841;\n\tH:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; A:1; MX:1; ",
        "received-spf": "None (protection.outlook.com: aquantia.com does not designate\n\tpermitted sender hosts)",
        "x-ms-exchange-senderadcheck": "1",
        "x-microsoft-antispam-message-info": "dUcrxUl827IY22xFcgFKtsnPyxpIdXqiziQcDmALFKHmrvRhk6pFrNTGQjstY7DdCVfMwcOVFR5JpG5Jv6sNggDllJIzhTCYbD73bTbDH9t8siQ2E9/H0h+P6Dn9iR5vbYi+XfY5dBhXbduxoo0iJL16bL1i7DS7hCKtZzpl7TRbwzEwx5JcpTL8UgsnIGUhhZ1IYdx2skeIvZS4GO+WsivM3APpDTzwIyVFarHqxg9cMKkmBG/uf0oZcj0tOAQhQfvtXi8cIa9Lf2IHatlOAjrTcxR7X0mD0ocnIbYNDeYcyyLVkbPmMyiBpygt6YpcaNZYrtiWl1OtjE29uUYWZ2pKhWjFF5t0XHKqFjzz2T5LqVB1dd25PY4jvg10rV3EcbX5dYkL8gM7dD+AMTgWL2u5By65iRSwbfq6O4FPDe4=",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "MIME-Version": "1.0",
        "X-OriginatorOrg": "aquantia.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "08567be1-4aa2-4858-aaae-08d6cc7b81f6",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "29 Apr 2019 08:20:15.7026\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-fromentityheader": "Hosted",
        "X-MS-Exchange-CrossTenant-id": "83e2e134-991c-4ede-8ced-34d47e38e6b1",
        "X-MS-Exchange-CrossTenant-mailboxtype": "HOSTED",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR11MB2841",
        "Subject": "[dpdk-dev] [PATCH 04/11] net/atlantic: eeprom get/set should\n\tconsider offset",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Pavel Belous <pavel.belous@aquantia.com>\n\nEEPROM get/set offset logic should take offset into account.\nData transfers to/from FW should also correctly use\ndword based transfer interface, taking into account the\nremainder.\nWe also check error code returned from FW.\n\ncc: stable@dpdk.org\nFixes: ce4e8d418097 (\"net/atlantic: implement EEPROM get/set\")\nSigned-off-by: Igor Russkikh <igor.russkikh@aquantia.com>\nSigned-off-by: Pavel Belous <pavel.belous@aquantia.com>\n---\n drivers/net/atlantic/atl_ethdev.c             |  7 +-\n drivers/net/atlantic/atl_types.h              |  2 +-\n drivers/net/atlantic/hw_atl/hw_atl_utils.h    | 11 +--\n .../net/atlantic/hw_atl/hw_atl_utils_fw2x.c   | 95 ++++++++++++-------\n 4 files changed, 68 insertions(+), 47 deletions(-)",
    "diff": "diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c\r\nindex 4e6124aa318e..7be97ab3095e 100644\r\n--- a/drivers/net/atlantic/atl_ethdev.c\r\n+++ b/drivers/net/atlantic/atl_ethdev.c\r\n@@ -1448,14 +1448,15 @@ int atl_dev_set_eeprom(struct rte_eth_dev *dev,\r\n \tif (hw->aq_fw_ops->set_eeprom == NULL)\r\n \t\treturn -ENOTSUP;\r\n \r\n-\tif (eeprom->length != SFP_EEPROM_SIZE || eeprom->data == NULL)\r\n+\tif (eeprom->length + eeprom->offset > SFP_EEPROM_SIZE ||\r\n+\t    eeprom->data == NULL)\r\n \t\treturn -EINVAL;\r\n \r\n \tif (eeprom->magic)\r\n \t\tdev_addr = eeprom->magic;\r\n \r\n-\treturn hw->aq_fw_ops->set_eeprom(hw, dev_addr,\r\n-\t\t\t\t\t eeprom->data, eeprom->length);\r\n+\treturn hw->aq_fw_ops->set_eeprom(hw, dev_addr, eeprom->data,\r\n+\t\t\t\t\t eeprom->length, eeprom->offset);\r\n }\r\n \r\n static int\r\ndiff --git a/drivers/net/atlantic/atl_types.h b/drivers/net/atlantic/atl_types.h\r\nindex dbaf2c635f50..84a4776951db 100644\r\n--- a/drivers/net/atlantic/atl_types.h\r\n+++ b/drivers/net/atlantic/atl_types.h\r\n@@ -177,7 +177,7 @@ struct aq_fw_ops {\r\n \t\t\t  u32 *data, u32 len, u32 offset);\r\n \r\n \tint (*set_eeprom)(struct aq_hw_s *self, int dev_addr,\r\n-\t\t\t  u32 *data, u32 len);\r\n+\t\t\t  u32 *data, u32 len, u32 offset);\r\n \r\n \tint (*send_macsec_req)(struct aq_hw_s *self,\r\n \t\t\t       struct macsec_msg_fw_request *req,\r\ndiff --git a/drivers/net/atlantic/hw_atl/hw_atl_utils.h b/drivers/net/atlantic/hw_atl/hw_atl_utils.h\r\nindex b7c531573623..81caffaedfd0 100644\r\n--- a/drivers/net/atlantic/hw_atl/hw_atl_utils.h\r\n+++ b/drivers/net/atlantic/hw_atl/hw_atl_utils.h\r\n@@ -337,15 +337,8 @@ struct offload_info {\r\n \tu8 buf[0];\r\n } __attribute__((__packed__));\r\n \r\n-struct smbus_read_request {\r\n-\tu32 offset; /* not used */\r\n-\tu32 device_id;\r\n-\tu32 address;\r\n-\tu32 length;\r\n-} __attribute__((__packed__));\r\n-\r\n-struct smbus_write_request {\r\n-\tu32 offset; /* not used */\r\n+struct smbus_request {\r\n+\tu32 msg_id; /* not used */\r\n \tu32 device_id;\r\n \tu32 address;\r\n \tu32 length;\r\ndiff --git a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c\r\nindex 89a3759b89b4..de4189441fad 100644\r\n--- a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c\r\n+++ b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c\r\n@@ -498,14 +498,17 @@ static int aq_fw2x_led_control(struct aq_hw_s *self, u32 mode)\r\n static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int dev_addr,\r\n \t\t\t      u32 *data, u32 len, u32 offset)\r\n {\r\n-\tint err = 0;\r\n-\tstruct smbus_read_request request;\r\n-\tu32 mpi_opts;\r\n+\tu32 bytes_remains = len % sizeof(u32);\r\n+\tu32 num_dwords = len / sizeof(u32);\r\n+\tstruct smbus_request request;\r\n \tu32 result = 0;\r\n+\tu32 mpi_opts;\r\n+\tint err = 0;\r\n \r\n \tif (self->fw_ver_actual < HW_ATL_FW_FEATURE_EEPROM)\r\n \t\treturn -EOPNOTSUPP;\r\n \r\n+\trequest.msg_id = 0;\r\n \trequest.device_id = dev_addr;\r\n \trequest.address = offset;\r\n \trequest.length = len;\r\n@@ -540,34 +543,33 @@ static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int dev_addr,\r\n \tif (err < 0)\r\n \t\treturn err;\r\n \r\n-\tif (result == 0) {\r\n-\t\tu32 num_dwords = len / sizeof(u32);\r\n-\t\tu32 bytes_remains = len % sizeof(u32);\r\n+\tif (result)\r\n+\t\treturn -EIO;\r\n \r\n-\t\tif (num_dwords) {\r\n-\t\t\terr = hw_atl_utils_fw_downld_dwords(self,\r\n-\t\t\t\tself->rpc_addr + sizeof(u32) * 2,\r\n-\t\t\t\tdata,\r\n-\t\t\t\tnum_dwords);\r\n+\tif (num_dwords) {\r\n+\t\terr = hw_atl_utils_fw_downld_dwords(self,\r\n+\t\t\tself->rpc_addr + sizeof(u32) * 2,\r\n+\t\t\tdata,\r\n+\t\t\tnum_dwords);\r\n \r\n-\t\t\tif (err < 0)\r\n-\t\t\t\treturn err;\r\n-\t\t}\r\n+\t\tif (err < 0)\r\n+\t\t\treturn err;\r\n+\t}\r\n \r\n-\t\tif (bytes_remains) {\r\n-\t\t\tu32 val = 0;\r\n+\tif (bytes_remains) {\r\n+\t\tu32 val = 0;\r\n \r\n-\t\t\terr = hw_atl_utils_fw_downld_dwords(self,\r\n-\t\t\t\tself->rpc_addr + sizeof(u32) * 2 + num_dwords,\r\n-\t\t\t\t&val,\r\n-\t\t\t\tsizeof(u32));\r\n+\t\terr = hw_atl_utils_fw_downld_dwords(self,\r\n+\t\t\tself->rpc_addr + (sizeof(u32) * 2) +\r\n+\t\t\t(num_dwords * sizeof(u32)),\r\n+\t\t\t&val,\r\n+\t\t\t1);\r\n \r\n-\t\t\tif (err < 0)\r\n-\t\t\t\treturn err;\r\n+\t\tif (err < 0)\r\n+\t\t\treturn err;\r\n \r\n-\t\t\trte_memcpy((u8 *)data + len - bytes_remains,\r\n-\t\t\t\t   &val, bytes_remains);\r\n-\t\t}\r\n+\t\trte_memcpy((u8 *)data + len - bytes_remains,\r\n+\t\t\t\t&val, bytes_remains);\r\n \t}\r\n \r\n \treturn 0;\r\n@@ -575,17 +577,18 @@ static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int dev_addr,\r\n \r\n \r\n static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int dev_addr,\r\n-\t\t\t      u32 *data, u32 len)\r\n+\t\t\t      u32 *data, u32 len, u32 offset)\r\n {\r\n-\tstruct smbus_write_request request;\r\n+\tstruct smbus_request request;\r\n \tu32 mpi_opts, result = 0;\r\n \tint err = 0;\r\n \r\n \tif (self->fw_ver_actual < HW_ATL_FW_FEATURE_EEPROM)\r\n \t\treturn -EOPNOTSUPP;\r\n \r\n+\trequest.msg_id = 0;\r\n \trequest.device_id = dev_addr;\r\n-\trequest.address = 0;\r\n+\trequest.address = offset;\r\n \trequest.length = len;\r\n \r\n \t/* Write SMBUS request to cfg memory */\r\n@@ -597,13 +600,34 @@ static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int dev_addr,\r\n \t\treturn err;\r\n \r\n \t/* Write SMBUS data to cfg memory */\r\n-\terr = hw_atl_utils_fw_upload_dwords(self,\r\n-\t\t\t\tself->rpc_addr + sizeof(request),\r\n-\t\t\t\t(u32 *)(void *)data,\r\n-\t\t\t\tRTE_ALIGN(len, sizeof(u32)));\r\n+\tu32 num_dwords = len / sizeof(u32);\r\n+\tu32 bytes_remains = len % sizeof(u32);\r\n \r\n-\tif (err < 0)\r\n-\t\treturn err;\r\n+\tif (num_dwords) {\r\n+\t\terr = hw_atl_utils_fw_upload_dwords(self,\r\n+\t\t\tself->rpc_addr + sizeof(request),\r\n+\t\t\t(u32 *)(void *)data,\r\n+\t\t\tnum_dwords);\r\n+\r\n+\t\tif (err < 0)\r\n+\t\t\treturn err;\r\n+\t}\r\n+\r\n+\tif (bytes_remains) {\r\n+\t\tu32 val = 0;\r\n+\r\n+\t\trte_memcpy(&val, (u8 *)data + (sizeof(u32) * num_dwords),\r\n+\t\t\t   bytes_remains);\r\n+\r\n+\t\terr = hw_atl_utils_fw_upload_dwords(self,\r\n+\t\t\tself->rpc_addr + sizeof(request) +\r\n+\t\t\t(num_dwords * sizeof(u32)),\r\n+\t\t\t&val,\r\n+\t\t\t1);\r\n+\r\n+\t\tif (err < 0)\r\n+\t\t\treturn err;\r\n+\t}\r\n \r\n \t/* Toggle 0x368.CAPS_LO_SMBUS_WRITE bit */\r\n \tmpi_opts = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_CONTROL_ADDR);\r\n@@ -627,6 +651,9 @@ static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int dev_addr,\r\n \tif (err < 0)\r\n \t\treturn err;\r\n \r\n+\tif (result)\r\n+\t\treturn -EIO;\r\n+\r\n \treturn 0;\r\n }\r\n \r\n",
    "prefixes": [
        "04/11"
    ]
}