[PATCH u-boot-dm + u-boot-spi v2 0/7] Support SPI NORs and OF partitions in `mtd list`
Patrice CHOTARD
patrice.chotard at foss.st.com
Wed Feb 10 15:31:56 CET 2021
Hi Marek
On 2/10/21 3:14 PM, Marek Behun wrote:
> On Wed, 10 Feb 2021 14:48:23 +0100
> Patrice CHOTARD <patrice.chotard at foss.st.com> wrote:
>
>> +Patrick
>>
>> Hi All
>>
>> I have tested this series on stm32mp1-ev1 board which embeds 1 nand and 2 identical spi-nor.
>> spi-nor DT node is the following:
>>
>> &qspi {
>> pinctrl-names = "default", "sleep";
>> pinctrl-0 = <&qspi_clk_pins_a &qspi_bk1_pins_a &qspi_bk2_pins_a>;
>> pinctrl-1 = <&qspi_clk_sleep_pins_a &qspi_bk1_sleep_pins_a &qspi_bk2_sleep_pins_a>;
>> reg = <0x58003000 0x1000>, <0x70000000 0x4000000>;
>> #address-cells = <1>;
>> #size-cells = <0>;
>> status = "okay";
>>
>> flash0: mx66l51235l at 0 {
>> compatible = "jedec,spi-nor";
>> reg = <0>;
>> spi-rx-bus-width = <4>;
>> spi-max-frequency = <108000000>;
>> #address-cells = <1>;
>> #size-cells = <1>;
>> };
>>
>> flash1: mx66l51235l at 1 {
>> compatible = "jedec,spi-nor";
>> reg = <1>;
>> spi-rx-bus-width = <4>;
>> spi-max-frequency = <108000000>;
>> #address-cells = <1>;
>> #size-cells = <1>;
>> };
>> };
>>
>> As is, this series is not able to differentiate the both identical spi-nor using the MTD framework.
>> Both spi-nor have the same name "mx66l51235l" as shown below, and usage of mtd command is not possible to reach
>> both spi-nor:
>>
>> STM32MP> mtd list
>> List of MTD devices:
>> * nand0
>> - type: NAND flash
>> - block size: 0x40000 bytes
>> - min I/O: 0x1000 bytes
>> - OOB size: 224 bytes
>> - OOB available: 118 bytes
>> - ECC strength: 8 bits
>> - ECC step size: 512 bytes
>> - bitflip threshold: 6 bits
>> - 0x000000000000-0x000040000000 : "nand0"
>> * mx66l51235l
>> - device: mx66l51235l at 0
>> - parent: spi at 58003000
>> - driver: jedec_spi_nor
>> - type: NOR flash
>> - block size: 0x10000 bytes
>> - min I/O: 0x1 bytes
>> - 0x000000000000-0x000004000000 : "mx66l51235l"
>> * mx66l51235l
>> - device: mx66l51235l at 1
>> - parent: spi at 58003000
>> - driver: jedec_spi_nor
>> - type: NOR flash
>> - block size: 0x10000 bytes
>> - min I/O: 0x1 bytes
>> - 0x000000000000-0x000004000000 : "mx66l51235l"
>>
>> The following patch fix it :
>>
>> @@ -2528,11 +2528,11 @@ int spi_nor_scan(struct spi_nor *nor)
>> ret = spi_nor_init_params(nor, info, ¶ms);
>> if (ret)
>> return ret;
>>
>> if (!mtd->name)
>> - mtd->name = info->name;
>> + mtd->name = (char *)nor->dev->name;
>> mtd->dev = nor->dev;
>> mtd->priv = nor;
>> mtd->type = MTD_NORFLASH;
>> mtd->writesize = 1;
>> mtd->flags = MTD_CAP_NORFLASH;
>>
>>
>>
>> Now it looks like :
>>
>> STM32MP> mtd list
>> List of MTD devices:
>> * nand0
>> - type: NAND flash
>> - block size: 0x40000 bytes
>> - min I/O: 0x1000 bytes
>> - OOB size: 224 bytes
>> - OOB available: 118 bytes
>> - ECC strength: 8 bits
>> - ECC step size: 512 bytes
>> - bitflip threshold: 6 bits
>> - 0x000000000000-0x000040000000 : "nand0"
>> * mx66l51235l at 0
>> - device: mx66l51235l at 0
>> - parent: spi at 58003000
>> - driver: jedec_spi_nor
>> - type: NOR flash
>> - block size: 0x10000 bytes
>> - min I/O: 0x1 bytes
>> - 0x000000000000-0x000004000000 : "mx66l51235l at 0"
>> * mx66l51235l at 1
>> - device: mx66l51235l at 1
>> - parent: spi at 58003000
>> - driver: jedec_spi_nor
>> - type: NOR flash
>> - block size: 0x10000 bytes
>> - min I/O: 0x1 bytes
>> - 0x000000000000-0x000004000000 : "mx66l51235l at 1"
>> STM32MP>
>>
>> Everything goes fine, i observed one side effect regarding "sf probe" command:
>>
>> STM32MP> sf probe
>> SF: Detected mx66l51235l at 0 with page size 256 Bytes, erase size 64 KiB, total 64 MiB
>> STM32MP> sf probe 1
>> SF: Detected mx66l51235l at 1 with page size 256 Bytes, erase size 64 KiB, total 64 MiB
>>
>> Here the flash name is mx66l51235l at 0 or mx66l51235l at 1 and no more mx66l51235l.
>
> I too tried that change (using (char *)nor->dev->name as mtd name).
>
> The thing is that the name "mx66l51235l" is determined from the SPI NOR
> ID (not the device-tree), so if you solder a different NOR, the name
> will be different. Meanwhile dts name is always the same.
Ok got it, i didn't pay attention to the fact nor->dev->name doesn't come from spi-nor-ids but from DT .... :-(
>
> I think the mtd command should at least inform the user what kind of SPI
> NOR is soldered on the board.
Fully agree
>
> So one solution is to use device-tree name to select the NOR, but still
> print the name determined from SPI ID somewhere.
>
> Second solution is to allow selecting the SPI by number, i.e. (the n-th
> enumerated SPI).
and what about <name from SPI id>@<chip select> as shown in my previous email ?
>
> (BTW regarding your dts node names, the node names should be spi-nor at 0
> and spi-nor at 1. Yes, I know that spi-nor is not documented in
> device-tree bindings yet, but this would be consistent with other
> device-tree bindings in Linux.)
You are right
Patrice
>
> Marek
>
More information about the U-Boot
mailing list