diff options
Diffstat (limited to 'drivers/mtd/spi/spi-nor-core.c')
| -rw-r--r-- | drivers/mtd/spi/spi-nor-core.c | 23 | 
1 files changed, 17 insertions, 6 deletions
| diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c index 99e2f16349a..d5d905fa5a1 100644 --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c @@ -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; | 
