diff options
Diffstat (limited to 'chip/g/sps.c')
-rw-r--r-- | chip/g/sps.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/chip/g/sps.c b/chip/g/sps.c index 5e8f1ffc2e..219fc5e8cd 100644 --- a/chip/g/sps.c +++ b/chip/g/sps.c @@ -41,6 +41,11 @@ static uint32_t fifo_count(uint32_t readptr, uint32_t writeptr) #define SPS_TX_FIFO_BASE_ADDR (GBASE(SPS) + 0x1000) #define SPS_RX_FIFO_BASE_ADDR (SPS_TX_FIFO_BASE_ADDR + SPS_FIFO_SIZE) +#ifdef CONFIG_SPS_TEST +/* Statistics counters. Not always present, to save space & time. */ +uint32_t sps_tx_count, sps_rx_count, sps_tx_empty_count, sps_max_rx_batch; +#endif + void sps_tx_status(uint8_t byte) { GREG32(SPS, DUMMY_WORD) = byte; @@ -54,6 +59,11 @@ int sps_transmit(uint8_t *data, size_t data_size) uint32_t fifo_room; int bytes_sent; +#ifdef CONFIG_SPS_TEST + if (GREAD_FIELD(SPS, ISTATE, TXFIFO_EMPTY)) + sps_tx_empty_count++; +#endif + wptr = GREG32(SPS, TXFIFO_WPTR); rptr = GREG32(SPS, TXFIFO_RPTR); fifo_room = SPS_FIFO_SIZE - fifo_count(rptr, wptr); @@ -113,6 +123,9 @@ int sps_transmit(uint8_t *data, size_t data_size) SPS_TX_FIFO_BASE_ADDR; } +#ifdef CONFIG_SPS_TEST + sps_tx_count += bytes_sent; +#endif return bytes_sent; } @@ -224,6 +237,11 @@ static void sps_rx_interrupt(int cs_enabled) if (sps_rx_handler) sps_rx_handler(received_data, data_size, cs_enabled); sps_advance_rx(data_size); +#ifdef CONFIG_SPS_TEST + sps_rx_count += data_size; + if (data_size > sps_max_rx_batch) + sps_max_rx_batch = data_size; +#endif } while (data_size); } |