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/