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) ...@@ -266,7 +266,7 @@ void enable_termination(fdelay_device_t *b, int enable)
void enable_wr(fdelay_device_t *b, int index) 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); printf("Locking to WR network [board=%d]...", index);
fflush(stdout); fflush(stdout);
fdelay_configure_sync(b, FDELAY_SYNC_LOCAL); fdelay_configure_sync(b, FDELAY_SYNC_LOCAL);
...@@ -424,6 +424,9 @@ void sighandler(int sig) ...@@ -424,6 +424,9 @@ void sighandler(int sig)
} }
} }
int fdelay_dbg_sync_lost(fdelay_device_t *dev);
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int i, maxfd = -1; int i, maxfd = -1;
...@@ -457,8 +460,20 @@ int main(int argc, char *argv[]) ...@@ -457,8 +460,20 @@ int main(int argc, char *argv[])
continue; continue;
// printf("."); // printf(".");
handle_readout(&boards[i]); 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); usleep(100);
} }
} }
...@@ -1388,13 +1388,21 @@ int fdelay_check_sync(fdelay_device_t *dev) ...@@ -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); // 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)) 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; return 1;
else if (!hw->wr_enabled) } else if (!hw->wr_enabled)
return 1; return 1;
return 0; 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 # 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