From: Przemek Kitszel <przemyslaw.kitszel@intel.com>
To: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>,
<intel-wired-lan@lists.osuosl.org>
Cc: <netdev@vger.kernel.org>, <jacob.e.keller@intel.com>,
<michal.kubiak@intel.com>, <maciej.fijalkowski@intel.com>,
<sridhar.samudrala@intel.com>, <wojciech.drewek@intel.com>,
<pio.raczynski@gmail.com>, <jiri@nvidia.com>,
<nex.sw.ncis.osdt.itp.upstreaming@intel.com>,
<mateusz.polchlopek@intel.com>,
Piotr Raczynski <piotr.raczynski@intel.com>
Subject: Re: [iwl-next v3 5/7] ice: base subfunction aux driver
Date: Fri, 12 Apr 2024 13:44:45 +0200 [thread overview]
Message-ID: <da5f3048-e90b-4e34-be23-602c8a9edeb2@intel.com> (raw)
In-Reply-To: <20240412063053.339795-6-michal.swiatkowski@linux.intel.com>
On 4/12/24 08:30, Michal Swiatkowski wrote:
> From: Piotr Raczynski <piotr.raczynski@intel.com>
>
> Implement subfunction driver. It is probe when subfunction port is
> activated.
>
> VSI is already created. During the probe VSI is being configured.
> MAC unicast and broadcast filter is added to allow traffic to pass.
>
> Signed-off-by: Piotr Raczynski <piotr.raczynski@intel.com>
> Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> ---
> drivers/net/ethernet/intel/ice/Makefile | 1 +
> drivers/net/ethernet/intel/ice/ice_main.c | 10 ++
> drivers/net/ethernet/intel/ice/ice_sf_eth.c | 130 ++++++++++++++++++++
> drivers/net/ethernet/intel/ice/ice_sf_eth.h | 9 ++
> 4 files changed, 150 insertions(+)
> create mode 100644 drivers/net/ethernet/intel/ice/ice_sf_eth.c
>
> diff --git a/drivers/net/ethernet/intel/ice/Makefile b/drivers/net/ethernet/intel/ice/Makefile
> index 03500e28ac99..4d987f5dcdc1 100644
> --- a/drivers/net/ethernet/intel/ice/Makefile
> +++ b/drivers/net/ethernet/intel/ice/Makefile
> @@ -31,6 +31,7 @@ ice-y := ice_main.o \
> ice_idc.o \
> devlink/devlink.o \
> devlink/devlink_port.o \
> + ice_sf_eth.o \
> ice_ddp.o \
> ice_fw_update.o \
> ice_lag.o \
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
> index 29552598ddb6..f55e3340b608 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -15,6 +15,7 @@
> #include "ice_dcb_nl.h"
> #include "devlink/devlink.h"
> #include "devlink/devlink_port.h"
> +#include "ice_sf_eth.h"
> #include "ice_hwmon.h"
> /* Including ice_trace.h with CREATE_TRACE_POINTS defined will generate the
> * ice tracepoint functions. This must be done exactly once across the
> @@ -5857,8 +5858,16 @@ static int __init ice_module_init(void)
> goto err_dest_lag_wq;
> }
>
> + status = ice_sf_driver_register();
> + if (status) {
> + pr_err("Failed to register SF driver, err %d\n", status);
> + goto err_sf_driver;
> + }
> +
> return 0;
>
> +err_sf_driver:
> + pci_unregister_driver(&ice_driver);
> err_dest_lag_wq:
> destroy_workqueue(ice_lag_wq);
> ice_debugfs_exit();
> @@ -5876,6 +5885,7 @@ module_init(ice_module_init);
> */
> static void __exit ice_module_exit(void)
> {
> + ice_sf_driver_unregister();
> pci_unregister_driver(&ice_driver);
> ice_debugfs_exit();
> destroy_workqueue(ice_wq);
> diff --git a/drivers/net/ethernet/intel/ice/ice_sf_eth.c b/drivers/net/ethernet/intel/ice/ice_sf_eth.c
> new file mode 100644
> index 000000000000..70f7cbe6c609
> --- /dev/null
> +++ b/drivers/net/ethernet/intel/ice/ice_sf_eth.c
> @@ -0,0 +1,130 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/* Copyright (c) 2024, Intel Corporation. */
> +#include "ice.h"
> +#include "ice_lib.h"
> +#include "ice_fltr.h"
> +#include "ice_sf_eth.h"
> +#include "devlink/devlink_port.h"
> +#include "devlink/devlink.h"
> +
> +/**
> + * ice_sf_dev_probe - subfunction driver probe function
> + * @adev: pointer to the auxiliary device
> + * @id: pointer to the auxiliary_device id
> + *
> + * Configure VSI and netdev resources for the subfunction device.
> + *
> + * Return: zero on success or an error code on failure.
> + */
> +static int ice_sf_dev_probe(struct auxiliary_device *adev,
> + const struct auxiliary_device_id *id)
> +{
> + struct ice_sf_dev *sf_dev = ice_adev_to_sf_dev(adev);
> + struct ice_dynamic_port *dyn_port = sf_dev->dyn_port;
> + struct ice_vsi_cfg_params params = {};
> + struct ice_vsi *vsi = dyn_port->vsi;
> + struct ice_pf *pf = dyn_port->pf;
> + struct device *dev = &adev->dev;
> + struct ice_sf_priv *priv;
> + int err;
> +
> + params.type = ICE_VSI_SF;
> + params.pi = pf->hw.port_info;
> + params.flags = ICE_VSI_FLAG_INIT;
> +
> + priv = ice_allocate_sf(&adev->dev);
> + if (!priv) {
> + dev_err(dev, "Subfunction devlink alloc failed");
> + return -ENOMEM;
> + }
> +
> + priv->dev = sf_dev;
> + sf_dev->priv = priv;
> +
> + devlink_register(priv_to_devlink(priv));
> +
> + err = ice_vsi_cfg(vsi, ¶ms);
> + if (err) {
> + dev_err(dev, "Subfunction vsi config failed");
> + return err;
> + }
> +
> + err = ice_devlink_create_sf_dev_port(sf_dev);
> + if (err) {
> + dev_err(dev, "Cannot add ice virtual devlink port for subfunction");
> + goto err_vsi_decfg;
> + }
> +
> + err = ice_fltr_add_mac_and_broadcast(vsi, vsi->netdev->dev_addr,
> + ICE_FWD_TO_VSI);
> + if (err) {
> + dev_err(dev, "can't add MAC filters %pM for VSI %d\n",
> + vsi->netdev->dev_addr, vsi->idx);
> + goto err_devlink_destroy;
> + }
> +
> + ice_napi_add(vsi);
> +
> + return err;
> +
> +err_devlink_destroy:
> + ice_devlink_destroy_sf_dev_port(sf_dev);
> +err_vsi_decfg:
> + ice_vsi_decfg(vsi);
> + return err;
> +}
> +
> +/**
> + * ice_sf_dev_remove - subfunction driver remove function
> + * @adev: pointer to the auxiliary device
> + *
> + * Deinitalize VSI and netdev resources for the subfunction device.
> + */
> +static void ice_sf_dev_remove(struct auxiliary_device *adev)
> +{
> + struct ice_sf_dev *sf_dev = ice_adev_to_sf_dev(adev);
> + struct devlink *devlink = priv_to_devlink(sf_dev->priv);
RCT
> + struct ice_dynamic_port *dyn_port = sf_dev->dyn_port;
> + struct ice_vsi *vsi = dyn_port->vsi;
> +
> + ice_vsi_close(vsi);
> +
> + ice_devlink_destroy_sf_dev_port(sf_dev);
> + devlink_unregister(devlink);
> + devlink_free(devlink);
> + ice_vsi_decfg(vsi);
> +}
> +
> +static const struct auxiliary_device_id ice_sf_dev_id_table[] = {
> + { .name = "ice.sf", },
> + { },
> +};
> +
> +MODULE_DEVICE_TABLE(auxiliary, ice_sf_dev_id_table);
> +
> +static struct auxiliary_driver ice_sf_driver = {
> + .name = "sf",
> + .probe = ice_sf_dev_probe,
> + .remove = ice_sf_dev_remove,
> + .id_table = ice_sf_dev_id_table
> +};
> +
> +/**
> + * ice_sf_driver_register - Register new auxiliary subfunction driver
> + *
> + * Return: zero on success or an error code on failure.
> + */
> +int ice_sf_driver_register(void)
> +{
> + return auxiliary_driver_register(&ice_sf_driver);
> +}
> +
> +/**
> + * ice_sf_driver_unregister - Unregister new auxiliary subfunction driver
> + *
> + * Return: zero on success or an error code on failure.
> + */
> +void ice_sf_driver_unregister(void)
> +{
> + auxiliary_driver_unregister(&ice_sf_driver);
> +}
> diff --git a/drivers/net/ethernet/intel/ice/ice_sf_eth.h b/drivers/net/ethernet/intel/ice/ice_sf_eth.h
> index a08f8b2bceef..e972c50f96c9 100644
> --- a/drivers/net/ethernet/intel/ice/ice_sf_eth.h
> +++ b/drivers/net/ethernet/intel/ice/ice_sf_eth.h
> @@ -18,4 +18,13 @@ struct ice_sf_priv {
> struct devlink_port devlink_port;
> };
>
> +static inline struct
> +ice_sf_dev *ice_adev_to_sf_dev(struct auxiliary_device *adev)
> +{
> + return container_of(adev, struct ice_sf_dev, adev);
> +}
> +
> +int ice_sf_driver_register(void);
> +void ice_sf_driver_unregister(void);
> +
> #endif /* _ICE_SF_ETH_H_ */
next prev parent reply other threads:[~2024-04-12 11:44 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-12 6:30 [iwl-next v3 0/7] ice: support devlink subfunction Michal Swiatkowski
2024-04-12 6:30 ` [iwl-next v3 1/7] ice: add new VSI type for subfunctions Michal Swiatkowski
2024-04-12 6:30 ` [iwl-next v3 2/7] ice: export ice ndo_ops functions Michal Swiatkowski
2024-04-12 6:30 ` [iwl-next v3 3/7] ice: add basic devlink subfunctions support Michal Swiatkowski
2024-04-12 7:12 ` Jiri Pirko
2024-04-15 8:39 ` Michal Swiatkowski
2024-04-15 9:10 ` Jiri Pirko
2024-04-16 5:14 ` Michal Swiatkowski
2024-04-16 6:16 ` [Intel-wired-lan] " Michal Swiatkowski
2024-04-16 12:09 ` Jiri Pirko
2024-04-12 6:30 ` [iwl-next v3 4/7] ice: allocate devlink for subfunction Michal Swiatkowski
2024-04-12 7:24 ` Jiri Pirko
2024-04-15 8:40 ` Michal Swiatkowski
2024-04-12 6:30 ` [iwl-next v3 5/7] ice: base subfunction aux driver Michal Swiatkowski
2024-04-12 7:20 ` Jiri Pirko
2024-04-12 11:44 ` Przemek Kitszel [this message]
2024-04-15 8:29 ` Michal Swiatkowski
2024-04-12 6:30 ` [iwl-next v3 6/7] ice: implement netdev for subfunction Michal Swiatkowski
2024-04-12 7:21 ` Jiri Pirko
2024-04-12 6:30 ` [iwl-next v3 7/7] ice: allow to activate and deactivate subfunction Michal Swiatkowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=da5f3048-e90b-4e34-be23-602c8a9edeb2@intel.com \
--to=przemyslaw.kitszel@intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jacob.e.keller@intel.com \
--cc=jiri@nvidia.com \
--cc=maciej.fijalkowski@intel.com \
--cc=mateusz.polchlopek@intel.com \
--cc=michal.kubiak@intel.com \
--cc=michal.swiatkowski@linux.intel.com \
--cc=netdev@vger.kernel.org \
--cc=nex.sw.ncis.osdt.itp.upstreaming@intel.com \
--cc=pio.raczynski@gmail.com \
--cc=piotr.raczynski@intel.com \
--cc=sridhar.samudrala@intel.com \
--cc=wojciech.drewek@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).