)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"e83e94c2811dc0bd1ba18f795469857d082e64b1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2d487860_7754c263","updated":"2026-09-09 04:41:41.000000000","message":"Marc, any progress in NVM support?\nI can fix the problems I commented. Don\u0027t you mind if I update this and the following patches?","commit_id":"996f6313c9e451f669054f8a51275fef4507d75d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"faeffe89853ee0b20ccbbe08a3791bf07783a559","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f9ab5b49_bf8520be","in_reply_to":"2d487860_7754c263","updated":"2026-09-10 08:25:42.000000000","message":"Thanks for the reminder Tomas! Feel free to update the patches - I just rebased the patches and fixed a compilation error.\n\nJust noticed that I had a draft comment about rewriting flash driver infrastructure. Please comment if you have major concerns about that. This command interface restructuring is on my TODO list (somewhere).","commit_id":"996f6313c9e451f669054f8a51275fef4507d75d"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"749c8f12871469aaba22e4209db8e9617e9f0229","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3b57b268_387870ad","in_reply_to":"74465db1_537b3dd3","updated":"2026-10-16 07:31:02.000000000","message":"Done","commit_id":"996f6313c9e451f669054f8a51275fef4507d75d"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"c96dcfa51db53c00d1a764c90d46d138549f0bf8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"74465db1_537b3dd3","in_reply_to":"f9ab5b49_bf8520be","updated":"2026-09-10 09:04:04.000000000","message":"\u003e Thanks for the reminder Tomas! Feel free to update the patches - I just rebased the patches and fixed a compilation error.\n\nAs the fix was more complicated than I originally thought I decided to add 2 patches to the series. Please take a look.","commit_id":"996f6313c9e451f669054f8a51275fef4507d75d"}],"src/flash/nor/core.c":[{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"fb1e5ec41a6fb9e96fc8f1a7a231a4031ec323da","unresolved":true,"context_lines":[{"line_number":472,"context_line":"\t\t */"},{"line_number":473,"context_line":"\t\tif (addr !\u003d c-\u003ebase) {"},{"line_number":474,"context_line":"\t\t\tLOG_ERROR(\"Whole bank access must start at beginning of bank.\");"},{"line_number":475,"context_line":"\t\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":476,"context_line":"\t\t}"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"\t\treturn callback(c, 0, (c-\u003enum_sectors \u003d\u003d 0) ? 0 : c-\u003enum_sectors - 1);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"fe9e1baf_8f509d8e","line":475,"updated":"2025-12-12 12:38:36.000000000","message":"On nRF54L it breaks `program` command with a sparse image, image not starting at RRAM begin or image with offset:\n\n```\nopenocd -f board/nordic/nrf54l15-dk.cfg -c \u0027program rand_64k.bin 0x8000\u0027\n...\n** Programming Started **\nError: Whole bank access must start at beginning of bank.\nembedded:startup.tcl:1952: Error: ** Programming Failed **\n...\n```\nWe should test for non implemented erase before we fail whole `write_image erase`","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"749c8f12871469aaba22e4209db8e9617e9f0229","unresolved":false,"context_lines":[{"line_number":472,"context_line":"\t\t */"},{"line_number":473,"context_line":"\t\tif (addr !\u003d c-\u003ebase) {"},{"line_number":474,"context_line":"\t\t\tLOG_ERROR(\"Whole bank access must start at beginning of bank.\");"},{"line_number":475,"context_line":"\t\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":476,"context_line":"\t\t}"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"\t\treturn callback(c, 0, (c-\u003enum_sectors \u003d\u003d 0) ? 0 : c-\u003enum_sectors - 1);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"c3c2d872_7c08e5d3","line":475,"in_reply_to":"a9590c2c_98a3045f","updated":"2026-10-16 07:31:02.000000000","message":"Done","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"e2c6367c790a1687097e15d1623a9371186b5081","unresolved":true,"context_lines":[{"line_number":472,"context_line":"\t\t */"},{"line_number":473,"context_line":"\t\tif (addr !\u003d c-\u003ebase) {"},{"line_number":474,"context_line":"\t\t\tLOG_ERROR(\"Whole bank access must start at beginning of bank.\");"},{"line_number":475,"context_line":"\t\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":476,"context_line":"\t\t}"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"\t\treturn callback(c, 0, (c-\u003enum_sectors \u003d\u003d 0) ? 0 : c-\u003enum_sectors - 1);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"a9590c2c_98a3045f","line":475,"in_reply_to":"fe9e1baf_8f509d8e","updated":"2026-09-09 07:32:14.000000000","message":"Not easy to test for non implemented erase early - I have to remove bank-\u003edriver-\u003eerase and add skipping over banks with NULL erase.\nWith\n9972: flash/nor: allow driver erase method to be NULL | https://review.openocd.org/c/openocd/+/9972\nand\n9973: flash/nor, gdb_server: allow skipping flash bank without erase | https://review.openocd.org/c/openocd/+/9973\nthe `program` script finally works.","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"fb1e5ec41a6fb9e96fc8f1a7a231a4031ec323da","unresolved":true,"context_lines":[{"line_number":475,"context_line":"\t\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":476,"context_line":"\t\t}"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"\t\treturn callback(c, 0, (c-\u003enum_sectors \u003d\u003d 0) ? 0 : c-\u003enum_sectors - 1);"},{"line_number":479,"context_line":"\t}"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"\t/* check whether it all fits in this bank */"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"ee9ab4b7_cbba58c8","line":478,"updated":"2025-12-12 12:38:36.000000000","message":"And here a standard image which begins at RRAM start returns ERROR_FLASH_OPER_UNSUPPORTED. Moreover no error logged:\n\n```\nopenocd -f board/nordic/nrf54l15-dk.cfg -c \u0027program rand_64k.bin\u0027\n...\n** Programming Started **\nembedded:startup.tcl:1952: Error: ** Programming Failed **\nTraceback (most recent call last):\n  File \"embedded:startup.tcl\", line 2017, in program\n    program_error {** Programming Failed **} 0\n  File \"embedded:startup.tcl\", line 1952, in program_error\n    error {** Programming Failed **}\n```","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"749c8f12871469aaba22e4209db8e9617e9f0229","unresolved":false,"context_lines":[{"line_number":475,"context_line":"\t\t\treturn ERROR_FLASH_DST_BREAKS_ALIGNMENT;"},{"line_number":476,"context_line":"\t\t}"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"\t\treturn callback(c, 0, (c-\u003enum_sectors \u003d\u003d 0) ? 0 : c-\u003enum_sectors - 1);"},{"line_number":479,"context_line":"\t}"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"\t/* check whether it all fits in this bank */"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"19f275c9_786132c5","line":478,"in_reply_to":"ee9ab4b7_cbba58c8","updated":"2026-10-16 07:31:02.000000000","message":"Done","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"}],"src/flash/nor/tcl.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"99cd7ccde60b81aa46f84e2d9b9d61e8783e3a3f","unresolved":true,"context_lines":[{"line_number":300,"context_line":"\t\treturn retval;"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"\tif (p-\u003enum_sectors \u003d\u003d 0) {"},{"line_number":303,"context_line":"\t\tLOG_INFO(\"bank has no sectors, ignoring specified sectors\");"},{"line_number":304,"context_line":"\t\tfirst \u003d 0;"},{"line_number":305,"context_line":"\t\tlast \u003d 0;"},{"line_number":306,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"1665529e_d41b1cf2","line":303,"updated":"2025-12-08 13:34:12.000000000","message":"Not an expert on flash code.\nTo prevent having this `LOG_INFO()` polluting the log at each erase command, why not extending the syntax of this command to accept the case no-parameters, but only for flash with no sectors?\nPlus also changing the code below to still accept the old syntax with parameters \u00270 0\u0027 or \u00270 last\u0027 in case of no sectors.","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"c96dcfa51db53c00d1a764c90d46d138549f0bf8","unresolved":true,"context_lines":[{"line_number":300,"context_line":"\t\treturn retval;"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"\tif (p-\u003enum_sectors \u003d\u003d 0) {"},{"line_number":303,"context_line":"\t\tLOG_INFO(\"bank has no sectors, ignoring specified sectors\");"},{"line_number":304,"context_line":"\t\tfirst \u003d 0;"},{"line_number":305,"context_line":"\t\tlast \u003d 0;"},{"line_number":306,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"36a9cdb3_924aa474","line":303,"in_reply_to":"0c720721_b2d1172c","updated":"2026-09-10 09:04:04.000000000","message":"\u003e Also, how we select flash/NVM banks is totally inconsistent and unintuitive with how we select targets. For flash we have to provide an index / the bank **number**\n\nYes, and the bank indexing proved to be a problem for some multi core CPUs\n(if you have to pair a flash bank with a corresponding CPU).\nUnfortunately the rewrite going to be quite large and painful.\n\nIf we decide to do so, we should also introduce `chip` level commands and data not to abuse banks for this class of commands (typically `mass_erase` erasing all banks) and to keep the driver simple without the complicated code to make the chip level on its own (typically probing is on the chip level).","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"749c8f12871469aaba22e4209db8e9617e9f0229","unresolved":false,"context_lines":[{"line_number":300,"context_line":"\t\treturn retval;"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"\tif (p-\u003enum_sectors \u003d\u003d 0) {"},{"line_number":303,"context_line":"\t\tLOG_INFO(\"bank has no sectors, ignoring specified sectors\");"},{"line_number":304,"context_line":"\t\tfirst \u003d 0;"},{"line_number":305,"context_line":"\t\tlast \u003d 0;"},{"line_number":306,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"88614bca_cbfe720f","line":303,"in_reply_to":"1325aaea_bb23ab5c","updated":"2026-10-16 07:31:02.000000000","message":"Done","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"faeffe89853ee0b20ccbbe08a3791bf07783a559","unresolved":true,"context_lines":[{"line_number":300,"context_line":"\t\treturn retval;"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"\tif (p-\u003enum_sectors \u003d\u003d 0) {"},{"line_number":303,"context_line":"\t\tLOG_INFO(\"bank has no sectors, ignoring specified sectors\");"},{"line_number":304,"context_line":"\t\tfirst \u003d 0;"},{"line_number":305,"context_line":"\t\tlast \u003d 0;"},{"line_number":306,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"0c720721_b2d1172c","line":303,"in_reply_to":"1665529e_d41b1cf2","updated":"2026-09-10 08:25:42.000000000","message":"I\u0027m also fine to remove the `LOG_INFO()` statement or use `LOG_DEBUG()`.\n\nIn my opinion we need a rewrite of the flash infrastructure, especially for the commands / user interface. I would rather spend my time on a rewrite instead of tinkering with the old code. Having an `erase_sector` command for sector-less flash or even RRAM/MRAM banks makes no sense at all. Also, how we select flash/NVM banks is totally inconsistent and unintuitive with how we select targets. For flash we have to provide an index / the bank **number**","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"78702f904e6698184727baceffbad350edcb2e54","unresolved":true,"context_lines":[{"line_number":300,"context_line":"\t\treturn retval;"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"\tif (p-\u003enum_sectors \u003d\u003d 0) {"},{"line_number":303,"context_line":"\t\tLOG_INFO(\"bank has no sectors, ignoring specified sectors\");"},{"line_number":304,"context_line":"\t\tfirst \u003d 0;"},{"line_number":305,"context_line":"\t\tlast \u003d 0;"},{"line_number":306,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"69c987c2_41d92627","line":303,"in_reply_to":"36a9cdb3_924aa474","updated":"2026-09-20 10:53:35.000000000","message":"BTW I realised that banks can be selected by the name as well.\nThis feature was added in commit 870b8c04557f0b7441cc502debaf537984d77e2a from 2009 but nobody updated the documentation. Maybe it\u0027s good time to do so...\nThe question is if we want to deprecate selection by index now?","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"64b8eacd625a4930674188fde2840c67e176b358","unresolved":true,"context_lines":[{"line_number":300,"context_line":"\t\treturn retval;"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"\tif (p-\u003enum_sectors \u003d\u003d 0) {"},{"line_number":303,"context_line":"\t\tLOG_INFO(\"bank has no sectors, ignoring specified sectors\");"},{"line_number":304,"context_line":"\t\tfirst \u003d 0;"},{"line_number":305,"context_line":"\t\tlast \u003d 0;"},{"line_number":306,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"1325aaea_bb23ab5c","line":303,"in_reply_to":"3b9f4956_ab86ae07","updated":"2026-09-22 21:59:03.000000000","message":"10026: doc: fix NOR and NAND flash bank referencing | https://review.openocd.org/c/openocd/+/10026","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"},{"author":{"_account_id":1000687,"name":"Tomas Vanek","display_name":"Tomas Vanek","email":"tomas.vanek.oocd@gmail.com","username":"vanekt"},"change_message_id":"7c009ac85230e7f7de0039ee8abcf971f305c574","unresolved":true,"context_lines":[{"line_number":300,"context_line":"\t\treturn retval;"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"\tif (p-\u003enum_sectors \u003d\u003d 0) {"},{"line_number":303,"context_line":"\t\tLOG_INFO(\"bank has no sectors, ignoring specified sectors\");"},{"line_number":304,"context_line":"\t\tfirst \u003d 0;"},{"line_number":305,"context_line":"\t\tlast \u003d 0;"},{"line_number":306,"context_line":"\t} else {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"3b9f4956_ab86ae07","line":303,"in_reply_to":"69c987c2_41d92627","updated":"2026-09-22 20:57:43.000000000","message":"Well, I missed commit 4b18ef15a36a (\"document new flash syntax\")\nBut it only describes the added *name* parameter to `flash bank` command:\n`may be used to reference the flash bank in other flash commands.`\nIMO very insufficient.\n\n\u003e The question is if we want to deprecate selection by index now?\n\nReplying to myself: it would be very annoying to write the full flash name in most of flash commands.","commit_id":"57cda36fd7051bd51cd0a65119072add36419a60"}]}
