diff mbox series

mtd: spi-nor: add support for Winbond W25Q512JV

Message ID 20210213151047.11700-1-mail@david-bauer.net
State Changes Requested
Delegated to: Ambarus Tudor
Headers show
Series mtd: spi-nor: add support for Winbond W25Q512JV | expand

Commit Message

David Bauer Feb. 13, 2021, 3:10 p.m. UTC
The Winbond W25Q512JV is a 512mb SPI-NOR chip. It supports 4K
sectors as well as block protection and Dual-/Quad-read.

Tested on: Ubiquiti UniFi 6 LR

Signed-off-by: David Bauer <mail@david-bauer.net>
---
 drivers/mtd/spi-nor/winbond.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Tudor Ambarus March 8, 2021, 5:50 a.m. UTC | #1
On 2/13/21 5:10 PM, David Bauer wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> The Winbond W25Q512JV is a 512mb SPI-NOR chip. It supports 4K
> sectors as well as block protection and Dual-/Quad-read.
> 
> Tested on: Ubiquiti UniFi 6 LR
> 
> Signed-off-by: David Bauer <mail@david-bauer.net>

David, I'll take Shuhao's patch because he sent it first:
https://patchwork.ozlabs.org/project/linux-mtd/patch/20210208075303.4200-1-shuhao.mai.1990@gmail.com/

Would you make an incremental patch on top op Shuhao's, to add the
locking support?

Shuhao, can you please test the locking ops with mtd-utils?


