Change in osmo-e1-hardware[master]: icE1usb fw: Expose error conditions from E1 driver

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Mon Dec 14 17:31:41 UTC 2020


laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-e1-hardware/+/21715 )


Change subject: icE1usb fw: Expose error conditions from E1 driver
......................................................................

icE1usb fw: Expose error conditions from E1 driver

This will allow the USB interface code to report the errors to the
host PC.

Change-Id: Iba3e00a2b28a2fef6dbd986bfc706c1619c3a3ed
---
M firmware/ice40-riscv/icE1usb/e1.c
M firmware/ice40-riscv/icE1usb/e1.h
2 files changed, 22 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-e1-hardware refs/changes/15/21715/1

diff --git a/firmware/ice40-riscv/icE1usb/e1.c b/firmware/ice40-riscv/icE1usb/e1.c
index 5d4d3ee..83cbd92 100644
--- a/firmware/ice40-riscv/icE1usb/e1.c
+++ b/firmware/ice40-riscv/icE1usb/e1.c
@@ -291,6 +291,7 @@
 		int in_flight;
 		enum e1_pipe_state state;
 	} tx;
+	uint32_t errors;		/* E1_ERR_ bitmask */
 } g_e1;
 
 
@@ -395,6 +396,15 @@
 	return e1f_valid_frames(&g_e1.rx.fifo);
 }
 
+/* get cumulative error bit mask since last call of this function */
+uint32_t
+e1_get_and_clear_errors(void)
+{
+	uint32_t err =  g_e1.errors;
+	g_e1.errors = 0;
+	return err;
+}
+
 void
 e1_poll(void)
 {
@@ -421,8 +431,10 @@
 	while ( (bd = e1_regs->rx.bd) & E1_BD_VALID ) {
 		/* FIXME: CRC status ? */
 		e1f_multiframe_write_commit(&g_e1.rx.fifo);
-		if ((bd & (E1_BD_CRC0 | E1_BD_CRC1)) != (E1_BD_CRC0 | E1_BD_CRC1))
+		if ((bd & (E1_BD_CRC0 | E1_BD_CRC1)) != (E1_BD_CRC0 | E1_BD_CRC1)) {
 			printf("b: %03x\n", bd);
+			g_e1.errors |= E1_ERR_CRC;
+		}
 		g_e1.rx.in_flight--;
 	}
 
@@ -441,6 +453,7 @@
 		if (!(e1_regs->rx.csr & E1_RX_SR_ALIGNED)) {
 			printf("[!] E1 rx misalign\n");
 			g_e1.rx.state = RECOVER;
+			g_e1.errors |= E1_ERR_ALIGN;
 		}
 	}
 
@@ -449,6 +462,7 @@
 		if (e1_regs->rx.csr & E1_RX_SR_OVFL) {
 			printf("[!] E1 overflow %d\n", g_e1.rx.in_flight);
 			g_e1.rx.state = RECOVER;
+			g_e1.errors |= E1_ERR_OVFL;
 		}
 	}
 
@@ -480,6 +494,7 @@
 		if (e1_regs->tx.csr & E1_TX_SR_UNFL) {
 			printf("[!] E1 underflow %d\n", g_e1.tx.in_flight);
 			g_e1.tx.state = RECOVER;
+			g_e1.errors |= E1_ERR_UNFL;
 		}
 	}
 
diff --git a/firmware/ice40-riscv/icE1usb/e1.h b/firmware/ice40-riscv/icE1usb/e1.h
index e68514f..c56cf0c 100644
--- a/firmware/ice40-riscv/icE1usb/e1.h
+++ b/firmware/ice40-riscv/icE1usb/e1.h
@@ -11,5 +11,11 @@
 void e1_poll(void);
 void e1_debug_print(bool data);
 
+#define E1_ERR_ALIGN	0x01	/* at least one alignment error */
+#define E1_ERR_CRC	0x02	/* at least one CRC error */
+#define E1_ERR_OVFL	0x04	/* at least one Rx overflow */
+#define E1_ERR_UNFL	0x08	/* at least one Tx underflow */
+uint32_t e1_get_and_clear_errors(void);
+
 volatile uint8_t *e1_data_ptr(int mf, int frame, int ts);
 unsigned int e1_data_ofs(int mf, int frame, int ts);

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-e1-hardware/+/21715
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-e1-hardware
Gerrit-Branch: master
Gerrit-Change-Id: Iba3e00a2b28a2fef6dbd986bfc706c1619c3a3ed
Gerrit-Change-Number: 21715
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201214/03339337/attachment.htm>


More information about the gerrit-log mailing list