)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a9005f4d_38c11699","updated":"2025-01-19 14:11:13.000000000","message":"Hi Ryan,\nI don\u0027t work on flash subsystem since ages, I don\u0027t feel comfortable reviewing it apart for some minor style, license, code flow, ...\nI will later put Tomas in copy for the deep review.","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"09023078f913c561b4118ceb87616fa146d7d998","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c7daaf20_c58ab47f","updated":"2025-01-19 14:12:42.000000000","message":"and I think you also need to add something about hpm flash support in `doc/openocd.texi`","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"93530210_e094355f","updated":"2025-01-27 05:06:55.000000000","message":"updated code accordingly","commit_id":"67aab232781ed28c51ef4dc25aa7152b858cefd1"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"5c7b6d0161398c6a51b5a8fed5c1d95bc8ca6c03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"534f2c25_ad52fc4a","updated":"2025-09-13 15:41:04.000000000","message":"Still two minor comments from my side, then fine for me","commit_id":"69949de27ed9525b0acccf440eeb8f6c0512062a"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"ad3d825040eeba53f0c29450955f79fe42c3480b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":27,"id":"32c0a2b0_334d32cd","updated":"2025-11-14 07:00:05.000000000","message":"If I understand correctly, hpm_xpi is SPI/QSPI/... interface and the flash behind is a SPI flash (external?). OpenOCD has the infrastructure for SPI flash devices including SFDP decoding, but this flash driver does not use it and uses some API burned in the ROM instead. I would prefer to design the flash driver as SPI specific, similarly as e.g. fespi.c","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"7bbe10ca_09ed1db9","in_reply_to":"32c0a2b0_334d32cd","updated":"2025-11-14 07:39:04.000000000","message":"We\u0027d like to abstract all flash related operation via our bootrom, so that application will not need to know any details between different flash controller used. But for those devices with out bootloader, we\u0027ll use the available infra.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"800e76d118a22b3dba3d251b23a577c40b8b9c6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"0ab46b49_6ea666cf","updated":"2025-11-27 21:15:18.000000000","message":"Thanks!","commit_id":"53383d55f32bcdeaefb26051f7ccf254833a6208"}],"src/flash/nor/driver.h":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":309,"context_line":"extern const struct flash_driver xcf_flash;"},{"line_number":310,"context_line":"extern const struct flash_driver xmc1xxx_flash;"},{"line_number":311,"context_line":"extern const struct flash_driver xmc4xxx_flash;"},{"line_number":312,"context_line":"extern const struct flash_driver hpm_xpi_flash;"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"#endif /* OPENOCD_FLASH_NOR_DRIVER_H */"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"ac9f6186_9c14e917","line":312,"updated":"2025-01-19 14:11:13.000000000","message":"Please keep the list in alphabetic order","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":309,"context_line":"extern const struct flash_driver xcf_flash;"},{"line_number":310,"context_line":"extern const struct flash_driver xmc1xxx_flash;"},{"line_number":311,"context_line":"extern const struct flash_driver xmc4xxx_flash;"},{"line_number":312,"context_line":"extern const struct flash_driver hpm_xpi_flash;"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"#endif /* OPENOCD_FLASH_NOR_DRIVER_H */"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"4e675b5f_bc09019f","line":312,"in_reply_to":"ac9f6186_9c14e917","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"}],"src/flash/nor/drivers.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":86,"context_line":"\t\u0026xmc4xxx_flash,"},{"line_number":87,"context_line":"\t\u0026w600_flash,"},{"line_number":88,"context_line":"\t\u0026rsl10_flash,"},{"line_number":89,"context_line":"\t\u0026hpm_xpi_flash,"},{"line_number":90,"context_line":"\tNULL,"},{"line_number":91,"context_line":"};"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":5,"id":"b8279ee4_fe153499","line":89,"updated":"2025-01-19 14:11:13.000000000","message":"Please keep the list in alphabetic order","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":86,"context_line":"\t\u0026xmc4xxx_flash,"},{"line_number":87,"context_line":"\t\u0026w600_flash,"},{"line_number":88,"context_line":"\t\u0026rsl10_flash,"},{"line_number":89,"context_line":"\t\u0026hpm_xpi_flash,"},{"line_number":90,"context_line":"\tNULL,"},{"line_number":91,"context_line":"};"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":5,"id":"e6ed5a4a_8bca2291","line":89,"in_reply_to":"b8279ee4_fe153499","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":44,"context_line":"\t\u0026fespi_flash,"},{"line_number":45,"context_line":"\t\u0026fm3_flash,"},{"line_number":46,"context_line":"\t\u0026fm4_flash,"},{"line_number":47,"context_line":"\t\u0026fespi_flash,"},{"line_number":48,"context_line":"\t\u0026hpm_xpi_flash,"},{"line_number":49,"context_line":"\t\u0026jtagspi_flash,"},{"line_number":50,"context_line":"\t\u0026kinetis_flash,"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"99118c7c_2169589c","line":47,"updated":"2025-09-10 14:27:34.000000000","message":"rebase mistake.\nthe `fespi_flash` is already listed few lines above and not part of this patch","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":44,"context_line":"\t\u0026fespi_flash,"},{"line_number":45,"context_line":"\t\u0026fm3_flash,"},{"line_number":46,"context_line":"\t\u0026fm4_flash,"},{"line_number":47,"context_line":"\t\u0026fespi_flash,"},{"line_number":48,"context_line":"\t\u0026hpm_xpi_flash,"},{"line_number":49,"context_line":"\t\u0026jtagspi_flash,"},{"line_number":50,"context_line":"\t\u0026kinetis_flash,"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"ae1596d4_731d61f3","line":47,"in_reply_to":"99118c7c_2169589c","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"}],"src/flash/nor/hpm_xpi.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":21,"context_line":"#define BLOCK_SIZE (4096U)"},{"line_number":22,"context_line":"#define NOR_CFG_OPT_HEADER (0xFCF90000UL)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"typedef struct {"},{"line_number":25,"context_line":"\tuint32_t total_sz_in_bytes;"},{"line_number":26,"context_line":"\tuint32_t sector_sz_in_bytes;"},{"line_number":27,"context_line":"} hpm_flash_info_t;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"05867eb5_f8aa4080","line":24,"updated":"2025-01-19 14:11:13.000000000","message":"Don\u0027t add new typedef for structs. Use\n`struct hpm_flash_info {`","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":21,"context_line":"#define BLOCK_SIZE (4096U)"},{"line_number":22,"context_line":"#define NOR_CFG_OPT_HEADER (0xFCF90000UL)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"typedef struct {"},{"line_number":25,"context_line":"\tuint32_t total_sz_in_bytes;"},{"line_number":26,"context_line":"\tuint32_t sector_sz_in_bytes;"},{"line_number":27,"context_line":"} hpm_flash_info_t;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"73322828_01aaa8fd","line":24,"in_reply_to":"05867eb5_f8aa4080","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"static int hpm_xpi_probe(struct flash_bank *bank)"},{"line_number":38,"context_line":"{"},{"line_number":39,"context_line":"\tint retval \u003d ERROR_OK;"},{"line_number":40,"context_line":"\tstruct reg_param reg_params[6];"},{"line_number":41,"context_line":"\thpm_xpi_priv_t *xpi_priv;"},{"line_number":42,"context_line":"\tint xlen;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"cd5cf5b3_0d786070","line":39,"updated":"2025-01-19 14:11:13.000000000","message":"no need to initialize it.","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"static int hpm_xpi_probe(struct flash_bank *bank)"},{"line_number":38,"context_line":"{"},{"line_number":39,"context_line":"\tint retval \u003d ERROR_OK;"},{"line_number":40,"context_line":"\tstruct reg_param reg_params[6];"},{"line_number":41,"context_line":"\thpm_xpi_priv_t *xpi_priv;"},{"line_number":42,"context_line":"\tint xlen;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"b9f3f9b6_0c996dfb","line":39,"in_reply_to":"cd5cf5b3_0d786070","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":47,"context_line":"\tstruct target *target \u003d bank-\u003etarget;"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":50,"context_line":"\txpi_priv \u003d bank-\u003edriver_priv;"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"\tif (xpi_priv-\u003eprobed) {"},{"line_number":53,"context_line":"\t\txpi_priv-\u003eprobed \u003d false;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"fa837948_27e5b516","line":50,"updated":"2025-01-19 14:11:13.000000000","message":"The new coding style requires the declaration together with the first use, when possible.\n`struct hpm_xpi_priv *xpi_priv \u003d ...`","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":47,"context_line":"\tstruct target *target \u003d bank-\u003etarget;"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":50,"context_line":"\txpi_priv \u003d bank-\u003edriver_priv;"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"\tif (xpi_priv-\u003eprobed) {"},{"line_number":53,"context_line":"\t\txpi_priv-\u003eprobed \u003d false;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"5b53f875_244f30a6","line":50,"in_reply_to":"fa837948_27e5b516","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":62,"context_line":"\t}"},{"line_number":63,"context_line":"\txlen \u003d riscv_xlen(target);"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"\tif (target_alloc_working_area(target, sizeof(flash_algo),"},{"line_number":66,"context_line":"\t\t\t\t\t\u0026wa) !\u003d ERROR_OK) {"},{"line_number":67,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":68,"context_line":"\t\t\t\t\tsizeof(flash_algo));"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"57e843e0_8da09875","line":65,"updated":"2025-01-19 14:11:13.000000000","message":"It\u0027s preferred to have the return value assigned and then tested in a following statement.\n```\nint retval \u003d target_alloc_working_area(...);\nif (retval !\u003d ERROR_OK) {\n```","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\t}"},{"line_number":63,"context_line":"\txlen \u003d riscv_xlen(target);"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"\tif (target_alloc_working_area(target, sizeof(flash_algo),"},{"line_number":66,"context_line":"\t\t\t\t\t\u0026wa) !\u003d ERROR_OK) {"},{"line_number":67,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":68,"context_line":"\t\t\t\t\tsizeof(flash_algo));"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"15a74241_2a2fa4c8","line":65,"in_reply_to":"57e843e0_8da09875","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":66,"context_line":"\t\t\t\t\t\u0026wa) !\u003d ERROR_OK) {"},{"line_number":67,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":68,"context_line":"\t\t\t\t\tsizeof(flash_algo));"},{"line_number":69,"context_line":"\t\twa \u003d NULL;"},{"line_number":70,"context_line":"\t} else {"},{"line_number":71,"context_line":"\t\tretval \u003d target_write_buffer(target, wa-\u003eaddress,"},{"line_number":72,"context_line":"\t\t\t\tsizeof(flash_algo), flash_algo);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"268ea016_123a5ebe","line":69,"updated":"2025-01-19 14:11:13.000000000","message":"This can be directly\n`return retval;`","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":66,"context_line":"\t\t\t\t\t\u0026wa) !\u003d ERROR_OK) {"},{"line_number":67,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":68,"context_line":"\t\t\t\t\tsizeof(flash_algo));"},{"line_number":69,"context_line":"\t\twa \u003d NULL;"},{"line_number":70,"context_line":"\t} else {"},{"line_number":71,"context_line":"\t\tretval \u003d target_write_buffer(target, wa-\u003eaddress,"},{"line_number":72,"context_line":"\t\t\t\tsizeof(flash_algo), flash_algo);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"2969f3fd_268484b6","line":69,"in_reply_to":"268ea016_123a5ebe","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":67,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":68,"context_line":"\t\t\t\t\tsizeof(flash_algo));"},{"line_number":69,"context_line":"\t\twa \u003d NULL;"},{"line_number":70,"context_line":"\t} else {"},{"line_number":71,"context_line":"\t\tretval \u003d target_write_buffer(target, wa-\u003eaddress,"},{"line_number":72,"context_line":"\t\t\t\tsizeof(flash_algo), flash_algo);"},{"line_number":73,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"e317d60a_bf3f2f5f","line":70,"updated":"2025-01-19 14:11:13.000000000","message":"the `else` can disappear once the if above returns. This reduces the indentation of this code","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":67,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":68,"context_line":"\t\t\t\t\tsizeof(flash_algo));"},{"line_number":69,"context_line":"\t\twa \u003d NULL;"},{"line_number":70,"context_line":"\t} else {"},{"line_number":71,"context_line":"\t\tretval \u003d target_write_buffer(target, wa-\u003eaddress,"},{"line_number":72,"context_line":"\t\t\t\tsizeof(flash_algo), flash_algo);"},{"line_number":73,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"bf295bb9_f7780bee","line":70,"in_reply_to":"e317d60a_bf3f2f5f","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":74,"context_line":"\t\t\tLOG_ERROR(\"Failed to write code to 0x%\" TARGET_PRIxADDR \": %d\","},{"line_number":75,"context_line":"\t\t\t\t\twa-\u003eaddress, retval);"},{"line_number":76,"context_line":"\t\t\ttarget_free_working_area(target, wa);"},{"line_number":77,"context_line":"\t\t\twa \u003d NULL;"},{"line_number":78,"context_line":"\t\t}"},{"line_number":79,"context_line":"\t}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":5,"id":"e3208d3d_dbcf1dd9","line":77,"updated":"2025-01-19 14:11:13.000000000","message":"Also this can be directly\n`return retval;`\nas you don\u0027t need to go through `goto err` as the working area is already freed","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":74,"context_line":"\t\t\tLOG_ERROR(\"Failed to write code to 0x%\" TARGET_PRIxADDR \": %d\","},{"line_number":75,"context_line":"\t\t\t\t\twa-\u003eaddress, retval);"},{"line_number":76,"context_line":"\t\t\ttarget_free_working_area(target, wa);"},{"line_number":77,"context_line":"\t\t\twa \u003d NULL;"},{"line_number":78,"context_line":"\t\t}"},{"line_number":79,"context_line":"\t}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":5,"id":"1e4d1376_11e3803e","line":77,"in_reply_to":"e3208d3d_dbcf1dd9","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":78,"context_line":"\t\t}"},{"line_number":79,"context_line":"\t}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"\tif (!wa)"},{"line_number":82,"context_line":"\t\tgoto err;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"\tinit_reg_param(\u0026reg_params[0], \"a0\", xlen, PARAM_IN_OUT);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"2b58e4b9_c13d2863","line":81,"updated":"2025-01-19 14:11:13.000000000","message":"I don\u0027t think `target_alloc_working_area()` can return ERROR_OK and keep `wa \u003d\u003d NULL`, but I have not checked.\nMaybe this test is useless once the code above has been instructed to safely return","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":78,"context_line":"\t\t}"},{"line_number":79,"context_line":"\t}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"\tif (!wa)"},{"line_number":82,"context_line":"\t\tgoto err;"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"\tinit_reg_param(\u0026reg_params[0], \"a0\", xlen, PARAM_IN_OUT);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"a7a086da_38e4a0af","line":81,"in_reply_to":"2b58e4b9_c13d2863","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":97,"context_line":"\t\t\twa-\u003eaddress, wa-\u003eaddress + FLASH_INIT + 4, 500, NULL);"},{"line_number":98,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":99,"context_line":"\t\tLOG_ERROR(\"Failed to execute run algorithm: %d\", retval);"},{"line_number":100,"context_line":"\t\tgoto err;"},{"line_number":101,"context_line":"\t}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"4e234734_e9349183","line":100,"updated":"2025-01-19 14:11:13.000000000","message":"Having dropped the `goto err` before this line, all the remaining `goto err` have `wa !\u003d NULL` so the test can be dropped after label `err:`","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":97,"context_line":"\t\t\twa-\u003eaddress, wa-\u003eaddress + FLASH_INIT + 4, 500, NULL);"},{"line_number":98,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":99,"context_line":"\t\tLOG_ERROR(\"Failed to execute run algorithm: %d\", retval);"},{"line_number":100,"context_line":"\t\tgoto err;"},{"line_number":101,"context_line":"\t}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"0c177697_27a74d69","line":100,"in_reply_to":"4e234734_e9349183","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":106,"context_line":"\t\tgoto err;"},{"line_number":107,"context_line":"\t}"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"\tif (target_alloc_working_area(target, sizeof(flash_info),"},{"line_number":110,"context_line":"\t\t\t\t\t\u0026data_wa) !\u003d ERROR_OK) {"},{"line_number":111,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":112,"context_line":"\t\t\t\t\tsizeof(flash_info));"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"d9a57480_17e07f9f","line":109,"updated":"2025-01-19 14:11:13.000000000","message":"You always need this second work area. It\u0027s better to pre-allocate it before running the `FLASH_INIT` algo.","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":106,"context_line":"\t\tgoto err;"},{"line_number":107,"context_line":"\t}"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"\tif (target_alloc_working_area(target, sizeof(flash_info),"},{"line_number":110,"context_line":"\t\t\t\t\t\u0026data_wa) !\u003d ERROR_OK) {"},{"line_number":111,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":112,"context_line":"\t\t\t\t\tsizeof(flash_info));"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"870d72f0_dd9984d6","line":109,"in_reply_to":"d9a57480_17e07f9f","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":133,"context_line":"\t\tgoto err;"},{"line_number":134,"context_line":"\t}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"\tretval \u003d target_read_memory(target, data_wa-\u003eaddress, xlen \u003e\u003e 3,"},{"line_number":137,"context_line":"\t\t\tsizeof(flash_info) / (xlen \u003e\u003e 3), (uint8_t *)\u0026flash_info);"},{"line_number":138,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":139,"context_line":"\t\tLOG_ERROR(\"Failed to read memory at 0x%\" TARGET_PRIxADDR \": %d\", data_wa-\u003eaddress, retval);"},{"line_number":140,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"2d102bc3_487f00d0","line":137,"range":{"start_line":136,"start_character":1,"end_line":137,"end_character":61},"updated":"2025-01-19 14:11:13.000000000","message":"Endianness issue!\nHere you assume that host running OpenOCD and target share the same endianness.\nYou read the raw 16 bytes in `flash_info` and you assume it\u0027s ok as host\u0027s struct!\nPlease check there is no endianness issue in the other parts of the code, I heve skipped it.\nThere is some hint in `doc/manual/endianness.txt` for testing OpenOCD on a virtual big-endian host. It could help. Also, feedback on that document would be appreciated.","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":133,"context_line":"\t\tgoto err;"},{"line_number":134,"context_line":"\t}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"\tretval \u003d target_read_memory(target, data_wa-\u003eaddress, xlen \u003e\u003e 3,"},{"line_number":137,"context_line":"\t\t\tsizeof(flash_info) / (xlen \u003e\u003e 3), (uint8_t *)\u0026flash_info);"},{"line_number":138,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":139,"context_line":"\t\tLOG_ERROR(\"Failed to read memory at 0x%\" TARGET_PRIxADDR \": %d\", data_wa-\u003eaddress, retval);"},{"line_number":140,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"5af0d148_aaa9cc2c","line":137,"range":{"start_line":136,"start_character":1,"end_line":137,"end_character":61},"in_reply_to":"2d102bc3_487f00d0","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":181,"context_line":"\treturn hpm_xpi_probe(bank);"},{"line_number":182,"context_line":"}"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"static int hpm_xpi_write(struct flash_bank *bank, const uint8_t *buffer,"},{"line_number":185,"context_line":"\tuint32_t offset, uint32_t count)"},{"line_number":186,"context_line":"{"},{"line_number":187,"context_line":"\tstruct reg_param reg_params[6];"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"ad4a6dbd_0fc6e2a1","line":184,"updated":"2025-01-19 14:11:13.000000000","message":"Most of the comments to function `hpm_xpi_probe()` applies here and in next functions too.\nDo you think the overall code could be more readable if there is a common helper function to avoid replicating `FLASH_INIT` code in `hpm_xpi_probe()`, `hpm_xpi_write()`, `hpm_xpi_erase()` and `hpm_xpi_erase_chip()`?","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":181,"context_line":"\treturn hpm_xpi_probe(bank);"},{"line_number":182,"context_line":"}"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"static int hpm_xpi_write(struct flash_bank *bank, const uint8_t *buffer,"},{"line_number":185,"context_line":"\tuint32_t offset, uint32_t count)"},{"line_number":186,"context_line":"{"},{"line_number":187,"context_line":"\tstruct reg_param reg_params[6];"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"5ec7bb61_d12807ee","line":184,"in_reply_to":"ad4a6dbd_0fc6e2a1","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"75b9daa4189f371fce9427423657f0562f496071","unresolved":true,"context_lines":[{"line_number":649,"context_line":"\tCOMMAND_PARSE_NUMBER(u32, CMD_ARGV[6], io_base);"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"\tswitch (CMD_ARGC) {"},{"line_number":652,"context_line":"\t\tcase 7:"},{"line_number":653,"context_line":"\t\t\theader \u003d NOR_CFG_OPT_HEADER + 1;"},{"line_number":654,"context_line":"\t\t\topt1 \u003d 0;"},{"line_number":655,"context_line":"\t\t\topt0 \u003d 7;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"fc29e44c_731c4208","line":652,"updated":"2025-01-19 14:11:13.000000000","message":"Coding style requires `case` at the same indentation level as `switch`","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"794c1325e75041d43688208aa6d64d2ef26e2610","unresolved":false,"context_lines":[{"line_number":649,"context_line":"\tCOMMAND_PARSE_NUMBER(u32, CMD_ARGV[6], io_base);"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"\tswitch (CMD_ARGC) {"},{"line_number":652,"context_line":"\t\tcase 7:"},{"line_number":653,"context_line":"\t\t\theader \u003d NOR_CFG_OPT_HEADER + 1;"},{"line_number":654,"context_line":"\t\t\topt1 \u003d 0;"},{"line_number":655,"context_line":"\t\t\topt0 \u003d 7;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"04a7fb94_fa465b16","line":652,"in_reply_to":"fc29e44c_731c4208","updated":"2025-01-27 05:06:55.000000000","message":"Ack","commit_id":"332f1521c6bc77fce2e9fc7ff5870a34a9114b5a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":71,"context_line":"\t}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"err:"},{"line_number":74,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":75,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"f1f86184_95d8b62d","line":74,"updated":"2025-09-10 14:27:34.000000000","message":"Don\u0027t use uint8_t for an index.\nARRAY_SIZE() returns a type `size_t` that is more appropriate for such case.\nOtherwise, `unsigned int` is also ok","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":71,"context_line":"\t}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"err:"},{"line_number":74,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":75,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"49ce5eba_6a25831b","line":74,"in_reply_to":"f1f86184_95d8b62d","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":92,"context_line":"\t\txpi_priv-\u003eprobed \u003d false;"},{"line_number":93,"context_line":"\t\tbank-\u003esize \u003d 0;"},{"line_number":94,"context_line":"\t\tbank-\u003enum_sectors \u003d 0;"},{"line_number":95,"context_line":"\t\tbank-\u003esectors \u003d NULL;"},{"line_number":96,"context_line":"\t}"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"\tif (target-\u003estate !\u003d TARGET_HALTED) {"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"525ab7f1_53a3ac4b","line":95,"updated":"2025-09-10 14:27:34.000000000","message":"I think you need to add\n`free(bank-\u003esectors);`\nbefore this assignment to avoid a memory leak","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":92,"context_line":"\t\txpi_priv-\u003eprobed \u003d false;"},{"line_number":93,"context_line":"\t\tbank-\u003esize \u003d 0;"},{"line_number":94,"context_line":"\t\tbank-\u003enum_sectors \u003d 0;"},{"line_number":95,"context_line":"\t\tbank-\u003esectors \u003d NULL;"},{"line_number":96,"context_line":"\t}"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"\tif (target-\u003estate !\u003d TARGET_HALTED) {"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"e2d4e6c9_299d6c1b","line":95,"in_reply_to":"525ab7f1_53a3ac4b","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"\tint retval \u003d target_alloc_working_area(target, sizeof(flash_algo), \u0026wa);"},{"line_number":104,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":105,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":106,"context_line":"\t\t\t\t\tsizeof(flash_algo));"},{"line_number":107,"context_line":"\t\treturn retval;"},{"line_number":108,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"7529fac1_4a301d0e","line":105,"updated":"2025-09-10 14:27:34.000000000","message":"Please drop the dot `.` at the end of the messages.\nThere are other messeges to fix in this patch\nSee\nhttps://review.openocd.org/c/openocd/+/8809\nhttps://review.openocd.org/c/openocd/+/8665","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"\tint retval \u003d target_alloc_working_area(target, sizeof(flash_algo), \u0026wa);"},{"line_number":104,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":105,"context_line":"\t\tLOG_WARNING(\"Couldn\u0027t allocate %zd-byte working area.\","},{"line_number":106,"context_line":"\t\t\t\t\tsizeof(flash_algo));"},{"line_number":107,"context_line":"\t\treturn retval;"},{"line_number":108,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"0e565cfd_fb648bf9","line":105,"in_reply_to":"7529fac1_4a301d0e","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"\ttarget_read_u32(target, data_wa-\u003eaddress, \u0026flash_info.total_sz_in_bytes);"},{"line_number":155,"context_line":"\ttarget_read_u32(target, data_wa-\u003eaddress + 4, \u0026flash_info.sector_sz_in_bytes);"},{"line_number":156,"context_line":"\tflash_info.total_sz_in_bytes \u003d le_to_h_u32((uint8_t *)\u0026flash_info.total_sz_in_bytes);"},{"line_number":157,"context_line":"\tflash_info.sector_sz_in_bytes \u003d le_to_h_u32((uint8_t *)\u0026flash_info.sector_sz_in_bytes);"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"\tbank-\u003esize \u003d flash_info.total_sz_in_bytes;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"ed7b6d7a_9173958f","line":156,"updated":"2025-09-10 14:27:34.000000000","message":"Something strange here and in next line.\n`target_read_u32()` reads from target and converts between target and host endianness.\nWhy you are re-converting it?","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"\ttarget_read_u32(target, data_wa-\u003eaddress, \u0026flash_info.total_sz_in_bytes);"},{"line_number":155,"context_line":"\ttarget_read_u32(target, data_wa-\u003eaddress + 4, \u0026flash_info.sector_sz_in_bytes);"},{"line_number":156,"context_line":"\tflash_info.total_sz_in_bytes \u003d le_to_h_u32((uint8_t *)\u0026flash_info.total_sz_in_bytes);"},{"line_number":157,"context_line":"\tflash_info.sector_sz_in_bytes \u003d le_to_h_u32((uint8_t *)\u0026flash_info.sector_sz_in_bytes);"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"\tbank-\u003esize \u003d flash_info.total_sz_in_bytes;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"7f40690e_34bd4401","line":156,"in_reply_to":"ed7b6d7a_9173958f","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":179,"context_line":"\txpi_priv-\u003eprobed \u003d true;"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"err:"},{"line_number":182,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":183,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":184,"context_line":"\tif (data_wa)"},{"line_number":185,"context_line":"\t\ttarget_free_working_area(target, data_wa);"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"c58878f7_e19021ca","line":182,"updated":"2025-09-10 14:27:34.000000000","message":"Ditto","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":179,"context_line":"\txpi_priv-\u003eprobed \u003d true;"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"err:"},{"line_number":182,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":183,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":184,"context_line":"\tif (data_wa)"},{"line_number":185,"context_line":"\t\ttarget_free_working_area(target, data_wa);"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"2c6f19c2_099400e2","line":182,"in_reply_to":"c58878f7_e19021ca","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":181,"context_line":"err:"},{"line_number":182,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":183,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":184,"context_line":"\tif (data_wa)"},{"line_number":185,"context_line":"\t\ttarget_free_working_area(target, data_wa);"},{"line_number":186,"context_line":"\ttarget_free_working_area(target, wa);"},{"line_number":187,"context_line":"\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"434d3ae1_dcef4905","line":184,"updated":"2025-09-10 14:27:34.000000000","message":"No need for this check. `target_free_working_area()` already includes it and can be called with a NULL pointer","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":181,"context_line":"err:"},{"line_number":182,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":183,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":184,"context_line":"\tif (data_wa)"},{"line_number":185,"context_line":"\t\ttarget_free_working_area(target, data_wa);"},{"line_number":186,"context_line":"\ttarget_free_working_area(target, wa);"},{"line_number":187,"context_line":"\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"f98f44a2_37b61d73","line":184,"in_reply_to":"434d3ae1_dcef4905","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":309,"context_line":"\tif (data_wa)"},{"line_number":310,"context_line":"\t\ttarget_free_working_area(target, data_wa);"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":313,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"\ttarget_free_working_area(target, wa);"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"ecafa67b_228c3151","line":312,"updated":"2025-09-10 14:27:34.000000000","message":"Ditto","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":309,"context_line":"\tif (data_wa)"},{"line_number":310,"context_line":"\t\ttarget_free_working_area(target, data_wa);"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":313,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"\ttarget_free_working_area(target, wa);"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"34c9bf91_a310546d","line":312,"in_reply_to":"ecafa67b_228c3151","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"err:"},{"line_number":378,"context_line":"\ttarget_free_working_area(target, wa);"},{"line_number":379,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":380,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":381,"context_line":"\treturn retval;"},{"line_number":382,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"b01ec0b5_8dfb8491","line":379,"updated":"2025-09-10 14:27:34.000000000","message":"Ditto","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"err:"},{"line_number":378,"context_line":"\ttarget_free_working_area(target, wa);"},{"line_number":379,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":380,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":381,"context_line":"\treturn retval;"},{"line_number":382,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"7f3bcdb4_832205dc","line":379,"in_reply_to":"b01ec0b5_8dfb8491","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"err:"},{"line_number":435,"context_line":"\ttarget_free_working_area(target, wa);"},{"line_number":436,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":437,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":438,"context_line":"\treturn retval;"},{"line_number":439,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"59bdcb0d_d7c7cfdb","line":436,"updated":"2025-09-10 14:27:34.000000000","message":"Ditto","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"err:"},{"line_number":435,"context_line":"\ttarget_free_working_area(target, wa);"},{"line_number":436,"context_line":"\tfor (uint8_t k \u003d 0; k \u003c ARRAY_SIZE(reg_params); k++)"},{"line_number":437,"context_line":"\t\tdestroy_reg_param(\u0026reg_params[k]);"},{"line_number":438,"context_line":"\treturn retval;"},{"line_number":439,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"1e23d16a_07a428dc","line":436,"in_reply_to":"59bdcb0d_d7c7cfdb","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":469,"context_line":"\t\t\t\t\t\t\txlen \u003e\u003e 3, count / (xlen \u003e\u003e 3), buffer);"},{"line_number":470,"context_line":"}"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"static int hpm_xpi_blank_check(struct flash_bank *bank)"},{"line_number":473,"context_line":"{"},{"line_number":474,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":475,"context_line":"\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"e6e02cb4_069bf831","line":472,"updated":"2025-09-10 14:27:34.000000000","message":"We have a `default_flash_blank_check()`.\nWould it work better than this no check at all?","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":469,"context_line":"\t\t\t\t\t\t\txlen \u003e\u003e 3, count / (xlen \u003e\u003e 3), buffer);"},{"line_number":470,"context_line":"}"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"static int hpm_xpi_blank_check(struct flash_bank *bank)"},{"line_number":473,"context_line":"{"},{"line_number":474,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":475,"context_line":"\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"9bf54022_5d4c1df0","line":472,"in_reply_to":"e6e02cb4_069bf831","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":475,"context_line":"\treturn ERROR_OK;"},{"line_number":476,"context_line":"}"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"static int hpm_xpi_protect_check(struct flash_bank *bank)"},{"line_number":479,"context_line":"{"},{"line_number":480,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":481,"context_line":"\t/* Nothing to do. Protection is only handled in SW. */"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"cf21bf88_f1f0b4d2","line":478,"updated":"2025-09-10 14:27:34.000000000","message":"Instead of an empty function, you can use, below:\n`.protect_check \u003d NULL,`","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":475,"context_line":"\treturn ERROR_OK;"},{"line_number":476,"context_line":"}"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"static int hpm_xpi_protect_check(struct flash_bank *bank)"},{"line_number":479,"context_line":"{"},{"line_number":480,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":481,"context_line":"\t/* Nothing to do. Protection is only handled in SW. */"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"430b29f5_4a4478e0","line":478,"in_reply_to":"cf21bf88_f1f0b4d2","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":502,"context_line":"\t\treturn ERROR_TARGET_NOT_HALTED;"},{"line_number":503,"context_line":"\t}"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"\tbuf_on_target \u003d malloc(count);"},{"line_number":506,"context_line":"\tif (!buf_on_target) {"},{"line_number":507,"context_line":"\t\tLOG_ERROR(\"not enough memory\");"},{"line_number":508,"context_line":"\t\treturn ERROR_FAIL;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"07887800_53a0b360","line":505,"updated":"2025-09-10 14:27:34.000000000","message":"This is never `free()`. Memory leak!","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":502,"context_line":"\t\treturn ERROR_TARGET_NOT_HALTED;"},{"line_number":503,"context_line":"\t}"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"\tbuf_on_target \u003d malloc(count);"},{"line_number":506,"context_line":"\tif (!buf_on_target) {"},{"line_number":507,"context_line":"\t\tLOG_ERROR(\"not enough memory\");"},{"line_number":508,"context_line":"\t\treturn ERROR_FAIL;"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"5be6d0ad_39aa8506","line":505,"in_reply_to":"07887800_53a0b360","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"33dacc16441bbc0e0eca44f59d56bea0fd85ddf5","unresolved":true,"context_lines":[{"line_number":627,"context_line":"\t.erase_check \u003d hpm_xpi_blank_check,"},{"line_number":628,"context_line":"\t.protect_check \u003d hpm_xpi_protect_check,"},{"line_number":629,"context_line":"\t.info \u003d hpm_xpi_get_info,"},{"line_number":630,"context_line":"\t.free_driver_priv \u003d hpm_xpi_free_driver_priv,"},{"line_number":631,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"38c8ba46_40592f72","line":630,"updated":"2025-09-10 14:27:34.000000000","message":"You can have here directly:\n`.free_driver_priv \u003d default_flash_free_driver_priv;`\nand drop the function `hpm_xpi_free_driver_priv()`","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"5f5431d13ebc99c5026f55b7d8c3e5ec63348161","unresolved":false,"context_lines":[{"line_number":627,"context_line":"\t.erase_check \u003d hpm_xpi_blank_check,"},{"line_number":628,"context_line":"\t.protect_check \u003d hpm_xpi_protect_check,"},{"line_number":629,"context_line":"\t.info \u003d hpm_xpi_get_info,"},{"line_number":630,"context_line":"\t.free_driver_priv \u003d hpm_xpi_free_driver_priv,"},{"line_number":631,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":17,"id":"b80f42af_cd94fb64","line":630,"in_reply_to":"38c8ba46_40592f72","updated":"2025-09-10 15:07:12.000000000","message":"Done","commit_id":"2b2a7f5648506598b4f1fcf1b4723c67538e26f4"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"5c7b6d0161398c6a51b5a8fed5c1d95bc8ca6c03","unresolved":true,"context_lines":[{"line_number":92,"context_line":"\t\txpi_priv-\u003eprobed \u003d false;"},{"line_number":93,"context_line":"\t\tbank-\u003esize \u003d 0;"},{"line_number":94,"context_line":"\t\tbank-\u003enum_sectors \u003d 0;"},{"line_number":95,"context_line":"\t\tif (bank-\u003esectors) {"},{"line_number":96,"context_line":"\t\t\tfree(bank-\u003esectors);"},{"line_number":97,"context_line":"\t\t\tbank-\u003esectors \u003d NULL;"},{"line_number":98,"context_line":"\t\t}"}],"source_content_type":"text/x-csrc","patch_set":22,"id":"924d6567_38123672","line":95,"updated":"2025-09-13 15:41:04.000000000","message":"You don\u0027t need to check for the NULL pointer, as `free(NULL);` is ok.\nSimply run\n```\nfree(bank-\u003esectors);\nbank-\u003esectors \u003d NULL;\n```","commit_id":"69949de27ed9525b0acccf440eeb8f6c0512062a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"1ac1a2cc9410197080b0ea0fe25a6ebece64d1c7","unresolved":false,"context_lines":[{"line_number":92,"context_line":"\t\txpi_priv-\u003eprobed \u003d false;"},{"line_number":93,"context_line":"\t\tbank-\u003esize \u003d 0;"},{"line_number":94,"context_line":"\t\tbank-\u003enum_sectors \u003d 0;"},{"line_number":95,"context_line":"\t\tif (bank-\u003esectors) {"},{"line_number":96,"context_line":"\t\t\tfree(bank-\u003esectors);"},{"line_number":97,"context_line":"\t\t\tbank-\u003esectors \u003d NULL;"},{"line_number":98,"context_line":"\t\t}"}],"source_content_type":"text/x-csrc","patch_set":22,"id":"1336c4a3_cfbddf44","line":95,"in_reply_to":"924d6567_38123672","updated":"2025-09-15 07:45:46.000000000","message":"Done","commit_id":"69949de27ed9525b0acccf440eeb8f6c0512062a"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"5c7b6d0161398c6a51b5a8fed5c1d95bc8ca6c03","unresolved":true,"context_lines":[{"line_number":540,"context_line":"\t\t.handler \u003d hpm_xpi_handle_erase_chip_command,"},{"line_number":541,"context_line":"\t\t.mode \u003d COMMAND_EXEC,"},{"line_number":542,"context_line":"\t\t.usage \u003d \"bank_id\","},{"line_number":543,"context_line":"\t\t.help \u003d \"erase entire flash device.\","},{"line_number":544,"context_line":"\t},"},{"line_number":545,"context_line":"\tCOMMAND_REGISTRATION_DONE"},{"line_number":546,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":22,"id":"70c16e98_a8da14d1","line":543,"updated":"2025-09-13 15:41:04.000000000","message":"drop the dot at the end of the string","commit_id":"69949de27ed9525b0acccf440eeb8f6c0512062a"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"1ac1a2cc9410197080b0ea0fe25a6ebece64d1c7","unresolved":false,"context_lines":[{"line_number":540,"context_line":"\t\t.handler \u003d hpm_xpi_handle_erase_chip_command,"},{"line_number":541,"context_line":"\t\t.mode \u003d COMMAND_EXEC,"},{"line_number":542,"context_line":"\t\t.usage \u003d \"bank_id\","},{"line_number":543,"context_line":"\t\t.help \u003d \"erase entire flash device.\","},{"line_number":544,"context_line":"\t},"},{"line_number":545,"context_line":"\tCOMMAND_REGISTRATION_DONE"},{"line_number":546,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":22,"id":"64cb68a4_3b0907a0","line":543,"in_reply_to":"70c16e98_a8da14d1","updated":"2025-09-15 07:45:46.000000000","message":"Done","commit_id":"69949de27ed9525b0acccf440eeb8f6c0512062a"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":57,"context_line":"\tbuf_set_u64(reg_params[3].value, 0, xlen, xpi_priv-\u003eopt1);"},{"line_number":58,"context_line":"\tbuf_set_u64(reg_params[4].value, 0, xlen, xpi_priv-\u003eio_base);"},{"line_number":59,"context_line":"\tbuf_set_u64(reg_params[5].value, 0, xlen, algo_entry + FLASH_INIT + 4);"},{"line_number":60,"context_line":"\tint retval \u003d target_run_algorithm(target, 0, NULL, 6, reg_params,"},{"line_number":61,"context_line":"\t\t\talgo_entry, algo_entry + FLASH_INIT + 4, 500, NULL);"},{"line_number":62,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":63,"context_line":"\t\tLOG_ERROR(\"Failed to execute run algorithm: %d\", retval);"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"29b000f9_4f37d8ff","line":60,"range":{"start_line":60,"start_character":52,"end_line":60,"end_character":53},"updated":"2025-11-14 06:32:48.000000000","message":"ARRAY_SIZE(reg_params)\n\nUse in all `target_run_algorithm()` calls.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":57,"context_line":"\tbuf_set_u64(reg_params[3].value, 0, xlen, xpi_priv-\u003eopt1);"},{"line_number":58,"context_line":"\tbuf_set_u64(reg_params[4].value, 0, xlen, xpi_priv-\u003eio_base);"},{"line_number":59,"context_line":"\tbuf_set_u64(reg_params[5].value, 0, xlen, algo_entry + FLASH_INIT + 4);"},{"line_number":60,"context_line":"\tint retval \u003d target_run_algorithm(target, 0, NULL, 6, reg_params,"},{"line_number":61,"context_line":"\t\t\talgo_entry, algo_entry + FLASH_INIT + 4, 500, NULL);"},{"line_number":62,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":63,"context_line":"\t\tLOG_ERROR(\"Failed to execute run algorithm: %d\", retval);"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"d34a5ea6_611b11f5","line":60,"range":{"start_line":60,"start_character":52,"end_line":60,"end_character":53},"in_reply_to":"29b000f9_4f37d8ff","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":58,"context_line":"\tbuf_set_u64(reg_params[4].value, 0, xlen, xpi_priv-\u003eio_base);"},{"line_number":59,"context_line":"\tbuf_set_u64(reg_params[5].value, 0, xlen, algo_entry + FLASH_INIT + 4);"},{"line_number":60,"context_line":"\tint retval \u003d target_run_algorithm(target, 0, NULL, 6, reg_params,"},{"line_number":61,"context_line":"\t\t\talgo_entry, algo_entry + FLASH_INIT + 4, 500, NULL);"},{"line_number":62,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":63,"context_line":"\t\tLOG_ERROR(\"Failed to execute run algorithm: %d\", retval);"},{"line_number":64,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"b3177cd3_ba143dad","line":61,"range":{"start_line":61,"start_character":44,"end_line":61,"end_character":47},"updated":"2025-11-14 06:32:48.000000000","message":"Please define a xxx_TIMEOUT_IN_MS (used more times)","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":58,"context_line":"\tbuf_set_u64(reg_params[4].value, 0, xlen, xpi_priv-\u003eio_base);"},{"line_number":59,"context_line":"\tbuf_set_u64(reg_params[5].value, 0, xlen, algo_entry + FLASH_INIT + 4);"},{"line_number":60,"context_line":"\tint retval \u003d target_run_algorithm(target, 0, NULL, 6, reg_params,"},{"line_number":61,"context_line":"\t\t\talgo_entry, algo_entry + FLASH_INIT + 4, 500, NULL);"},{"line_number":62,"context_line":"\tif (retval !\u003d ERROR_OK) {"},{"line_number":63,"context_line":"\t\tLOG_ERROR(\"Failed to execute run algorithm: %d\", retval);"},{"line_number":64,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"92b5869f_cfa705e7","line":61,"range":{"start_line":61,"start_character":44,"end_line":61,"end_character":47},"in_reply_to":"b3177cd3_ba143dad","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":64,"context_line":"\t\tgoto err;"},{"line_number":65,"context_line":"\t}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":68,"context_line":"\tif (retval) {"},{"line_number":69,"context_line":"\t\tLOG_ERROR(\"init flash failed on target: 0x%\" PRIx32, retval);"},{"line_number":70,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"557e4ba2_180cbf7c","line":67,"updated":"2025-11-14 06:32:48.000000000","message":"It\u0027s good that target algo errors are passed to the flash driver.\nBut the return value (hpm_stat_t) is not compatible with OpenOCD error codes.\nUse different variable than retval to save hpm_stat and set retval to e.g. ERROR_FLASH_OPERATION_FAILED\n\nFix all `target_run_algorithm()` calls.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"8ba68a4ada1229e79839c84831ee5bd9415a9c23","unresolved":false,"context_lines":[{"line_number":64,"context_line":"\t\tgoto err;"},{"line_number":65,"context_line":"\t}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":68,"context_line":"\tif (retval) {"},{"line_number":69,"context_line":"\t\tLOG_ERROR(\"init flash failed on target: 0x%\" PRIx32, retval);"},{"line_number":70,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"115bff67_8e18ab7b","line":67,"in_reply_to":"12ee1b65_8cd0cff9","updated":"2025-11-14 10:14:37.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":64,"context_line":"\t\tgoto err;"},{"line_number":65,"context_line":"\t}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":68,"context_line":"\tif (retval) {"},{"line_number":69,"context_line":"\t\tLOG_ERROR(\"init flash failed on target: 0x%\" PRIx32, retval);"},{"line_number":70,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"c01a2c49_91f01b9f","line":67,"in_reply_to":"557e4ba2_180cbf7c","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"0c7e1f84d4eef2193a6b55c697b069c9914c796f","unresolved":true,"context_lines":[{"line_number":64,"context_line":"\t\tgoto err;"},{"line_number":65,"context_line":"\t}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":68,"context_line":"\tif (retval) {"},{"line_number":69,"context_line":"\t\tLOG_ERROR(\"init flash failed on target: 0x%\" PRIx32, retval);"},{"line_number":70,"context_line":"\t\tgoto err;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"12ee1b65_8cd0cff9","line":67,"in_reply_to":"c01a2c49_91f01b9f","updated":"2025-11-14 09:30:00.000000000","message":"I wrote:\n\n\u003e **Use different variable than retval to save hpm_stat**\n\nDon\u0027t mix both incompatible values in `retval` - introduce a variable to make the code clean and readable","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\tstruct working_area *wa;"},{"line_number":86,"context_line":"\tstruct target *target \u003d bank-\u003etarget;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":89,"context_line":"\tstruct hpm_xpi_priv *xpi_priv \u003d bank-\u003edriver_priv;"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"\tif (xpi_priv-\u003eprobed) {"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"5539d11f_31f6e40c","line":88,"updated":"2025-11-14 06:32:48.000000000","message":"LOG_DEBUG itself prints `__func__`, simply use LOG_DEBUG(\"\")","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":85,"context_line":"\tstruct working_area *wa;"},{"line_number":86,"context_line":"\tstruct target *target \u003d bank-\u003etarget;"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":89,"context_line":"\tstruct hpm_xpi_priv *xpi_priv \u003d bank-\u003edriver_priv;"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"\tif (xpi_priv-\u003eprobed) {"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"0cdfc8a4_1f5531cb","line":88,"in_reply_to":"5539d11f_31f6e40c","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"0c7e1f84d4eef2193a6b55c697b069c9914c796f","unresolved":true,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"\tbank-\u003esize \u003d flash_info.total_sz_in_bytes;"},{"line_number":159,"context_line":"\tbank-\u003enum_sectors \u003d flash_info.total_sz_in_bytes / flash_info.sector_sz_in_bytes;"},{"line_number":160,"context_line":"\tbank-\u003ewrite_start_alignment \u003d 2;"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"\t/* create and fill sectors array */"},{"line_number":163,"context_line":"\tsectors \u003d malloc(sizeof(struct flash_sector) * bank-\u003enum_sectors);"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"1b68f05b_4b7f62ce","line":160,"range":{"start_line":160,"start_character":31,"end_line":160,"end_character":32},"updated":"2025-11-14 09:30:00.000000000","message":"What is halfword alignment imposed by? Looks somewhat strange, but I don\u0027t know XPI internals.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"8ba68a4ada1229e79839c84831ee5bd9415a9c23","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"\tbank-\u003esize \u003d flash_info.total_sz_in_bytes;"},{"line_number":159,"context_line":"\tbank-\u003enum_sectors \u003d flash_info.total_sz_in_bytes / flash_info.sector_sz_in_bytes;"},{"line_number":160,"context_line":"\tbank-\u003ewrite_start_alignment \u003d 2;"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"\t/* create and fill sectors array */"},{"line_number":163,"context_line":"\tsectors \u003d malloc(sizeof(struct flash_sector) * bank-\u003enum_sectors);"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"ba15c7f7_626ddb9e","line":160,"range":{"start_line":160,"start_character":31,"end_line":160,"end_character":32},"in_reply_to":"1b68f05b_4b7f62ce","updated":"2025-11-14 10:14:37.000000000","message":"removed.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":230,"context_line":"\t}"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"\t/* memory buffer */"},{"line_number":233,"context_line":"\twhile (target_alloc_working_area_try(target, data_size, \u0026data_wa) !\u003d ERROR_OK) {"},{"line_number":234,"context_line":"\t\tdata_size /\u003d 2;"},{"line_number":235,"context_line":"\t\tif (data_size \u003c\u003d 256) {"},{"line_number":236,"context_line":"\t\t\t/* we already allocated the writing code, but failed to get a"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"170f2123_dfb8c98a","line":233,"updated":"2025-11-14 06:32:48.000000000","message":"Don\u0027t use try alloc iteration. We have `target_get_working_area_avail()`.\nSee `src/flash/nor/stm32f1x.c` how to use it.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":230,"context_line":"\t}"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"\t/* memory buffer */"},{"line_number":233,"context_line":"\twhile (target_alloc_working_area_try(target, data_size, \u0026data_wa) !\u003d ERROR_OK) {"},{"line_number":234,"context_line":"\t\tdata_size /\u003d 2;"},{"line_number":235,"context_line":"\t\tif (data_size \u003c\u003d 256) {"},{"line_number":236,"context_line":"\t\t\t/* we already allocated the writing code, but failed to get a"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"9d638632_67a4b86d","line":233,"in_reply_to":"170f2123_dfb8c98a","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"0c7e1f84d4eef2193a6b55c697b069c9914c796f","unresolved":true,"context_lines":[{"line_number":230,"context_line":"\t}"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"\t/* memory buffer */"},{"line_number":233,"context_line":"\twhile (target_alloc_working_area_try(target, data_size, \u0026data_wa) !\u003d ERROR_OK) {"},{"line_number":234,"context_line":"\t\tdata_size /\u003d 2;"},{"line_number":235,"context_line":"\t\tif (data_size \u003c\u003d 256) {"},{"line_number":236,"context_line":"\t\t\t/* we already allocated the writing code, but failed to get a"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"cdd99356_3cba39f0","line":233,"in_reply_to":"9d638632_67a4b86d","updated":"2025-11-14 09:30:00.000000000","message":"FUCK! What you\u0027ve done?!!!\n\nDon\u0027t waste my time by submitting an unfinished work.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"8ba68a4ada1229e79839c84831ee5bd9415a9c23","unresolved":false,"context_lines":[{"line_number":230,"context_line":"\t}"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"\t/* memory buffer */"},{"line_number":233,"context_line":"\twhile (target_alloc_working_area_try(target, data_size, \u0026data_wa) !\u003d ERROR_OK) {"},{"line_number":234,"context_line":"\t\tdata_size /\u003d 2;"},{"line_number":235,"context_line":"\t\tif (data_size \u003c\u003d 256) {"},{"line_number":236,"context_line":"\t\t\t/* we already allocated the writing code, but failed to get a"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"5e1bbafb_fb23009e","line":233,"in_reply_to":"cdd99356_3cba39f0","updated":"2025-11-14 10:14:37.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":278,"context_line":"\t}"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"\tif (left) {"},{"line_number":281,"context_line":"\t\tretval \u003d target_write_buffer(target, data_wa-\u003eaddress, left, buffer + i * data_size);"},{"line_number":282,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"},{"line_number":283,"context_line":"\t\t\tLOG_ERROR(\"Failed to write buffer to 0x%\" TARGET_PRIxADDR \": %d\", data_wa-\u003eaddress, retval);"},{"line_number":284,"context_line":"\t\t\tgoto err;"},{"line_number":285,"context_line":"\t\t}"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"\t\tbuf_set_u32(reg_params[0].value, 0, xlen, bank-\u003ebase);"},{"line_number":288,"context_line":"\t\tbuf_set_u32(reg_params[1].value, 0, xlen, offset + i * data_size);"},{"line_number":289,"context_line":"\t\tbuf_set_u32(reg_params[2].value, 0, xlen, data_wa-\u003eaddress);"},{"line_number":290,"context_line":"\t\tbuf_set_u32(reg_params[3].value, 0, xlen, left);"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"\t\tretval \u003d target_run_algorithm(target, 0, NULL, 4, reg_params,"},{"line_number":293,"context_line":"\t\t\t\twa-\u003eaddress + FLASH_PROGRAM, wa-\u003eaddress + FLASH_PROGRAM + 4, TIMEOUT_IN_MS, NULL);"},{"line_number":294,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"},{"line_number":295,"context_line":"\t\t\tLOG_ERROR(\"Failed to execute algorithm at 0x%\" TARGET_PRIxADDR \": %d\", wa-\u003eaddress, retval);"},{"line_number":296,"context_line":"\t\t\tgoto err;"},{"line_number":297,"context_line":"\t\t}"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"\t\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":300,"context_line":"\t\tif (retval) {"},{"line_number":301,"context_line":"\t\t\tLOG_ERROR(\"flash write failed on target: 0x%\" PRIx32, retval);"},{"line_number":302,"context_line":"\t\t\tgoto err;"},{"line_number":303,"context_line":"\t\t}"},{"line_number":304,"context_line":"\t}"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"err:"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"c107ea58_545d6fce","line":303,"range":{"start_line":281,"start_character":2,"end_line":303,"end_character":3},"updated":"2025-11-14 06:32:48.000000000","message":"I see no reason for the duplicated code handling the last block. Just use correct chunk size in the loop","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":278,"context_line":"\t}"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"\tif (left) {"},{"line_number":281,"context_line":"\t\tretval \u003d target_write_buffer(target, data_wa-\u003eaddress, left, buffer + i * data_size);"},{"line_number":282,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"},{"line_number":283,"context_line":"\t\t\tLOG_ERROR(\"Failed to write buffer to 0x%\" TARGET_PRIxADDR \": %d\", data_wa-\u003eaddress, retval);"},{"line_number":284,"context_line":"\t\t\tgoto err;"},{"line_number":285,"context_line":"\t\t}"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"\t\tbuf_set_u32(reg_params[0].value, 0, xlen, bank-\u003ebase);"},{"line_number":288,"context_line":"\t\tbuf_set_u32(reg_params[1].value, 0, xlen, offset + i * data_size);"},{"line_number":289,"context_line":"\t\tbuf_set_u32(reg_params[2].value, 0, xlen, data_wa-\u003eaddress);"},{"line_number":290,"context_line":"\t\tbuf_set_u32(reg_params[3].value, 0, xlen, left);"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"\t\tretval \u003d target_run_algorithm(target, 0, NULL, 4, reg_params,"},{"line_number":293,"context_line":"\t\t\t\twa-\u003eaddress + FLASH_PROGRAM, wa-\u003eaddress + FLASH_PROGRAM + 4, TIMEOUT_IN_MS, NULL);"},{"line_number":294,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"},{"line_number":295,"context_line":"\t\t\tLOG_ERROR(\"Failed to execute algorithm at 0x%\" TARGET_PRIxADDR \": %d\", wa-\u003eaddress, retval);"},{"line_number":296,"context_line":"\t\t\tgoto err;"},{"line_number":297,"context_line":"\t\t}"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"\t\tretval \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":300,"context_line":"\t\tif (retval) {"},{"line_number":301,"context_line":"\t\t\tLOG_ERROR(\"flash write failed on target: 0x%\" PRIx32, retval);"},{"line_number":302,"context_line":"\t\t\tgoto err;"},{"line_number":303,"context_line":"\t\t}"},{"line_number":304,"context_line":"\t}"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"err:"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"5ebfdd8f_2070fa78","line":303,"range":{"start_line":281,"start_character":2,"end_line":303,"end_character":3},"in_reply_to":"c107ea58_545d6fce","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":437,"context_line":"}"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"static int hpm_xpi_get_info(struct flash_bank *bank,"},{"line_number":441,"context_line":"\t\t\t\t\t\t\tstruct command_invocation *cmd)"},{"line_number":442,"context_line":"{"},{"line_number":443,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":444,"context_line":"\treturn ERROR_OK;"},{"line_number":445,"context_line":"}"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"static int hpm_xpi_protect(struct flash_bank *bank, int set,"},{"line_number":448,"context_line":"\tunsigned int first, unsigned int last)"},{"line_number":449,"context_line":"{"},{"line_number":450,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":451,"context_line":"\treturn ERROR_OK;"},{"line_number":452,"context_line":"}"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"static int hpm_xpi_read(struct flash_bank *bank, uint8_t *buffer,"},{"line_number":455,"context_line":"\tuint32_t offset, uint32_t count)"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"0110c48b_2915d952","line":452,"range":{"start_line":440,"start_character":1,"end_line":452,"end_character":1},"updated":"2025-11-14 06:32:48.000000000","message":"Drop the non functional stubs.","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":437,"context_line":"}"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"static int hpm_xpi_get_info(struct flash_bank *bank,"},{"line_number":441,"context_line":"\t\t\t\t\t\t\tstruct command_invocation *cmd)"},{"line_number":442,"context_line":"{"},{"line_number":443,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":444,"context_line":"\treturn ERROR_OK;"},{"line_number":445,"context_line":"}"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"static int hpm_xpi_protect(struct flash_bank *bank, int set,"},{"line_number":448,"context_line":"\tunsigned int first, unsigned int last)"},{"line_number":449,"context_line":"{"},{"line_number":450,"context_line":"\tLOG_DEBUG(\"%s\", __func__);"},{"line_number":451,"context_line":"\treturn ERROR_OK;"},{"line_number":452,"context_line":"}"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"static int hpm_xpi_read(struct flash_bank *bank, uint8_t *buffer,"},{"line_number":455,"context_line":"\tuint32_t offset, uint32_t count)"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"9e0fcfd2_901ff4ec","line":452,"range":{"start_line":440,"start_character":1,"end_line":452,"end_character":1},"in_reply_to":"0110c48b_2915d952","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"\tint xlen \u003d riscv_xlen(target);"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"\treturn target_read_memory(bank-\u003etarget, bank-\u003ebase + offset,"},{"line_number":467,"context_line":"\t\t\t\t\t\t\txlen \u003e\u003e 3, count / (xlen \u003e\u003e 3), buffer);"},{"line_number":468,"context_line":"}"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":27,"id":"add05bc3_7c565cbb","line":466,"updated":"2025-11-14 06:32:48.000000000","message":"Will break if offset and count is not aligned to xlen bits.\nAny reason why not simply use `default_flash_read()` instead?","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"\tint xlen \u003d riscv_xlen(target);"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"\treturn target_read_memory(bank-\u003etarget, bank-\u003ebase + offset,"},{"line_number":467,"context_line":"\t\t\t\t\t\t\txlen \u003e\u003e 3, count / (xlen \u003e\u003e 3), buffer);"},{"line_number":468,"context_line":"}"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":27,"id":"1d9d1114_fa0ca9ae","line":466,"in_reply_to":"add05bc3_7c565cbb","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"63eb016b0e1c0f88e0457772328213c1ef44986a","unresolved":true,"context_lines":[{"line_number":467,"context_line":"\t\t\t\t\t\t\txlen \u003e\u003e 3, count / (xlen \u003e\u003e 3), buffer);"},{"line_number":468,"context_line":"}"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"static int hpm_xpi_verify(struct flash_bank *bank, const uint8_t *buffer,"},{"line_number":471,"context_line":"\tuint32_t offset, uint32_t count)"},{"line_number":472,"context_line":"{"},{"line_number":473,"context_line":"\tint retval \u003d ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"e4d23cbd_58781bd1","line":470,"range":{"start_line":470,"start_character":11,"end_line":470,"end_character":25},"updated":"2025-11-14 06:32:48.000000000","message":"Is there any good reason why use this slow and alignment sensitive implementation instead of default verify, which should be much faster as it computes CRC on target?","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":467,"context_line":"\t\t\t\t\t\t\txlen \u003e\u003e 3, count / (xlen \u003e\u003e 3), buffer);"},{"line_number":468,"context_line":"}"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"static int hpm_xpi_verify(struct flash_bank *bank, const uint8_t *buffer,"},{"line_number":471,"context_line":"\tuint32_t offset, uint32_t count)"},{"line_number":472,"context_line":"{"},{"line_number":473,"context_line":"\tint retval \u003d ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":27,"id":"f7d18971_87f7e7d1","line":470,"range":{"start_line":470,"start_character":11,"end_line":470,"end_character":25},"in_reply_to":"e4d23cbd_58781bd1","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"cc073ef91d46390aaf9ebb9f02b0e1f91547274b","unresolved":true,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"static const struct command_registration hpm_xpi_exec_command_handlers[] \u003d {"},{"line_number":536,"context_line":"\t{"},{"line_number":537,"context_line":"\t\t.name \u003d \"erase_chip\","},{"line_number":538,"context_line":"\t\t.handler \u003d hpm_xpi_handle_erase_chip_command,"},{"line_number":539,"context_line":"\t\t.mode \u003d COMMAND_EXEC,"},{"line_number":540,"context_line":"\t\t.usage \u003d \"bank_id\","}],"source_content_type":"text/x-csrc","patch_set":27,"id":"626d6440_2c73e122","line":537,"range":{"start_line":537,"start_character":11,"end_line":537,"end_character":21},"updated":"2025-11-14 06:40:04.000000000","message":"The same command is named `mass_erase` in many flash drivers. Would you mind to rename it to keep commands homogenous?","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"aa33aa7185054213e0d4acf95c211064e9a5ce82","unresolved":false,"context_lines":[{"line_number":534,"context_line":""},{"line_number":535,"context_line":"static const struct command_registration hpm_xpi_exec_command_handlers[] \u003d {"},{"line_number":536,"context_line":"\t{"},{"line_number":537,"context_line":"\t\t.name \u003d \"erase_chip\","},{"line_number":538,"context_line":"\t\t.handler \u003d hpm_xpi_handle_erase_chip_command,"},{"line_number":539,"context_line":"\t\t.mode \u003d COMMAND_EXEC,"},{"line_number":540,"context_line":"\t\t.usage \u003d \"bank_id\","}],"source_content_type":"text/x-csrc","patch_set":27,"id":"6a521044_783fca38","line":537,"range":{"start_line":537,"start_character":11,"end_line":537,"end_character":21},"in_reply_to":"626d6440_2c73e122","updated":"2025-11-14 07:39:04.000000000","message":"Done","commit_id":"94e220a8829da922bf07121e715951d55be7d53f"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"0c7e1f84d4eef2193a6b55c697b069c9914c796f","unresolved":true,"context_lines":[{"line_number":564,"context_line":"\t.probe \u003d hpm_xpi_probe,"},{"line_number":565,"context_line":"\t.auto_probe \u003d hpm_xpi_auto_probe,"},{"line_number":566,"context_line":"\t.erase_check \u003d default_flash_blank_check,"},{"line_number":567,"context_line":"\t.protect_check \u003d NULL,"},{"line_number":568,"context_line":"\t.free_driver_priv \u003d default_flash_free_driver_priv,"},{"line_number":569,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":28,"id":"b957c826_90e44cae","line":567,"range":{"start_line":567,"start_character":1,"end_line":567,"end_character":23},"updated":"2025-11-14 09:30:00.000000000","message":"Drop, it\u0027s useless","commit_id":"f330d7c9be9ccd81d515a3d6bcb404b362ec6145"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"8ba68a4ada1229e79839c84831ee5bd9415a9c23","unresolved":false,"context_lines":[{"line_number":564,"context_line":"\t.probe \u003d hpm_xpi_probe,"},{"line_number":565,"context_line":"\t.auto_probe \u003d hpm_xpi_auto_probe,"},{"line_number":566,"context_line":"\t.erase_check \u003d default_flash_blank_check,"},{"line_number":567,"context_line":"\t.protect_check \u003d NULL,"},{"line_number":568,"context_line":"\t.free_driver_priv \u003d default_flash_free_driver_priv,"},{"line_number":569,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":28,"id":"94438ff5_ad5c77f5","line":567,"range":{"start_line":567,"start_character":1,"end_line":567,"end_character":23},"in_reply_to":"b957c826_90e44cae","updated":"2025-11-14 10:14:37.000000000","message":"Done","commit_id":"f330d7c9be9ccd81d515a3d6bcb404b362ec6145"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"f837af1a1d6770ad94575c31587f918ada6772e6","unresolved":true,"context_lines":[{"line_number":67,"context_line":"\t\tgoto err;"},{"line_number":68,"context_line":"\t}"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"\thpm_stat_t stat \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":71,"context_line":"\tif (stat !\u003d status_success) {"},{"line_number":72,"context_line":"\t\tretval \u003d ERROR_TARGET_FAILURE;"},{"line_number":73,"context_line":"\t\tLOG_ERROR(\"init flash failed on target: 0x%\" PRIx32, retval);"}],"source_content_type":"text/x-csrc","patch_set":32,"id":"d04b0c66_73fae2b8","line":70,"updated":"2025-11-16 15:56:00.000000000","message":"This new type `hpm_stat_t` is a typedef in `hpm_common.h`\nWhile I\u0027m quite flexible with using typedef in the firmware, as it\u0027s using declarations from embedded HAL libraries, I prefer not see new typedef in the code of OpenOCD.\nPlease use here the original type, e.g.:\n`uint32_t hpm_stat \u003d ...`\nSame comment in other points below.\nAfter such change, I think you could drop the include of `hpm_common.h`","commit_id":"7be7366ef9dc2bee40828cd4c50098fd2f8cddf4"},{"author":{"_account_id":1001991,"name":"Ryan QIAN","email":"jianghao.qian@outlook.com","username":"jhqian"},"change_message_id":"601ad250148cf627a749cebd0eabd63fcb29ba4b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"\t\tgoto err;"},{"line_number":68,"context_line":"\t}"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"\thpm_stat_t stat \u003d buf_get_u32(reg_params[0].value, 0, xlen);"},{"line_number":71,"context_line":"\tif (stat !\u003d status_success) {"},{"line_number":72,"context_line":"\t\tretval \u003d ERROR_TARGET_FAILURE;"},{"line_number":73,"context_line":"\t\tLOG_ERROR(\"init flash failed on target: 0x%\" PRIx32, retval);"}],"source_content_type":"text/x-csrc","patch_set":32,"id":"f3ca41e4_ef4c410f","line":70,"in_reply_to":"d04b0c66_73fae2b8","updated":"2025-11-17 00:36:30.000000000","message":"Done","commit_id":"7be7366ef9dc2bee40828cd4c50098fd2f8cddf4"}]}
