| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame^] | 1 | README on the SDRAM Controller for the LH7a40X | 
|  | 2 | ============================================== | 
|  | 3 |  | 
|  | 4 | The standard configuration for the SDRAM controller generates a sparse | 
|  | 5 | memory array.  The precise layout is determined by the SDRAM chips.  A | 
|  | 6 | default kernel configuration assembles the discontiguous memory | 
|  | 7 | regions into separate memory nodes via the NUMA (Non-Uniform Memory | 
|  | 8 | Architecture) facilities.  In this default configuration, the kernel | 
|  | 9 | is forgiving about the precise layout.  As long as it is given an | 
|  | 10 | accurate picture of available memory by the bootloader the kernel will | 
|  | 11 | execute correctly. | 
|  | 12 |  | 
|  | 13 | The SDRC supports a mode where some of the chip select lines are | 
|  | 14 | swapped in order to make SDRAM look like a synchronous ROM.  Setting | 
|  | 15 | this bit means that the RAM will present as a contiguous array.  Some | 
|  | 16 | programmers prefer this to the discontiguous layout.  Be aware that | 
|  | 17 | may be a penalty for this feature where some some configurations of | 
|  | 18 | memory are significantly reduced; i.e. 64MiB of RAM appears as only 32 | 
|  | 19 | MiB. | 
|  | 20 |  | 
|  | 21 | There are a couple of configuration options to override the default | 
|  | 22 | behavior.  When the SROMLL bit is set and memory appears as a | 
|  | 23 | contiguous array, there is no reason to support NUMA. | 
|  | 24 | CONFIG_LH7A40X_CONTIGMEM disables NUMA support.  When physical memory | 
|  | 25 | is discontiguous, the memory tables are organized such that there are | 
|  | 26 | two banks per nodes with a small gap between them.  This layout wastes | 
|  | 27 | some kernel memory for page tables representing non-existent memory. | 
|  | 28 | CONFIG_LH7A40X_ONE_BANK_PER_NODE optimizes the node tables such that | 
|  | 29 | there are no gaps.  These options control the low level organization | 
|  | 30 | of the memory management tables in ways that may prevent the kernel | 
|  | 31 | from booting or may cause the kernel to allocated excessively large | 
|  | 32 | page tables.  Be warned.  Only change these options if you know what | 
|  | 33 | you are doing.  The default behavior is a reasonable compromise that | 
|  | 34 | will suit all users. | 
|  | 35 |  | 
|  | 36 | -- | 
|  | 37 |  | 
|  | 38 | A typical 32MiB system with the default configuration options will | 
|  | 39 | find physical memory managed as follows. | 
|  | 40 |  | 
|  | 41 | node 0: 0xc0000000 4MiB | 
|  | 42 | 0xc1000000 4MiB | 
|  | 43 | node 1: 0xc4000000 4MiB | 
|  | 44 | 0xc5000000 4MiB | 
|  | 45 | node 2: 0xc8000000 4MiB | 
|  | 46 | 0xc9000000 4MiB | 
|  | 47 | node 3: 0xcc000000 4MiB | 
|  | 48 | 0xcd000000 4MiB | 
|  | 49 |  | 
|  | 50 | Setting CONFIG_LH7A40X_ONE_BANK_PER_NODE will put each bank into a | 
|  | 51 | separate node. |