litex/software/bios/dataflow.c

43 lines
890 B
C

#include <stdio.h>
#include "dataflow.h"
void print_isd_info(unsigned int baseaddr)
{
volatile unsigned int *regs;
int neps;
int nbytes;
int i, j;
int offset;
unsigned int ack_count, nack_count, cur_status;
regs = (unsigned int *)baseaddr;
if((regs[0] != 0x6a) || (regs[1] != 0xb4)) {
printf("Incorrect magic number\n");
return;
}
neps = regs[2];
nbytes = (regs[3] + 7)/8;
regs[4] = 1; // freeze
offset = 6; // regs[5] is reset
for(i=0;i<neps;i++) {
ack_count = 0;
for(j=0;j<nbytes;j++) {
ack_count <<= 8;
ack_count |= regs[offset++];
}
nack_count = 0;
for(j=0;j<nbytes;j++) {
nack_count <<= 8;
nack_count |= regs[offset++];
}
cur_status = regs[offset++];
printf("#%d: ACK_CNT:%10u NAK_CNT:%10u %s %s\n",
i, ack_count, nack_count,
cur_status & 1 ? "stb" : " ",
cur_status & 2 ? "ack" : " ");
}
regs[4] = 0; // unfreeze
}