From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8AB06C282C0 for ; Wed, 23 Jan 2019 14:33:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 52A45217D4 for ; Wed, 23 Jan 2019 14:33:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="rYzdKbg3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727182AbfAWOdF (ORCPT ); Wed, 23 Jan 2019 09:33:05 -0500 Received: from mail-eopbgr00083.outbound.protection.outlook.com ([40.107.0.83]:49032 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726127AbfAWOdB (ORCPT ); Wed, 23 Jan 2019 09:33:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=N+cF+is1IkqZVyfTAs5oVfRpokc2qbv8XGZiC4eh6/A=; b=rYzdKbg3xf5wVH+hxHaXbnKKIQatMs51hg4Dv5CVUbDrG/bVSv1wd4IQ8/iap2As6QiwsxG8WrTN8PXnChN3VBReODCMUSw1fNf+zn2+YpOJUSvOAqA8YHmNhPDkE121cDSub2eRRgxRsO/hoeegxBfoagS1jKJN57xXuIaP56o= Received: from DB7PR05MB4940.eurprd05.prod.outlook.com (20.176.235.152) by DB7PR05MB5721.eurprd05.prod.outlook.com (20.178.105.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Wed, 23 Jan 2019 14:32:57 +0000 Received: from DB7PR05MB4940.eurprd05.prod.outlook.com ([fe80::6161:97fd:d315:7b07]) by DB7PR05MB4940.eurprd05.prod.outlook.com ([fe80::6161:97fd:d315:7b07%5]) with mapi id 15.20.1537.031; Wed, 23 Jan 2019 14:32:57 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , Petr Machata , mlxsw , Ido Schimmel Subject: [PATCH net-next 3/4] mlxsw: spectrum_nve: Add support for VXLAN on Spectrum-2 Thread-Topic: [PATCH net-next 3/4] mlxsw: spectrum_nve: Add support for VXLAN on Spectrum-2 Thread-Index: AQHUsyiIX9te5n0Po0KeHy3Zwtg+Kg== Date: Wed, 23 Jan 2019 14:32:57 +0000 Message-ID: <20190123143217.17735-4-idosch@mellanox.com> References: <20190123143217.17735-1-idosch@mellanox.com> In-Reply-To: <20190123143217.17735-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P193CA0009.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:3e::22) To DB7PR05MB4940.eurprd05.prod.outlook.com (2603:10a6:10:1e::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.20.1 x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DB7PR05MB5721;6:dByLHmrtQMfDRwOqPgelWTmpEiiRlvkWZwTR6ii0S4RHbMBTzUkpKPcaFuAiJh7LcRSvqRWhBEJS6nKgKk9nvE/BCLuobDY84h+dvtAypFPdCSgekOq3Q7KDOAKccF2RpQiPJQTpmCNgkFcOHiEe2ofNDfoPEA35Qszkav2/ya4gTH9L1Cmkmea5Eb/nZCTw0ni2g7mNOK3K0kVAG0UXLt9v3nA4xFyMLC1psxmhv+iB20qAwRktmuzFaG79YNmaLZ8RIa8geFILcbXrj+O0lw5FXWLbR+vZsvnonKpKdjZ+ThPkyEUc9AbR3ojAuBInleXdKkeoXV3HMlKXiOUdBlrvmm5g2pg3vvYHU1+/ehpvDsqCoBNLtOUCUFor+k/50xtUGSqlWvfakwybs5N7Tm+9asMcIU8B0t/AG9efp+nWCRoreTH7eZZ9eC7SUIHltFjEXjJHU4LMq2G2l1EXVQ==;5:Jc0wJMA+dG1MliyNs7l2vZIDy1umcCW167EijvIYGgeRWHKpT5HwzCDpsn+aOMYdj6d9NVf3BQ9LDUwEUCMYxJ7HrzQ1rO6egFW/XUaQ/vO+whgcIuLZcnQiNw07XzhR/aKCdPaO/ZWoYsdYnSrX74GZdxmD2CYlahPajl1WCN1AwBRpG7QNSjVMKk0z2X7GZHgFM51QFpXK5pkHcBDAww==;7:LPxWsjV3NlOToERei4jvFQoiN9PoEg//I6ee1BwomhiKjkDcuPtdykM8IZtccMHzoAjVJG82GQhQP7MfUZV2mGUXK0izdJIothNmIWjSqSM58DmWPnS38v1d7NanceZAXJOhwcybXA/0So58vz5aPQ== x-ms-office365-filtering-correlation-id: 16615f9e-b500-44e5-5422-08d6813fab04 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605077)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:DB7PR05MB5721; x-ms-traffictypediagnostic: DB7PR05MB5721: x-microsoft-antispam-prvs: x-forefront-prvs: 0926B0E013 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(346002)(396003)(376002)(39860400002)(136003)(189003)(199004)(53936002)(6512007)(1076003)(8936002)(66574012)(50226002)(6486002)(8676002)(1730700003)(68736007)(81156014)(97736004)(6506007)(5640700003)(14454004)(386003)(305945005)(7736002)(2906002)(54906003)(81166006)(25786009)(14444005)(256004)(76176011)(6436002)(186003)(86362001)(102836004)(66066001)(11346002)(6916009)(446003)(2351001)(4326008)(99286004)(316002)(71200400001)(71190400001)(486006)(106356001)(105586002)(2616005)(476003)(26005)(52116002)(36756003)(2501003)(478600001)(6116002)(3846002)(107886003);DIR:OUT;SFP:1101;SCL:1;SRVR:DB7PR05MB5721;H:DB7PR05MB4940.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: IbC8CFSS3jMxRoaJZMJgtGr6U9qcYijLKSmSd9nK8K74FQlOx4yjXDbLvy0q+6y/DoqIbCVRb5yF9Tg5B1ALrzxlbbHVNjI2h2QPRVx9uTuNwYLQn0LEqPZBR7hNGWuainM8XHmRWkjuAly4Wm8mkPqfzsMRulAy75CyE58+gcBtCQsn1INgCM3yCpgFRBUOgbSKLZRgkwAfVfdiYKPJjKZt4QHV1G58mMvPRGB3+pNrVDFYG5DlIjyHB4uY3ZE/C/yS2EEhLmQOS0cSXukXDWIc2Nnl3i6JsoRGS/KLnd7DxMRea014T8iWE5HAaCYfsNWdrt1E0UOnZeiI1LhBZI9FfOi7vZBl4rhQwVw2NhKDQrXJShdkN4VNM7bja/yrvYX5FPf6UiNlhrrcuNei+sYc5EBwxsKiXBilCCuYyf4= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16615f9e-b500-44e5-5422-08d6813fab04 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jan 2019 14:32:56.5051 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR05MB5721 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Spectrum-1 and Spectrum-2 are largely backward compatible with regards to VXLAN. One difference - as explained in previous patch - is that an underlay RIF needs to be specified instead of an underlay VR during NVE initialization. This is accomplished by calling the relevant function that returns the index of such a RIF based on the table ID (RT_TABLE_MAIN) where underlay look up occurs. The second difference is that VXLAN learning (snooping) is controlled via a different register (TNPC). Signed-off-by: Ido Schimmel Reviewed-by: Petr Machata --- .../ethernet/mellanox/mlxsw/spectrum_nve.h | 1 + .../mellanox/mlxsw/spectrum_nve_vxlan.c | 110 +++++++++++++++++- 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h b/drivers/n= et/ethernet/mellanox/mlxsw/spectrum_nve.h index 20d99b41611d..0035640156a1 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.h @@ -28,6 +28,7 @@ struct mlxsw_sp_nve { unsigned int num_nve_tunnels; /* Protected by RTNL */ unsigned int num_max_mc_entries[MLXSW_SP_L3_PROTO_MAX]; u32 tunnel_index; + u16 ul_rif_index; /* Reserved for Spectrum */ }; =20 struct mlxsw_sp_nve_ops { diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c b/dri= vers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c index 60f88e5642e1..91b3c71bf031 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve_vxlan.c @@ -7,6 +7,7 @@ #include =20 #include "reg.h" +#include "spectrum.h" #include "spectrum_nve.h" =20 /* Eth (18B) | IPv6 (40B) | UDP (8B) | VxLAN (8B) | Eth (14B) | IPv6 (40B) @@ -254,14 +255,121 @@ static bool mlxsw_sp2_nve_vxlan_can_offload(const st= ruct mlxsw_sp_nve *nve, return false; } =20 +static bool mlxsw_sp2_nve_vxlan_learning_set(struct mlxsw_sp *mlxsw_sp, + bool learning_en) +{ + char tnpc_pl[MLXSW_REG_TNPC_LEN]; + + mlxsw_reg_tnpc_pack(tnpc_pl, MLXSW_REG_TNPC_TUNNEL_PORT_NVE, + learning_en); + return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(tnpc), tnpc_pl); +} + +static int +mlxsw_sp2_nve_vxlan_config_set(struct mlxsw_sp *mlxsw_sp, + const struct mlxsw_sp_nve_config *config) +{ + char tngcr_pl[MLXSW_REG_TNGCR_LEN]; + u16 ul_rif_index; + int err; + + err =3D mlxsw_sp_router_ul_rif_get(mlxsw_sp, config->ul_tb_id, + &ul_rif_index); + if (err) + return err; + mlxsw_sp->nve->ul_rif_index =3D ul_rif_index; + + err =3D mlxsw_sp2_nve_vxlan_learning_set(mlxsw_sp, config->learning_en); + if (err) + goto err_vxlan_learning_set; + + mlxsw_sp_nve_vxlan_config_prepare(tngcr_pl, config); + mlxsw_reg_tngcr_underlay_rif_set(tngcr_pl, ul_rif_index); + + err =3D mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(tngcr), tngcr_pl); + if (err) + goto err_tngcr_write; + + return 0; + +err_tngcr_write: + mlxsw_sp2_nve_vxlan_learning_set(mlxsw_sp, false); +err_vxlan_learning_set: + mlxsw_sp_router_ul_rif_put(mlxsw_sp, ul_rif_index); + return err; +} + +static void mlxsw_sp2_nve_vxlan_config_clear(struct mlxsw_sp *mlxsw_sp) +{ + char tngcr_pl[MLXSW_REG_TNGCR_LEN]; + + mlxsw_reg_tngcr_pack(tngcr_pl, MLXSW_REG_TNGCR_TYPE_VXLAN, false, 0); + mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(tngcr), tngcr_pl); + mlxsw_sp2_nve_vxlan_learning_set(mlxsw_sp, false); + mlxsw_sp_router_ul_rif_put(mlxsw_sp, mlxsw_sp->nve->ul_rif_index); +} + +static int mlxsw_sp2_nve_vxlan_rtdp_set(struct mlxsw_sp *mlxsw_sp, + unsigned int tunnel_index, + u16 ul_rif_index) +{ + char rtdp_pl[MLXSW_REG_RTDP_LEN]; + + mlxsw_reg_rtdp_pack(rtdp_pl, MLXSW_REG_RTDP_TYPE_NVE, tunnel_index); + mlxsw_reg_rtdp_egress_router_interface_set(rtdp_pl, ul_rif_index); + + return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rtdp), rtdp_pl); +} + static int mlxsw_sp2_nve_vxlan_init(struct mlxsw_sp_nve *nve, const struct mlxsw_sp_nve_config *config) { - return -EOPNOTSUPP; + struct mlxsw_sp *mlxsw_sp =3D nve->mlxsw_sp; + int err; + + err =3D mlxsw_sp_nve_parsing_set(mlxsw_sp, + MLXSW_SP_NVE_VXLAN_PARSING_DEPTH, + config->udp_dport); + if (err) + return err; + + err =3D mlxsw_sp2_nve_vxlan_config_set(mlxsw_sp, config); + if (err) + goto err_config_set; + + err =3D mlxsw_sp2_nve_vxlan_rtdp_set(mlxsw_sp, nve->tunnel_index, + nve->ul_rif_index); + if (err) + goto err_rtdp_set; + + err =3D mlxsw_sp_router_nve_promote_decap(mlxsw_sp, config->ul_tb_id, + config->ul_proto, + &config->ul_sip, + nve->tunnel_index); + if (err) + goto err_promote_decap; + + return 0; + +err_promote_decap: +err_rtdp_set: + mlxsw_sp2_nve_vxlan_config_clear(mlxsw_sp); +err_config_set: + mlxsw_sp_nve_parsing_set(mlxsw_sp, MLXSW_SP_NVE_DEFAULT_PARSING_DEPTH, + config->udp_dport); + return err; } =20 static void mlxsw_sp2_nve_vxlan_fini(struct mlxsw_sp_nve *nve) { + struct mlxsw_sp_nve_config *config =3D &nve->config; + struct mlxsw_sp *mlxsw_sp =3D nve->mlxsw_sp; + + mlxsw_sp_router_nve_demote_decap(mlxsw_sp, config->ul_tb_id, + config->ul_proto, &config->ul_sip); + mlxsw_sp2_nve_vxlan_config_clear(mlxsw_sp); + mlxsw_sp_nve_parsing_set(mlxsw_sp, MLXSW_SP_NVE_DEFAULT_PARSING_DEPTH, + config->udp_dport); } =20 const struct mlxsw_sp_nve_ops mlxsw_sp2_nve_vxlan_ops =3D { --=20 2.20.1