<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-e1-hardware/+/21776">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">icE1usb fw: move entire E1 configuration to USB<br><br>Maintain all of the E1 IP core configuration in usb_e1.c, rather than<br>having compile-time defaults in e1.c, unused compile-time defaults in<br>usb_e1.c and runtime config received via USB.<br><br>Related: OS#4675<br>Change-Id: Ia1cc1e685aad9fe5ceb230b66f35d5cb2829c845<br>---<br>M firmware/ice40-riscv/icE1usb/e1.c<br>M firmware/ice40-riscv/icE1usb/e1.h<br>M firmware/ice40-riscv/icE1usb/fw_app.c<br>M firmware/ice40-riscv/icE1usb/usb_e1.c<br>4 files changed, 26 insertions(+), 28 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-e1-hardware refs/changes/76/21776/1</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 4ce75bf..e033206 100644</span><br><span>--- a/firmware/ice40-riscv/icE1usb/e1.c</span><br><span>+++ b/firmware/ice40-riscv/icE1usb/e1.c</span><br><span>@@ -241,7 +241,7 @@</span><br><span> </span><br><span> </span><br><span> void</span><br><span style="color: hsl(0, 100%, 40%);">-e1_init(bool clk_mode)</span><br><span style="color: hsl(120, 100%, 40%);">+e1_init(uint16_t rx_cr, uint16_t tx_cr)</span><br><span> {</span><br><span>  /* Global state init */</span><br><span>      memset(&g_e1, 0x00, sizeof(g_e1));</span><br><span>@@ -250,17 +250,10 @@</span><br><span>       e1f_reset(&g_e1.rx.fifo,   0, 128);</span><br><span>      e1f_reset(&g_e1.tx.fifo, 128, 128);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Enable Rx */</span><br><span style="color: hsl(0, 100%, 40%);">- g_e1.rx.cr = E1_RX_CR_OVFL_CLR |</span><br><span style="color: hsl(0, 100%, 40%);">-                     E1_RX_CR_MODE_MFA |</span><br><span style="color: hsl(0, 100%, 40%);">-                     E1_RX_CR_ENABLE;</span><br><span style="color: hsl(120, 100%, 40%);">+ g_e1.rx.cr = E1_RX_CR_OVFL_CLR | E1_RX_CR_ENABLE | rx_cr;</span><br><span>    e1_regs->rx.csr = g_e1.rx.cr;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* Enable Tx */</span><br><span style="color: hsl(0, 100%, 40%);">- g_e1.tx.cr = E1_TX_CR_UNFL_CLR |</span><br><span style="color: hsl(0, 100%, 40%);">-                     (clk_mode ? E1_TX_CR_TICK_REMOTE : E1_TX_CR_TICK_LOCAL) |</span><br><span style="color: hsl(0, 100%, 40%);">-               E1_TX_CR_MODE_TS0_CRC_E |</span><br><span style="color: hsl(0, 100%, 40%);">-               E1_TX_CR_ENABLE;</span><br><span style="color: hsl(120, 100%, 40%);">+ g_e1.tx.cr = E1_TX_CR_UNFL_CLR | E1_TX_CR_ENABLE |tx_cr;</span><br><span>     e1_regs->tx.csr = g_e1.tx.cr;</span><br><span> </span><br><span>         /* State */</span><br><span>diff --git a/firmware/ice40-riscv/icE1usb/e1.h b/firmware/ice40-riscv/icE1usb/e1.h</span><br><span>index 05ce19a..fcd4284 100644</span><br><span>--- a/firmware/ice40-riscv/icE1usb/e1.h</span><br><span>+++ b/firmware/ice40-riscv/icE1usb/e1.h</span><br><span>@@ -7,7 +7,7 @@</span><br><span> </span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void e1_init(bool clk_mode);</span><br><span style="color: hsl(120, 100%, 40%);">+void e1_init(uint16_t rx_cr, uint16_t tx_cr);</span><br><span> void e1_poll(void);</span><br><span> void e1_debug_print(bool data);</span><br><span> </span><br><span>diff --git a/firmware/ice40-riscv/icE1usb/fw_app.c b/firmware/ice40-riscv/icE1usb/fw_app.c</span><br><span>index 62f4b0e..eebc21f 100644</span><br><span>--- a/firmware/ice40-riscv/icE1usb/fw_app.c</span><br><span>+++ b/firmware/ice40-riscv/icE1usb/fw_app.c</span><br><span>@@ -102,7 +102,7 @@</span><br><span>       usb_e1_init();</span><br><span> </span><br><span>   /* Start */</span><br><span style="color: hsl(0, 100%, 40%);">-     e1_init(false);         // local tick</span><br><span style="color: hsl(120, 100%, 40%);">+ e1_init(0, 0);</span><br><span>       e1_active = true;</span><br><span>    led_state(true);</span><br><span>     usb_connect();</span><br><span>@@ -138,16 +138,6 @@</span><br><span>                        case 'O':</span><br><span>                            e1_debug_print(true);</span><br><span>                                break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  case 'e':</span><br><span style="color: hsl(0, 100%, 40%);">-                               e1_init(true);</span><br><span style="color: hsl(0, 100%, 40%);">-                          e1_active = true;</span><br><span style="color: hsl(0, 100%, 40%);">-                               led_state(true);</span><br><span style="color: hsl(0, 100%, 40%);">-                                break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  case 'E':</span><br><span style="color: hsl(0, 100%, 40%);">-                               e1_init(false);</span><br><span style="color: hsl(0, 100%, 40%);">-                         e1_active = true;</span><br><span style="color: hsl(0, 100%, 40%);">-                               led_state(true);</span><br><span style="color: hsl(0, 100%, 40%);">-                                break;</span><br><span>                       case 'c':</span><br><span>                            usb_connect();</span><br><span>                               break;</span><br><span>diff --git a/firmware/ice40-riscv/icE1usb/usb_e1.c b/firmware/ice40-riscv/icE1usb/usb_e1.c</span><br><span>index e910852..f94b897 100644</span><br><span>--- a/firmware/ice40-riscv/icE1usb/usb_e1.c</span><br><span>+++ b/firmware/ice40-riscv/icE1usb/usb_e1.c</span><br><span>@@ -216,6 +216,22 @@</span><br><span>       return USB_FND_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void _perform_tx_config(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     const struct ice1usb_tx_config *cfg = &g_usb_e1.tx_cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+   e1_tx_config(E1_TX_CR_ENABLE |</span><br><span style="color: hsl(120, 100%, 40%);">+                        ((cfg->mode & 2) << 1) |</span><br><span style="color: hsl(120, 100%, 40%);">+                 ((cfg->timing & 1) << 3) |</span><br><span style="color: hsl(120, 100%, 40%);">+                       ((cfg->alarm & 1) << 4) |</span><br><span style="color: hsl(120, 100%, 40%);">+                        ((cfg->ext_loopback & 2) << 5) );</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%);">+static void _perform_rx_config(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  const struct ice1usb_rx_config *cfg = &g_usb_e1.rx_cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+   e1_rx_config(E1_RX_CR_ENABLE | (cfg->mode << 1));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static enum usb_fnd_resp</span><br><span> _e1_set_intf(const struct usb_intf_desc *base, const struct usb_intf_desc *sel)</span><br><span> {</span><br><span>@@ -229,6 +245,9 @@</span><br><span>    if (g_usb_e1.running)</span><br><span>                return USB_FND_SUCCESS;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   _perform_rx_config();</span><br><span style="color: hsl(120, 100%, 40%);">+ _perform_tx_config();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      g_usb_e1.running = true;</span><br><span> </span><br><span>         /* Configure EP1 OUT / EP2 IN */</span><br><span>@@ -276,11 +295,7 @@</span><br><span>      printf("set_tx_mode %02x%02x%02x%02x\r\n",</span><br><span>                 xfer->data[0], xfer->data[1], xfer->data[2], xfer->data[3]);</span><br><span>     g_usb_e1.tx_cfg = *cfg;</span><br><span style="color: hsl(0, 100%, 40%);">- e1_tx_config(E1_TX_CR_ENABLE |</span><br><span style="color: hsl(0, 100%, 40%);">-                  ((cfg->mode & 2) << 1) |</span><br><span style="color: hsl(0, 100%, 40%);">-                   ((cfg->timing & 1) << 3) |</span><br><span style="color: hsl(0, 100%, 40%);">-                 ((cfg->alarm & 1) << 4) |</span><br><span style="color: hsl(0, 100%, 40%);">-                  ((cfg->ext_loopback & 2) << 5) );</span><br><span style="color: hsl(120, 100%, 40%);">+        _perform_tx_config();</span><br><span>        return true;</span><br><span> }</span><br><span> </span><br><span>@@ -290,7 +305,7 @@</span><br><span>  const struct ice1usb_rx_config *cfg = (const struct ice1usb_rx_config *) xfer->data;</span><br><span>      printf("set_rx_mode %02x\r\n", xfer->data[0]);</span><br><span>  g_usb_e1.rx_cfg = *cfg;</span><br><span style="color: hsl(0, 100%, 40%);">- e1_rx_config(E1_RX_CR_ENABLE | (cfg->mode << 1));</span><br><span style="color: hsl(120, 100%, 40%);">+    _perform_rx_config();</span><br><span>        return true;</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-e1-hardware/+/21776">change 21776</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/+/21776"/><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: Ia1cc1e685aad9fe5ceb230b66f35d5cb2829c845 </div>
<div style="display:none"> Gerrit-Change-Number: 21776 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>