Message ID | 20240930113045.28616-1-ansuelsmth@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | block: partition table OF support | expand |
On Mon, Sep 30, 2024 at 01:30:07PM +0200, Christian Marangi wrote: > Hi, > this is an initial proposal to complete support for manually defining > partition table. > > Some background on this. Many OEM on embedded device (modem, router...) > are starting to migrate from NOR/NAND flash to eMMC. The reason for this > is that OEM are starting to require more and more space for the firmware > and price difference is becoming so little that using eMMC is only benefits > and no cons. > > Given these reason, OEM are also using very custom way to provide a > partition table and doesn't relay on common method like writing a table > on the eMMC. > > One way that is commonly used is to hardcode the partition table and > pass it to the system via various way (cmdline, special glue driver, > block2mtd...) > This way is also used on Android where the partition table > is passed from the bootloader via cmdline. > > One reason to use this method is to save space on the device and to > permit more flexibility on partition handling. > > What this series does is complete support for this feature. > It's possible to use the cmdline to define a partition table similar > to how it's done for MTD but this is problematic for a number of device > where tweaking the cmdline is not possible. This series adds OF support > to make it possible to define a partition table in the Device Tree. > > We implement a similar schema to the MTD fixed-partition, where we define > a "label" and a "reg" with "offset" and "size". > > A new block partition parser is introduced that check if the block device > have an OF node attached and check if a fixed-partition table is defined. > > If a correct node is found, then partition table is filled. cmdline will > still have priority to this new parser. > > Some block device also implement boot1 and boot2 additional disk. Similar > to the cmdline parser, these disk can have OF support using the > "partitions-boot0" and "partitions-boot1" additional node. > > It's also completed support for declaring partition as read-only as this > feature was introduced but never finished in the cmdline parser. I'm not sure I fully understood the problem you are trying to solve. I have a device at hand that uses eMMC (and was produced almost ten years ago). This device has a regular GPT on eMMC and no kernel needs to be patched for that. So, why is it a problem for the mentioned OEMs to use standard GPT approach?
Andy Shevchenko <andy@kernel.org> writes: > On Mon, Sep 30, 2024 at 01:30:07PM +0200, Christian Marangi wrote: >> Hi, >> this is an initial proposal to complete support for manually defining >> partition table. >> >> >> Some block device also implement boot1 and boot2 additional disk. Similar >> to the cmdline parser, these disk can have OF support using the >> "partitions-boot0" and "partitions-boot1" additional node. >> >> It's also completed support for declaring partition as read-only as this >> feature was introduced but never finished in the cmdline parser. > > > I'm not sure I fully understood the problem you are trying to solve. > I have a device at hand that uses eMMC (and was produced almost ten years ago). > This device has a regular GPT on eMMC and no kernel needs to be patched for that. > So, why is it a problem for the mentioned OEMs to use standard GPT approach? For the user area (main block device), yes, a GPT can often be used, but not always. For the boot partitions, the particular SOC/cpu/bootrom may make it impossible to use a standard partition table, because the bootrom expects to find a bootloader at offset 0 on the active boot partition. In such a case, there's no way you can write a regular MBR or GPT, but it is nevertheless nice to have a machine-readable definition of which data goes where in the boot partitions. With these patches, one can do partitions-boot0 { partition@0 { label = "bootloader"; reg = <0 0x...>; // 2 MB } partition@... { label = "device-data"; reg = <...> // 4 MB } } and describe that layout. Rasmus