@@ -597,7 +597,8 @@ static int flash_mspi_infineon_s25h_switch_to_quad_transfer(const struct device
597597
598598 ret = flash_mspi_infineon_s25h_verify_jedec_id (dev );
599599 if (ret < 0 ) {
600- LOG_ERR ("JEDEC ID mismatch after switching to 4 lane MSPI. Communication is broken" );
600+ LOG_ERR ("JEDEC ID mismatch after switching to 4 lane MSPI. Communication is "
601+ "broken" );
601602 return ret ;
602603 }
603604
@@ -629,7 +630,8 @@ static int flash_mspi_infineon_s25h_switch_to_quad_transfer(const struct device
629630
630631 ret = flash_mspi_infineon_s25h_verify_jedec_id (dev );
631632 if (ret < 0 ) {
632- LOG_ERR ("JEDEC ID mismatch after switching to full quad MSPI mode. Communication is broken" );
633+ LOG_ERR ("JEDEC ID mismatch after switching to full quad MSPI mode. Communication "
634+ "is broken" );
633635 return ret ;
634636 }
635637
@@ -700,6 +702,49 @@ static int flash_mspi_infineon_s25h_disable_hybrid_sector_mode(const struct devi
700702 return 0 ;
701703}
702704
705+ static int flash_mspi_infineon_s25h_enter_4_byte_address_mode (const struct device * dev )
706+ {
707+ int ret = 0 ;
708+ const struct flash_mspi_infineon_s25h_cfg * config = dev -> config ;
709+ struct flash_mspi_infineon_s25h_data * data = dev -> data ;
710+
711+ const struct mspi_xfer_packet enter_4_byte_cmd = {
712+ .dir = MSPI_TX ,
713+ .cmd = INF_MSPI_S25H_OPCODE_ENABLE_4_BYTE_ADDR_MODE ,
714+ .num_bytes = 0 ,
715+ };
716+
717+ struct mspi_xfer xfer = {
718+ INF_MSPI_S25H_DEFAULT_XFER_DATA ,
719+ .rx_dummy = 0 ,
720+ .addr_length = 0 ,
721+ .num_packet = 1 ,
722+ .packets = & enter_4_byte_cmd ,
723+ .timeout = INF_MSPI_S25H_DEFAULT_MSPI_TIMEOUT ,
724+ };
725+
726+ ret = mspi_transceive (config -> bus , & config -> dev_id , & xfer );
727+ if (ret < 0 ) {
728+ LOG_ERR ("Error sending command to enter 4 byte address mode" );
729+ return ret ;
730+ }
731+
732+ data -> mspi_dev_cfg .addr_length = 4 ;
733+
734+ if (ret < 0 ) {
735+ LOG_ERR ("Error setting up MSPI bus after changing address length" );
736+ return ret ;
737+ }
738+
739+ ret = flash_mspi_infineon_s25h_verify_jedec_id (dev );
740+ if (ret < 0 ) {
741+ LOG_ERR ("Error verifying JEDEC id after entering 4 byte address mode" );
742+ return ret ;
743+ }
744+
745+ return 0 ;
746+ }
747+
703748static int flash_mspi_infineon_s25h_init (const struct device * dev )
704749{
705750 int ret = 0 ;
@@ -735,6 +780,11 @@ static int flash_mspi_infineon_s25h_init(const struct device *dev)
735780 return ret ;
736781 }
737782
783+ ret = flash_mspi_infineon_s25h_enter_4_byte_address_mode (dev );
784+ if (ret < 0 ) {
785+ return ret ;
786+ }
787+
738788 ret = flash_mspi_infineon_s25h_switch_to_quad_transfer (dev );
739789 if (ret < 0 ) {
740790 return ret ;
0 commit comments