[PATCH 2/2] arm: mvebu: Espressobin: Setup MTD partitions when booting kernel
Pali Rohár
pali at kernel.org
Thu Aug 20 13:45:41 CEST 2020
On Thursday 20 August 2020 13:19:34 Stefan Roese wrote:
> On 20.08.20 13:12, Pali Rohár wrote:
> > On Thursday 20 August 2020 10:51:28 Pali Rohár wrote:
> > > On Thursday 20 August 2020 10:17:55 Stefan Roese wrote:
> > > > On 20.08.20 09:40, Pali Rohár wrote:
> > > > > On Thursday 20 August 2020 07:02:18 Stefan Roese wrote:
> > > > > > Can't you just use "mtdparts=" kernel cmdline parameter instead to pass
> > > > > > the MTD layout to the kernel?
> > > > >
> > > > > Maybe it is possible too, I have not tried it.
> > > > >
> > > > > I thought that more common is to update DTS file by uboot when loading
> > > > > kernel as it is already done e.g. for ethernet MAC address on
> > > > > Espressobin.
> > > >
> > > > Updating the MAC address is very common, yes. But passing the
> > > > MTD partition layout via the mtdparts= cmdline is also very
> > > > common and used very frequently. From my experience, its the
> > > > defacto recommended method to pass this info and also easier than
> > > > generating these DTS lines via some code.
> > > >
> > > > Please take a look at the mtdparts U-Boot command and its usage
> > > > in other targets.
> > > >
> > > > > Also I see that uboot has function fdt_fixup_mtdparts() via
> > > > > CONFIG_FDT_FIXUP_PARTITIONS option which do this, but uses uboot MTD
> > > > > code which IIRC cannot initialize SPI NOR.
> > > >
> > > > Why not?
> > >
> > > I had an impression that U-Boot does not support.
> > >
> > > > SPI NOR is also integrated into the U-Boot MTD world as
> > > > well. Please see this GARDENA MT7688 target, which uses SPI NOR &
> > > > SPI NAND:
> > >
> > > Ok, I'm going to look at it.
> >
> > With following config
> >
> > CONFIG_MTD=y
> > CONFIG_CMD_MTD=y
> > CONFIG_CMD_MTDPARTS=y
> > CONFIG_SPI_FLASH_MTD=y
> > CONFIG_MTDIDS_DEFAULT="nor0=nor0"
> >
> > I get following result:
> >
> > => mtd list
> > List of MTD devices:
> > No MTD device found
> > => mtdparts
> > Device nor0 not found!
> > => sf probe
> > SF: Detected w25q32dw with page size 256 Bytes, erase size 4 KiB, total 4 MiB
> > => mtdparts
> > => mtd list
> > List of MTD devices:
> > * nor0
> > - type: NOR flash
> > - block size: 0x1000 bytes
> > - min I/O: 0x1 bytes
> > - 0x000000000000-0x000000400000 : "nor0"
> >
> > So main problem is that MTD does not work until I call 'sf probe' in
> > uboot command line.
>
> Then a dependency seems to be missing here. On my MT7688 board I get
> this:
>
> U-Boot 2020.07-rc5-00075-g0b7d95531c-dirty (Jun 30 2020 - 09:51:39 +0200)
>
> CPU: MediaTek MT7688A ver:1 eco:2
> Boot: DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
> Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
> Model: GARDENA smart Gateway (MT7688)
> DRAM: 128 MiB
> WDT: Started with servicing (60s timeout)
> Loading Environment from SPI Flash... SF: Detected XM25QH64A with page size
> 256 Bytes, erase size 4 KiB, total 8 MiB
> OK
> F-Data:factory-data version 1 detected
> Net: eth0: eth at 10110000
> Hit any key to stop autoboot: 0
> => dm tree
> Class Index Probed Driver Name
> -----------------------------------------------------------
> root 0 [ + ] root_driver root_driver
> ...
> spi 0 [ + ] mt7621_spi | |-- spi at b00
> spi_flash 0 [ + ] spi_flash_std | | |-- spi-flash at 0
> mtd 0 [ ] spi_nand | | `-- spi-nand at 1
> ...
> => mtd list
> List of MTD devices:
> * nor0
> - type: NOR flash
> - block size: 0x1000 bytes
> - min I/O: 0x1 bytes
> - 0x000000000000-0x000000800000 : "nor0"
> - 0x000000000000-0x0000000a0000 : "uboot"
> - 0x0000000a0000-0x0000000b0000 : "uboot_env0"
> - 0x0000000b0000-0x0000000c0000 : "uboot_env1"
> - 0x0000000c0000-0x0000000d0000 : "factory"
> - 0x0000000d0000-0x000000800000 : "unused"
> * spi-nand0
> - device: spi-nand at 1
> - parent: spi at b00
> - driver: spi_nand
> - type: NAND flash
> - block size: 0x20000 bytes
> - min I/O: 0x800 bytes
> - OOB size: 128 bytes
> - OOB available: 63 bytes
> - 0x000000000000-0x000008000000 : "spi-nand0"
> - 0x000000000000-0x000008000000 : "nand"
> => dm tree
> Class Index Probed Driver Name
> -----------------------------------------------------------
> root 0 [ + ] root_driver root_driver
> ...
> spi 0 [ + ] mt7621_spi | |-- spi at b00
> spi_flash 0 [ + ] spi_flash_std | | |-- spi-flash at 0
> mtd 0 [ + ] spi_nand | | `-- spi-nand at 1
> ...
>
> As you see, spi_nand is automatically probed by "mtd list". SPI NOR
> is most likely already probed since its used for ENV storage.
>
> It would be great, if you could check, if and where such a dependency
> is missing in your case.
>
> Thanks,
> Stefan
Full bootlog is:
U-Boot 2020.10-rc2-00156-gd21f8d2fdf-dirty (Aug 20 2020 - 12:55:39 +0200)
DRAM: 512 MiB
Comphy-0: USB3_HOST0 5 Gbps
Comphy-1: PEX0 2.5 Gbps
Comphy-2: SATA0 5 Gbps
SATA link 0 timeout.
AHCI 0001.0300 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
flags: ncq led only pmp fbss pio slum part sxs
PCIE-0: Link up
MMC: sdhci at d0000: 0
Loading Environment from SPIFlash... SF: Detected w25q32dw with page size 256 Bytes, erase size 4 KiB, total 4 MiB
OK
Model: Marvell Armada 3720 Community Board ESPRESSOBin
Net: eth0: neta at 30000 [PRIME]
Hit any key to stop autoboot: 0
Then I called mtd commands which I wrote in previous email.
Just to note that ENV variables are correctly read from SPI.
In 'dm tree' is:
spi 0 [ + ] mvebu_spi | | |-- spi at 10600
spi_flash 0 [ + ] jedec_spi_nor | | | `-- spi-flash at 0
More information about the U-Boot
mailing list