Skip to content

Commit 4bc2de2

Browse files
AlessandroLuokartben
authored andcommitted
drivers: flash: Add support for Apollo510 flash controller
This commit adds support for Apollo510 SoC in ambiq flash driver Signed-off-by: Hao Luo <[email protected]>
1 parent 95153de commit 4bc2de2

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

drivers/flash/flash_ambiq.c

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ LOG_MODULE_REGISTER(flash_ambiq, CONFIG_FLASH_LOG_LEVEL);
1818
#define SOC_NV_FLASH_NODE DT_INST(0, soc_nv_flash)
1919
#define SOC_NV_FLASH_ADDR DT_REG_ADDR(SOC_NV_FLASH_NODE)
2020
#define SOC_NV_FLASH_SIZE DT_REG_SIZE(SOC_NV_FLASH_NODE)
21-
#if (CONFIG_SOC_SERIES_APOLLO4X)
22-
#define MIN_WRITE_SIZE 16
23-
#else
21+
#if (CONFIG_SOC_SERIES_APOLLO3X)
2422
#define MIN_WRITE_SIZE 4
25-
#endif /* CONFIG_SOC_SERIES_APOLLO4X */
23+
#else
24+
#define MIN_WRITE_SIZE 16
25+
#endif
2626
#define FLASH_WRITE_BLOCK_SIZE MAX(DT_PROP(SOC_NV_FLASH_NODE, write_block_size), MIN_WRITE_SIZE)
2727
#define FLASH_ERASE_BLOCK_SIZE DT_PROP(SOC_NV_FLASH_NODE, erase_block_size)
2828

@@ -48,7 +48,7 @@ static struct k_sem flash_ambiq_sem;
4848
static const struct flash_parameters flash_ambiq_parameters = {
4949
.write_block_size = FLASH_WRITE_BLOCK_SIZE,
5050
.erase_value = FLASH_ERASE_BYTE,
51-
#if defined(CONFIG_SOC_SERIES_APOLLO4X)
51+
#if !defined(CONFIG_SOC_SERIES_APOLLO3X)
5252
.caps = {
5353
.no_explicit_erase = true,
5454
},
@@ -113,17 +113,17 @@ static int flash_ambiq_write(const struct device *dev, off_t offset, const void
113113
aligned[j] = UNALIGNED_GET((uint32_t *)src);
114114
src++;
115115
}
116-
#if (CONFIG_SOC_SERIES_APOLLO4X)
117-
ret = am_hal_mram_main_program(
118-
AM_HAL_MRAM_PROGRAM_KEY, aligned,
119-
(uint32_t *)(SOC_NV_FLASH_ADDR + offset + i * FLASH_WRITE_BLOCK_SIZE),
120-
FLASH_WRITE_BLOCK_SIZE / sizeof(uint32_t));
121-
#elif (CONFIG_SOC_SERIES_APOLLO3X)
116+
#if defined(CONFIG_SOC_SERIES_APOLLO3X)
122117
ret = am_hal_flash_program_main(
123118
AM_HAL_FLASH_PROGRAM_KEY, aligned,
124119
(uint32_t *)(SOC_NV_FLASH_ADDR + offset + i * FLASH_WRITE_BLOCK_SIZE),
125120
FLASH_WRITE_BLOCK_SIZE / sizeof(uint32_t));
126-
#endif /* CONFIG_SOC_SERIES_APOLLO4X */
121+
#else
122+
ret = am_hal_mram_main_program(
123+
AM_HAL_MRAM_PROGRAM_KEY, aligned,
124+
(uint32_t *)(SOC_NV_FLASH_ADDR + offset + i * FLASH_WRITE_BLOCK_SIZE),
125+
FLASH_WRITE_BLOCK_SIZE / sizeof(uint32_t));
126+
#endif
127127
if (ret) {
128128
break;
129129
}
@@ -150,9 +150,7 @@ static int flash_ambiq_erase(const struct device *dev, off_t offset, size_t len)
150150
return 0;
151151
}
152152

153-
#if (CONFIG_SOC_SERIES_APOLLO4X)
154-
/* The erase address and length alignment check will be done in HAL.*/
155-
#elif (CONFIG_SOC_SERIES_APOLLO3X)
153+
#if defined(CONFIG_SOC_SERIES_APOLLO3X)
156154
if ((offset % FLASH_ERASE_BLOCK_SIZE) != 0) {
157155
LOG_ERR("offset 0x%lx is not on a page boundary", (long)offset);
158156
return -EINVAL;
@@ -162,15 +160,13 @@ static int flash_ambiq_erase(const struct device *dev, off_t offset, size_t len)
162160
LOG_ERR("len %zu is not multiple of a page size", len);
163161
return -EINVAL;
164162
}
165-
#endif /* CONFIG_SOC_SERIES_APOLLO4X */
163+
#else
164+
/* The erase address and length alignment check will be done in HAL.*/
165+
#endif
166166

167167
FLASH_SEM_TAKE();
168168

169-
#if (CONFIG_SOC_SERIES_APOLLO4X)
170-
ret = am_hal_mram_main_fill(AM_HAL_MRAM_PROGRAM_KEY, FLASH_ERASE_WORD,
171-
(uint32_t *)(SOC_NV_FLASH_ADDR + offset),
172-
(len / sizeof(uint32_t)));
173-
#elif (CONFIG_SOC_SERIES_APOLLO3X)
169+
#if defined(CONFIG_SOC_SERIES_APOLLO3X)
174170
unsigned int key = 0;
175171

176172
key = irq_lock();
@@ -181,7 +177,11 @@ static int flash_ambiq_erase(const struct device *dev, off_t offset, size_t len)
181177
AM_HAL_FLASH_ADDR2PAGE(((uint32_t)SOC_NV_FLASH_ADDR + offset)));
182178

183179
irq_unlock(key);
184-
#endif /* CONFIG_SOC_SERIES_APOLLO4X */
180+
#else
181+
ret = am_hal_mram_main_fill(AM_HAL_MRAM_PROGRAM_KEY, FLASH_ERASE_WORD,
182+
(uint32_t *)(SOC_NV_FLASH_ADDR + offset),
183+
(len / sizeof(uint32_t)));
184+
#endif
185185

186186
FLASH_SEM_GIVE();
187187

0 commit comments

Comments
 (0)