mbox series

[v3,00/22] net/atlantic: Aquantia aQtion 10G NIC Family DPDK PMD driver

Message ID cover.1538215990.git.igor.russkikh@aquantia.com (mailing list archive)
Headers
Series net/atlantic: Aquantia aQtion 10G NIC Family DPDK PMD driver |

Message

Igor Russkikh Sept. 29, 2018, 10:30 a.m. UTC
  Hello DPDK community!

Aquantia would like to contribute PMD for aQtion AQC10X NIC family:
https://www.aquantia.com/products/aqtion/chips/
These are 10G ethernet NICs with various features.

We do base this work on parts of the existing native linux kernel
driver source (atlantic). Shared code is hw_atl hardware and registers access module.

We'd like to target this driver for 18.11 DPDK release timeline,
it'd be good to hear comments from the community on how feasible is this.

This patchset implements basic driver infrastructure,
vlan offloads, checksumm offloads, rss control,
multiring, jumbo frames and other features.

Later on, we plan to share HW MACSEC offloads, rxflows and other features.

version 3 changes:
- patchset fixed to be incrementally buildable
- extra includes removed and cleaned up
- license changed to dual GPL-BSD for pieces shared with linux
- removed extra logging #defines
- misc comments from previous review session

version 2 changes:
- fixed build on freebsd (no ETIME const)
- fixed a bunch of checkpatch failures and warnings
- removed extra CFLAGS disabled warning
- making static arrays const

Igor Russkikh (9):
  net/atlantic: logging macroes and some typedefs
  net/atlantic: hardware register access routines
  net/atlantic: hw_atl register declarations
  net/atlantic: firmware operations layer
  net/atlantic: b0 hardware layer main logic
  net/atlantic: RX side structures and implementation
  net/atlantic: RSS and RETA manipulation API
  net/atlantic: LED control DPDK and private APIs
  net/atlantic: documentation and rel notes

Pavel Belous (13):
  net/atlantic: atlantic PMD driver skeleton
  net/atlantic: rte device start, stop, initial configuration
  net/atlantic: TX/RX function prototypes
  net/atlantic: TX side structures and implementation
  net/atlantic: link status and interrupt management
  net/atlantic: device statistics, xstats
  net/atlantic: support for RX/TX descriptors information
  net/atlantic: promisc and allmulti configuration
  net/atlantic: flow control configuration
  net/atlantic: MAC address manipulations
  net/atlantic: VLAN filters and offloads
  net/atlantic: eeprom and register manipulation routines
  net/atlantic: support for read MAC registers for debug purposes

 config/common_base                                |    5 +
 doc/guides/nics/atlantic.rst                      |   53 +
 doc/guides/nics/features/atlantic.ini             |   37 +
 doc/guides/nics/index.rst                         |    1 +
 doc/guides/rel_notes/release_18_11.rst            |    5 +
 drivers/net/Makefile                              |    1 +
 drivers/net/atlantic/Makefile                     |   39 +
 drivers/net/atlantic/atl_common.h                 |   96 +
 drivers/net/atlantic/atl_ethdev.c                 | 1688 +++++++++++++++
 drivers/net/atlantic/atl_ethdev.h                 |  110 +
 drivers/net/atlantic/atl_hw_regs.c                |   52 +
 drivers/net/atlantic/atl_hw_regs.h                |   53 +
 drivers/net/atlantic/atl_logs.h                   |   31 +
 drivers/net/atlantic/atl_rxtx.c                   | 1335 ++++++++++++
 drivers/net/atlantic/atl_types.h                  |  193 ++
 drivers/net/atlantic/hw_atl/hw_atl_b0.c           |  510 +++++
 drivers/net/atlantic/hw_atl/hw_atl_b0.h           |   40 +
 drivers/net/atlantic/hw_atl/hw_atl_b0_internal.h  |  145 ++
 drivers/net/atlantic/hw_atl/hw_atl_llh.c          | 1490 +++++++++++++
 drivers/net/atlantic/hw_atl/hw_atl_llh.h          |  714 ++++++
 drivers/net/atlantic/hw_atl/hw_atl_llh_internal.h | 2407 +++++++++++++++++++++
 drivers/net/atlantic/hw_atl/hw_atl_utils.c        |  942 ++++++++
 drivers/net/atlantic/hw_atl/hw_atl_utils.h        |  510 +++++
 drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c   |  618 ++++++
 drivers/net/atlantic/meson.build                  |   21 +
 drivers/net/atlantic/rte_pmd_atlantic.c           |   19 +
 drivers/net/atlantic/rte_pmd_atlantic.h           |   44 +
 drivers/net/atlantic/rte_pmd_atlantic_version.map |    4 +
 drivers/net/meson.build                           |    1 +
 mk/rte.app.mk                                     |    1 +
 30 files changed, 11165 insertions(+)
 create mode 100644 doc/guides/nics/atlantic.rst
 create mode 100644 doc/guides/nics/features/atlantic.ini
 create mode 100644 drivers/net/atlantic/Makefile
 create mode 100644 drivers/net/atlantic/atl_common.h
 create mode 100644 drivers/net/atlantic/atl_ethdev.c
 create mode 100644 drivers/net/atlantic/atl_ethdev.h
 create mode 100644 drivers/net/atlantic/atl_hw_regs.c
 create mode 100644 drivers/net/atlantic/atl_hw_regs.h
 create mode 100644 drivers/net/atlantic/atl_logs.h
 create mode 100644 drivers/net/atlantic/atl_rxtx.c
 create mode 100644 drivers/net/atlantic/atl_types.h
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_b0.c
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_b0.h
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_b0_internal.h
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_llh.c
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_llh.h
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_llh_internal.h
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_utils.c
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_utils.h
 create mode 100644 drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c
 create mode 100644 drivers/net/atlantic/meson.build
 create mode 100644 drivers/net/atlantic/rte_pmd_atlantic.c
 create mode 100644 drivers/net/atlantic/rte_pmd_atlantic.h
 create mode 100644 drivers/net/atlantic/rte_pmd_atlantic_version.map
  

