lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230324144559.3473c537@xps-13>
Date:   Fri, 24 Mar 2023 14:45:59 +0100
From:   Miquel Raynal <miquel.raynal@...tlin.com>
To:     Álvaro Fernández Rojas <noltari@...il.com>
Cc:     richard@....at, vigneshr@...com, robh+dt@...nel.org,
        krzysztof.kozlowski+dt@...aro.org, masonccyang@...c.com.tw,
        linux-mtd@...ts.infradead.org, devicetree@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] dt-bindings: mtd: nand: Macronix: document new
 binding

Hi Álvaro,

noltari@...il.com wrote on Fri, 24 Mar 2023 12:21:11 +0100:

> El vie, 24 mar 2023 a las 11:49, Miquel Raynal
> (<miquel.raynal@...tlin.com>) escribió:
> >
> > Hi Álvaro,
> >
> > noltari@...il.com wrote on Fri, 24 Mar 2023 11:31:17 +0100:
> >  
> > > Hi Miquèl,
> > >
> > > El vie, 24 mar 2023 a las 10:40, Miquel Raynal
> > > (<miquel.raynal@...tlin.com>) escribió:  
> > > >
> > > > Hi Álvaro,
> > > >
> > > > noltari@...il.com wrote on Thu, 23 Mar 2023 13:45:09 +0100:
> > > >  
> > > > > Add new "mxic,disable-block-protection" binding documentation.
> > > > > This binding allows disabling block protection support for those devices not
> > > > > supporting it.
> > > > >
> > > > > Signed-off-by: Álvaro Fernández Rojas <noltari@...il.com>
> > > > > ---
> > > > >  Documentation/devicetree/bindings/mtd/nand-macronix.txt | 3 +++
> > > > >  1 file changed, 3 insertions(+)
> > > > >
> > > > > diff --git a/Documentation/devicetree/bindings/mtd/nand-macronix.txt b/Documentation/devicetree/bindings/mtd/nand-macronix.txt
> > > > > index ffab28a2c4d1..03f65ca32cd3 100644
> > > > > --- a/Documentation/devicetree/bindings/mtd/nand-macronix.txt
> > > > > +++ b/Documentation/devicetree/bindings/mtd/nand-macronix.txt
> > > > > @@ -16,6 +16,9 @@ in children nodes.
> > > > >  Required NAND chip properties in children mode:
> > > > >  - randomizer enable: should be "mxic,enable-randomizer-otp"
> > > > >
> > > > > +Optional NAND chip properties in children mode:
> > > > > +- block protection disable: should be "mxic,disable-block-protection"
> > > > > +  
> > > >
> > > > Besides the fact that nowadays we prefer to see binding conversions to
> > > > yaml before adding anything, I don't think this will fly.
> > > >
> > > > I'm not sure exactly what "disable block protection" means, we
> > > > already have similar properties like "lock" and "secure-regions", not
> > > > sure they will fit but I think it's worth checking.  
> > >
> > > As explained in 2/2, commit 03a539c7a118 introduced a regression on
> > > Sercomm H500-s (BCM63268) OpenWrt devices with Macronix MX30LF1G18AC
> > > which hangs the device.
> > >
> > > This is the log with block protection disabled:
> > > [    0.495831] bcm6368_nand 10000200.nand: there is not valid maps for
> > > state default
> > > [    0.504995] nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xf1
> > > [    0.511526] nand: Macronix MX30LF1G18AC
> > > [    0.515586] nand: 128 MiB, SLC, erase size: 128 KiB, page size:
> > > 2048, OOB size: 64
> > > [    0.523516] bcm6368_nand 10000200.nand: detected 128MiB total,
> > > 128KiB blocks, 2KiB pages, 16B OOB, 8-bit, BCH-4
> > > [    0.535912] Bad block table found at page 65472, version 0x01
> > > [    0.544268] Bad block table found at page 65408, version 0x01
> > > [    0.954329] 9 fixed-partitions partitions found on MTD device brcmnand.0
> > > ...
> > >
> > > This is the log with block protection enabled:
> > > [    0.495095] bcm6368_nand 10000200.nand: there is not valid maps for
> > > state default
> > > [    0.504249] nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xf1
> > > [    0.510772] nand: Macronix MX30LF1G18AC
> > > [    0.514874] nand: 128 MiB, SLC, erase size: 128 KiB, page size:
> > > 2048, OOB size: 64
> > > [    0.522780] bcm6368_nand 10000200.nand: detected 128MiB total,
> > > 128KiB blocks, 2KiB pages, 16B OOB, 8-bit, BCH-4
> > > [    0.539687] Bad block table not found for chip 0
> > > [    0.550153] Bad block table not found for chip 0
> > > [    0.555069] Scanning device for bad blocks
> > > [    0.601213] CPU 1 Unable to handle kernel paging request at virtual
> > > address 10277f00, epc == 8039ce70, ra == 8016ad50
> > > *** Device hangs ***
> > >
> > > Enabling macronix_nand_block_protection_support() makes the device
> > > unable to detect the bad block table and hangs it when trying to scan
> > > for bad blocks.  
> >
> > Please trace nand_macronix.c and look:
> > - are the get_features and set_features really supported by the
> >   controller driver?  
> 
> This is what I could find by debugging:
> [    0.494993] bcm6368_nand 10000200.nand: there is not valid maps for
> state default
> [    0.505375] nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xf1
> [    0.512077] nand: Macronix MX30LF1G18AC
> [    0.515994] nand: 128 MiB, SLC, erase size: 128 KiB, page size:
> 2048, OOB size: 64
> [    0.523928] bcm6368_nand 10000200.nand: detected 128MiB total,
> 128KiB blocks, 2KiB pages, 16B OOB, 8-bit, BCH-4
> [    0.534415] bcm6368_nand 10000200.nand: ll_op cmd 0xa00ee
> [    0.539988] bcm6368_nand 10000200.nand: ll_op cmd 0x600a0
> [    0.545659] bcm6368_nand 10000200.nand: ll_op cmd 0x10000
> [    0.551214] bcm6368_nand 10000200.nand: NAND_CMD_GET_FEATURES = 0x00
> [    0.557843] bcm6368_nand 10000200.nand: ll_op cmd 0x10000
> [    0.563475] bcm6368_nand 10000200.nand: NAND_CMD_GET_FEATURES = 0x00
> [    0.569998] bcm6368_nand 10000200.nand: ll_op cmd 0x10000
> [    0.575653] bcm6368_nand 10000200.nand: NAND_CMD_GET_FEATURES = 0x00
> [    0.582246] bcm6368_nand 10000200.nand: ll_op cmd 0x80010000
> [    0.588067] bcm6368_nand 10000200.nand: NAND_CMD_GET_FEATURES = 0x00
> [    0.594657] nand: nand_get_features: addr=a0 subfeature_param=[00
> 00 00 00] -> 0
> [    0.602341] macronix_nand_block_protection_support:
> ONFI_FEATURE_ADDR_MXIC_PROTECTION=0
> [    0.610548] macronix_nand_block_protection_support: !=
> MXIC_BLOCK_PROTECTION_ALL_LOCK
> [    0.624760] Bad block table not found for chip 0
> [    0.635542] Bad block table not found for chip 0
> [    0.640270] Scanning device for bad blocks
> 
> I don't know how to tell if get_features / set_features is really supported...

Looks like your driver does not support exec_op but the core provides a
get/set_feature implementation.

> 
> > - what is the state of the locking configuration in the chip when you
> >   boot?  
> 
> Unlocked, I guess...
> How can I check that?

It's in your dump, the chip returns 0, meaning it's all unlocked,
apparently.

> > - is there anything that locks the device by calling mxic_nand_lock() ?

So nobody locks the device I guess? Did you add traces there?

> > - finding no bbt is one thing, hanging is another, where is it hanging
> >   exactly? (offset in nand/ and line in the code)  
> 
> I've got no idea...

You can use ftrace or just add printks a bit everywhere and try to get
closer and closer.

I looked at the patch, I don't see anything strange. Besides, I have a
close enough datasheet and I don't see what could confuse the device.

Are you really sure this patch is the problem? Is the WP pin wired on
your design?

Thanks,
Miquèl

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