[PATCH v3 2/2] mtd: fsl-quadspi: Fix module unbound
Brian Norris
computersforpeace at gmail.com
Fri Jan 9 12:17:43 PST 2015
OK, I still don't think you've got things right here.
Are you testing this with a two-flash system? What sort of tests?
On Wed, Jan 07, 2015 at 08:32:07AM -0200, Fabio Estevam wrote:
...
> diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
> index 20cffd2..ddb955a 100644
> --- a/drivers/mtd/spi-nor/fsl-quadspi.c
> +++ b/drivers/mtd/spi-nor/fsl-quadspi.c
> @@ -661,7 +661,7 @@ MODULE_DEVICE_TABLE(of, fsl_qspi_dt_ids);
>
> static void fsl_qspi_set_base_addr(struct fsl_qspi *q, struct spi_nor *nor)
> {
> - q->chip_base_addr = q->nor_size * (nor - q->nor);
> + q->chip_base_addr = q->nor_size * q->nor_num;
This function is called from the 'prepare' function, so it may be called
for *different* NOR devices, and it's called for each flash transaction,
not just at boot time. Now, you're making the base address into a fixed
constant for all NOR flashes attached to this controller. That's wrong.
So you need an index associated with each NOR, not just the "total
number of NOR flash" (i.e., q->nor_size). That's currently satisfied by
the pointer subtraction on the ->nor[] array.
> }
>
> static int fsl_qspi_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len)
...
Brian
More information about the linux-mtd
mailing list