Skip to content

Commit 52155cc

Browse files
HalfSweetkartben
authored andcommitted
drivers: flash: sf32lb_mpi_qspi_nor: initialize DR temp words
Initialize the 32-bit DR temporary at declaration before copying a partial tail chunk in qspi_nor_write_fifo(). Without this, 1-3 byte writes can leave the upper bytes unchanged and push stale bits into MPI_DR. Signed-off-by: Haoran Jiang <halfsweet@halfsweet.cn>
1 parent 1f2464f commit 52155cc

1 file changed

Lines changed: 4 additions & 6 deletions

File tree

drivers/flash/flash_sf32lb_mpi_qspi_nor.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,16 +214,14 @@ static __ramfunc void qspi_nor_read_fifo(const struct device *dev, uint8_t cmd,
214214

215215
/* grab data */
216216
for (size_t i = 0U; i < (chunk_len / 4U); i++) {
217-
uint32_t dr;
217+
uint32_t dr = sys_read32(data->mpi + MPI_DR);
218218

219-
dr = sys_read32(data->mpi + MPI_DR);
220219
memcpy(&cbuf[i * 4U], &dr, 4U);
221220
}
222221

223222
if (chunk_len & 3U) {
224-
uint32_t dr;
223+
uint32_t dr = sys_read32(data->mpi + MPI_DR);
225224

226-
dr = sys_read32(data->mpi + MPI_DR);
227225
memcpy(&cbuf[chunk_len & ~3U], &dr, chunk_len & 3U);
228226
}
229227

@@ -248,14 +246,14 @@ static __ramfunc void qspi_nor_write_fifo(const struct device *dev, uint8_t cmd,
248246

249247
/* push data */
250248
for (size_t i = 0U; i < (chunk_len / 4U); i++) {
251-
uint32_t dr;
249+
uint32_t dr = 0U;
252250

253251
memcpy(&dr, &cbuf[i * 4U], 4U);
254252
sys_write32(dr, data->mpi + MPI_DR);
255253
}
256254

257255
if (chunk_len & 3U) {
258-
uint32_t dr;
256+
uint32_t dr = 0U;
259257

260258
memcpy(&dr, &cbuf[chunk_len & ~3U], chunk_len & 3U);
261259
sys_write32(dr, data->mpi + MPI_DR);

0 commit comments

Comments
 (0)