| * Memory binding | |
| The memory binding for U-Boot is as in the ePAPR with the following additions: | |
| Optional subnodes can be used defining the memory layout for different board | |
| ID masks. To match a set of board ids, a board-id node may define match-mask | |
| and match-value ints to define a mask to apply to the board id, and the value | |
| that the result should have for the match to be considered valid. The mask | |
| defaults to -1, meaning that the value must fully match the board id. | |
| If subnodes are present, then the /memory node must define these properties: | |
| - #address-cells: should be 1. | |
| - #size-cells: should be 0. | |
| Each subnode must define | |
| reg - board ID or mask for this subnode | |
| memory-banks - list of memory banks in the same format as normal | |
| Each subnode may optionally define: | |
| match-mask - A mask to apply to the board id. This must be accompanied by | |
| match-value. | |
| match-value - The required resulting value of the board id mask for the given | |
| node to be considered a match. | |
| auto-size - Indicates that the value given for a bank is the maximum size, | |
| each bank is probed to determine its actual size, which may be | |
| smaller | |
| The board id determination is up to the vendor and is not defined by this | |
| binding. | |
| Example: | |
| memory { | |
| #address-cells = <1>; | |
| #size-cells = <1>; | |
| reg = <0x20000000 0x20000000 | |
| 0x40000000 0x20000000 | |
| 0x60000000 0x20000000 | |
| 0x80000000 0x20000000>; | |
| auto-size; | |
| board-id@0 { | |
| match-value = <17>; | |
| reg = <0x20000000 0x20000000 | |
| 0x40000000 0x20000000>; | |
| }; | |
| board-id@1 { | |
| match-mask = <2>; | |
| match-value = <2>; | |
| reg = <0x20000000 0x20000000 | |
| 0x40000000 0x20000000 | |
| 0x60000000 0x20000000 | |
| 0x80000000 0x20000000 | |
| 0xa0000000 0x20000000 | |
| 0xc0000000 0x20000000 | |
| 0xe0000000 0x20000000>; | |
| }; | |
| }; | |
| This shows a system with the following properties: | |
| * Default of 2GB of memory, auto-sized, so could be smaller | |
| * 3.5GB of memory (with no auto-size) if (board id & 2) is 2 | |
| * 1GB of memory (with no auto-size) if board id is 17. |