3.4 KiB
RTL Notes
set up ERAT autoload at reset
- iuq_ic_ierat and lq_derat, bcfg_q (2 entries I & D)
//------------------------------------------------
// scan only latches for boot config
//------------------------------------------------
// epn rpn u0:3 E
// 0 31 32 51 52 54 61 62 81 86
// 0 31 32 51 22 24 31 32 51
//init => "0000_0000_0000_0000_0000_0000_0000_0000_1111_1111_1111_1111_1111_11_1111_1111_1111_1111_1111_1111_1111_0000_0",
special rings
- tri_slat_scan's seem to be the comps used for core config and boot config
reg bits
-
erat-only
-
These two modes are termed “MMU mode” and “ERAT-only mode”. This mode controlled by the CCR2[NOTLB] bit.
-
mmu may be configurable to table-walk but not have a TLB(?) This would allow the erats and htw to be changed for radix before implementing the TLB logic.
-
translation
- ERAT holes (UM 6.2.3)
The rules for configuring an exclusion range “hole” for a given TLB entry and placing one or more pages within the “hole” are as follows:
- Only TLB entries with page sizes greater than 4 KB can have an exclusion range hole enabled via X = 1.
- A virtual address to be translated that falls within the hole will not match this TLB entry.
- The size of the hole configured must be smaller than the page size of this TLB entry.
- The size of the hole is configurable to 2 n 4 KB, where n = 0 to log 2 (entry size in bytes) - 13.
- The legal binary values of the unused EPN bits of a given TLB entry are contained in the set defined by 2 n - 1, where n = 0 to log 2 (entry size in bytes) - 13.
- Other TLB entries of valid page sizes (less than or equal to the hole size) can be mapped into the hole.
- Multiple other TLB entries can be mapped into the hole simultaneously.
- Not all of the address space defined by the hole needs to be mapped by other entries.
- Pages mapped in the hole must be page-size aligned.
- Pages mapped in the hole must not overlap.
- Pages mapped in the hole must be collectively fully contained within the hole.
-
Page sizes
-
UM 6.17.3 says
Supported values of the PS field for this implementation include: 0b0010 (4 KB for sub-page size of 4 KB only), 0b0110 (64 KB), 0b1010 (1 MB), and 0b1110 (16 MB).
Is this correct? No 1G size? The logic (iuq_ic_ierat) says:
parameter [0:2] CAM_PgSize_1GB = 3'b110;
parameter [0:2] CAM_PgSize_16MB = 3'b111;
parameter [0:2] CAM_PgSize_1MB = 3'b101;
parameter [0:2] CAM_PgSize_64KB = 3'b011;
parameter [0:2] CAM_PgSize_4KB = 3'b001;
- UM also says:
Variable page sizes for direct (IND=0) entries (4KB, 64KB, 1MB, 16MB, 1GB), simultaneously resi- dent in TLB and/or ERAT, and indirect (IND=1) entries (1 MB and 256 MB) in TLB
The MMU divides the address space into pages. Five direct (IND=0) page sizes (4KB, 64KB, 1MB, 16MB, 1GB) are simultaneously supported,
implementing radix
Possible:
- toss all of MMU and rewrite using MMU interface; update ERAT entries as necessary
- keep everything and change HTW/TLB for radix (plus ERATs)
- do in steps; get ERATS+HTW working and then add TLB logic