add armv8 compile suppout to lwip

This commit is contained in:
lr 2024-06-05 14:20:16 +08:00
parent 525e02c275
commit dca029936f
8 changed files with 66 additions and 92 deletions

View File

@ -43,9 +43,9 @@ INC_DIR = -I$(KERNEL_ROOT)/services/shell/letter-shell \
-I$(KERNEL_ROOT)/services/app
ifeq ($(BOARD), imx6q-sabrelite)
all: init test_fault simple_client simple_server shell fs_server semaphore_server test_semaphore test_ipc_null test_thread test_irq_hdlr test_irq_block test_irq_send eth_driver epit_server test_net lwip ethernet readme.txt | bin
all: init test_fault simple_client simple_server shell fs_server semaphore_server test_semaphore test_ipc_null test_thread test_irq_hdlr test_irq_block test_irq_send eth_driver epit_server test_net lwip readme.txt | bin
else
all: init test_fault simple_client simple_server shell fs_server semaphore_server test_ipc_null test_thread test_semaphore readme.txt | bin
all: init test_fault simple_client simple_server shell fs_server semaphore_server test_ipc_null test_thread test_semaphore test_net lwip readme.txt | bin
endif
../tools/mkfs/mkfs ./fs.img $^
@mv $(filter-out readme.txt, $^) bin
@ -64,9 +64,9 @@ eth_driver: enet_drv.o enet_test.o board_network.o enet_iomux_config.o imx6dq_gp
@${ld} ${user_ldflags} -e main -o $@ $^ ${board_specs}
@${objdump} -S $@ > $@.asm
ethernet: test_gmac.o hal_gmac.o hal_gmac_3568.o hal_base.o hal_bsp.o hal_pinctrl_v2.o hal_cru.o hal_cache.o hal_gpio.o hal_timer.o hal_cru_rk3568.o system_rk3568.o hal_debug.o libserial.o printf.o libmem.o usyscall.o arch_usyscall.o session.o libipc.o
@${ld} ${user_ldflags} -e main -o $@ $^ ${board_specs}
@${objdump} -S $@ > $@.asm
# ethernet: test_gmac.o hal_gmac.o hal_gmac_3568.o hal_base.o hal_bsp.o hal_pinctrl_v2.o hal_cru.o hal_cache.o hal_gpio.o hal_timer.o hal_cru_rk3568.o system_rk3568.o hal_debug.o libserial.o printf.o libmem.o usyscall.o arch_usyscall.o session.o libipc.o
# @${ld} ${user_ldflags} -e main -o $@ $^ ${board_specs}
# @${objdump} -S $@ > $@.asm
epit_server: timer.o epit.o ccm_pll.o usyscall.o arch_usyscall.o libserial.o printf.o libipc.o session.o
@${ld} ${user_ldflags} -e main -o $@ $^ ${board_specs}

View File

@ -1,4 +1,4 @@
SRC_DIR := hal
SRC_DIR :=
include $(KERNEL_ROOT)/compiler.mk

View File

@ -1,23 +1,28 @@
ifeq ($(BOARD), imx6q-sabrelite)
toolchain ?= arm-none-eabi-
user_ldflags = --specs=nosys.specs -Wl,-Map=user.map,-cref -N
cflags = -std=c11 -O2 -march=armv7-a -mtune=cortex-a9 -nostdlib -nodefaultlibs -mfloat-abi=soft -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie
endif
ifeq ($(BOARD), zynq7000-zc702)
toolchain ?= arm-xilinx-eabi-
user_ldflags = -Wl,--start-group,-lgcc,-lc,--end-group -N
cflags = -std=c11 -O2 -march=armv7-a -mtune=cortex-a9 -nostdlib -nodefaultlibs -mfloat-abi=soft -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie
board_specs = stub.o
#cflags = -Wall -g -std=c11
endif
ifeq ($(BOARD), ok1028a-c)
toolchain ?= aarch64-none-elf-
user_ldflags = -N -Ttext 0
cflags = -g -std=c11 -mtune=cortex-a72 -nostdlib -nodefaultlibs -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -fno-omit-frame-pointer -fno-stack-protector -fno-pie
board_specs = stub.o
endif
cc = ${toolchain}gcc
ld = ${toolchain}g++
objdump = ${toolchain}objdump
user_ldflags = -N -Ttext 0
cflags = -std=c11 -g -march=armv7-a -mtune=cortex-a9 \
-Wno-unused -Wno-format -fno-common -ffreestanding -fno-builtin -static \
-Wno-unaligned-access -fdce -Wall -Werror -Wno-uninitialized -Wno-strict-aliasing -fdiagnostics-show-option \
-mapcs -marm -mfpu=neon -ftree-vectorize -fno-math-errno -funsafe-math-optimizations -fno-signed-zeros -mfloat-abi=softfp \
-fno-omit-frame-pointer -fno-stack-protector -fno-pie
# cflags = -std=c11 -march=armv7-a -mtune=cortex-a9 -nostdlib -nodefaultlibs -mfloat-abi=soft -fno-pic \
# -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie
c_useropts = -O2
c_useropts = -O0
INC_DIR = -I$(KERNEL_ROOT)/services/app \

