Skip to content

Commit 81ee3bb

Browse files
committed
Merge branch 'fix/apptrace_crc_calculation' into 'master'
fix(apptrace): calculate crc16 of the current block before swap See merge request espressif/esp-idf!39815
2 parents d099224 + 1615270 commit 81ee3bb

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

components/app_trace/app_trace_membufs_proto.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ static esp_err_t esp_apptrace_membufs_swap(esp_apptrace_membufs_proto_data_t *pr
9292
// switch to new block
9393
proto->state.in_block++;
9494

95-
proto->hw->swap(new_block_num);
95+
proto->hw->swap(new_block_num, proto->state.markers[prev_block_num]);
9696

9797
// handle data from host
9898
esp_hostdata_hdr_t *hdr = (esp_hostdata_hdr_t *)proto->blocks[new_block_num].start;

components/app_trace/port/riscv/port.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ static uint8_t *esp_apptrace_riscv_down_buffer_get(esp_apptrace_riscv_data_t *hw
5050
static esp_err_t esp_apptrace_riscv_down_buffer_put(esp_apptrace_riscv_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
5151
static bool esp_apptrace_riscv_host_is_connected(esp_apptrace_riscv_data_t *hw_data);
5252
static esp_err_t esp_apptrace_riscv_buffer_swap_start(uint32_t curr_block_id);
53-
static esp_err_t esp_apptrace_riscv_buffer_swap(uint32_t new_block_id);
53+
static esp_err_t esp_apptrace_riscv_buffer_swap(uint32_t new_block_id, uint32_t prev_block_len);
5454
static esp_err_t esp_apptrace_riscv_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len);
5555
static bool esp_apptrace_riscv_host_data_pending(void);
5656

@@ -353,7 +353,7 @@ static esp_err_t esp_apptrace_riscv_buffer_swap_end(uint32_t new_block_id, uint3
353353
return ESP_OK;
354354
}
355355

356-
static esp_err_t esp_apptrace_riscv_buffer_swap(uint32_t new_block_id)
356+
static esp_err_t esp_apptrace_riscv_buffer_swap(uint32_t new_block_id, uint32_t prev_block_len)
357357
{
358358
/* do nothing */
359359
return ESP_OK;

components/app_trace/port/xtensa/port.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ static uint8_t *esp_apptrace_trax_down_buffer_get(esp_apptrace_trax_data_t *hw_d
208208
static esp_err_t esp_apptrace_trax_down_buffer_put(esp_apptrace_trax_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
209209
static bool esp_apptrace_trax_host_is_connected(esp_apptrace_trax_data_t *hw_data);
210210
static esp_err_t esp_apptrace_trax_buffer_swap_start(uint32_t curr_block_id);
211-
static esp_err_t esp_apptrace_trax_buffer_swap(uint32_t new_block_id);
211+
static esp_err_t esp_apptrace_trax_buffer_swap(uint32_t new_block_id, uint32_t prev_block_len);
212212
static esp_err_t esp_apptrace_trax_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len);
213213
static bool esp_apptrace_trax_host_data_pending(void);
214214

@@ -526,21 +526,21 @@ static esp_err_t esp_apptrace_trax_buffer_swap_end(uint32_t new_block_id, uint32
526526
uint32_t ctrl_reg = eri_read(ESP_APPTRACE_TRAX_CTRL_REG);
527527
uint32_t host_connected = ESP_APPTRACE_TRAX_HOST_CONNECT & ctrl_reg;
528528

529-
/* calculate CRC16 of the already switched block */
530-
if (prev_block_len > 0) {
531-
const uint8_t *prev_block_start = s_trax_blocks[!((new_block_id % 2))];
532-
uint16_t crc16 = esp_rom_crc16_le(0, prev_block_start, prev_block_len);
533-
eri_write(ESP_APPTRACE_TRAX_CRC16_REG, crc16 | ESP_APPTRACE_CRC_INDICATOR);
534-
ESP_APPTRACE_LOGD("CRC16:%x %d @%x", crc16, prev_block_len, prev_block_start);
535-
}
536529
eri_write(ESP_APPTRACE_TRAX_CTRL_REG, ESP_APPTRACE_TRAX_BLOCK_ID(new_block_id) |
537530
host_connected | ESP_APPTRACE_TRAX_BLOCK_LEN(prev_block_len));
538531
esp_apptrace_trax_buffer_swap_unlock();
539532
return ESP_OK;
540533
}
541534

542-
static esp_err_t esp_apptrace_trax_buffer_swap(uint32_t new_block_id)
535+
static esp_err_t esp_apptrace_trax_buffer_swap(uint32_t new_block_id, uint32_t prev_block_len)
543536
{
537+
/* Before switching to the new block, calculate CRC16 of the current block */
538+
if (prev_block_len > 0) {
539+
const uint8_t *prev_block_start = s_trax_blocks[!((new_block_id % 2))];
540+
uint16_t crc16 = esp_rom_crc16_le(0, prev_block_start, prev_block_len);
541+
eri_write(ESP_APPTRACE_TRAX_CRC16_REG, crc16 | ESP_APPTRACE_CRC_INDICATOR);
542+
ESP_APPTRACE_LOGD("CRC16:%x %d @%x", crc16, prev_block_len, prev_block_start);
543+
}
544544
esp_apptrace_trax_select_memory_block(new_block_id);
545545
return ESP_OK;
546546
}

components/app_trace/private_include/esp_app_trace_membufs_proto.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ typedef struct {
2929

3030
typedef struct {
3131
esp_err_t (*swap_start)(uint32_t curr_block_id);
32-
esp_err_t (*swap)(uint32_t new_block_id);
32+
esp_err_t (*swap)(uint32_t new_block_id, uint32_t prev_block_len);
3333
esp_err_t (*swap_end)(uint32_t new_block_id, uint32_t prev_block_len);
3434
bool (*host_data_pending)(void);
3535
} esp_apptrace_membufs_proto_hw_t;

0 commit comments

Comments
 (0)