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
On Wed, Oct 02, 2024 at 11:20:37AM +0200, Rasmus Villemoes wrote: > Andy Shevchenko <andy@kernel.org> writes: > > On Mon, Sep 30, 2024 at 01:30:07PM +0200, Christian Marangi wrote: ... > >> 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. I see now, on the device I mentioned the firmware is located on a boot partition, so the user ones are being used for bootloader and the OS.