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? 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:

=> 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@1
  - parent: spi@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"
=> mtdparts

device nor0 <spi0.0>, # parts = 5
 #: name                size            offset          mask_flags
 0: uboot               0x000a0000      0x00000000      0
 1: uboot_env0          0x00010000      0x000a0000      0
 2: uboot_env1          0x00010000      0x000b0000      0
 3: factory             0x00010000      0x000c0000      0
 4: unused              0x00730000      0x000d0000      0

device spi-nand0 <spi0.1>, # parts = 1
 #: name                size            offset          mask_flags
 0: nand                0x08000000      0x00000000      0

active partition: nor0,0 - (uboot) 0x000a0000 @ 0x00000000

defaults:
mtdids  : spi-nand0=spi0.1,nor0=spi0.0
mtdparts: spi0.0:640k(uboot),64k(uboot_env0),64k(uboot_env1),64k(factory),-(unused);spi0.1:-(nand)

Anyway, updating DTS has advantage that it is not needed to update
existing boot scripts for OS. There are more distributions for
Espressobin which have own boot scripts stored on SD card for loading
kernel. And therefore to use command line parameters it would be needed
to update all of them.

I see. This is an argument I understand. But can't you use the common
fdt_fixup_mtdparts() then?

And I see there another problem. For specifying size of mtd partitions
in command line, it is required to know offsets of those partitions. And
e.g. uboot env partition depends on CONFIG_ENV_OFFSET option which is
not available for uboot boot script code.

But if you have other idea, I'm open to also other solutions.

I have not investigated a multi-distribution solution here. Perhaps
the common fdt_fixup_mtdparts() is able to handle this?

If not, then I won't stop this current patch. I just wanted to point
out the more common and more elegant solutions to you.

Thanks,
Stefan

Reply via email to