Part Number: AM6442
Hello,
I followed this thread to enable ECC but for AM6442 and with memory <=2GB to modify drivers/ram/k3-ddrss/k3-ddrss.c
The differences are:
- Did not do the RAT since RAM is <2GB
- Only enabled ECC range R1, (R2 & R3 disabled)
- for the route ID and number of lines I used the following:
#define AM64_NUM_ROUTE_ID (20)
#define AM64_NUM_ECC_CACHE_LINES (64)
#define R5FSS00_ROUTE_ID 3000
#define R5FSS01_ROUTE_ID 3001
#define R5FSS10_ROUTE_ID 3002
#define R5FSS11_ROUTE_ID 3003
#define MCU_M4FSS0_ROUTE_ID 4092
#define DMASS0_SEC_PROXY_0_ROUTE_ID 132
#define DMASS0_RINGACC_0_ROUTE_ID 133
#define COMPUTE_CLUSTER0_RD_ROUTE_ID 16
#define COMPUTE_CLUSTER0_WR_ROUTE_ID 0
#define R5FSS00_RD_ROUTE_ID 66
#define R5FSS00_WR_ROUTE_ID 67
#define R5FSS01_RD_ROUTE_ID 69
#define R5FSS01_WR_ROUTE_ID 70
#define R5FSS10_RD_ROUTE_ID 71
#define R5FSS10_WR_ROUTE_ID 72
#define R5FSS11_RD_ROUTE_ID 73
#define R5FSS11_WR_ROUTE_ID 74
#define PRU_ICSSG0_ROUTE_ID 384
#define PRU_ICSSG1_ROUTE_ID 416
#define SA2_UL0_ROUTE_ID 271
static unsigned int am64_soc_route_id[] = {
R5FSS00_ROUTE_ID,
R5FSS01_ROUTE_ID,
R5FSS10_ROUTE_ID,
R5FSS11_ROUTE_ID,
MCU_M4FSS0_ROUTE_ID,
DMASS0_SEC_PROXY_0_ROUTE_ID,
DMASS0_RINGACC_0_ROUTE_ID,
COMPUTE_CLUSTER0_RD_ROUTE_ID,
COMPUTE_CLUSTER0_WR_ROUTE_ID,
R5FSS00_RD_ROUTE_ID,
R5FSS00_WR_ROUTE_ID,
R5FSS01_RD_ROUTE_ID,
R5FSS01_WR_ROUTE_ID,
R5FSS10_RD_ROUTE_ID,
R5FSS10_WR_ROUTE_ID,
R5FSS11_RD_ROUTE_ID,
R5FSS11_WR_ROUTE_ID,
PRU_ICSSG0_ROUTE_ID,
PRU_ICSSG1_ROUTE_ID,
SA2_UL0_ROUTE_ID
};
static unsigned int am64_ecc_cache_lines[] = {
1, // R5FSS00_ROUTE_ID,
1, // R5FSS01_ROUTE_ID,
1, // R5FSS10_ROUTE_ID,
1, // R5FSS11_ROUTE_ID,
1, // MCU_M4FSS0_ROUTE_ID,
4, // DMASS0_SEC_PROXY_0_ROUTE_ID,
4, // DMASS0_RINGACC_0_ROUTE_ID,
4, // COMPUTE_CLUSTER0_RD_ROUTE_ID,
4, // COMPUTE_CLUSTER0_WR_ROUTE_ID,
4, // R5FSS00_RD_ROUTE_ID,
4, // R5FSS00_WR_ROUTE_ID,
4, // R5FSS01_RD_ROUTE_ID,
4, // R5FSS01_WR_ROUTE_ID,
4, // R5FSS10_RD_ROUTE_ID,
4, // R5FSS10_WR_ROUTE_ID,
4, // R5FSS11_RD_ROUTE_ID,
4, // R5FSS11_WR_ROUTE_ID,
4, // PRU_ICSSG0_ROUTE_ID,
4, // PRU_ICSSG1_ROUTE_ID,
2, // SA2_UL0_ROUTE_ID
};
I have a crash when I do a mtest in uboot (which works before enabling ECC):
SoC: AM64X SR1.0
DRAM: 512 MiB
NAND: 4096 MiB
MMC: mmc@fa00000: 1
In: serial@2800000
Out: serial@2800000
Err: serial@2800000
Net: eth0: ethernet@8000000port@1, eth1: ethernet@8000000port@2
Hit any key to stop autoboot: 0
=> mtest
Testing 80100000 ... 83f00000:
Pattern 00000000 Writing... Reading...
ERROR: Unhandled External Abort received on 0x80000000 from EL2
ERROR: exception reason=1 syndrome=0x92000210
Unhandled Exception from EL2
x0 = 0x0000000000000020
x1 = 0x00000000fffffff6
x2 = 0x000000009deb7147
x3 = 0x0000000000000020
x4 = 0x00000000fffffff7
x5 = 0x000000009deb6f48
x6 = 0x0000000000000030
x7 = 0x000000000000000f
x8 = 0x000000009deb75b8
x9 = 0x0000000000000008
x10 = 0x00000000ffffffd8
x11 = 0x0000000000000010
x12 = 0x0000000000000006
x13 = 0x000000000001869f
x14 = 0x000000009deb7900
x15 = 0x0000000000000001
x16 = 0x000000009ff4c7d0
x17 = 0x0000000000000000
x18 = 0x000000009dec0de0
x19 = 0x000000009deb75f0
x20 = 0x000000009deb7149
x21 = 0x00000000ffffffd8
x22 = 0x000000009deb75f0
x23 = 0x000000009deb75f0
x24 = 0x000000009deb7118
x25 = 0x000000009ffa5840
x26 = 0x0000000000000008
x27 = 0x00000000ffffffff
x28 = 0x000000009deb752c
x29 = 0x000000009deb6f90
x30 = 0x000000009ff8e204
scr_el3 = 0x000000000000073d
sctlr_el3 = 0x0000000030cd183f
cptr_el3 = 0x0000000000000000
tcr_el3 = 0x0000000080803520
daif = 0x00000000000002c0
mair_el3 = 0x00000000004404ff
spsr_el3 = 0x00000000800003c9
elr_el3 = 0x000000009ff8dee4
ttbr0_el3 = 0x00000000701ce800
esr_el3 = 0x0000000092000210
far_el3 = 0x000000009ffa5840
spsr_el1 = 0x0000000000000000
elr_el1 = 0x0000000000000000
spsr_abt = 0x0000000000000000
spsr_und = 0x0000000000000000
spsr_irq = 0x0000000000000000
spsr_fiq = 0x0000000000000000
sctlr_el1 = 0x0000000030d00801
actlr_el1 = 0x0000000000000000
cpacr_el1 = 0x0000000000000000
csselr_el1 = 0x0000000000000000
sp_el1 = 0x0000000000000000
esr_el1 = 0x0000000000000000
ttbr0_el1 = 0x0000000000000000
ttbr1_el1 = 0x0000000000000000
mair_el1 = 0x0000000000000000
amair_el1 = 0x0000000000000000
tcr_el1 = 0x0000000000800080
tpidr_el1 = 0x0000000000000000
tpidr_el0 = 0x0000000000000000
tpidrro_el0 = 0x0000000000000000
par_el1 = 0x0000000000000000
mpidr_el1 = 0x0000000080000000
afsr0_el1 = 0x0000000000000000
afsr1_el1 = 0x0000000000000000
contextidr_el1 = 0x0000000000000000
vbar_el1 = 0x0000000000000000
cntp_ctl_el0 = 0x0000000000000000
cntp_cval_el0 = 0x0000000000000000
cntv_ctl_el0 = 0x0000000000000000
cntv_cval_el0 = 0x0000000000000000
cntkctl_el1 = 0x0000000000000000
sp_el0 = 0x00000000701cb400
isr_el1 = 0x0000000000000000
dacr32_el2 = 0x0000000000000000
ifsr32_el2 = 0x0000000000000000
cpuectlr_el1 = 0x0000000000000040
cpumerrsr_el1 = 0x0000000003140175
l2merrsr_el1 = 0x0000000012184d18
cpuactlr_el1 = 0x00001000090ca000
If you have any thoughts about this or if you have an implementation that works on AM6442 please let me know.
Regards.