X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Ftarget%2Farmv7a.c;h=8219932a22a74a885091b7463f0bd769028076ce;hb=cd440bd32a120a9b4c2d703d3d16dd52f16edab2;hp=de8a8cbbcbfe3c0a120384b48182a58881cb2373;hpb=74592a8435d0044bbf34a65765bca44166e61921;p=fw%2Fopenocd diff --git a/src/target/armv7a.c b/src/target/armv7a.c index de8a8cbbc..8219932a2 100644 --- a/src/target/armv7a.c +++ b/src/target/armv7a.c @@ -647,15 +647,28 @@ int armv7a_identify_cache(struct target *target) int retval = ERROR_FAIL; struct armv7a_common *armv7a = target_to_armv7a(target); struct arm_dpm *dpm = armv7a->arm.dpm; - uint32_t cache_selected, clidr; + uint32_t cache_selected, clidr, ctr; uint32_t cache_i_reg, cache_d_reg; struct armv7a_cache_common *cache = &(armv7a->armv7a_mmu.armv7a_cache); if (!armv7a->is_armv7r) armv7a_read_ttbcr(target); retval = dpm->prepare(dpm); + if (retval != ERROR_OK) + goto done; + /* retrieve CTR + * mrc p15, 0, r0, c0, c0, 1 @ read ctr */ + retval = dpm->instr_read_data_r0(dpm, + ARMV4_5_MRC(15, 0, 0, 0, 0, 1), + &ctr); if (retval != ERROR_OK) goto done; + + cache->iminline = 4UL << (ctr & 0xf); + cache->dminline = 4UL << ((ctr & 0xf0000) >> 16); + LOG_DEBUG("ctr %" PRIx32 " ctr.iminline %" PRId32 " ctr.dminline %" PRId32, + ctr, cache->iminline, cache->dminline); + /* retrieve CLIDR * mrc p15, 1, r0, c0, c0, 1 @ read clidr */ retval = dpm->instr_read_data_r0(dpm, @@ -806,6 +819,7 @@ int armv7a_init_arch_info(struct target *target, struct armv7a_common *armv7a) armv7a->armv7a_mmu.armv7a_cache.ctype = -1; armv7a->armv7a_mmu.armv7a_cache.flush_all_data_cache = NULL; armv7a->armv7a_mmu.armv7a_cache.display_cache_info = NULL; + armv7a->armv7a_mmu.armv7a_cache.auto_cache_enabled = 1; return ERROR_OK; } @@ -869,7 +883,6 @@ const struct command_registration l2x_cache_command_handlers[] = { COMMAND_REGISTRATION_DONE }; - const struct command_registration armv7a_command_handlers[] = { { .chain = dap_command_handlers, @@ -877,5 +890,8 @@ const struct command_registration armv7a_command_handlers[] = { { .chain = l2x_cache_command_handlers, }, + { + .chain = arm7a_cache_command_handlers, + }, COMMAND_REGISTRATION_DONE };