Re: [PATCH] amd64_edac: fix size decoding error on K8
From: Niklas Söderlund
Date: Wed Nov 09 2011 - 10:13:40 EST
On 11/09/2011 03:42 PM, Borislav Petkov wrote:
On Wed, Nov 09, 2011 at 03:32:58PM +0100, Niklas Söderlund wrote:
Use a lookup table to calculate the size of a chip select. The old
method of calculating size return erroneous values for some memory
configurations.
Can you elaborate more on those erroneous values, please?
Thanks.
The decoding table from the documentation:
cs_mode size (mb)
0 32
1 64
2 128
3 128
4 256
5 512
6 256
7 512
8 1024
9 1024
10 2048
The original code:
if (cs_mode == 3 || cs_mode == 8)
return 32 << (cs_mode - 1);
else
return 32 << cs_mode;
The code tries to compensate for the irregularity in the decoding table
but fails for cs_mode greater or equal to 4. It fails because:
- It do not consider the cumulating effect of reoccurring sizes for all
values of cs_mode. It only tries for the special cases and it only
succeeds in one.
- It do not consider the out of order values of cs_mode values 4-7: 256,
512, 256, 512.
Best Regards
// Niklas
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/