Change some compile flags.

This commit is contained in:
TXuian
2024-05-15 17:59:38 +08:00
parent 48abec8a00
commit 52387d47a7
36 changed files with 7264 additions and 7175 deletions
@@ -9,8 +9,16 @@ ld = ${toolchain}g++
objdump = ${toolchain}objdump
user_ldflags = -N -Ttext 0
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 = -O0
cflags = -std=c11 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -g \
-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
INC_DIR = -I$(KERNEL_ROOT)/services/app \
-I$(KERNEL_ROOT)/services/boards/$(BOARD) \
@@ -110,15 +110,6 @@ void imx_enet_iomux(void)
gpio_set_direction(GPIO_PORT6, 24, GPIO_GDIR_OUTPUT);
gpio_set_level(GPIO_PORT6, 24, GPIO_HIGH_LEVEL);
#endif
#ifdef BOARD_SABRE_AI
/* Select ENET, ENET_CAN1_STEER(PORT_EXP_B3) */
max7310_set_gpio_output(1, 2, GPIO_LOW_LEVEL);
/* Select ALT5 mode of GPIO_19 for GPIO4_5 - PGMIT_INT_B */
/* active low input */
gpio_set_gpio(GPIO_PORT4, 5);
gpio_set_direction(GPIO_PORT4, 5, GPIO_GDIR_INPUT);
#endif
}
#ifdef BOARD_SABRE_LITE
@@ -63,15 +63,17 @@ int imx_enet_mii_read(volatile hw_enet_t* enet_reg, unsigned char phy_addr,
while (1) {
if (enet_reg->EIR.U & ENET_EVENT_MII) {
printf("[%s %d], EIR: %08x\n", __func__, __LINE__, enet_reg->EIR.U);
enet_reg->EIR.U = ENET_EVENT_MII;
break;
}
if ((--waiting) == 0)
return -1;
hal_delay_us(ENET_MII_TICK);
hal_delay_us(0);
}
printf("[%s %d], EIR: %08x\n", __func__, __LINE__, enet_reg->EIR.U);
*value = ENET_MII_GET_DATA(enet_reg->MMFR.U);
return 0;
}
@@ -89,6 +91,7 @@ int imx_enet_mii_write(volatile hw_enet_t* enet_reg, unsigned char phy_addr,
}
enet_reg->MMFR.U = ENET_MII_WRITE(phy_addr, reg_addr, value); /* Write CMD */
printf("MMFR.U: %08x value: %08x\n", enet_reg->MMFR.U, value);
while (1) {
if (enet_reg->EIR.U & ENET_EVENT_MII) {
@@ -112,18 +115,16 @@ static void imx_enet_bd_init(imx_enet_priv_t* dev, int dev_idx)
{
int i;
imx_enet_bd_t* p;
imx_enet_bd_t *rx_bd_base = (imx_enet_bd_t*)malloc(sizeof(imx_enet_bd_t)), //
*tx_bd_base = (imx_enet_bd_t*)malloc(sizeof(imx_enet_bd_t));
rx_bd_base += (dev_idx * ENET_BD_RX_NUM);
tx_bd_base += (dev_idx * ENET_BD_TX_NUM);
imx_enet_bd_t *rx_bd_base = (imx_enet_bd_t*)malloc(sizeof(imx_enet_bd_t) * (ENET_BD_RX_NUM * NUM_OF_ETH_DEVS)), //
*tx_bd_base = (imx_enet_bd_t*)malloc(sizeof(imx_enet_bd_t) * (ENET_BD_TX_NUM * NUM_OF_ETH_DEVS));
#define _SABRELITE_ENET_BUFFER_SIZE 2048
p = dev->rx_bd = (imx_enet_bd_t*)rx_bd_base;
for (i = 0; i < ENET_BD_RX_NUM; i++, p++) {
p->status = BD_RX_ST_EMPTY;
p->length = 0;
p->data = (unsigned char*)malloc(2048);
p->data = (unsigned char*)malloc(_SABRELITE_ENET_BUFFER_SIZE);
// printf("rx bd %x, buffer is %x\n", (unsigned int)p, (unsigned int)p->data);
}
@@ -135,7 +136,7 @@ static void imx_enet_bd_init(imx_enet_priv_t* dev, int dev_idx)
for (i = 0; i < ENET_BD_TX_NUM; i++, p++) {
p->status = 0;
p->length = 0;
p->data = (unsigned char*)malloc(2048);
p->data = (unsigned char*)malloc(_SABRELITE_ENET_BUFFER_SIZE);
// printf("tx bd %x, buffer is %x\n", (unsigned int)p, (unsigned int)p->data);
}
@@ -156,7 +157,7 @@ static void imx_enet_chip_init(imx_enet_priv_t* dev)
enet_reg->ECR.U = ENET_RESET;
while (enet_reg->ECR.U & ENET_RESET) {
yield(SYS_TASK_YIELD_NO_REASON);
hal_delay_us(ENET_COMMON_TICK);
}
enet_reg->EIMR.U = 0x00000000;
@@ -471,13 +472,15 @@ int imx_enet_send(imx_enet_priv_t* dev, unsigned char* buf, int length, unsigned
if (p->status & BD_TX_ST_WRAP) {
p = dev->tx_bd;
} else
} else {
p++;
}
dev->tx_cur = p;
dev->tx_busy = 1;
dev->tx_key = key;
enet_reg->TDAR.U = ENET_RX_TX_ACTIVE;
printf("EIR: %08x, ECR: %08x, TDAR.U: %08x, RDAR.U: %08x (%08x)\n", dev->enet_reg->EIR.U, dev->enet_reg->ECR.U, dev->enet_reg->TDAR.U, dev->enet_reg->RDAR.U, ENET_RX_TX_ACTIVE);
return 0;
}
@@ -552,6 +555,9 @@ void imx_enet_start(imx_enet_priv_t* dev, unsigned char* enaddr)
dev->tx_busy = 0;
dev->enet_reg->ECR.U |= ENET_ETHER_EN | ENET_ETHER_SPEED_1000M | ENET_ETHER_LITTLE_ENDIAN;
dev->enet_reg->RDAR.U |= ENET_RX_TX_ACTIVE;
HW_ENET_RDAR_WR(ENET_RX_TX_ACTIVE);
printf("addr1: %x, addr2: %x\n", &dev->enet_reg->RDAR.U, HW_ENET_RDAR_ADDR);
printf("EIR: %08x, ECR: %08x, TDAR.U: %08x, RDAR.U: %08x (%08x)\n", dev->enet_reg->EIR.U, dev->enet_reg->ECR.U, dev->enet_reg->TDAR.U, dev->enet_reg->RDAR.U, ENET_RX_TX_ACTIVE);
}
void imx_enet_stop(imx_enet_priv_t* dev)
@@ -609,5 +615,6 @@ int imx_enet_mii_type(imx_enet_priv_t* dev, enum imx_mii_type mii_type)
printf("BUG:unknow MII type=%x\n", mii_type);
break;
}
printf("RCR: %08x, TFWR: %08x\n", enet_reg->RCR.U, enet_reg->TFWR.U);
return 0;
}
@@ -38,21 +38,12 @@
#include <string.h>
#include "enet.h"
#include "sdk_types.h"
#include "soc_memory_map.h"
#include "libserial.h"
#include "usyscall.h"
typedef enum _test_return {
TEST_NOT_STARTED = -3, // present in the menu, but not run
TEST_NOT_IMPLEMENTED = -2, // present in the menu, but not functional
TEST_FAILED = -1,
TEST_PASSED = 0,
TEST_BYPASSED = 2, // user elected to exit the test before it was run
TEST_NOT_PRESENT = 3, // not present in the menu.
TEST_CONTINUE = 4 // proceed with the test. opposite of TEST_BYPASSED
} test_return_t;
#define ENET_PHY_ADDR 6
static imx_enet_priv_t enet0;
@@ -99,6 +90,53 @@ static int pkt_compare(unsigned char* packet1, unsigned char* packet2, int lengt
return 0;
}
//////////////////////////////////////////
void print_hw_enet(const hw_enet_t* enet)
{
printf("********************************\n");
printf("EIR: %08x\n", enet->EIR.U);
printf("EIMR: %08x\n", enet->EIMR.U);
printf("RDAR: %08x\n", enet->RDAR.U);
printf("TDAR: %08x\n", enet->TDAR.U);
printf("ECR: %08x\n", enet->ECR.U);
printf("MMFR: %08x\n", enet->MMFR.U);
printf("MSCR: %08x\n", enet->MSCR.U);
printf("MIBC: %08x\n", enet->MIBC.U);
printf("RCR: %08x\n", enet->RCR.U);
printf("TCR: %08x\n", enet->TCR.U);
printf("PALR: %08x\n", enet->PALR.U);
printf("PAUR: %08x\n", enet->PAUR.U);
printf("OPD: %08x\n", enet->OPD.U);
printf("IAUR: %08x\n", enet->IAUR.U);
printf("IALR: %08x\n", enet->IALR.U);
printf("GAUR: %08x\n", enet->GAUR.U);
printf("GALR: %08x\n", enet->GALR.U);
printf("TFWR: %08x\n", enet->TFWR.U);
printf("RDSR: %08x\n", enet->RDSR.U);
printf("TDSR: %08x\n", enet->TDSR.U);
printf("MRBR: %08x\n", enet->MRBR.U);
printf("RSFL: %08x\n", enet->RSFL.U);
printf("RSEM: %08x\n", enet->RSEM.U);
printf("RAEM: %08x\n", enet->RAEM.U);
printf("RAFL: %08x\n", enet->RAFL.U);
printf("TSEM: %08x\n", enet->TSEM.U);
printf("TAEM: %08x\n", enet->TAEM.U);
printf("TAFL: %08x\n", enet->TAFL.U);
printf("TIPG: %08x\n", enet->TIPG.U);
printf("FTRL: %08x\n", enet->FTRL.U);
printf("TACC: %08x\n", enet->TACC.U);
printf("RACC: %08x\n", enet->RACC.U);
printf("ATCR: %08x\n", enet->ATCR.U);
printf("ATVR: %08x\n", enet->ATVR.U);
printf("ATOFF: %08x\n", enet->ATOFF.U);
printf("ATPER: %08x\n", enet->ATPER.U);
printf("ATCOR: %08x\n", enet->ATCOR.U);
printf("ATINC: %08x\n", enet->ATINC.U);
printf("ATSTMP: %08x\n", enet->ATSTMP.U);
printf("********************************\n");
}
//////////////////////////////////////////
/*!
* This test performs a loopback transfer on the RGMII interface through
* an external AR8031 giga ethernet PHY.
@@ -136,10 +174,10 @@ int enet_test()
printf("Ethernet link is up!\n");
break;
}
yield(SYS_TASK_YIELD_NO_REASON);
hal_delay_us(100000); // 100 ms
}
imx_enet_phy_enable_external_loopback(dev0);
// imx_enet_phy_enable_external_loopback(dev0);
printf("ENET %0d: [ %s ] [ %s ] [ %s ]:\n", dev0->phy_addr,
(dev0->status & ENET_STATUS_FULL_DPLX) ? "FULL_DUPLEX" : "HALF_DUPLEX",
@@ -152,7 +190,6 @@ int enet_test()
printf("ENET link status check fail\n");
return TEST_FAILED;
}
imx_enet_start(dev0, mac_addr0);
// send packet
@@ -174,7 +211,7 @@ int enet_test()
}
if (!(ENET_EVENT_TX & enet_events)) {
printf("ENET tx fail\n");
printf("ENET tx fail event: %08x\n", enet_events);
return TEST_FAILED;
}
@@ -217,19 +254,20 @@ int main(int argc, char** argv)
exit();
}
printf("%s: Mapping %x(size: %x) to %x\n", enet_server_name, AIPS1_ARB_PHY_BASE_ADDR, AIPS1_ARB_END_ADDR - AIPS1_ARB_BASE_ADDR, AIPS1_ARB_BASE_ADDR);
printf("%s: Mapping %08x(size: %x) to %08x\n", enet_server_name, AIPS1_ARB_PHY_BASE_ADDR, AIPS1_ARB_END_ADDR - AIPS1_ARB_BASE_ADDR, AIPS1_ARB_BASE_ADDR);
if (!mmap(AIPS1_ARB_BASE_ADDR, AIPS1_ARB_PHY_BASE_ADDR, AIPS1_ARB_END_ADDR - AIPS1_ARB_BASE_ADDR, true)) {
printf("%s: mmap AIPS1 ARB(%x) failed\n", enet_server_name, AIPS1_ARB_PHY_BASE_ADDR);
printf("%s: mmap AIPS1 ARB(%8x) failed\n", enet_server_name, AIPS1_ARB_PHY_BASE_ADDR);
exit();
}
printf("%s: Mapping %x(size: %x) to %x\n", enet_server_name, AIPS2_ARB_PHY_BASE_ADDR, AIPS2_ARB_END_ADDR - AIPS2_ARB_BASE_ADDR, AIPS2_ARB_BASE_ADDR);
printf("%s: Mapping %08x(size: %x) to %8x\n", enet_server_name, AIPS2_ARB_PHY_BASE_ADDR, AIPS2_ARB_END_ADDR - AIPS2_ARB_BASE_ADDR, AIPS2_ARB_BASE_ADDR);
if (!mmap(AIPS2_ARB_BASE_ADDR, AIPS2_ARB_PHY_BASE_ADDR, AIPS2_ARB_END_ADDR - AIPS2_ARB_BASE_ADDR, true)) {
printf("%s: mmap AIPS1 ARB(%x) failed\n", enet_server_name, AIPS2_ARB_PHY_BASE_ADDR);
printf("%s: mmap AIPS1 ARB(%08x) failed\n", enet_server_name, AIPS2_ARB_PHY_BASE_ADDR);
exit();
}
enet_test();
exit();
return 0;
}
@@ -23,6 +23,8 @@
#include "regs.h"
#include "soc_memory_map.h"
/*
* i.MX6DQ ENET
*
@@ -76,7 +78,7 @@
//@{
#ifndef REGS_ENET_BASE
#define HW_ENET_INSTANCE_COUNT (1) //!< Number of instances of the ENET module.
#define REGS_ENET_BASE (0x02188000) //!< Base address for ENET.
#define REGS_ENET_BASE USERLAND_MMIO_P2V(0x02188000) //!< Base address for ENET.
#endif
//@}