From 22f2d39e2152f38878b2952a07dd9ac76bac2878 Mon Sep 17 00:00:00 2001 From: zouboan Date: Wed, 5 Feb 2025 21:50:52 +0800 Subject: [PATCH] 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. --- arch/arm64/src/zynq-mpsoc/Kconfig | 10 ++ arch/arm64/src/zynq-mpsoc/zynq_boot.c | 7 -- arch/arm64/src/zynq-mpsoc/zynq_enet.c | 16 ++- .../zcu111/configs/{net => netjtag}/defconfig | 26 ++++- .../zcu111/configs/netnsh/defconfig | 105 ++++++++++++++++++ boards/arm64/zynq-mpsoc/zcu111/src/Makefile | 4 + 6 files changed, 152 insertions(+), 16 deletions(-) rename boards/arm64/zynq-mpsoc/zcu111/configs/{net => netjtag}/defconfig (79%) create mode 100644 boards/arm64/zynq-mpsoc/zcu111/configs/netnsh/defconfig diff --git a/arch/arm64/src/zynq-mpsoc/Kconfig b/arch/arm64/src/zynq-mpsoc/Kconfig index 128cf1b100f..70bad2c1a86 100644 --- a/arch/arm64/src/zynq-mpsoc/Kconfig +++ b/arch/arm64/src/zynq-mpsoc/Kconfig @@ -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 diff --git a/arch/arm64/src/zynq-mpsoc/zynq_boot.c b/arch/arm64/src/zynq-mpsoc/zynq_boot.c index 0580e37939c..c2d3ff753d8 100644 --- a/arch/arm64/src/zynq-mpsoc/zynq_boot.c +++ b/arch/arm64/src/zynq-mpsoc/zynq_boot.c @@ -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 diff --git a/arch/arm64/src/zynq-mpsoc/zynq_enet.c b/arch/arm64/src/zynq-mpsoc/zynq_enet.c index 135dd833dec..e74e8a5d6ed 100644 --- a/arch/arm64/src/zynq-mpsoc/zynq_enet.c +++ b/arch/arm64/src/zynq-mpsoc/zynq_enet.c @@ -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 diff --git a/boards/arm64/zynq-mpsoc/zcu111/configs/net/defconfig b/boards/arm64/zynq-mpsoc/zcu111/configs/netjtag/defconfig similarity index 79% rename from boards/arm64/zynq-mpsoc/zcu111/configs/net/defconfig rename to boards/arm64/zynq-mpsoc/zcu111/configs/netjtag/defconfig index 301bf6fff84..23732710be8 100644 --- a/boards/arm64/zynq-mpsoc/zcu111/configs/net/defconfig +++ b/boards/arm64/zynq-mpsoc/zcu111/configs/netjtag/defconfig @@ -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 diff --git a/boards/arm64/zynq-mpsoc/zcu111/configs/netnsh/defconfig b/boards/arm64/zynq-mpsoc/zcu111/configs/netnsh/defconfig new file mode 100644 index 00000000000..b12abead1c3 --- /dev/null +++ b/boards/arm64/zynq-mpsoc/zcu111/configs/netnsh/defconfig @@ -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 diff --git a/boards/arm64/zynq-mpsoc/zcu111/src/Makefile b/boards/arm64/zynq-mpsoc/zcu111/src/Makefile index 252de5d0f73..a0eacd701e7 100644 --- a/boards/arm64/zynq-mpsoc/zcu111/src/Makefile +++ b/boards/arm64/zynq-mpsoc/zcu111/src/Makefile @@ -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