View File

@ -1577,7 +1577,7 @@ HAL_Status HAL_GMAC_DMARxDescInit(struct GMAC_HANDLE *pGMAC,
/* Get the pointer on the ith member of the Rx Desc list */
desc = rxDescs + i;
desc->des0 = (uint32_t)(rxBuff + i * HAL_GMAC_MAX_PACKET_SIZE);
desc->des0 = (uint64_t)(rxBuff + i * HAL_GMAC_MAX_PACKET_SIZE);
desc->des1 = 0;
desc->des2 = 0;
desc->des3 = GMAC_DESC3_OWN | GMAC_DESC3_BUF1V | GMAC_DESC3_IOC;
@ -1787,9 +1787,9 @@ HAL_Status HAL_GMAC_Start(struct GMAC_HANDLE *pGMAC, uint8_t *addr)
value |= (rxFifosz << DMA_CH0_RX_CONTROL_RBSZ_SHIFT) & DMA_CH0_RX_CONTROL_RBSZ_MASK;
value = value | (8 << DMA_CH0_RX_CONTROL_RXPBL_SHIFT);
WRITE_REG(pGMAC->pReg->DMA_CH0_RX_CONTROL, value);
WRITE_REG(pGMAC->pReg->DMA_CH0_RXDESC_LIST_ADDRESS, (uint32_t)pGMAC->rxDescs);
WRITE_REG(pGMAC->pReg->DMA_CH0_RXDESC_LIST_ADDRESS, (uint64_t)pGMAC->rxDescs);
WRITE_REG(pGMAC->pReg->DMA_CH0_RXDESC_TAIL_POINTER,
(uint32_t)(pGMAC->rxDescs + pGMAC->rxSize));
(uint64_t)(pGMAC->rxDescs + pGMAC->rxSize));
/* init tx chan */
value = READ_REG(pGMAC->pReg->DMA_CH0_TX_CONTROL);
@ -1797,8 +1797,8 @@ HAL_Status HAL_GMAC_Start(struct GMAC_HANDLE *pGMAC, uint8_t *addr)
value |= DMA_CH0_TX_CONTROL_OSF;
WRITE_REG(pGMAC->pReg->DMA_CH0_TX_CONTROL, value);
WRITE_REG(pGMAC->pReg->DMA_CH0_TXDESC_LIST_ADDRESS, (uint32_t)pGMAC->txDescs);
WRITE_REG(pGMAC->pReg->DMA_CH0_TXDESC_TAIL_POINTER, (uint32_t)pGMAC->txDescs);
WRITE_REG(pGMAC->pReg->DMA_CH0_TXDESC_LIST_ADDRESS, (uint64_t)pGMAC->txDescs);
WRITE_REG(pGMAC->pReg->DMA_CH0_TXDESC_TAIL_POINTER, (uint64_t)pGMAC->txDescs);
HAL_GMAC_WriteHWAddr(pGMAC, addr);
@ -1978,7 +1978,7 @@ HAL_Status HAL_GMAC_Send(struct GMAC_HANDLE *pGMAC, void *packet,
pGMAC->txDescIdx++;
pGMAC->txDescIdx %= pGMAC->txSize;
desc->des0 = (uint32_t)packet;
desc->des0 = (uint64_t)packet;
desc->des1 = 0;
desc->des2 = length;
/*
@ -1988,7 +1988,7 @@ HAL_Status HAL_GMAC_Send(struct GMAC_HANDLE *pGMAC, void *packet,
desc->des3 = GMAC_DESC3_OWN | GMAC_DESC3_FD | GMAC_DESC3_LD;
WRITE_REG(pGMAC->pReg->DMA_CH0_TXDESC_TAIL_POINTER,
(uint32_t)(pGMAC->txDescs + pGMAC->txDescIdx));
(uint64_t)(pGMAC->txDescs + pGMAC->txDescIdx));
for (i = 0; i < 1000000; i++) {
if (!(desc->des3 & GMAC_DESC3_OWN)) {
@ -2078,12 +2078,12 @@ void HAL_GMAC_CleanRX(struct GMAC_HANDLE *pGMAC)
/* Get the pointer on the ith member of the Tx Desc list */
desc = pGMAC->rxDescs + pGMAC->rxDescIdx;
desc->des0 = (uint32_t)(pGMAC->rxBuf + (pGMAC->rxDescIdx *
desc->des0 = (uint64_t)(pGMAC->rxBuf + (pGMAC->rxDescIdx *
HAL_GMAC_MAX_PACKET_SIZE));
desc->des1 = 0;
desc->des2 = 0;
desc->des3 = GMAC_DESC3_OWN | GMAC_DESC3_BUF1V | GMAC_DESC3_IOC;
WRITE_REG(pGMAC->pReg->DMA_CH0_RXDESC_TAIL_POINTER, (uint32_t)desc);
WRITE_REG(pGMAC->pReg->DMA_CH0_RXDESC_TAIL_POINTER, (uint64_t)desc);
pGMAC->rxDescIdx++;
pGMAC->rxDescIdx %= pGMAC->rxSize;

View File

@ -105,7 +105,6 @@ static uint8_t dstAddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
#if defined(HAL_GMAC_MODULE_ENABLED) && defined(SOC_RK3568)
static struct GMAC_ETH_CONFIG ethConfigTable[] =
{
#ifdef HAL_GMAC0
{
.halDev = &g_gmac0Dev,
.mode = PHY_INTERFACE_MODE_RGMII,
@ -121,7 +120,6 @@ static struct GMAC_ETH_CONFIG ethConfigTable[] =
.txDelay = 0x3C,
.rxDelay = 0x2f,
},
#endif
#ifdef HAL_GMAC1
{
@ -143,46 +141,9 @@ static struct GMAC_ETH_CONFIG ethConfigTable[] =
};
#endif
#if defined(HAL_GMAC1000_MODULE_ENABLED) && defined(SOC_RK3358)
static struct GMAC_ETH_CONFIG ethConfigTable[] =
{
#ifdef HAL_GMAC0
{
.halDev = &g_gmacDev,
.mode = PHY_INTERFACE_MODE_RMII,
.maxSpeed = 100,
.speed = 100,
.phyAddr = 0,
.extClk = false,
.resetGpioBank = GPIO2,
.resetGpioNum = GPIO_PIN_B5,
.resetDelayMs = { 0, 50, 50 },
},
#endif
};
#endif
#if defined(HAL_GMAC1000_MODULE_ENABLED) && defined(SOC_RK3308)
static struct GMAC_ETH_CONFIG ethConfigTable[] =
{
#ifdef HAL_GMAC0
{
.halDev = &g_gmac0Dev,
.mode = PHY_INTERFACE_MODE_RMII,
.maxSpeed = 100,
.speed = 100,
.phyAddr = 0,
.extClk = true,
.resetGpioBank = GPIO4,
.resetGpioNum = GPIO_PIN_C0,
.resetDelayMs = { 0, 50, 50 },
},
#endif
};
#endif
/********************* Private Function Definition ***************************/
@ -226,7 +187,7 @@ static void print_desc(struct GMAC_HANDLE *pGMAC)
for (nIndex = 0; nIndex < pGMAC->rxSize; nIndex++) {
desc = pGMAC->rxDescs + nIndex;
printf("rx_desc[%d]@0x%08lx={0x%lx, 0x%lx, 0x%lx, 0x%lx};\n",
nIndex, (uint32_t)desc, desc->des0, desc->des1, desc->des2, desc->des3);
nIndex, (uint64_t)desc, desc->des0, desc->des1, desc->des2, desc->des3);
}
}
@ -235,7 +196,7 @@ static void print_desc(struct GMAC_HANDLE *pGMAC)
for (nIndex = 0; nIndex < pGMAC->txSize; nIndex++) {
desc = pGMAC->txDescs + nIndex;
printf("tx_desc[%d]@0x%08lx={0x%lx, 0x%lx, 0x%lx, 0x%lx};\n",
nIndex, (uint32_t)desc, desc->des0, desc->des1, desc->des2, desc->des3);
nIndex, (uint64_t)desc, desc->des0, desc->des1, desc->des2, desc->des3);
}
}
}
@ -274,9 +235,9 @@ static void PHY_Read(struct GMAC_HANDLE *pGMAC, uint32_t phyReg)
}
}
static void PHY_Write(uint32_t phyReg, uint32_t data)
static void PHY_Write(struct GMAC_HANDLE *pGMAC, uint32_t phyReg, uint32_t data)
{
struct GMAC_HANDLE *pGMAC;
// struct GMAC_HANDLE *pGMAC;
int status;
status = HAL_GMAC_MDIOWrite(pGMAC, pGMAC->phyConfig.phyAddress, phyReg, data);
@ -477,14 +438,14 @@ static void *malloc_align(size_t size, size_t align)
ptr = malloc(align_size);
if (ptr != NULL) {
/* the allocated memory block is aligned */
if (((uint32_t)ptr & (align - 1)) == 0) {
align_ptr = (void *)((uint32_t)ptr + align);
if (((uint64_t)ptr & (align - 1)) == 0) {
align_ptr = (void *)((uint64_t)ptr + align);
} else {
align_ptr = (void *)(((uint32_t)ptr + (align - 1)) & ~(align - 1));
align_ptr = (void *)(((uint64_t)ptr + (align - 1)) & ~(align - 1));
}
/* set the pointer before alignment pointer to the real pointer */
*((uint32_t *)((uint32_t)align_ptr - sizeof(void *))) = (uint32_t)ptr;
*((uint64_t *)((uint64_t)align_ptr - sizeof(void *))) = (uint64_t)ptr;
ptr = align_ptr;
}
@ -496,7 +457,7 @@ static void free_align(void *ptr)
{
void *real_ptr;
real_ptr = (void *)*(uint32_t *)((uint32_t)ptr - sizeof(void *));
real_ptr = (void *)*(uint64_t *)((uint64_t)ptr - sizeof(void *));
free(real_ptr);
}
@ -534,7 +495,7 @@ static HAL_Status GMAC_Send_Test(struct GMAC_ETH_CONFIG *eth, struct GMAC_HANDLE
/* dump packages */
Dump_Hex("Tx", ptr, len);
HAL_DCACHE_CleanByRange((uint32_t)ptr, len);
HAL_DCACHE_CleanByRange((uint64_t)ptr, len);
status = HAL_GMAC_Send(pGMAC, ptr, len);
if (status) {
printf("GMAC send failed: %d\n", status);
@ -559,7 +520,7 @@ static uint16_t GMAC_Recv_Test(struct GMAC_HANDLE *pGMAC)
if (size > 0 && ptr) {
/* dump packages */
Dump_Hex("Rx", ptr, size);
HAL_DCACHE_InvalidateByRange((uint32_t)ptr, size);
HAL_DCACHE_InvalidateByRange((uint64_t)ptr, size);
HAL_GMAC_CleanRX(pGMAC);
} else {
printf("GMAC recv failed: %ld\n", size);
@ -590,10 +551,10 @@ static HAL_Status GMAC_Memory_Init(struct GMAC_ETH_CONFIG *eth, struct GMAC_HAND
memset(eth->txDescs, 0, GMAC_DESC_TX_SIZE);
memset(eth->rxBuff, 0, GMAC_RX_BUFFER_SIZE);
HAL_DCACHE_InvalidateByRange((uint32_t)eth->rxBuff, GMAC_RX_BUFFER_SIZE);
HAL_DCACHE_InvalidateByRange((uint64_t)eth->rxBuff, GMAC_RX_BUFFER_SIZE);
memset(eth->txBuff, 0, GMAC_TX_BUFFER_SIZE);
HAL_DCACHE_CleanByRange((uint32_t)eth->txBuff, GMAC_TX_BUFFER_SIZE);
HAL_DCACHE_CleanByRange((uint64_t)eth->txBuff, GMAC_TX_BUFFER_SIZE);
HAL_GMAC_DMARxDescInit(pGMAC, eth->rxDescs, eth->rxBuff, GMAC_DESCRIPTORS_RX);
HAL_GMAC_DMATxDescInit(pGMAC, eth->txDescs, eth->txBuff, GMAC_DESCRIPTORS_TX);
@ -719,7 +680,7 @@ static void GMAC_Iomux_Config(uint8_t id)
GMAC0_Iomux_Config();
// }
}
#endif
@ -727,7 +688,7 @@ static void GMAC_Iomux_Config(uint8_t id)
/*************************** GMAC TEST MAIN ****************************/
void main() {
int main() {
struct GMAC_ETH_CONFIG *eth;
struct GMAC_HANDLE *pGMAC;
int32_t bus, num = 0, i;
@ -743,7 +704,7 @@ void main() {
if (eth) {
pGMAC = &eth->instance;
} else {
return;
return -1;
}
/* ionmux */
@ -790,5 +751,6 @@ void main() {
free_align(eth->txBuff);
free_align(eth->rxBuff);
}
return 0;
}

View File

@ -52,20 +52,12 @@ __STATIC_FORCEINLINE void __set_ACTLR(uint32_t actlr)
/** \brief Get CPACR
\return Coprocessor Access Control register value
*/
__STATIC_FORCEINLINE uint32_t __get_CPACR(void)
{
uint32_t result;
__get_CP(15, 0, result, 1, 0, 2);
return result;
}
/** \brief Set CPACR
\param [in] cpacr Coprocessor Access Control value to set
*/
__STATIC_FORCEINLINE void __set_CPACR(uint32_t cpacr)
{
__set_CP(15, 0, cpacr, 1, 0, 2);
}
/** \brief Get DFSR
\return Data Fault Status Register value

View File

@ -9,10 +9,17 @@ user_ldflags = --start-group,-lgcc,-lc,--end-group
cflags = -std=c11 -march=armv7-a -mtune=cortex-a9 -nostdlib -nodefaultlibs -mfloat-abi=soft -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie
#cflags = -Wall -g -std=c11
endif
ifeq ($(BOARD), ok1028a-c)
toolchain ?= aarch64-none-elf-
user_ldflags = -N -Ttext 0
cflags = -Wall -g -std=c11 -mtune=cortex-a72 -nostdlib -nodefaultlibs -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie
board_specs = stub.o
endif
cc = ${toolchain}gcc
ld = ${toolchain}g++
objdump = ${toolchain}objdump
c_useropts = -O2
INC_DIR = -I$(KERNEL_ROOT)/services/net/libnet \

View File

@ -10,6 +10,14 @@ cflags = -std=c11 -march=armv7-a -mtune=cortex-a9 -nostdlib -nodefaultlibs -mflo
board_specs = stub.o
#cflags = -Wall -g -std=c11
endif
ifeq ($(BOARD), ok1028a-c)
toolchain ?= aarch64-none-elf-
user_ldflags = -N -Ttext 0
cflags = -Wall -g -std=c11 -mtune=cortex-a72 -nostdlib -nodefaultlibs -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -ggdb -Wno-unused -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie
board_specs = $(KERNEL_ROOT)/services/app/stub.o
endif
cc = ${toolchain}gcc
ld = ${toolchain}g++
objdump = ${toolchain}objdump