Skip to content

Commit

Permalink
arch/zynq-mpsoc improve the ethernet driver
Browse files Browse the repository at this point in the history
1. Changes the phyadd to 0xC to speed up the training of phyadd.
2. Set RX DMA buffer size configureable.
3. Create netnsh configs as ethernet boot from QSPI FLASH.
4. Fix some typo in apache#15720 which is nonsynchronous with local code.
  • Loading branch information
zouboan committed Feb 5, 2025
1 parent 04bd00f commit 20362b3
Show file tree
Hide file tree
Showing 6 changed files with 152 additions and 16 deletions.
10 changes: 10 additions & 0 deletions arch/arm64/src/zynq-mpsoc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,16 @@ config ZYNQ_GMAC_NTXBUFFERS
that can be in flight. This is also equal to the number of TX
descriptors that will be allocated.

config ZYNQ_GMAC_RXDMA_BUFSIZE
int "RX DMA buffer size"
default 128
range 64 10240
---help---
DMA receive buffer size in external AMBA (AHB/AXI) system memory.
The value defined by these bits determines the size of buffer to
use in main system memory when writing received data. The value
must be defined as multiples of 64 bytes, i.e. 64, 128, 256...

config ZYNQ_GMAC_PREALLOCATE
bool "Preallocate buffers"
default n
Expand Down
7 changes: 0 additions & 7 deletions arch/arm64/src/zynq-mpsoc/zynq_boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,3 @@ void arm64_chip_boot(void)
up_perf_init((void *)CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC);
#endif
}

#if defined(CONFIG_NET) && !defined(CONFIG_NETDEV_LATEINIT)
void arm64_netinitialize(void)
{
/* TODO: Support net initialize */
}
#endif
16 changes: 12 additions & 4 deletions arch/arm64/src/zynq-mpsoc/zynq_enet.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@

/* GMAC buffer sizes, number of buffers, and number of descriptors. *********/

#define GMAC_RX_UNITSIZE 128 /* Fixed size for RX buffer */
#define GMAC_TX_UNITSIZE CONFIG_NET_ETH_PKTSIZE /* MAX size for Ethernet packet */
#define GMAC_RX_UNITSIZE CONFIG_ZYNQ_GMAC_RXDMA_BUFSIZE /* DMA buffer size for receive */
#define GMAC_TX_UNITSIZE CONFIG_NET_ETH_PKTSIZE /* MAX size for Ethernet packet */

/* The MAC can support frame lengths up to 1536 bytes */

Expand Down Expand Up @@ -3551,8 +3551,8 @@ static int zynq_gmac_configure(struct zynq_gmac_s *priv)
* IRXER = 0 : Disable ignore IPG GXER
*/

regval = GMAC_NCFGR_FD | GMAC_NCFGR_GBE |
GMAC_NCFGR_CLK_DIV64 | GMAC_NCFGR_DBW_64;
regval = GMAC_NCFGR_FD | GMAC_NCFGR_GBE | GMAC_NCFGR_PEN |
GMAC_NCFGR_RFCS | GMAC_NCFGR_CLK_DIV64 | GMAC_NCFGR_DBW_64;

#ifdef CONFIG_NET_PROMISCUOUS
regval |= GMAC_NCFGR_CAF;
Expand All @@ -3568,6 +3568,14 @@ static int zynq_gmac_configure(struct zynq_gmac_s *priv)

regval = zynq_getreg(priv, ZYNQ_GMAC_DCFGR);

/* DMA receive buffer size in external AMBA (AHB/AXI) system memory */

regval &= ~GMAC_DCFGR_DRBS_MASK;

/* The value is defined in multiples of 64 bytes */

regval |= GMAC_DCFGR_DRBS(GMAC_RX_UNITSIZE / 64);

regval &= ~GMAC_DCFGR_ESPA;

