On 13/06/07 17:51 -0700, ron minnich wrote:
> Acked-by: Ronald G. Minnich <[EMAIL PROTECTED]>
> 
> Note: I have not tested this on hardware. But I can bet Marc has :-)
> This just convinces me that DRAM really is black magic :-)

r2722.  And yes - it is all black magic, which is why Marc wears a 
black hat and is followed by a low fog as he walks the halls.

Jordan

> On 6/13/07, Marc Jones <[EMAIL PROTECTED]> wrote:
> > See attached patch.
> > Thanks!
> > Marc
> >
> > --
> > Marc Jones
> > Senior Software Engineer
> > (970) 226-9684 Office
> > mailto:[EMAIL PROTECTED]
> > http://www.amd.com/embeddedprocessors
> >
> > This patch fixes the CAS map for -.5 and -1 CAS settings. The -.5 setting 
> > should only shift the mask one bit, not two.
> >
> > Signed-off-by: Marc Jones <[EMAIL PROTECTED]>
> >
> >
> > Index: LinuxBIOSv2/src/northbridge/amd/lx/raminit.c
> > ===================================================================
> > --- LinuxBIOSv2.orig/src/northbridge/amd/lx/raminit.c   2007-06-13 
> > 17:01:03.000000000 -0600
> > +++ LinuxBIOSv2/src/northbridge/amd/lx/raminit.c        2007-06-13 
> > 17:01:03.000000000 -0600
> > @@ -151,7 +151,7 @@
> >         }
> >
> >         /* I don't think you need this check.
> > -          if (spd_byte0 < 0xA0 || spd_byte0 < 0xA0){
> > +          if (spd_byte0 >= 0xA0 || spd_byte1 >= 0xA0){
> >            print_debug("DIMM overclocked. Check GeodeLink Speed\n");
> >            POST_CODE(POST_PLL_MEM_FAIL);
> >            __asm__       __volatile__("hlt\n");
> > @@ -231,7 +231,7 @@
> >  ;*     Destroys: We really use everything !
> >  
> > ;*****************************************************************************/
> >         uint16_t glspeed, dimm_speed;
> > -       uint8_t spd_byte, casmap0, casmap1;
> > +       uint8_t spd_byte, casmap0, casmap1, casmap_shift;
> >         msr_t msr;
> >
> >         glspeed = GeodeLinkSpeed();
> > @@ -246,25 +246,24 @@
> >                         dimm_speed = 2 * (10000 / (((spd_byte >> 4) * 10) +
> >                                                 (spd_byte & 0x0F)));
> >                         if (dimm_speed >= glspeed) {
> > +                               casmap_shift = 1; /* -.5 is a shift of 1 */
> >                                 /* IF -1 timing is supported, check -1 
> > timing > GeodeLink */
> >                                 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)));
> > -                                       if (dimm_speed <= glspeed) {
> > -                                               /* set we can use -.5 
> > timing but not -1 */
> > -                                               spd_byte = 31 - 
> > __builtin_clz((uint32_t) casmap0);
> > -                                               /* just want bits in the 
> > lower byte since we have to cast to a 32 */
> > -                                               casmap0 &= 0xFF << 
> > (--spd_byte);
> > +                                       if (dimm_speed >= glspeed) {
> > +                                               casmap_shift = 2; /* -1 is 
> > a shift of 2 */
> >                                         }
> > -                               }       /*MIN_CYCLE_10 !=0 */
> > +                               }       /* SPD_SDRAM_CYCLE_TIME_3RD (-1) 
> > !=0 */
> >                         } else {
> > -                               /* Timing_05 < GLspeed, can't use -.5 or -1 
> > timing */
> > -                               spd_byte = 31 - __builtin_clz((uint32_t) 
> > casmap0);
> > -                               /* just want bits in the lower byte since 
> > we have to cast to a 32 */
> > -                               casmap0 &= 0xFF << (spd_byte);
> > +                               casmap_shift = 0;
> >                         }
> > -               }               /*MIN_CYCLE_05 !=0 */
> > +               }       /* SPD_SDRAM_CYCLE_TIME_2ND (-.5) !=0 */
> > +               /* set the casmap based on the shift to limit possible CAS 
> > settings */
> > +               spd_byte = 31 - __builtin_clz((uint32_t) casmap0);
> > +               /* just want bits in the lower byte since we have to cast 
> > to a 32 */
> > +               casmap0 &= 0xFF << (spd_byte - casmap_shift);
> >         } else {                /* No DIMM */
> >                 casmap0 = 0;
> >         }
> > @@ -278,25 +277,25 @@
> >                         /* 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)));
> >                         if (dimm_speed >= glspeed) {
> > +                               casmap_shift = 1; /* -.5 is a shift of 1 */
> >                                 /* IF -1 timing is supported, check -1 
> > timing > GeodeLink */
> >                                 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)));
> > -                                       if (dimm_speed <= glspeed) {
> > -                                               /* set we can use -.5 
> > timing but not -1 */
> > -                                               spd_byte = 31 - 
> > __builtin_clz((uint32_t) casmap1);
> > -                                               /* just want bits in the 
> > lower byte since we have to cast to a 32 */
> > -                                               casmap1 &= 0xFF << 
> > (--spd_byte);
> > +                                       if (dimm_speed >= glspeed) {
> > +                                               casmap_shift = 2; /* -1 is 
> > a shift of 2 */
> >                                         }
> > -                               }       /*MIN_CYCLE_10 !=0 */
> > +                                       /* note that the -1 result doesn't 
> > need to change the available CAS map */
> > +                               }       /* SPD_SDRAM_CYCLE_TIME_3RD (-1) 
> > !=0 */
> >                         } else {
> > -                               /* Timing_05 < GLspeed, can't use -.5 or -1 
> > timing */
> > -                               spd_byte = 31 - __builtin_clz((uint32_t) 
> > casmap1);
> > -                               /* just want bits in the lower byte since 
> > we have to cast to a 32 */
> > -                               casmap1 &= 0xFF << (spd_byte);
> > +                               casmap_shift = 0;
> >                         }
> > -               }               /*MIN_CYCLE_05 !=0 */
> > +               }       /* SPD_SDRAM_CYCLE_TIME_2ND (-.5) !=0 */
> > +               /* set the casmap based on the shift to limit possible CAS 
> > settings */
> > +               spd_byte = 31 - __builtin_clz((uint32_t) casmap1);
> > +               /* just want bits in the lower byte since we have to cast 
> > to a 32 */
> > +               casmap1 &= 0xFF << (spd_byte - casmap_shift);
> >         } else {                /* No DIMM */
> >                 casmap1 = 0;
> >         }
> >
> > --
> > linuxbios mailing list
> > linuxbios@linuxbios.org
> > http://www.linuxbios.org/mailman/listinfo/linuxbios
> >
> 
> -- 
> linuxbios mailing list
> linuxbios@linuxbios.org
> http://www.linuxbios.org/mailman/listinfo/linuxbios
> 
> 

-- 
Jordan Crouse
Senior Linux Engineer
Advanced Micro Devices, Inc.
<www.amd.com/embeddedprocessors>



-- 
linuxbios mailing list
linuxbios@linuxbios.org
http://www.linuxbios.org/mailman/listinfo/linuxbios

Reply via email to