Commit 391c07d8 authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

software/lib/fdelay-gs: reconfigure the card on sync lost

parent 754b2473
......@@ -266,7 +266,7 @@ void enable_termination(fdelay_device_t *b, int enable)
void enable_wr(fdelay_device_t *b, int index)
{
int lock_retries = 10;
int lock_retries = 50;
printf("Locking to WR network [board=%d]...", index);
fflush(stdout);
fdelay_configure_sync(b, FDELAY_SYNC_LOCAL);
......@@ -424,6 +424,9 @@ void sighandler(int sig)
}
}
int fdelay_dbg_sync_lost(fdelay_device_t *dev);
int main(int argc, char *argv[])
{
int i, maxfd = -1;
......@@ -457,8 +460,20 @@ int main(int argc, char *argv[])
continue;
// printf(".");
handle_readout(&boards[i]);
if(fdelay_dbg_sync_lost(boards[i].b))
{
printf("Weird, sync lost @ board %x. Reconfiguring...\n", boards[i].b);
configure_board(&boards[i]);
}
}
usleep(100);
}
}
......@@ -1388,13 +1388,21 @@ int fdelay_check_sync(fdelay_device_t *dev)
// fprintf(stderr, "TCR %x\n", fd_readl(FD_REG_TCR) & FD_TCR_WR_LOCKED);
if(hw->wr_enabled && (fd_readl(FD_REG_TCR) & FD_TCR_WR_LOCKED))
{
fd_writel(FD_EIC_ISR_SYNC_STATUS, FD_REG_EIC_ISR);
fd_writel(FD_EIC_ISR_SYNC_STATUS, FD_REG_EIC_IER);
return 1;
else if (!hw->wr_enabled)
} else if (!hw->wr_enabled)
return 1;
return 0;
}
int fdelay_dbg_sync_lost(fdelay_device_t *dev)
{
fd_decl_private(dev)
return (fd_readl(FD_REG_EIC_ISR) & FD_EIC_ISR_SYNC_STATUS) ? 1 : 0;
}
# if 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment