From patchwork Thu Apr 18 11:39:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 52920 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E41691B9BB; Thu, 18 Apr 2019 13:39:59 +0200 (CEST) Received: from NAM04-CO1-obe.outbound.protection.outlook.com (mail-eopbgr690049.outbound.protection.outlook.com [40.107.69.49]) by dpdk.org (Postfix) with ESMTP id C2CA41B9AE for ; Thu, 18 Apr 2019 13:39:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lYw3S5LZLGZXtSmBSnIuE+fgw76YLxEkEYe+YMVtQqQ=; b=t5GhslAeJ00TW6KiAqaLqguYuzdF8q2IpE+2dCYUnRGP37zm5E7/O2JoVOrSDob2NRFLZktW6C5uvTpwS5Hoaid0J7ITs6vTeR0QrVhoY/satnYjc1vJN7c5AMZY7ba7vTexnBNZXMDk8nTNdXKqTAXh8X1hRhC/FSz6EjZj52E= Received: from DM6PR11MB3625.namprd11.prod.outlook.com (20.178.230.149) by DM6PR11MB3866.namprd11.prod.outlook.com (10.255.61.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1792.14; Thu, 18 Apr 2019 11:39:55 +0000 Received: from DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::f035:2c20:5a61:7653]) by DM6PR11MB3625.namprd11.prod.outlook.com ([fe80::f035:2c20:5a61:7653%3]) with mapi id 15.20.1813.011; Thu, 18 Apr 2019 11:39:55 +0000 From: Igor Russkikh To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , "thomas@monjalon.net" , "arybchenko@solarflare.com" , "konstantin.ananyev@intel.com" , Pavel Belous , Igor Russkikh Thread-Topic: [PATCH v3 3/6] net/atlantic: macsec firmware interface Thread-Index: AQHU9dtxQ+PKJmogsE+Tz+4Y5Cb9HA== Date: Thu, 18 Apr 2019 11:39:55 +0000 Message-ID: <2328c24496c778f69ea7b32ee34076af484c8d37.1555587238.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BYAPR11CA0051.namprd11.prod.outlook.com (2603:10b6:a03:80::28) To DM6PR11MB3625.namprd11.prod.outlook.com (2603:10b6:5:13a::21) authentication-results: spf=none (sender IP is ) smtp.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: 8684f75d-9845-4ae4-e2fb-08d6c3f293a7 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020); SRVR:DM6PR11MB3866; x-ms-traffictypediagnostic: DM6PR11MB3866: x-microsoft-antispam-prvs: x-forefront-prvs: 0011612A55 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(39850400004)(136003)(366004)(376002)(346002)(199004)(189003)(76176011)(186003)(6486002)(26005)(97736004)(2501003)(102836004)(1730700003)(81156014)(6506007)(6116002)(8676002)(3846002)(386003)(81166006)(6916009)(5640700003)(446003)(2906002)(11346002)(52116002)(50226002)(118296001)(256004)(99286004)(14444005)(6436002)(86362001)(71200400001)(71190400001)(44832011)(4326008)(66066001)(14454004)(486006)(25786009)(36756003)(72206003)(478600001)(8936002)(476003)(2351001)(6512007)(53936002)(7736002)(5660300002)(54906003)(316002)(107886003)(2616005)(68736007)(305945005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR11MB3866; H:DM6PR11MB3625.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: AMRlOmwH+44bF272k0H0o0TCbHrXGuS1WtXbJzx2Hs1cjfH1caJ1e2maMjWuZ+BvpbL+N2JJ869+GoIDdShPO3CyObCkDQ0d8cg78kz3464k95wYGDywjm0Ru/BbfAx79OWY/rGKclobFtePSxvPFVAiD1crMdf68cimZjbleHhLdZUHgRy8qiJThRMpl7jhvc3crxNEczjrAa8xPkSKCmLeKsijdPGb74CKlKNogUszSmU/Yc3nwM2dXiTK7Atex8pjNFYpJHiYpNyV4GbBvyNLESXerAxU9NR8mxc7NTFfuQ/Anzuz+O9dW9MDYhcNSoTSTHxYtvuF9d4JRRjRqd6pcD7JGq9mUm1zd9PC7J5bJemNF1pNzYVhakApHrhZWqKqNTR1BQkjA+W+UzQ31NLO48rkBUYiSbf6Gxg1V9M= MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8684f75d-9845-4ae4-e2fb-08d6c3f293a7 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Apr 2019 11:39:55.0362 (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: DM6PR11MB3866 Subject: [dpdk-dev] [PATCH v3 3/6] net/atlantic: macsec firmware interface X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Pavel Belous Implementation of firmware interface for macsec configuration. Structure with config data is written into FW memory, then we trigger FW to execute the request and wait for result. Signed-off-by: Pavel Belous Signed-off-by: Igor Russkikh --- drivers/net/atlantic/atl_types.h | 2 + .../net/atlantic/hw_atl/hw_atl_utils_fw2x.c | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/drivers/net/atlantic/atl_types.h b/drivers/net/atlantic/atl_types.h index 3cc9e96089e8..dbaf2c635f50 100644 --- a/drivers/net/atlantic/atl_types.h +++ b/drivers/net/atlantic/atl_types.h @@ -128,6 +128,8 @@ struct aq_hw_s { struct hw_atl_stats_s last_stats; struct aq_stats_s curr_stats; + u32 caps_lo; + u64 speed; unsigned int chip_features; u32 fw_ver_actual; diff --git a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c index f215ceb70435..89a3759b89b4 100644 --- a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c +++ b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c @@ -62,6 +62,7 @@ static int aq_fw2x_set_state(struct aq_hw_s *self, static int aq_fw2x_init(struct aq_hw_s *self) { int err = 0; + struct hw_aq_atl_utils_mbox mbox; /* check 10 times by 1ms */ AQ_HW_WAIT_FOR(0U != (self->mbox_addr = @@ -70,6 +71,12 @@ static int aq_fw2x_init(struct aq_hw_s *self) AQ_HW_WAIT_FOR(0U != (self->rpc_addr = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_RPC_ADDR)), 1000U, 100U); + + /* Read caps */ + hw_atl_utils_mpi_read_stats(self, &mbox); + + self->caps_lo = mbox.info.caps_lo; + return err; } @@ -623,6 +630,49 @@ static int aq_fw2x_set_eeprom(struct aq_hw_s *self, int dev_addr, return 0; } +static int aq_fw2x_send_macsec_request(struct aq_hw_s *self, + struct macsec_msg_fw_request *req, + struct macsec_msg_fw_response *response) +{ + int err = 0; + u32 mpi_opts = 0; + + if (!response || !response) + return 0; + + if ((self->caps_lo & BIT(CAPS_LO_MACSEC)) == 0) + return -EOPNOTSUPP; + + /* Write macsec request to cfg memory */ + err = hw_atl_utils_fw_upload_dwords(self, self->rpc_addr, + (u32 *)(void *)req, + RTE_ALIGN(sizeof(*req) / sizeof(u32), sizeof(u32))); + + if (err < 0) + return err; + + /* Toggle 0x368.CAPS_LO_MACSEC bit */ + mpi_opts = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_CONTROL_ADDR); + mpi_opts ^= BIT(CAPS_LO_MACSEC); + + aq_hw_write_reg(self, HW_ATL_FW2X_MPI_CONTROL_ADDR, mpi_opts); + + /* Wait until REQUEST_BIT matched in 0x370 */ + AQ_HW_WAIT_FOR((aq_hw_read_reg(self, HW_ATL_FW2X_MPI_STATE_ADDR) & + BIT(CAPS_LO_MACSEC)) == (mpi_opts & BIT(CAPS_LO_MACSEC)), + 1000U, 10000U); + + if (err < 0) + return err; + + /* Read status of write operation */ + err = hw_atl_utils_fw_downld_dwords(self, self->rpc_addr + sizeof(u32), + (u32 *)(void *)response, + RTE_ALIGN(sizeof(*response) / sizeof(u32), sizeof(u32))); + + return err; +} + const struct aq_fw_ops aq_fw_2x_ops = { .init = aq_fw2x_init, .deinit = aq_fw2x_deinit, @@ -641,4 +691,5 @@ const struct aq_fw_ops aq_fw_2x_ops = { .led_control = aq_fw2x_led_control, .get_eeprom = aq_fw2x_get_eeprom, .set_eeprom = aq_fw2x_set_eeprom, + .send_macsec_req = aq_fw2x_send_macsec_request, };