[PATCH V2] mtd: bcm47xxsflash: support reading flash out of mapping window

Rafał Miłecki zajec5 at gmail.com
Tue Jan 17 03:08:01 PST 2017


On 17 January 2017 at 12:00, Marek Vasut <marek.vasut at gmail.com> wrote:
> On 01/17/2017 11:51 AM, Rafał Miłecki wrote:
>> From: Rafał Miłecki <rafal at milecki.pl>
>>
>> For reading flash content we use MMIO but it's possible to read only
>> first 16 MiB this way. It's simply an arch design/limitation.
>> To support flash sizes bigger than 16 MiB implement indirect access
>> using ChipCommon registers.
>> This has been tested using MX25L25635F.
>>
>> Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
>> ---
>> V2: Simplify line writing to buf
>>     Add some trivial comment for OPCODE_ST_READ4B
>>     Both requested by Marek
>> ---
>>  drivers/mtd/devices/bcm47xxsflash.c | 12 +++++++++++-
>>  drivers/mtd/devices/bcm47xxsflash.h |  3 +++
>>  2 files changed, 14 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mtd/devices/bcm47xxsflash.c b/drivers/mtd/devices/bcm47xxsflash.c
>> index 4decd8c..8d4c1db 100644
>> --- a/drivers/mtd/devices/bcm47xxsflash.c
>> +++ b/drivers/mtd/devices/bcm47xxsflash.c
>> @@ -110,7 +110,17 @@ static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len,
>>       if ((from + len) > mtd->size)
>>               return -EINVAL;
>>
>> -     memcpy_fromio(buf, b47s->window + from, len);
>> +     if (from + len <= BCM47XXSFLASH_WINDOW_SIZE) {
>> +             memcpy_fromio(buf, b47s->window + from, len);
>
> One last nit, what if the read starts < 16 MiB and ends > 16 MiB ?
> Shouldn't that use partly the windowed mode and partly the other mode?

You'll lost 10ns*... or not as splitting it into 2 code paths could
take longer, who knows. Most access are block aligned anyway. I don't
think such corner case with doubtful gain is much worth considering &
optimizing.

* Statistic from my mind



More information about the linux-mtd mailing list