Use of bootloader, in SoC design.
SoC in simple terms is collection of required blocks, like USB, MAC, PCI, surrounded to the CPU (generally RISC CPU, ARM).
As a part of SoC development each hardware block is validated for its functionality.
Validation is done register level. Example if we want to test functionality provided by MAC block in our SoC, then these functionality are validated by writing test cases in bootloader (u-boot-1.1.6).
Bootloader will create an environment for the test cases. The test cases are added as commands for each block with different subtests for each block to touch the corner conditions.
To start with U-boot provides generic block test cases, like I2C and many more are getting added day by day.
Format of bootloader commands
int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
printf("Hello World\n");
}
U_BOOT_CMD(
hello, 5, 0, do_hello,
" hello - Prints hello world\n",
" hello - Prints hello world\n"
" \n" \
);
this will register "hello" as command in bootloader commands list.
Using this structure To validate simple GPIO functionality we write GPIO related test cases, so as to test GPIO features like GPIO interrupt.
MAC Block Validation test cases could be
SoC in simple terms is collection of required blocks, like USB, MAC, PCI, surrounded to the CPU (generally RISC CPU, ARM).
As a part of SoC development each hardware block is validated for its functionality.
Validation is done register level. Example if we want to test functionality provided by MAC block in our SoC, then these functionality are validated by writing test cases in bootloader (u-boot-1.1.6).
Bootloader will create an environment for the test cases. The test cases are added as commands for each block with different subtests for each block to touch the corner conditions.
To start with U-boot provides generic block test cases, like I2C and many more are getting added day by day.
Format of bootloader commands
int do_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
printf("Hello World\n");
}
U_BOOT_CMD(
hello, 5, 0, do_hello,
" hello - Prints hello world\n",
" hello - Prints hello world\n"
" \n" \
);
this will register "hello" as command in bootloader commands list.
Using this structure To validate simple GPIO functionality we write GPIO related test cases, so as to test GPIO features like GPIO interrupt.
MAC Block Validation test cases could be
- Link Up/Down test
- a. Validates PHY interface.
- b. Validates link negotiated by PHY
- Link Interrupt test
- a. Validatess the Link interrupt
- Digital loop-back test in full duplex mode
- a. Validates data path in MAC controller in varous link speeds
- 10/100/1000Mbps
- b. Validates normal frames (60-1514)
- Analog Loop-back in full duplex mode
- a. Validates PHY interface
- b. Validates Data path in MAC as well as PHY
- External loop-back test
- a. Validates PHY interface
- b. Validates Data path in MAC as well as PHY
- Digital Loop-back test in half duplex mode
- a. Validates data path in MAC controller
- DMA interrupt test
- a. Validates th MAC interrupts
- Incremental test
- a. Validates Data pathin MAC controller for varrying packet length
- External Incremental test
- a. Validates Data path in MAC controller and PHY for varrying packet length
- Promiscuous and MIB
- a. Validates Promiscous and Normal mode
- b. Validates the statistic count registers
- Pause Frame test
- a. Validates Pause frame Transmit and recieve
- b. Validates the statistic count registers
- Multicast frame test
- a. Validates the Hash table entry for Multicast filter
- b. Validates drop and pass of a Multicast Frame
- c. Validates the statistic count registers
Comments