Comments

Ferruh Yigit Oct. 3, 2018, 6:47 p.m. UTC | #1
On 9/29/2018 11:30 AM, Igor Russkikh wrote:
> Hello DPDK community!
> 
> Aquantia would like to contribute PMD for aQtion AQC10X NIC family:
> https://www.aquantia.com/products/aqtion/chips/
> These are 10G ethernet NICs with various features.
> 
> We do base this work on parts of the existing native linux kernel
> driver source (atlantic). Shared code is hw_atl hardware and registers access module.
> 
> We'd like to target this driver for 18.11 DPDK release timeline,
> it'd be good to hear comments from the community on how feasible is this.
> 
> This patchset implements basic driver infrastructure,
> vlan offloads, checksumm offloads, rss control,
> multiring, jumbo frames and other features.
> 
> Later on, we plan to share HW MACSEC offloads, rxflows and other features.
> 
> version 3 changes:
> - patchset fixed to be incrementally buildable
> - extra includes removed and cleaned up
> - license changed to dual GPL-BSD for pieces shared with linux
> - removed extra logging #defines
> - misc comments from previous review session

Hi Igor,

Thanks for the update. But a reminder, each patch should be build and
functional, there are build errors when first patch applied. I think build is
broken until 7/22.

Can you please re-work the patchset to make each patch compiles?

Thanks,
ferruh
  
Igor Russkikh Oct. 4, 2018, 9:42 a.m. UTC | #2
Hi Ferruh,

Thanks again for the review, we'll investigate and work on your comments!

> > +CONFIG_RTE_LIBRTE_ATLANTIC_PMD=y
> Just to check, default enable in "common_base" means PMD supports all
> architectures (x86_64, i686, arm, ppc) and both Linux and FreeBSD.
> If this is not the case, please disable in common_base and enable in whatever
> supported.

We actually don't have an ability to test and verify on PPC.
We are pretty confident on x86_64, i686 and arm.

Thus, will it be ok to add `N` into defconfig_ppc_64-power8-linuxapp-gcc only?

> Thanks for the update. But a reminder, each patch should be build and
> functional, there are build errors when first patch applied. I think build is
> broken until 7/22.
> 
> Can you please re-work the patchset to make each patch compiles?

Thats strange because we explicitly tested that.
CI also states its OK:
http://patchwork.dpdk.org/project/dpdk/list/?series=1598&submitter=&state=*&q=&archive=&delegate=

Could it be some custom build environment on your side, or may be you do apply it
on different base, not master?

Regards,
  Igor
  
Ferruh Yigit Oct. 4, 2018, 10:29 a.m. UTC | #3
On 10/4/2018 10:42 AM, Igor Russkikh wrote:
> Hi Ferruh,
> 
> Thanks again for the review, we'll investigate and work on your comments!
> 
>>> +CONFIG_RTE_LIBRTE_ATLANTIC_PMD=y
>> Just to check, default enable in "common_base" means PMD supports all
>> architectures (x86_64, i686, arm, ppc) and both Linux and FreeBSD.
>> If this is not the case, please disable in common_base and enable in whatever
>> supported.
> 
> We actually don't have an ability to test and verify on PPC.
> We are pretty confident on x86_64, i686 and arm.
> 
> Thus, will it be ok to add `N` into defconfig_ppc_64-power8-linuxapp-gcc only?

If FreeBSD is also supported yes, above will be OK.

> 
>> Thanks for the update. But a reminder, each patch should be build and
>> functional, there are build errors when first patch applied. I think build is
>> broken until 7/22.
>>
>> Can you please re-work the patchset to make each patch compiles?
> 
> Thats strange because we explicitly tested that.
> CI also states its OK:
> http://patchwork.dpdk.org/project/dpdk/list/?series=1598&submitter=&state=*&q=&archive=&delegate=
> 
> Could it be some custom build environment on your side, or may be you do apply it
> on different base, not master?

I double checked, after fist patch applied getting following build error [1],
and it seems valid because "atl_eth_dev_ops" not used at all.


[1]
.../drivers/net/atlantic/atl_ethdev.c:63:33: error: unused variable
'atl_eth_dev_ops' [-Werror,-Wunused-const-variable]
static const struct eth_dev_ops atl_eth_dev_ops = {
                                ^