aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/fx3/b200/b200_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/fx3/b200/b200_main.c')
-rw-r--r--firmware/fx3/b200/b200_main.c328
1 files changed, 1 insertions, 327 deletions
diff --git a/firmware/fx3/b200/b200_main.c b/firmware/fx3/b200/b200_main.c
index 38af9ed4e..077ee251b 100644
--- a/firmware/fx3/b200/b200_main.c
+++ b/firmware/fx3/b200/b200_main.c
@@ -12,7 +12,6 @@
#include "b200_main.h"
#include "b200_gpifconfig.h"
-#include "b200_vrq.h"
#include "b200_i2c.h"
#include "cyu3dma.h"
@@ -28,9 +27,6 @@
#include "cyfxversion.h"
#include "pib_regs.h"
-#include <ad9361_transaction.h>
-#include <ad9361_dispatch.h>
-
#define STATIC_SAVER static // Save stack space for variables in a non-re-entrant function (e.g. USB setup callback)
/*
@@ -40,7 +36,6 @@
//#define HAS_HEAP // This requires memory to be set aside for the heap (e.g. required for printing floating-point numbers). You can apply the accompanying patch ('fx3_mem_map.patch') to fx3.ld & cyfxtx.c to create one.
//#define ENABLE_MSG // This will cause the compiled code to exceed the default text memory area (SYS_MEM). You can apply the accompanying patch ('fx3_mem_map.patch') to fx3.ld & cyfxtx.c to resize the memory map so it will fit.
-//#define ENABLE_AD9361_LOGGING // When enabling this, you *must* enable the heap with HAS_HEAP (and apply the accompanying memory map patch 'fx3_mem_map.patch') otherwise the FW will crash when printing a floating-point number (as there is no heap for _sbrk by default)
//#define ENABLE_MANUAL_DMA_XFER
//#define ENABLE_MANUAL_DMA_XFER_FROM_HOST
//#define ENABLE_MANUAL_DMA_XFER_TO_HOST
@@ -69,13 +64,6 @@
#ifdef ENABLE_MSG
#pragma message "msg enabled"
-
-#ifdef ENABLE_AD9361_LOGGING
-#pragma message " AD9361 logging enabled"
-#else
-#pragma message " AD9361 logging disabled"
-#endif // ENABLE_AD9361_LOGGING
-
#else
#pragma message "msg disabled"
#endif // ENABLE_MSG
@@ -156,21 +144,15 @@ static CyU3PThread thread_fpga_config;
#ifdef ENABLE_RE_ENUM_THREAD
static CyU3PThread thread_re_enum;
#endif // ENABLE_RE_ENUM_THREAD
-static CyU3PThread thread_ad9361;
static CyBool_t g_app_running = CyFalse;
static uint8_t g_fx3_state = STATE_UNDEFINED;
-//#define AD9361_DISPATCH_PACKET_SIZE 64 // Must fit into smallest VREQ
#define USB2_VREQ_BUF_SIZE 64
#define USB3_VREQ_BUF_SIZE 512
#define MIN_VREQ_BUF_SIZE USB2_VREQ_BUF_SIZE
#define MAX_VREQ_BUF_SIZE USB3_VREQ_BUF_SIZE
-#if AD9361_DISPATCH_PACKET_SIZE > MIN_VREQ_BUF_SIZE
-#error "AD9361_DISPATCH_PACKET_SIZE must be less than MIN_VREQ_BUF_SIZE"
-#endif
-
static uint16_t g_vendor_req_buff_size = MIN_VREQ_BUF_SIZE;
static uint8_t g_vendor_req_buffer[MAX_VREQ_BUF_SIZE] __attribute__ ((aligned (32)));
static uint16_t g_vendor_req_read_count = 0;
@@ -180,8 +162,6 @@ static uint8_t fw_hash[4] __attribute__ ((aligned (32)));
static uint8_t compat_num[2];
static uint32_t g_fpga_programming_write_count = 0;
-static char g_ad9361_response[AD9361_DISPATCH_PACKET_SIZE];
-
#define COUNTER_MAGIC 0x10024001
#define LOG_BUFFER_SIZE /*MAX_VREQ_BUF_SIZE*/1024 // [Max vreq @ USB3 (64 @ USB2)] Can be larger
static char log_buffer[LOG_BUFFER_SIZE];
@@ -685,214 +665,6 @@ void gpio_interrupt_callback(uint8_t gpio_id) {
}
-// The following two functions are intended to replace write_spi_to_ad9361
-// and read_spi_from_ad9361 after the code porting is complete
-/*! Perform a register write to the ad9361 chip.
- * A pointer to the register address followed by data will be provided as
- * parameter
- */
-static void write_ad9361_reg(uint16_t reg, uint8_t val) {
-
- CyBool_t gpio_value;
- uint8_t write_buff[3];
- MAKE_AD9361_WRITE(write_buff, reg, val)
-
- // Number of bytes we are writing.
- uint8_t num_bytes = 3; //register address = 2 bytes, data = 1 byte
-
- CyU3PGpioSetValue(GPIO_FX3_CE, 0);
-
- // Clock the data out to AD9361 over SPI.
- int8_t bit_count, byte_count;
- for(byte_count = 0; byte_count < num_bytes; byte_count++) {
-
- uint8_t miso = 0x00;
- uint8_t data = write_buff[byte_count];
-
- for(bit_count = 7; bit_count >= 0; bit_count--) {
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 1);
- CyU3PGpioSetValue(GPIO_FX3_MOSI, ((data >> bit_count) & 0x01));
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 0);
-
- CyU3PGpioGetValue(GPIO_FX3_MISO, &gpio_value);
- if(gpio_value) {
- miso |= (1 << bit_count);
- }
- }
- // FIXME: Determine what to do with miso value;
- }
-
- CyU3PGpioSetValue(GPIO_FX3_MOSI, 0);
- CyU3PGpioSetValue(GPIO_FX3_CE, 1);
-}
-
-/*! Perform a register read from to the ad9361 chip.
- * A pointer to register address will be provided as parameter
- * The function returns the value read from the register
- */
-static uint8_t read_ad9361_reg(uint16_t reg) {
-
- CyBool_t gpio_value;
- uint8_t write_buff[2];
- MAKE_AD9361_READ(write_buff, reg)
-
- // Each 9361 register read returns 1 byte
-
- CyU3PGpioSetValue(GPIO_FX3_CE, 0);
-
- // Write the two register address bytes.
- int8_t bit_count, byte_count;
- for(byte_count = 0; byte_count < 2; byte_count++) {
-
- uint8_t miso = 0x00;
- uint8_t data = write_buff[byte_count];
-
- for(bit_count = 7; bit_count >= 0; bit_count--) {
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 1);
- CyU3PGpioSetValue(GPIO_FX3_MOSI, ((data >> bit_count) & 0x01));
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 0);
-
- CyU3PGpioGetValue(GPIO_FX3_MISO, &gpio_value);
- if(gpio_value) {
- miso |= (1 << bit_count);
- }
- }
- // FIXME: Determine what to do with miso value;
- }
-
- CyU3PGpioSetValue(GPIO_FX3_MOSI, 0);
-
- // Read the response data from the chip.
- uint8_t data = 0x00;
-
- for(bit_count = 7; bit_count >= 0; bit_count--) {
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 1);
-
- CyU3PGpioGetValue(GPIO_FX3_MISO, &gpio_value);
- if(gpio_value) {
- data |= (1 << bit_count);
- }
-
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 0);
- }
- CyU3PGpioSetValue(GPIO_FX3_CE, 1);
- return data;
-}
-
-/*! Perform a register write to the ad9361 chip.
- *
- * This function will take data received over EP0, as a vendor request, and
- * perform a SPI write to ad9361. This requires that the FPGA be passing these
- * SPI lines through to the ad9361 chip. */
-void write_spi_to_ad9361(void) {
-
- CyBool_t gpio_value;
-
- /* Pull out the number of bytes we are writing. */
- uint8_t num_bytes = ((g_vendor_req_buffer[0] & 0x70) >> 4) + 1;
-
- CyU3PGpioSetValue(GPIO_FX3_CE, 0);
-
- /* Clock the data out to AD9361 over SPI. */
- int8_t bit_count, byte_count;
- for(byte_count = 0; byte_count < (num_bytes + 2); byte_count++) {
-
- uint8_t miso = 0x00;
- uint8_t data = g_vendor_req_buffer[byte_count];
-
- for(bit_count = 7; bit_count >= 0; bit_count--) {
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 1);
- CyU3PGpioSetValue(GPIO_FX3_MOSI, ((data >> bit_count) & 0x01));
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 0);
-
- CyU3PGpioGetValue(GPIO_FX3_MISO, &gpio_value);
- if(gpio_value) {
- miso |= (1 << bit_count);
- }
- }
-
- g_vendor_req_buffer[byte_count] = miso;
- }
-
- CyU3PGpioSetValue(GPIO_FX3_MOSI, 0);
- CyU3PGpioSetValue(GPIO_FX3_CE, 1);
-}
-
-
-/*! Perform a register read from the ad9361 chip.
- *
- * This function will write a command to the ad9361 chip, performing a register
- * read, and store the returned data in the vendor request buffer. This data can
- * then be retrieved with another vendor request from the host.
- *
- * This requires that the FPGA be passing these SPI lines through to the
- * ad9361 chip. */
-void read_spi_from_ad9361(void) {
-
- CyBool_t gpio_value;
-
- /* Pull out the number of bytes we are reading. */
- uint8_t num_bytes = ((g_vendor_req_buffer[0] & 0x70) >> 4) + 1;
-
- CyU3PGpioSetValue(GPIO_FX3_CE, 0);
-
- /* Write the two instruction bytes. */
- int8_t bit_count, byte_count;
- for(byte_count = 0; byte_count < 2; byte_count++) {
-
- uint8_t miso = 0x00;
- uint8_t data = g_vendor_req_buffer[byte_count];
-
- for(bit_count = 7; bit_count >= 0; bit_count--) {
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 1);
- CyU3PGpioSetValue(GPIO_FX3_MOSI, ((data >> bit_count) & 0x01));
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 0);
-
- CyU3PGpioGetValue(GPIO_FX3_MISO, &gpio_value);
- if(gpio_value) {
- miso |= (1 << bit_count);
- }
- }
-
- g_vendor_req_buffer[byte_count] = miso;
- }
-
- CyU3PGpioSetValue(GPIO_FX3_MOSI, 0);
-
- /* Read the response data from the chip. */
- for(byte_count = 0; byte_count < num_bytes; byte_count++) {
-
- uint8_t data = 0x00;
-
- for(bit_count = 7; bit_count >= 0; bit_count--) {
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 1);
-
- CyU3PGpioGetValue(GPIO_FX3_MISO, &gpio_value);
- if(gpio_value) {
- data |= (1 << bit_count);
- }
-
- CyU3PGpioSetValue(GPIO_FX3_SCLK, 0);
- }
-
- g_vendor_req_buffer[byte_count + 2] = data;
- }
-
- CyU3PGpioSetValue(GPIO_FX3_CE, 1);
-}
-
-
-uint32_t ad9361_transact_spi(const uint32_t bits) {
- // FIXME: Could make this more sane
- if ((bits >> 23) & 0x1)
- {
- write_ad9361_reg(bits >> 8, bits & 0xff);
- return 0;
- }
- return read_ad9361_reg(bits >> 8);
-}
-
-
/*! Stops the application, and destroys transport data structures.
*
* This function is essentially a destructor for all transport configurations.
@@ -1891,22 +1663,6 @@ CyBool_t usb_setup_callback(uint32_t data0, uint32_t data1) {
break;
}
- case B200_VREQ_SPI_WRITE_AD9361: {
- CyU3PUsbGetEP0Data(g_vendor_req_buff_size, g_vendor_req_buffer, \
- &read_count);
-
- write_spi_to_ad9361(); // FIXME: Should have g_vendor_req_buffer & read_count passed in as args
- break;
- }
-
- case B200_VREQ_SPI_READ_AD9361: {
- CyU3PUsbGetEP0Data(g_vendor_req_buff_size, g_vendor_req_buffer, \
- &read_count);
-
- read_spi_from_ad9361(); // FIXME: Should have g_vendor_req_buffer & read_count passed in as args
- break;
- }
-
case B200_VREQ_LOOP_CODE: {
CyU3PUsbSendEP0Data(g_vendor_req_buff_size, g_vendor_req_buffer);
break;
@@ -2152,55 +1908,6 @@ CyBool_t usb_setup_callback(uint32_t data0, uint32_t data1) {
break;
}
- case B200_VREQ_AD9361_CTRL_READ: {
- CyU3PUsbSendEP0Data(g_vendor_req_buff_size, g_vendor_req_buffer);
- /*
- * This is where vrb gets sent back to the host
- */
- break;
- }
-
- case B200_VREQ_AD9361_CTRL_WRITE: {
- CyU3PUsbGetEP0Data(g_vendor_req_buff_size, g_vendor_req_buffer, &read_count);
- CyU3PEventSet(&g_event_usb_config, EVENT_AD9361_XACT_INIT, CYU3P_EVENT_OR);
-
- uint32_t event_flag;
- CyU3PEventGet(&g_event_usb_config, EVENT_AD9361_XACT_DONE, CYU3P_EVENT_AND_CLEAR, &event_flag, CYU3P_WAIT_FOREVER);
-
- memcpy(g_vendor_req_buffer, g_ad9361_response, AD9361_DISPATCH_PACKET_SIZE);
- break;
- }
-
- case B200_VREQ_AD9361_LOOPBACK: {
- CyU3PUsbGetEP0Data(g_vendor_req_buff_size, g_vendor_req_buffer, &read_count);
-
- if (read_count > 0) {
- ad9361_transaction_t xact;
- memset(&xact, 0x00, sizeof(xact));
-
- xact.version = AD9361_TRANSACTION_VERSION;
- xact.action = AD9361_ACTION_SET_CODEC_LOOP;
- xact.sequence = 0;
- xact.value.codec_loop = g_vendor_req_buffer[0];
-
- memcpy(g_vendor_req_buffer, &xact, sizeof(xact));
-
- CyU3PEventSet(&g_event_usb_config, EVENT_AD9361_XACT_INIT, CYU3P_EVENT_OR);
-
- uint32_t event_flag;
- CyU3PEventGet(&g_event_usb_config, EVENT_AD9361_XACT_DONE, CYU3P_EVENT_AND_CLEAR, &event_flag, CYU3P_WAIT_FOREVER);
-
- memcpy(g_vendor_req_buffer, g_ad9361_response, AD9361_DISPATCH_PACKET_SIZE);
-
- if (xact.value.codec_loop)
- msg("Codec loopback ON");
- else
- msg("Codec loopback OFF");
- }
-
- break;
- }
-
default:
msg("! Unknown VREQ %02X", (uint32_t)bRequest);
handled = CyFalse;
@@ -2684,23 +2391,6 @@ void thread_main_app_entry(uint32_t input) {
}
}
-
-void thread_ad9361_entry(uint32_t input) {
- uint32_t event_flag;
-
- //msg("thread_ad9361_entry");
-
- while (1) {
- if (CyU3PEventGet(&g_event_usb_config, \
- EVENT_AD9361_XACT_INIT, CYU3P_EVENT_AND_CLEAR, \
- &event_flag, CYU3P_WAIT_FOREVER) == CY_U3P_SUCCESS) {
- ad9361_dispatch((const char*)g_vendor_req_buffer, g_ad9361_response);
-
- CyU3PEventSet(&g_event_usb_config, EVENT_AD9361_XACT_DONE, CYU3P_EVENT_OR);
- }
- }
-}
-
static uint16_t g_poll_last_phy_error_count = 0, g_poll_last_link_error_count = 0;
static uint32_t g_poll_last_phy_error_status = 0;
@@ -2966,7 +2656,7 @@ void thread_fpga_sb_poll_entry(uint32_t input) {
* If thread creation fails, lock the system and force a power reset.
*/
void CyFxApplicationDefine(void) {
- void *app_thread_ptr, *fpga_thread_ptr, *ad9361_thread_ptr;
+ void *app_thread_ptr, *fpga_thread_ptr;
#ifdef ENABLE_RE_ENUM_THREAD
void *re_enum_thread_ptr;
#endif // ENABLE_RE_ENUM_THREAD
@@ -2975,9 +2665,6 @@ void CyFxApplicationDefine(void) {
#endif // ENABLE_FPGA_SB
g_counters.magic = COUNTER_MAGIC;
-#ifdef ENABLE_AD9361_LOGGING
- ad9361_set_msgfn(msg);
-#endif // ENABLE_AD9361_LOGGING
memset(&g_config, 0xFF, sizeof(g_config)); // Initialise to -1
CyU3PMutexCreate(&g_log_lock, CYU3P_NO_INHERIT);
@@ -3032,7 +2719,6 @@ void CyFxApplicationDefine(void) {
#ifdef ENABLE_RE_ENUM_THREAD
re_enum_thread_ptr = CyU3PMemAlloc(APP_THREAD_STACK_SIZE);
#endif // ENABLE_RE_ENUM_THREAD
- ad9361_thread_ptr = CyU3PMemAlloc(APP_THREAD_STACK_SIZE);
#ifdef ENABLE_FPGA_SB
fpga_sb_poll_thread_ptr = CyU3PMemAlloc(APP_THREAD_STACK_SIZE);
#endif // ENABLE_FPGA_SB
@@ -3077,18 +2763,6 @@ void CyFxApplicationDefine(void) {
CYU3P_NO_TIME_SLICE,
CYU3P_AUTO_START);
#endif // ENABLE_RE_ENUM_THREAD
- /* Create thread to handle AD9361 transactions */
- if (ad9361_thread_ptr != NULL)
- CyU3PThreadCreate(&thread_ad9361,
- "500:B200 AD9361",
- thread_ad9361_entry,
- 0,
- ad9361_thread_ptr,
- APP_THREAD_STACK_SIZE,
- THREAD_PRIORITY,
- THREAD_PRIORITY,
- CYU3P_NO_TIME_SLICE,
- CYU3P_AUTO_START);
#ifdef ENABLE_FPGA_SB
/* Create thread to handling Settings Bus logging/transactions */
if (fpga_sb_poll_thread_ptr != NULL)