Message ID | 0450d781-c506-c28e-a0e5-435bee16721f@gmail.com |
---|---|
State | New |
Headers | show |
Series | [v2,1/2] dt-bindings: mtd: partitions: Add binding for Sercomm parser | expand |
On 5/1/2022 11:17 AM, Krzysztof Kozlowski wrote: > On 30/04/2022 20:54, Mikhail Zhilkin wrote: >> patternProperties: >> "@[0-9a-f]+$": >> - $ref: "partition.yaml#" >> + allOf: >> + - $ref: "partition.yaml#" >> + - if: >> + properties: >> + compatible: >> + contains: >> + const: sercomm,sc-partitions >> + then: >> + properties: >> + sercomm,scpart-id: >> + description: Partition id in Sercomm partition map. Parser >> + uses this id to get partition offset and size values from >> + dynamic partition map. > Partition offset and size values are not derived from scpart-id. I am > sorry but after all these questions - it's the third time now - you > never answer why do you need this property and what is it used for. From > all the examples it could be simply removed and the partition map will > be exactly the same. scpart-id is necessary to get (using mtd parser) partition offset and size from dynamic partition map (NOT from the reg property): ❯ xxd -e -c 12 -s $((0x800)) -l $((0x78)) mtd1 00000800: 00000000 00000000 00100000 ............ 0000080c: 00000001 00100000 00100000 ............ 00000818: 00000002 00200000 00100000 ...... ..... 00000824: 00000003 00300000 00100000 ......0..... 00000830: 00000004 00400000 00600000 ......@...`. 0000083c: 00000005 00a00000 00600000 ..........`. 00000848: 00000006 01000000 02000000 ............ 00000854: 00000007 03000000 02000000 ............ 00000860: 00000008 05000000 01400000 ..........@. 0000086c: 00000009 06400000 01b80000 ......@..... scpart-id offset size With sercomm,sc-partitions the reg property will be ignored (offset = 0x200000, size = 0x100000) and the values will be taken from partition map. For example we have this is dts: partition@200000 { label = "Factory"; reg = <0x200000 0x100000>; sercomm,scpart-id = <2>; read-only; }; Dynamic partition map: scpart-id = 2; offset = 0x00200000; size = 0x00100000 00000002 00200000 00100000 ...... ..... In this example the offset and size are the same in reg and dynamic partition map. If device have bad blocks on NAND the values will be a little different. And we have to take partition offsets from partition map to avoid boot loops, wrong eeprom location and other bad things. Is there anything that needs to be explained in more detail? > Best regards, > Krzysztof
On 01/05/2022 16:51, Mikhail Zhilkin wrote: > On 5/1/2022 11:17 AM, Krzysztof Kozlowski wrote: > >> On 30/04/2022 20:54, Mikhail Zhilkin wrote: >>> patternProperties: >>> "@[0-9a-f]+$": >>> - $ref: "partition.yaml#" >>> + allOf: >>> + - $ref: "partition.yaml#" >>> + - if: >>> + properties: >>> + compatible: >>> + contains: >>> + const: sercomm,sc-partitions >>> + then: >>> + properties: >>> + sercomm,scpart-id: >>> + description: Partition id in Sercomm partition map. Parser >>> + uses this id to get partition offset and size values from >>> + dynamic partition map. >> Partition offset and size values are not derived from scpart-id. I am >> sorry but after all these questions - it's the third time now - you >> never answer why do you need this property and what is it used for. From >> all the examples it could be simply removed and the partition map will >> be exactly the same. > scpart-id is necessary to get (using mtd parser) partition offset and > size from dynamic partition map (NOT from the reg property): > > ❯ xxd -e -c 12 -s $((0x800)) -l $((0x78)) mtd1 > 00000800: 00000000 00000000 00100000 ............ > 0000080c: 00000001 00100000 00100000 ............ > 00000818: 00000002 00200000 00100000 ...... ..... > 00000824: 00000003 00300000 00100000 ......0..... > 00000830: 00000004 00400000 00600000 ......@...`. > 0000083c: 00000005 00a00000 00600000 ..........`. > 00000848: 00000006 01000000 02000000 ............ > 00000854: 00000007 03000000 02000000 ............ > 00000860: 00000008 05000000 01400000 ..........@. > 0000086c: 00000009 06400000 01b80000 ......@..... > scpart-id offset size > > With sercomm,sc-partitions the reg property will be ignored (offset = > 0x200000, size = 0x100000) and the values will be taken from partition map. > > For example we have this is dts: > > partition@200000 { > label = "Factory"; > reg = <0x200000 0x100000>; > sercomm,scpart-id = <2>; > read-only; > }; > > Dynamic partition map: > > scpart-id = 2; offset = 0x00200000; size = 0x00100000 > > 00000002 00200000 00100000 ...... ..... > > In this example the offset and size are the same in reg and dynamic > partition map. If device have bad blocks on NAND the values will be a > little different. And we have to take partition offsets from partition > map to avoid boot loops, wrong eeprom location and other bad things. > > Is there anything that needs to be explained in more detail? Thanks a lot, this clarifies the topic. Looks good. Maybe you could put parts of this into the scpart-id field description? Best regards, Krzysztof
diff --git a/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml b/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml index ea4cace6a955..fa457d55559b 100644 --- a/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml +++ b/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml @@ -17,9 +17,29 @@ description: | maintainers: - Rafał Miłecki <rafal@milecki.pl> +select: + properties: + compatible: + contains: + enum: + - fixed-partitions + + required: + - compatible + properties: compatible: - const: fixed-partitions + anyOf: + - items: + - enum: + - sercomm,sc-partitions + + - const: fixed-partitions + + - contains: + const: fixed-partitions + minItems: 1 + maxItems: 2 "#address-cells": true @@ -27,7 +47,18 @@ properties: patternProperties: "@[0-9a-f]+$": - $ref: "partition.yaml#" + allOf: + - $ref: "partition.yaml#" + - if: + properties: + compatible: + contains: + const: sercomm,sc-partitions + then: + properties: + sercomm,scpart-id: + description: Partition id in Sercomm partition map + $ref: /schemas/types.yaml#/definitions/uint32 required: - "#address-cells" @@ -119,3 +150,29 @@ examples: }; }; }; + - | + partitions { + compatible = "sercomm,sc-partitions", "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x100000>; + sercomm,scpart-id=<0>; + read-only; + }; + + partition@100000 { + label = "dynamic partition map"; + reg = <0x100000 0x100000>; + sercomm,scpart-id = <1>; + }; + + partition@200000 { + label = "Factory"; + reg = <0x200000 0x100000>; + sercomm,scpart-id = <2>; + read-only; + }; + };