This is an automated email from Gerrit.

"ahmed BOUDJELIDA <aboudjel...@nanoxplore.com>" just uploaded a new patch set 
to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7988

-- gerrit

commit 264bbd7c5209457ae0f13db5015a04605a215417
Author: Ahmed BOUDJELIDA <aboudjel...@nanoxplore.com>
Date:   Tue Nov 21 17:45:55 2023 +0100

    jtag/drivers: send bitstream size to firmware via libusb
    
    Send bitstream size to firmware to initialize the GPIF count registers,
    since we're going to send this size via GPIF, we need to give the exact
    number of bytes to be sent, then the GPIF counter will decrement with
    every clock cycle (every byte sent) until reaching zero and stops.
    
    Change-Id: Ib4e8e0f95a6a4a95ef4888ba8a04a0ea45567f5a
    Signed-off-by: Ahmed BOUDJELIDA <aboudjel...@nanoxplore.com>

diff --git a/src/jtag/drivers/angie.c b/src/jtag/drivers/angie.c
index b6bde5b3b9..9a60dd7869 100644
--- a/src/jtag/drivers/angie.c
+++ b/src/jtag/drivers/angie.c
@@ -61,7 +61,7 @@
 #define ANGIE_FIRMWARE_FILE            PKGDATADIR "/angie/angie_firmware.bin"
 
 /** Default location of ANGIE firmware image. */
-#define ANGIE_BITSTREAM_FILE   PKGDATADIR "/angie/angie_bitstream.bit"
+#define ANGIE_BITSTREAM_FILE           PKGDATADIR "/angie/angie_bitstream.bit"
 
 /** Maximum size of a single firmware section. Entire EZ-USB ANGIE code space 
= 16kB */
 #define SECTION_BUFFERSIZE             16384
@@ -405,15 +405,6 @@ static int angie_load_bitstream(struct angie *device, 
const char *filename)
        char *bitstream_data = NULL;
        size_t bitstream_size = 0;
 
-       /* CFGopen */
-       ret = jtag_libusb_control_transfer(device->usb_device_handle,
-               0x00, 0xB0, 0, 0, NULL, 0, LIBUSB_TIMEOUT_MS, &transferred);
-       if (ret != ERROR_OK) {
-               LOG_ERROR("Failed opencfg");
-               /* Abort if libusb sent less data than requested */
-               return ERROR_FAIL;
-       }
-
        /* Open the bitstream file */
        bitstream_file = fopen(bitstream_file_path, "rb");
        if (!bitstream_file) {
@@ -442,6 +433,21 @@ static int angie_load_bitstream(struct angie *device, 
const char *filename)
                return ERROR_FAIL;
        }
 
+       char gpifcnt[4];
+       gpifcnt[0] = (uint8_t)(((uint32_t)(bitstream_size) >> 24) & 0xFF);
+       gpifcnt[1] = (uint8_t)(((uint32_t)(bitstream_size) >> 16) & 0xFF);
+       gpifcnt[2] = (uint8_t)(((uint32_t)(bitstream_size) >> 8) & 0xFF);
+       gpifcnt[3] = (uint8_t)(bitstream_size & 0xFF);
+
+       /* CFGopen */
+       ret = jtag_libusb_control_transfer(device->usb_device_handle,
+               0x00, 0xB0, 0, 0, gpifcnt, 4, LIBUSB_TIMEOUT_MS, &transferred);
+       if (ret != ERROR_OK) {
+               LOG_ERROR("Failed opencfg");
+               /* Abort if libusb sent less data than requested */
+               return ERROR_FAIL;
+       }
+
        /* Send the bitstream data to the microcontroller */
        int actual_length = 0;
        ret = jtag_libusb_bulk_write(device->usb_device_handle, 0x02, 
bitstream_data, bitstream_size, 1000, &actual_length);

-- 

Reply via email to