icE1usb fw: Internal API for configuring E1 rx/tx config register
Related: OS#4675
Change-Id: Ib23f9b99f169ab18d730bcf67b97a7b6bf863e98
diff --git a/firmware/ice40-riscv/icE1usb/e1.c b/firmware/ice40-riscv/icE1usb/e1.c
index b1771f5..1d8fd30 100644
--- a/firmware/ice40-riscv/icE1usb/e1.c
+++ b/firmware/ice40-riscv/icE1usb/e1.c
@@ -263,6 +263,29 @@
g_e1.tx.state = BOOT;
}
+#define TXCR_PERMITTED ( \
+ E1_TX_CR_MODE_TS0_CRC_E | \
+ E1_TX_CR_TICK_REMOTE | \
+ E1_TX_CR_ALARM | \
+ E1_TX_CR_LOOPBACK | \
+ E1_TX_CR_LOOPBACK_CROSS )
+
+void
+e1_tx_config(uint16_t cr)
+{
+ g_e1.tx.cr = (g_e1.tx.cr & ~TXCR_PERMITTED) | (cr & TXCR_PERMITTED);
+ e1_regs->tx.csr = g_e1.tx.cr;
+}
+
+#define RXCR_PERMITTED ( \
+ E1_RX_CR_MODE_MFA )
+
+void
+e1_rx_config(uint16_t cr)
+{
+ g_e1.rx.cr = (g_e1.rx.cr & ~RXCR_PERMITTED) | (cr & RXCR_PERMITTED);
+ e1_regs->rx.csr = g_e1.rx.cr;
+}
#include "dma.h"
diff --git a/firmware/ice40-riscv/icE1usb/e1.h b/firmware/ice40-riscv/icE1usb/e1.h
index c438cb9..05ce19a 100644
--- a/firmware/ice40-riscv/icE1usb/e1.h
+++ b/firmware/ice40-riscv/icE1usb/e1.h
@@ -11,6 +11,9 @@
void e1_poll(void);
void e1_debug_print(bool data);
+void e1_tx_config(uint16_t cr);
+void e1_rx_config(uint16_t cr);
+
volatile uint8_t *e1_data_ptr(int mf, int frame, int ts);
unsigned int e1_data_ofs(int mf, int frame, int ts);