| * 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. |