)]}'
{"src/flash/nor/aduc702x.c":[{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"87507f36a70f0fbd8b2809322eb3ffc52e014caa","unresolved":false,"context_lines":[{"line_number":348,"context_line":"{"},{"line_number":349,"context_line":"\tuint8_t v \u003d 4;"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"\tint64_t endtime \u003d timeval_ms() + timeout_ms;"},{"line_number":352,"context_line":"\twhile (1) {"},{"line_number":353,"context_line":"\t\ttarget_read_u8(target, ADUC702X_FLASH + ADUC702X_FLASH_FEESTA, \u0026v);"},{"line_number":354,"context_line":"\t\tif ((v \u0026 4) \u003d\u003d 0)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f19c482e_e86bcaae","side":"PARENT","line":351,"updated":"2026-02-06 19:16:30.000000000","message":"Wall clock controlled wait example","commit_id":"67c69a082b4f90c762e49f87d6e5a2762f2d3dd1"}],"src/flash/nor/efm32.c":[{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"87507f36a70f0fbd8b2809322eb3ffc52e014caa","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"#define EFM_FAMILY_ID_GIANT_GECKO       72"},{"line_number":34,"context_line":"#define EFM_FAMILY_ID_LEOPARD_GECKO     74"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#define EFM32_FLASH_BASE                0"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"/* size in bytes, not words; must fit all Gecko devices */"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"13b92f0d_afdfdcbd","line":35,"updated":"2026-02-06 19:16:30.000000000","message":"Better leave the definitions as they are.\n100 as a parameter of `efm32_wait_status()` is a typical magic number we want to avoid.\nYou might add \"100ms of timeout is not a technical requirement...\" as a comment here.","commit_id":"33e1017f24702bf75ba713d46c872c9e075c1be7"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"ef6fc1cc4e443c473ff7330ba91a66c1a9ef6e04","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"#define EFM_FAMILY_ID_GIANT_GECKO       72"},{"line_number":34,"context_line":"#define EFM_FAMILY_ID_LEOPARD_GECKO     74"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#define EFM32_FLASH_BASE                0"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"/* size in bytes, not words; must fit all Gecko devices */"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"6c272642_641c8e98","line":35,"in_reply_to":"13b92f0d_afdfdcbd","updated":"2026-02-10 17:26:16.000000000","message":"Done","commit_id":"33e1017f24702bf75ba713d46c872c9e075c1be7"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"87507f36a70f0fbd8b2809322eb3ffc52e014caa","unresolved":true,"context_lines":[{"line_number":420,"context_line":"\t\t\t     uint32_t wait_mask, bool wait_for_set)"},{"line_number":421,"context_line":"{"},{"line_number":422,"context_line":"\tuint32_t status \u003d 0;"},{"line_number":423,"context_line":"\tint ret \u003d 0;"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"\twhile (1) {"},{"line_number":426,"context_line":"\t\tret \u003d efm32_read_reg_u32(bank, EFM32_MSC_REG_STATUS, \u0026status);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"c70cf5bd_26c1058b","line":423,"updated":"2026-02-06 19:16:30.000000000","message":"Initialisation seems useless. If it\u0027s needed just to silence a static analyser warning then set to ERROR_OK. Or even better move inside `while` block\nDo not reorder lines (we have no reverse xmas tree in coding style guide)","commit_id":"33e1017f24702bf75ba713d46c872c9e075c1be7"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"ef6fc1cc4e443c473ff7330ba91a66c1a9ef6e04","unresolved":false,"context_lines":[{"line_number":420,"context_line":"\t\t\t     uint32_t wait_mask, bool wait_for_set)"},{"line_number":421,"context_line":"{"},{"line_number":422,"context_line":"\tuint32_t status \u003d 0;"},{"line_number":423,"context_line":"\tint ret \u003d 0;"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"\twhile (1) {"},{"line_number":426,"context_line":"\t\tret \u003d efm32_read_reg_u32(bank, EFM32_MSC_REG_STATUS, \u0026status);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4ad5d1c2_e6b2aa3c","line":423,"in_reply_to":"c70cf5bd_26c1058b","updated":"2026-02-10 17:26:16.000000000","message":"Done","commit_id":"33e1017f24702bf75ba713d46c872c9e075c1be7"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"87507f36a70f0fbd8b2809322eb3ffc52e014caa","unresolved":true,"context_lines":[{"line_number":423,"context_line":"\tint ret \u003d 0;"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"\twhile (1) {"},{"line_number":426,"context_line":"\t\tret \u003d efm32_read_reg_u32(bank, EFM32_MSC_REG_STATUS, \u0026status);"},{"line_number":427,"context_line":"\t\tif (ret !\u003d ERROR_OK)"},{"line_number":428,"context_line":"\t\t\treturn ret;"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"2e464e7d_6ea5a915","line":426,"updated":"2026-02-06 19:16:30.000000000","message":"Actually the timeout unit is 1 ms or more, it depends heavily on the adapter. This read takes 2ms on an ordinary USB FS based adapter.\n\nTo suggest ms unit of timeout you should test `timeval_ms()` instead of counting loop cycles.","commit_id":"33e1017f24702bf75ba713d46c872c9e075c1be7"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"vanekt@fbl.cz","username":"vanekt"},"change_message_id":"ef6fc1cc4e443c473ff7330ba91a66c1a9ef6e04","unresolved":false,"context_lines":[{"line_number":423,"context_line":"\tint ret \u003d 0;"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"\twhile (1) {"},{"line_number":426,"context_line":"\t\tret \u003d efm32_read_reg_u32(bank, EFM32_MSC_REG_STATUS, \u0026status);"},{"line_number":427,"context_line":"\t\tif (ret !\u003d ERROR_OK)"},{"line_number":428,"context_line":"\t\t\treturn ret;"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ddce688e_c993eb6d","line":426,"in_reply_to":"2e464e7d_6ea5a915","updated":"2026-02-10 17:26:16.000000000","message":"Done","commit_id":"33e1017f24702bf75ba713d46c872c9e075c1be7"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8ab2f105eb1edbc662b70575a692b0fce05b7096","unresolved":true,"context_lines":[{"line_number":33,"context_line":"#define EFM_FAMILY_ID_GIANT_GECKO       72"},{"line_number":34,"context_line":"#define EFM_FAMILY_ID_LEOPARD_GECKO     74"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"/* A reasonable value (more or less 100ms depending of the speed of the bus)"},{"line_number":37,"context_line":" * without any technical meaning."},{"line_number":38,"context_line":" */"},{"line_number":39,"context_line":"#define EFM32_FLASH_OPERATION_TMO       100"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"ebf4ca04_0312befa","line":36,"updated":"2026-02-08 16:28:00.000000000","message":"Which \"bus\" are you talking about?\nThe delay for flash are usually specified in the datasheets.\nI\u0027m not familiar with these devices, but here:\nhttps://www.silabs.com/documents/public/data-sheets/efm32g-datasheet.pdf\nin table 4.6\nPage erase 22 ms\nWord programming 20 us.\nSo using 100ms as a common timeout could be seen as a safe value.","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"},{"author":{"_account_id":1002493,"name":"Jérôme Pouiller","email":"jerome.pouiller@silabs.com","username":"jerome-pouiller"},"change_message_id":"e9dece4e6efdc32e4cdd59eb16d2c45510e0589a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"#define EFM_FAMILY_ID_GIANT_GECKO       72"},{"line_number":34,"context_line":"#define EFM_FAMILY_ID_LEOPARD_GECKO     74"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"/* A reasonable value (more or less 100ms depending of the speed of the bus)"},{"line_number":37,"context_line":" * without any technical meaning."},{"line_number":38,"context_line":" */"},{"line_number":39,"context_line":"#define EFM32_FLASH_OPERATION_TMO       100"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"1a9c0c5b_5243f0a7","line":36,"in_reply_to":"ebf4ca04_0312befa","updated":"2026-02-10 17:25:07.000000000","message":"Done","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8ab2f105eb1edbc662b70575a692b0fce05b7096","unresolved":true,"context_lines":[{"line_number":36,"context_line":"/* A reasonable value (more or less 100ms depending of the speed of the bus)"},{"line_number":37,"context_line":" * without any technical meaning."},{"line_number":38,"context_line":" */"},{"line_number":39,"context_line":"#define EFM32_FLASH_OPERATION_TMO       100"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#define EFM32_FLASH_BASE                0"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"ce44431b_f25675bc","line":39,"updated":"2026-02-08 16:28:00.000000000","message":"Please change the name of the macro. The acronym `TMO` is not common.\nWhat about `EFM32_FLASH_TIMEOUT_MS`, with the suffix for the time unit?","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"},{"author":{"_account_id":1002493,"name":"Jérôme Pouiller","email":"jerome.pouiller@silabs.com","username":"jerome-pouiller"},"change_message_id":"e9dece4e6efdc32e4cdd59eb16d2c45510e0589a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"/* A reasonable value (more or less 100ms depending of the speed of the bus)"},{"line_number":37,"context_line":" * without any technical meaning."},{"line_number":38,"context_line":" */"},{"line_number":39,"context_line":"#define EFM32_FLASH_OPERATION_TMO       100"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#define EFM32_FLASH_BASE                0"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"29e3d097_5d05504d","line":39,"in_reply_to":"ce44431b_f25675bc","updated":"2026-02-10 17:25:07.000000000","message":"Done","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8ab2f105eb1edbc662b70575a692b0fce05b7096","unresolved":true,"context_lines":[{"line_number":424,"context_line":"/* Timeout is more or less in milliseconds. The exact timeout depends of the"},{"line_number":425,"context_line":" * speed of efm32_read_reg_u32()"},{"line_number":426,"context_line":" */"},{"line_number":427,"context_line":"static int efm32_wait_status(struct flash_bank *bank, int timeout,"},{"line_number":428,"context_line":"\t\t\t     uint32_t wait_mask, bool wait_for_set)"},{"line_number":429,"context_line":"{"},{"line_number":430,"context_line":"\tuint32_t status \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"f238df24_8412002b","line":427,"updated":"2026-02-08 16:28:00.000000000","message":"In patch 4 you have dropped the unit suffix from `timeout_ms`. Please add it again as I consider it as very useful.","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"},{"author":{"_account_id":1002493,"name":"Jérôme Pouiller","email":"jerome.pouiller@silabs.com","username":"jerome-pouiller"},"change_message_id":"e9dece4e6efdc32e4cdd59eb16d2c45510e0589a","unresolved":false,"context_lines":[{"line_number":424,"context_line":"/* Timeout is more or less in milliseconds. The exact timeout depends of the"},{"line_number":425,"context_line":" * speed of efm32_read_reg_u32()"},{"line_number":426,"context_line":" */"},{"line_number":427,"context_line":"static int efm32_wait_status(struct flash_bank *bank, int timeout,"},{"line_number":428,"context_line":"\t\t\t     uint32_t wait_mask, bool wait_for_set)"},{"line_number":429,"context_line":"{"},{"line_number":430,"context_line":"\tuint32_t status \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"2e17b530_96af371a","line":427,"in_reply_to":"f238df24_8412002b","updated":"2026-02-10 17:25:07.000000000","message":"Done","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8ab2f105eb1edbc662b70575a692b0fce05b7096","unresolved":true,"context_lines":[{"line_number":441,"context_line":"\t\tif ((status \u0026 wait_mask) \u0026\u0026 wait_for_set)"},{"line_number":442,"context_line":"\t\t\tbreak;"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"\t\tif (timeout-- \u003c\u003d 0) {"},{"line_number":445,"context_line":"\t\t\tLOG_ERROR(\"timed out waiting for MSC status\");"},{"line_number":446,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":447,"context_line":"\t\t}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"37b54865_50f0bd13","line":444,"updated":"2026-02-08 16:28:00.000000000","message":"agree with Tomas, here we should not use a counting loop, but instead `timeval_ms()`","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"},{"author":{"_account_id":1002493,"name":"Jérôme Pouiller","email":"jerome.pouiller@silabs.com","username":"jerome-pouiller"},"change_message_id":"e9dece4e6efdc32e4cdd59eb16d2c45510e0589a","unresolved":false,"context_lines":[{"line_number":441,"context_line":"\t\tif ((status \u0026 wait_mask) \u0026\u0026 wait_for_set)"},{"line_number":442,"context_line":"\t\t\tbreak;"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"\t\tif (timeout-- \u003c\u003d 0) {"},{"line_number":445,"context_line":"\t\t\tLOG_ERROR(\"timed out waiting for MSC status\");"},{"line_number":446,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":447,"context_line":"\t\t}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"cf91b5c7_dc1e37b7","line":444,"in_reply_to":"37b54865_50f0bd13","updated":"2026-02-10 17:25:07.000000000","message":"Done","commit_id":"fb8cb82e1679cd9e8d6dfe9e2f490ae76357432d"}]}
