@@ -997,7 +997,7 @@ ot_spi_device_flash_match_command_slot(OtSPIDeviceState *s, uint8_t cmd)
997997 }
998998 }
999999
1000- trace_ot_spi_device_flash_ignored_command (s -> ot_id , "unmatched" , cmd );
1000+ trace_ot_spi_device_flash_unmatched_command (s -> ot_id , cmd );
10011001 return false;
10021002}
10031003
@@ -1521,46 +1521,55 @@ static bool ot_spi_device_flash_try_intercept_hw_command(OtSPIDeviceState *s)
15211521 SpiDeviceFlash * f = & s -> flash ;
15221522
15231523 uint32_t intercept_val32 = s -> spi_regs [R_INTERCEPT_EN ];
1524+ bool intercepted = false;
1525+
15241526 switch (f -> slot ) {
15251527 case SLOT_HW_READ_STATUS1 :
15261528 case SLOT_HW_READ_STATUS2 :
15271529 case SLOT_HW_READ_STATUS3 :
15281530 if (FIELD_EX32 (intercept_val32 , INTERCEPT_EN , STATUS )) {
15291531 ot_spi_device_flash_decode_read_status (s );
1530- return true;
1532+ intercepted = true;
15311533 }
1532- return false ;
1534+ break ;
15331535 case SLOT_HW_READ_JEDEC :
15341536 if (FIELD_EX32 (intercept_val32 , INTERCEPT_EN , JEDEC )) {
15351537 ot_spi_device_flash_decode_read_jedec (s );
1536- return true;
1538+ intercepted = true;
15371539 }
1538- return false ;
1540+ break ;
15391541 case SLOT_HW_READ_SFDP :
15401542 if (FIELD_EX32 (intercept_val32 , INTERCEPT_EN , SFDP )) {
15411543 ot_spi_device_flash_decode_read_sfdp (s );
1542- return true;
1544+ intercepted = true;
15431545 }
1544- return false ;
1546+ break ;
15451547 case SLOT_HW_READ_NORMAL :
15461548 case SLOT_HW_READ_FAST :
15471549 case SLOT_HW_READ_DUAL :
15481550 case SLOT_HW_READ_QUAD :
15491551 case SLOT_HW_READ_DUAL_IO :
15501552 case SLOT_HW_READ_QUAD_IO :
15511553 /* We try to intercept at every read after an address is given */
1552- return false ;
1554+ break ;
15531555 case SLOT_HW_EN4B :
15541556 case SLOT_HW_EX4B :
15551557 ot_spi_device_flash_decode_addr4_enable (s );
1556- return true;
1558+ intercepted = true;
1559+ break ;
15571560 case SLOT_HW_WREN :
15581561 case SLOT_HW_WRDI :
15591562 /* These HW commands cannot be intercepted */
1560- return false ;
1563+ break ;
15611564 default :
1562- return false ;
1565+ break ;
15631566 }
1567+
1568+ if (intercepted ) {
1569+ trace_ot_spi_device_flash_intercepted_command (s -> ot_id , f -> slot );
1570+ }
1571+
1572+ return intercepted ;
15641573}
15651574
15661575static void
@@ -1601,9 +1610,13 @@ ot_spi_device_flash_passthrough_addr(OtSPIDeviceState *s, uint8_t rx)
16011610 f -> buffer [f -> pos ] = rx ;
16021611 if (f -> cmd_addr_swap_en ) {
16031612 unsigned byte_sel = (f -> len - f -> pos - 1u );
1604- rx = ot_spi_device_swap_byte_data (rx , byte_sel ,
1605- s -> spi_regs [R_ADDR_SWAP_MASK ],
1606- s -> spi_regs [R_ADDR_SWAP_DATA ]);
1613+ uint8_t swapped_rx =
1614+ ot_spi_device_swap_byte_data (rx , byte_sel ,
1615+ s -> spi_regs [R_ADDR_SWAP_MASK ],
1616+ s -> spi_regs [R_ADDR_SWAP_DATA ]);
1617+ trace_ot_spi_device_flash_swap_byte (s -> ot_id , "address" , byte_sel , rx ,
1618+ swapped_rx );
1619+ rx = swapped_rx ;
16071620 }
16081621
16091622 (void )ssi_transfer (s -> spi , (uint32_t )rx );
@@ -1648,9 +1661,13 @@ ot_spi_device_flash_passthrough_payload(OtSPIDeviceState *s, uint8_t rx)
16481661
16491662 g_assert (f -> cmd_payload_swap_en );
16501663
1651- rx = ot_spi_device_swap_byte_data (rx , f -> pos ,
1652- s -> spi_regs [R_PAYLOAD_SWAP_MASK ],
1653- s -> spi_regs [R_PAYLOAD_SWAP_DATA ]);
1664+ uint8_t swapped_rx =
1665+ ot_spi_device_swap_byte_data (rx , f -> pos ,
1666+ s -> spi_regs [R_PAYLOAD_SWAP_MASK ],
1667+ s -> spi_regs [R_PAYLOAD_SWAP_DATA ]);
1668+ trace_ot_spi_device_flash_swap_byte (s -> ot_id , "payload" , f -> pos , rx ,
1669+ swapped_rx );
1670+ rx = swapped_rx ;
16541671
16551672 (void )ssi_transfer (s -> spi , (uint32_t )rx );
16561673
@@ -1668,6 +1685,8 @@ static uint8_t ot_spi_device_flash_passthrough_read(OtSPIDeviceState *s)
16681685 if (f -> slot >= SLOT_HW_READ_NORMAL && f -> slot <= SLOT_HW_READ_QUAD_IO ) {
16691686 if (ot_spi_device_get_command_address_size (s ) != 0u ) {
16701687 if (ot_spi_device_is_mailbox_match (s , f -> address )) {
1688+ trace_ot_spi_device_flash_intercept_mailbox (s -> ot_id ,
1689+ f -> address );
16711690 uint8_t * mbx = (uint8_t * )& s -> sram [SPI_SRAM_MBX_OFFSET ];
16721691 uint8_t tx = mbx [f -> address & (SPI_SRAM_MBX_SIZE - 1u )];
16731692 f -> address += 1u ;
@@ -1727,6 +1746,7 @@ ot_spi_device_flash_transfer_passthrough(OtSPIDeviceState *s, uint8_t rx)
17271746
17281747 if (ot_spi_device_flash_passthrough_filter (s , rx )) {
17291748 /* command opcode is filtered, discard all bytes untl next CS */
1749+ trace_ot_spi_device_flash_filtered_command (s -> ot_id , rx );
17301750 FLASH_CHANGE_STATE (s , IDLE );
17311751 BUS_CHANGE_STATE (s , DISCARD );
17321752 break ;
0 commit comments