summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared/tmtc
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2012-05-24 17:23:37 +0200
committerDaniel Hellstrom <daniel@gaisler.com>2015-04-17 01:10:17 +0200
commitf00fee8eb104d8447ad2fb9d38cda0b033096ff9 (patch)
treefa164c7f55a9c484b0bac99e2b0c775476947608 /c/src/lib/libbsp/sparc/shared/tmtc
parentGRPCI: fix target BAR1 initialization (diff)
downloadrtems-f00fee8eb104d8447ad2fb9d38cda0b033096ff9.tar.bz2
GRTM: fixed bug where transmitter start loop was optimized away
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/tmtc')
-rw-r--r--c/src/lib/libbsp/sparc/shared/tmtc/grtm.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/tmtc/grtm.c b/c/src/lib/libbsp/sparc/shared/tmtc/grtm.c
index de1df727ad..49025bc047 100644
--- a/c/src/lib/libbsp/sparc/shared/tmtc/grtm.c
+++ b/c/src/lib/libbsp/sparc/shared/tmtc/grtm.c
@@ -761,8 +761,7 @@ static int grtm_start(struct grtm_priv *pDev)
struct grtm_regs *regs = pDev->regs;
int i;
struct grtm_ioc_config *cfg = &pDev->config;
- volatile unsigned int *txrdy_reg;
- unsigned int txrdy_mask;
+ unsigned int txrdy;
/* Clear Descriptors */
memset(pDev->bds,0,0x400);
@@ -818,21 +817,23 @@ static int grtm_start(struct grtm_priv *pDev)
i--;
}
- /* Location of TXRDY Bit is different for different revisions */
- if ( pDev->subrev == 0 ) {
- txrdy_reg = &regs->dma_ctrl;
- txrdy_mask = GRTM_REV0_DMA_CTRL_TXRDY;
- } else {
- txrdy_reg = &regs->dma_status;
- txrdy_mask = GRTM_REV1_DMA_STS_TXRDY;
- }
-
/* Check transmitter startup OK */
- i=0;
- while( !(READ_REG(txrdy_reg) & txrdy_mask) && (i<1000000) ){
- i++;
- }
- if ( !(READ_REG(txrdy_reg) & txrdy_mask) ){
+ i = 1000000;
+ do {
+ /* Location of TXRDY Bit is different for different revisions */
+ if ( pDev->subrev == 0 ) {
+ txrdy = READ_REG(&regs->dma_ctrl) &
+ GRTM_REV0_DMA_CTRL_TXRDY;
+ } else {
+ txrdy = READ_REG(&regs->dma_status) &
+ GRTM_REV1_DMA_STS_TXRDY;
+ }
+ if (txrdy != 0)
+ break;
+
+ asm volatile ("nop"::);
+ } while ( --i > 0 );
+ if ( i == 0 ) {
/* Reset Failed */
DBG("GRTM: start: Reseting transmitter failed (%d)\n",i);
return RTEMS_IO_ERROR;