- cortex_m3->auto_bp_type = 1;
- cortex_m3->fp_num_code = ((fpcr >> 8) & 0x70) | ((fpcr >> 4) & 0xF); /* bits
- *[14:12]
- *and [7:4]
- **/
- cortex_m3->fp_num_lit = (fpcr >> 8) & 0xF;
- cortex_m3->fp_code_available = cortex_m3->fp_num_code;
- cortex_m3->fp_comparator_list = calloc(
- cortex_m3->fp_num_code + cortex_m3->fp_num_lit,
- sizeof(struct cortex_m3_fp_comparator));
- cortex_m3->fpb_enabled = fpcr & 1;
- for (i = 0; i < cortex_m3->fp_num_code + cortex_m3->fp_num_lit; i++) {
- cortex_m3->fp_comparator_list[i].type =
- (i < cortex_m3->fp_num_code) ? FPCR_CODE : FPCR_LITERAL;
- cortex_m3->fp_comparator_list[i].fpcr_address = FP_COMP0 + 4 * i;
+ cortex_m->auto_bp_type = 1;
+ /* bits [14:12] and [7:4] */
+ cortex_m->fp_num_code = ((fpcr >> 8) & 0x70) | ((fpcr >> 4) & 0xF);
+ cortex_m->fp_num_lit = (fpcr >> 8) & 0xF;
+ cortex_m->fp_code_available = cortex_m->fp_num_code;
+ /* Detect flash patch revision, see RM DDI 0403E.b page C1-817.
+ Revision is zero base, fp_rev == 1 means Rev.2 ! */
+ cortex_m->fp_rev = (fpcr >> 28) & 0xf;
+ free(cortex_m->fp_comparator_list);
+ cortex_m->fp_comparator_list = calloc(
+ cortex_m->fp_num_code + cortex_m->fp_num_lit,
+ sizeof(struct cortex_m_fp_comparator));
+ cortex_m->fpb_enabled = fpcr & 1;
+ for (i = 0; i < cortex_m->fp_num_code + cortex_m->fp_num_lit; i++) {
+ cortex_m->fp_comparator_list[i].type =
+ (i < cortex_m->fp_num_code) ? FPCR_CODE : FPCR_LITERAL;
+ cortex_m->fp_comparator_list[i].fpcr_address = FP_COMP0 + 4 * i;