X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Fmips_ejtag.c;h=03a09529ce37a2f3486b79789d4470238fbc42ab;hp=d4c019fbe213a188ad04a1f29de0c1e5ba1ab006;hb=HEAD;hpb=02abae8cdf339d18b441ed152d8a8d17209341b1 diff --git a/src/target/mips_ejtag.c b/src/target/mips_ejtag.c index d4c019fbe2..389461cae6 100644 --- a/src/target/mips_ejtag.c +++ b/src/target/mips_ejtag.c @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + /*************************************************************************** * Copyright (C) 2008 by Spencer Oliver * * spen@spen-soft.co.uk * @@ -5,19 +7,6 @@ * Copyright (C) 2008 by David T.L. Wong * * * * Copyright (C) 2009 by David N. Claffey * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * ***************************************************************************/ #ifdef HAVE_CONFIG_H @@ -32,7 +21,7 @@ void mips_ejtag_set_instr(struct mips_ejtag *ejtag_info, uint32_t new_instr) { - assert(ejtag_info->tap != NULL); + assert(ejtag_info->tap); struct jtag_tap *tap = ejtag_info->tap; if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != new_instr) { @@ -58,7 +47,7 @@ int mips_ejtag_get_idcode(struct mips_ejtag *ejtag_info) return mips_ejtag_drscan_32(ejtag_info, &ejtag_info->idcode); } -static int mips_ejtag_get_impcode(struct mips_ejtag *ejtag_info) +int mips_ejtag_get_impcode(struct mips_ejtag *ejtag_info) { mips_ejtag_set_instr(ejtag_info, EJTAG_INST_IMPCODE); @@ -68,7 +57,7 @@ static int mips_ejtag_get_impcode(struct mips_ejtag *ejtag_info) void mips_ejtag_add_scan_96(struct mips_ejtag *ejtag_info, uint32_t ctrl, uint32_t data, uint8_t *in_scan_buf) { - assert(ejtag_info->tap != NULL); + assert(ejtag_info->tap); struct jtag_tap *tap = ejtag_info->tap; struct scan_field field; @@ -94,7 +83,7 @@ int mips_ejtag_drscan_64(struct mips_ejtag *ejtag_info, uint64_t *data) struct jtag_tap *tap; tap = ejtag_info->tap; - if (tap == NULL) + if (!tap) return ERROR_FAIL; struct scan_field field; uint8_t t[8] = { 0 }, r[8]; @@ -122,7 +111,7 @@ int mips_ejtag_drscan_64(struct mips_ejtag *ejtag_info, uint64_t *data) static void mips_ejtag_drscan_32_queued(struct mips_ejtag *ejtag_info, uint32_t data_out, uint8_t *data_in) { - assert(ejtag_info->tap != NULL); + assert(ejtag_info->tap); struct jtag_tap *tap = ejtag_info->tap; struct scan_field field; @@ -160,7 +149,7 @@ void mips_ejtag_drscan_32_out(struct mips_ejtag *ejtag_info, uint32_t data) int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint8_t *data) { - assert(ejtag_info->tap != NULL); + assert(ejtag_info->tap); struct jtag_tap *tap = ejtag_info->tap; struct scan_field field; @@ -181,7 +170,7 @@ int mips_ejtag_drscan_8(struct mips_ejtag *ejtag_info, uint8_t *data) void mips_ejtag_drscan_8_out(struct mips_ejtag *ejtag_info, uint8_t data) { - assert(ejtag_info->tap != NULL); + assert(ejtag_info->tap); struct jtag_tap *tap = ejtag_info->tap; struct scan_field field; @@ -270,9 +259,12 @@ int mips_ejtag_exit_debug(struct mips_ejtag *ejtag_info) { struct pa_list pracc_list = {.instr = MIPS32_DRET(ejtag_info->isa), .addr = 0}; struct pracc_queue_info ctx = {.max_code = 1, .pracc_list = &pracc_list, .code_count = 1, .store_count = 0}; + struct mips32_common *mips32 = container_of(ejtag_info, + struct mips32_common, ejtag_info); /* execute our dret instruction */ - ctx.retval = mips32_pracc_queue_exec(ejtag_info, &ctx, NULL, 0); /* shift out instr, omit last check */ + ctx.retval = mips32_pracc_queue_exec(ejtag_info, &ctx, NULL, + mips32->cpu_quirks & EJTAG_QUIRK_PAD_DRET); /* pic32mx workaround, false pending at low core clock */ jtag_add_sleep(1000); @@ -296,8 +288,8 @@ static void mips_ejtag_init_mmr(struct mips_ejtag *ejtag_info) ejtag_info->ejtag_dbm_offs = EJTAG_V20_DBM_OFFS; ejtag_info->ejtag_dbv_offs = EJTAG_V20_DBV_OFFS; - ejtag_info->ejtag_iba_step_size = EJTAG_V20_IBAn_STEP; - ejtag_info->ejtag_dba_step_size = EJTAG_V20_DBAn_STEP; + ejtag_info->ejtag_iba_step_size = EJTAG_V20_IBAN_STEP; + ejtag_info->ejtag_dba_step_size = EJTAG_V20_DBAN_STEP; } else { ejtag_info->ejtag_ibs_addr = EJTAG_V25_IBS; ejtag_info->ejtag_iba0_addr = EJTAG_V25_IBA0; @@ -312,8 +304,8 @@ static void mips_ejtag_init_mmr(struct mips_ejtag *ejtag_info) ejtag_info->ejtag_dbc_offs = EJTAG_V25_DBC_OFFS; ejtag_info->ejtag_dbv_offs = EJTAG_V25_DBV_OFFS; - ejtag_info->ejtag_iba_step_size = EJTAG_V25_IBAn_STEP; - ejtag_info->ejtag_dba_step_size = EJTAG_V25_DBAn_STEP; + ejtag_info->ejtag_iba_step_size = EJTAG_V25_IBAN_STEP; + ejtag_info->ejtag_dba_step_size = EJTAG_V25_DBAN_STEP; } } @@ -340,7 +332,7 @@ static void ejtag_v26_print_imp(struct mips_ejtag *ejtag_info) EJTAG_IMP_HAS(EJTAG_V26_IMP_DINT) ? " DINT" : ""); } -static void ejtag_main_print_imp(struct mips_ejtag *ejtag_info) +void ejtag_main_print_imp(struct mips_ejtag *ejtag_info) { LOG_DEBUG("EJTAG main: features:%s%s%s%s%s", EJTAG_IMP_HAS(EJTAG_IMP_ASID8) ? " ASID_8" : "", @@ -421,7 +413,7 @@ int mips_ejtag_init(struct mips_ejtag *ejtag_info) int mips_ejtag_fastdata_scan(struct mips_ejtag *ejtag_info, int write_t, uint32_t *data) { - assert(ejtag_info->tap != NULL); + assert(ejtag_info->tap); struct jtag_tap *tap = ejtag_info->tap; struct scan_field fields[2]; @@ -530,7 +522,7 @@ int mips64_ejtag_fastdata_scan(struct mips_ejtag *ejtag_info, bool write_t, uint struct jtag_tap *tap; tap = ejtag_info->tap; - assert(tap != NULL); + assert(tap); struct scan_field fields[2]; uint8_t spracc = 0;