25
25
/* System clock frequency. */
26
26
extern uint32_t SystemCoreClock ;
27
27
28
- __ramfunc static void enable_lpcac (void )
29
- {
30
- SYSCON -> LPCAC_CTRL |= SYSCON_LPCAC_CTRL_CLR_LPCAC_MASK ;
31
- SYSCON -> LPCAC_CTRL &= ~(SYSCON_LPCAC_CTRL_CLR_LPCAC_MASK |
32
- SYSCON_LPCAC_CTRL_DIS_LPCAC_MASK );
33
- }
34
-
35
28
/* Update Active mode voltage for OverDrive mode. */
36
29
void power_mode_od (void )
37
30
{
@@ -57,10 +50,38 @@ void power_mode_od(void)
57
50
SPC_SetSRAMOperateVoltage (SPC0 , & cfg );
58
51
}
59
52
60
- static int frdm_mcxn947_init (void )
53
+ #if CONFIG_FLASH_MCUX_FLEXSPI_NOR || CONFIG_FLASH_MCUX_FLEXSPI_XIP
54
+ __ramfunc static void enable_cache64 (void )
61
55
{
62
- enable_lpcac ();
56
+ /* Make sure the FlexSPI clock is enabled before configuring the FlexSPI cache. */
57
+ SYSCON -> AHBCLKCTRLSET [0 ] |= SYSCON_AHBCLKCTRL0_FLEXSPI_MASK ;
58
+
59
+ /* Set command to invalidate all ways and write GO bit to initiate command */
60
+ CACHE64_CTRL0 -> CCR = CACHE64_CTRL_CCR_INVW1_MASK | CACHE64_CTRL_CCR_INVW0_MASK ;
61
+ CACHE64_CTRL0 -> CCR |= CACHE64_CTRL_CCR_GO_MASK ;
62
+ /* Wait until the command completes */
63
+ while ((CACHE64_CTRL0 -> CCR & CACHE64_CTRL_CCR_GO_MASK ) != 0U ) {
64
+ }
65
+ /* Enable cache, enable write buffer */
66
+ CACHE64_CTRL0 -> CCR = (CACHE64_CTRL_CCR_ENWRBUF_MASK | CACHE64_CTRL_CCR_ENCACHE_MASK );
67
+
68
+ /* configure reg0, reg1 to cover the whole FlexSPI
69
+ * reg 0 covers the space where Zephyr resides in case of XIP from FlexSPI
70
+ * reg 1 covers the storage space in case of XIP from FlexSPI
71
+ */
72
+ CACHE64_POLSEL0 -> REG0_TOP = 0x7FFC00 ;
73
+ CACHE64_POLSEL0 -> REG1_TOP = 0x0 ;
74
+ CACHE64_POLSEL0 -> POLSEL =
75
+ (CACHE64_POLSEL_POLSEL_REG0_POLICY (1 ) | CACHE64_POLSEL_POLSEL_REG1_POLICY (0 ) |
76
+ CACHE64_POLSEL_POLSEL_REG2_POLICY (0 ));
77
+
78
+ __ISB ();
79
+ __DSB ();
80
+ }
81
+ #endif
63
82
83
+ static int frdm_mcxn947_init (void )
84
+ {
64
85
power_mode_od ();
65
86
66
87
/* Enable SCG clock */
@@ -232,12 +253,11 @@ static int frdm_mcxn947_init(void)
232
253
CLOCK_AttachClk (kFRO_HF_to_USDHC );
233
254
#endif
234
255
235
- #if CONFIG_FLASH_MCUX_FLEXSPI_NOR
236
- /* We downclock the FlexSPI to 50MHz, it will be set to the
237
- * optimum speed supported by the Flash device during FLEXSPI
238
- * Init
239
- */
240
- flexspi_clock_set_freq (MCUX_FLEXSPI_CLK , MHZ (50 ));
256
+ #if CONFIG_FLASH_MCUX_FLEXSPI_NOR || CONFIG_FLASH_MCUX_FLEXSPI_XIP
257
+ /* Setup the FlexSPI clock */
258
+ flexspi_clock_set_freq (MCUX_FLEXSPI_CLK ,
259
+ DT_PROP (DT_NODELABEL (w25q64jvssiq ), spi_max_frequency ));
260
+ enable_cache64 ();
241
261
#endif
242
262
243
263
#if DT_NODE_HAS_STATUS (DT_NODELABEL (vref ), okay )
0 commit comments