@@ -186,6 +186,13 @@ static const struct jesd216_erase_type minimal_erase_types[JESD216_NUM_ERASE_TYP
186
186
};
187
187
#endif /* CONFIG_SPI_NOR_SFDP_MINIMAL */
188
188
189
+ /* Register writes should be ready extremely quickly */
190
+ #define WAIT_READY_REGISTER K_NO_WAIT
191
+ /* Page writes range from sub-ms to 10ms */
192
+ #define WAIT_READY_WRITE K_TICKS(1)
193
+ /* Erases can range from 45ms to 240sec */
194
+ #define WAIT_READY_ERASE K_MSEC(50)
195
+
189
196
static int spi_nor_write_protection_set (const struct device * dev ,
190
197
bool write_protect );
191
198
@@ -395,9 +402,10 @@ static int spi_nor_access(const struct device *const dev,
395
402
* in the code.
396
403
*
397
404
* @param dev The device structure
405
+ * @param poll_delay Duration between polls of status register
398
406
* @return 0 on success, negative errno code otherwise
399
407
*/
400
- static int spi_nor_wait_until_ready (const struct device * dev )
408
+ static int spi_nor_wait_until_ready (const struct device * dev , k_timeout_t poll_delay )
401
409
{
402
410
int ret ;
403
411
uint8_t reg ;
@@ -412,7 +420,7 @@ static int spi_nor_wait_until_ready(const struct device *dev)
412
420
}
413
421
#ifdef CONFIG_SPI_NOR_SLEEP_WHILE_WAITING_UNTIL_READY
414
422
/* Don't monopolise the CPU while waiting for ready */
415
- k_sleep (K_TICKS ( 1 ) );
423
+ k_sleep (poll_delay );
416
424
#endif /* CONFIG_SPI_NOR_SLEEP_WHILE_WAITING_UNTIL_READY */
417
425
}
418
426
return ret ;
@@ -567,7 +575,7 @@ static int spi_nor_wrsr(const struct device *dev,
567
575
if (ret == 0 ) {
568
576
ret = spi_nor_access (dev , SPI_NOR_CMD_WRSR , NOR_ACCESS_WRITE , 0 , & sr ,
569
577
sizeof (sr ));
570
- spi_nor_wait_until_ready (dev );
578
+ spi_nor_wait_until_ready (dev , WAIT_READY_REGISTER );
571
579
}
572
580
573
581
return ret ;
@@ -635,7 +643,7 @@ static int mxicy_wrcr(const struct device *dev,
635
643
636
644
ret = spi_nor_access (dev , SPI_NOR_CMD_WRSR , NOR_ACCESS_WRITE , 0 , data ,
637
645
sizeof (data ));
638
- spi_nor_wait_until_ready (dev );
646
+ spi_nor_wait_until_ready (dev , WAIT_READY_REGISTER );
639
647
}
640
648
641
649
return ret ;
@@ -781,7 +789,7 @@ static int spi_nor_write(const struct device *dev, off_t addr,
781
789
src = (const uint8_t * )src + to_write ;
782
790
addr += to_write ;
783
791
784
- spi_nor_wait_until_ready (dev );
792
+ spi_nor_wait_until_ready (dev , WAIT_READY_WRITE );
785
793
}
786
794
}
787
795
@@ -863,7 +871,7 @@ static int spi_nor_erase(const struct device *dev, off_t addr, size_t size)
863
871
*/
864
872
volatile int xcc_ret =
865
873
#endif
866
- spi_nor_wait_until_ready (dev );
874
+ spi_nor_wait_until_ready (dev , WAIT_READY_ERASE );
867
875
}
868
876
869
877
int ret2 = spi_nor_write_protection_set (dev , true);
@@ -1248,7 +1256,7 @@ static int spi_nor_configure(const struct device *dev)
1248
1256
rc = spi_nor_rdsr (dev );
1249
1257
if (rc > 0 && (rc & SPI_NOR_WIP_BIT )) {
1250
1258
LOG_WRN ("Waiting until flash is ready" );
1251
- spi_nor_wait_until_ready (dev );
1259
+ spi_nor_wait_until_ready (dev , WAIT_READY_REGISTER );
1252
1260
}
1253
1261
release_device (dev );
1254
1262
0 commit comments