)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24ed54c667480a67375f7ba701d5da1857fb6038","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c92301b3_7e9e9c2c","updated":"2024-11-11 22:43:03.000000000","message":"I see here that some of the include files of previous patch are reused, so I was partially wrong in suggesting to inline the the include in the C file. I let you judge.\n\nMost of the other comments in previous patch applies here too.\n\nPlus, there is an endianness bug that should be addressed replacing the packet struct by an array.\nPlease have a look at https://openocd.org/doc/doxygen/html/endianness.html","commit_id":"732f039f33b4274ecf514bf9c28718976013d472"},{"author":{"_account_id":1002366,"name":"Liam Fletcher","display_name":"Li-Fletch","email":"liam.fletcher@microchip.com","username":"Li-Fletch","status":"Microchip"},"change_message_id":"ff0d6011645cc87626201059c5d875256ed52979","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d8239481_b868315d","updated":"2025-02-06 15:37:49.000000000","message":"Thanks Oleksij, hope the changes are satisfactory","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"20ec3d9bb7a4440481ee0b510b6bb3bf21a2d834","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"94c65199_6a695ac9","updated":"2025-10-29 09:45:58.000000000","message":"I tried to run https://github.com/riscv-software-src/riscv-tests\nagainst PolarFire SoC Icicle Kit and therefore used this driver.\n\nThe driver with EFP6 adapter is very unstable.\n\nOne problem was missing flush when continuous write overflowed `usb_in_buffer`\nI added a quick fix, please continue with correct error handling.\n\nThe second problem is that adapter very often hangs and the power off-on cycle looks like the only way to get it work again.\n```\nInfo : Embedded FlashPro6 Rev B found (1514:200b Microchip Embedded FP6b A25AC100)\nError: Embedded FlashPro6 failed to send the data.\nError: Programmer device reset is required.  Err \u003d -1 (Connection timed out)\nError: Embedded FlashPro6 failed to read firmware version number (-1)\nError: Embedded FlashPro6 get_cm3_version failed (-1)\n/home/vanekt/riscv-tests/debug/targets/Microchip/PolarFire.cfg:12: Error:\nTraceback (most recent call last):\n  File \"/home/vanekt/riscv-tests/debug/targets/Microchip/PolarFire.cfg\", line 12, in script\n    init\nError: [mpfs.e51] Unsupported DTM version: -1\nError: [mpfs.e51] Could not identify target type.\nError: [mpfs.u54_1] Unsupported DTM version: -1\nError: [mpfs.u54_1] Could not identify target type.\nError: [mpfs.u54_2] Unsupported DTM version: -1\nError: [mpfs.u54_2] Could not identify target type.\nError: [mpfs.u54_3] Unsupported DTM version: -1\nError: [mpfs.u54_3] Could not identify target type.\nError: [mpfs.u54_4] Unsupported DTM version: -1\nError: [mpfs.u54_4] Could not identify target type.\n```\n\nPerhaps a EFP6 firmware problem?\nHow to update it? I downloaded your FlashPro Express bloatware and it doesn\u0027t want to upgrade firmware. It shows\n```\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nProgrammer: Embedded FP6 \u0027A25AC100\u0027 : Version \u003d EF9B\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nprogrammer \u0027A25AC100\u0027 : Embedded FlashPro6\n```\nIs it the latest version?","commit_id":"6cedbd4002e5f37dd88589818ddc5de6970dc8b7"},{"author":{"_account_id":1002366,"name":"Liam Fletcher","display_name":"Li-Fletch","email":"liam.fletcher@microchip.com","username":"Li-Fletch","status":"Microchip"},"change_message_id":"430dfcc3e11d7bff833db1268f1c1471dd08f17d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8309dd8a_240c7c64","in_reply_to":"94c65199_6a695ac9","updated":"2025-11-18 07:40:38.000000000","message":"With the Flashpro devices, they are primarily designed to work with our design tools (Libero/ Flashpro Express) to enable programming of the FPGA and to perform design related services.\n \nWe now realise that the attempt at upstreaming driver support for the FlashPro 5/6 and embedded FlashPro 6 was premature and need a high degree of re-work before they will be suitable. If it makes sense to you, we could drop these patches?\n \nWe would like to concentrate on providing support for our platform with already upstreamed debug probes (such as the ftdi based debug probes) which work on our platform. This also means focusing our attention on the issue (1307) that you have raised on riscv-openocd GitHub.\n\nWith regards to updating the embedded Flashpro 6 firmware version, there is no firmware update available, it is the latest version.","commit_id":"6cedbd4002e5f37dd88589818ddc5de6970dc8b7"}],"src/jtag/drivers/mchp_efp6.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24ed54c667480a67375f7ba701d5da1857fb6038","unresolved":true,"context_lines":[{"line_number":29,"context_line":"static uint32_t bytes_in_buffer \u003d EFP6_PACKET_OFFSET;"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"__attribute__((always_inline)) inline"},{"line_number":32,"context_line":"static void write16(uint8_t *buf, uint16_t val)"},{"line_number":33,"context_line":"{"},{"line_number":34,"context_line":"\tuint8_t *ptr \u003d buf;"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":1,"id":"ef5d264f_7f751a26","line":32,"updated":"2024-11-11 22:43:03.000000000","message":"Please use `h_u16_to_le()` in place of this function","commit_id":"732f039f33b4274ecf514bf9c28718976013d472"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24ed54c667480a67375f7ba701d5da1857fb6038","unresolved":true,"context_lines":[{"line_number":37,"context_line":"\t*ptr \u003d val \u003e\u003e 8;"},{"line_number":38,"context_line":"}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"__attribute__((always_inline)) inline"},{"line_number":41,"context_line":"static void add_usb_packet_header(uint16_t packet_type, uint32_t target_address, uint32_t packet_length)"},{"line_number":42,"context_line":"{"},{"line_number":43,"context_line":"\tuint8_t *ptr \u003d \u0026usb_in_buffer[bytes_in_buffer];"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"b521cb4b_62cee74e","line":40,"updated":"2024-11-11 22:43:03.000000000","message":"Drop all the inline, let the compiler take its way to optimize.\nHere the time is spent in the USB communication, not in these functions","commit_id":"732f039f33b4274ecf514bf9c28718976013d472"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24ed54c667480a67375f7ba701d5da1857fb6038","unresolved":true,"context_lines":[{"line_number":173,"context_line":"\tint err;"},{"line_number":174,"context_line":"\tuint32_t byte_length;"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"\tbyte_length \u003d (bit_length + 7) / 8;"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"\terr \u003d construct_and_send_packet(READ_TDO_BUFFER_COMMAND_OPCODE, NULL, 0, 0);"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":1,"id":"6d20fef6_32a72a71","line":176,"updated":"2024-11-11 22:43:03.000000000","message":"`byte_length \u003d ALIGN_UP(bit_length, 8);`","commit_id":"732f039f33b4274ecf514bf9c28718976013d472"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"24ed54c667480a67375f7ba701d5da1857fb6038","unresolved":true,"context_lines":[{"line_number":432,"context_line":"\t__attribute__((aligned(8)))"},{"line_number":433,"context_line":"\tstatic struct efp6_ir_scan full_scan \u003d {"},{"line_number":434,"context_line":"\t\t.set_len \u003d {"},{"line_number":435,"context_line":"\t\t\t.packet_start \u003d FP_PACKET_START_CODE,"},{"line_number":436,"context_line":"\t\t\t.packet_type \u003d SET_SHIFT_IR_DR_BIT_LENGTH_OPCODE,"},{"line_number":437,"context_line":"\t\t\t.address \u003d 0,"},{"line_number":438,"context_line":"\t\t\t.len_high \u003d 0,"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"abb62fd8_4f7bc15e","line":435,"updated":"2024-11-11 22:43:03.000000000","message":"BUG! endianness issue!\n`FP_PACKET_START_CODE\u003d1`\n`uint16_t packet_start;`\nOn little endian host PC this will write `{0x01, 0x00}`.\nOn big endian host this will write `{0x00, 0x01}`.\nSame for all the assignment in these structs.\n\nI suggest you to drop these\n`struct __attribute__((__packed__)) efp6_packet_atomic`\nand replace them with a simple `uint8_t array[16];`\nActually when I see a struct with packet attribute I directly go to look for the endianness bug.\n\nIn the functions above, like in `add_usb_packet_header()` the code is correct as it converts the struct to a `uint8_t *` and fill it in a endianness independent way.\nBut here no, here it is broken!","commit_id":"732f039f33b4274ecf514bf9c28718976013d472"},{"author":{"_account_id":1000410,"name":"Oleksij Rempel","email":"linux@rempel-privat.de","username":"olerem"},"change_message_id":"590801d0f009043a3599c63074e7bc4518170930","unresolved":true,"context_lines":[{"line_number":99,"context_line":"\tusb_in_buffer_reportid[0] \u003d 0;"},{"line_number":100,"context_line":"\t#endif"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"\tusb_in_buffer[0] \u003d packets_in_buffer;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"\tif (quitting)"},{"line_number":105,"context_line":"\t\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"a874e34a_dbe44279","line":102,"updated":"2025-01-31 06:10:56.000000000","message":"Please move the windows workaround to a separate function and reduce amount of ifdefs, otherwise is is harder to read the code. Here is one example on how it can be done:\n```\n\nstatic void get_usb_in_buffer(uint8_t **buffer, size_t *size)\n{\n#ifdef __MINGW32__\n    static uint8_t usb_in_buffer_reportid[FP_MAX_USB_BUFFER_BYTE_SIZE + 1];\n    usb_in_buffer_reportid[0] \u003d 0;\n    memcpy(usb_in_buffer_reportid + 1, usb_in_buffer, FP_MAX_USB_BUFFER_BYTE_SIZE);\n    *buffer \u003d usb_in_buffer_reportid;\n    *size \u003d FP_MAX_USB_BUFFER_BYTE_SIZE + 1;\n#else\n    *buffer \u003d usb_in_buffer;\n    *size \u003d FP_MAX_USB_BUFFER_BYTE_SIZE;\n#endif\n}\n\nstatic int flush_usb_buffer(void)\n{\n    int err;\n    if (quitting)\n        return ERROR_OK;\n\n    usb_in_buffer[0] \u003d packets_in_buffer;\n    uint8_t *buffer;\n    size_t size;\n    get_usb_in_buffer(\u0026buffer, \u0026size);\n\n    err \u003d hid_write(efp6_handle, buffer, size);\n    if (err \u003c 0) {\n        LOG_ERROR(\"Embedded FlashPro6 failed to send the data.\");\n        LOG_ERROR(\"Programmer device reset is required.  Err \u003d %d (%ls)\", err, hid_error(efp6_handle));\n        exit(0);\n    }\n```","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1002366,"name":"Liam Fletcher","display_name":"Li-Fletch","email":"liam.fletcher@microchip.com","username":"Li-Fletch","status":"Microchip"},"change_message_id":"ff0d6011645cc87626201059c5d875256ed52979","unresolved":true,"context_lines":[{"line_number":99,"context_line":"\tusb_in_buffer_reportid[0] \u003d 0;"},{"line_number":100,"context_line":"\t#endif"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"\tusb_in_buffer[0] \u003d packets_in_buffer;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"\tif (quitting)"},{"line_number":105,"context_line":"\t\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"6467710c_0fbeb97c","line":102,"in_reply_to":"01aa131e_63270265","updated":"2025-02-06 15:37:49.000000000","message":"Hi Oleksij, this has addressed as per the provided example (thank you) 😊","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1002335,"name":"Conor Paxton","display_name":"con-pax","email":"conor.paxton@microchip.com","username":"con-pax","status":"Microchip"},"change_message_id":"c3e578e70b45340d5e3f9fc9fd706a17274a9fd5","unresolved":true,"context_lines":[{"line_number":99,"context_line":"\tusb_in_buffer_reportid[0] \u003d 0;"},{"line_number":100,"context_line":"\t#endif"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"\tusb_in_buffer[0] \u003d packets_in_buffer;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"\tif (quitting)"},{"line_number":105,"context_line":"\t\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"01aa131e_63270265","line":102,"in_reply_to":"2164fade_855efcd0","updated":"2025-01-31 17:41:52.000000000","message":"\u003e I noticed that i proposed bad code (-ENOCAFFE), but I hope you get the idea :)\nHi Oleksij,\n\n-ENOCAFFE gave me a good laugh!! so thanks for that. We will look at reducing our #if/ #elsery, thanks again","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1000410,"name":"Oleksij Rempel","email":"linux@rempel-privat.de","username":"olerem"},"change_message_id":"caef81931086aa463dcc53550a075aaa9a611dbb","unresolved":true,"context_lines":[{"line_number":99,"context_line":"\tusb_in_buffer_reportid[0] \u003d 0;"},{"line_number":100,"context_line":"\t#endif"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"\tusb_in_buffer[0] \u003d packets_in_buffer;"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"\tif (quitting)"},{"line_number":105,"context_line":"\t\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"2164fade_855efcd0","line":102,"in_reply_to":"a874e34a_dbe44279","updated":"2025-01-31 07:13:57.000000000","message":"I noticed that i proposed bad code (-ENOCAFFE), but I hope you get the idea :)","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1000410,"name":"Oleksij Rempel","email":"linux@rempel-privat.de","username":"olerem"},"change_message_id":"590801d0f009043a3599c63074e7bc4518170930","unresolved":true,"context_lines":[{"line_number":124,"context_line":"\tif (err \u003c (int)FP_MAX_USB_BUFFER_BYTE_SIZE) {"},{"line_number":125,"context_line":"\t\tLOG_ERROR(\"Failed to read data from USB buffer.\");"},{"line_number":126,"context_line":"\t\tLOG_ERROR(\"Programmer reset is required.  Err \u003d %d (%ls)\", err, hid_error(efp6_handle));"},{"line_number":127,"context_line":"\t\texit(0);"},{"line_number":128,"context_line":"\t}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"\tbytes_in_buffer \u003d EFP6_PACKET_OFFSET;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"e3f77a2e_dfd7d4f2","line":127,"updated":"2025-01-31 06:10:56.000000000","message":"Please, do not use exit() anywhere in your drivers.","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1002335,"name":"Conor Paxton","display_name":"con-pax","email":"conor.paxton@microchip.com","username":"con-pax","status":"Microchip"},"change_message_id":"7b1ccbab7a046fa3249978c3674e81f169abfcca","unresolved":true,"context_lines":[{"line_number":124,"context_line":"\tif (err \u003c (int)FP_MAX_USB_BUFFER_BYTE_SIZE) {"},{"line_number":125,"context_line":"\t\tLOG_ERROR(\"Failed to read data from USB buffer.\");"},{"line_number":126,"context_line":"\t\tLOG_ERROR(\"Programmer reset is required.  Err \u003d %d (%ls)\", err, hid_error(efp6_handle));"},{"line_number":127,"context_line":"\t\texit(0);"},{"line_number":128,"context_line":"\t}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"\tbytes_in_buffer \u003d EFP6_PACKET_OFFSET;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"ff5bc14b_9931023e","line":127,"in_reply_to":"e3f77a2e_dfd7d4f2","updated":"2025-01-31 12:27:16.000000000","message":"\u003e Please, do not use exit() anywhere in your drivers.\n\nHi Oleksij, thank you for your review. You are absolutely right, there is someone working on this","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1002366,"name":"Liam Fletcher","display_name":"Li-Fletch","email":"liam.fletcher@microchip.com","username":"Li-Fletch","status":"Microchip"},"change_message_id":"ff0d6011645cc87626201059c5d875256ed52979","unresolved":true,"context_lines":[{"line_number":124,"context_line":"\tif (err \u003c (int)FP_MAX_USB_BUFFER_BYTE_SIZE) {"},{"line_number":125,"context_line":"\t\tLOG_ERROR(\"Failed to read data from USB buffer.\");"},{"line_number":126,"context_line":"\t\tLOG_ERROR(\"Programmer reset is required.  Err \u003d %d (%ls)\", err, hid_error(efp6_handle));"},{"line_number":127,"context_line":"\t\texit(0);"},{"line_number":128,"context_line":"\t}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"\tbytes_in_buffer \u003d EFP6_PACKET_OFFSET;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"d6fa7a74_ca41ec5e","line":127,"in_reply_to":"ff5bc14b_9931023e","updated":"2025-02-06 15:37:49.000000000","message":"Hi Oleksij, fixed thanks.","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1000410,"name":"Oleksij Rempel","email":"linux@rempel-privat.de","username":"olerem"},"change_message_id":"590801d0f009043a3599c63074e7bc4518170930","unresolved":true,"context_lines":[{"line_number":133,"context_line":"\treturn ERROR_OK;"},{"line_number":134,"context_line":"}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"static void add_packet_to_usb_buffer(uint16_t opcode, const uint8_t *buf, uint32_t packet_length,"},{"line_number":137,"context_line":"\t\t\t\t\t\t\t\t\t\t\t\tuint32_t num_padding_bytes, uint32_t target_address)"},{"line_number":138,"context_line":"{"},{"line_number":139,"context_line":"\tif (buf)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"0202c8d7_6fb5ddae","line":136,"updated":"2025-01-31 06:10:56.000000000","message":"please use driver specific prefixes and add comments to the functions. With this patch set you transfer the maintenance to the community. Every one outside of the microchip should be able to understand what is happening here.","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1002366,"name":"Liam Fletcher","display_name":"Li-Fletch","email":"liam.fletcher@microchip.com","username":"Li-Fletch","status":"Microchip"},"change_message_id":"ff0d6011645cc87626201059c5d875256ed52979","unresolved":true,"context_lines":[{"line_number":133,"context_line":"\treturn ERROR_OK;"},{"line_number":134,"context_line":"}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"static void add_packet_to_usb_buffer(uint16_t opcode, const uint8_t *buf, uint32_t packet_length,"},{"line_number":137,"context_line":"\t\t\t\t\t\t\t\t\t\t\t\tuint32_t num_padding_bytes, uint32_t target_address)"},{"line_number":138,"context_line":"{"},{"line_number":139,"context_line":"\tif (buf)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"ca26c8cc_31e20b2c","line":136,"in_reply_to":"0202c8d7_6fb5ddae","updated":"2025-02-06 15:37:49.000000000","message":"Hi Oleksij, items addressed thanks","commit_id":"8114b133618d2e1b194846fd67aaf7502871ffa6"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"20ec3d9bb7a4440481ee0b510b6bb3bf21a2d834","unresolved":true,"context_lines":[{"line_number":172,"context_line":"\t */"},{"line_number":173,"context_line":"\tif (bytes_in_buffer + EFP6_PACKET_HEADER_TOTAL_LENGTH"},{"line_number":174,"context_line":"\t\t\t+ packet_length + num_padding_bytes \u003e FP_MAX_USB_BUFFER_BYTE_SIZE)"},{"line_number":175,"context_line":"\t\tmchp_efp6_flush_usb_buffer();"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"\tif (buf)"},{"line_number":178,"context_line":"\t\tmemcpy(\u0026usb_in_buffer[bytes_in_buffer + EFP6_PACKET_HEADER_PREAMBLE_LENGTH], buf, packet_length);"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"81513d66_a8fb2cab","line":175,"updated":"2025-10-29 09:45:58.000000000","message":"I added flush if the buffer going to overflow.\n\nWithout this, OpenOCD segfaults at any continuous write of 10 words or longer!\nHow did you test that you missed such serious problem?\n\nI also added two asserts to confirm it works correctly.\n\nThis is **not finished!** `mchp_efp6_flush_usb_buffer()` may return an error and it should be propagated to `mchp_efp6_add_packet_to_usb_buffer()` callers.","commit_id":"6cedbd4002e5f37dd88589818ddc5de6970dc8b7"}]}
