From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3D43CA056A; Fri, 6 Mar 2020 10:56:09 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B48511BFE1; Fri, 6 Mar 2020 10:56:08 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2071.outbound.protection.outlook.com [40.107.93.71]) by dpdk.org (Postfix) with ESMTP id 3CD371BFD6 for ; Fri, 6 Mar 2020 10:56:07 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g6hdKF5xZ8bLGTnR2CbFD7bO7L7kvG0+SabqNAhe4xqdra2CozcgJMd8hqMHBCBGYHzQrdGzXzauTArmxSyaUGCLroYAVvaywsRlZYbDqc+a6hKIRtiCiKRG1Kkl4RBHoHbn9I174Zxwh+mcRo0Cpeu5usFPLWg+/X3Frs7ZTtUgbY+IHFCTq8CeZa2ByqvDm2LkVcd9FnmUZMxtvcMl9rNM+Cx3E/hC/+9NNIq1ikrwBKfJ2ew5XGdFp7bvsV9rQOkkAwKcWPyQQTqjJcrak7E7QpkIplSl9sberZE81gGvI8TvhojADfCCZn96eaGRErtVxmqSb0MLwqhqlxXV0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5y9JbXYdiWdLTwYv/yPWHmD+qWGhP1D3FqQn1jJZpZ0=; b=JZXmwt6QyHsneM9M8CLKnkNhB+7ltJ7ArGN4CLsrRDgOPxJg+OGnpvKuiw5vz9C6cGv/7IKzSbA7Ka3SY+vqdEGdOW00LeVVU4HNfqAajGZt0oqCwQmF508SdUccFb02NREOBjtSsUU5/lGQ9JlzfeKYD4v+Ilx1JysFOnTTOxu4Z2PNdwCwEl7TYgc04nBzJQpWK5r61MIDACAjWrRafhKr7RzoqIngaXm9PP9xrztYc7qx0xiPtaxdQW3dJHLNfOFtar4njWvogRGIUDkFNjkosUvgZWYFUFDilm6nQaZ+5kpG4D9wQq97u2Dzs8G5ta1vfpm9t3c6X2nBbBNOPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5y9JbXYdiWdLTwYv/yPWHmD+qWGhP1D3FqQn1jJZpZ0=; b=T8JWMHMxvzKDmTO41WQCGuZVJois4r79FsLUy8jjYC0Qe7UOnMDCmNFlL3e3byTABDmADPZBFiLqjxnkEkBzyXt1PYCTWHaoipw8YDlte0fhIXcBj8DdCCYXO53x73NKU6GaD4+l9R9cUf5om+0ijwHcdqpoWPlEIQSlfvxY96w= Received: from MW2PR12MB2570.namprd12.prod.outlook.com (2603:10b6:907:a::13) by MW2PR12MB2540.namprd12.prod.outlook.com (2603:10b6:907:7::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2772.15; Fri, 6 Mar 2020 09:56:05 +0000 Received: from MW2PR12MB2570.namprd12.prod.outlook.com ([fe80::218a:b130:80a9:9e3f]) by MW2PR12MB2570.namprd12.prod.outlook.com ([fe80::218a:b130:80a9:9e3f%7]) with mapi id 15.20.2793.013; Fri, 6 Mar 2020 09:56:05 +0000 From: "Kumar, Ravi1" To: "Namburu, Chandu-babu" , "dev@dpdk.org" CC: "Somalapuram, Amaranath" Thread-Topic: [dpdk-dev] [PATCH v1 1/2] net/axgbe: add additional MAC address support Thread-Index: AQHV851z9G+gcVP0skygdhOGRkK87Q== Date: Fri, 6 Mar 2020 09:56:04 +0000 Message-ID: References: <20200228142053.722-1-chandu@amd.com> In-Reply-To: <20200228142053.722-1-chandu@amd.com> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_76546daa-41b6-470c-bb85-f6f40f044d7f_Enabled=true; MSIP_Label_76546daa-41b6-470c-bb85-f6f40f044d7f_SetDate=2020-03-06T09:58:01Z; MSIP_Label_76546daa-41b6-470c-bb85-f6f40f044d7f_Method=Standard; MSIP_Label_76546daa-41b6-470c-bb85-f6f40f044d7f_Name=Internal Use Only - Unrestricted; MSIP_Label_76546daa-41b6-470c-bb85-f6f40f044d7f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_76546daa-41b6-470c-bb85-f6f40f044d7f_ActionId=bc9cbe50-aa98-4d4d-a39a-00003459ad4c; MSIP_Label_76546daa-41b6-470c-bb85-f6f40f044d7f_ContentBits=1 msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_enabled: true msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_setdate: 2020-03-06T09:58:01Z msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_method: Standard msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_name: Internal Use Only - Unrestricted msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_siteid: 3dd8961f-e488-4e60-8e11-a82d994e183d msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_actionid: d547deeb-6de6-49df-ba4b-00001adf3338 msip_label_76546daa-41b6-470c-bb85-f6f40f044d7f_contentbits: 0 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Ravi1.Kumar@amd.com; x-originating-ip: [165.204.157.251] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 80224860-ab09-4785-0fab-08d7c1b4960b x-ms-traffictypediagnostic: MW2PR12MB2540:|MW2PR12MB2540: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:800; x-forefront-prvs: 0334223192 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(136003)(376002)(366004)(346002)(396003)(199004)(189003)(4326008)(5660300002)(81166006)(81156014)(186003)(76116006)(478600001)(66946007)(64756008)(66446008)(52536014)(26005)(66556008)(2906002)(66476007)(71200400001)(33656002)(316002)(7696005)(8936002)(9686003)(110136005)(55016002)(6506007)(86362001); DIR:OUT; SFP:1101; SCL:1; SRVR:MW2PR12MB2540; H:MW2PR12MB2570.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ZTInye3tY011Rx3/8jEtZUWDSQfd2q3s8UPGY33QjeSyOEnZNs5q6wdN/9esrIHToajE431neRF21E3+kPB5Co4H3cA9KN3ewpCT9Z6K0wUCdOZEm9GBcvoaHT2itveuo5HE9KScu8mqR0fW6vtXQ3mK4n9sbpTOlirZVaJNkEk40wuhz+uMGG7ternPcwgnn9q9qRtUniiJVJZP7+3LrCCOmZIaRB6xOMZYshqesmNKbFDr+QU8FZkuC4k4wHsXn/iksGTUXmwiKCWuAtnS0uj5WEilC36KUcNGLmmL52LDL6Ei1LmHpO/xwglJnGJunN8Vdk/kNmW7dlN3SMQtHOp/KYFnUlcQ3iqXrRU9hPIBgIxJ6u8M+I01n2wRB1GS6kdC3dA8S3iefaUmbqUa1lsajtk+lstn/FG8LPo/FNTx01Zo1g5LYu8YyeOgYTYM x-ms-exchange-antispam-messagedata: bDQNsil1W+L57JyjdCPYNtTf00OK/givfyHJO+tvcF+2eVixjJ6P/uTD3u02TiiyL+9/IpYzOTwC4aiBcYLVD2e8CV6wQooaPDn3e4r1Eps/Upn054pJpeeqqTI37hYK1Lif1gkoZdj1nlEcWZUl9A== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80224860-ab09-4785-0fab-08d7c1b4960b X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2020 09:56:04.9197 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Hn6cuq+QI5pHvPk3SIa4OHZ+yFCXV58TF8izsmr2ixDXQMlNrx3cgQdINVcttmrdxDCIL3DTWOH/o+11ZXJxng== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2PR12MB2540 Subject: Re: [dpdk-dev] [PATCH v1 1/2] net/axgbe: add additional MAC address support 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" [AMD Official Use Only - Internal Distribution Only] For series,=20 Acked-by: Ravi Kumar =20 >From: Chandu Babu N > >Supports adding MAC addresses to enable whitelist filtering to accept pack= ets implement eth_dev_ops mac_addr_set, mac_addr_add, mac_addr_remove and s= et_mc_addr_list > >Signed-off-by: Chandu Babu N >--- > drivers/net/axgbe/axgbe_dev.c | 29 ++++++++++ > drivers/net/axgbe/axgbe_ethdev.c | 94 ++++++++++++++++++++++++++++++-- d= rivers/net/axgbe/axgbe_ethdev.h | 4 +- > 3 files changed, 121 insertions(+), 6 deletions(-) > >diff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c= index 2e796c0b3..f830b7230 100644 >--- a/drivers/net/axgbe/axgbe_dev.c >+++ b/drivers/net/axgbe/axgbe_dev.c >@@ -1008,6 +1008,35 @@ static void axgbe_enable_mtl_interrupts(struct axgb= e_port *pdata) > } > } >=20 >+void axgbe_set_mac_addn_addr(struct axgbe_port *pdata, u8 *addr,=20 >+uint32_t index) { >+ unsigned int mac_addr_hi, mac_addr_lo; >+ u8 *mac_addr; >+ >+ mac_addr_lo =3D 0; >+ mac_addr_hi =3D 0; >+ >+ if (addr) { >+ mac_addr =3D (u8 *)&mac_addr_lo; >+ mac_addr[0] =3D addr[0]; >+ mac_addr[1] =3D addr[1]; >+ mac_addr[2] =3D addr[2]; >+ mac_addr[3] =3D addr[3]; >+ mac_addr =3D (u8 *)&mac_addr_hi; >+ mac_addr[0] =3D addr[4]; >+ mac_addr[1] =3D addr[5]; >+ >+ /*Address Enable: Use this Addr for Perfect Filtering */ >+ AXGMAC_SET_BITS(mac_addr_hi, MAC_MACA1HR, AE, 1); >+ } >+ >+ PMD_DRV_LOG(DEBUG, "%s mac address at %#x\n", >+ addr ? "set" : "clear", index); >+ >+ AXGMAC_IOWRITE(pdata, MAC_MACAHR(index), mac_addr_hi); >+ AXGMAC_IOWRITE(pdata, MAC_MACALR(index), mac_addr_lo); } >+ > static int axgbe_set_mac_address(struct axgbe_port *pdata, u8 *addr) { > unsigned int mac_addr_hi, mac_addr_lo; diff --git a/drivers/net/axgbe/ax= gbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c >index 00974e737..34cc0fbb8 100644 >--- a/drivers/net/axgbe/axgbe_ethdev.c >+++ b/drivers/net/axgbe/axgbe_ethdev.c >@@ -20,6 +20,16 @@ static int axgbe_dev_promiscuous_enable(struct rte_eth_= dev *dev); static int axgbe_dev_promiscuous_disable(struct rte_eth_dev *de= v); static int axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev); st= atic int axgbe_dev_allmulticast_disable(struct rte_eth_dev *dev); >+static int axgbe_dev_mac_addr_set(struct rte_eth_dev *dev, >+ struct rte_ether_addr *mac_addr); static int=20 >+axgbe_dev_mac_addr_add(struct rte_eth_dev *dev, >+ struct rte_ether_addr *mac_addr, >+ uint32_t index, >+ uint32_t vmdq); >+static void axgbe_dev_mac_addr_remove(struct rte_eth_dev *dev, uint32_t=20 >+index); static int axgbe_dev_set_mc_addr_list(struct rte_eth_dev *dev, >+ struct rte_ether_addr *mc_addr_set, >+ uint32_t nb_mc_addr); > static int axgbe_dev_link_update(struct rte_eth_dev *dev, > int wait_to_complete); > static int axgbe_dev_get_regs(struct rte_eth_dev *dev, @@ -160,6 +170,10 = @@ static const struct eth_dev_ops axgbe_eth_dev_ops =3D { > .promiscuous_disable =3D axgbe_dev_promiscuous_disable, > .allmulticast_enable =3D axgbe_dev_allmulticast_enable, > .allmulticast_disable =3D axgbe_dev_allmulticast_disable, >+ .mac_addr_set =3D axgbe_dev_mac_addr_set, >+ .mac_addr_add =3D axgbe_dev_mac_addr_add, >+ .mac_addr_remove =3D axgbe_dev_mac_addr_remove, >+ .set_mc_addr_list =3D axgbe_dev_set_mc_addr_list, > .link_update =3D axgbe_dev_link_update, > .get_reg =3D axgbe_dev_get_regs, > .stats_get =3D axgbe_dev_stats_get, >@@ -370,6 +384,74 @@ axgbe_dev_allmulticast_disable(struct rte_eth_dev *de= v) > return 0; > } >=20 >+static int >+axgbe_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr=20 >+*mac_addr) { >+ struct axgbe_port *pdata =3D dev->data->dev_private; >+ >+ /* Set Default MAC Addr */ >+ axgbe_set_mac_addn_addr(pdata, (u8 *)mac_addr, 0); >+ >+ return 0; >+} >+ >+static int >+axgbe_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *ma= c_addr, >+ uint32_t index, uint32_t pool __rte_unused) { >+ struct axgbe_port *pdata =3D dev->data->dev_private; >+ struct axgbe_hw_features *hw_feat =3D &pdata->hw_feat; >+ >+ if (index > hw_feat->addn_mac) { >+ PMD_DRV_LOG(ERR, "Invalid Index %d\n", index); >+ return -EINVAL; >+ } >+ axgbe_set_mac_addn_addr(pdata, (u8 *)mac_addr, index); >+ return 0; >+} >+ >+static void >+axgbe_dev_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) { >+ struct axgbe_port *pdata =3D dev->data->dev_private; >+ struct axgbe_hw_features *hw_feat =3D &pdata->hw_feat; >+ >+ if (index > hw_feat->addn_mac) { >+ PMD_DRV_LOG(ERR, "Invalid Index %d\n", index); >+ return; >+ } >+ axgbe_set_mac_addn_addr(pdata, NULL, index); } >+ >+static int >+axgbe_dev_set_mc_addr_list(struct rte_eth_dev *dev, >+ struct rte_ether_addr *mc_addr_set, >+ uint32_t nb_mc_addr) >+{ >+ struct axgbe_port *pdata =3D dev->data->dev_private; >+ struct axgbe_hw_features *hw_feat =3D &pdata->hw_feat; >+ uint32_t index =3D 1; /* 0 is always default mac */ >+ uint32_t i; >+ >+ if (nb_mc_addr > hw_feat->addn_mac) { >+ PMD_DRV_LOG(ERR, "Invalid Index %d\n", nb_mc_addr); >+ return -EINVAL; >+ } >+ >+ /* clear unicast addresses */ >+ for (i =3D 1; i < hw_feat->addn_mac; i++) { >+ if (rte_is_zero_ether_addr(&dev->data->mac_addrs[i])) >+ continue; >+ memset(&dev->data->mac_addrs[i], 0, >+ sizeof(struct rte_ether_addr)); >+ } >+ >+ while (nb_mc_addr--) >+ axgbe_set_mac_addn_addr(pdata, (u8 *)mc_addr_set++, index++); >+ >+ return 0; >+} >+ > /* return 0 means link status changed, -1 means not changed */ static in= t axgbe_dev_link_update(struct rte_eth_dev *dev, @@ -809,7 +891,7 @@ axgbe= _dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) > dev_info->max_tx_queues =3D pdata->tx_ring_count; > dev_info->min_rx_bufsize =3D AXGBE_RX_MIN_BUF_SIZE; > dev_info->max_rx_pktlen =3D AXGBE_RX_MAX_BUF_SIZE; >- dev_info->max_mac_addrs =3D AXGBE_MAX_MAC_ADDRS; >+ dev_info->max_mac_addrs =3D pdata->hw_feat.addn_mac + 1; > dev_info->speed_capa =3D ETH_LINK_SPEED_10G; >=20 > dev_info->rx_offload_capa =3D >@@ -1044,6 +1126,7 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) > struct axgbe_port *pdata; > struct rte_pci_device *pci_dev; > uint32_t reg, mac_lo, mac_hi; >+ uint32_t len; > int ret; >=20 > eth_dev->dev_ops =3D &axgbe_eth_dev_ops; @@ -1113,12 +1196,13 @@ eth_axg= be_dev_init(struct rte_eth_dev *eth_dev) > pdata->mac_addr.addr_bytes[4] =3D mac_hi & 0xff; > pdata->mac_addr.addr_bytes[5] =3D (mac_hi >> 8) & 0xff; >=20 >- eth_dev->data->mac_addrs =3D rte_zmalloc("axgbe_mac_addr", >- RTE_ETHER_ADDR_LEN, 0); >+ len =3D RTE_ETHER_ADDR_LEN * AXGBE_MAX_MAC_ADDRS; >+ eth_dev->data->mac_addrs =3D rte_zmalloc("axgbe_mac_addr", len, 0); >+ > if (!eth_dev->data->mac_addrs) { > PMD_INIT_LOG(ERR, >- "Failed to alloc %u bytes needed to store MAC addr tbl", >- RTE_ETHER_ADDR_LEN); >+ "Failed to alloc %u bytes needed to " >+ "store MAC addresses", len); > return -ENOMEM; > } >=20 >diff --git a/drivers/net/axgbe/axgbe_ethdev.h b/drivers/net/axgbe/axgbe_et= hdev.h >index a1083b17b..781d170e5 100644 >--- a/drivers/net/axgbe/axgbe_ethdev.h >+++ b/drivers/net/axgbe/axgbe_ethdev.h >@@ -16,7 +16,7 @@ > #define AXGBE_TX_MAX_BUF_SIZE (0x3fff & ~(64 - 1)) > #define AXGBE_RX_MAX_BUF_SIZE (0x3fff & ~(64 - 1)) > #define AXGBE_RX_MIN_BUF_SIZE (RTE_ETHER_MAX_LEN + VLAN_HLEN) >-#define AXGBE_MAX_MAC_ADDRS 1 >+#define AXGBE_MAX_MAC_ADDRS 32 >=20 > #define AXGBE_RX_BUF_ALIGN 64 >=20 >@@ -631,5 +631,7 @@ void axgbe_init_function_ptrs_dev(struct axgbe_hw_if *= hw_if); void axgbe_init_function_ptrs_phy(struct axgbe_phy_if *phy_if); v= oid axgbe_init_function_ptrs_phy_v2(struct axgbe_phy_if *phy_if); void axg= be_init_function_ptrs_i2c(struct axgbe_i2c_if *i2c_if); >+void axgbe_set_mac_addn_addr(struct axgbe_port *pdata, u8 *addr, >+ uint32_t index); >=20 > #endif /* RTE_ETH_AXGBE_H_ */ >-- >2.17.1 >