Ühel kenal päeval, N, 2008-10-23 kell 03:41, kirjutas Carl-Daniel
Hailfinger:
> On 23.10.2008 01:38, ron minnich wrote:
> > Jens, I am very happy to see these contributions from Lippert. I hope
> > you or someone from this list can look at bringing them forward to v3
> > as well.
> 
> This is the GeodeLX RAM speed calculation patch for v3.
> 
> Changed RAM speed calculation to fix RAM modules getting rejected only
> due to integer rounding errors. Previously, the formula was:
>       speed = 2 * (10000/spd_value)
> For spd_value=60 this means speed = 2 * 166 = 332, which is less than
> 333 and coreboot died saying RAM was incompatible. The new formula is:
>       speed = 20000 / spd_value
> For spd_value=60, speed=333, which is fine.
> 
> Signed-off-by: Jens Rottmann <[email protected]>
> Acked-by: Carl-Daniel Hailfinger <[email protected]>

Tested on ThinCan DBE63 to fix the issue of 333 > 332 comparison for RAM
modules I had problems with before due to bailing out in the
overclocking check.

Acked-by: Mart Raudsepp <[email protected]>

> Index: corebootv3-geodelx_speedcalc/northbridge/amd/geodelx/raminit.c
> ===================================================================
> --- corebootv3-geodelx_speedcalc/northbridge/amd/geodelx/raminit.c    
> (Revision 946)
> +++ corebootv3-geodelx_speedcalc/northbridge/amd/geodelx/raminit.c    
> (Arbeitskopie)
> @@ -261,7 +261,7 @@
>               spd_byte0 = spd_byte1;
>  
>       /* Turn SPD ns time into MHz. Check what the asm does to this math. */
> -     speed = 2 * ((10000 / (((spd_byte0 >> 4) * 10) + (spd_byte0 & 0x0F))));
> +     speed = 20000 / (((spd_byte0 >> 4) * 10) + (spd_byte0 & 0x0F));
>  
>       printk(BIOS_DEBUG, "ddr max speed is %d\n", speed);
>       /* Current speed > max speed? */
> @@ -353,15 +353,14 @@
>                       /* Turn SPD ns time into MHz. Check what the asm does
>                        * to this math.
>                        */
> -                     dimm_speed = 2 * (10000 / (((spd_byte >> 4) * 10) +
> -                                             (spd_byte & 0x0F)));
> +                     dimm_speed = 20000 / (((spd_byte >> 4) * 10) + 
> (spd_byte & 0x0F));
>                       if (dimm_speed >= glspeed) {
>                               /* If -1 timing is supported, check -1 timing > 
> GeodeLink. */
>                               /* EEPROM byte usage: (25) SDRAM Minimum Clock 
> Cycle Time @ CLX -1 */
>                               spd_byte = spd_read_byte(dimm0, 
> SPD_SDRAM_CYCLE_TIME_3RD);
>                               if (spd_byte != 0) {
>                                       /* Turn SPD ns time into MHz. Check 
> what the asm does to this math. */
> -                                     dimm_speed = 2 * (10000 / (((spd_byte 
> >> 4) * 10) + (spd_byte & 0x0F)));
> +                                     dimm_speed = 20000 / (((spd_byte >> 4) 
> * 10) + (spd_byte & 0x0F));
>                                       if (dimm_speed <= glspeed) {
>                                               /* Set we can use -.5 timing 
> but not -1. */
>                                               spd_byte = 31 - 
> __builtin_clz((u32) casmap0);
> @@ -388,14 +387,14 @@
>               spd_byte = spd_read_byte(dimm1, SPD_SDRAM_CYCLE_TIME_2ND);
>               if (spd_byte != 0) {
>                       /* Turn SPD ns time into MHz. Check what the asm does 
> to this math. */
> -                     dimm_speed = 2 * (10000 / (((spd_byte >> 4) * 10) + 
> (spd_byte & 0x0F)));
> +                     dimm_speed = 20000 / (((spd_byte >> 4) * 10) + 
> (spd_byte & 0x0F));
>                       if (dimm_speed >= glspeed) {
>                               /* If -1 timing is supported, check -1 timing > 
> GeodeLink. */
>                               /* EEPROM byte usage: (25) SDRAM Minimum Clock 
> Cycle Time @ CLX -1 */
>                               spd_byte = spd_read_byte(dimm1, 
> SPD_SDRAM_CYCLE_TIME_3RD);
>                               if (spd_byte != 0) {
>                                       /* Turn SPD ns time into MHz. Check 
> what the asm does to this math. */
> -                                     dimm_speed = 2 * (10000 / (((spd_byte 
> >> 4) * 10) + (spd_byte & 0x0F)));
> +                                     dimm_speed = 20000 / (((spd_byte >> 4) 
> * 10) + (spd_byte & 0x0F));
>                                       if (dimm_speed <= glspeed) {
>                                               /* Set we can use -.5 timing 
> but not -1. */
>                                               spd_byte = 31 - 
> __builtin_clz((u32) casmap1);
> 
> 


-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to