@@ -757,17 +757,11 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
757
757
if (en4b & BIT (6 )) {
758
758
/* Flash is always in 4 byte mode. We just need to configure LUT */
759
759
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 */
765
762
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 );
771
765
ret = memc_flexspi_set_device_config (& data -> controller ,
772
766
& config ,
773
767
(uint32_t * )flexspi_lut ,
@@ -776,18 +770,9 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
776
770
if (ret < 0 ) {
777
771
return ret ;
778
772
}
779
- transfer .dataSize = 2 ;
773
+ transfer .dataSize = 0 ;
780
774
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 ;
791
776
return memc_flexspi_transfer (& data -> controller , & transfer );
792
777
} else if (en4b & BIT (1 )) {
793
778
/* Issue write enable, then instruction 0xB7 */
@@ -807,11 +792,14 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
807
792
transfer .seqIndex = SCRATCH_CMD ;
808
793
transfer .cmdType = kFLEXSPI_Command ;
809
794
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 */
812
797
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 );
815
803
ret = memc_flexspi_set_device_config (& data -> controller ,
816
804
& config ,
817
805
(uint32_t * )flexspi_lut ,
@@ -820,12 +808,27 @@ static int flash_flexspi_nor_4byte_enable(struct flash_flexspi_nor_data *data,
820
808
if (ret < 0 ) {
821
809
return ret ;
822
810
}
823
- transfer .dataSize = 0 ;
811
+ transfer .dataSize = 2 ;
824
812
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 ;
826
823
return memc_flexspi_transfer (& data -> controller , & transfer );
827
824
}
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
+ */
829
832
return - ENOTSUP ;
830
833
}
831
834
0 commit comments