📄 spi3_diag.c
字号:
}
else if (pkt_size == (RING_DATA_138_2 & MASK_16BIT))
{
//eprintf("received 138 bytes on port 3\n");
orig_data_size = PKT_138_SZ ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data138_2;
}
else
bad_pkt_size = 1;
break;
}
if (bad_pkt_size ==1)
{
eprintf("pkt size mismatch !! port = %d\n",rx_port_num);
mailbox_value = NOT_COMPLETE;
flag = ERROR; // Set flag as error
rxflag[rx_port_num] = ERROR;
break;
}
//eprintf("orig data size = 0x%08X\n",orig_data_size);
}
else // cflag = 0 -> fiber mode
{
if ((pkt_size == (RING_DATA_96_0 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_96_0 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_96_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data96_0;
}
else if ((pkt_size == (RING_DATA_64_0 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_64_0 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_64_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data64_0;
}
else if ((pkt_size == (RING_DATA_138_0 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_138_0 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_138_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data138_0;
}
else if ((pkt_size == (RING_DATA_96_1 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_96_1 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_96_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data96_1;
}
else if ((pkt_size == (RING_DATA_64_1 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_64_1 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_64_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data64_1;
}
else if ((pkt_size == (RING_DATA_138_1 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_138_1 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_138_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data138_1;
}
else if ((pkt_size == (RING_DATA_96_2 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_96_2 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_96_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data96_2;
}
else if ((pkt_size == (RING_DATA_64_2 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_64_2 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_64_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data64_2;
}
else if ((pkt_size == (RING_DATA_138_2 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_138_2 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_138_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data138_2;
}
else if ((pkt_size == (RING_DATA_96_3 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_96_3 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_96_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data96_3;
}
else if ((pkt_size == (RING_DATA_64_3 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_64_3 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_64_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data64_3;
}
else if ((pkt_size == (RING_DATA_138_3 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_138_3 >> 20) & MASK_8BIT)))
{
orig_data_size = PKT_138_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data138_3;
}
else
{
eprintf("pkt size mismatch !! port = %d\n",rx_port_num);
mailbox_value = NOT_COMPLETE;
flag = ERROR; // Set flag as error
rxflag[rx_port_num] = ERROR;
break;
}
}
//eprintf("packet ******\n");
for (ctr = 0; ctr < orig_data_size; ctr+=4)
{
// Read the DRAM for the longword that was received
temp = GET32(dram_addr + ctr);
//eprintf("dram data = 0x%08X\n",temp);
//eprintf("pkt data = 0x%08X\n",pl_sys_lb_data[(ctr / 4)]);
// Compare with original value
if (temp != pl_sys_lb_data[(ctr / 4)])
{
mailbox_value = ERROR_PATTERN;
eprintf("Packet:%d Longword:%d Expected:0x%X Received:0x%X\n", (rx_count + 1), (ctr / 4), pl_sys_lb_data[(ctr / 4)], temp);
flag = ERROR; // Set flag as error
rxflag[rx_port_num] = ERROR;
break;
}
}
if (flag == ERROR)
{
break;
}
hal_delay_us(800);
}
if (flag == ERROR)
{
break;
}
}
if (flag == ERROR)
{
break;
}
//loop_count--;
loop_count++;
if (forever && KEYPRESS)
{
break;
}
}
while ((loop_count != loop) || forever);
if (loop == 0)
{
counter = loop_count;
}
else
{
counter = loop;
}
switch(test_param)
{
case 'r': expected_num_pkts = counter * 0;
break;
default: expected_num_pkts = counter * 9;
break;
}
switch(ports)
{
case 0:
case 1:
case 2:
case 3: if (!cflag)
{
if ((pass_port[ports] != expected_num_pkts) || (pass_port[ports] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", ports);
eprintf("Packets Received = %d\n",pass_port[ports]);
flag = ERROR;
rxflag[ports] = ERROR;
}
else
{
eprintf("\nReceived on Port %d : %d\n",ports,pass_port[ports]);
flag = OK;
}
}
else
{
if ((pass_port[rxport[ports]] != expected_num_pkts) || (pass_port[rxport[ports]] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", rxport[ports]);
eprintf("Packets Received on port %d = %d\n",rxport[ports],pass_port[rxport[ports]]);
flag = ERROR;
rxflag[ports] = ERROR;
}
else
{
eprintf("\nReceived on Port %d : %d\n",rxport[ports],pass_port[rxport[ports]]);
flag = OK;
}
}
break;
case 4: //eprintf("4 ports : %d\n",ports);
eprintf("\n");
if (!cflag)
{
for (ctr=0; ctr<4; ctr++)
{
if ((pass_port[ctr] != expected_num_pkts) || (pass_port[ports] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", ctr);
eprintf("Packets Received = %d\n",pass_port[ctr]);
rxflag[ctr] = ERROR;
flag = ERROR;
}
if (pass_port[ctr] == expected_num_pkts)
{
eprintf("Received %d packets on Port %d\n",pass_port[ctr],ctr);
//flag = OK;
}
}
}
else
{
for (ctr=0; ctr<2; ctr++)
{
if ((pass_port[ctr*2+1] != expected_num_pkts) || (pass_port[ports] == 0))
{
eprintf("\nDid not Receive expected number of packets on port %d\n", ctr*2+1);
eprintf("Packets Received = %d\n",pass_port[ctr*2+1]);
rxflag[ctr*2+1] = ERROR;
flag = ERROR;
}
if (pass_port[ctr*2+1] == expected_num_pkts)
{
eprintf("Received %d packets on Port %d\n",pass_port[ctr*2+1],ctr*2+1);
//flag = OK;
}
}
}
break;
default: eprintf("This is bad value for port number \n");
break;
}
}
eprintf("\n");
if(dcache_status != 0) // if dcache was originally ON
{
dcache_on();
}
if (loop == 0)
loop = loop_count;
if ((test_param == 'r') && (flag == ERROR))
flag = OK;
if (flag ==OK)
{
switch(test_param)
{
case 't':
eprintf("TENB/TPA successfully assserted .\n");
eprintf("SPI-3 TENB/TPA signal test...PASSED\n");
break;
case 'r':
eprintf("TERR successfully assserted .\n");
eprintf("SPI-3 TERR signal test...PASSED\n");
break;
case 'm':
eprintf("MPHY loopback test ... PASSED\n");
break;
default:
eprintf("Invalid parameters. \n");
return INVALID_PARAMETERS;
}
Set_LED("PASS");
slowport_code[0] = SP_XSC;
slowport_code[1] = SP_PASS;
dump_slowport(slowport_code, 2, SP_NON_FATAL);
}
else
{
if (mailbox_value == INIT_ERROR)
{
eprintf("The slave NPU did not succeed in loading the microcode to its microengines\n");
}
else if (mailbox_value == NOT_RECEIVED)
{
eprintf("There was no sign that the expected packet was received\n");
}
else if (mailbox_value == ERROR_PATTERN)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The packet received was not the same as the packet transmitted.\n");
}
else if (mailbox_value == INCORRECT_SIZE)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The packet received was not the same size as the packet transmitted.\n");
}
/* get statistics from Vallejo */
//get_stats();
// prepare structure for dumping
syslog.type = TYPE_ERROR;
syslog.source_comp = MASTER_DIAG; // Determine master/slave
strcpy(syslog.desc, "SPI-3 test FAILED!");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("SPI-3 test FAILED!\n");
Set_LED("FAIL");
slowport_code[0] = SP_XSC;
slowport_code[1] = SP_FAIL;
dump_slowport(slowport_code, 2, SP_NON_FATAL);
acL->Err = ERROR;
}
Clear_All_ME();
Msf_OutOfReset();
}
else
{
eprintf("\nThis test cannot be run directly on the Slave console\n");
return DONE; // To indicate that the slave does not do this.
}
return DONE;
}
void config_mphy(void)
{
eprintf("Testing MPHY operation...\n");
reg_write((RXFIFO_DROP_ENABLE),0xF);
mac_reset_config();
reg_write(SERDES_CLKMODE_REG,0x0);
reg_write(SERDES_CLKMODE_REG,0xf);
reg_write(0x505,0xf);
reg_write(0x505,0x0);
reg_write(PORT_ENABLE,0x0);
reg_write(SPI3_TX_GLOBAL_CONFIG,0x00aa0f);
reg_write(SPI3_RX_CONFIG, 0xAA0F80);
mac_disable_reset();
reg_write(SERDES_CLKMODE_REG,0x0);
reg_write(SERDES_CLKMODE_REG,0xf);
reg_write(0x505,0xf);
reg_write(0x505,0x0);
reg_write(PORT_ENABLE,0xF);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -