![Linus Torvalds](/assets/img/avatar_default.png)
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
52 lines
2.3 KiB
Plaintext
52 lines
2.3 KiB
Plaintext
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.
|