public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: David Thompson <davthompson@nvidia.com>
Cc: davem@davemloft.net, kuba@kernel.org, netdev@vger.kernel.org,
	limings@nvidia.com, Asmaa Mnebhi <asmaa@nvidia.com>
Subject: Re: [PATCH net-next v6] Add Mellanox BlueField Gigabit Ethernet driver
Date: Wed, 2 Jun 2021 07:38:47 +0300	[thread overview]
Message-ID: <YLcLV+p4yZGjdMHO@unreal> (raw)
In-Reply-To: <20210601122455.1025-1-davthompson@nvidia.com>

On Tue, Jun 01, 2021 at 08:24:55AM -0400, David Thompson wrote:
> This patch adds build and driver logic for the "mlxbf_gige"
> Ethernet driver from Mellanox Technologies. The second
> generation BlueField SoC from Mellanox supports an
> out-of-band GigaBit Ethernet management port to the Arm
> subsystem.  This driver supports TCP/IP network connectivity
> for that port, and provides back-end routines to handle
> basic ethtool requests.
> 
> The driver interfaces to the Gigabit Ethernet block of
> BlueField SoC via MMIO accesses to registers, which contain
> control information or pointers describing transmit and
> receive resources.  There is a single transmit queue, and
> the port supports transmit ring sizes of 4 to 256 entries.
> There is a single receive queue, and the port supports
> receive ring sizes of 32 to 32K entries. The transmit and
> receive rings are allocated from DMA coherent memory. There
> is a 16-bit producer and consumer index per ring to denote
> software ownership and hardware ownership, respectively.
> 
> The main driver logic such as probe(), remove(), and netdev
> ops are in "mlxbf_gige_main.c".  Logic in "mlxbf_gige_rx.c"
> and "mlxbf_gige_tx.c" handles the packet processing for
> receive and transmit respectively.
> 
> The logic in "mlxbf_gige_ethtool.c" supports the handling
> of some basic ethtool requests: get driver info, get ring
> parameters, get registers, and get statistics.
> 
> The logic in "mlxbf_gige_mdio.c" is the driver controlling
> the Mellanox BlueField hardware that interacts with a PHY
> device via MDIO/MDC pins.  This driver does the following:
>   - At driver probe time, it configures several BlueField MDIO
>     parameters such as sample rate, full drive, voltage and MDC
>   - It defines functions to read and write MDIO registers and
>     registers the MDIO bus.
>   - It defines the phy interrupt handler reporting a
>     link up/down status change
>   - This driver's probe is invoked from the main driver logic
>     while the phy interrupt handler is registered in ndo_open.
> 
> Driver limitations
>   - Only supports 1Gbps speed
>   - Only supports GMII protocol
>   - Supports maximum packet size of 2KB
>   - Does not support scatter-gather buffering
> 
> Testing
>   - Successful build of kernel for ARM64, ARM32, X86_64
>   - Tested ARM64 build on FastModels & Palladium
>   - Tested ARM64 build on several Mellanox boards that are built with
>     the BlueField-2 SoC.  The testing includes coverage in the areas
>     of networking (e.g. ping, iperf, ifconfig, route), file transfers
>     (e.g. SCP), and various ethtool options relevant to this driver.
> 
> v5 -> v6

Please put changelog under "---" below your SOBs. We don't need to see
this history in the git log.

>   Fixed use of COMPILE_TEST for ARM32 build; changed driver to not
>   depend on CONFIG_ACPI for ARM32 build
> v4 -> v5
>   Created a separate interrupt controller for the GPIO PHY interrupt
>   and as a result, the GIGE driver no longer depends on GPIO driver
>   Updated the logic in mlxbf_gige_adjust_link() to store the negotiated
>   pause settings into the driver's private settings.
>   Modified logic to only change enable bit in RX_DMA register
>   Changed logic to only map and unmap the actual length of the TX SKB,
>   instead using the default size.
>   Added better error handling to open() method
>   Modified receive packet logic to use polarity bit to signify ownership
>   (software vs. hardware) of the RX CQE slot
> v3 -> v4
>   Main driver module broken out into rx, tx, intr, and ethtool modules
>   Removed some GPIO PHY interrupt logic; moved to GPIO_MLXBF2 driver
> v2 -> v3
>   Added logic to handle PHY link up/down interrupts
>   Use streaming DMA mapping for packet buffers
>   Changed logic to use standard iopoll methods
>   Changed PHY logic to not allow C45 transactions
>   Enhanced the error handling in open() method
>   Enhanced start_xmit() method to use xmit_more mechanism
>   Added support for ndo_get_stats64
>   Removed standard stats from "ethtool -S" output
> v1 -> v2:
>   Fixed all warnings raised by "make C=1" and "make W=1"
>     a) Changed logic in mlxbf_gige_rx_deinit() and mlxbf_gige_tx_deinit()
>        to initialize relevant pointers as NULL, not 0
>     b) Change mlxbf_gige_get_mac_rx_filter() to return void,
>        as this function's return status is not used by caller
>     c) Fixed type definition of "buff" in mlxbf_gige_get_regs()
> 
> Signed-off-by: David Thompson <davthompson@nvidia.com>
> Signed-off-by: Asmaa Mnebhi <asmaa@nvidia.com>
> Reviewed-by: Liming Sun <limings@nvidia.com>
> ---

The patch generates checkpatch warnings.

 CHECK: spinlock_t definition without comment
 #272: FILE: drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige.h:87:
 +	spinlock_t lock;

 CHECK: spinlock_t definition without comment
 #273: FILE: drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige.h:88:
 +	spinlock_t gpio_lock;

 CHECK: Macro argument 'tx_wqe_addr' may be better as '(tx_wqe_addr)' to avoid precedence issues
 #328: FILE: drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige.h:143:
 +#define MLXBF_GIGE_TX_WQE_PKT_LEN(tx_wqe_addr) \
 +	(*(tx_wqe_addr + 1) & MLXBF_GIGE_TX_WQE_PKT_LEN_MASK)

 CHECK: multiple assignments should be avoided
 #1271: FILE: drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_main.c:374:
 +	phydev->irq = priv->mdiobus->irq[addr] = priv->phy_irq;

Thanks

  reply	other threads:[~2021-06-02  4:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-01 12:24 [PATCH net-next v6] Add Mellanox BlueField Gigabit Ethernet driver David Thompson
2021-06-02  4:38 ` Leon Romanovsky [this message]
2021-06-07 14:47   ` David Thompson

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=YLcLV+p4yZGjdMHO@unreal \
    --to=leon@kernel.org \
    --cc=asmaa@nvidia.com \
    --cc=davem@davemloft.net \
    --cc=davthompson@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=limings@nvidia.com \
    --cc=netdev@vger.kernel.org \
    /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