Message ID | 20220228134505.203270-7-tudor.ambarus@microchip.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mtd: spi-nor: Handle ID collisions | expand |
Am 2022-02-28 14:45, schrieb Tudor Ambarus: > Flash does not support continuation codes and may collide with a flash > of other manufacturer, Intersil being an example. Add support for > xt25f128b. > > Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> > --- > 0000000 4653 5044 0100 ff01 0000 0901 0030 ff00 > 0000010 000b 0301 0060 ff00 ffff ffff ffff ffff > 0000020 ffff ffff ffff ffff ffff ffff ffff ffff > 0000030 20e5 fff1 ffff 07ff eb44 6b08 3b08 bb42 > 0000040 ffee ffff ffff ff00 ffff ff00 200c 520f > 0000050 d810 ff00 ffff ffff ffff ffff ffff ffff > 0000060 3600 2700 f99f 6477 e8d9 ffff You don't have this flash no? because the md5sum is missing. > > drivers/mtd/spi-nor/manuf-id-collisions.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/mtd/spi-nor/manuf-id-collisions.c > b/drivers/mtd/spi-nor/manuf-id-collisions.c > index 75c5ad6480ee..0447e245f4b1 100644 > --- a/drivers/mtd/spi-nor/manuf-id-collisions.c > +++ b/drivers/mtd/spi-nor/manuf-id-collisions.c > @@ -17,6 +17,15 @@ static const struct spi_nor_fixups boya_nor_fixups = > { > .late_init = boya_nor_late_init, > }; > > +static void xtx_nor_late_init(struct spi_nor *nor) > +{ > + nor->manufacturer_name = "xtx"; > +} > + > +static const struct spi_nor_fixups xtx_nor_fixups = { > + .late_init = xtx_nor_late_init, > +}; > + > static const struct flash_info id_collision_parts[] = { > /* Boya */ > { "by25q128as", INFO(0x684018, 0, 64 * 1024, 256) > @@ -24,6 +33,11 @@ static const struct flash_info id_collision_parts[] > = { > NO_SFDP_FLAGS(SPI_NOR_SKIP_SFDP | SECT_4K | SPI_NOR_DUAL_READ | > SPI_NOR_QUAD_READ) > .fixups = &boya_nor_fixups }, > + > + /* XTX (XTX Technology Limited) */ > + { "xt25f128b", INFO(0x0b4018, 0, 64 * 1024, 256) > + PARSE_SFDP > + .fixups = &xtx_nor_fixups }, I'd suggest to order the entries by the id to make it easier to spot collisions. -michael
On Tue, Mar 01, 2022 at 11:23:24PM +0100, Michael Walle wrote: > Am 2022-02-28 14:45, schrieb Tudor Ambarus: > > Flash does not support continuation codes and may collide with a flash > > of other manufacturer, Intersil being an example. Add support for > > xt25f128b. > > > > Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> > > --- > > 0000000 4653 5044 0100 ff01 0000 0901 0030 ff00 > > 0000010 000b 0301 0060 ff00 ffff ffff ffff ffff > > 0000020 ffff ffff ffff ffff ffff ffff ffff ffff > > 0000030 20e5 fff1 ffff 07ff eb44 6b08 3b08 bb42 > > 0000040 ffee ffff ffff ff00 ffff ff00 200c 520f > > 0000050 d810 ff00 ffff ffff ffff ffff ffff ffff > > 0000060 3600 2700 f99f 6477 e8d9 ffff > > You don't have this flash no? because the md5sum is > missing. I have this flash, what do you need from me? I haven't had a chance to test this just yet, but I'm about to. I'll report back with my status. Chris > > > > > drivers/mtd/spi-nor/manuf-id-collisions.c | 14 ++++++++++++++ > > 1 file changed, 14 insertions(+) > > > > diff --git a/drivers/mtd/spi-nor/manuf-id-collisions.c > > b/drivers/mtd/spi-nor/manuf-id-collisions.c > > index 75c5ad6480ee..0447e245f4b1 100644 > > --- a/drivers/mtd/spi-nor/manuf-id-collisions.c > > +++ b/drivers/mtd/spi-nor/manuf-id-collisions.c > > @@ -17,6 +17,15 @@ static const struct spi_nor_fixups boya_nor_fixups = > > { > > .late_init = boya_nor_late_init, > > }; > > > > +static void xtx_nor_late_init(struct spi_nor *nor) > > +{ > > + nor->manufacturer_name = "xtx"; > > +} > > + > > +static const struct spi_nor_fixups xtx_nor_fixups = { > > + .late_init = xtx_nor_late_init, > > +}; > > + > > static const struct flash_info id_collision_parts[] = { > > /* Boya */ > > { "by25q128as", INFO(0x684018, 0, 64 * 1024, 256) > > @@ -24,6 +33,11 @@ static const struct flash_info id_collision_parts[] = > > { > > NO_SFDP_FLAGS(SPI_NOR_SKIP_SFDP | SECT_4K | SPI_NOR_DUAL_READ | > > SPI_NOR_QUAD_READ) > > .fixups = &boya_nor_fixups }, > > + > > + /* XTX (XTX Technology Limited) */ > > + { "xt25f128b", INFO(0x0b4018, 0, 64 * 1024, 256) > > + PARSE_SFDP > > + .fixups = &xtx_nor_fixups }, > > I'd suggest to order the entries by the id to make it > easier to spot collisions. > > -michael
On 3/3/22 23:04, Chris Morgan wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > On Tue, Mar 01, 2022 at 11:23:24PM +0100, Michael Walle wrote: >> Am 2022-02-28 14:45, schrieb Tudor Ambarus: >>> Flash does not support continuation codes and may collide with a flash >>> of other manufacturer, Intersil being an example. Add support for >>> xt25f128b. >>> >>> Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> >>> --- >>> 0000000 4653 5044 0100 ff01 0000 0901 0030 ff00 >>> 0000010 000b 0301 0060 ff00 ffff ffff ffff ffff >>> 0000020 ffff ffff ffff ffff ffff ffff ffff ffff >>> 0000030 20e5 fff1 ffff 07ff eb44 6b08 3b08 bb42 >>> 0000040 ffee ffff ffff ff00 ffff ff00 200c 520f >>> 0000050 d810 ff00 ffff ffff ffff ffff ffff ffff >>> 0000060 3600 2700 f99f 6477 e8d9 ffff >> >> You don't have this flash no? because the md5sum is >> missing. > > I have this flash, what do you need from me? Hi, Chris, Thanks for getting back! I would need you to dump all the SPI NOR sysfs entries and then do a little test. Here's an example: # cat /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/jedec_id c22018 # cat /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/manufacturer macronix # cat /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/partname mx25l12835f # xxd -p /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/sfdp 53464450000101ff00000109300000ffc2000104600000ffffffffffffff ffffffffffffffffffffffffffffffffffffe520f1ffffffff0744eb086b 083b04bbfeffffffffff00ffffff44eb0c200f5210d800ffffffffffffff ffffffffffff003600279df9c06485cbffffffffffff # sha1sum /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/sfdp c5e5abe6c5650a9d9c448690b1eeebdf5bfe57d4 /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/sfdp And then an erase, write, read back and compare test. 1/ generate a 6M file: dd if=/dev/urandom of=./nor_test bs=1M count=6 2/ read first 6MB from flash and check if is already erased: time mtd_debug read /dev/mtd5 0 6291456 nor_read hexdump nor_read If at the hexdump you'll see anything that just 0xff, the flash has something written to it and you can go to step 3. If you'll see just 0xff data, then jump at 4/ 3/ verify if the erase is successful, then do a write, read-back and compare test. time mtd_debug erase /dev/mtd5 0 6291456 time mtd_debug read /dev/mtd5 0 6291456 nor_read hexdump nor_read time mtd_debug write /dev/mtd5 0 6291456 nor_test time mtd_debug read /dev/mtd5 0 6291456 nor_read sha1sum nor_test nor_read If you reached here the test ends, you can ignore 4/. 4/ if you reached here the first 6MB of the flash is already erased. Do a write read back and compare test, followed by an erase test: time mtd_debug write /dev/mtd5 0 6291456 nor_test time mtd_debug read /dev/mtd5 0 6291456 nor_read sha1sum nor_test nor_read time mtd_debug erase /dev/mtd5 0 6291456 time mtd_debug read /dev/mtd5 0 6291456 nor_read hexdump nor_read
On Thu, Mar 03, 2022 at 11:50:34PM +0000, Tudor.Ambarus@microchip.com wrote: > On 3/3/22 23:04, Chris Morgan wrote: > > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > > > On Tue, Mar 01, 2022 at 11:23:24PM +0100, Michael Walle wrote: > >> Am 2022-02-28 14:45, schrieb Tudor Ambarus: > >>> Flash does not support continuation codes and may collide with a flash > >>> of other manufacturer, Intersil being an example. Add support for > >>> xt25f128b. > >>> > >>> Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> > >>> --- > >>> 0000000 4653 5044 0100 ff01 0000 0901 0030 ff00 > >>> 0000010 000b 0301 0060 ff00 ffff ffff ffff ffff > >>> 0000020 ffff ffff ffff ffff ffff ffff ffff ffff > >>> 0000030 20e5 fff1 ffff 07ff eb44 6b08 3b08 bb42 > >>> 0000040 ffee ffff ffff ff00 ffff ff00 200c 520f > >>> 0000050 d810 ff00 ffff ffff ffff ffff ffff ffff > >>> 0000060 3600 2700 f99f 6477 e8d9 ffff > >> > >> You don't have this flash no? because the md5sum is > >> missing. > > > > I have this flash, what do you need from me? > > Hi, Chris, > > Thanks for getting back! > > I would need you to dump all the SPI NOR sysfs entries and then do a little > test. Here's an example: > # cat /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/jedec_id > c22018 > # cat /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/manufacturer > macronix > # cat /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/partname > mx25l12835f > # xxd -p /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/sfdp > 53464450000101ff00000109300000ffc2000104600000ffffffffffffff > ffffffffffffffffffffffffffffffffffffe520f1ffffffff0744eb086b > 083b04bbfeffffffffff00ffffff44eb0c200f5210d800ffffffffffffff > ffffffffffff003600279df9c06485cbffffffffffff > # sha1sum /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/sfdp > c5e5abe6c5650a9d9c448690b1eeebdf5bfe57d4 > /sys/devices/platform/soc@0/30800000.bus/30bb0000.spi/spi_master/spi0/spi0.0/spi-nor/sfdp > > And then an erase, write, read back and compare test. > 1/ generate a 6M file: > dd if=/dev/urandom of=./nor_test bs=1M count=6 > 2/ read first 6MB from flash and check if is already erased: > time mtd_debug read /dev/mtd5 0 6291456 nor_read > hexdump nor_read > If at the hexdump you'll see anything that just 0xff, the flash has > something written to it and you can go to step 3. If you'll see just 0xff > data, then jump at 4/ > > 3/ verify if the erase is successful, then do a write, read-back and compare test. > time mtd_debug erase /dev/mtd5 0 6291456 > time mtd_debug read /dev/mtd5 0 6291456 nor_read > hexdump nor_read > time mtd_debug write /dev/mtd5 0 6291456 nor_test > time mtd_debug read /dev/mtd5 0 6291456 nor_read > sha1sum nor_test nor_read > > If you reached here the test ends, you can ignore 4/. > > 4/ if you reached here the first 6MB of the flash is already erased. Do a write > read back and compare test, followed by an erase test: > time mtd_debug write /dev/mtd5 0 6291456 nor_test > time mtd_debug read /dev/mtd5 0 6291456 nor_read > sha1sum nor_test nor_read > time mtd_debug erase /dev/mtd5 0 6291456 > time mtd_debug read /dev/mtd5 0 6291456 nor_read > hexdump nor_read Looks good to me. See below for test outputs. Thank you for all your hard work on this. Tested-by: Chris Morgan <macromorgan@hotmail.com> # cat /sys/bus/spi/devices/spi2.0/spi-nor/jedec_id 0b4018 # cat /sys/bus/spi/devices/spi2.0/spi-nor/manufacturer xtx # cat /sys/bus/spi/devices/spi2.0/spi-nor/partname xt25f128b # xxd -p /sys/bus/spi/devices/spi2.0/spi-nor/sfdp 53464450000101ff00000109300000ff0b000103600000ffffffffffffff ffffffffffffffffffffffffffffffffffffe520f1ffffffff0744eb086b 083b42bbeeffffffffff00ffffff00ff0c200f5210d800ffffffffffffff ffffffffffff003600279ff97764d9e8ffff # sha1sum /sys/bus/spi/devices/spi2.0/spi-nor/sfdp 191346c29bddd9ea16bc59727c390df50687313f /sys/bus/spi/devices/spi2.0/spi-nor/sfdp # time mtd_debug erase /dev/mtd0 0 6291456 Erased 6291456 bytes from address 0x00000000 in flash real 2m7.957s user 0m0.001s sys 2m7.868s # time mtd_debug read /dev/mtd0 0 6291456 nor_read Copied 6291456 bytes from address 0x00000000 in flash to nor_read real 0m0.785s user 0m0.000s sys 0m0.259s # hexdump nor_read 0000000 ffff ffff ffff ffff ffff ffff ffff ffff * 0600000 # time mtd_debug write /dev/mtd0 0 6291456 nor_test Copied 6291456 bytes from nor_test to address 0x00000000 in flash real 0m8.851s user 0m0.000s sys 0m6.020s # time mtd_debug read /dev/mtd0 0 6291456 nor_read Copied 6291456 bytes from address 0x00000000 in flash to nor_read real 0m0.811s user 0m0.000s sys 0m0.285s # sha1sum nor_test nor_read 1404362fff3b2f8a79f8090901a5276e66598b72 nor_test 1404362fff3b2f8a79f8090901a5276e66598b72 nor_read
diff --git a/drivers/mtd/spi-nor/manuf-id-collisions.c b/drivers/mtd/spi-nor/manuf-id-collisions.c index 75c5ad6480ee..0447e245f4b1 100644 --- a/drivers/mtd/spi-nor/manuf-id-collisions.c +++ b/drivers/mtd/spi-nor/manuf-id-collisions.c @@ -17,6 +17,15 @@ static const struct spi_nor_fixups boya_nor_fixups = { .late_init = boya_nor_late_init, }; +static void xtx_nor_late_init(struct spi_nor *nor) +{ + nor->manufacturer_name = "xtx"; +} + +static const struct spi_nor_fixups xtx_nor_fixups = { + .late_init = xtx_nor_late_init, +}; + static const struct flash_info id_collision_parts[] = { /* Boya */ { "by25q128as", INFO(0x684018, 0, 64 * 1024, 256) @@ -24,6 +33,11 @@ static const struct flash_info id_collision_parts[] = { NO_SFDP_FLAGS(SPI_NOR_SKIP_SFDP | SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) .fixups = &boya_nor_fixups }, + + /* XTX (XTX Technology Limited) */ + { "xt25f128b", INFO(0x0b4018, 0, 64 * 1024, 256) + PARSE_SFDP + .fixups = &xtx_nor_fixups }, }; const struct spi_nor_manufacturer spi_nor_manuf_id_collisions = {
Flash does not support continuation codes and may collide with a flash of other manufacturer, Intersil being an example. Add support for xt25f128b. Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> --- 0000000 4653 5044 0100 ff01 0000 0901 0030 ff00 0000010 000b 0301 0060 ff00 ffff ffff ffff ffff 0000020 ffff ffff ffff ffff ffff ffff ffff ffff 0000030 20e5 fff1 ffff 07ff eb44 6b08 3b08 bb42 0000040 ffee ffff ffff ff00 ffff ff00 200c 520f 0000050 d810 ff00 ffff ffff ffff ffff ffff ffff 0000060 3600 2700 f99f 6477 e8d9 ffff drivers/mtd/spi-nor/manuf-id-collisions.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)