<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-e1-hardware/+/26706">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">icE1usb firmware: Detect A-bit in TS0; report via USB + LED<br><br>Scan over every odd E1 frame TS0 byte to check if the A-bit is set,<br>indicating a remote alarm.  If so, set yellow LED and report via the<br>error flags communicated to the host by USB interrupt transfer.<br><br>Change-Id: Ic4f57cf79bd32cf75f81ef3073cb8d4a2d1857d8<br>---<br>M firmware/ice40-riscv/icE1usb/e1.c<br>M firmware/ice40-riscv/icE1usb/e1.h<br>M firmware/ice40-riscv/icE1usb/ice1usb_proto.h<br>3 files changed, 30 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/firmware/ice40-riscv/icE1usb/e1.c b/firmware/ice40-riscv/icE1usb/e1.c</span><br><span>index 5e57480..f5e367e 100644</span><br><span>--- a/firmware/ice40-riscv/icE1usb/e1.c</span><br><span>+++ b/firmware/ice40-riscv/icE1usb/e1.c</span><br><span>@@ -290,9 +290,11 @@</span><br><span> unsigned int</span><br><span> e1_rx_need_data(unsigned int usb_addr, unsigned int max_frames, unsigned int *pos)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+       bool rai_received = false;</span><br><span style="color: hsl(120, 100%, 40%);">+    bool rai_possible = false;</span><br><span>   unsigned int ofs;</span><br><span>    int tot_frames = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-     int n_frames;</span><br><span style="color: hsl(120, 100%, 40%);">+ int n_frames, i;</span><br><span> </span><br><span>         while (max_frames) {</span><br><span>                 /* Get some data from the FIFO */</span><br><span>@@ -314,10 +316,34 @@</span><br><span>            max_frames -= n_frames;</span><br><span>              tot_frames += n_frames;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+           /* While DMA is running: Determine if remote end indicates any alarms */</span><br><span style="color: hsl(120, 100%, 40%);">+              for (i = 0; i < n_frames; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   unsigned int frame_nr = ofs + i;</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* A bit is present in every odd frame TS0 */</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (frame_nr & 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               uint8_t ts0 = *e1_data_ptr(0, ofs + i, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+                            rai_possible = true;</span><br><span style="color: hsl(120, 100%, 40%);">+                          if (ts0 & 0x20) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 rai_received = true;</span><br><span style="color: hsl(120, 100%, 40%);">+                                  break;</span><br><span style="color: hsl(120, 100%, 40%);">+                                }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          /* Wait for DMA completion */</span><br><span>                while (dma_poll());</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (rai_possible) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (rai_received) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   g_e1.errors.flags |= E1_ERR_F_RAI;</span><br><span style="color: hsl(120, 100%, 40%);">+                    e1_platform_led_set(0, E1P_LED_YELLOW, E1P_LED_ST_ON);</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      g_e1.errors.flags &= ~E1_ERR_F_RAI;</span><br><span style="color: hsl(120, 100%, 40%);">+                       e1_platform_led_set(0, E1P_LED_YELLOW, E1P_LED_ST_OFF);</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  return tot_frames;</span><br><span> }</span><br><span> </span><br><span>diff --git a/firmware/ice40-riscv/icE1usb/e1.h b/firmware/ice40-riscv/icE1usb/e1.h</span><br><span>index 8ba9838..4394638 100644</span><br><span>--- a/firmware/ice40-riscv/icE1usb/e1.h</span><br><span>+++ b/firmware/ice40-riscv/icE1usb/e1.h</span><br><span>@@ -16,6 +16,7 @@</span><br><span> </span><br><span> #define E1_ERR_F_ALIGN_ERR      0x01</span><br><span> #define E1_ERR_F_LOS            0x02</span><br><span style="color: hsl(120, 100%, 40%);">+#define E1_ERR_F_RAI              0x04</span><br><span> </span><br><span> struct e1_error_count {</span><br><span>  uint16_t crc;</span><br><span>diff --git a/firmware/ice40-riscv/icE1usb/ice1usb_proto.h b/firmware/ice40-riscv/icE1usb/ice1usb_proto.h</span><br><span>index 71f7236..d0d7304 100644</span><br><span>--- a/firmware/ice40-riscv/icE1usb/ice1usb_proto.h</span><br><span>+++ b/firmware/ice40-riscv/icE1usb/ice1usb_proto.h</span><br><span>@@ -85,9 +85,10 @@</span><br><span>      ICE1USB_IRQ_T_ERRCNT            = 1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Ensue ro keep those in sync with e1.h */</span><br><span style="color: hsl(120, 100%, 40%);">+/* Ensue to keep those in sync with e1.h */</span><br><span> #define ICE1USB_ERR_F_ALIGN_ERR       0x01</span><br><span> #define ICE1USB_ERR_F_LOS       0x02</span><br><span style="color: hsl(120, 100%, 40%);">+#define ICE1USB_ERR_F_RAI 0x04</span><br><span> </span><br><span> struct ice1usb_irq_err {</span><br><span>         /* 16-bit little-endian counters */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-e1-hardware/+/26706">change 26706</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-e1-hardware/+/26706"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-e1-hardware </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ic4f57cf79bd32cf75f81ef3073cb8d4a2d1857d8 </div>
<div style="display:none"> Gerrit-Change-Number: 26706 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: tnt <tnt@246tNt.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>