)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"114538b79244e1565d980c69db26036cc045751e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"72a02f26_14b2143a","updated":"2021-08-22 23:12:18.000000000","message":"As a first result of splitting this patch, I have just pushed a long series of 25 patches.\nIt was an interesting activity that helped fixing other stuff around. Already 7 other patches has been merged as outcome of this work.\n\nIn the new 25 patches, the first 9 are generic; can be merged quickly. The other are specific for ADIv6 and are tagged with topic adiv6. https://review.openocd.org/q/topic:adiv6\nFor the specific ADIv6, I think we still need few iteration before the \"go\"!\nI have paid attention to keep the correct authorship. If you notice some error, please let me know.\n\nApart from split, the main difference with this patch are:\n1) no need to set a target mem-ap with -apbase as a trick to associate AP num to base address. Now base address is used directly as -ap-num, directly at target create. No need for extra mem-ap targets.\n2) drop the trick of using AP #0 as dap root! Full ROM table dump is done with \"dap info root\"\n3) no autodetection of DAP version ADIv5 or ADIv6. To be added in future.\n4) to split the patch, I had to introduce the flag -adiv6 early, but it will not work until few more patches get in, so wait and use it later at the end of the series.\nThe modified patch for \"Ampere QS|MQ config files\" should work.\n","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"}],"src/target/adi_v5_jtag.c":[{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"57a10245e05ba91f74bef7c531367be18b5f0b1f","unresolved":false,"context_lines":[{"line_number":703,"context_line":"\t\t/* Clear Sticky Error Bits */"},{"line_number":704,"context_line":"\t\tretval \u003d adi_jtag_scan_inout_check_u32(dap, JTAG_DP_DPACC,"},{"line_number":705,"context_line":"\t\t\t\tDP_CTRL_STAT, DPAP_WRITE,"},{"line_number":706,"context_line":"\t\t\t\tdap-\u003edp_ctrl_stat | SSTICKYERR, NULL, 0);"},{"line_number":707,"context_line":"\t\tif (retval !\u003d ERROR_OK)"},{"line_number":708,"context_line":"\t\t\tgoto done;"},{"line_number":709,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ceda9b01_e62f3f9b","line":706,"range":{"start_line":706,"start_character":4,"end_line":706,"end_character":45},"updated":"2021-03-10 21:49:09.000000000","message":"Sylvain - Is this the line you\u0027re referring to? We have a patch that clears SSTICKYORUN, but it hasn\u0027t been submitted yet. If you want, I can merge that patch into this code-review.","commit_id":"4823a9003100f61463f226dc1b18037db5e1206b"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8de8115f765e96732a9acef3b533f8ddaa59aa61","unresolved":false,"context_lines":[{"line_number":168,"context_line":"static void log_dap_cmd(struct adiv5_dap *dap, const char *header, struct dap_cmd *el)"},{"line_number":169,"context_line":"{"},{"line_number":170,"context_line":"#ifdef DEBUG_WAIT"},{"line_number":171,"context_line":"\tif (dap-\u003eadi_ap_reg_offset \u003d\u003d ADIV6_REG_DELTA) {"},{"line_number":172,"context_line":"\t\t/* We are connected to ADIv6 */"},{"line_number":173,"context_line":"\t\tLOG_DEBUG(\"%s: %2s %6s %5s 0x%08x 0x%08x %2s\", header,"},{"line_number":174,"context_line":"\t\t\tel-\u003einstr \u003d\u003d JTAG_DP_APACC ? \"AP\" : \"DP\","}],"source_content_type":"text/x-csrc","patch_set":8,"id":"4eceab4c_b2f41852","line":171,"updated":"2021-08-02 13:38:17.000000000","message":"it would get much more readable by writing\nif (dap-\u003eadi_version \u003d\u003d 6) {","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"2b879236f6fadfef8095dfaafe83782d2a215ec7","unresolved":false,"context_lines":[{"line_number":168,"context_line":"static void log_dap_cmd(struct adiv5_dap *dap, const char *header, struct dap_cmd *el)"},{"line_number":169,"context_line":"{"},{"line_number":170,"context_line":"#ifdef DEBUG_WAIT"},{"line_number":171,"context_line":"\tif (dap-\u003eadi_ap_reg_offset \u003d\u003d ADIV6_REG_DELTA) {"},{"line_number":172,"context_line":"\t\t/* We are connected to ADIv6 */"},{"line_number":173,"context_line":"\t\tLOG_DEBUG(\"%s: %2s %6s %5s 0x%08x 0x%08x %2s\", header,"},{"line_number":174,"context_line":"\t\t\tel-\u003einstr \u003d\u003d JTAG_DP_APACC ? \"AP\" : \"DP\","}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2ecb373e_eb32b1ee","line":171,"in_reply_to":"4eceab4c_b2f41852","updated":"2021-08-09 20:00:28.000000000","message":"Yes, agreed and I can make this change.","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8de8115f765e96732a9acef3b533f8ddaa59aa61","unresolved":false,"context_lines":[{"line_number":788,"context_line":""},{"line_number":789,"context_line":"\t\treturn jtag_dp_q_write(dap, DP_SELECT, (uint32_t)sel);"},{"line_number":790,"context_line":"\t} else {"},{"line_number":791,"context_line":"\t\tsel \u003d ap-\u003ebase_addr | (reg \u0026 0x0000FFF0);"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"\t\tif (sel \u003d\u003d (dap-\u003eselect \u0026 ~0xfull))"},{"line_number":794,"context_line":"\t\t\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"4eceab4c_529134fa","line":791,"updated":"2021-08-02 13:38:17.000000000","message":"reg should not be more than 0xffc, so no problems.\nBut here the correct mask should be:\n... | (reg \u0026 0x0ff0);\nDo you agree?","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"2b879236f6fadfef8095dfaafe83782d2a215ec7","unresolved":false,"context_lines":[{"line_number":788,"context_line":""},{"line_number":789,"context_line":"\t\treturn jtag_dp_q_write(dap, DP_SELECT, (uint32_t)sel);"},{"line_number":790,"context_line":"\t} else {"},{"line_number":791,"context_line":"\t\tsel \u003d ap-\u003ebase_addr | (reg \u0026 0x0000FFF0);"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"\t\tif (sel \u003d\u003d (dap-\u003eselect \u0026 ~0xfull))"},{"line_number":794,"context_line":"\t\t\treturn ERROR_OK;"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2ecb373e_8b2f6d85","line":791,"in_reply_to":"4eceab4c_529134fa","updated":"2021-08-09 20:00:28.000000000","message":"I think for this either mask value works. The 0xFFF0 mask was originally chosen since the Access Port has a register map size of 4KB (debug_interface_v6_0_architecture_specification_IHI0074C.pdf, section C1.3 AP Programmers\u0027 Model Summary). But yes a mask of 0x0FF0 covers the ADIv6 defined registers. I\u0027m fine using either mask value so if you prefer 0x0FF0, lets go with that.","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"}],"src/target/arm_adi_v5.c":[{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"57a10245e05ba91f74bef7c531367be18b5f0b1f","unresolved":false,"context_lines":[{"line_number":695,"context_line":"\t * is ignored in swd mode. It also powers-up system and debug domains in"},{"line_number":696,"context_line":"\t * both jtag and swd modes, if not done before."},{"line_number":697,"context_line":"\t */"},{"line_number":698,"context_line":"\tretval \u003d dap_queue_dp_write(dap, DP_CTRL_STAT, dap-\u003edp_ctrl_stat | SSTICKYERR);"},{"line_number":699,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":700,"context_line":"\t\treturn retval;"},{"line_number":701,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ceda9b01_661b4f83","line":698,"range":{"start_line":698,"start_character":1,"end_line":698,"end_character":80},"updated":"2021-03-10 21:49:09.000000000","message":"Sylvain - Is this the line you\u0027re referring to? We have a patch that clears SSTICKYORUN, but it hasn\u0027t been submitted yet. If you want, I can merge that patch into this code-review.","commit_id":"4823a9003100f61463f226dc1b18037db5e1206b"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af7831410b0f400e10ad97004541a557526af786","unresolved":false,"context_lines":[{"line_number":92,"context_line":"\t\t\ttarget_addr_t dbgbase, uint8_t type, target_addr_t *addr, int32_t *idx);"},{"line_number":93,"context_line":"static int adiv6_dap_get_debugbase(struct adiv5_ap *ap, target_addr_t *dbgbase, uint32_t *apid);"},{"line_number":94,"context_line":"static int adiv6_dap_info_command(struct command_invocation *cmd, struct adiv5_ap *ap);"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"/* ARM ADI Specification requires at least 10 bits used for TAR autoincrement  */"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"/*"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_a967d1b3","line":95,"updated":"2021-05-16 22:59:45.000000000","message":"by reordering the functions in the file you can avoid these prototypes.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1001726,"name":"Kevin Burke","email":"kevinb@os.amperecomputing.com","username":"kburke-ampere"},"change_message_id":"092d25dd2f512362ce15879ba06ceaac3cae52ab","unresolved":false,"context_lines":[{"line_number":92,"context_line":"\t\t\ttarget_addr_t dbgbase, uint8_t type, target_addr_t *addr, int32_t *idx);"},{"line_number":93,"context_line":"static int adiv6_dap_get_debugbase(struct adiv5_ap *ap, target_addr_t *dbgbase, uint32_t *apid);"},{"line_number":94,"context_line":"static int adiv6_dap_info_command(struct command_invocation *cmd, struct adiv5_ap *ap);"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"/* ARM ADI Specification requires at least 10 bits used for TAR autoincrement  */"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"/*"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_c4ea3c9c","line":95,"in_reply_to":"aedf27f1_a967d1b3","updated":"2021-05-24 14:15:55.000000000","message":"We chose to provide the prototypes instead of rearranging functions to limit the number of disjoint (non-contiguous) changes shown in the patch set. As it is now, all the new functions added for specific ADIv6 are located at the end of the file. we thought that would make it easier to understand the overall changes being proposed. We can certainly rearrange the functions if you think that would be better, just let us know what you think.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af7831410b0f400e10ad97004541a557526af786","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"\tif (csw !\u003d ap-\u003ecsw_value) {"},{"line_number":118,"context_line":"\t\t/* LOG_DEBUG(\"DAP: Set CSW %x\",csw); */"},{"line_number":119,"context_line":"\t\tint retval \u003d dap_queue_ap_write(ap, (MEM_AP_REG_CSW + ap-\u003edap-\u003eadi_ap_reg_offset), csw);"},{"line_number":120,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"},{"line_number":121,"context_line":"\t\t\tap-\u003ecsw_value \u003d 0;"},{"line_number":122,"context_line":"\t\t\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_c96495b1","line":119,"updated":"2021-05-16 22:59:45.000000000","message":"This becomes hard to read!\nThere are registers that need the offset and others that don\u0027t need, depending on their address.\nHere we use macros for register address to make life easier, but developers have to find the register address to decide to add or not the offset!\nCan  this decision be moved inside dap_queue_ap_read/write in arm_adi_v5.h?","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"380fb9520478b8b5dc7b6818ca6c5b804b492e23","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"\tif (csw !\u003d ap-\u003ecsw_value) {"},{"line_number":118,"context_line":"\t\t/* LOG_DEBUG(\"DAP: Set CSW %x\",csw); */"},{"line_number":119,"context_line":"\t\tint retval \u003d dap_queue_ap_write(ap, (MEM_AP_REG_CSW + ap-\u003edap-\u003eadi_ap_reg_offset), csw);"},{"line_number":120,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"},{"line_number":121,"context_line":"\t\t\tap-\u003ecsw_value \u003d 0;"},{"line_number":122,"context_line":"\t\t\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_290be1da","line":119,"in_reply_to":"aedf27f1_c96495b1","updated":"2021-05-17 06:34:30.000000000","message":"No, sorry, wrong suggestion, doesn\u0027t work!\nIt\u0027s not as easy as I though because in adiv6 we have other registers/functions in addresses 0-ff.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"b361e7e62066852dc674c6c41664976123780766","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"\tif (csw !\u003d ap-\u003ecsw_value) {"},{"line_number":118,"context_line":"\t\t/* LOG_DEBUG(\"DAP: Set CSW %x\",csw); */"},{"line_number":119,"context_line":"\t\tint retval \u003d dap_queue_ap_write(ap, (MEM_AP_REG_CSW + ap-\u003edap-\u003eadi_ap_reg_offset), csw);"},{"line_number":120,"context_line":"\t\tif (retval !\u003d ERROR_OK) {"},{"line_number":121,"context_line":"\t\t\tap-\u003ecsw_value \u003d 0;"},{"line_number":122,"context_line":"\t\t\treturn retval;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_98c81427","line":119,"in_reply_to":"aedf27f1_c96495b1","updated":"2021-05-27 23:22:07.000000000","message":"The AP reg macros now take a dap pointer as a parameter. That way developers don\u0027t have to look up the register address and the code is easier to read. Let us know if you prefer this option.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1001890,"name":"tbauer01","username":"tbauer01"},"change_message_id":"13849be184b9fc28cc69c4d1b6603e3b258f62bd","unresolved":false,"context_lines":[{"line_number":1568,"context_line":"\t\t\t\tJim_SetResultString(goi-\u003einterp, \"config -ap-num must precede -apbase!\", -1);"},{"line_number":1569,"context_line":"\t\t\t\treturn JIM_ERR;"},{"line_number":1570,"context_line":"\t\t\t}"},{"line_number":1571,"context_line":"\t\t\t(*dap_p)-\u003eap[*ap_num_p].base_addr \u003d ap_base;"},{"line_number":1572,"context_line":"\t\t} else {"},{"line_number":1573,"context_line":"\t\t\tif (goi-\u003eargc !\u003d 0) {"},{"line_number":1574,"context_line":"\t\t\t\tJim_WrongNumArgs(goi-\u003einterp, goi-\u003eargc, goi-\u003eargv, \"NO PARAMS\");"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_493e6528","line":1571,"updated":"2021-05-18 23:15:14.000000000","message":"It seems the base_addr passed in here did not persist into the AP in my testing. I was able to determine it is overwritten in the init sequence inside of arm_dap.c:57.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"b361e7e62066852dc674c6c41664976123780766","unresolved":false,"context_lines":[{"line_number":1568,"context_line":"\t\t\t\tJim_SetResultString(goi-\u003einterp, \"config -ap-num must precede -apbase!\", -1);"},{"line_number":1569,"context_line":"\t\t\t\treturn JIM_ERR;"},{"line_number":1570,"context_line":"\t\t\t}"},{"line_number":1571,"context_line":"\t\t\t(*dap_p)-\u003eap[*ap_num_p].base_addr \u003d ap_base;"},{"line_number":1572,"context_line":"\t\t} else {"},{"line_number":1573,"context_line":"\t\t\tif (goi-\u003eargc !\u003d 0) {"},{"line_number":1574,"context_line":"\t\t\t\tJim_WrongNumArgs(goi-\u003einterp, goi-\u003eargc, goi-\u003eargv, \"NO PARAMS\");"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_18d424be","line":1571,"in_reply_to":"aedf27f1_493e6528","updated":"2021-05-27 23:22:07.000000000","message":"Patchset 5 removes the dap_instance_init call in function dap_init_all. Let me know if this patchset doesn\u0027t resolve the issue.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":1928,"context_line":"\t\t\t\t/* See above comment for the MEM_AP_REG_TAR failed write case */"},{"line_number":1929,"context_line":"\t\t\t\tap-\u003etar_valid \u003d false;"},{"line_number":1930,"context_line":"\t\t\t}"},{"line_number":1931,"context_line":"\t\t} else"},{"line_number":1932,"context_line":"\t\t\tretval \u003d dap_queue_ap_write(ap, reg, value);"},{"line_number":1933,"context_line":"\t} else"},{"line_number":1934,"context_line":"\t\tretval \u003d dap_queue_ap_read(ap, reg, \u0026value);"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_8f2f7985","line":1931,"updated":"2021-07-14 09:32:52.000000000","message":"Use brackets for the single line","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":1928,"context_line":"\t\t\t\t/* See above comment for the MEM_AP_REG_TAR failed write case */"},{"line_number":1929,"context_line":"\t\t\t\tap-\u003etar_valid \u003d false;"},{"line_number":1930,"context_line":"\t\t\t}"},{"line_number":1931,"context_line":"\t\t} else"},{"line_number":1932,"context_line":"\t\t\tretval \u003d dap_queue_ap_write(ap, reg, value);"},{"line_number":1933,"context_line":"\t} else"},{"line_number":1934,"context_line":"\t\tretval \u003d dap_queue_ap_read(ap, reg, \u0026value);"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_cf610103","line":1931,"in_reply_to":"4eceab4c_8f2f7985","updated":"2021-07-24 04:04:46.000000000","message":"Done","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":1930,"context_line":"\t\t\t}"},{"line_number":1931,"context_line":"\t\t} else"},{"line_number":1932,"context_line":"\t\t\tretval \u003d dap_queue_ap_write(ap, reg, value);"},{"line_number":1933,"context_line":"\t} else"},{"line_number":1934,"context_line":"\t\tretval \u003d dap_queue_ap_read(ap, reg, \u0026value);"},{"line_number":1935,"context_line":""},{"line_number":1936,"context_line":"\tif (retval \u003d\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_af2cb590","line":1933,"updated":"2021-07-14 09:32:52.000000000","message":"Don\u0027t remove the brackets","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":1930,"context_line":"\t\t\t}"},{"line_number":1931,"context_line":"\t\t} else"},{"line_number":1932,"context_line":"\t\t\tretval \u003d dap_queue_ap_write(ap, reg, value);"},{"line_number":1933,"context_line":"\t} else"},{"line_number":1934,"context_line":"\t\tretval \u003d dap_queue_ap_read(ap, reg, \u0026value);"},{"line_number":1935,"context_line":""},{"line_number":1936,"context_line":"\tif (retval \u003d\u003d ERROR_OK)"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_ef5e3d48","line":1933,"in_reply_to":"4eceab4c_af2cb590","updated":"2021-07-24 04:04:46.000000000","message":"Done","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2080,"context_line":"\tint retval \u003d mem_ap_read_atomic_u32(ap, base_addr | 0xFCC, \u0026devtype);"},{"line_number":2081,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":2082,"context_line":"\t\treturn retval;"},{"line_number":2083,"context_line":"\tunsigned minor \u003d (devtype \u003e\u003e 4) \u0026 0x0f;"},{"line_number":2084,"context_line":"\tswitch (devtype \u0026 0x0f) {"},{"line_number":2085,"context_line":"\tcase 0:"},{"line_number":2086,"context_line":"\t\tmajor \u003d \"Miscellaneous\";"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_4f499169","line":2083,"updated":"2021-07-14 09:32:52.000000000","message":"Use \u0027unsigned int\u0027","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2080,"context_line":"\tint retval \u003d mem_ap_read_atomic_u32(ap, base_addr | 0xFCC, \u0026devtype);"},{"line_number":2081,"context_line":"\tif (retval !\u003d ERROR_OK)"},{"line_number":2082,"context_line":"\t\treturn retval;"},{"line_number":2083,"context_line":"\tunsigned minor \u003d (devtype \u003e\u003e 4) \u0026 0x0f;"},{"line_number":2084,"context_line":"\tswitch (devtype \u0026 0x0f) {"},{"line_number":2085,"context_line":"\tcase 0:"},{"line_number":2086,"context_line":"\t\tmajor \u003d \"Miscellaneous\";"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_8f5bf956","line":2083,"in_reply_to":"4eceab4c_4f499169","updated":"2021-07-24 04:04:46.000000000","message":"Done","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2225,"context_line":"\t\t\ttarget_addr_t *dbgbase, uint32_t *apid)"},{"line_number":2226,"context_line":"{"},{"line_number":2227,"context_line":"\tstruct adiv5_dap *dap \u003d ap-\u003edap;"},{"line_number":2228,"context_line":"\tint retval \u003d ERROR_OK;"},{"line_number":2229,"context_line":"\tuint32_t baseptr_upper, baseptr_lower;"},{"line_number":2230,"context_line":""},{"line_number":2231,"context_line":"\tbaseptr_upper \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_ef395dcc","line":2228,"updated":"2021-07-14 09:32:52.000000000","message":"retval will be overwritten in the following code?","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2225,"context_line":"\t\t\ttarget_addr_t *dbgbase, uint32_t *apid)"},{"line_number":2226,"context_line":"{"},{"line_number":2227,"context_line":"\tstruct adiv5_dap *dap \u003d ap-\u003edap;"},{"line_number":2228,"context_line":"\tint retval \u003d ERROR_OK;"},{"line_number":2229,"context_line":"\tuint32_t baseptr_upper, baseptr_lower;"},{"line_number":2230,"context_line":""},{"line_number":2231,"context_line":"\tbaseptr_upper \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_af58355a","line":2228,"in_reply_to":"4eceab4c_ef395dcc","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_get_debugbase\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2243,"context_line":"\t\t\tretval \u003d dap_dp_read_atomic(ap-\u003edap, DP_BASEPTR0, \u0026baseptr_lower);"},{"line_number":2244,"context_line":"\t\t}"},{"line_number":2245,"context_line":"\t} else {"},{"line_number":2246,"context_line":"\t\tif (ap-\u003ecfg_reg \u003d\u003d ADI_BAD_CFG)"},{"line_number":2247,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":2248,"context_line":"\t\telse if (is_64bit_ap(ap)) {"},{"line_number":2249,"context_line":"\t\t\t/* Read higher order 32-bits of base address */"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_af435542","line":2246,"updated":"2021-07-14 09:32:52.000000000","message":"Brackets..","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2243,"context_line":"\t\t\tretval \u003d dap_dp_read_atomic(ap-\u003edap, DP_BASEPTR0, \u0026baseptr_lower);"},{"line_number":2244,"context_line":"\t\t}"},{"line_number":2245,"context_line":"\t} else {"},{"line_number":2246,"context_line":"\t\tif (ap-\u003ecfg_reg \u003d\u003d ADI_BAD_CFG)"},{"line_number":2247,"context_line":"\t\t\treturn ERROR_FAIL;"},{"line_number":2248,"context_line":"\t\telse if (is_64bit_ap(ap)) {"},{"line_number":2249,"context_line":"\t\t\t/* Read higher order 32-bits of base address */"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_4f3511f3","line":2246,"in_reply_to":"4eceab4c_af435542","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_get_debugbase\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2250,"context_line":"\t\t\tretval \u003d dap_queue_ap_read(ap, MEM_AP_REG_BASE64(dap), \u0026baseptr_upper);"},{"line_number":2251,"context_line":"\t\t\tif (retval \u003d\u003d ERROR_OK)"},{"line_number":2252,"context_line":"\t\t\t\tretval \u003d dap_queue_ap_read(ap, MEM_AP_REG_BASE(dap), \u0026baseptr_lower);"},{"line_number":2253,"context_line":"\t\t} else"},{"line_number":2254,"context_line":"\t\t\tretval \u003d dap_queue_ap_read(ap, MEM_AP_REG_BASE(dap), \u0026baseptr_lower);"},{"line_number":2255,"context_line":"\t}"},{"line_number":2256,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_8f469953","line":2253,"updated":"2021-07-14 09:32:52.000000000","message":"Brackets..","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2250,"context_line":"\t\t\tretval \u003d dap_queue_ap_read(ap, MEM_AP_REG_BASE64(dap), \u0026baseptr_upper);"},{"line_number":2251,"context_line":"\t\t\tif (retval \u003d\u003d ERROR_OK)"},{"line_number":2252,"context_line":"\t\t\t\tretval \u003d dap_queue_ap_read(ap, MEM_AP_REG_BASE(dap), \u0026baseptr_lower);"},{"line_number":2253,"context_line":"\t\t} else"},{"line_number":2254,"context_line":"\t\t\tretval \u003d dap_queue_ap_read(ap, MEM_AP_REG_BASE(dap), \u0026baseptr_lower);"},{"line_number":2255,"context_line":"\t}"},{"line_number":2256,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_6f3a4de6","line":2253,"in_reply_to":"4eceab4c_8f469953","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_get_debugbase\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2271,"context_line":"static int adiv6_dap_lookup_cs_component(struct adiv5_ap *ap,"},{"line_number":2272,"context_line":"\t\t\ttarget_addr_t dbgbase, uint8_t type, target_addr_t *addr, int32_t *idx)"},{"line_number":2273,"context_line":"{"},{"line_number":2274,"context_line":"\tuint32_t devid_reg, cidr1, entry_offset \u003d 0,  devtype;"},{"line_number":2275,"context_line":"\ttarget_addr_t component_base, romentry;"},{"line_number":2276,"context_line":"\tuint32_t rom_entry_64bit, romentry_lower, romentry_upper;"},{"line_number":2277,"context_line":"\tuint16_t max_entry_offset;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_6f4ecd74","line":2274,"updated":"2021-07-14 09:32:52.000000000","message":"Stray whitespace","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2271,"context_line":"static int adiv6_dap_lookup_cs_component(struct adiv5_ap *ap,"},{"line_number":2272,"context_line":"\t\t\ttarget_addr_t dbgbase, uint8_t type, target_addr_t *addr, int32_t *idx)"},{"line_number":2273,"context_line":"{"},{"line_number":2274,"context_line":"\tuint32_t devid_reg, cidr1, entry_offset \u003d 0,  devtype;"},{"line_number":2275,"context_line":"\ttarget_addr_t component_base, romentry;"},{"line_number":2276,"context_line":"\tuint32_t rom_entry_64bit, romentry_lower, romentry_upper;"},{"line_number":2277,"context_line":"\tuint16_t max_entry_offset;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_0f3f09d5","line":2274,"in_reply_to":"4eceab4c_6f4ecd74","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_lookup_cs_component\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2273,"context_line":"{"},{"line_number":2274,"context_line":"\tuint32_t devid_reg, cidr1, entry_offset \u003d 0,  devtype;"},{"line_number":2275,"context_line":"\ttarget_addr_t component_base, romentry;"},{"line_number":2276,"context_line":"\tuint32_t rom_entry_64bit, romentry_lower, romentry_upper;"},{"line_number":2277,"context_line":"\tuint16_t max_entry_offset;"},{"line_number":2278,"context_line":"\tint retval;"},{"line_number":2279,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_0f53891b","line":2276,"updated":"2021-07-14 09:32:52.000000000","message":"Should be \u0027bool\u0027","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2273,"context_line":"{"},{"line_number":2274,"context_line":"\tuint32_t devid_reg, cidr1, entry_offset \u003d 0,  devtype;"},{"line_number":2275,"context_line":"\ttarget_addr_t component_base, romentry;"},{"line_number":2276,"context_line":"\tuint32_t rom_entry_64bit, romentry_lower, romentry_upper;"},{"line_number":2277,"context_line":"\tuint16_t max_entry_offset;"},{"line_number":2278,"context_line":"\tint retval;"},{"line_number":2279,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_2f44456e","line":2276,"in_reply_to":"4eceab4c_0f53891b","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_lookup_cs_component\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"\tint retval;"},{"line_number":2384,"context_line":"\tuint32_t memtype, devid, cidr1;"},{"line_number":2385,"context_line":"\tchar tabs[16] \u003d \"\";"},{"line_number":2386,"context_line":"\tint rom_entry_64bit;"},{"line_number":2387,"context_line":"\tuint16_t max_entry_offset, entry_offset;"},{"line_number":2388,"context_line":""},{"line_number":2389,"context_line":"\tif (depth)"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_2f58c534","line":2386,"updated":"2021-07-14 09:32:52.000000000","message":"Should be \u0027bool\u0027","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"\tint retval;"},{"line_number":2384,"context_line":"\tuint32_t memtype, devid, cidr1;"},{"line_number":2385,"context_line":"\tchar tabs[16] \u003d \"\";"},{"line_number":2386,"context_line":"\tint rom_entry_64bit;"},{"line_number":2387,"context_line":"\tuint16_t max_entry_offset, entry_offset;"},{"line_number":2388,"context_line":""},{"line_number":2389,"context_line":"\tif (depth)"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_cf282199","line":2386,"in_reply_to":"4eceab4c_2f58c534","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_rom_display_table\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001651,"name":"Florian Fainelli","email":"f.fainelli@gmail.com","username":"ffainelli"},"change_message_id":"7bf85b44ec5c09750d436905ad7871c5eb67a7c2","unresolved":false,"context_lines":[{"line_number":2406,"context_line":""},{"line_number":2407,"context_line":"\trom_entry_64bit \u003d devid \u0026 0x1;"},{"line_number":2408,"context_line":"\tif (((cidr1 \u0026 0xf0) \u003e\u003e 4) \u003d\u003d 9) /* is this a class 9 ROM table */"},{"line_number":2409,"context_line":"\t\tmax_entry_offset \u003d 0x800;"},{"line_number":2410,"context_line":"\telse"},{"line_number":2411,"context_line":"\t\tmax_entry_offset \u003d 0xF00; /* class 1 entry maximum count */"},{"line_number":2412,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_6c825bcf","line":2409,"updated":"2021-07-08 16:23:52.000000000","message":"The ADIv6 spec that I am reading says that there can be up to 512 ROM entries which is supported by the fact that registers start at 0x7fc and the reserved area starts at 0x800. Am I missing something here?","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"134dfb09ae52161f551679388ebd3870f04c1c4e","unresolved":false,"context_lines":[{"line_number":2406,"context_line":""},{"line_number":2407,"context_line":"\trom_entry_64bit \u003d devid \u0026 0x1;"},{"line_number":2408,"context_line":"\tif (((cidr1 \u0026 0xf0) \u003e\u003e 4) \u003d\u003d 9) /* is this a class 9 ROM table */"},{"line_number":2409,"context_line":"\t\tmax_entry_offset \u003d 0x800;"},{"line_number":2410,"context_line":"\telse"},{"line_number":2411,"context_line":"\t\tmax_entry_offset \u003d 0xF00; /* class 1 entry maximum count */"},{"line_number":2412,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_4c643f46","line":2409,"in_reply_to":"4eceab4c_6c825bcf","updated":"2021-07-08 19:32:00.000000000","message":"For Class 0x9 ROM tables a maximum of 512 entries are supported. Each entry is four bytes for a maximum entry offset of 2048 (0x800) bytes. \"max_entry_offset\" refers to number of bytes, not number of register table entries. The ARM ADIv6 spec Rev C, section \"D4.2.1 Class 0x9 ROM Table Layout\" documents the layout. ROM table entries start at offset 0x000 in a single 4KB memory block. If I haven\u0027t addressed your concern let me know. I\u0027ll need more clarification about your concern.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"\t\tmax_entry_offset \u003d 0xF00; /* class 1 entry maximum count */"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"\t/* Read ROM table entries from base address until we get 0x00000000 or reach the reserved area */"},{"line_number":2414,"context_line":"\tfor (entry_offset \u003d 0; entry_offset \u003c max_entry_offset; entry_offset +\u003d 4) {"},{"line_number":2415,"context_line":"\t\ttarget_addr_t romentry;"},{"line_number":2416,"context_line":"\t\tuint32_t romentry_upper \u003d 0;"},{"line_number":2417,"context_line":"\t\tuint32_t romentry_lower;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_cf3ca1bf","line":2414,"updated":"2021-07-14 09:32:52.000000000","message":"Declare entry_offset here","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"\t\tmax_entry_offset \u003d 0xF00; /* class 1 entry maximum count */"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"\t/* Read ROM table entries from base address until we get 0x00000000 or reach the reserved area */"},{"line_number":2414,"context_line":"\tfor (entry_offset \u003d 0; entry_offset \u003c max_entry_offset; entry_offset +\u003d 4) {"},{"line_number":2415,"context_line":"\t\ttarget_addr_t romentry;"},{"line_number":2416,"context_line":"\t\tuint32_t romentry_upper \u003d 0;"},{"line_number":2417,"context_line":"\t\tuint32_t romentry_lower;"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_ef25ddbd","line":2414,"in_reply_to":"4eceab4c_cf3ca1bf","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_rom_display_table\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2476,"context_line":"\tif (depth)"},{"line_number":2477,"context_line":"\t\tsnprintf(tabs, sizeof(tabs), \"[L%02d] \", depth);"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"\ttarget_addr_t base_addr \u003d dbgbase \u0026 0xFFFFFFFFFFFFF000ull;"},{"line_number":2480,"context_line":"\tcommand_print(cmd, \"\\t\\tComponent base address 0x%16.16\" PRIx64, base_addr);"},{"line_number":2481,"context_line":""},{"line_number":2482,"context_line":"\tretval \u003d dap_read_part_id(ap, base_addr, \u0026cid, \u0026pid);"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_4f70b1a3","line":2479,"updated":"2021-07-14 09:32:52.000000000","message":"Could be \u0027const\u0027","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2476,"context_line":"\tif (depth)"},{"line_number":2477,"context_line":"\t\tsnprintf(tabs, sizeof(tabs), \"[L%02d] \", depth);"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"\ttarget_addr_t base_addr \u003d dbgbase \u0026 0xFFFFFFFFFFFFF000ull;"},{"line_number":2480,"context_line":"\tcommand_print(cmd, \"\\t\\tComponent base address 0x%16.16\" PRIx64, base_addr);"},{"line_number":2481,"context_line":""},{"line_number":2482,"context_line":"\tretval \u003d dap_read_part_id(ap, base_addr, \u0026cid, \u0026pid);"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_8f321905","line":2479,"in_reply_to":"4eceab4c_4f70b1a3","updated":"2021-07-24 04:04:46.000000000","message":"Done. This routine was consolidated into \"dap_rom_display\" for patchset 7.","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"63f60eb6309ac9b997531a6924ced0e699405827","unresolved":false,"context_lines":[{"line_number":2566,"context_line":"\tint retval;"},{"line_number":2567,"context_line":"\tuint32_t class \u003d 0;"},{"line_number":2568,"context_line":"\tint archid_index;"},{"line_number":2569,"context_line":"\tint rom_entry_64bit;"},{"line_number":2570,"context_line":""},{"line_number":2571,"context_line":"\tretval \u003d ERROR_OK;"},{"line_number":2572,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_6f756d92","line":2569,"updated":"2021-07-14 09:32:52.000000000","message":"Declare below and use \u0027unsigned int\u0027 or \u0027bool\u0027","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"0e98ca12d37bc2784f1f1613012d5b9efebd2785","unresolved":false,"context_lines":[{"line_number":2566,"context_line":"\tint retval;"},{"line_number":2567,"context_line":"\tuint32_t class \u003d 0;"},{"line_number":2568,"context_line":"\tint archid_index;"},{"line_number":2569,"context_line":"\tint rom_entry_64bit;"},{"line_number":2570,"context_line":""},{"line_number":2571,"context_line":"\tretval \u003d ERROR_OK;"},{"line_number":2572,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":6,"id":"4eceab4c_af2fd59b","line":2569,"in_reply_to":"4eceab4c_6f756d92","updated":"2021-07-24 04:04:46.000000000","message":"Done","commit_id":"ea1f4f2c0f1499ca53c55878f2a34d48750bb37d"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"bcac4b9e055849c843f42dcc5efd1f14b3d7546a","unresolved":false,"context_lines":[{"line_number":1630,"context_line":"\t\tuint32_t romentry_upper \u003d 0;"},{"line_number":1631,"context_line":"\t\tuint32_t romentry_lower;"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"\t\tif (rom_entry_64bit) {"},{"line_number":1634,"context_line":"\t\t\tretval \u003d mem_ap_read_atomic_u32(ap, base_addr | entry_offset, \u0026romentry_upper);"},{"line_number":1635,"context_line":"\t\t\tif (retval !\u003d ERROR_OK)"},{"line_number":1636,"context_line":"\t\t\t\treturn retval;"},{"line_number":1637,"context_line":"\t\t\tretval \u003d mem_ap_read_atomic_u32(ap, base_addr | (entry_offset + 4), \u0026romentry_lower);"},{"line_number":1638,"context_line":"\t\t\tif (retval !\u003d ERROR_OK)"},{"line_number":1639,"context_line":"\t\t\t\treturn retval;"},{"line_number":1640,"context_line":"\t\t\tromentry \u003d (((target_addr_t)romentry_upper) \u003c\u003c 32) | romentry_lower;"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2ecb373e_8efe9baa","line":1637,"range":{"start_line":1633,"start_character":0,"end_line":1637,"end_character":88},"updated":"2021-08-15 21:04:51.000000000","message":"Have you tested this case of 64bit ROM entry?\nUnfortunately my ADIv6 device has only 32bit ROMs.\n\nIn ADIv6 the chapter about this 64 bits ROM entry doesn\u0027t mention how lower and higher parts are stored.\nBut both ADIv5 and ADIv6 specify that addresses are in little-endian, so I would have coded this by reading romentry_lower at offset N and then romentry_upper at offset N+4.\n\nChecking as example the use of OpenOCD macro CPUV8_DBG_BVR_BASE that is 64 bit breakpoint-value register for ARMv8. The ARM documentation just say it\u0027s a 64 bit, no hints about the memory storage. OpenOCD access it in little-endian, as I would have done above.","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"c7cf64b3223deb334772a34c477902eb4ffde893","unresolved":false,"context_lines":[{"line_number":1830,"context_line":"\t\t\tretval \u003d dap_run(ap-\u003edap);"},{"line_number":1831,"context_line":"\t\t\tif (retval !\u003d ERROR_OK)"},{"line_number":1832,"context_line":"\t\t\t\treturn retval;"},{"line_number":1833,"context_line":"\t\t\tif (is_64bit_ap(ap)) {"},{"line_number":1834,"context_line":"\t\t\t\t/* 64-bit addressable APB with 32-bit ROM entry, sign extend */"},{"line_number":1835,"context_line":"\t\t\t\tentry \u003d (target_addr_t)((int32_t)entry_lower);"},{"line_number":1836,"context_line":"\t\t\t\tcommand_print(cmd, \"ROM entry[0x%x]: 0x%16.16\" PRIx64,"},{"line_number":1837,"context_line":"\t\t\t\t\t\tentry_offset, entry);"},{"line_number":1838,"context_line":"\t\t\t} else {"},{"line_number":1839,"context_line":"\t\t\t\t/* 32-bit addressable APB with 32-bit ROM entry, no sign extension */"},{"line_number":1840,"context_line":"\t\t\t\tentry \u003d (target_addr_t)((uint32_t)entry_lower);"},{"line_number":1841,"context_line":"\t\t\t\tcommand_print(cmd, \"ROM entry[0x%x]: 0x%8.8\" PRIx32,"},{"line_number":1842,"context_line":"\t\t\t\t\t\tentry_offset, entry_lower);"},{"line_number":1843,"context_line":"\t\t\t}"},{"line_number":1844,"context_line":"\t\t}"},{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"\t\tif (entry \u003d\u003d 0)"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"4eceab4c_d228c498","line":1843,"range":{"start_line":1833,"start_character":0,"end_line":1843,"end_character":4},"updated":"2021-08-04 12:16:10.000000000","message":"I think this is incorrect. Check http://openocd.zylin.com/6410/\nThe offset value in ROM is a signed value.\nWhen rom_entry_64bit is true, it\u0027s not important to sign extend the 64 bit offset, because the arithmetic at line 1849 is limited at 64 bits.\nBut here we don\u0027t care about is_64bit_ap(ap)! The 32 bits offset has to always be signed extended!","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"2b879236f6fadfef8095dfaafe83782d2a215ec7","unresolved":false,"context_lines":[{"line_number":1830,"context_line":"\t\t\tretval \u003d dap_run(ap-\u003edap);"},{"line_number":1831,"context_line":"\t\t\tif (retval !\u003d ERROR_OK)"},{"line_number":1832,"context_line":"\t\t\t\treturn retval;"},{"line_number":1833,"context_line":"\t\t\tif (is_64bit_ap(ap)) {"},{"line_number":1834,"context_line":"\t\t\t\t/* 64-bit addressable APB with 32-bit ROM entry, sign extend */"},{"line_number":1835,"context_line":"\t\t\t\tentry \u003d (target_addr_t)((int32_t)entry_lower);"},{"line_number":1836,"context_line":"\t\t\t\tcommand_print(cmd, \"ROM entry[0x%x]: 0x%16.16\" PRIx64,"},{"line_number":1837,"context_line":"\t\t\t\t\t\tentry_offset, entry);"},{"line_number":1838,"context_line":"\t\t\t} else {"},{"line_number":1839,"context_line":"\t\t\t\t/* 32-bit addressable APB with 32-bit ROM entry, no sign extension */"},{"line_number":1840,"context_line":"\t\t\t\tentry \u003d (target_addr_t)((uint32_t)entry_lower);"},{"line_number":1841,"context_line":"\t\t\t\tcommand_print(cmd, \"ROM entry[0x%x]: 0x%8.8\" PRIx32,"},{"line_number":1842,"context_line":"\t\t\t\t\t\tentry_offset, entry_lower);"},{"line_number":1843,"context_line":"\t\t\t}"},{"line_number":1844,"context_line":"\t\t}"},{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"\t\tif (entry \u003d\u003d 0)"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2ecb373e_6b4ec174","line":1843,"range":{"start_line":1833,"start_character":0,"end_line":1843,"end_character":4},"in_reply_to":"4eceab4c_d228c498","updated":"2021-08-09 20:00:28.000000000","message":"Good catch. I\u0027m pretty sure you\u0027re right on this and I\u0027ll address it on the next patch update.","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"}],"src/target/arm_adi_v5.h":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af7831410b0f400e10ad97004541a557526af786","unresolved":false,"context_lines":[{"line_number":461,"context_line":"static inline int dap_queue_ap_read(struct adiv5_ap *ap,"},{"line_number":462,"context_line":"\t\tunsigned reg, uint32_t *data)"},{"line_number":463,"context_line":"{"},{"line_number":464,"context_line":"\tassert(ap-\u003edap-\u003eops !\u003d NULL);"},{"line_number":465,"context_line":"\treturn ap-\u003edap-\u003eops-\u003equeue_ap_read(ap, reg, data);"},{"line_number":466,"context_line":"}"},{"line_number":467,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_6901e9b8","line":464,"updated":"2021-05-16 22:59:45.000000000","message":"Proposal, described in http://openocd.zylin.com/#/c/6077/4/src/target/arm_adi_v5.c@119\n\nif (reg \u003c\u003d AP_REG_IDR \u0026\u0026 ap-\u003edap-\u003eadi_version \u003d\u003d 6)\n  reg +\u003d ADIV6_REG_DELTA;","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"8de8115f765e96732a9acef3b533f8ddaa59aa61","unresolved":false,"context_lines":[{"line_number":95,"context_line":"#define DP_SELECT_APSEL 0xFF000000"},{"line_number":96,"context_line":"#define DP_SELECT_APBANK 0x000000F0"},{"line_number":97,"context_line":"#define DP_SELECT_DPBANK 0x0000000F"},{"line_number":98,"context_line":"#define DP_SELECT_INVALID 0x00FFFF00 /* Reserved bits one */"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"#define DP_APSEL_MAX        (255)"},{"line_number":101,"context_line":"#define DP_APSEL_INVALID    (-1)"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"4eceab4c_7296b0f5","line":98,"updated":"2021-08-02 13:38:17.000000000","message":"The comment shows this macro is valid for ADIv5 only, as there are no reserved bits in SELECT on ADIv6.\nHow to safely handle it on ADIv6? Do we need an extra\nbool is_select_valid;\n?","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"2b879236f6fadfef8095dfaafe83782d2a215ec7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"#define DP_SELECT_APSEL 0xFF000000"},{"line_number":96,"context_line":"#define DP_SELECT_APBANK 0x000000F0"},{"line_number":97,"context_line":"#define DP_SELECT_DPBANK 0x0000000F"},{"line_number":98,"context_line":"#define DP_SELECT_INVALID 0x00FFFF00 /* Reserved bits one */"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"#define DP_APSEL_MAX        (255)"},{"line_number":101,"context_line":"#define DP_APSEL_INVALID    (-1)"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"2ecb373e_ab2ca990","line":98,"in_reply_to":"4eceab4c_7296b0f5","updated":"2021-08-09 20:00:28.000000000","message":"Good point and a separate \"is_select_valid\" flag is probably necessary for ADIv6. I\u0027ll add the flag on the next patch update.","commit_id":"f42d1113dde9a17d3fc103ff5dfb64886f32b7a0"}],"src/target/arm_dap.c":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"af7831410b0f400e10ad97004541a557526af786","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\t\t} else"},{"line_number":133,"context_line":"\t\t\tdap-\u003eops \u003d \u0026jtag_dp_ops;"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"\t\tdap_instance_init(dap);"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"\t\tif (dap-\u003eadi_version \u003d\u003d 6) {"},{"line_number":138,"context_line":"\t\t\tdap-\u003eadi_ap_reg_offset \u003d ADIV6_REG_DELTA;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_096b7d83","line":135,"updated":"2021-05-16 22:59:45.000000000","message":"I don\u0027t understand the reason for calling dap_instance_init() here? It is already called by dap_configure(), which is called by dap_create().\nBy running it again here, you override the csw initialization done in the config file, then you have to add http://openocd.zylin.com/6078/ to avoid the override.\nIs it possible to remove this call and thus abandon 6078?","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1001890,"name":"tbauer01","username":"tbauer01"},"change_message_id":"13849be184b9fc28cc69c4d1b6603e3b258f62bd","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\t\t} else"},{"line_number":133,"context_line":"\t\t\tdap-\u003eops \u003d \u0026jtag_dp_ops;"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"\t\tdap_instance_init(dap);"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"\t\tif (dap-\u003eadi_version \u003d\u003d 6) {"},{"line_number":138,"context_line":"\t\t\tdap-\u003eadi_ap_reg_offset \u003d ADIV6_REG_DELTA;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_e942b9b1","line":135,"in_reply_to":"aedf27f1_096b7d83","updated":"2021-05-18 23:15:14.000000000","message":"I am also curious about this. I have found this also overrides the base_addr that was configured earlier. For base_addr of the ap to persist I think there either needs to be something done about this call or a work around similar to http://openocd.zylin.com/#/c/6078/ is required. (see my related comment in arm_adi_v5.c)","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"b361e7e62066852dc674c6c41664976123780766","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\t\t} else"},{"line_number":133,"context_line":"\t\t\tdap-\u003eops \u003d \u0026jtag_dp_ops;"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"\t\tdap_instance_init(dap);"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"\t\tif (dap-\u003eadi_version \u003d\u003d 6) {"},{"line_number":138,"context_line":"\t\t\tdap-\u003eadi_ap_reg_offset \u003d ADIV6_REG_DELTA;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_38cd6835","line":135,"in_reply_to":"aedf27f1_096b7d83","updated":"2021-05-27 23:22:07.000000000","message":"You are correct, dap_instance_init() does not need to be called here. Patchset 5 removes this function call. Yes, 6078 can be abandoned.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1001661,"name":"Daniel Goehring","email":"dgoehrin@os.amperecomputing.com","username":"dgoehrin"},"change_message_id":"b361e7e62066852dc674c6c41664976123780766","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\t\t} else"},{"line_number":133,"context_line":"\t\t\tdap-\u003eops \u003d \u0026jtag_dp_ops;"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"\t\tdap_instance_init(dap);"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"\t\tif (dap-\u003eadi_version \u003d\u003d 6) {"},{"line_number":138,"context_line":"\t\t\tdap-\u003eadi_ap_reg_offset \u003d ADIV6_REG_DELTA;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"aedf27f1_58d2acd6","line":135,"in_reply_to":"aedf27f1_e942b9b1","updated":"2021-05-27 23:22:07.000000000","message":"Yes, dap_instanct_init() does not need to be called. It\u0027s been removed from patchset #5. Thanks for the comment.","commit_id":"35029ee23e61b36a76ef3aceb055b73737f68096"},{"author":{"_account_id":1000863,"name":"Tarek BOCHKATI","email":"tarek.bouchkati@gmail.com","username":"BouchkatiTarek"},"change_message_id":"c8426de4618a9c70708162a0cf54fc0e1379eaec","unresolved":false,"context_lines":[{"line_number":242,"context_line":"static const struct jim_nvp nvp_config_opts[] \u003d {"},{"line_number":243,"context_line":"\t{ .name \u003d \"-chain-position\",   .value \u003d CFG_CHAIN_POSITION },"},{"line_number":244,"context_line":"\t{ .name \u003d \"-ignore-syspwrupack\", .value \u003d CFG_IGNORE_SYSPWRUPACK },"},{"line_number":245,"context_line":"\t{ .name \u003d \"-adiv6\",   .value \u003d CFG_ADIV6 },"},{"line_number":246,"context_line":"\t{ .name \u003d \"-adiv5\",   .value \u003d CFG_ADIV5 },"},{"line_number":247,"context_line":"\t{ .name \u003d NULL, .value \u003d -1 }"},{"line_number":248,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"4eceab4c_3221089b","line":245,"in_reply_to":"","updated":"2021-07-24 12:34:08.000000000","message":"IMO, these options are worth being documented in the doc/openocd.texi","commit_id":"a092d879a54ad1c6b32da9de3a01eb67a8eeb7dd"}]}