> ---
>  drivers/mtd/spi-nor/winbond.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/mtd/spi-nor/winbond.c b/drivers/mtd/spi-nor/winbond.c
> index e5dfa786f190..49d0d7993368 100644
> --- a/drivers/mtd/spi-nor/winbond.c
> +++ b/drivers/mtd/spi-nor/winbond.c
> @@ -95,6 +95,10 @@ static const struct flash_info winbond_parts[] = {
>                              SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
>         { "w25q256jw", INFO(0xef6019, 0, 64 * 1024, 512,
>                              SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
> +       { "w25q512jv", INFO(0xef4020, 0, 64 * 1024, 1024,
> +                           SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ |
> +                           SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6 |
> +                           SPI_NOR_HAS_LOCK | SPI_NOR_4BIT_BP) },

Looks good. Let's put these flags in some king of order:

SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6 |
SPI_NOR_4BIT_BP

Cheers,
ta


>         { "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
>                             SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
>  };
> --
> 2.30.1
>
David Bauer March 8, 2021, 6:03 p.m. UTC | #2
Hi Tudor,

On 3/8/21 6:50 AM, Tudor.Ambarus@microchip.com wrote:
> On 2/13/21 5:10 PM, David Bauer wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>
>> The Winbond W25Q512JV is a 512mb SPI-NOR chip. It supports 4K
>> sectors as well as block protection and Dual-/Quad-read.
>>
>> Tested on: Ubiquiti UniFi 6 LR
>>
>> Signed-off-by: David Bauer <mail@david-bauer.net>
> 
> David, I'll take Shuhao's patch because he sent it first:
> https://patchwork.ozlabs.org/project/linux-mtd/patch/20210208075303.4200-1-shuhao.mai.1990@gmail.com/

Fine with me, I have not found this patch :)

> 
> Would you make an incremental patch on top op Shuhao's, to add the
> locking support?

Sure, It's necessary for the board (UniFi 6 LR), as the bootloader locks the flash on boot.

I'll send a new patch for the lock support.

Best
David

> 
> Shuhao, can you please test the locking ops with mtd-utils?
> 
> 
>> ---
>>  drivers/mtd/spi-nor/winbond.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/mtd/spi-nor/winbond.c b/drivers/mtd/spi-nor/winbond.c
>> index e5dfa786f190..49d0d7993368 100644
>> --- a/drivers/mtd/spi-nor/winbond.c
>> +++ b/drivers/mtd/spi-nor/winbond.c
>> @@ -95,6 +95,10 @@ static const struct flash_info winbond_parts[] = {
>>                              SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
>>         { "w25q256jw", INFO(0xef6019, 0, 64 * 1024, 512,
>>                              SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
>> +       { "w25q512jv", INFO(0xef4020, 0, 64 * 1024, 1024,
>> +                           SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ |
>> +                           SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6 |
>> +                           SPI_NOR_HAS_LOCK | SPI_NOR_4BIT_BP) },
> 
> Looks good. Let's put these flags in some king of order:
> 
> SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
> SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6 |
> SPI_NOR_4BIT_BP
> 
> Cheers,
> ta
> 
> 
>>         { "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
>>                             SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
>>  };
>> --
>> 2.30.1
>>
>
Tudor Ambarus March 9, 2021, 7:53 a.m. UTC | #3
On 3/8/21 8:03 PM, David Bauer wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Hi Tudor,
> 
> On 3/8/21 6:50 AM, Tudor.Ambarus@microchip.com wrote:
>> On 2/13/21 5:10 PM, David Bauer wrote:
>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>>
>>> The Winbond W25Q512JV is a 512mb SPI-NOR chip. It supports 4K
>>> sectors as well as block protection and Dual-/Quad-read.
>>>
>>> Tested on: Ubiquiti UniFi 6 LR
>>>
>>> Signed-off-by: David Bauer <mail@david-bauer.net>
>>
>> David, I'll take Shuhao's patch because he sent it first:
>> https://patchwork.ozlabs.org/project/linux-mtd/patch/20210208075303.4200-1-shuhao.mai.1990@gmail.com/
> 
> Fine with me, I have not found this patch :)
> 
>>
>> Would you make an incremental patch on top op Shuhao's, to add the
>> locking support?
> 
> Sure, It's necessary for the board (UniFi 6 LR), as the bootloader locks the flash on boot.

Is it necessary to unlock the flash at boot time?
You can unlock the flash from user-space, using mtd-utils.

Have you tried to lock/unlock portions of the flash using mtd-utils,
and check if what was locked corresponds to what the datasheet indicates?

> 
> I'll send a new patch for the lock support.
> 
Great, thanks!
ta
Shuhao Mai March 10, 2021, 7:41 a.m. UTC | #4
On Tue, Mar 09, 2021 at 07:53:59AM +0000, Tudor.Ambarus@microchip.com wrote:
> On 3/8/21 8:03 PM, David Bauer wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> > 
> > Hi Tudor,
> > 
> > On 3/8/21 6:50 AM, Tudor.Ambarus@microchip.com wrote:
> >> On 2/13/21 5:10 PM, David Bauer wrote:
> >>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> >>>
> >>> The Winbond W25Q512JV is a 512mb SPI-NOR chip. It supports 4K
> >>> sectors as well as block protection and Dual-/Quad-read.
> >>>
> >>> Tested on: Ubiquiti UniFi 6 LR
> >>>
> >>> Signed-off-by: David Bauer <mail@david-bauer.net>
> >>
> >> David, I'll take Shuhao's patch because he sent it first:
> >> https://patchwork.ozlabs.org/project/linux-mtd/patch/20210208075303.4200-1-shuhao.mai.1990@gmail.com/
> > 
> > Fine with me, I have not found this patch :)
> > 
> >>
> >> Would you make an incremental patch on top op Shuhao's, to add the
> >> locking support?
> > 
> > Sure, It's necessary for the board (UniFi 6 LR), as the bootloader locks the flash on boot.
> 
> Is it necessary to unlock the flash at boot time?
> You can unlock the flash from user-space, using mtd-utils.
> 
> Have you tried to lock/unlock portions of the flash using mtd-utils,
> and check if what was locked corresponds to what the datasheet indicates?
> 
> > 
> > I'll send a new patch for the lock support.
> > 
> Great, thanks!
> ta

Hi Tudor and David,


I made a quick test on flash_lock with kernel 5.8.18 and mtd-utils
v2.1.2. It returns "could not lock device: /dev/mtd0" and "error 22
(Invalid argument)".

Could be the error caused by my test environment, if it's functional on
UniFi 6 LR.


Sincerely
Shuhao
diff mbox series

Patch

diff --git a/drivers/mtd/spi-nor/winbond.c b/drivers/mtd/spi-nor/winbond.c
index e5dfa786f190..49d0d7993368 100644
--- a/drivers/mtd/spi-nor/winbond.c
+++ b/drivers/mtd/spi-nor/winbond.c
@@ -95,6 +95,10 @@  static const struct flash_info winbond_parts[] = {
 			     SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 	{ "w25q256jw", INFO(0xef6019, 0, 64 * 1024, 512,
 			     SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+	{ "w25q512jv", INFO(0xef4020, 0, 64 * 1024, 1024,
+			    SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ |
+			    SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6 |
+			    SPI_NOR_HAS_LOCK | SPI_NOR_4BIT_BP) },
 	{ "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
 			    SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
 };