Change in osmo-e1-hardware[master]: icE1usb firmware: Detect A-bit in TS0; set flag in usb xfer hdr

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
Sat Jan 1 14:36:07 UTC 2022


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


Change subject: icE1usb firmware: Detect A-bit in TS0; set flag in usb xfer hdr
......................................................................

icE1usb firmware: Detect A-bit in TS0; set flag in usb xfer hdr

Scan over every odd E1 frame TS0 byte to check if the A-bit is
set, indiciating a remote alarm.  If so, set a new flag in the
USB IN transfer header.

Change-Id: Ic4f57cf79bd32cf75f81ef3073cb8d4a2d1857d8
---
M firmware/ice40-riscv/icE1usb/e1.c
M firmware/ice40-riscv/icE1usb/usb_e1.c
2 files changed, 25 insertions(+), 4 deletions(-)



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

diff --git a/firmware/ice40-riscv/icE1usb/e1.c b/firmware/ice40-riscv/icE1usb/e1.c
index 5e57480..1955936 100644
--- a/firmware/ice40-riscv/icE1usb/e1.c
+++ b/firmware/ice40-riscv/icE1usb/e1.c
@@ -288,12 +288,16 @@
 #include "dma.h"
 
 unsigned int
-e1_rx_need_data(unsigned int usb_addr, unsigned int max_frames, unsigned int *pos)
+e1_rx_need_data(unsigned int usb_addr, unsigned int max_frames, unsigned int *pos,
+		unsigned int *alarm_cnt)
 {
 	unsigned int ofs;
 	int tot_frames = 0;
 	int n_frames;
 
+	if (alarm_cnt)
+		*alarm_cnt = 0;
+
 	while (max_frames) {
 		/* Get some data from the FIFO */
 		n_frames = e1f_frame_read(&g_e1.rx.fifo, &ofs, max_frames);
@@ -314,6 +318,19 @@
 		max_frames -= n_frames;
 		tot_frames += n_frames;
 
+		/* While DMA is running: Determine if remote end indicates any alarms */
+		if (alarm_cnt) {
+			for (int i = 0; i < n_frames; i++) {
+				unsigned int frame_nr = ofs + i;
+				/* A bit is present in every odd frame TS0 */
+				if (frame_nr & 1) {
+					uint8_t ts0 = *e1_data_ptr(0, ofs + i, 0);
+					if (ts0 & 0x20)
+					*alarm_cnt++;
+				}
+			}
+		}
+
 		/* Wait for DMA completion */
 		while (dma_poll());
 	}
diff --git a/firmware/ice40-riscv/icE1usb/usb_e1.c b/firmware/ice40-riscv/icE1usb/usb_e1.c
index e180fec..b96e761 100644
--- a/firmware/ice40-riscv/icE1usb/usb_e1.c
+++ b/firmware/ice40-riscv/icE1usb/usb_e1.c
@@ -42,7 +42,8 @@
 
 
 /* Hack */
-unsigned int e1_rx_need_data(unsigned int usb_addr, unsigned int max_len, unsigned int *pos);
+unsigned int e1_rx_need_data(unsigned int usb_addr, unsigned int max_len, unsigned int *pos,
+			     unsigned int *alarm_cnt);
 unsigned int e1_tx_feed_data(unsigned int usb_addr, unsigned int len);
 unsigned int e1_tx_level(void);
 unsigned int e1_rx_level(void);
@@ -115,7 +116,7 @@
 	{
 		uint32_t ptr = usb_ep_regs[2].in.bd[bdi].ptr;
 		uint32_t hdr;
-		unsigned int pos;
+		unsigned int pos, alarm_cnt;
 
 		/* Error check */
 		if ((usb_ep_regs[2].in.bd[bdi].csr & USB_BD_STATE_MSK) == USB_BD_STATE_DONE_ERR)
@@ -133,10 +134,13 @@
 		else if (!n)
 			break;
 
-		n = e1_rx_need_data((ptr >> 2) + 1, n, &pos);
+		n = e1_rx_need_data((ptr >> 2) + 1, n, &pos, &alarm_cnt);
 
 		/* Write header: currently version and pos (mfr/fr number) */
 		hdr = (0 << 28) | (pos & 0xff);
+		/* indicate at least one remote alarm was reported within the frames of this transfer */
+		if (alarm_cnt)
+			hdr |= (1 << 8);
 		usb_data_write(ptr, &hdr, 4);
 
 		/* Resubmit */

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-e1-hardware/+/26706
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: Ic4f57cf79bd32cf75f81ef3073cb8d4a2d1857d8
Gerrit-Change-Number: 26706
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/20220101/46cfcbf2/attachment.htm>


More information about the gerrit-log mailing list