|
@@ -2604,18 +2604,28 @@ static int spi_nor_init_params(struct spi_nor *nor,
|
|
|
params->size = info->sector_size * info->n_sectors;
|
|
|
params->page_size = info->page_size;
|
|
|
|
|
|
+ if (!(info->flags & SPI_NOR_NO_FR)) {
|
|
|
+ /* Default to Fast Read for DT and non-DT platform devices. */
|
|
|
+ params->hwcaps.mask |= SNOR_HWCAPS_READ_FAST;
|
|
|
+
|
|
|
+ /* Mask out Fast Read if not requested at DT instantiation. */
|
|
|
+#if CONFIG_IS_ENABLED(DM_SPI)
|
|
|
+ if (!ofnode_read_bool(dev_ofnode(nor->spi->dev),
|
|
|
+ "m25p,fast-read"))
|
|
|
+ params->hwcaps.mask &= ~SNOR_HWCAPS_READ_FAST;
|
|
|
+#endif
|
|
|
+ }
|
|
|
+
|
|
|
/* (Fast) Read settings. */
|
|
|
params->hwcaps.mask |= SNOR_HWCAPS_READ;
|
|
|
spi_nor_set_read_settings(¶ms->reads[SNOR_CMD_READ],
|
|
|
0, 0, SPINOR_OP_READ,
|
|
|
SNOR_PROTO_1_1_1);
|
|
|
|
|
|
- if (!(info->flags & SPI_NOR_NO_FR)) {
|
|
|
- params->hwcaps.mask |= SNOR_HWCAPS_READ_FAST;
|
|
|
+ if (params->hwcaps.mask & SNOR_HWCAPS_READ_FAST)
|
|
|
spi_nor_set_read_settings(¶ms->reads[SNOR_CMD_READ_FAST],
|
|
|
0, 8, SPINOR_OP_READ_FAST,
|
|
|
SNOR_PROTO_1_1_1);
|
|
|
- }
|
|
|
|
|
|
if (info->flags & SPI_NOR_DUAL_READ) {
|
|
|
params->hwcaps.mask |= SNOR_HWCAPS_READ_1_1_2;
|
|
@@ -2858,10 +2868,11 @@ spi_nor_adjust_hwcaps(struct spi_nor *nor,
|
|
|
unsigned int cap;
|
|
|
|
|
|
/*
|
|
|
- * Enable all caps by default. We will mask them after checking what's
|
|
|
- * really supported using spi_mem_supports_op().
|
|
|
+ * Start by assuming the controller supports every capability.
|
|
|
+ * We will mask them after checking what's really supported
|
|
|
+ * using spi_mem_supports_op().
|
|
|
*/
|
|
|
- *hwcaps = SNOR_HWCAPS_ALL;
|
|
|
+ *hwcaps = SNOR_HWCAPS_ALL & params->hwcaps.mask;
|
|
|
|
|
|
/* X-X-X modes are not supported yet, mask them all. */
|
|
|
*hwcaps &= ~SNOR_HWCAPS_X_X_X;
|