1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- MMUv3 initialization sequence.
- The code in the initialize_mmu macro sets up MMUv3 memory mapping
- identically to MMUv2 fixed memory mapping. Depending on
- CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX symbol this code is
- located in one of the following address ranges:
- 0xF0000000..0xFFFFFFFF (will keep same address in MMU v2 layout;
- typically ROM)
- 0x00000000..0x07FFFFFF (system RAM; this code is actually linked
- at 0xD0000000..0xD7FFFFFF [cached]
- or 0xD8000000..0xDFFFFFFF [uncached];
- in any case, initially runs elsewhere
- than linked, so have to be careful)
- The code has the following assumptions:
- This code fragment is run only on an MMU v3.
- TLBs are in their reset state.
- ITLBCFG and DTLBCFG are zero (reset state).
- RASID is 0x04030201 (reset state).
- PS.RING is zero (reset state).
- LITBASE is zero (reset state, PC-relative literals); required to be PIC.
- TLB setup proceeds along the following steps.
- Legend:
- VA = virtual address (two upper nibbles of it);
- PA = physical address (two upper nibbles of it);
- pc = physical range that contains this code;
- After step 2, we jump to virtual address in 0x40000000..0x5fffffff
- that corresponds to next instruction to execute in this code.
- After step 4, we jump to intended (linked) address of this code.
- Step 0 Step1 Step 2 Step3 Step 4 Step5
- ============ ===== ============ ===== ============ =====
- VA PA PA VA PA PA VA PA PA
- ------ -- -- ------ -- -- ------ -- --
- E0..FF -> E0 -> E0 E0..FF -> E0 F0..FF -> F0 -> F0
- C0..DF -> C0 -> C0 C0..DF -> C0 E0..EF -> F0 -> F0
- A0..BF -> A0 -> A0 A0..BF -> A0 D8..DF -> 00 -> 00
- 80..9F -> 80 -> 80 80..9F -> 80 D0..D7 -> 00 -> 00
- 60..7F -> 60 -> 60 60..7F -> 60
- 40..5F -> 40 40..5F -> pc -> pc 40..5F -> pc
- 20..3F -> 20 -> 20 20..3F -> 20
- 00..1F -> 00 -> 00 00..1F -> 00
- The default location of IO peripherals is above 0xf0000000. This may change
- using a "ranges" property in a device tree simple-bus node. See ePAPR 1.1, §6.5
- for details on the syntax and semantic of simple-bus nodes. The following
- limitations apply:
- 1. Only top level simple-bus nodes are considered
- 2. Only one (first) simple-bus node is considered
- 3. Empty "ranges" properties are not supported
- 4. Only the first triplet in the "ranges" property is considered
- 5. The parent-bus-address value is rounded down to the nearest 256MB boundary
- 6. The IO area covers the entire 256MB segment of parent-bus-address; the
- "ranges" triplet length field is ignored
|