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.0 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,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 2D38FC4360F for ; Tue, 26 Feb 2019 18:24:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F091B217F5 for ; Tue, 26 Feb 2019 18:24:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="nz4Kkczh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729129AbfBZSYz (ORCPT ); Tue, 26 Feb 2019 13:24:55 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:36025 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728920AbfBZSYx (ORCPT ); Tue, 26 Feb 2019 13:24:53 -0500 Received: by mail-qt1-f193.google.com with SMTP id p25so16072858qtb.3 for ; Tue, 26 Feb 2019 10:24:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5UwJD0e2UMwBHQ6iR1akeyoUHPpcFoaxmdv1JOPnVKU=; b=nz4KkczhW2sN7NP4IvfFevX+6JswKBX/IMC2euDG/+33/MePMAI8oD2CrHX2uPoFSX brSHjMwr53HiIHIQDIPmd6zneVRNxG+JwRQqnq4QJjZfnDsjz/IYznhRw2Lxu++sQbCh m0jcLuKhfkpONPWIqerMUZPf4AH3Gb5YuBHHY8HDqqw55/PCT9xPD4RMMs8Igi8fvpsZ kVABGjftTcSJJu1iTWctR2RnObMuUDFAv3klUFDhEFCcoMiCM2SzzsKwp/VEKGZz3Ri/ GkDU6WuMOaQWFn+ygbZ/i696R+yKwU7IogPSccpObopJTgfjaNMBxBptUMzs0L/JKf3V 4GLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5UwJD0e2UMwBHQ6iR1akeyoUHPpcFoaxmdv1JOPnVKU=; b=jqqyR1kGeBxLgAUW0ApcpmeuPeNeazhPgcC13+CfSzabZZfpvjAMqGEL/wtU+oY5qw RwhkgXi4IzxhRX7l0+IXpe/q/gkZvQY42x4lutG7krnQNtnliFvK4qeCKwrJENlwTfjK lLWQL4gcBK6pPbh2jb3PgzKpwvXX6hUfClV5k0i8DcVPjplNiR/HSf3TBoGY4/YW4cBd QwpuvmrwQXeDqnH9qK4IOsouHbRbwYZGdoP8Zhq7tgpvSJj0wAFEMB2tVNGT63LkumEZ PXOn2kDTNmMAE1YmX9LQYmq4hUSULEZw7dFRrq05oBmeUva1q8tt7KDCCXlngM58br7y skNQ== X-Gm-Message-State: AHQUAubu9Q2NcJUMi597UJBRRS7cG/XaJhCFf811Ig4LivBZb15jMzJ5 ZFJ2fWI+hRSsm8Ufn1WV1x/UMA== X-Google-Smtp-Source: AHgI3IbAHH8Q5U1rbDYaFSNcbYCt+oV4ysmYJ1vkFceG8XKAD9sJLvz1rPc1Y2ngNFWnnxTTQC0fAg== X-Received: by 2002:a0c:9910:: with SMTP id h16mr19409657qvd.245.1551205492367; Tue, 26 Feb 2019 10:24:52 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id u31sm9733892qth.15.2019.02.26.10.24.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 10:24:51 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, jiri@resnulli.us Cc: oss-drivers@netronome.com, netdev@vger.kernel.org, Jakub Kicinski Subject: [PATCH net-next 3/8] nfp: register devlink ports of all reprs Date: Tue, 26 Feb 2019 10:24:31 -0800 Message-Id: <20190226182436.23811-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190226182436.23811-1-jakub.kicinski@netronome.com> References: <20190226182436.23811-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Register all representors as devlink ports. The port_index is slightly tricky to figure out, we use a bit of arbitrary math to create unique IDs for PCI ports. Signed-off-by: Jakub Kicinski --- .../net/ethernet/netronome/nfp/nfp_devlink.c | 47 ++++++++++++++++++- .../net/ethernet/netronome/nfp/nfp_net_repr.c | 16 ++++++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index 9af3cb1f2f17..36976e37d162 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -350,7 +350,8 @@ const struct devlink_ops nfp_devlink_ops = { .flash_update = nfp_devlink_flash_update, }; -int nfp_devlink_port_init(struct nfp_app *app, struct nfp_port *port) +static int +nfp_devlink_port_init_phys(struct devlink *devlink, struct nfp_port *port) { struct nfp_eth_table_port eth_port; int ret; @@ -368,6 +369,34 @@ int nfp_devlink_port_init(struct nfp_app *app, struct nfp_port *port) return 0; } +static int +nfp_devlink_port_init_pci(struct devlink *devlink, struct nfp_port *port, + u32 flavour) +{ + devlink_port_type_eth_set(&port->dl_port, port->netdev); + devlink_port_attrs_pci_set(&port->dl_port, flavour, + port->pf_id, port->vf_id); + return 0; +} + +int nfp_devlink_port_init(struct nfp_app *app, struct nfp_port *port) +{ + struct devlink *devlink = priv_to_devlink(app->pf); + + switch (port->type) { + case NFP_PORT_PHYS_PORT: + return nfp_devlink_port_init_phys(devlink, port); + case NFP_PORT_PF_PORT: + return nfp_devlink_port_init_pci(devlink, port, + DEVLINK_PORT_FLAVOUR_PCI_PF); + case NFP_PORT_VF_PORT: + return nfp_devlink_port_init_pci(devlink, port, + DEVLINK_PORT_FLAVOUR_PCI_VF); + default: + return -EINVAL; + } +} + void nfp_devlink_port_clean(struct nfp_port *port) { } @@ -376,7 +405,21 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port) { struct devlink *devlink = priv_to_devlink(app->pf); - return devlink_port_register(devlink, &port->dl_port, port->eth_id); + switch (port->type) { + case NFP_PORT_PHYS_PORT: + return devlink_port_register(devlink, &port->dl_port, + port->eth_id); + case NFP_PORT_PF_PORT: + return devlink_port_register(devlink, &port->dl_port, + (port->pf_id + 1) * 10000 + + port->pf_split_id * 1000); + case NFP_PORT_VF_PORT: + return devlink_port_register(devlink, &port->dl_port, + (port->pf_id + 1) * 10000 + + port->vf_id + 1); + default: + return -EINVAL; + } } void nfp_devlink_port_unregister(struct nfp_port *port) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c index d2c803bb4e56..869d22760a6e 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c @@ -292,7 +292,9 @@ nfp_repr_transfer_features(struct net_device *netdev, struct net_device *lower) static void nfp_repr_clean(struct nfp_repr *repr) { + nfp_devlink_port_unregister(repr->port); unregister_netdev(repr->netdev); + nfp_devlink_port_clean(repr->port); nfp_app_repr_clean(repr->app, repr->netdev); dst_release((struct dst_entry *)repr->dst); nfp_port_free(repr->port); @@ -395,12 +397,24 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev, if (err) goto err_clean; - err = register_netdev(netdev); + err = nfp_devlink_port_init(app, repr->port); if (err) goto err_repr_clean; + err = register_netdev(netdev); + if (err) + goto err_port_clean; + + err = nfp_devlink_port_register(app, repr->port); + if (err) + goto err_unreg_netdev; + return 0; +err_unreg_netdev: + unregister_netdev(repr->netdev); +err_port_clean: + nfp_devlink_port_clean(repr->port); err_repr_clean: nfp_app_repr_clean(app, netdev); err_clean: -- 2.19.2