)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":23,"context_line":"the watchdog might interfere with debugging real applications."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The \"mass_erase\" command allows to erase the whole flash without"},{"line_number":26,"context_line":"probbing it, since in some scenarios the chip can be locked such that no"},{"line_number":27,"context_line":"flash or ram can be accessed from the SWD interface, allowing only to"},{"line_number":28,"context_line":"run a mass_erase to be able to flash the program."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fcfedbef_358e5c5a","line":26,"updated":"2022-12-22 00:58:02.000000000","message":"typo? s/probbing/probing/ ?","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":23,"context_line":"the watchdog might interfere with debugging real applications."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The \"mass_erase\" command allows to erase the whole flash without"},{"line_number":26,"context_line":"probbing it, since in some scenarios the chip can be locked such that no"},{"line_number":27,"context_line":"flash or ram can be accessed from the SWD interface, allowing only to"},{"line_number":28,"context_line":"run a mass_erase to be able to flash the program."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fe3cf99d_b328f568","line":26,"in_reply_to":"fcfedbef_358e5c5a","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d6bae904_17a2ccd3","updated":"2022-12-22 00:58:02.000000000","message":"Thanks for re-considering this old patch.\nSome comment below, but I would need to review it again\nPlus, I\u0027m not working on flash driver, I would like to get the review from another maintainer too.","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c9c358be_de1c274e","updated":"2023-01-15 22:35:22.000000000","message":"good progress, thanks. Few more comments below.\n","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5d6cd206_25d9db40","updated":"2023-02-01 23:12:41.000000000","message":"I added two comments for minor issues.\nThe driver looks ok, as far as I can check.\nAnyone available for a further review?","commit_id":"61c80501aecba44265a38e77bf0cb170509c75c6"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"3d35cfb8151edc785c8af0601583bf73d58a126f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"472a8a6f_c1160857","updated":"2023-04-12 07:16:27.000000000","message":"Thanks for the review, should all be resolved now :)","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d4d6a11ad00f2df5de8307969678cabde3271120","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c8a0ef85_61d722c5","updated":"2023-04-13 22:08:18.000000000","message":"Tomas, can you please have a check on the flash subsystem?\nI\u0027m ok for the code organization","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"28fb00f60b3de2f7e91e34d16e0b66fccc8182de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"4adc584c_378393d9","updated":"2023-05-02 13:42:33.000000000","message":"Thanks for the review. I think I addressed all comments in the most recent patch set and answered all questions inline.","commit_id":"169242c869c3e8b323cc3872720b521660dacfa5"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8e28516c3433f5e0e56af82f96c28dc27e4e3cc7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"73da4498_0d370c89","updated":"2023-05-29 21:56:05.000000000","message":"Thanks for the rebase, after my patch 7662\n\nTomas, any other comment?","commit_id":"eb87e060b6c9faa6be21e1e02fa04d3c161155ec"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"59fbb722b79c278987ece6776c29924cc1b3487d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e3b7dcb4_cf7c9f68","updated":"2023-05-30 04:15:48.000000000","message":"Thanks. Just a minor issue.","commit_id":"eb87e060b6c9faa6be21e1e02fa04d3c161155ec"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"62ecaf9fa79f3ab64ea865c74c93ad64fad7e634","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"50289baf_3efea4d3","updated":"2023-05-30 07:40:48.000000000","message":"Thanks for the review. I addressed the comment with the new patch set.","commit_id":"66f5eea64120bc89fc6271a3aa95d3cfb02e6ab2"}],"doc/openocd.texi":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":7363,"context_line":"@end deffn"},{"line_number":7364,"context_line":"@end deffn"},{"line_number":7365,"context_line":""},{"line_number":7366,"context_line":"@deffn {Flash Driver} {qn908x}"},{"line_number":7367,"context_line":"The NXP QN908x microcontrollers feature a Cortex-M4F with integrated Bluetooth"},{"line_number":7368,"context_line":"5 support and an internal flash of up to 512 kB. These chips only support SWD"},{"line_number":7369,"context_line":"interface."}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"700d92ab_9e6fb5f3","line":7366,"updated":"2023-01-15 22:35:22.000000000","message":"could you please keep the alphabetic order and move {qn908x} between {psoc6} and {rp2040}?\nNot all drivers are in order and the documentation should be fixed, but at least let\u0027s not add extra work.","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":7363,"context_line":"@end deffn"},{"line_number":7364,"context_line":"@end deffn"},{"line_number":7365,"context_line":""},{"line_number":7366,"context_line":"@deffn {Flash Driver} {qn908x}"},{"line_number":7367,"context_line":"The NXP QN908x microcontrollers feature a Cortex-M4F with integrated Bluetooth"},{"line_number":7368,"context_line":"5 support and an internal flash of up to 512 kB. These chips only support SWD"},{"line_number":7369,"context_line":"interface."}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"401b5179_6dfb6ab0","line":7366,"in_reply_to":"700d92ab_9e6fb5f3","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":7365,"context_line":""},{"line_number":7366,"context_line":"@deffn {Flash Driver} {qn908x}"},{"line_number":7367,"context_line":"The NXP QN908x microcontrollers feature a Cortex-M4F with integrated Bluetooth"},{"line_number":7368,"context_line":"5 support and an internal flash of up to 512 kB. These chips only support SWD"},{"line_number":7369,"context_line":"interface."},{"line_number":7370,"context_line":""},{"line_number":7371,"context_line":"The @var{qn908x} driver uses the internal \"Flash Memory Controller\" block via"}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"be3c9106_37e12b32","line":7368,"updated":"2023-01-15 22:35:22.000000000","message":"512 kiB (see https://en.wikipedia.org/wiki/Binary_prefix )","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":7365,"context_line":""},{"line_number":7366,"context_line":"@deffn {Flash Driver} {qn908x}"},{"line_number":7367,"context_line":"The NXP QN908x microcontrollers feature a Cortex-M4F with integrated Bluetooth"},{"line_number":7368,"context_line":"5 support and an internal flash of up to 512 kB. These chips only support SWD"},{"line_number":7369,"context_line":"interface."},{"line_number":7370,"context_line":""},{"line_number":7371,"context_line":"The @var{qn908x} driver uses the internal \"Flash Memory Controller\" block via"}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"b9660d3f_a2d360c5","line":7368,"in_reply_to":"be3c9106_37e12b32","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":7373,"context_line":"support the ISP (In-System Programming) mode which is an alternate way to"},{"line_number":7374,"context_line":"program the flash via UART, SPI or USB."},{"line_number":7375,"context_line":""},{"line_number":7376,"context_line":"The internal flash is 512 kB in size in all released chips and it starts at"},{"line_number":7377,"context_line":"the address 0x01000000 although it can be mapped to address 0 and it is"},{"line_number":7378,"context_line":"aliased to other addresses. This driver only recognizes the bank starting at"},{"line_number":7379,"context_line":"address 0x01000000."}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"8c9e5bd0_e00d1d7e","line":7376,"updated":"2023-01-15 22:35:22.000000000","message":"512 kiB","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":7373,"context_line":"support the ISP (In-System Programming) mode which is an alternate way to"},{"line_number":7374,"context_line":"program the flash via UART, SPI or USB."},{"line_number":7375,"context_line":""},{"line_number":7376,"context_line":"The internal flash is 512 kB in size in all released chips and it starts at"},{"line_number":7377,"context_line":"the address 0x01000000 although it can be mapped to address 0 and it is"},{"line_number":7378,"context_line":"aliased to other addresses. This driver only recognizes the bank starting at"},{"line_number":7379,"context_line":"address 0x01000000."}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"02d45449_e036f196","line":7376,"in_reply_to":"8c9e5bd0_e00d1d7e","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":7392,"context_line":""},{"line_number":7393,"context_line":"Apart from the CRP field which is located in the image header, the last page"},{"line_number":7394,"context_line":"of the flash memory contains a \"Flash lock and protect\" descriptor which allows"},{"line_number":7395,"context_line":"to individually protect each 2 kB page, as well as disabling SWD access to the"},{"line_number":7396,"context_line":"flash and RAM. If this access is disabled it is not possible to read, erase or"},{"line_number":7397,"context_line":"program individual pages from the SWD interface or even access the read-only"},{"line_number":7398,"context_line":"\"Flash information page\" with information about the bootloader version and"}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"2bb90415_910ddba2","line":7395,"updated":"2023-01-15 22:35:22.000000000","message":"2 kiB","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":7392,"context_line":""},{"line_number":7393,"context_line":"Apart from the CRP field which is located in the image header, the last page"},{"line_number":7394,"context_line":"of the flash memory contains a \"Flash lock and protect\" descriptor which allows"},{"line_number":7395,"context_line":"to individually protect each 2 kB page, as well as disabling SWD access to the"},{"line_number":7396,"context_line":"flash and RAM. If this access is disabled it is not possible to read, erase or"},{"line_number":7397,"context_line":"program individual pages from the SWD interface or even access the read-only"},{"line_number":7398,"context_line":"\"Flash information page\" with information about the bootloader version and"}],"source_content_type":"text/x-texinfo","patch_set":4,"id":"3d14385f_9e6975be","line":7395,"in_reply_to":"2bb90415_910ddba2","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"}],"src/flash/nor/qn908x.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"#define QN908X_FMC_INI_RD_EN_INI_RD_EN_MASK\t\t\t0x1u"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#define QN908X_FMC_STATUS1_FSH_ERA_BUSY_L_MASK\t\t0x200u"},{"line_number":92,"context_line":"#define QN908X_FMC_STATUS1_FSH_WR_BUSY_L_MASK\t\t0x400u"},{"line_number":93,"context_line":"#define QN908X_FMC_STATUS1_FSH_ERA_BUSY_H_MASK\t\t0x1000u"},{"line_number":94,"context_line":"#define QN908X_FMC_STATUS1_FSH_WR_BUSY_H_MASK\t\t0x2000u"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"7c815b99_ca0de30c","line":91,"updated":"2022-12-22 00:58:02.000000000","message":"Most of the macros QN908X_FMC_xxx_MASK are single bit.\nCan be defined using BIT() ?\nE.g. this one\n#define QN908X_FMC_STATUS1_FSH_ERA_BUSY_L_MASK   BIT(9)","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"#define QN908X_FMC_INI_RD_EN_INI_RD_EN_MASK\t\t\t0x1u"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#define QN908X_FMC_STATUS1_FSH_ERA_BUSY_L_MASK\t\t0x200u"},{"line_number":92,"context_line":"#define QN908X_FMC_STATUS1_FSH_WR_BUSY_L_MASK\t\t0x400u"},{"line_number":93,"context_line":"#define QN908X_FMC_STATUS1_FSH_ERA_BUSY_H_MASK\t\t0x1000u"},{"line_number":94,"context_line":"#define QN908X_FMC_STATUS1_FSH_WR_BUSY_H_MASK\t\t0x2000u"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"a602d42a_eea6f57b","line":91,"in_reply_to":"7c815b99_ca0de30c","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":187,"context_line":"struct qn908x_flash_bank {"},{"line_number":188,"context_line":"\t/* The number of flash blocks. Initially set to zero until the flash"},{"line_number":189,"context_line":"\t * is probed. This determines the size of the flash. */"},{"line_number":190,"context_line":"\tuint32_t num_blocks;"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"\tuint32_t user_bank_size;"},{"line_number":193,"context_line":"\tbool calc_checksum;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f35fce70_60d3c81b","line":190,"updated":"2022-12-22 00:58:02.000000000","message":"I only checked this field num_blocks, but I see similar issue below for other variables.\nIn OpenOCD we use types from \u003cstdint.h\u003e (e.g. uint32_t) only when the variable has to match the size of a register in the target.\nHere num_block is just a variable for the host PC in OpenOCD; type \u0027unsigned int\u0027 is preferred.","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":187,"context_line":"struct qn908x_flash_bank {"},{"line_number":188,"context_line":"\t/* The number of flash blocks. Initially set to zero until the flash"},{"line_number":189,"context_line":"\t * is probed. This determines the size of the flash. */"},{"line_number":190,"context_line":"\tuint32_t num_blocks;"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"\tuint32_t user_bank_size;"},{"line_number":193,"context_line":"\tbool calc_checksum;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f2883b5e_22778877","line":190,"in_reply_to":"f35fce70_60d3c81b","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"/* Compute the CRC32 of a small region. This is only used to compute the CRC32"},{"line_number":212,"context_line":" * of about 256 bytes, required to verify the \"Flash information page\". */"},{"line_number":213,"context_line":"static uint32_t qn908x_crc32(uint8_t *buffer, uint32_t nbytes, uint32_t seed)"},{"line_number":214,"context_line":"{"},{"line_number":215,"context_line":"\tuint32_t crc \u003d seed ^ 0xffffffff;"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"b3ab5ba5_2575441f","line":213,"updated":"2022-12-22 00:58:02.000000000","message":"This is a standard crc32 little endian. The constant below is defined in Linux kernel as\n#define CRC32_POLY_LE 0xedb88320\n\nI see the same constant in\nsrc/target/openrisc/or1k_du_adv.c\nbut the computation is direct, it doesn\u0027t build the table. To be analyzed if it can use this same one. But don\u0027t worry, I\u0027m not asking you to check.\n\nInstead, would you mind moving this function as a generic crc32_le() in a new file src/helper/crc32.c (and associated crc32.h)?\n\nThere is another crc32 in src/target/image.c:image_calculate_checksum() but it\u0027s big endian; the algo is the same but the bits are swapped. The constant is defined in Linux as\n#define CRC32_POLY_BE 0x04c11db7\nAgain no action from your side, but I put here a not that also that function should be moved in the new file crc32.c.\n\nAnother point: in this function is OK to use uint32_t because the computation is strictly unsigned 32 bits.","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"/* Compute the CRC32 of a small region. This is only used to compute the CRC32"},{"line_number":212,"context_line":" * of about 256 bytes, required to verify the \"Flash information page\". */"},{"line_number":213,"context_line":"static uint32_t qn908x_crc32(uint8_t *buffer, uint32_t nbytes, uint32_t seed)"},{"line_number":214,"context_line":"{"},{"line_number":215,"context_line":"\tuint32_t crc \u003d seed ^ 0xffffffff;"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"18f5b72f_f5a5d77d","line":213,"in_reply_to":"b3ab5ba5_2575441f","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":358,"context_line":"{"},{"line_number":359,"context_line":"\tstruct qn908x_flash_bank *qn908x_info;"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"\tif (CMD_ARGC \u003c 6)"},{"line_number":362,"context_line":"\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"\tif (bank-\u003ebase !\u003d QN908X_FLASH_BASE) {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"fedb4de4_920320f7","line":361,"updated":"2022-12-22 00:58:02.000000000","message":"if (CMD_ARGC \u003c 6 || CMD_ARGC \u003e 7)","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":358,"context_line":"{"},{"line_number":359,"context_line":"\tstruct qn908x_flash_bank *qn908x_info;"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"\tif (CMD_ARGC \u003c 6)"},{"line_number":362,"context_line":"\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"\tif (bank-\u003ebase !\u003d QN908X_FLASH_BASE) {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"65569eaf_b737b250","line":361,"in_reply_to":"fedb4de4_920320f7","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":365,"context_line":"\t\tLOG_ERROR(\"Address \" TARGET_ADDR_FMT"},{"line_number":366,"context_line":"\t\t\t\" is an invalid bank address (try 0x%08\" PRIx32 \")\","},{"line_number":367,"context_line":"\t\t\tbank-\u003ebase, QN908X_FLASH_BASE);"},{"line_number":368,"context_line":"\t\treturn ERROR_FAIL;"},{"line_number":369,"context_line":"\t}"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"\tqn908x_info \u003d malloc(sizeof(struct qn908x_flash_bank));"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"b4e682ac_1f883a1e","line":368,"updated":"2022-12-22 00:58:02.000000000","message":"this should return ERROR_COMMAND_ARGUMENT_INVALID","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":365,"context_line":"\t\tLOG_ERROR(\"Address \" TARGET_ADDR_FMT"},{"line_number":366,"context_line":"\t\t\t\" is an invalid bank address (try 0x%08\" PRIx32 \")\","},{"line_number":367,"context_line":"\t\t\tbank-\u003ebase, QN908X_FLASH_BASE);"},{"line_number":368,"context_line":"\t\treturn ERROR_FAIL;"},{"line_number":369,"context_line":"\t}"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"\tqn908x_info \u003d malloc(sizeof(struct qn908x_flash_bank));"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"d3cb05b6_ab1a4453","line":368,"in_reply_to":"b4e682ac_1f883a1e","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":380,"context_line":"\tqn908x_info-\u003eallow_swd_disabled \u003d false;"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"\tqn908x_info-\u003ecalc_checksum \u003d false;"},{"line_number":383,"context_line":"\tif (CMD_ARGC \u003e\u003d 7) {"},{"line_number":384,"context_line":"\t\tif (strcmp(CMD_ARGV[6], \"calc_checksum\") \u003d\u003d 0)"},{"line_number":385,"context_line":"\t\t\tqn908x_info-\u003ecalc_checksum \u003d true;"},{"line_number":386,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"e1444133_446e86e1","line":383,"updated":"2022-12-22 00:58:02.000000000","message":"if (CMD_ARGC \u003d\u003d 7)","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":380,"context_line":"\tqn908x_info-\u003eallow_swd_disabled \u003d false;"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"\tqn908x_info-\u003ecalc_checksum \u003d false;"},{"line_number":383,"context_line":"\tif (CMD_ARGC \u003e\u003d 7) {"},{"line_number":384,"context_line":"\t\tif (strcmp(CMD_ARGV[6], \"calc_checksum\") \u003d\u003d 0)"},{"line_number":385,"context_line":"\t\t\tqn908x_info-\u003ecalc_checksum \u003d true;"},{"line_number":386,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"26975e5d_37142101","line":383,"in_reply_to":"e1444133_446e86e1","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"\tqn908x_info-\u003ecalc_checksum \u003d false;"},{"line_number":383,"context_line":"\tif (CMD_ARGC \u003e\u003d 7) {"},{"line_number":384,"context_line":"\t\tif (strcmp(CMD_ARGV[6], \"calc_checksum\") \u003d\u003d 0)"},{"line_number":385,"context_line":"\t\t\tqn908x_info-\u003ecalc_checksum \u003d true;"},{"line_number":386,"context_line":"\t}"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"e7474926_a99b6b1f","line":384,"updated":"2022-12-22 00:58:02.000000000","message":"should return ERROR_COMMAND_ARGUMENT_INVALID if parameter calc_checksum is misspelled?\n if (strcmp(CMD_ARGV[6], \"calc_checksum\")) {\n   free(qn908x_info);\n   return ERROR_COMMAND_ARGUMENT_INVALID;\n }\n qn908x_info-\u003ecalc_checksum \u003d true;","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"\tqn908x_info-\u003ecalc_checksum \u003d false;"},{"line_number":383,"context_line":"\tif (CMD_ARGC \u003e\u003d 7) {"},{"line_number":384,"context_line":"\t\tif (strcmp(CMD_ARGV[6], \"calc_checksum\") \u003d\u003d 0)"},{"line_number":385,"context_line":"\t\t\tqn908x_info-\u003ecalc_checksum \u003d true;"},{"line_number":386,"context_line":"\t}"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f5838815_98743938","line":384,"in_reply_to":"e7474926_a99b6b1f","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":437,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":438,"context_line":"\t\treturn retval;"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"\tif (0 \u003d\u003d (int_stat \u0026 ~(QN908X_FMC_INT_STAT_ERASEL_INT_MASK"},{"line_number":441,"context_line":"\t\t\t\t\t\t\t| QN908X_FMC_INT_STAT_WRITEL_INT_MASK"},{"line_number":442,"context_line":"\t\t\t\t\t\t\t| QN908X_FMC_INT_STAT_ERASEH_INT_MASK"},{"line_number":443,"context_line":"\t\t\t\t\t\t\t| QN908X_FMC_INT_STAT_WRITEH_INT_MASK"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"03a54928_eb9ec67a","line":440,"updated":"2022-12-22 00:58:02.000000000","message":"don\u0027t use yoda style \"if (0 \u003d\u003d value)\", but use \"if (value \u003d\u003d 0)\" or \"if (!value)\"\nMaybe you can better define in a macro what is the meaning of the constant part","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":437,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":438,"context_line":"\t\treturn retval;"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"\tif (0 \u003d\u003d (int_stat \u0026 ~(QN908X_FMC_INT_STAT_ERASEL_INT_MASK"},{"line_number":441,"context_line":"\t\t\t\t\t\t\t| QN908X_FMC_INT_STAT_WRITEL_INT_MASK"},{"line_number":442,"context_line":"\t\t\t\t\t\t\t| QN908X_FMC_INT_STAT_ERASEH_INT_MASK"},{"line_number":443,"context_line":"\t\t\t\t\t\t\t| QN908X_FMC_INT_STAT_WRITEH_INT_MASK"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"efaa8dce_c984ff1e","line":440,"in_reply_to":"03a54928_eb9ec67a","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":791,"context_line":"\t\treturn retval;"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"\tif (lock_stat \u0026 QN908X_FMC_LOCK_STAT_8_PROTECT_ANY)"},{"line_number":794,"context_line":"\t\treturn 1;"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"\treturn ERROR_OK;"},{"line_number":797,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4c1ab39d_f5c11254","line":794,"updated":"2022-12-22 00:58:02.000000000","message":"NO!!\nFunctions that return ERROR_xxx cannot return a numeric constant.\nIs this an error condition? Then look for a suitable ERROR_xx.\nOtherwise ERROR_OK!\n\nIf I understand correctly what you plan to do, here you should write:\n static int qn908x_read_protection(struct flash_bank *bank, bool *is_protected)\n {\n     ...\n     *is_protected \u003d ((lock_stat \u0026 QN908X_FMC_LOCK_STAT_8_PROTECT_ANY) !\u003d 0);\n     return ERROR_OK;\n  }\n\nand the caller below should:\n bool is_protected;\n retval \u003d qn908x_read_protection(bank, \u0026is_protected);\n if (retval !\u003d ERROR_OK)\n   return retval;\n if (info_page_or \u003d\u003d 0 \u0026\u0026 is_protected)\n   something else","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":791,"context_line":"\t\treturn retval;"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"\tif (lock_stat \u0026 QN908X_FMC_LOCK_STAT_8_PROTECT_ANY)"},{"line_number":794,"context_line":"\t\treturn 1;"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"\treturn ERROR_OK;"},{"line_number":797,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"7c9f129e_ebc17a09","line":794,"in_reply_to":"4c1ab39d_f5c11254","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":825,"context_line":""},{"line_number":826,"context_line":"\tif (computed_crc !\u003d read_crc) {"},{"line_number":827,"context_line":"\t\tuint32_t info_page_or \u003d 0;"},{"line_number":828,"context_line":"\t\tfor (uint32_t i \u003d 0; i \u003c sizeof(info_page); i++)"},{"line_number":829,"context_line":"\t\t\tinfo_page_or |\u003d info_page[0];"},{"line_number":830,"context_line":"\t\tretval \u003d is_flash_protected(bank);"},{"line_number":831,"context_line":"\t\tif (retval \u003c ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f0044447_2976e273","line":828,"updated":"2022-12-22 00:58:02.000000000","message":"unsigned int i","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":825,"context_line":""},{"line_number":826,"context_line":"\tif (computed_crc !\u003d read_crc) {"},{"line_number":827,"context_line":"\t\tuint32_t info_page_or \u003d 0;"},{"line_number":828,"context_line":"\t\tfor (uint32_t i \u003d 0; i \u003c sizeof(info_page); i++)"},{"line_number":829,"context_line":"\t\t\tinfo_page_or |\u003d info_page[0];"},{"line_number":830,"context_line":"\t\tretval \u003d is_flash_protected(bank);"},{"line_number":831,"context_line":"\t\tif (retval \u003c ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"83c7f5f2_70c1b69e","line":828,"in_reply_to":"f0044447_2976e273","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":956,"context_line":""},{"line_number":957,"context_line":"\tstruct target *target \u003d get_current_target(CMD_CTX);"},{"line_number":958,"context_line":"\tstruct flash_bank *bank \u003d NULL;"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"\tretval \u003d get_flash_bank_by_addr(target, QN908X_FLASH_BASE, true, \u0026bank);"},{"line_number":961,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":962,"context_line":"\t\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4357e77f_d14404dc","line":959,"updated":"2022-12-22 00:58:02.000000000","message":"please add:\n if (CMD_ARGC !\u003d 0)\n   return ERROR_COMMAND_SYNTAX_ERROR;","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":956,"context_line":""},{"line_number":957,"context_line":"\tstruct target *target \u003d get_current_target(CMD_CTX);"},{"line_number":958,"context_line":"\tstruct flash_bank *bank \u003d NULL;"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"\tretval \u003d get_flash_bank_by_addr(target, QN908X_FLASH_BASE, true, \u0026bank);"},{"line_number":961,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":962,"context_line":"\t\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"501aaf2c_0cce5027","line":959,"in_reply_to":"4357e77f_d14404dc","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":973,"context_line":"COMMAND_HANDLER(qn908x_handle_disable_wdog_command)"},{"line_number":974,"context_line":"{"},{"line_number":975,"context_line":"\tint retval;"},{"line_number":976,"context_line":"\tstruct target *target \u003d get_current_target(CMD_CTX);"},{"line_number":977,"context_line":"\tif (target-\u003estate !\u003d TARGET_HALTED) {"},{"line_number":978,"context_line":"\t\tLOG_ERROR(\"Target not halted\");"},{"line_number":979,"context_line":"\t\treturn ERROR_TARGET_NOT_HALTED;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"79868677_2f57a0a3","line":976,"updated":"2022-12-22 00:58:02.000000000","message":"please add:\n if (CMD_ARGC !\u003d 0)\n   return ERROR_COMMAND_SYNTAX_ERROR;","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":973,"context_line":"COMMAND_HANDLER(qn908x_handle_disable_wdog_command)"},{"line_number":974,"context_line":"{"},{"line_number":975,"context_line":"\tint retval;"},{"line_number":976,"context_line":"\tstruct target *target \u003d get_current_target(CMD_CTX);"},{"line_number":977,"context_line":"\tif (target-\u003estate !\u003d TARGET_HALTED) {"},{"line_number":978,"context_line":"\t\tLOG_ERROR(\"Target not halted\");"},{"line_number":979,"context_line":"\t\treturn ERROR_TARGET_NOT_HALTED;"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"efaf85b7_752b76fb","line":976,"in_reply_to":"79868677_2f57a0a3","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":1001,"context_line":"\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":1002,"context_line":"\tif (CMD_ARGC \u003d\u003d 1) {"},{"line_number":1003,"context_line":"\t\tif (strcmp(\"keep_lock\", CMD_ARGV[0]))"},{"line_number":1004,"context_line":"\t\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":1005,"context_line":"\t\tkeep_lock \u003d true;"},{"line_number":1006,"context_line":"\t}"},{"line_number":1007,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"61fb57e6_68681e1a","line":1004,"updated":"2022-12-22 00:58:02.000000000","message":"in this error case it\u0027s better to return ERROR_COMMAND_ARGUMENT_INVALID","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":1002,"context_line":"\tif (CMD_ARGC \u003d\u003d 1) {"},{"line_number":1003,"context_line":"\t\tif (strcmp(\"keep_lock\", CMD_ARGV[0]))"},{"line_number":1004,"context_line":"\t\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":1005,"context_line":"\t\tkeep_lock \u003d true;"},{"line_number":1006,"context_line":"\t}"},{"line_number":1007,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"01f0b5a6_19db06bc","line":1004,"in_reply_to":"61fb57e6_68681e1a","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"a147ec2ee25dca8829212e7ec9181d656d2a90a9","unresolved":true,"context_lines":[{"line_number":1084,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":1085,"context_line":"\t\treturn retval;"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"\tuint32_t lock_stat_8_addr \u003d QN908X_FLASH_BASE + 0x7f820;"},{"line_number":1088,"context_line":"\tretval \u003d target_write_u32(target, lock_stat_8_addr,"},{"line_number":1089,"context_line":"\t\t\tQN908X_FMC_LOCK_STAT_8_MASS_ERASE_LOCK_EN);"},{"line_number":1090,"context_line":"\tif (retval !\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"2f962551_401596c0","line":1087,"updated":"2022-12-22 00:58:02.000000000","message":"should this address be defined with a macro at the beginning of this file?","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":1085,"context_line":"\t\treturn retval;"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"\tuint32_t lock_stat_8_addr \u003d QN908X_FLASH_BASE + 0x7f820;"},{"line_number":1088,"context_line":"\tretval \u003d target_write_u32(target, lock_stat_8_addr,"},{"line_number":1089,"context_line":"\t\t\tQN908X_FMC_LOCK_STAT_8_MASS_ERASE_LOCK_EN);"},{"line_number":1090,"context_line":"\tif (retval !\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f9b577f6_3d42e283","line":1087,"in_reply_to":"2f962551_401596c0","updated":"2023-01-15 22:35:22.000000000","message":"Done","commit_id":"199cecba4b1c3df5407940fc6bc9e139249b23cc"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":154,"context_line":"#define QN908X_FMC_LOCK_STAT_8_MEM_PROTECT_EN\t\tBIT(2)"},{"line_number":155,"context_line":"#define QN908X_FMC_LOCK_STAT_8_PROTECT_ANY\t\t\t(BIT(1) | BIT(2))"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"// See Table 418 \"Flash lock and protect description\" in the user manual"},{"line_number":158,"context_line":"#define QN908X_FLASH_LOCK_ADDR\t\t\t\t\t\t(QN908X_FLASH_BASE + 0x7f820)"},{"line_number":159,"context_line":"// Allow mass erase"},{"line_number":160,"context_line":"#define QN908X_FLASH_LOCK_ENABLE_MASS_ERASE\t\t\tBIT(0)"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"261c49e4_bea523a8","line":157,"updated":"2023-01-15 22:35:22.000000000","message":"Please use /* .. */ also for single line comments","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":154,"context_line":"#define QN908X_FMC_LOCK_STAT_8_MEM_PROTECT_EN\t\tBIT(2)"},{"line_number":155,"context_line":"#define QN908X_FMC_LOCK_STAT_8_PROTECT_ANY\t\t\t(BIT(1) | BIT(2))"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"// See Table 418 \"Flash lock and protect description\" in the user manual"},{"line_number":158,"context_line":"#define QN908X_FLASH_LOCK_ADDR\t\t\t\t\t\t(QN908X_FLASH_BASE + 0x7f820)"},{"line_number":159,"context_line":"// Allow mass erase"},{"line_number":160,"context_line":"#define QN908X_FLASH_LOCK_ENABLE_MASS_ERASE\t\t\tBIT(0)"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"0ad2e6df_b58c19e5","line":157,"in_reply_to":"261c49e4_bea523a8","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":556,"context_line":"\t\t\tQN908X_FMC_ERASE_CTRL_PAGE_ERASEL_EN_SHIFT;"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"\t\tretval \u003d target_write_u32(bank-\u003etarget, QN908X_FMC_ERASE_CTRL,"},{"line_number":559,"context_line":"\t\t\t\t(1u \u003c\u003c ctrl_erase_en_shift) | (page_idx \u003c\u003c ctrl_page_idx_shift));"},{"line_number":560,"context_line":"\t\tif (retval !\u003d ERROR_OK)"},{"line_number":561,"context_line":"\t\t\treturn retval;"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"949e3595_234f94de","line":559,"updated":"2023-01-15 22:35:22.000000000","message":"BIT(ctrl_erase_en_shift)","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":556,"context_line":"\t\t\tQN908X_FMC_ERASE_CTRL_PAGE_ERASEL_EN_SHIFT;"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"\t\tretval \u003d target_write_u32(bank-\u003etarget, QN908X_FMC_ERASE_CTRL,"},{"line_number":559,"context_line":"\t\t\t\t(1u \u003c\u003c ctrl_erase_en_shift) | (page_idx \u003c\u003c ctrl_page_idx_shift));"},{"line_number":560,"context_line":"\t\tif (retval !\u003d ERROR_OK)"},{"line_number":561,"context_line":"\t\t\treturn retval;"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"90021b86_17ef0ae4","line":559,"in_reply_to":"949e3595_234f94de","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":848,"context_line":"\tif (computed_crc !\u003d read_crc) {"},{"line_number":849,"context_line":"\t\tuint32_t info_page_or \u003d 0;"},{"line_number":850,"context_line":"\t\tfor (unsigned int i \u003d 0; i \u003c sizeof(info_page); i++)"},{"line_number":851,"context_line":"\t\t\tinfo_page_or |\u003d info_page[0];"},{"line_number":852,"context_line":"\t\tbool is_protected;"},{"line_number":853,"context_line":"\t\tretval \u003d is_flash_protected(bank, \u0026is_protected);"},{"line_number":854,"context_line":"\t\tif (retval \u003c ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"b701d692_a32efee3","line":851,"updated":"2023-01-15 22:35:22.000000000","message":"Is it a typo? You don\u0027t use the index \u0027i\u0027. Should it here be\ninfo_page_or |\u003d info_page[i];\n?","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":848,"context_line":"\tif (computed_crc !\u003d read_crc) {"},{"line_number":849,"context_line":"\t\tuint32_t info_page_or \u003d 0;"},{"line_number":850,"context_line":"\t\tfor (unsigned int i \u003d 0; i \u003c sizeof(info_page); i++)"},{"line_number":851,"context_line":"\t\t\tinfo_page_or |\u003d info_page[0];"},{"line_number":852,"context_line":"\t\tbool is_protected;"},{"line_number":853,"context_line":"\t\tretval \u003d is_flash_protected(bank, \u0026is_protected);"},{"line_number":854,"context_line":"\t\tif (retval \u003c ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"08767470_93e5ca7b","line":851,"in_reply_to":"b701d692_a32efee3","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":851,"context_line":"\t\t\tinfo_page_or |\u003d info_page[0];"},{"line_number":852,"context_line":"\t\tbool is_protected;"},{"line_number":853,"context_line":"\t\tretval \u003d is_flash_protected(bank, \u0026is_protected);"},{"line_number":854,"context_line":"\t\tif (retval \u003c ERROR_OK)"},{"line_number":855,"context_line":"\t\t\treturn retval;"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"\t\tif (info_page_or \u003d\u003d 0 \u0026\u0026 is_protected) {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"5fb15e5f_7a122fa4","line":854,"updated":"2023-01-15 22:35:22.000000000","message":"if (retval !\u003d ERROR_OK)","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":851,"context_line":"\t\t\tinfo_page_or |\u003d info_page[0];"},{"line_number":852,"context_line":"\t\tbool is_protected;"},{"line_number":853,"context_line":"\t\tretval \u003d is_flash_protected(bank, \u0026is_protected);"},{"line_number":854,"context_line":"\t\tif (retval \u003c ERROR_OK)"},{"line_number":855,"context_line":"\t\t\treturn retval;"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"\t\tif (info_page_or \u003d\u003d 0 \u0026\u0026 is_protected) {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"11d49590_10b12c13","line":854,"in_reply_to":"5fb15e5f_7a122fa4","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":987,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":988,"context_line":"\t\treturn retval;"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"\tassert(bank);"},{"line_number":991,"context_line":"\tstruct qn908x_flash_bank *qn908x_info \u003d bank-\u003edriver_priv;"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"\tLOG_WARNING(\"Flashing images that disable SWD in qn908x is now allowed.\");"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"03c43508_c8075357","line":990,"updated":"2023-01-15 22:35:22.000000000","message":"To day there is no way to catch this abort, but if this code evolves on new chips, who knows!\nInstead of assert(), that crashes the system, what about\n if (!bank)\n   return ERROR_FAIL;","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"3d35cfb8151edc785c8af0601583bf73d58a126f","unresolved":false,"context_lines":[{"line_number":987,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":988,"context_line":"\t\treturn retval;"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"\tassert(bank);"},{"line_number":991,"context_line":"\tstruct qn908x_flash_bank *qn908x_info \u003d bank-\u003edriver_priv;"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"\tLOG_WARNING(\"Flashing images that disable SWD in qn908x is now allowed.\");"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"66a8fef0_1510589c","line":990,"in_reply_to":"03c43508_c8075357","updated":"2023-04-12 07:16:27.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af5eef73fe535d4481b81f92bf2ad4443f9be1cf","unresolved":true,"context_lines":[{"line_number":1005,"context_line":"\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"\tif (target-\u003estate !\u003d TARGET_HALTED) {"},{"line_number":1008,"context_line":"\t\tLOG_ERROR(\"Target not halted\");"},{"line_number":1009,"context_line":"\t\treturn ERROR_TARGET_NOT_HALTED;"},{"line_number":1010,"context_line":"\t}"},{"line_number":1011,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"ad8efcf5_fd62fedf","line":1008,"updated":"2023-01-15 22:35:22.000000000","message":"command output and command error messages should not use LOG_XX but\ncommand_print(CMD, \"Target not halted\");","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"\t\treturn ERROR_COMMAND_SYNTAX_ERROR;"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"\tif (target-\u003estate !\u003d TARGET_HALTED) {"},{"line_number":1008,"context_line":"\t\tLOG_ERROR(\"Target not halted\");"},{"line_number":1009,"context_line":"\t\treturn ERROR_TARGET_NOT_HALTED;"},{"line_number":1010,"context_line":"\t}"},{"line_number":1011,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"5d4e0da9_5df63396","line":1008,"in_reply_to":"ad8efcf5_fd62fedf","updated":"2023-02-01 23:12:41.000000000","message":"Done","commit_id":"29f2505ae9d0891452df92bfc035d4acc92e42ca"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":true,"context_lines":[{"line_number":594,"context_line":"\tbool needs_update \u003d false;"},{"line_number":595,"context_line":"\tfor (unsigned int i \u003d first; i \u003c last; i++) {"},{"line_number":596,"context_line":"\t\tif (set !\u003d (((qn908x_info-\u003epage_lock.bits[i / 8] \u003e\u003e (i % 8)) \u0026 1)"},{"line_number":597,"context_line":"\t\t\t^ 1))"},{"line_number":598,"context_line":"\t\t\tneeds_update \u003d true;"},{"line_number":599,"context_line":"\t}"},{"line_number":600,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":5,"id":"c08f528f_cf873182","line":597,"updated":"2023-02-01 23:12:41.000000000","message":"no need to go to new line. OpenOCD coding style accepts lines till 120 chars","commit_id":"61c80501aecba44265a38e77bf0cb170509c75c6"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"3d35cfb8151edc785c8af0601583bf73d58a126f","unresolved":false,"context_lines":[{"line_number":594,"context_line":"\tbool needs_update \u003d false;"},{"line_number":595,"context_line":"\tfor (unsigned int i \u003d first; i \u003c last; i++) {"},{"line_number":596,"context_line":"\t\tif (set !\u003d (((qn908x_info-\u003epage_lock.bits[i / 8] \u003e\u003e (i % 8)) \u0026 1)"},{"line_number":597,"context_line":"\t\t\t^ 1))"},{"line_number":598,"context_line":"\t\t\tneeds_update \u003d true;"},{"line_number":599,"context_line":"\t}"},{"line_number":600,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":5,"id":"64c6e25c_11b5c421","line":597,"in_reply_to":"c08f528f_cf873182","updated":"2023-04-12 07:16:27.000000000","message":"Done","commit_id":"61c80501aecba44265a38e77bf0cb170509c75c6"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"cae9a0a1dee57ee0eb01e2c68414744ceb2265e2","unresolved":true,"context_lines":[{"line_number":614,"context_line":"\tint retval;"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"\tif (qn908x_info-\u003epage_lock.bits[sizeof(qn908x_info-\u003epage_lock.bits) - 1] \u0026"},{"line_number":617,"context_line":"\t\t0x80) {"},{"line_number":618,"context_line":"\t\t/* A bit 1 in the MSB in the page_lock.bits array means that the last"},{"line_number":619,"context_line":"\t\t * page is unlocked, so we can just erase it. */"},{"line_number":620,"context_line":"\t\tretval \u003d qn908x_erase(bank, last_page, last_page);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"3b7eb8a4_6a49248b","line":617,"updated":"2023-02-01 23:12:41.000000000","message":"ditto","commit_id":"61c80501aecba44265a38e77bf0cb170509c75c6"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"3d35cfb8151edc785c8af0601583bf73d58a126f","unresolved":false,"context_lines":[{"line_number":614,"context_line":"\tint retval;"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"\tif (qn908x_info-\u003epage_lock.bits[sizeof(qn908x_info-\u003epage_lock.bits) - 1] \u0026"},{"line_number":617,"context_line":"\t\t0x80) {"},{"line_number":618,"context_line":"\t\t/* A bit 1 in the MSB in the page_lock.bits array means that the last"},{"line_number":619,"context_line":"\t\t * page is unlocked, so we can just erase it. */"},{"line_number":620,"context_line":"\t\tretval \u003d qn908x_erase(bank, last_page, last_page);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"8ccd4e99_48f26060","line":617,"in_reply_to":"3b7eb8a4_6a49248b","updated":"2023-04-12 07:16:27.000000000","message":"Done","commit_id":"61c80501aecba44265a38e77bf0cb170509c75c6"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"16e48e9a4581fd3089bc47f49aa7f5da51faa980","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"/* The QN908x has two flash regions, one is the main flash region holding the"},{"line_number":20,"context_line":" * user code and the second one is a small (0x800 bytes) \"Flash information"},{"line_number":21,"context_line":" * page\" that can\u0027t be written to by the used. This page contains information"},{"line_number":22,"context_line":" * programmed at the factory."},{"line_number":23,"context_line":" *"},{"line_number":24,"context_line":" * The main flash region is normally 512 KiB, there\u0027s a field in the \"Flash"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4a14a38d_8943e93d","line":21,"range":{"start_line":21,"start_character":44,"end_line":21,"end_character":45},"updated":"2023-04-30 09:13:35.000000000","message":"typo","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"28fb00f60b3de2f7e91e34d16e0b66fccc8182de","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"/* The QN908x has two flash regions, one is the main flash region holding the"},{"line_number":20,"context_line":" * user code and the second one is a small (0x800 bytes) \"Flash information"},{"line_number":21,"context_line":" * page\" that can\u0027t be written to by the used. This page contains information"},{"line_number":22,"context_line":" * programmed at the factory."},{"line_number":23,"context_line":" *"},{"line_number":24,"context_line":" * The main flash region is normally 512 KiB, there\u0027s a field in the \"Flash"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"02c3ec3a_b093895f","line":21,"range":{"start_line":21,"start_character":44,"end_line":21,"end_character":45},"in_reply_to":"4a14a38d_8943e93d","updated":"2023-05-02 13:42:33.000000000","message":"Done","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"16e48e9a4581fd3089bc47f49aa7f5da51faa980","unresolved":true,"context_lines":[{"line_number":450,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":451,"context_line":"\t\t}"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"\t\tif (int_stat \u0026 (QN908X_FMC_INT_STAT_WRITE_FAIL_L_INT_MASK \u003c\u003c shift)) {"},{"line_number":454,"context_line":"\t\t\tLOG_ERROR(\"Smart write on block %u failed\", block);"},{"line_number":455,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":456,"context_line":"\t\t}"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"\t\tif (int_stat \u0026 (QN908X_FMC_INT_STAT_ERASE_FAIL_L_INT_MASK \u003c\u003c shift)) {"},{"line_number":459,"context_line":"\t\t\tLOG_ERROR(\"Smart erase on block %u failed\", block);"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"243c4923_7d0da826","line":456,"range":{"start_line":453,"start_character":1,"end_line":456,"end_character":3},"updated":"2023-04-30 09:13:35.000000000","message":"probably unwanted duplicity?","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"28fb00f60b3de2f7e91e34d16e0b66fccc8182de","unresolved":false,"context_lines":[{"line_number":450,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":451,"context_line":"\t\t}"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"\t\tif (int_stat \u0026 (QN908X_FMC_INT_STAT_WRITE_FAIL_L_INT_MASK \u003c\u003c shift)) {"},{"line_number":454,"context_line":"\t\t\tLOG_ERROR(\"Smart write on block %u failed\", block);"},{"line_number":455,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":456,"context_line":"\t\t}"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"\t\tif (int_stat \u0026 (QN908X_FMC_INT_STAT_ERASE_FAIL_L_INT_MASK \u003c\u003c shift)) {"},{"line_number":459,"context_line":"\t\t\tLOG_ERROR(\"Smart erase on block %u failed\", block);"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"545cf51f_708fc324","line":456,"range":{"start_line":453,"start_character":1,"end_line":456,"end_character":3},"in_reply_to":"243c4923_7d0da826","updated":"2023-05-02 13:42:33.000000000","message":"Done","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"16e48e9a4581fd3089bc47f49aa7f5da51faa980","unresolved":true,"context_lines":[{"line_number":680,"context_line":""},{"line_number":681,"context_line":"\t/* TODO: We can actually write not aligned to word boundary but it"},{"line_number":682,"context_line":"\t * requires a read-modify-write operation. */"},{"line_number":683,"context_line":"\tif ((offset % 4) !\u003d 0) {"},{"line_number":684,"context_line":"\t\tLOG_WARNING(\"offset 0x%\" PRIx32"},{"line_number":685,"context_line":"\t\t\t\" breaks required word-alignment\", offset);"},{"line_number":686,"context_line":"\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":687,"context_line":"\t}"},{"line_number":688,"context_line":"\tif ((count % 4) !\u003d 0) {"},{"line_number":689,"context_line":"\t\tLOG_WARNING(\"offset 0x%\" PRIx32"},{"line_number":690,"context_line":"\t\t\t\" breaks required word-alignment\", count);"},{"line_number":691,"context_line":"\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":692,"context_line":"\t}"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"\t/* Compute the calc_checksum even if it wasn\u0027t requested. */"},{"line_number":695,"context_line":"\tuint32_t checksum \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"7797debd_10584476","line":692,"range":{"start_line":683,"start_character":1,"end_line":692,"end_character":2},"updated":"2023-04-30 09:13:35.000000000","message":"The flash infrastructure could ensure proper alignment if FLASH_BANK_COMMAND_HANDLER or the flash probe sets\n bank-\u003ewrite_start_alignment \u003d ..;\n bank-\u003ewrite_end_alignment \u003d ..;\n \nUnfortunately it requires a \"classic\" flash where writing \u00270\u0027 programs the bit to zero and writing \u00271\u0027 does nothing and multiple writes merge zeros. If the controller (FMC) checks the flash cell is erased before writing or checks that flash content equals to the written data after write, the flash infrastructure alignment control doesn\u0027t work well when one alignment unit contains both old and newly written data.","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"28fb00f60b3de2f7e91e34d16e0b66fccc8182de","unresolved":false,"context_lines":[{"line_number":680,"context_line":""},{"line_number":681,"context_line":"\t/* TODO: We can actually write not aligned to word boundary but it"},{"line_number":682,"context_line":"\t * requires a read-modify-write operation. */"},{"line_number":683,"context_line":"\tif ((offset % 4) !\u003d 0) {"},{"line_number":684,"context_line":"\t\tLOG_WARNING(\"offset 0x%\" PRIx32"},{"line_number":685,"context_line":"\t\t\t\" breaks required word-alignment\", offset);"},{"line_number":686,"context_line":"\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":687,"context_line":"\t}"},{"line_number":688,"context_line":"\tif ((count % 4) !\u003d 0) {"},{"line_number":689,"context_line":"\t\tLOG_WARNING(\"offset 0x%\" PRIx32"},{"line_number":690,"context_line":"\t\t\t\" breaks required word-alignment\", count);"},{"line_number":691,"context_line":"\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":692,"context_line":"\t}"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"\t/* Compute the calc_checksum even if it wasn\u0027t requested. */"},{"line_number":695,"context_line":"\tuint32_t checksum \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"ff1cf054_3cf943ef","line":692,"range":{"start_line":683,"start_character":1,"end_line":692,"end_character":2},"in_reply_to":"7797debd_10584476","updated":"2023-05-02 13:42:33.000000000","message":"I updated the code accordingly and added an `assert()` here instead.","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"16e48e9a4581fd3089bc47f49aa7f5da51faa980","unresolved":true,"context_lines":[{"line_number":770,"context_line":"\t\t\tuint8_t copybuf[BUF_SIZE];"},{"line_number":771,"context_line":"\t\t\tmemcpy(copybuf, buffer, chunk_len);"},{"line_number":772,"context_line":"\t\t\tbuf_set_u32(copybuf + 0x1c - offset, 0, 32, checksum);"},{"line_number":773,"context_line":"\t\t\tretval \u003d target_write_buffer(bank-\u003etarget,"},{"line_number":774,"context_line":"\t\t\t\t\tbank-\u003ebase + offset, chunk_len, copybuf);"},{"line_number":775,"context_line":"\t\t} else {"},{"line_number":776,"context_line":"\t\t\tretval \u003d target_write_buffer(bank-\u003etarget, bank-\u003ebase + offset,"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"9acab97a_8fb7dd53","line":773,"updated":"2023-04-30 09:13:35.000000000","message":"What are the reasons for writing a chunk by chunk?\n\nThis flash driver doesn\u0027t wait for FMC idle after a page or so - it\u0027s at least unusual. It may exercise SWD WAIT handling which is not implemented in all SWD drivers (did you test with ftdi based adapter?). Could be also the reason for your comment about adapter speed in cfg: \"but for flashing 1MHz is more reliable.\"?\n\nIf the write is chunked just to keep the size of copybuf reasonable, then seems me easier to stop target_write_buffer() before the checksum position, write checksum by target_write_u32() and continue with target_write_buffer() with no extra buffering.","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"28fb00f60b3de2f7e91e34d16e0b66fccc8182de","unresolved":false,"context_lines":[{"line_number":770,"context_line":"\t\t\tuint8_t copybuf[BUF_SIZE];"},{"line_number":771,"context_line":"\t\t\tmemcpy(copybuf, buffer, chunk_len);"},{"line_number":772,"context_line":"\t\t\tbuf_set_u32(copybuf + 0x1c - offset, 0, 32, checksum);"},{"line_number":773,"context_line":"\t\t\tretval \u003d target_write_buffer(bank-\u003etarget,"},{"line_number":774,"context_line":"\t\t\t\t\tbank-\u003ebase + offset, chunk_len, copybuf);"},{"line_number":775,"context_line":"\t\t} else {"},{"line_number":776,"context_line":"\t\t\tretval \u003d target_write_buffer(bank-\u003etarget, bank-\u003ebase + offset,"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"9c5abdc3_8830fd80","line":773,"in_reply_to":"9acab97a_8fb7dd53","updated":"2023-05-02 13:42:33.000000000","message":"\u003e What are the reasons for writing a chunk by chunk?\n\nThis is a good question. I\u0027m not sure if iosabi (the original author) is still around.\n\n\u003e This flash driver doesn\u0027t wait for FMC idle after a page or so - it\u0027s at least unusual.\n\nThe user manual in the examples also seem to suggest waiting for an FMC idle and an error check after every page in the given example on how to use the flash. There is no explicit wording that this is actually required, but it certainly won\u0027t hurt to stick with the user manual example here. Especially since this is the usual pattern anyway.\n\nI changed the loop to flash in chunks that end at page borders (so typically one page at a time) and moved the waiting for FMC idle and the FMC status check into the loop body, so this is now done.\n\n\u003e Could be also the reason for your comment about adapter speed in cfg: \"but for flashing 1MHz is more reliable.\"?\n\nI sadly cannot answer that question and have to refer to the original author of the patch set instead.\n\n\u003e If the write is chunked just to keep the size of copybuf reasonable, then seems me easier to stop target_write_buffer() before the checksum position, write checksum by target_write_u32() and continue with target_write_buffer() with no extra buffering.\n\nI think this was the reasoning. I agree that the code now is easier to read.","commit_id":"9fa87c4f6707e3c5a54b757ab4be18eaca53a40c"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"59fbb722b79c278987ece6776c29924cc1b3487d","unresolved":true,"context_lines":[{"line_number":769,"context_line":"\t\t\t\treturn retval;"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"\t\t\t/* write computed crc checksum instead of provided data */"},{"line_number":772,"context_line":"\t\t\ttarget_write_u32(bank-\u003etarget, bank-\u003ebase + QN908X_FLASH_IRQ_VECTOR_CHECKSUM_POS, checksum);"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"\t\t\tretval \u003d target_write_buffer(bank-\u003etarget,"},{"line_number":775,"context_line":"\t\t\t\t\tbank-\u003ebase + QN908X_FLASH_IRQ_VECTOR_CHECKSUM_END,"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"b6b3cd4e_4d2128b9","line":772,"range":{"start_line":772,"start_character":3,"end_line":772,"end_character":19},"updated":"2023-05-30 04:15:48.000000000","message":"Check the returned value","commit_id":"eb87e060b6c9faa6be21e1e02fa04d3c161155ec"},{"author":{"_account_id":1002022,"name":"Marian Buschsieweke","display_name":"maribu","email":"marian.buschsieweke@ovgu.de","username":"maribu"},"change_message_id":"62ecaf9fa79f3ab64ea865c74c93ad64fad7e634","unresolved":false,"context_lines":[{"line_number":769,"context_line":"\t\t\t\treturn retval;"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"\t\t\t/* write computed crc checksum instead of provided data */"},{"line_number":772,"context_line":"\t\t\ttarget_write_u32(bank-\u003etarget, bank-\u003ebase + QN908X_FLASH_IRQ_VECTOR_CHECKSUM_POS, checksum);"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"\t\t\tretval \u003d target_write_buffer(bank-\u003etarget,"},{"line_number":775,"context_line":"\t\t\t\t\tbank-\u003ebase + QN908X_FLASH_IRQ_VECTOR_CHECKSUM_END,"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"671b7e8c_c888b217","line":772,"range":{"start_line":772,"start_character":3,"end_line":772,"end_character":19},"in_reply_to":"b6b3cd4e_4d2128b9","updated":"2023-05-30 07:40:48.000000000","message":"Good catch, thanks. Fixed :)","commit_id":"eb87e060b6c9faa6be21e1e02fa04d3c161155ec"}]}
