[PATCH rtems-lwip 1/1] Add ZYNQ 7000 support
berndmoessner80 at gmail.com
berndmoessner80 at gmail.com
Sat Jan 6 15:15:19 UTC 2024
From: Bernd Moessner <berndmoessner80 at gmail.com>
This patch adds support for the Xilinx ZYNQ 7000 series. Please note that this patch also affects ZYNQ Ultrascale+ as I`ve moved some functions from zynqmp/xil_shims.c to xilinx/freertos.c and xilinx/xscugic.c to share them between both families.
---
defs/bsps/aarch64/xilinx_zynqmp_base.json | 2 +
defs/bsps/arm/xilinx_zynq_base.json | 28 ++++++
defs/bsps/arm/xilinx_zynq_picozed.json | 13 +++
.../ports/xilinx/include/netif/xadapter.h | 4 +
.../contrib/ports/xilinx/netif/xemacpsif.c | 18 ++++
.../ports/xilinx/netif/xemacpsif_dma.c | 14 +++
.../bsp/standalone/src/arm/cortexa9/xil_mmu.h | 92 +++++++++++++++++++
rtemslwip/xilinx/freertos.c | 64 +++++++++++++
rtemslwip/xilinx/xpseudo_asm.h | 5 +
rtemslwip/xilinx/xscugic_hw.c | 40 ++++++++
rtemslwip/zynq/common_lwipopts.h | 3 +
rtemslwip/zynq/xil_shims.c | 42 +++++++++
rtemslwip/zynq/xlwipconfig.h | 38 ++++++++
rtemslwip/zynq_picozed/lwipbspopts.h | 1 +
rtemslwip/zynq_picozed/netstart.c | 66 +++++++++++++
rtemslwip/zynq_picozed/xemacps_g.c | 35 +++++++
rtemslwip/zynq_picozed/xparameters_ps.h | 72 +++++++++++++++
rtemslwip/zynq_picozed/xtopology_g.c | 40 ++++++++
rtemslwip/zynqmp/xil_shims.c | 45 ---------
19 files changed, 577 insertions(+), 45 deletions(-)
create mode 100644 defs/bsps/arm/xilinx_zynq_base.json
create mode 100644 defs/bsps/arm/xilinx_zynq_picozed.json
create mode 100644 embeddedsw/lib/bsp/standalone/src/arm/cortexa9/xil_mmu.h
create mode 100644 rtemslwip/xilinx/freertos.c
create mode 100644 rtemslwip/xilinx/xscugic_hw.c
create mode 100644 rtemslwip/zynq/common_lwipopts.h
create mode 100644 rtemslwip/zynq/xil_shims.c
create mode 100644 rtemslwip/zynq/xlwipconfig.h
create mode 100644 rtemslwip/zynq_picozed/lwipbspopts.h
create mode 100644 rtemslwip/zynq_picozed/netstart.c
create mode 100644 rtemslwip/zynq_picozed/xemacps_g.c
create mode 100644 rtemslwip/zynq_picozed/xparameters_ps.h
create mode 100644 rtemslwip/zynq_picozed/xtopology_g.c
diff --git a/defs/bsps/aarch64/xilinx_zynqmp_base.json b/defs/bsps/aarch64/xilinx_zynqmp_base.json
index 600415d..f8f4c14 100644
--- a/defs/bsps/aarch64/xilinx_zynqmp_base.json
+++ b/defs/bsps/aarch64/xilinx_zynqmp_base.json
@@ -9,6 +9,8 @@
"embeddedsw/lib/bsp/standalone/src/arm/ARMv8/64bit"
],
"source-files-to-import": [
+ "rtemslwip/xilinx/freertos.c",
+ "rtemslwip/xilinx/xscugic_hw.c",
"rtemslwip/zynqmp/xemacps_g.c",
"rtemslwip/zynqmp/xil_shims.c",
"rtemslwip/zynqmp/xtopology_g.c",
diff --git a/defs/bsps/arm/xilinx_zynq_base.json b/defs/bsps/arm/xilinx_zynq_base.json
new file mode 100644
index 0000000..aad0640
--- /dev/null
+++ b/defs/bsps/arm/xilinx_zynq_base.json
@@ -0,0 +1,28 @@
+{
+ "header-paths-to-import": [
+ "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/include",
+ "embeddedsw/lib/bsp/standalone/src/common",
+ "embeddedsw/XilinxProcessorIPLib/drivers/scugic/src",
+ "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src",
+ "rtemslwip/xilinx",
+ "rtemslwip/zynq",
+ "embeddedsw/lib/bsp/standalone/src/arm/cortexa9",
+ "embeddedsw/lib/bsp/standalone/src/arm/common"
+ ],
+ "source-files-to-import": [
+ "rtemslwip/zynq/xil_shims.c",
+ "rtemslwip/xilinx/freertos.c",
+ "rtemslwip/xilinx/xscugic_hw.c",
+ "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xadapter.c",
+ "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xpqueue.c",
+ "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif.c",
+ "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_dma.c",
+ "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_hw.c",
+ "embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_physpeed.c",
+ "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_bdring.c",
+ "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps.c",
+ "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_control.c",
+ "embeddedsw/XilinxProcessorIPLib/drivers/emacps/src/xemacps_intr.c",
+ "embeddedsw/lib/bsp/standalone/src/common/xil_assert.c"
+ ]
+}
diff --git a/defs/bsps/arm/xilinx_zynq_picozed.json b/defs/bsps/arm/xilinx_zynq_picozed.json
new file mode 100644
index 0000000..feb4188
--- /dev/null
+++ b/defs/bsps/arm/xilinx_zynq_picozed.json
@@ -0,0 +1,13 @@
+{
+ "includes": [
+ "xilinx_zynq_base"
+ ],
+ "header-paths-to-import": [
+ "rtemslwip/zynq_picozed"
+ ],
+ "source-files-to-import": [
+ "rtemslwip/zynq_picozed/xemacps_g.c",
+ "rtemslwip/zynq_picozed/xtopology_g.c",
+ "rtemslwip/zynq_picozed/netstart.c"
+ ]
+}
diff --git a/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/include/netif/xadapter.h b/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/include/netif/xadapter.h
index 4d32b7f..aa491b7 100644
--- a/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/include/netif/xadapter.h
+++ b/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/include/netif/xadapter.h
@@ -53,7 +53,11 @@ struct xemac_s {
#if !NO_SYS
sys_sem_t sem_rx_data_available;
#if defined(__arm__) && !defined(ARMR5)
+#ifndef __rtems__
TimerHandle_t xTimer;
+#else /* __rtems__ */
+ rtems_id xTimer;
+#endif
#endif
#endif
};
diff --git a/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif.c b/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif.c
index 5328e86..3e36771 100644
--- a/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif.c
+++ b/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif.c
@@ -329,11 +329,19 @@ s32_t xemacpsif_input(struct netif *netif)
#if !NO_SYS
#if defined(__arm__) && !defined(ARMR5)
+#ifndef __rtems__
void vTimerCallback( TimerHandle_t pxTimer )
{
/* Do something if the pxTimer parameter is NULL */
configASSERT(pxTimer);
+#else /* __rtems__ */
+static rtems_timer_service_routine vTimerCallback(
+ rtems_id timer,
+ void *arg
+)
+{
+#endif
lExpireCounter++;
/* If the timer has expired 100 times then reset RX */
if(lExpireCounter >= RESETRXTIMEOUT) {
@@ -434,6 +442,7 @@ static err_t low_level_init(struct netif *netif)
XEMACPS_DMACR_OFFSET, dmacrreg);
#if !NO_SYS
#if defined(__arm__) && !defined(ARMR5)
+#ifndef __rtems__
/* Freertos tick is 10ms by default; set period to the same */
xemac->xTimer = xTimerCreate("Timer", 10, pdTRUE, ( void * ) 1, vTimerCallback);
if (xemac->xTimer == NULL) {
@@ -443,6 +452,15 @@ static err_t low_level_init(struct netif *netif)
xil_printf("In %s:Timer start failed....\r\n", __func__);
}
}
+#else /* __rtems__ */
+ rtems_status_code ret = rtems_timer_create( rtems_build_name( 'L', 'W', 'M', 'R' ), &xemac->xTimer);
+ if(RTEMS_SUCCESSFUL == ret){
+ ret = rtems_timer_fire_after(xemac->xTimer, rtems_clock_get_ticks_per_second()/100, vTimerCallback, NULL);
+ }
+ if(RTEMS_SUCCESSFUL != ret){
+ xil_printf("In %s:Timer setup failed....\r\n", __func__);
+ }
+#endif
#endif
#endif
setup_isr(xemac);
diff --git a/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_dma.c b/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_dma.c
index 1d2439a..c222835 100644
--- a/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_dma.c
+++ b/embeddedsw/ThirdParty/sw_services/lwip211/src/contrib/ports/xilinx/netif/xemacpsif_dma.c
@@ -114,7 +114,15 @@ volatile u32_t notifyinfo[4*XLWIP_CONFIG_N_TX_DESC];
#if defined __aarch64__
u8_t bd_space[0x200000] __attribute__ ((aligned (0x200000)));
#else
+#ifndef __rtems__
u8_t bd_space[0x100000] __attribute__ ((aligned (0x100000)));
+#else /* __rtems__ */
+#if defined(__arm__) && !defined(ARMR5)
+u8_t bd_space[0x100000] __attribute__ ((section(".bsp_nocache"), aligned (0x100000)));
+#else
+u8_t bd_space[0x100000] __attribute__ ((aligned (0x100000)));
+#endif
+#endif
#endif
static volatile u32_t bd_space_index = 0;
static volatile u32_t bd_space_attr_set = 0;
@@ -676,7 +684,13 @@ XStatus init_dma(struct xemac_s *xemac)
#if defined __aarch64__
Xil_SetTlbAttributes((u64)bd_space, NORM_NONCACHE | INNER_SHAREABLE);
#else
+#ifndef __rtems__
Xil_SetTlbAttributes((s32_t)bd_space, DEVICE_MEMORY); // addr, attr
+#else /* __rtems__ */
+#if !defined(__arm__)
+ Xil_SetTlbAttributes((s32_t)bd_space, DEVICE_MEMORY); // addr, attr
+#endif
+#endif
#endif
#endif
bd_space_attr_set = 1;
diff --git a/embeddedsw/lib/bsp/standalone/src/arm/cortexa9/xil_mmu.h b/embeddedsw/lib/bsp/standalone/src/arm/cortexa9/xil_mmu.h
new file mode 100644
index 0000000..d21e13a
--- /dev/null
+++ b/embeddedsw/lib/bsp/standalone/src/arm/cortexa9/xil_mmu.h
@@ -0,0 +1,92 @@
+/******************************************************************************
+* Copyright (c) 2012 - 2021 Xilinx, Inc. All rights reserved.
+* SPDX-License-Identifier: MIT
+******************************************************************************/
+
+/*****************************************************************************/
+/**
+* @file xil_mmu.h
+*
+* @addtogroup a9_mmu_apis Cortex A9 Processor MMU Functions
+*
+* MMU functions equip users to enable MMU, disable MMU and modify default
+* memory attributes of MMU table as per the need.
+*
+* @{
+*
+* <pre>
+* MODIFICATION HISTORY:
+*
+* Ver Who Date Changes
+* ----- ---- -------- ---------------------------------------------------
+* 1.00a sdm 01/12/12 Initial version
+* 4.2 pkp 07/21/14 Included xil_types.h file which contains definition for
+* u32 which resolves issue of CR#805869
+* 5.4 pkp 23/11/15 Added attribute definitions for Xil_SetTlbAttributes API
+* 6.8 aru 09/06/18 Removed compilation warnings for ARMCC toolchain.
+* </pre>
+*
+*
+******************************************************************************/
+
+/**
+*@cond nocomments
+*/
+
+#ifndef XIL_MMU_H
+#define XIL_MMU_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/***************************** Include Files *********************************/
+
+#include "xil_types.h"
+
+/***************** Macros (Inline Functions) Definitions *********************/
+
+/**************************** Type Definitions *******************************/
+
+/************************** Constant Definitions *****************************/
+
+/* Memory type */
+#define NORM_NONCACHE 0x11DE2 /* Normal Non-cacheable */
+#define STRONG_ORDERED 0xC02 /* Strongly ordered */
+#define DEVICE_MEMORY 0xC06 /* Device memory */
+#define RESERVED 0x0 /* reserved memory */
+
+/* Normal write-through cacheable shareable */
+#define NORM_WT_CACHE 0x16DEA
+
+/* Normal write back cacheable shareable */
+#define NORM_WB_CACHE 0x15DE6
+
+/* shareability attribute */
+#define SHAREABLE (0x1 << 16)
+#define NON_SHAREABLE (~(0x1 << 16))
+
+/* Execution type */
+#define EXECUTE_NEVER ((0x1 << 4) | (0x1 << 0))
+
+/**
+*@endcond
+*/
+
+/************************** Variable Definitions *****************************/
+
+/************************** Function Prototypes ******************************/
+
+void Xil_SetTlbAttributes(INTPTR Addr, u32 attrib);
+void Xil_EnableMMU(void);
+void Xil_DisableMMU(void);
+void* Xil_MemMap(UINTPTR PhysAddr, size_t size, u32 flags);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* XIL_MMU_H */
+/**
+* @} End of "addtogroup a9_mmu_apis".
+*/
diff --git a/rtemslwip/xilinx/freertos.c b/rtemslwip/xilinx/freertos.c
new file mode 100644
index 0000000..90d1f83
--- /dev/null
+++ b/rtemslwip/xilinx/freertos.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2024 On-Line Applications Research Corporation (OAR)
+ * Written by Kinsey Moore <kinsey.moore at oarcorp.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <rtems/rtems/intr.h>
+#include <rtems/score/threadimpl.h>
+#include <stdio.h>
+#include <string.h>
+#include "xil_types.h"
+#include "FreeRTOS.h"
+
+
+/*
+ * XInterruptHandler function pointer signature just happens to exactly match
+ * rtems_interrupt_handler
+ */
+BaseType_t xPortInstallInterruptHandler(
+ uint8_t ucInterruptID,
+ XInterruptHandler pxHandler,
+ void *pvCallBackRef
+)
+{
+ char name[10];
+
+ /* Is this running in the context of any interrupt server tasks? */
+ _Thread_Get_name( _Thread_Get_executing(), name, sizeof( name ) );
+ if (strcmp(name, "IRQS") == 0) {
+ /* Can't run this from within an IRQ Server thread context */
+ return RTEMS_ILLEGAL_ON_SELF;
+ }
+
+ rtems_status_code sc = rtems_interrupt_server_handler_install(
+ RTEMS_INTERRUPT_SERVER_DEFAULT,
+ ucInterruptID,
+ "CGEM Handler",
+ RTEMS_INTERRUPT_UNIQUE,
+ pxHandler,
+ pvCallBackRef
+ );
+
+ return sc;
+}
diff --git a/rtemslwip/xilinx/xpseudo_asm.h b/rtemslwip/xilinx/xpseudo_asm.h
index cb51433..0168ce3 100644
--- a/rtemslwip/xilinx/xpseudo_asm.h
+++ b/rtemslwip/xilinx/xpseudo_asm.h
@@ -28,6 +28,11 @@
#define XPSEUDO_ASM_H
#include <rtems/score/cpu.h>
+#if defined(__arm__) && !defined(ARMR5)
+#define dsb() _ARM_Data_synchronization_barrier()
+#define isb() _ARM_Instruction_synchronization_barrier()
+#else
#define dsb() _AARCH64_Data_synchronization_barrier()
+#endif
#endif
diff --git a/rtemslwip/xilinx/xscugic_hw.c b/rtemslwip/xilinx/xscugic_hw.c
new file mode 100644
index 0000000..9ba14a4
--- /dev/null
+++ b/rtemslwip/xilinx/xscugic_hw.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 On-Line Applications Research Corporation (OAR)
+ * Written by Kinsey Moore <kinsey.moore at oarcorp.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ #include <rtems/rtems/intr.h>
+#include "xil_types.h"
+
+/* Enable the interrupt */
+void XScuGic_EnableIntr ( u32 DistBaseAddress, u32 Int_Id )
+{
+ rtems_interrupt_vector_enable( Int_Id );
+}
+
+/* Disable the interrupt */
+void XScuGic_DisableIntr ( u32 DistBaseAddress, u32 Int_Id )
+{
+ rtems_interrupt_vector_disable( Int_Id );
+}
diff --git a/rtemslwip/zynq/common_lwipopts.h b/rtemslwip/zynq/common_lwipopts.h
new file mode 100644
index 0000000..8b7d870
--- /dev/null
+++ b/rtemslwip/zynq/common_lwipopts.h
@@ -0,0 +1,3 @@
+#include <xparameters_ps.h>
+#include <xlwipopts.h>
+#define MEM_ALIGNMENT 64
diff --git a/rtemslwip/zynq/xil_shims.c b/rtemslwip/zynq/xil_shims.c
new file mode 100644
index 0000000..50afcf8
--- /dev/null
+++ b/rtemslwip/zynq/xil_shims.c
@@ -0,0 +1,42 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2024 Bernd Moessner
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "xil_mmu.h"
+#include <rtems/rtems/cache.h>
+#include <stdio.h>
+#include <string.h>
+
+
+void Xil_DCacheInvalidateRange( INTPTR adr, INTPTR len )
+{
+ rtems_cache_flush_multiple_data_lines( (const void *) adr, len );
+}
+
+void Xil_DCacheFlushRange( INTPTR adr, INTPTR len )
+{
+ Xil_DCacheInvalidateRange(adr, len );
+}
diff --git a/rtemslwip/zynq/xlwipconfig.h b/rtemslwip/zynq/xlwipconfig.h
new file mode 100644
index 0000000..8144153
--- /dev/null
+++ b/rtemslwip/zynq/xlwipconfig.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 On-Line Applications Research Corporation (OAR)
+ * Written by Kinsey Moore <kinsey.moore at oarcorp.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __XLWIPCONFIG_H_
+#define __XLWIPCONFIG_H_
+
+#define XLWIP_CONFIG_INCLUDE_GEM 1
+#define XLWIP_CONFIG_EMAC_NUMBER 0
+#define XLWIP_CONFIG_N_TX_DESC 64
+#define XLWIP_CONFIG_N_RX_DESC 64
+
+#define XLWIP_CONFIG_N_TX_COALESCE 1
+#define XLWIP_CONFIG_N_RX_COALESCE 1
+
+#endif
diff --git a/rtemslwip/zynq_picozed/lwipbspopts.h b/rtemslwip/zynq_picozed/lwipbspopts.h
new file mode 100644
index 0000000..143e302
--- /dev/null
+++ b/rtemslwip/zynq_picozed/lwipbspopts.h
@@ -0,0 +1 @@
+#include <common_lwipopts.h>
diff --git a/rtemslwip/zynq_picozed/netstart.c b/rtemslwip/zynq_picozed/netstart.c
new file mode 100644
index 0000000..2f11979
--- /dev/null
+++ b/rtemslwip/zynq_picozed/netstart.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 On-Line Applications Research Corporation (OAR)
+ * Written by Kinsey Moore <kinsey.moore at oarcorp.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <netstart.h>
+#include "netif/xadapter.h"
+#include "xparameters.h"
+#include <lwip/tcpip.h>
+
+int start_networking(
+ struct netif *net_interface,
+ ip_addr_t *ipaddr,
+ ip_addr_t *netmask,
+ ip_addr_t *gateway,
+ unsigned char *mac_ethernet_address
+)
+{
+ start_networking_shared();
+
+ if ( !xemac_add(
+ net_interface,
+ ipaddr,
+ netmask,
+ gateway,
+ mac_ethernet_address,
+ XPAR_PS7_ETHERNET_0_BASEADDR
+ ) ) {
+ return 1;
+ }
+
+ netif_set_default( net_interface );
+
+ netif_set_up( net_interface );
+
+ sys_thread_new(
+ "xemacif_input_thread",
+ ( void ( * )( void * ) )xemacif_input_thread,
+ net_interface,
+ 1024,
+ DEFAULT_THREAD_PRIO
+ );
+
+ return 0;
+}
diff --git a/rtemslwip/zynq_picozed/xemacps_g.c b/rtemslwip/zynq_picozed/xemacps_g.c
new file mode 100644
index 0000000..596bc49
--- /dev/null
+++ b/rtemslwip/zynq_picozed/xemacps_g.c
@@ -0,0 +1,35 @@
+/*******************************************************************
+*
+* CAUTION: This file is automatically generated by HSI.
+* Version: 2021.2
+* DO NOT EDIT.
+*
+* Copyright (C) 2010-2023 Xilinx, Inc. All Rights Reserved.
+* SPDX-License-Identifier: MIT
+*
+* Description: Driver configuration
+*
+*******************************************************************/
+
+#include "xparameters.h"
+#include "xparameters_ps.h"
+#include "xemacps.h"
+
+/*
+* The configuration table for devices
+*/
+
+XEmacPs_Config XEmacPs_ConfigTable[XPAR_XEMACPS_NUM_INSTANCES] =
+{
+ {
+ XPAR_PS7_ETHERNET_0_DEVICE_ID,
+ XPAR_PS7_ETHERNET_0_BASEADDR,
+ XPAR_PS7_ETHERNET_0_IS_CACHE_COHERENT,
+ XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV0,
+ XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV1,
+ XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV0,
+ XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV1,
+ XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV0,
+ XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV1
+ }
+};
diff --git a/rtemslwip/zynq_picozed/xparameters_ps.h b/rtemslwip/zynq_picozed/xparameters_ps.h
new file mode 100644
index 0000000..d88a3fe
--- /dev/null
+++ b/rtemslwip/zynq_picozed/xparameters_ps.h
@@ -0,0 +1,72 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2024 Bernd Moessner
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _XPARAMETERS_PS_H_
+#define _XPARAMETERS_PS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define XPAR_SCUGIC_0_DIST_BASEADDR 0xF8F01000U
+#define XPS_SYS_CTRL_BASEADDR 0xF8000000U
+
+#define XPAR_XEMACPS_NUM_INSTANCES 1
+
+#define XPAR_PS7_ETHERNET_0_DEVICE_ID 0
+#define XPAR_PS7_ETHERNET_0_BASEADDR 0xE000B000
+#define XPAR_PS7_ETHERNET_0_HIGHADDR 0xE000BFFF
+#define XPAR_PS7_ETHERNET_0_ENET_CLK_FREQ_HZ 125000000
+#define XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV0 8
+#define XPAR_PS7_ETHERNET_0_ENET_SLCR_1000MBPS_DIV1 1
+#define XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV0 8
+#define XPAR_PS7_ETHERNET_0_ENET_SLCR_100MBPS_DIV1 5
+#define XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV0 8
+#define XPAR_PS7_ETHERNET_0_ENET_SLCR_10MBPS_DIV1 50
+#define XPAR_PS7_ETHERNET_0_ENET_TSU_CLK_FREQ_HZ 0
+
+#define XPAR_PS7_ETHERNET_0_IS_CACHE_COHERENT 0
+#define XPAR_XEMACPS_0_IS_CACHE_COHERENT 0
+
+#define XPAR_XEMACPS_0_DEVICE_ID XPAR_PS7_ETHERNET_0_DEVICE_ID
+#define XPAR_XEMACPS_0_BASEADDR 0xE000B000
+#define XPAR_XEMACPS_0_HIGHADDR 0xE000BFFF
+#define XPAR_XEMACPS_0_ENET_CLK_FREQ_HZ 125000000
+#define XPAR_XEMACPS_0_ENET_SLCR_1000Mbps_DIV0 8
+#define XPAR_XEMACPS_0_ENET_SLCR_1000Mbps_DIV1 1
+#define XPAR_XEMACPS_0_ENET_SLCR_100Mbps_DIV0 8
+#define XPAR_XEMACPS_0_ENET_SLCR_100Mbps_DIV1 5
+#define XPAR_XEMACPS_0_ENET_SLCR_10Mbps_DIV0 8
+#define XPAR_XEMACPS_0_ENET_SLCR_10Mbps_DIV1 50
+#define XPAR_XEMACPS_0_ENET_TSU_CLK_FREQ_HZ 0
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/rtemslwip/zynq_picozed/xtopology_g.c b/rtemslwip/zynq_picozed/xtopology_g.c
new file mode 100644
index 0000000..bf0ee25
--- /dev/null
+++ b/rtemslwip/zynq_picozed/xtopology_g.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2024 Bernd Moessner
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "netif/xtopology.h"
+#include "xparameters.h"
+
+struct xtopology_t xtopology[] = {
+ {
+ 0xE000B000,
+ xemac_type_emacps,
+ 0x0,
+ 0x0,
+ 0xF8F00100,
+ 0x36,
+ },
+};
+
+int xtopology_n_emacs = 1;
diff --git a/rtemslwip/zynqmp/xil_shims.c b/rtemslwip/zynqmp/xil_shims.c
index 1b1b3cf..1b566b6 100644
--- a/rtemslwip/zynqmp/xil_shims.c
+++ b/rtemslwip/zynqmp/xil_shims.c
@@ -57,51 +57,6 @@ void Xil_SetTlbAttributes( UINTPTR Addr, u64 attrib )
}
}
-#include "FreeRTOS.h"
-
-/*
- * XInterruptHandler function pointer signature just happens to exactly match
- * rtems_interrupt_handler
- */
-BaseType_t xPortInstallInterruptHandler(
- uint8_t ucInterruptID,
- XInterruptHandler pxHandler,
- void *pvCallBackRef
-)
-{
- char name[10];
-
- /* Is this running in the context of any interrupt server tasks? */
- _Thread_Get_name( _Thread_Get_executing(), name, sizeof( name ) );
- if (strcmp(name, "IRQS") == 0) {
- /* Can't run this from within an IRQ Server thread context */
- return RTEMS_ILLEGAL_ON_SELF;
- }
-
- rtems_status_code sc = rtems_interrupt_server_handler_install(
- RTEMS_INTERRUPT_SERVER_DEFAULT,
- ucInterruptID,
- "CGEM Handler",
- RTEMS_INTERRUPT_UNIQUE,
- pxHandler,
- pvCallBackRef
- );
-
- return sc;
-}
-
-/* Enable the interrupt */
-void XScuGic_EnableIntr ( u32 DistBaseAddress, u32 Int_Id )
-{
- rtems_interrupt_vector_enable( Int_Id );
-}
-
-/* Disable the interrupt */
-void XScuGic_DisableIntr ( u32 DistBaseAddress, u32 Int_Id )
-{
- rtems_interrupt_vector_disable( Int_Id );
-}
-
/*
* The Xilinx code was written such that it assumed there was no invalidate-only
* functionality on A53 cores. This function must flush and invalidate because
--
2.34.1
More information about the devel
mailing list