get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 45670,
    "url": "http://patches.dpdk.org/api/patches/45670/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/82654080404ee4f32f0d0517495465e24d956b0f.1538215990.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": "<82654080404ee4f32f0d0517495465e24d956b0f.1538215990.git.igor.russkikh@aquantia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/82654080404ee4f32f0d0517495465e24d956b0f.1538215990.git.igor.russkikh@aquantia.com",
    "date": "2018-09-29T10:30:20",
    "name": "[v3,06/22] net/atlantic: b0 hardware layer main logic",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "12213fb655e366f6cb558a589d449b45e2d4eef3",
    "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/82654080404ee4f32f0d0517495465e24d956b0f.1538215990.git.igor.russkikh@aquantia.com/mbox/",
    "series": [
        {
            "id": 1598,
            "url": "http://patches.dpdk.org/api/series/1598/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1598",
            "date": "2018-09-29T10:30:14",
            "name": "net/atlantic: Aquantia aQtion 10G NIC Family DPDK PMD driver",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/1598/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/45670/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/45670/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 B83D41B19A;\n\tSat, 29 Sep 2018 12:31:39 +0200 (CEST)",
            "from NAM05-DM3-obe.outbound.protection.outlook.com\n\t(mail-eopbgr730056.outbound.protection.outlook.com [40.107.73.56])\n\tby dpdk.org (Postfix) with ESMTP id CA6381B184\n\tfor <dev@dpdk.org>; Sat, 29 Sep 2018 12:31:37 +0200 (CEST)",
            "from ubuntubox.rdc.aquantia.com (95.79.108.179) by\n\tBLUPR0701MB1650.namprd07.prod.outlook.com (2a01:111:e400:58c6::20)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1185.22;\n\tSat, 29 Sep 2018 10:31:30 +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=T3YOTB3FQDo/uhFN8DV8T56/x0YhCzyWuF/kCw2Jl10=;\n\tb=ZUzBJJrgithimEbHBINnuYgTGx/oaNMqCQisvD+EgontSFLnS96Rsu3euS1rNXIBV2YJBGurrUjUQAUWhVZ7SvaYoGEEr0WW7fnfpwsuLlrz8AzmjAfSLMPu0HoaytBYoJZUEzxclUGidmovXKR6rG78ceinXUgf9z1UOymvVAk=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Igor.Russkikh@aquantia.com; ",
        "From": "Igor Russkikh <igor.russkikh@aquantia.com>",
        "To": "dev@dpdk.org",
        "Cc": "pavel.belous@aquantia.com, igor.russkikh@aquantia.com,\n\tPavel Belous <Pavel.Belous@aquantia.com>",
        "Date": "Sat, 29 Sep 2018 13:30:20 +0300",
        "Message-Id": "<82654080404ee4f32f0d0517495465e24d956b0f.1538215990.git.igor.russkikh@aquantia.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<cover.1538215990.git.igor.russkikh@aquantia.com>",
        "References": "<cover.1538215990.git.igor.russkikh@aquantia.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[95.79.108.179]",
        "X-ClientProxiedBy": "VI1P193CA0009.EURP193.PROD.OUTLOOK.COM\n\t(2603:10a6:800:bd::19) To BLUPR0701MB1650.namprd07.prod.outlook.com\n\t(2a01:111:e400:58c6::20)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "0123c1ec-46fa-4645-bdd2-08d625f6bbc1",
        "X-Microsoft-Antispam": "BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);\n\tSRVR:BLUPR0701MB1650; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BLUPR0701MB1650;\n\t3:R07OxbT9ah9AtSERBLzyojNRXfiGnX7xh41GwJA+Rul+0HRr+XE6zCS1Mzhs1vgJDTJJHe1U47AW1yI2lLO21VBl++duqVfOtDymnl86nOMXJ4IawfoEgXEqrpkAeVgb8WAo5jS1Gonop1pTahjnUjxrxJF2ccrSUu3LP8ZdrlRGSiSo0enOkvM8+ArjqdlG4VSVBh5OOpSKCYV3S4/rXok+tHsRdkVX66Ys9lMq8kFJGanfPFj0MoOnhyPjneSm;\n\t25:xbTktwvt9dGu6KXYatWPqMzPiaSNWpLz6pxU8GLe4DIpN1iId8EEirUdmjKD+ePADplfUGvS234TH7ZcLNNWIiJ0GxNAy2jgfxdiNeW0L8jyhljra/0WK5py0vy92RAoZj0AP0VpG8uCF7mO0RExSSrrZMOLDZYFiILjw4vUcwI0DA0554GUUDvDmOEWnXPXqfV3bNElFzVP6nk/dVJ2rah0XdRiwXWlEMC7QxBn7lJNaY5KsNKmmeCobHe/+hOZT+VDUjnivjl808d7LTxVH/ncSKLb/iDbBmhT2hkrju5FqcpwzTi0MUOvX+FAFtv+aPFEbL74yrO0msQ/MkLT+eXv9jabSonPCfnc5+nNHQs=;\n\t31:ilikX6JYl4yOclyguyaqeUnij2B9uxgmw1sZjfDgm61PAzFVc5yofZfYr27hP39gd65p2lD8w0YWnDRbvonjtHPdLukf864Q1jZsYfhOS6dhh7Rrk4d7YkQV6RGzJHnuLKo67nlFRjNqLF40/dl7Y9/2t4m9Y7vaX4ild4iFPEwnZuQvWURUW0jWEK5+ayMQq97iabUP4w9v+NNOVss+OluOggO8/WBZiHW+Rnu8VMw=",
            "1; BLUPR0701MB1650;\n\t20:P8jBupx1ntQkdBR5E7dUa4EHliqyRC9HvfkuNDOvhAoVSVvklyQDI/WBluRANC5fZYAc+0axTgnrJNmJvA3J5c0+j5iD/CRHf0C//poHfrWYQMfywoKwvOENIMEgAwn+LQ2VjKXkDppZrKqk+0HB75OFFgrrhQ93zhq9DjYi8WLaAFVvXoEBPzwg0De8chTjmuV9AbRzNmh8x5y6Dhevs0iNkRcZowZGXbjM8mj05f3KvE8oXzOrwGYCWogTROlFu1vqdnDCuUDNO8+cfZcuzR16nlcrj7IEl4yxa+YDdJ60JAEUKFvA22O9Wc2Ae4hQbeF+44iWWdwZmO+bOfIJExkdtZXcxvuToJuoCzpiWbFxhGaIO4qzaGcjEf7zY3kbWyBbey9DAdlx7sbOAx/0y1Jg71qIzOkrUF0mth0BYD6szJAxdLNmgCgo287kVll0u/bFgRLpQNBXLhmXDlbyLlk5/4jpTi4sk6u9RVJSVUAqsne6gWQ6dvFIxE/daVCV;\n\t4:s7TJai+2ycr0zfLgs1BAv4JarNfIES+Ejh9VWRP1SCI5ZrzR2aL806xp1v6JD4ZLUHCsaWxw9wHhHFLR3rN1Llzt/pqKKKQBb0kbv6ZOAzJggkyXKNdO39gtEJfESg9IWsJ+UozJvxx6dYm2ccxSAcSm7fBCT53Gc6rD/BHVURkF8uBPvLQ1hYv84zAI4oekkpYP4MaOPrypgEhshE8Y78V6I2UJvVVtcXGvHLVGOGsCp7HQARDo3zHrxZmufWR6YR2GuWXeoLzZbVJlujnrFA==",
            "=?us-ascii?Q?1; BLUPR0701MB1650;\n\t23:qaAtOm8AbAfPw7wu+/BepDuqD+eNG9cDVySPQMI?=\n\tr542+RRYu/2wqIhSQuMgMU0SBzA01XxxiQ7CuQiGragqTA7DP/jk1jJbt7CIoZXb8OgJmCN/6QCQ8HEuqIi5dz4VDrZdpNjd9PLDoDU6RicandX/CsOZDc1i8sgvgC22afTHcstVPxD+cCwayFwT/GVMUlMliJ1PVm/akqVcrrgJIKQDq8xYc9TGm55V6tqqBzLKtbScLpaN/X29Zqi7maMPlb39ekRY7g/1dDEL50xU3bQR24qwIxn8urR4NIklkQTPtlybJrWQ+heiEVKnGMqAh9Lmj+eZBsXkQLceqYIMZSsLwXnqNAxtvDmRVmNjnOWcktAb/pYvbWfqj8p+gK2HUJi+sF2oPkRSV7+VoMw6EeXjJUXahonYZ/iQ5BIe92pmVDLdgwSDppYT7UdBSFrysQM5KDK3ahgQAN4Qd5ljSZ7nQrRjA092l48qLIDUUE7rU+Uh/8nbdGcG5N3L2WnXlsnCrbKk2PVJT3la7pxGzlnYGVDBhssUq7qqYxwCQ16N9XX3xA5OyYHUy45VO4YhsrxsFTjejDgsMO7ARxweUiBMjr2NfB3VAP2td0ItIEoERTTAoO76XIv/54hbpmga4Oj1N4XAFMtMLgAgnGKXHp/1yFM4oWs05QRvvRkJ8K8sFg7qxkkz31yAkYcu2dvIzf5krGb+58nMiHNaS8w6wuxdTFfQ9rjZjeWvtaASNKtng8GAB78PLGy6ORctRz2yTas3umsLoPChCad/h9EWNgJ8toSZU8/myQktgXt6vC4UF8s1sn7IdIDNgFtReh59IM/2TM+D4qC1YOpQNZZ73p78rPzbqOhlWaX31EZ7Mq3B9BcLmP+7L1nV+30DNOI1R/jhbJgKYlnZNQYeRyyIN1QIKDA7ZINae6vUlMQhOt4DnfHFu0FKDkWv2sYCtVr21ORDOwHD/nsiwGJAuYMdYZ79fogEx2eQStCag1yf5o7TIWEHfOxADbUWQ06CTCq5wd6kQaMlNpvg1f2gFmRnht0epECRggFavAtxFjIvOeXnYbIdSYMo0YEJrYPV0NsmX+jBPtau7CSXmWq0l0RIw8YoBgoIlggm4bzGKJ81MVynL0lQ6fDaDGnGZGVEWJMj1bAmj1VMHIC9U7i3akJn/0khn7HdZ1hekh+kE8DOXmb4elYHbsiQSf+M5MjzEtuZIY6yEAPpYuSQhprxPfNw5UDhzS9Iw26b7iqwCPVkPMC3GB8W4zzHw6HbhmAZKvWJ4DrW1fQr3X7UDcLDLo59ge4NLqRcLROOKThiUWsrYZofT7x3nQZGnagrEMVdH087x",
            "1; BLUPR0701MB1650;\n\t6:IAmDdIS8M5Aj5Y0AI7lc+00L8vPUIOZ/o5Esxqmhyy4gkr2VKlitfeYk7qGL0uwDKUOZEGc9fepn0iyPHrP/bEuAjVdlfu1ofmm2JVLaXId2OAbbLcFatV8V7w7nRMAKbvcFvMENhe6cl5a15DEsCZZmxZqRHTDIJ5VWpuUpcmnYg6jwlrcmSPxAYevSCYRehTAKlsfVYox+sT7FHwBPcMiV0Tsak9YNNxHhb49ukqGO6hPGeBZJV4qlNUBqNJlRs/IGz1BcoSDXVH51E68MqRfDdYQzT5kkCw0FKPPtM8SPV62ccyYtV+WTerGkjsPxK0R2ADFDbQQUqqRRqg5bodjzjvfOMmPY7dWLIA/gpjFc5Bow/QGWHEZBx4xNueh1wPzlA/SAnAcJz+c727ja9TCFeuZLUNRc1JxLqHGGGTs5nwx+IoQY4Efh0+tw/N6XfHp4YJow9oDYupUfEB9eXA==;\n\t5:TR/EwTbMMyLsNCGVWQ+KUOAvewg9Y9oDg0pMJAkbMYc8BZTJFjV74Pu61L7wuygNvvm73u/7gevqRR4GTH7iDDRDqWDDGolGAjkZTD05hCjL0ElkSnjYcwohBGg7MU+mLLz7FiLO65gHyS1lDiQ7ry8wYyCx8jEDY9tQXWAIGjs=;\n\t7:dysLOls7YS4jGonTSZ93+Divi/zFSwJT8UtJ7JBaRl6nmhsd0T74D8y85wrwshuQkLSzIQ+Ygz96tvGWGQCOp3eLgbrJufIsiC07or090x0tXtzG+Q8UfuHt0YF7Chsp7n0uz51u5SIqO0qfYh2vArXTsdumav4nVcW5ZaQk9SNuSIix8+VvHV6aY9riTNH37jnPlMccMc+ySEmHlAEJs9QauZoR2sa/SH02pr9gq0rgSrSen5viSKMF1d9q9oB0"
        ],
        "X-MS-TrafficTypeDiagnostic": "BLUPR0701MB1650:",
        "X-Microsoft-Antispam-PRVS": "<BLUPR0701MB1650ED3D0001C69F9E4E38AE98ED0@BLUPR0701MB1650.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(3231355)(944501410)(52105095)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123562045)(20161123560045)(201708071742011)(7699051);\n\tSRVR:BLUPR0701MB1650; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0701MB1650; ",
        "X-Forefront-PRVS": "0810818DA0",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(346002)(136003)(396003)(376002)(39850400004)(366004)(189003)(199004)(16526019)(14444005)(446003)(76176011)(2906002)(6916009)(6666003)(97736004)(8676002)(81166006)(81156014)(36756003)(4326008)(316002)(8936002)(50226002)(34290500001)(575784001)(86362001)(5660300001)(68736007)(16586007)(118296001)(72206003)(3846002)(6116002)(53936002)(386003)(105586002)(6486002)(47776003)(66066001)(486006)(25786009)(305945005)(50466002)(44832011)(956004)(2616005)(26005)(107886003)(52116002)(51416003)(7696005)(186003)(476003)(478600001)(2361001)(7736002)(2351001)(48376002)(106356001)(11346002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1650;\n\tH:ubuntubox.rdc.aquantia.com; \n\tFPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; ",
        "Received-SPF": "None (protection.outlook.com: aquantia.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "F3AFFpFgTpIyiJBLnFxQunr4sm9Pdx2fQeHVb29mYCzkU7EE7P1nCxWNK0yVPO/DIJxBJX0kYdM3bd891+4ykoEJq3wiIapTxOh+VmCCxAkQajWXlWsG7e/r1S8qcNuZwjB7HaT2wX8xnL/j/+nqPJ8s7IGShuPcpaAJhV7NsKGbEqWQiDLzaufK4uFWIVTvmYH+OU7hyBHBx4d+Orksh/tx+RwFKGKhl17AFJrrICzCYqhg0j+OJG41fy0ZW8sicJQBHow2BV2uvE8llbljOUbXwKG9Sq7miSq1MNcHH9gGpn98cDW3sEMLthwUDDUcnwzoSjappqysuu1HOnDenSCA8Bz3POJcV5pa40Swa28=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "aquantia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "29 Sep 2018 10:31:30.0938\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "0123c1ec-46fa-4645-bdd2-08d625f6bbc1",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "83e2e134-991c-4ede-8ced-34d47e38e6b1",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BLUPR0701MB1650",
        "Subject": "[dpdk-dev] [PATCH v3 06/22] net/atlantic: b0 hardware layer main\n\tlogic",
        "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": "This is hw_atl logic layer derived from linux atlantic\ndriver. It contains RX/TX hardware initialization\nsequences, various hw configuration.\n\nSigned-off-by: Igor Russkikh <igor.russkikh@aquantia.com>\nSigned-off-by: Pavel Belous <Pavel.Belous@aquantia.com>\n---\n drivers/net/atlantic/Makefile                    |   1 +\n drivers/net/atlantic/atl_types.h                 |  14 +\n drivers/net/atlantic/hw_atl/hw_atl_b0.c          | 510 +++++++++++++++++++++++\n drivers/net/atlantic/hw_atl/hw_atl_b0.h          |  40 ++\n drivers/net/atlantic/hw_atl/hw_atl_b0_internal.h | 145 +++++++\n drivers/net/atlantic/meson.build                 |   1 +\n 6 files changed, 711 insertions(+)\n create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_b0.c\n create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_b0.h\n create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_b0_internal.h",
    "diff": "diff --git a/drivers/net/atlantic/Makefile b/drivers/net/atlantic/Makefile\nindex a291053b5ab7..91306d71ba97 100644\n--- a/drivers/net/atlantic/Makefile\n+++ b/drivers/net/atlantic/Makefile\n@@ -29,5 +29,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += atl_hw_regs.c\n SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_utils.c\n SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_llh.c\n SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_utils_fw2x.c\n+SRCS-$(CONFIG_RTE_LIBRTE_ATLANTIC_PMD) += hw_atl_b0.c\n \n include $(RTE_SDK)/mk/rte.lib.mk\ndiff --git a/drivers/net/atlantic/atl_types.h b/drivers/net/atlantic/atl_types.h\nindex 589088a82227..8185a86e1733 100644\n--- a/drivers/net/atlantic/atl_types.h\n+++ b/drivers/net/atlantic/atl_types.h\n@@ -8,6 +8,7 @@\n #include <stddef.h>\n #include <inttypes.h>\n #include <string.h>\n+#include <netinet/in.h>\n \n typedef uint8_t\t\tu8;\n typedef int8_t\t\ts8;\n@@ -28,6 +29,7 @@ typedef int\t\tbool;\n #define min(a, b)\tRTE_MIN(a, b)\n #define max(a, b)\tRTE_MAX(a, b)\n \n+#include \"hw_atl/hw_atl_b0_internal.h\"\n #include \"hw_atl/hw_atl_utils.h\"\n \n struct aq_hw_link_status_s {\n@@ -56,8 +58,18 @@ struct aq_stats_s {\n \tu64 dma_oct_tc;\n };\n \n+struct aq_rss_parameters {\n+\tu16 base_cpu_number;\n+\tu16 indirection_table_size;\n+\tu16 hash_secret_key_size;\n+\tu32 hash_secret_key[HW_ATL_B0_RSS_HASHKEY_BITS / 8];\n+\tu8 indirection_table[HW_ATL_B0_RSS_REDIRECTION_MAX];\n+};\n+\n struct aq_hw_cfg_s {\n \tbool is_lro;\n+\tbool is_rss;\n+\tunsigned int num_rss_queues;\n \tint wol;\n \n \tint link_speed_msk;\n@@ -66,6 +78,8 @@ struct aq_hw_cfg_s {\n \tunsigned int vecs;\n \n \tuint32_t flow_control;\n+\n+\tstruct aq_rss_parameters aq_rss;\n };\n \n struct aq_hw_s {\ndiff --git a/drivers/net/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/atlantic/hw_atl/hw_atl_b0.c\nnew file mode 100644\nindex 000000000000..9400e0edb999\n--- /dev/null\n+++ b/drivers/net/atlantic/hw_atl/hw_atl_b0.c\n@@ -0,0 +1,510 @@\n+// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)\n+/* Copyright (C) 2014-2017 aQuantia Corporation. */\n+\n+/* File hw_atl_b0.c: Definition of Atlantic hardware specific functions. */\n+\n+#include \"../atl_types.h\"\n+#include \"hw_atl_b0.h\"\n+\n+#include \"../atl_hw_regs.h\"\n+#include \"hw_atl_utils.h\"\n+#include \"hw_atl_llh.h\"\n+#include \"hw_atl_b0_internal.h\"\n+#include \"hw_atl_llh_internal.h\"\n+#include \"../atl_logs.h\"\n+\n+int hw_atl_b0_hw_reset(struct aq_hw_s *self)\n+{\n+\tint err = 0;\n+\n+\terr = hw_atl_utils_soft_reset(self);\n+\tif (err)\n+\t\treturn err;\n+\n+\tself->aq_fw_ops->set_state(self, MPI_RESET);\n+\n+\treturn err;\n+}\n+\n+static int hw_atl_b0_hw_qos_set(struct aq_hw_s *self)\n+{\n+\tu32 tc = 0U;\n+\tu32 buff_size = 0U;\n+\tunsigned int i_priority = 0U;\n+\tbool is_rx_flow_control = false;\n+\n+\t/* TPS Descriptor rate init */\n+\thw_atl_tps_tx_pkt_shed_desc_rate_curr_time_res_set(self, 0x0U);\n+\thw_atl_tps_tx_pkt_shed_desc_rate_lim_set(self, 0xA);\n+\n+\t/* TPS VM init */\n+\thw_atl_tps_tx_pkt_shed_desc_vm_arb_mode_set(self, 0U);\n+\n+\t/* TPS TC credits init */\n+\thw_atl_tps_tx_pkt_shed_desc_tc_arb_mode_set(self, 0U);\n+\thw_atl_tps_tx_pkt_shed_data_arb_mode_set(self, 0U);\n+\n+\thw_atl_tps_tx_pkt_shed_tc_data_max_credit_set(self, 0xFFF, 0U);\n+\thw_atl_tps_tx_pkt_shed_tc_data_weight_set(self, 0x64, 0U);\n+\thw_atl_tps_tx_pkt_shed_desc_tc_max_credit_set(self, 0x50, 0U);\n+\thw_atl_tps_tx_pkt_shed_desc_tc_weight_set(self, 0x1E, 0U);\n+\n+\t/* Tx buf size */\n+\tbuff_size = HW_ATL_B0_TXBUF_MAX;\n+\n+\thw_atl_tpb_tx_pkt_buff_size_per_tc_set(self, buff_size, tc);\n+\thw_atl_tpb_tx_buff_hi_threshold_per_tc_set(self,\n+\t\t\t\t\t\t   (buff_size *\n+\t\t\t\t\t\t   (1024 / 32U) * 66U) /\n+\t\t\t\t\t\t   100U, tc);\n+\thw_atl_tpb_tx_buff_lo_threshold_per_tc_set(self,\n+\t\t\t\t\t\t   (buff_size *\n+\t\t\t\t\t\t   (1024 / 32U) * 50U) /\n+\t\t\t\t\t\t   100U, tc);\n+\n+\t/* QoS Rx buf size per TC */\n+\ttc = 0;\n+\tis_rx_flow_control = 0;\n+\tbuff_size = HW_ATL_B0_RXBUF_MAX;\n+\n+\thw_atl_rpb_rx_pkt_buff_size_per_tc_set(self, buff_size, tc);\n+\thw_atl_rpb_rx_buff_hi_threshold_per_tc_set(self,\n+\t\t\t\t\t\t   (buff_size *\n+\t\t\t\t\t\t   (1024U / 32U) * 66U) /\n+\t\t\t\t\t\t   100U, tc);\n+\thw_atl_rpb_rx_buff_lo_threshold_per_tc_set(self,\n+\t\t\t\t\t\t   (buff_size *\n+\t\t\t\t\t\t   (1024U / 32U) * 50U) /\n+\t\t\t\t\t\t   100U, tc);\n+\thw_atl_rpb_rx_xoff_en_per_tc_set(self,\n+\t\t\t\t\t is_rx_flow_control ? 1U : 0U,\n+\t\t\t\t\t tc);\n+\n+\t/* QoS 802.1p priority -> TC mapping */\n+\tfor (i_priority = 8U; i_priority--;)\n+\t\thw_atl_rpf_rpb_user_priority_tc_map_set(self, i_priority, 0U);\n+\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+/* calc hash only in IPv4 header, regardless of presence of TCP */\n+#define pif_rpf_rss_ipv4_hdr_only_i     (1 << 4)\n+/* calc hash only if TCP header and IPv4 */\n+#define pif_rpf_rss_ipv4_tcp_hdr_only_i (1 << 3)\n+/* calc hash only in IPv6 header, regardless of presence of TCP */\n+#define pif_rpf_rss_ipv6_hdr_only_i     (1 << 2)\n+/* calc hash only if TCP header and IPv4 */\n+#define pif_rpf_rss_ipv6_tcp_hdr_only_i (1 << 1)\n+/* bug 5124 - rss hashing types - FIXME */\n+#define pif_rpf_rss_dont_use_udp_i      (1 << 0)\n+\n+static int hw_atl_b0_hw_rss_hash_type_set(struct aq_hw_s *self)\n+{\n+\t/* misc */\n+\tunsigned int control_reg_val =\n+\t\tIS_CHIP_FEATURE(RPF2) ? 0x000F0000U : 0x00000000U;\n+\n+\t/* RSS hash type set for IP/TCP */\n+\tcontrol_reg_val |= pif_rpf_rss_ipv4_hdr_only_i;//0x1EU;\n+\n+\taq_hw_write_reg(self, 0x5040U, control_reg_val);\n+\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self,\n+\t\t\t\t     struct aq_rss_parameters *rss_params)\n+{\n+\tstruct aq_hw_cfg_s *cfg = self->aq_nic_cfg;\n+\tint err = 0;\n+\tunsigned int i = 0U;\n+\tunsigned int addr = 0U;\n+\n+\tfor (i = 10, addr = 0U; i--; ++addr) {\n+\t\tu32 key_data = cfg->is_rss ?\n+\t\t\thtonl(rss_params->hash_secret_key[i]) : 0U;\n+\t\thw_atl_rpf_rss_key_wr_data_set(self, key_data);\n+\t\thw_atl_rpf_rss_key_addr_set(self, addr);\n+\t\thw_atl_rpf_rss_key_wr_en_set(self, 1U);\n+\t\tAQ_HW_WAIT_FOR(hw_atl_rpf_rss_key_wr_en_get(self) == 0,\n+\t\t\t       1000U, 10U);\n+\t\tif (err < 0)\n+\t\t\tgoto err_exit;\n+\t}\n+\n+\t/* RSS Ring selection */\n+\thw_atl_reg_rx_flr_rss_control1set(self,\n+\t\t\t\tcfg->is_rss ? 0xB3333333U : 0x00000000U);\n+\thw_atl_b0_hw_rss_hash_type_set(self);\n+\n+\terr = aq_hw_err_from_flags(self);\n+\n+err_exit:\n+\treturn err;\n+}\n+\n+\n+int hw_atl_b0_hw_rss_set(struct aq_hw_s *self,\n+\t\t\tstruct aq_rss_parameters *rss_params)\n+{\n+\tu8 *indirection_table = rss_params->indirection_table;\n+\tu32 num_rss_queues = max(1U, self->aq_nic_cfg->num_rss_queues);\n+\tu32 i = 0;\n+\tu32 addr = 0;\n+\tu32 val = 0;\n+\tu32 shift = 0;\n+\tint err = 0;\n+\n+\tfor (i = 0; i < HW_ATL_B0_RSS_REDIRECTION_MAX; i++) {\n+\t\tval |= (u32)(indirection_table[i] % num_rss_queues) << shift;\n+\t\tshift += 3;\n+\n+\t\tif (shift < 16)\n+\t\t\tcontinue;\n+\n+\t\thw_atl_rpf_rss_redir_tbl_wr_data_set(self, val & 0xffff);\n+\t\thw_atl_rpf_rss_redir_tbl_addr_set(self, addr);\n+\n+\t\thw_atl_rpf_rss_redir_wr_en_set(self, 1U);\n+\t\tAQ_HW_WAIT_FOR(hw_atl_rpf_rss_redir_wr_en_get(self) == 0,\n+\t\t\t1000U, 10U);\n+\n+\t\tif (err < 0)\n+\t\t\tgoto err_exit;\n+\n+\t\tshift -= 16;\n+\t\tval >>= 16;\n+\t\taddr++;\n+\t}\n+\n+err_exit:\n+\treturn err;\n+}\n+\n+static int hw_atl_b0_hw_offload_set(struct aq_hw_s *self)\n+\t\t\t\t    /*struct aq_nic_cfg_s *aq_nic_cfg)*/\n+{\n+\tunsigned int i;\n+\n+\t/* TX checksums offloads*/\n+\thw_atl_tpo_ipv4header_crc_offload_en_set(self, 1);\n+\thw_atl_tpo_tcp_udp_crc_offload_en_set(self, 1);\n+\n+\t/* RX checksums offloads*/\n+\thw_atl_rpo_ipv4header_crc_offload_en_set(self, 1);\n+\thw_atl_rpo_tcp_udp_crc_offload_en_set(self, 1);\n+\n+\t/* LSO offloads*/\n+\thw_atl_tdm_large_send_offload_en_set(self, 0xFFFFFFFFU);\n+\n+/* LRO offloads */\n+\t{\n+\t\tunsigned int val = (8U < HW_ATL_B0_LRO_RXD_MAX) ? 0x3U :\n+\t\t\t((4U < HW_ATL_B0_LRO_RXD_MAX) ? 0x2U :\n+\t\t\t((2U < HW_ATL_B0_LRO_RXD_MAX) ? 0x1U : 0x0));\n+\n+\t\tfor (i = 0; i < HW_ATL_B0_RINGS_MAX; i++)\n+\t\t\thw_atl_rpo_lro_max_num_of_descriptors_set(self, val, i);\n+\n+\t\thw_atl_rpo_lro_time_base_divider_set(self, 0x61AU);\n+\t\thw_atl_rpo_lro_inactive_interval_set(self, 0);\n+\t\thw_atl_rpo_lro_max_coalescing_interval_set(self, 2);\n+\n+\t\thw_atl_rpo_lro_qsessions_lim_set(self, 1U);\n+\n+\t\thw_atl_rpo_lro_total_desc_lim_set(self, 2U);\n+\n+\t\thw_atl_rpo_lro_patch_optimization_en_set(self, 0U);\n+\n+\t\thw_atl_rpo_lro_min_pay_of_first_pkt_set(self, 10U);\n+\n+\t\thw_atl_rpo_lro_pkt_lim_set(self, 1U);\n+\n+\t\thw_atl_rpo_lro_en_set(self,\n+\t\t\t\tself->aq_nic_cfg->is_lro ? 0xFFFFFFFFU : 0U);\n+\t}\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+static\n+int hw_atl_b0_hw_init_tx_path(struct aq_hw_s *self)\n+{\n+\t/* Tx TC/RSS number config */\n+\thw_atl_rpb_tps_tx_tc_mode_set(self, 1U);\n+\n+\thw_atl_thm_lso_tcp_flag_of_first_pkt_set(self, 0x0FF6U);\n+\thw_atl_thm_lso_tcp_flag_of_middle_pkt_set(self, 0x0FF6U);\n+\thw_atl_thm_lso_tcp_flag_of_last_pkt_set(self, 0x0F7FU);\n+\n+\t/* Tx interrupts */\n+\thw_atl_tdm_tx_desc_wr_wb_irq_en_set(self, 0U);\n+\n+\t/* misc */\n+\taq_hw_write_reg(self, 0x00007040U, IS_CHIP_FEATURE(TPO2) ?\n+\t\t\t0x00010000U : 0x00000000U);\n+\thw_atl_tdm_tx_dca_en_set(self, 0U);\n+\thw_atl_tdm_tx_dca_mode_set(self, 0U);\n+\n+\thw_atl_tpb_tx_path_scp_ins_en_set(self, 1U);\n+\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+static\n+int hw_atl_b0_hw_init_rx_path(struct aq_hw_s *self)\n+{\n+\tstruct aq_hw_cfg_s *cfg = self->aq_nic_cfg;\n+\tint i;\n+\n+\t/* Rx TC/RSS number config */\n+\thw_atl_rpb_rpf_rx_traf_class_mode_set(self, 1U); /* 1: 4TC/8Queues */\n+\n+\t/* Rx flow control */\n+\thw_atl_rpb_rx_flow_ctl_mode_set(self, 1U);\n+\n+\t/* RSS Ring selection */\n+\thw_atl_reg_rx_flr_rss_control1set(self, cfg->is_rss ?\n+\t\t\t\t\t0xB3333333U : 0x00000000U);\n+\n+\t/* Multicast filters */\n+\tfor (i = HW_ATL_B0_MAC_MAX; i--;) {\n+\t\thw_atl_rpfl2_uc_flr_en_set(self, (i == 0U) ? 1U : 0U, i);\n+\t\thw_atl_rpfl2unicast_flr_act_set(self, 1U, i);\n+\t}\n+\n+\thw_atl_reg_rx_flr_mcst_flr_msk_set(self, 0x00000000U);\n+\thw_atl_reg_rx_flr_mcst_flr_set(self, 0x00010FFFU, 0U);\n+\n+\t/* Vlan filters */\n+\thw_atl_rpf_vlan_outer_etht_set(self, 0x88A8U);\n+\thw_atl_rpf_vlan_inner_etht_set(self, 0x8100U);\n+\n+\t/* VLAN proimisc bu defauld */\n+\thw_atl_rpf_vlan_prom_mode_en_set(self, 1);\n+\n+\t/* Rx Interrupts */\n+\thw_atl_rdm_rx_desc_wr_wb_irq_en_set(self, 0U);\n+\n+\thw_atl_b0_hw_rss_hash_type_set(self);\n+\n+\thw_atl_rpfl2broadcast_flr_act_set(self, 1U);\n+\thw_atl_rpfl2broadcast_count_threshold_set(self, 0xFFFFU & (~0U / 256U));\n+\n+\thw_atl_rdm_rx_dca_en_set(self, 0U);\n+\thw_atl_rdm_rx_dca_mode_set(self, 0U);\n+\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+static int hw_atl_b0_hw_mac_addr_set(struct aq_hw_s *self, u8 *mac_addr)\n+{\n+\tint err = 0;\n+\tunsigned int h = 0U;\n+\tunsigned int l = 0U;\n+\n+\tif (!mac_addr) {\n+\t\terr = -EINVAL;\n+\t\tgoto err_exit;\n+\t}\n+\th = (mac_addr[0] << 8) | (mac_addr[1]);\n+\tl = (mac_addr[2] << 24) | (mac_addr[3] << 16) |\n+\t\t(mac_addr[4] << 8) | mac_addr[5];\n+\n+\thw_atl_rpfl2_uc_flr_en_set(self, 0U, HW_ATL_B0_MAC);\n+\thw_atl_rpfl2unicast_dest_addresslsw_set(self, l, HW_ATL_B0_MAC);\n+\thw_atl_rpfl2unicast_dest_addressmsw_set(self, h, HW_ATL_B0_MAC);\n+\thw_atl_rpfl2_uc_flr_en_set(self, 1U, HW_ATL_B0_MAC);\n+\n+\terr = aq_hw_err_from_flags(self);\n+\n+err_exit:\n+\treturn err;\n+}\n+\n+int hw_atl_b0_hw_init(struct aq_hw_s *self, u8 *mac_addr)\n+{\n+\tstatic u32 aq_hw_atl_igcr_table_[4][2] = {\n+\t\t{ 0x20000080U, 0x20000080U }, /* AQ_IRQ_INVALID */\n+\t\t{ 0x20000080U, 0x20000080U }, /* AQ_IRQ_LEGACY */\n+\t\t{ 0x20000021U, 0x20000025U }, /* AQ_IRQ_MSI */\n+\t\t{ 0x200000A2U, 0x200000A6U }  /* AQ_IRQ_MSIX */\n+\t};\n+\n+\tint err = 0;\n+\tu32 val;\n+\n+\tstruct aq_hw_cfg_s *aq_nic_cfg = self->aq_nic_cfg;\n+\n+\thw_atl_b0_hw_init_tx_path(self);\n+\thw_atl_b0_hw_init_rx_path(self);\n+\n+\thw_atl_b0_hw_mac_addr_set(self, mac_addr);\n+\n+\tself->aq_fw_ops->set_link_speed(self, aq_nic_cfg->link_speed_msk);\n+\tself->aq_fw_ops->set_state(self, MPI_INIT);\n+\n+\thw_atl_b0_hw_qos_set(self);\n+\thw_atl_b0_hw_rss_set(self, &aq_nic_cfg->aq_rss);\n+\thw_atl_b0_hw_rss_hash_set(self, &aq_nic_cfg->aq_rss);\n+\n+\t/* Force limit MRRS on RDM/TDM to 2K */\n+\tval = aq_hw_read_reg(self, HW_ATL_PCI_REG_CONTROL6_ADR);\n+\taq_hw_write_reg(self, HW_ATL_PCI_REG_CONTROL6_ADR,\n+\t\t\t(val & ~0x707) | 0x404);\n+\n+\t/* TX DMA total request limit. B0 hardware is not capable to\n+\t * handle more than (8K-MRRS) incoming DMA data.\n+\t * Value 24 in 256byte units\n+\t */\n+\taq_hw_write_reg(self, HW_ATL_TX_DMA_TOTAL_REQ_LIMIT_ADR, 24);\n+\n+\t/* Reset link status and read out initial hardware counters */\n+\tself->aq_link_status.mbps = 0;\n+\tself->aq_fw_ops->update_stats(self);\n+\n+\terr = aq_hw_err_from_flags(self);\n+\tif (err < 0)\n+\t\tgoto err_exit;\n+\n+\t/* Interrupts */\n+\thw_atl_reg_irq_glb_ctl_set(self,\n+\t\t\t\t   aq_hw_atl_igcr_table_[aq_nic_cfg->irq_type]\n+\t\t\t\t\t [(aq_nic_cfg->vecs > 1U) ?\n+\t\t\t\t\t 1 : 0]);\n+\n+\thw_atl_itr_irq_auto_masklsw_set(self, 0xffffffff);\n+\n+\t/* Interrupts */\n+\thw_atl_reg_gen_irq_map_set(self, 0, 0);\n+\thw_atl_reg_gen_irq_map_set(self, 0x80 | ATL_IRQ_CAUSE_LINK, 3);\n+\n+\thw_atl_b0_hw_offload_set(self);\n+\n+err_exit:\n+\treturn err;\n+}\n+\n+int hw_atl_b0_hw_ring_tx_start(struct aq_hw_s *self, int index)\n+{\n+\thw_atl_tdm_tx_desc_en_set(self, 1, index);\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_ring_rx_start(struct aq_hw_s *self, int index)\n+{\n+\thw_atl_rdm_rx_desc_en_set(self, 1, index);\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_start(struct aq_hw_s *self)\n+{\n+\thw_atl_tpb_tx_buff_en_set(self, 1);\n+\thw_atl_rpb_rx_buff_en_set(self, 1);\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_tx_ring_tail_update(struct aq_hw_s *self, int tail, int index)\n+{\n+\thw_atl_reg_tx_dma_desc_tail_ptr_set(self, tail, index);\n+\treturn 0;\n+}\n+\n+int hw_atl_b0_hw_ring_rx_init(struct aq_hw_s *self, uint64_t base_addr,\n+\t\tint index, int size, int buff_size, int cpu, int vec)\n+{\n+\tu32 dma_desc_addr_lsw = (u32)base_addr;\n+\tu32 dma_desc_addr_msw = (u32)(base_addr >> 32);\n+\n+\thw_atl_rdm_rx_desc_en_set(self, false, index);\n+\n+\thw_atl_rdm_rx_desc_head_splitting_set(self, 0U, index);\n+\n+\thw_atl_reg_rx_dma_desc_base_addresslswset(self, dma_desc_addr_lsw,\n+\t\t\t\t\t\t  index);\n+\n+\thw_atl_reg_rx_dma_desc_base_addressmswset(self, dma_desc_addr_msw,\n+\t\t\t\t\t\t  index);\n+\n+\thw_atl_rdm_rx_desc_len_set(self, size / 8U, index);\n+\n+\thw_atl_rdm_rx_desc_data_buff_size_set(self, buff_size / 1024U, index);\n+\n+\thw_atl_rdm_rx_desc_head_buff_size_set(self, 0U, index);\n+\thw_atl_rdm_rx_desc_head_splitting_set(self, 0U, index);\n+\thw_atl_rpo_rx_desc_vlan_stripping_set(self, 0U, index);\n+\n+\t/* Rx ring set mode */\n+\n+\t/* Mapping interrupt vector */\n+\thw_atl_itr_irq_map_rx_set(self, vec, index);\n+\thw_atl_itr_irq_map_en_rx_set(self, true, index);\n+\n+\thw_atl_rdm_cpu_id_set(self, cpu, index);\n+\thw_atl_rdm_rx_desc_dca_en_set(self, 0U, index);\n+\thw_atl_rdm_rx_head_dca_en_set(self, 0U, index);\n+\thw_atl_rdm_rx_pld_dca_en_set(self, 0U, index);\n+\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_ring_tx_init(struct aq_hw_s *self, uint64_t base_addr,\n+\t\t\t      int index, int size, int cpu, int vec)\n+{\n+\tu32 dma_desc_lsw_addr = (u32)base_addr;\n+\tu32 dma_desc_msw_addr = (u32)(base_addr >> 32);\n+\n+\thw_atl_reg_tx_dma_desc_base_addresslswset(self, dma_desc_lsw_addr,\n+\t\t\t\t\t\t  index);\n+\n+\thw_atl_reg_tx_dma_desc_base_addressmswset(self, dma_desc_msw_addr,\n+\t\t\t\t\t\t  index);\n+\n+\thw_atl_tdm_tx_desc_len_set(self, size / 8U, index);\n+\n+\thw_atl_b0_hw_tx_ring_tail_update(self, 0, index);\n+\n+\t/* Set Tx threshold */\n+\thw_atl_tdm_tx_desc_wr_wb_threshold_set(self, 0U, index);\n+\n+\t/* Mapping interrupt vector */\n+\thw_atl_itr_irq_map_tx_set(self, vec, index);\n+\thw_atl_itr_irq_map_en_tx_set(self, true, index);\n+\n+\thw_atl_tdm_cpu_id_set(self, cpu, index);\n+\thw_atl_tdm_tx_desc_dca_en_set(self, 0U, index);\n+\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_irq_enable(struct aq_hw_s *self, u64 mask)\n+{\n+\thw_atl_itr_irq_msk_setlsw_set(self, LODWORD(mask));\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_irq_disable(struct aq_hw_s *self, u64 mask)\n+{\n+\thw_atl_itr_irq_msk_clearlsw_set(self, LODWORD(mask));\n+\thw_atl_itr_irq_status_clearlsw_set(self, LODWORD(mask));\n+\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_irq_read(struct aq_hw_s *self, u64 *mask)\n+{\n+\t*mask = hw_atl_itr_irq_statuslsw_get(self);\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_ring_tx_stop(struct aq_hw_s *self, int index)\n+{\n+\thw_atl_tdm_tx_desc_en_set(self, 0U, index);\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\n+int hw_atl_b0_hw_ring_rx_stop(struct aq_hw_s *self, int index)\n+{\n+\thw_atl_rdm_rx_desc_en_set(self, 0U, index);\n+\treturn aq_hw_err_from_flags(self);\n+}\n+\ndiff --git a/drivers/net/atlantic/hw_atl/hw_atl_b0.h b/drivers/net/atlantic/hw_atl/hw_atl_b0.h\nnew file mode 100644\nindex 000000000000..06feb56c1620\n--- /dev/null\n+++ b/drivers/net/atlantic/hw_atl/hw_atl_b0.h\n@@ -0,0 +1,40 @@\n+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) */\n+/* Copyright (C) 2014-2017 aQuantia Corporation. */\n+\n+/* File hw_atl_b0.h: Declaration of abstract interface for Atlantic hardware\n+ * specific functions.\n+ */\n+\n+#ifndef HW_ATL_B0_H\n+#define HW_ATL_B0_H\n+\n+int hw_atl_b0_hw_reset(struct aq_hw_s *self);\n+int hw_atl_b0_hw_init(struct aq_hw_s *self, u8 *mac_addr);\n+\n+int hw_atl_b0_hw_ring_tx_init(struct aq_hw_s *self, uint64_t base_addr,\n+\t\tint index, int size, int cpu, int vec);\n+int hw_atl_b0_hw_ring_rx_init(struct aq_hw_s *self, uint64_t base_addr,\n+\t\tint index, int size, int buff_size, int cpu, int vec);\n+\n+int hw_atl_b0_hw_start(struct aq_hw_s *self);\n+\n+int hw_atl_b0_hw_ring_rx_start(struct aq_hw_s *self, int index);\n+int hw_atl_b0_hw_ring_tx_start(struct aq_hw_s *self, int index);\n+\n+\n+int hw_atl_b0_hw_ring_tx_stop(struct aq_hw_s *self, int index);\n+int hw_atl_b0_hw_ring_rx_stop(struct aq_hw_s *self, int index);\n+\n+\n+int hw_atl_b0_hw_tx_ring_tail_update(struct aq_hw_s *self, int tail, int index);\n+\n+int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self,\n+\t\t\t\t     struct aq_rss_parameters *rss_params);\n+int hw_atl_b0_hw_rss_set(struct aq_hw_s *self,\n+\t\t\t\tstruct aq_rss_parameters *rss_params);\n+\n+int hw_atl_b0_hw_irq_enable(struct aq_hw_s *self, u64 mask);\n+int hw_atl_b0_hw_irq_disable(struct aq_hw_s *self, u64 mask);\n+int hw_atl_b0_hw_irq_read(struct aq_hw_s *self, u64 *mask);\n+\n+#endif /* HW_ATL_B0_H */\ndiff --git a/drivers/net/atlantic/hw_atl/hw_atl_b0_internal.h b/drivers/net/atlantic/hw_atl/hw_atl_b0_internal.h\nnew file mode 100644\nindex 000000000000..48152eada731\n--- /dev/null\n+++ b/drivers/net/atlantic/hw_atl/hw_atl_b0_internal.h\n@@ -0,0 +1,145 @@\n+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) */\n+/* Copyright (C) 2014-2017 aQuantia Corporation. */\n+\n+/* File hw_atl_b0_internal.h: Definition of Atlantic B0 chip specific\n+ * constants.\n+ */\n+\n+#ifndef HW_ATL_B0_INTERNAL_H\n+#define HW_ATL_B0_INTERNAL_H\n+\n+\n+#define HW_ATL_B0_MTU_JUMBO  16352U\n+#define HW_ATL_B0_MTU        1514U\n+\n+#define HW_ATL_B0_TX_RINGS 4U\n+#define HW_ATL_B0_RX_RINGS 4U\n+\n+#define HW_ATL_B0_RINGS_MAX 32U\n+#define HW_ATL_B0_TXD_SIZE       (16U)\n+#define HW_ATL_B0_RXD_SIZE       (16U)\n+\n+#define HW_ATL_B0_MAC      0U\n+#define HW_ATL_B0_MAC_MIN  1U\n+#define HW_ATL_B0_MAC_MAX  33U\n+\n+/* Maximum supported VLAN filters */\n+#define HW_ATL_B0_MAX_VLAN_IDS 16\n+\n+/* UCAST/MCAST filters */\n+#define HW_ATL_B0_UCAST_FILTERS_MAX 38\n+#define HW_ATL_B0_MCAST_FILTERS_MAX 8\n+\n+/* interrupts */\n+#define HW_ATL_B0_ERR_INT 8U\n+#define HW_ATL_B0_INT_MASK  (0xFFFFFFFFU)\n+\n+#define HW_ATL_B0_TXD_CTL2_LEN        (0xFFFFC000)\n+#define HW_ATL_B0_TXD_CTL2_CTX_EN     (0x00002000)\n+#define HW_ATL_B0_TXD_CTL2_CTX_IDX    (0x00001000)\n+\n+#define HW_ATL_B0_TXD_CTL_DESC_TYPE_TXD   (0x00000001)\n+#define HW_ATL_B0_TXD_CTL_DESC_TYPE_TXC   (0x00000002)\n+#define HW_ATL_B0_TXD_CTL_BLEN        (0x000FFFF0)\n+#define HW_ATL_B0_TXD_CTL_DD          (0x00100000)\n+#define HW_ATL_B0_TXD_CTL_EOP         (0x00200000)\n+\n+#define HW_ATL_B0_TXD_CTL_CMD_X       (0x3FC00000)\n+\n+#define HW_ATL_B0_TXD_CTL_CMD_VLAN    BIT(22)\n+#define HW_ATL_B0_TXD_CTL_CMD_FCS     BIT(23)\n+#define HW_ATL_B0_TXD_CTL_CMD_IPCSO   BIT(24)\n+#define HW_ATL_B0_TXD_CTL_CMD_TUCSO   BIT(25)\n+#define HW_ATL_B0_TXD_CTL_CMD_LSO     BIT(26)\n+#define HW_ATL_B0_TXD_CTL_CMD_WB      BIT(27)\n+#define HW_ATL_B0_TXD_CTL_CMD_VXLAN   BIT(28)\n+\n+#define HW_ATL_B0_TXD_CTL_CMD_IPV6    BIT(21)\n+#define HW_ATL_B0_TXD_CTL_CMD_TCP     BIT(22)\n+\n+#define HW_ATL_B0_MPI_CONTROL_ADR       0x0368U\n+#define HW_ATL_B0_MPI_STATE_ADR         0x036CU\n+\n+#define HW_ATL_B0_MPI_SPEED_MSK         0xFFFFU\n+#define HW_ATL_B0_MPI_SPEED_SHIFT       16U\n+\n+#define HW_ATL_B0_TXBUF_MAX  160U\n+#define HW_ATL_B0_RXBUF_MAX  320U\n+\n+#define HW_ATL_B0_RXD_BUF_SIZE_MAX  (16 * 1024)\n+\n+#define HW_ATL_B0_RSS_REDIRECTION_MAX 64U\n+#define HW_ATL_B0_RSS_REDIRECTION_BITS 3U\n+#define HW_ATL_B0_RSS_HASHKEY_BITS 320U\n+\n+#define HW_ATL_B0_TCRSS_4_8  1\n+#define HW_ATL_B0_TC_MAX 1U\n+#define HW_ATL_B0_RSS_MAX 8U\n+\n+#define HW_ATL_B0_LRO_RXD_MAX 2U\n+#define HW_ATL_B0_RS_SLIP_ENABLED  0U\n+\n+/* (256k -1(max pay_len) - 54(header)) */\n+#define HAL_ATL_B0_LSO_MAX_SEGMENT_SIZE 262089U\n+\n+/* (256k -1(max pay_len) - 74(header)) */\n+#define HAL_ATL_B0_LSO_IPV6_MAX_SEGMENT_SIZE 262069U\n+\n+#define HW_ATL_B0_CHIP_REVISION_B0      0xA0U\n+#define HW_ATL_B0_CHIP_REVISION_UNKNOWN 0xFFU\n+\n+#define HW_ATL_B0_FW_SEMA_RAM           0x2U\n+\n+#define HW_ATL_B0_TXC_LEN_TUNLEN    (0x0000FF00)\n+#define HW_ATL_B0_TXC_LEN_OUTLEN    (0xFFFF0000)\n+\n+#define HW_ATL_B0_TXC_CTL_DESC_TYPE (0x00000007)\n+#define HW_ATL_B0_TXC_CTL_CTX_ID    (0x00000008)\n+#define HW_ATL_B0_TXC_CTL_VLAN      (0x000FFFF0)\n+#define HW_ATL_B0_TXC_CTL_CMD       (0x00F00000)\n+#define HW_ATL_B0_TXC_CTL_L2LEN     (0x7F000000)\n+\n+#define HW_ATL_B0_TXC_CTL_L3LEN     (0x80000000)\t/* L3LEN lsb */\n+#define HW_ATL_B0_TXC_LEN2_L3LEN    (0x000000FF)\t/* L3LE upper bits */\n+#define HW_ATL_B0_TXC_LEN2_L4LEN    (0x0000FF00)\n+#define HW_ATL_B0_TXC_LEN2_MSSLEN   (0xFFFF0000)\n+\n+#define HW_ATL_B0_RXD_DD    (0x1)\n+#define HW_ATL_B0_RXD_NCEA0 (0x1)\n+\n+#define HW_ATL_B0_RXD_WB_STAT_RSSTYPE (0x0000000F)\n+#define HW_ATL_B0_RXD_WB_STAT_PKTTYPE (0x00000FF0)\n+#define HW_ATL_B0_RXD_WB_STAT_RXCTRL  (0x00180000)\n+#define HW_ATL_B0_RXD_WB_STAT_SPLHDR  (0x00200000)\n+#define HW_ATL_B0_RXD_WB_STAT_HDRLEN  (0xFFC00000)\n+\n+#define HW_ATL_B0_RXD_WB_STAT2_DD      (0x0001)\n+#define HW_ATL_B0_RXD_WB_STAT2_EOP     (0x0002)\n+#define HW_ATL_B0_RXD_WB_STAT2_RXSTAT  (0x003C)\n+#define HW_ATL_B0_RXD_WB_STAT2_MACERR  (0x0004)\n+#define HW_ATL_B0_RXD_WB_STAT2_IP4ERR  (0x0008)\n+#define HW_ATL_B0_RXD_WB_STAT2_TCPUPDERR  (0x0010)\n+#define HW_ATL_B0_RXD_WB_STAT2_RXESTAT (0x0FC0)\n+#define HW_ATL_B0_RXD_WB_STAT2_RSCCNT  (0xF000)\n+\n+#define L2_FILTER_ACTION_DISCARD (0x0)\n+#define L2_FILTER_ACTION_HOST    (0x1)\n+\n+#define HW_ATL_B0_UCP_0X370_REG  (0x370)\n+\n+#define HW_ATL_B0_FLUSH() AQ_HW_READ_REG(self, 0x10)\n+\n+#define HW_ATL_INTR_MODER_MAX  0x1FF\n+#define HW_ATL_INTR_MODER_MIN  0xFF\n+\n+#define HW_ATL_B0_MIN_RXD \\\n+\t(ALIGN(AQ_CFG_SKB_FRAGS_MAX + 1U, AQ_HW_RXD_MULTIPLE))\n+#define HW_ATL_B0_MIN_TXD \\\n+\t(ALIGN(AQ_CFG_SKB_FRAGS_MAX + 1U, AQ_HW_TXD_MULTIPLE))\n+\n+#define HW_ATL_B0_MAX_RXD 8184U\n+#define HW_ATL_B0_MAX_TXD 8184U\n+\n+/* HW layer capabilities */\n+\n+#endif /* HW_ATL_B0_INTERNAL_H */\ndiff --git a/drivers/net/atlantic/meson.build b/drivers/net/atlantic/meson.build\nindex 919cf6e4f20a..e7b4e0cba574 100644\n--- a/drivers/net/atlantic/meson.build\n+++ b/drivers/net/atlantic/meson.build\n@@ -6,6 +6,7 @@\n sources = files(\n \t'atl_ethdev.c',\n \t'atl_hw_regs.c',\n+\t'hw_atl/hw_atl_b0.c',\n \t'hw_atl/hw_atl_llh.c',\n \t'hw_atl/hw_atl_utils_fw2x.c',\n \t'hw_atl/hw_atl_utils.c',\n",
    "prefixes": [
        "v3",
        "06/22"
    ]
}