Skip to content

Commit 2cd7b4e

Browse files
committed
drivers: flash: stm32 xspi drivers supporting the stm32h7r/s mcu
Add the support of the stm32h7rs serie to the drivers/flash/flash_stm32_xspi driver. The stm32h7rs has no delayblock Signed-off-by: Francois Ramu <[email protected]>
1 parent b8c3fc5 commit 2cd7b4e

File tree

1 file changed

+22
-15
lines changed

1 file changed

+22
-15
lines changed

drivers/flash/flash_stm32_xspi.c

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ LOG_MODULE_REGISTER(flash_stm32_xspi, CONFIG_FLASH_LOG_LEVEL);
4242

4343
#define STM32_XSPI_RESET_GPIO DT_INST_NODE_HAS_PROP(0, reset_gpios)
4444

45-
#define STM32_XSPI_DLYB_BYPASSED DT_PROP(STM32_XSPI_NODE, dlyb_bypass)
46-
4745
#define STM32_XSPI_USE_DMA DT_NODE_HAS_PROP(STM32_XSPI_NODE, dmas)
4846

4947
#if STM32_XSPI_USE_DMA
@@ -52,6 +50,11 @@ LOG_MODULE_REGISTER(flash_stm32_xspi, CONFIG_FLASH_LOG_LEVEL);
5250
#include <stm32_ll_dma.h>
5351
#endif /* STM32_XSPI_USE_DMA */
5452

53+
#if defined(CONFIG_SOC_SERIES_STM32H7RSX)
54+
#include <stm32_ll_pwr.h>
55+
#include <stm32_ll_system.h>
56+
#endif /* CONFIG_SOC_SERIES_STM32H7RSX */
57+
5558
#include "flash_stm32_xspi.h"
5659

5760
static inline void xspi_lock_thread(const struct device *dev)
@@ -2068,6 +2071,11 @@ static int flash_stm32_xspi_init(const struct device *dev)
20682071
LOG_ERR("XSPI mode SPI|DUAL|QUAD/DTR is not valid");
20692072
return -ENOTSUP;
20702073
}
2074+
#if defined(CONFIG_SOC_SERIES_STM32H7RSX)
2075+
LL_PWR_EnableXSPIM2();
2076+
__HAL_RCC_SBS_CLK_ENABLE();
2077+
LL_SBS_EnableXSPI2SpeedOptim();
2078+
#endif /* CONFIG_SOC_SERIES_STM32H7RSX */
20712079

20722080
/* Signals configuration */
20732081
ret = pinctrl_apply_state(dev_cfg->pcfg, PINCTRL_STATE_DEFAULT);
@@ -2136,17 +2144,7 @@ static int flash_stm32_xspi_init(const struct device *dev)
21362144
if (dev_cfg->data_rate == XSPI_DTR_TRANSFER) {
21372145
dev_data->hxspi.Init.MemoryType = HAL_XSPI_MEMTYPE_MACRONIX;
21382146
dev_data->hxspi.Init.DelayHoldQuarterCycle = HAL_XSPI_DHQC_ENABLE;
2139-
} else {
2140-
21412147
}
2142-
#if defined(XSPI_DCR1_DLYBYP)
2143-
#if STM32_XSPI_DLYB_BYPASSED
2144-
dev_data->hxspi.Init.DelayBlockBypass = HAL_XSPI_DELAY_BLOCK_BYPASS;
2145-
#else
2146-
dev_data->hxspi.Init.DelayBlockBypass = HAL_XSPI_DELAY_BLOCK_ON;
2147-
#endif /* STM32_XSPI_DLYB_BYPASSED */
2148-
#endif /* XSPI_DCR1_DLYBYP */
2149-
21502148

21512149
if (HAL_XSPI_Init(&dev_data->hxspi) != HAL_OK) {
21522150
LOG_ERR("XSPI Init failed");
@@ -2155,7 +2153,8 @@ static int flash_stm32_xspi_init(const struct device *dev)
21552153

21562154
LOG_DBG("XSPI Init'd");
21572155

2158-
#if defined(HAL_XSPIM_IOPORT_1) || defined(HAL_XSPIM_IOPORT_2)
2156+
#if defined(HAL_XSPIM_IOPORT_1) || defined(HAL_XSPIM_IOPORT_2) || \
2157+
defined(XSPIM) || defined(XSPIM1) || defined(XSPIM2)
21592158
/* XSPI I/O manager init Function */
21602159
XSPIM_CfgTypeDef xspi_mgr_cfg;
21612160

@@ -2468,9 +2467,17 @@ static struct flash_stm32_xspi_data flash_stm32_xspi_dev_data = {
24682467
: HAL_XSPI_CSSEL_NCS2),
24692468
#endif
24702469
.FreeRunningClock = HAL_XSPI_FREERUNCLK_DISABLE,
2471-
#if defined(OCTOSPI_DCR4_REFRESH)
2470+
#if defined(OCTOSPI_DCR1_DLYBYP) || defined(XSPI_DCR1_DLYBYP)
2471+
.DelayBlockBypass = (DT_PROP(STM32_XSPI_NODE, dlyb_bypass)
2472+
? HAL_XSPI_DELAY_BLOCK_BYPASS
2473+
: HAL_XSPI_DELAY_BLOCK_ON),
2474+
#endif /* xXSPI_DCR1_DLYBYP */
2475+
#if defined(OCTOSPI_DCR3_MAXTRAN) || defined(XSPI_DCR3_MAXTRAN)
2476+
.MaxTran = 0,
2477+
#endif /* xSPI_DCR3_MAXTRAN */
2478+
#if defined(OCTOSPI_DCR4_REFRESH) || defined(XSPI_DCR4_REFRESH)
24722479
.Refresh = 0,
2473-
#endif /* OCTOSPI_DCR4_REFRESH */
2480+
#endif /* xSPI_DCR4_REFRESH */
24742481
},
24752482
},
24762483
.qer_type = DT_QER_PROP_OR(0, JESD216_DW15_QER_VAL_S1B6),

0 commit comments

Comments
 (0)