52 lines
2.3 KiB
Text
52 lines
2.3 KiB
Text
|
README on the SDRAM Controller for the LH7a40X
|
||
|
==============================================
|
||
|
|
||
|
The standard configuration for the SDRAM controller generates a sparse
|
||
|
memory array. The precise layout is determined by the SDRAM chips. A
|
||
|
default kernel configuration assembles the discontiguous memory
|
||
|
regions into separate memory nodes via the NUMA (Non-Uniform Memory
|
||
|
Architecture) facilities. In this default configuration, the kernel
|
||
|
is forgiving about the precise layout. As long as it is given an
|
||
|
accurate picture of available memory by the bootloader the kernel will
|
||
|
execute correctly.
|
||
|
|
||
|
The SDRC supports a mode where some of the chip select lines are
|
||
|
swapped in order to make SDRAM look like a synchronous ROM. Setting
|
||
|
this bit means that the RAM will present as a contiguous array. Some
|
||
|
programmers prefer this to the discontiguous layout. Be aware that
|
||
|
may be a penalty for this feature where some some configurations of
|
||
|
memory are significantly reduced; i.e. 64MiB of RAM appears as only 32
|
||
|
MiB.
|
||
|
|
||
|
There are a couple of configuration options to override the default
|
||
|
behavior. When the SROMLL bit is set and memory appears as a
|
||
|
contiguous array, there is no reason to support NUMA.
|
||
|
CONFIG_LH7A40X_CONTIGMEM disables NUMA support. When physical memory
|
||
|
is discontiguous, the memory tables are organized such that there are
|
||
|
two banks per nodes with a small gap between them. This layout wastes
|
||
|
some kernel memory for page tables representing non-existent memory.
|
||
|
CONFIG_LH7A40X_ONE_BANK_PER_NODE optimizes the node tables such that
|
||
|
there are no gaps. These options control the low level organization
|
||
|
of the memory management tables in ways that may prevent the kernel
|
||
|
from booting or may cause the kernel to allocated excessively large
|
||
|
page tables. Be warned. Only change these options if you know what
|
||
|
you are doing. The default behavior is a reasonable compromise that
|
||
|
will suit all users.
|
||
|
|
||
|
--
|
||
|
|
||
|
A typical 32MiB system with the default configuration options will
|
||
|
find physical memory managed as follows.
|
||
|
|
||
|
node 0: 0xc0000000 4MiB
|
||
|
0xc1000000 4MiB
|
||
|
node 1: 0xc4000000 4MiB
|
||
|
0xc5000000 4MiB
|
||
|
node 2: 0xc8000000 4MiB
|
||
|
0xc9000000 4MiB
|
||
|
node 3: 0xcc000000 4MiB
|
||
|
0xcd000000 4MiB
|
||
|
|
||
|
Setting CONFIG_LH7A40X_ONE_BANK_PER_NODE will put each bank into a
|
||
|
separate node.
|