So interesting things happen when I do the memory dump before and after the first MCE. Here is the memory dump before the first MCE:
0x000050c0: 0x7d9cd830 0x81990e04 0x7d8ce378 0x91990e04
0x000050d0: 0x81990e08 0x618c0100 0x91990e08 0x3980ffff
0x000050e0: 0x919f0000 0x81990e08 0x558c062c 0x91990e08
Here is the memory dump after coming back from the first MCE
0x000050c0: 0x7d9cd830 0x81990e04 0x7d8ce378 0x91990e04
0x000050d0: 0x7d9cd830 0x81990e04 0x7d8ce378 0x91990e04
0x000050e0: 0x7d9cd830 0x81990e04 0x7d8ce378 0x91990e04
As you can see, addresses from 0x50d0 - 0x50ec get changed to almost match what is written in address ranges 0x50c0 - 0x50cc. These data that are located at these address ranges are the instructions for the code that tests multi-bit ECC.
They get changed just as I do a write of data into global data, which in this case the injector should kick in and alter the ECC for that global data.
Here are the steps just after enabling injection (i.e. DDR_ERR_INJECT[EIEN] = 1):
1) Write of 0xFFFFFFFF to a global variable
2) Read from global variable to a local variable
3) Disable error injection.
Thanks,
Tim