arch/zynq-mpsoc improve the ethernet driver

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 #15720 which is nonsynchronous with local code.
This commit is contained in:
zouboan 2025-02-05 21:50:52 +08:00 • committed by archer
parent 9754fdf63c
commit 22f2d39e21
6 changed files with 152 additions and 16 deletions

View file

@ -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

View file

@ -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

View file

@ -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 */
@ -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;
@ -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

View file

@ -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
@ -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

View file

@ -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

View file

@ -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