@@ -757,17 +757,11 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
757757 if (en4b & BIT (6 )) {
758758 /* Flash is always in 4 byte mode. We just need to configure LUT */
759759 return 0 ;
760- } else if (en4b & BIT (5 )) {
761- /* Dedicated vendor instruction set, which we don't support. Exit here */
762- return - ENOTSUP ;
763- } else if (en4b & BIT (4 )) {
764- /* Set bit 0 of 16 bit configuration register */
760+ } else if (en4b & BIT (0 )) {
761+ /* Issue instruction 0xB7 */
765762 flexspi_lut [SCRATCH_CMD ][0 ] = FLEXSPI_LUT_SEQ (
766- kFLEXSPI_Command_SDR , kFLEXSPI_1PAD , 0xB5 ,
767- kFLEXSPI_Command_READ_SDR , kFLEXSPI_1PAD , 0x1 );
768- flexspi_lut [SCRATCH_CMD2 ][0 ] = FLEXSPI_LUT_SEQ (
769- kFLEXSPI_Command_SDR , kFLEXSPI_1PAD , 0xB1 ,
770- kFLEXSPI_Command_WRITE_SDR , kFLEXSPI_1PAD , 0x1 );
763+ kFLEXSPI_Command_SDR , kFLEXSPI_1PAD , 0xB7 ,
764+ kFLEXSPI_Command_STOP , kFLEXSPI_1PAD , 0x0 );
771765 ret = memc_flexspi_set_device_config (& data -> controller ,
772766 & config ,
773767 (uint32_t * )flexspi_lut ,
@@ -776,18 +770,9 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
776770 if (ret < 0 ) {
777771 return ret ;
778772 }
779- transfer .dataSize = 2 ;
773+ transfer .dataSize = 0 ;
780774 transfer .seqIndex = SCRATCH_CMD ;
781- transfer .cmdType = kFLEXSPI_Read ;
782- /* Read config register */
783- ret = memc_flexspi_transfer (& data -> controller , & transfer );
784- if (ret < 0 ) {
785- return ret ;
786- }
787- buffer |= BIT (0 );
788- /* Set config register */
789- transfer .seqIndex = SCRATCH_CMD2 ;
790- transfer .cmdType = kFLEXSPI_Read ;
775+ transfer .cmdType = kFLEXSPI_Command ;
791776 return memc_flexspi_transfer (& data -> controller , & transfer );
792777 } else if (en4b & BIT (1 )) {
793778 /* Issue write enable, then instruction 0xB7 */
@@ -807,11 +792,14 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
807792 transfer .seqIndex = SCRATCH_CMD ;
808793 transfer .cmdType = kFLEXSPI_Command ;
809794 return memc_flexspi_transfer (& data -> controller , & transfer );
810- } else if (en4b & BIT (0 )) {
811- /* Issue instruction 0xB7 */
795+ } else if (en4b & BIT (4 )) {
796+ /* Set bit 0 of 16 bit configuration register */
812797 flexspi_lut [SCRATCH_CMD ][0 ] = FLEXSPI_LUT_SEQ (
813- kFLEXSPI_Command_SDR , kFLEXSPI_1PAD , 0xB7 ,
814- kFLEXSPI_Command_STOP , kFLEXSPI_1PAD , 0x0 );
798+ kFLEXSPI_Command_SDR , kFLEXSPI_1PAD , 0xB5 ,
799+ kFLEXSPI_Command_READ_SDR , kFLEXSPI_1PAD , 0x1 );
800+ flexspi_lut [SCRATCH_CMD2 ][0 ] = FLEXSPI_LUT_SEQ (
801+ kFLEXSPI_Command_SDR , kFLEXSPI_1PAD , 0xB1 ,
802+ kFLEXSPI_Command_WRITE_SDR , kFLEXSPI_1PAD , 0x1 );
815803 ret = memc_flexspi_set_device_config (& data -> controller ,
816804 & config ,
817805 (uint32_t * )flexspi_lut ,
@@ -820,12 +808,27 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
820808 if (ret < 0 ) {
821809 return ret ;
822810 }
823- transfer .dataSize = 0 ;
811+ transfer .dataSize = 2 ;
824812 transfer .seqIndex = SCRATCH_CMD ;
825- transfer .cmdType = kFLEXSPI_Command ;
813+ transfer .cmdType = kFLEXSPI_Read ;
814+ /* Read config register */
815+ ret = memc_flexspi_transfer (& data -> controller , & transfer );
816+ if (ret < 0 ) {
817+ return ret ;
818+ }
819+ buffer |= BIT (0 );
820+ /* Set config register */
821+ transfer .seqIndex = SCRATCH_CMD2 ;
822+ transfer .cmdType = kFLEXSPI_Read ;
826823 return memc_flexspi_transfer (& data -> controller , & transfer );
827824 }
828- /* Other methods not supported */
825+
826+ /* Other methods not supported. Include:
827+ *
828+ * BIT(2): 8-bit volatile extended address register used to define A[31:24] bits.
829+ * BIT(3): 8-bit volatile bank register used to define A[31:24] bits.
830+ * BIT(5): Dedicated vendor instruction set.
831+ */
829832 return - ENOTSUP ;
830833}
831834
0 commit comments