Skip to content

Commit 68bb4e6

Browse files
committed
drivers: memc: stm32: FMC NOR/PSRAM refactor
Simplifies the driver code: * Use existing FMC_NORSRAM_DEVICE and FMC_NORSRAM_EXTENDED_DEVICE defines. No need to keep references to them in the driver's config. * Refine initialization loop. Signed-off-by: Georgij Černyšiov <[email protected]>
1 parent 1f69b91 commit 68bb4e6

File tree

1 file changed

+21
-33
lines changed

1 file changed

+21
-33
lines changed

drivers/memc/memc_stm32_nor_psram.c

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,11 @@
66

77
#define DT_DRV_COMPAT st_stm32_fmc_nor_psram
88

9-
#include <zephyr/device.h>
109
#include <soc.h>
11-
#include <errno.h>
12-
10+
#include <zephyr/device.h>
1311
#include <zephyr/logging/log.h>
1412
LOG_MODULE_REGISTER(memc_stm32_nor_psram, CONFIG_MEMC_LOG_LEVEL);
1513

16-
/** SRAM base register offset, see FMC_Bank1_R_BASE */
17-
#define SRAM_OFFSET 0x0000UL
18-
/** SRAM extended mode register offset, see FMC_Bank1E_R_BASE */
19-
#define SRAM_EXT_OFFSET 0x0104UL
20-
2114
/** FMC NOR/PSRAM controller bank configuration fields. */
2215
struct memc_stm32_nor_psram_bank_config {
2316
FMC_NORSRAM_InitTypeDef init;
@@ -27,8 +20,6 @@ struct memc_stm32_nor_psram_bank_config {
2720

2821
/** FMC NOR/PSRAM controller configuration fields. */
2922
struct memc_stm32_nor_psram_config {
30-
FMC_NORSRAM_TypeDef *nor_psram;
31-
FMC_NORSRAM_EXTENDED_TypeDef *extended;
3223
const struct memc_stm32_nor_psram_bank_config *banks;
3324
size_t banks_len;
3425
};
@@ -37,10 +28,11 @@ static int memc_stm32_nor_init(const struct memc_stm32_nor_psram_config *config,
3728
const struct memc_stm32_nor_psram_bank_config *bank_config)
3829
{
3930
FMC_NORSRAM_TimingTypeDef *ext_timing;
40-
NOR_HandleTypeDef hnor = { 0 };
41-
42-
hnor.Instance = config->nor_psram;
43-
hnor.Extended = config->extended;
31+
NOR_HandleTypeDef hnor = {
32+
.Instance = FMC_NORSRAM_DEVICE,
33+
.Extended = FMC_NORSRAM_EXTENDED_DEVICE,
34+
.Init = bank_config->init
35+
};
4436

4537
memcpy(&hnor.Init, &bank_config->init, sizeof(hnor.Init));
4638

@@ -63,12 +55,11 @@ static int memc_stm32_psram_init(const struct memc_stm32_nor_psram_config *confi
6355
const struct memc_stm32_nor_psram_bank_config *bank_config)
6456
{
6557
FMC_NORSRAM_TimingTypeDef *ext_timing;
66-
SRAM_HandleTypeDef hsram = { 0 };
67-
68-
hsram.Instance = config->nor_psram;
69-
hsram.Extended = config->extended;
70-
71-
memcpy(&hsram.Init, &bank_config->init, sizeof(hsram.Init));
58+
SRAM_HandleTypeDef hsram = {
59+
.Instance = FMC_NORSRAM_DEVICE,
60+
.Extended = FMC_NORSRAM_EXTENDED_DEVICE,
61+
.Init = bank_config->init
62+
};
7263

7364
if (bank_config->init.ExtendedMode == FMC_EXTENDED_MODE_ENABLE) {
7465
ext_timing = (FMC_NORSRAM_TimingTypeDef *)&bank_config->timing_ext;
@@ -88,21 +79,21 @@ static int memc_stm32_psram_init(const struct memc_stm32_nor_psram_config *confi
8879
static int memc_stm32_nor_psram_init(const struct device *dev)
8980
{
9081
const struct memc_stm32_nor_psram_config *config = dev->config;
91-
uint32_t memory_type;
82+
const struct memc_stm32_nor_psram_bank_config *bank_config;
9283
size_t bank_idx;
93-
int ret = 0;
84+
int ret;
9485

9586
for (bank_idx = 0U; bank_idx < config->banks_len; ++bank_idx) {
96-
memory_type = config->banks[bank_idx].init.MemoryType;
87+
bank_config = &config->banks[bank_idx];
9788

98-
switch (memory_type) {
89+
switch (bank_config->init.MemoryType) {
9990
case FMC_MEMORY_TYPE_NOR:
100-
ret = memc_stm32_nor_init(config, &config->banks[bank_idx]);
91+
ret = memc_stm32_nor_init(config, bank_config);
10192
break;
10293
case FMC_MEMORY_TYPE_PSRAM:
10394
__fallthrough;
10495
case FMC_MEMORY_TYPE_SRAM:
105-
ret = memc_stm32_psram_init(config, &config->banks[bank_idx]);
96+
ret = memc_stm32_psram_init(config, bank_config);
10697
break;
10798
default:
10899
ret = -ENOTSUP;
@@ -112,13 +103,13 @@ static int memc_stm32_nor_psram_init(const struct device *dev)
112103
if (ret < 0) {
113104
LOG_ERR("Unable to initialize memory type: "
114105
"0x%08X, NSBank: %d, err: %d",
115-
memory_type, config->banks[bank_idx].init.NSBank, ret);
116-
goto end;
106+
bank_config->init.MemoryType,
107+
bank_config->init.NSBank, ret);
108+
return ret;
117109
}
118110
}
119111

120-
end:
121-
return ret;
112+
return 0;
122113
}
123114

124115
/** SDRAM bank/s configuration initialization macro. */
@@ -165,9 +156,6 @@ static const struct memc_stm32_nor_psram_bank_config bank_config[] = {
165156

166157
/** SRAM configuration. */
167158
static const struct memc_stm32_nor_psram_config config = {
168-
.nor_psram = (FMC_NORSRAM_TypeDef *)(DT_REG_ADDR(DT_INST_PARENT(0)) + SRAM_OFFSET),
169-
.extended = (FMC_NORSRAM_EXTENDED_TypeDef *)(DT_REG_ADDR(DT_INST_PARENT(0))
170-
+ SRAM_EXT_OFFSET),
171159
.banks = bank_config,
172160
.banks_len = ARRAY_SIZE(bank_config),
173161
};

0 commit comments

Comments
 (0)