#ifdef CDNS_TX_CSUM_OFFLOAD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,33 @@ CONFIG_IDLETHREAD_STACKSIZE=8192
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=9192
CONFIG_NET=y
CONFIG_NETDB_DNSCLIENT=y
CONFIG_NETDB_DNSCLIENT_ENTRIES=4
CONFIG_NETDB_DNSSERVER_NOADDR=y
CONFIG_NETINIT_DRIPADDR=0xc0a80002
CONFIG_NETINIT_IPADDR=0xc0a8000f
CONFIG_NETINIT_NOMAC=y
CONFIG_NETUTILS_CODECS=y
CONFIG_NETUTILS_IPERF=y
CONFIG_NET_BINDTODEVICE=y
CONFIG_NETUTILS_TELNETD=y
CONFIG_NETUTILS_TFTPC=y
CONFIG_NETUTILS_WEBCLIENT=y
CONFIG_NET_BROADCAST=y
CONFIG_NET_ETH_PKTSIZE=1500
CONFIG_NET_ICMP_SOCKET=y
CONFIG_NET_NETLINK=y
CONFIG_NET_SOCKOPTS=y
CONFIG_NET_LL_GUARDSIZE=32
CONFIG_NET_MAX_LISTENPORTS=8
CONFIG_NET_RECV_BUFSIZE=32768
CONFIG_NET_SENDFILE=y
CONFIG_NET_SOLINGER=y
CONFIG_NET_STATISTICS=y
CONFIG_NET_TCP=y
CONFIG_NET_TCPPROTO_OPTIONS=y
CONFIG_NET_TIMESTAMP=y
CONFIG_NET_TCPBACKLOG=y
CONFIG_NET_TCP_DELAYED_ACK=y
CONFIG_NET_TCP_KEEPALIVE=y
CONFIG_NET_TCP_WRITE_BUFFERS=y
CONFIG_NET_UDP=y
CONFIG_NET_UDP_WRITE_BUFFERS=y
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
Expand Down Expand Up @@ -93,3 +108,4 @@ CONFIG_USERLED_LOWER=y
CONFIG_ZYNQ_ENET=y
CONFIG_ZYNQ_GMAC_NRXBUFFERS=256
CONFIG_ZYNQ_GMAC_NTXBUFFERS=256
CONFIG_ZYNQ_GMAC_PHYADDR=12
105 changes: 105 additions & 0 deletions boards/arm64/zynq-mpsoc/zcu111/configs/netnsh/defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
CONFIG_ARCH="arm64"
CONFIG_ARCH_ARM64=y
CONFIG_ARCH_BOARD="zcu111"
CONFIG_ARCH_BOARD_ZCU111=y
CONFIG_ARCH_CHIP="zynq-mpsoc"
CONFIG_ARCH_CHIP_ZYNQ_MPSOC=y
CONFIG_ARCH_EARLY_PRINT=y
CONFIG_ARCH_INTERRUPTSTACK=4096
CONFIG_ARM64_DCACHE_DISABLE=y
CONFIG_ARM64_GIC_VERSION=2
CONFIG_ARM64_ICACHE_DISABLE=y
CONFIG_BOARDCTL_RESET=y
CONFIG_BOARD_LOOPSPERMSEC=116524
CONFIG_BUILTIN=y
CONFIG_DEBUG_ASSERTIONS=y
CONFIG_DEBUG_FEATURES=y
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_IRQ=y
CONFIG_DEBUG_IRQ_INFO=y
CONFIG_DEBUG_SCHED=y
CONFIG_DEBUG_SCHED_ERROR=y
CONFIG_DEBUG_SCHED_INFO=y
CONFIG_DEBUG_SCHED_WARN=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEFAULT_TASK_STACKSIZE=8192
CONFIG_ETC_ROMFS=y
CONFIG_EXAMPLES_HELLO=y
CONFIG_EXAMPLES_LEDS=y
CONFIG_EXPERIMENTAL=y
CONFIG_FRAME_POINTER=y
CONFIG_FS_PROCFS=y
CONFIG_FS_ROMFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=8192
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=9192
CONFIG_NET=y
CONFIG_NETDB_DNSCLIENT=y
CONFIG_NETDB_DNSCLIENT_ENTRIES=4
CONFIG_NETDB_DNSSERVER_NOADDR=y
CONFIG_NETINIT_DRIPADDR=0xc0a80002
CONFIG_NETINIT_IPADDR=0xc0a8000f
CONFIG_NETINIT_NOMAC=y
CONFIG_NETUTILS_CODECS=y
CONFIG_NETUTILS_IPERF=y
CONFIG_NETUTILS_TELNETD=y
CONFIG_NETUTILS_TFTPC=y
CONFIG_NETUTILS_WEBCLIENT=y
CONFIG_NET_BROADCAST=y
CONFIG_NET_ETH_PKTSIZE=1500
CONFIG_NET_ICMP_SOCKET=y
CONFIG_NET_LL_GUARDSIZE=32
CONFIG_NET_MAX_LISTENPORTS=8
CONFIG_NET_RECV_BUFSIZE=32768
CONFIG_NET_SENDFILE=y
CONFIG_NET_SOLINGER=y
CONFIG_NET_STATISTICS=y
CONFIG_NET_TCP=y
CONFIG_NET_TCPBACKLOG=y
CONFIG_NET_TCP_DELAYED_ACK=y
CONFIG_NET_TCP_KEEPALIVE=y
CONFIG_NET_TCP_WRITE_BUFFERS=y
CONFIG_NET_UDP=y
CONFIG_NET_UDP_WRITE_BUFFERS=y
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_PTHREAD_STACK_MIN=8192
CONFIG_RAMLOG=y
CONFIG_RAM_SIZE=2145386496
CONFIG_RAM_START=0x00100000
CONFIG_RAW_BINARY=y
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_BACKTRACE=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_HPWORKPRIORITY=192
CONFIG_SPINLOCK=y
CONFIG_STACK_COLORATION=y
CONFIG_START_MONTH=11
CONFIG_START_YEAR=2022
CONFIG_SYMTAB_ORDEREDBYNAME=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_SYSTEM=y
CONFIG_SYSTEM_TIME64=y
CONFIG_TESTING_GETPRIME=y
CONFIG_TESTING_OSTEST=y
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_USEC_PER_TICK=1000
CONFIG_USERLED=y
CONFIG_USERLED_LOWER=y
CONFIG_ZYNQ_ENET=y
CONFIG_ZYNQ_GMAC_NRXBUFFERS=256
CONFIG_ZYNQ_GMAC_NTXBUFFERS=256
CONFIG_ZYNQ_GMAC_PHYADDR=12
4 changes: 4 additions & 0 deletions boards/arm64/zynq-mpsoc/zcu111/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ ifeq ($(CONFIG_USERLED),y)
CSRCS += zcu111_userleds.c
endif

ifeq ($(CONFIG_NET),y)
CSRCS += zcu111_ethernet.c
endif

ifeq ($(CONFIG_ETC_ROMFS),y)
RCSRCS = etc/init.d/rc.sysinit etc/init.d/rcS
endif
Expand Down

0 comments on commit 20362b3

Please sign in to comment.