Change in osmo-e1-hardware[master]: icE1usb fw: move entire E1 configuration to USB

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
Thu Dec 17 17:02:57 UTC 2020


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


Change subject: icE1usb fw: move entire E1 configuration to USB
......................................................................

icE1usb fw: move entire E1 configuration to USB

Maintain all of the E1 IP core configuration in usb_e1.c, rather than
having compile-time defaults in e1.c, unused compile-time defaults in
usb_e1.c and runtime config received via USB.

Related: OS#4675
Change-Id: Ia1cc1e685aad9fe5ceb230b66f35d5cb2829c845
---
M firmware/ice40-riscv/icE1usb/e1.c
M firmware/ice40-riscv/icE1usb/e1.h
M firmware/ice40-riscv/icE1usb/fw_app.c
M firmware/ice40-riscv/icE1usb/usb_e1.c
4 files changed, 26 insertions(+), 28 deletions(-)



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

diff --git a/firmware/ice40-riscv/icE1usb/e1.c b/firmware/ice40-riscv/icE1usb/e1.c
index 4ce75bf..e033206 100644
--- a/firmware/ice40-riscv/icE1usb/e1.c
+++ b/firmware/ice40-riscv/icE1usb/e1.c
@@ -241,7 +241,7 @@
 
 
 void
-e1_init(bool clk_mode)
+e1_init(uint16_t rx_cr, uint16_t tx_cr)
 {
 	/* Global state init */
 	memset(&g_e1, 0x00, sizeof(g_e1));
@@ -250,17 +250,10 @@
 	e1f_reset(&g_e1.rx.fifo,   0, 128);
 	e1f_reset(&g_e1.tx.fifo, 128, 128);
 
-	/* Enable Rx */
-	g_e1.rx.cr = E1_RX_CR_OVFL_CLR |
-	             E1_RX_CR_MODE_MFA |
-	             E1_RX_CR_ENABLE;
+	g_e1.rx.cr = E1_RX_CR_OVFL_CLR | E1_RX_CR_ENABLE | rx_cr;
 	e1_regs->rx.csr = g_e1.rx.cr;
 
-	/* Enable Tx */
-	g_e1.tx.cr = E1_TX_CR_UNFL_CLR |
-	             (clk_mode ? E1_TX_CR_TICK_REMOTE : E1_TX_CR_TICK_LOCAL) |
-	             E1_TX_CR_MODE_TS0_CRC_E |
-		     E1_TX_CR_ENABLE;
+	g_e1.tx.cr = E1_TX_CR_UNFL_CLR | E1_TX_CR_ENABLE |tx_cr;
 	e1_regs->tx.csr = g_e1.tx.cr;
 
 	/* State */
diff --git a/firmware/ice40-riscv/icE1usb/e1.h b/firmware/ice40-riscv/icE1usb/e1.h
index 05ce19a..fcd4284 100644
--- a/firmware/ice40-riscv/icE1usb/e1.h
+++ b/firmware/ice40-riscv/icE1usb/e1.h
@@ -7,7 +7,7 @@
 
 #pragma once
 
-void e1_init(bool clk_mode);
+void e1_init(uint16_t rx_cr, uint16_t tx_cr);
 void e1_poll(void);
 void e1_debug_print(bool data);
 
diff --git a/firmware/ice40-riscv/icE1usb/fw_app.c b/firmware/ice40-riscv/icE1usb/fw_app.c
index 62f4b0e..eebc21f 100644
--- a/firmware/ice40-riscv/icE1usb/fw_app.c
+++ b/firmware/ice40-riscv/icE1usb/fw_app.c
@@ -102,7 +102,7 @@
 	usb_e1_init();
 
 	/* Start */
-	e1_init(false);		// local tick
+	e1_init(0, 0);
 	e1_active = true;
 	led_state(true);
 	usb_connect();
@@ -138,16 +138,6 @@
 			case 'O':
 				e1_debug_print(true);
 				break;
-			case 'e':
-				e1_init(true);
-				e1_active = true;
-				led_state(true);
-				break;
-			case 'E':
-				e1_init(false);
-				e1_active = true;
-				led_state(true);
-				break;
 			case 'c':
 				usb_connect();
 				break;
diff --git a/firmware/ice40-riscv/icE1usb/usb_e1.c b/firmware/ice40-riscv/icE1usb/usb_e1.c
index e910852..f94b897 100644
--- a/firmware/ice40-riscv/icE1usb/usb_e1.c
+++ b/firmware/ice40-riscv/icE1usb/usb_e1.c
@@ -216,6 +216,22 @@
 	return USB_FND_SUCCESS;
 }
 
+static void _perform_tx_config(void)
+{
+	const struct ice1usb_tx_config *cfg = &g_usb_e1.tx_cfg;
+	e1_tx_config(E1_TX_CR_ENABLE |
+			((cfg->mode & 2) << 1) |
+			((cfg->timing & 1) << 3) |
+			((cfg->alarm & 1) << 4) |
+			((cfg->ext_loopback & 2) << 5) );
+}
+
+static void _perform_rx_config(void)
+{
+	const struct ice1usb_rx_config *cfg = &g_usb_e1.rx_cfg;
+	e1_rx_config(E1_RX_CR_ENABLE | (cfg->mode << 1));
+}
+
 static enum usb_fnd_resp
 _e1_set_intf(const struct usb_intf_desc *base, const struct usb_intf_desc *sel)
 {
@@ -229,6 +245,9 @@
 	if (g_usb_e1.running)
 		return USB_FND_SUCCESS;
 
+	_perform_rx_config();
+	_perform_tx_config();
+
 	g_usb_e1.running = true;
 
 	/* Configure EP1 OUT / EP2 IN */
@@ -276,11 +295,7 @@
 	printf("set_tx_mode %02x%02x%02x%02x\r\n",
 		xfer->data[0], xfer->data[1], xfer->data[2], xfer->data[3]);
 	g_usb_e1.tx_cfg = *cfg;
-	e1_tx_config(E1_TX_CR_ENABLE |
-			((cfg->mode & 2) << 1) |
-			((cfg->timing & 1) << 3) |
-			((cfg->alarm & 1) << 4) |
-			((cfg->ext_loopback & 2) << 5) );
+	_perform_tx_config();
 	return true;
 }
 
@@ -290,7 +305,7 @@
 	const struct ice1usb_rx_config *cfg = (const struct ice1usb_rx_config *) xfer->data;
 	printf("set_rx_mode %02x\r\n", xfer->data[0]);
 	g_usb_e1.rx_cfg = *cfg;
-	e1_rx_config(E1_RX_CR_ENABLE | (cfg->mode << 1));
+	_perform_rx_config();
 	return true;
 }
 

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-e1-hardware/+/21776
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: Ia1cc1e685aad9fe5ceb230b66f35d5cb2829c845
Gerrit-Change-Number: 21776
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/20201217/c112c60e/attachment.htm>


More information about the gerrit-log mailing list