1 /* 2 * Copyright 2023 NXP 3 * All rights reserved. 4 * 5 * SPDXLicense-Identifier: BSD-3-Clause 6 */ 7 #include "flash_config.h" 8 9 /* Component ID definition, used by tools. */ 10 #ifndef FSL_COMPONENT_ID 11 #define FSL_COMPONENT_ID "platform.drivers.flash_config" 12 #endif 13 14 /******************************************************************************* 15 * Code 16 ******************************************************************************/ 17 #if defined(BOOT_HEADER_ENABLE) && (BOOT_HEADER_ENABLE == 1) 18 #if defined(__ARMCC_VERSION) || defined(__GNUC__) 19 __attribute__((section(".flash_conf"), used)) 20 #elif defined(__ICCARM__) 21 #pragma location = ".flash_conf" 22 #endif 23 24 const fc_static_platform_config_t flash_config = { 25 .xspi_fcb_block = { 26 .memConfig = 27 { 28 .tag = FC_XSPI_CFG_BLK_TAG, 29 .version = FC_XSPI_CFG_BLK_VERSION, 30 .readSampleClkSrc = kXSPIReadSampleClk_ExternalInputFromDqsPad, 31 .csHoldTime = 3, 32 .csSetupTime = 3, 33 .deviceModeCfgEnable = 1, 34 .deviceModeType = 2, 35 .waitTimeCfgCommands = 1, 36 .deviceModeSeq = 37 { 38 .seqNum = 1, 39 .seqId = 6, /* See Lookup table for more details */ 40 .reserved = 0, 41 }, 42 .deviceModeArg = 2, /* Enable OPI DDR mode */ 43 .controllerMiscOption = 44 (1u << Fc_XspiMiscOffset_SafeConfigFreqEnable) | (1u << Fc_XspiMiscOffset_DdrModeEnable), 45 .deviceType = 1, 46 .sflashPadType = 8, 47 .serialClkFreq = Fc_XspiSerialClk_200MHz, 48 .sflashA1Size = 64ul * 1024u * 1024u, 49 .busyOffset = 0u, 50 .busyBitPolarity = 0u, 51 .lookupTable = 52 { 53 /*Read*/ 54 [0] = 55 FC_XSPI_LUT_SEQ(FC_CMD_DDR, FC_XSPI_8PAD, 0xEE, FC_CMD_DDR, FC_XSPI_8PAD, 0x11), 56 [1] = 57 FC_XSPI_LUT_SEQ(FC_CMD_RADDR_DDR, FC_XSPI_8PAD, 0x20, FC_CMD_DUMMY_SDR, FC_XSPI_8PAD, 0x12), 58 [2] = 59 FC_XSPI_LUT_SEQ(FC_CMD_DUMMY_SDR, FC_XSPI_8PAD, 0x2, FC_CMD_READ_DDR, FC_XSPI_8PAD, 0x4), 60 [3] = 61 FC_XSPI_LUT_SEQ(FC_CMD_STOP, FC_XSPI_8PAD, 0x0, 0, 0, 0), 62 63 /*Read status SPI*/ 64 [5 * 1 + 0] = 65 FC_XSPI_LUT_SEQ(FC_CMD_SDR, FC_XSPI_1PAD, 0x05, FC_CMD_READ_SDR, FC_XSPI_1PAD, 0x04), 66 67 /* Read Status OPI */ 68 [5 * 2 + 0] = 69 FC_XSPI_LUT_SEQ(FC_CMD_DDR, FC_XSPI_8PAD, 0x05, FC_CMD_DDR, FC_XSPI_8PAD, 0xFA), 70 [5 * 2 + 1] = 71 FC_XSPI_LUT_SEQ(FC_CMD_RADDR_DDR, FC_XSPI_8PAD, 0x20, FC_CMD_DUMMY_SDR, FC_XSPI_8PAD, 0x12), 72 [5 * 2 + 2] = 73 FC_XSPI_LUT_SEQ(FC_CMD_DUMMY_SDR, FC_XSPI_8PAD, 0x2, FC_CMD_READ_DDR, FC_XSPI_8PAD, 0x4), 74 [5 * 2 + 3] = 75 FC_XSPI_LUT_SEQ(FC_CMD_STOP, FC_XSPI_8PAD, 0x0, 0, 0, 0), 76 77 /*Write enable*/ 78 [5 * 3 + 0] = 79 FC_XSPI_LUT_SEQ(FC_CMD_SDR, FC_XSPI_1PAD, 0x06, FC_CMD_STOP, FC_XSPI_1PAD, 0x04), 80 81 /* Write Enable - OPI */ 82 [5 * 4 + 0] = 83 FC_XSPI_LUT_SEQ(FC_CMD_DDR, FC_XSPI_8PAD, 0x06, FC_CMD_DDR, FC_XSPI_8PAD, 0xF9), 84 85 /* Erase Sector */ 86 [5 * 5 + 0] = 87 FC_XSPI_LUT_SEQ(FC_CMD_DDR, FC_XSPI_8PAD, 0x21, FC_CMD_DDR, FC_XSPI_8PAD, 0xDE), 88 [5 * 5 + 1] = 89 FC_XSPI_LUT_SEQ(FC_CMD_RADDR_DDR, FC_XSPI_8PAD, 0x20, FC_CMD_STOP, FC_XSPI_8PAD, 0x0), 90 91 /* Enable OPI DDR mode */ 92 [5 * 6 + 0] = 93 FC_XSPI_LUT_SEQ(FC_CMD_SDR, FC_XSPI_1PAD, 0x72, FC_CMD_SDR, FC_XSPI_1PAD, 0x00), 94 [5 * 6 + 1] = 95 FC_XSPI_LUT_SEQ(FC_CMD_SDR, FC_XSPI_1PAD, 0x00, FC_CMD_SDR, FC_XSPI_1PAD, 0x00), 96 [5 * 6 + 2] = 97 FC_XSPI_LUT_SEQ(FC_CMD_SDR, FC_XSPI_1PAD, 0x00, FC_CMD_WRITE_SDR, FC_XSPI_1PAD, 0x01), 98 99 /* Page program */ 100 [5 * 9 + 0] = 101 FC_XSPI_LUT_SEQ(FC_CMD_DDR, FC_XSPI_8PAD, 0x12, FC_CMD_DDR, FC_XSPI_8PAD, 0xED), 102 [5 * 9 + 1] = 103 FC_XSPI_LUT_SEQ(FC_CMD_RADDR_DDR, FC_XSPI_8PAD, 0x20, FC_CMD_WRITE_DDR, FC_XSPI_8PAD, 0x4), 104 105 /* Erase Chip */ 106 [5 * 11 + 0] = 107 FC_XSPI_LUT_SEQ(FC_CMD_DDR, FC_XSPI_8PAD, 0x60, FC_CMD_DDR, FC_XSPI_8PAD, 0x9F), 108 }, 109 }, 110 .pageSize = 256u, 111 .sectorSize = 4u * 1024u, 112 .ipcmdSerialClkFreq = 1u, 113 .serialNorType = 2u, 114 .blockSize = 64u * 1024u, 115 .flashStateCtx = 0x07008200u, 116 }, 117 #ifdef BOOT_ENABLE_XSPI1_PSRAM 118 .psram_config_block = { 119 .xmcdHeader = 0xC0010008, 120 .xmcdOpt0 = 0xC0000700, 121 }, 122 #endif 123 }; 124 125 #endif /* BOOT_HEADER_ENABLE */ 126