Change some compile flags.
This commit is contained in:
@@ -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
|
||||
//@}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user