[LinuxBIOS] romcc and epia

ron minnich rminnich at gmail.com
Tue Sep 12 21:05:54 CEST 2006


On 9/12/06, Ben Hewson <ben at hewson-venieri.com> wrote:
>
> I have been looking through auto.inc and it would be very helpful if
> besides
> printing the line no inside auto.c, it would also print the actual C line.
>
> Does anyone know how easy this would be to do ?
>
>
> The reason I am asking this is because of the problem I am having with
> the epia code.
>
>
> There is this bit of C code
>
>     // SDRAM in all banks
>     pci_write_config8(north, 0x60, 0x3F);
>
>     // DRAM timing. I'm suspicious of this
>     // This is for all banks, 64 is 0,1.  65 is 2,3. 66 is 4,5.
>     // ras precharge 4T, RAS pulse 5T
>     // cas2 is 0xd6, cas3 is 0xe6
>     // we're also backing off write pulse width to 2T, so result is 0xee
>
> #if DIMM_CL2
>     pci_write_config8(north, 0x64, 0xd6);
>     pci_write_config8(north, 0x65, 0xd6);
>     pci_write_config8(north, 0x66, 0xd6);
> #else                // CL=3
>     pci_write_config8(north, 0x64, 0xe6);
>     pci_write_config8(north, 0x65, 0xe6);
>     pci_write_config8(north, 0x66, 0xe6);
> #endif
>
>
>     print_debug_hex8(pci_read_config8(north, 0x64));
>     print_debug_hex8(pci_read_config8(north, 0x65));
>     print_debug_hex8(pci_read_config8(north, 0x66));
>
> ok now loking at the serial output I get the following snippet
>
> 1106 0601
> ece6e6init 1 done
>
> the important bit is the ece6e6
>
> Ok now as you can see it is not writing to the register properly. So I
> am now looking
> through auto.inc and trying to find the relevant code. While I will be
> honest and say
> at the moment I do not 100% understand it, I can never the less find the
> relevant
> assembler code. Anyway this is it
>
>
> **********
>      first bit I think is for this line
>     pci_write_config8(north, 0x60, 0x3F);
> ***********
>
>     mov  $63 , %al
>     mov  $3324 , %dx
>     outb %al, %dx



3324 is cfc. data. 63 is 3f. You have to look at the code before this, but I
expect that it will be for 0x60.


    /* ,:0.0 */
>     /*
>      * pci_write_config8,romcc_io.h:148.38
>      * sdram_set_registers,raminit.c:164.26
>      * main,auto.c:107.28
>      */
>     /* ,:0.0 */
>     /*
>      * __builtin_outl,<built-in>:1.0
>      * outl,io.h:25.23
>      * pci_write_config8,romcc_io.h:148.13
>      * sdram_set_registers,raminit.c:164.26
>      * main,auto.c:107.28
>      */
>     mov  $-2147483548 , %eax
>     mov  $3320 , %dx
>     outl %eax, %dx


3320 is cf8. $-2147483548 is 64. So set cf8 to x64.


    /* ,:0.0 */
>     /*
>      * __builtin_outb,<built-in>:1.0
>      * outb,io.h:15.23
>      * pci_write_config8,romcc_io.h:149.13
>      * sdram_set_registers,raminit.c:164.26
>      * main,auto.c:107.28
>      */
>
> ********* ok here is 1 write of 0xe6 **********
>
>
>
>     mov  $230 , %al
>     mov  $3325 , %dx
>     outb %al, %dx


so, write e6 to cfd, i.e. 65. hmm. what happened to 64?

    /* ,:0.0 */
>     /*
>      * pci_write_config8,romcc_io.h:148.38
>      * sdram_set_registers,raminit.c:165.26
>      * main,auto.c:107.28
>      */
>     /* ,:0.0 */
>     /*
>      * __builtin_outl,<built-in>:1.0
>      * outl,io.h:25.23
>      * pci_write_config8,romcc_io.h:148.13
>      * sdram_set_registers,raminit.c:165.26
>      * main,auto.c:107.28
>      */
>     mov  $-2147483548 , %eax
>     mov  $3320 , %dx
>     outl %eax, %dx



set cfc to 64.

    /* ,:0.0 */
>     /*
>      * __builtin_outb,<built-in>:1.0
>      * outb,io.h:15.23
>      * pci_write_config8,romcc_io.h:149.13
>      * sdram_set_registers,raminit.c:165.26
>      * main,auto.c:107.28
>      */
>
> ********** here is 2nd write of 0xe6 ************
>
>     mov  $230 , %al
>     mov  $3326 , %dx
>     outb %al, %dx


Write e6 to 66.


    /*
>      * pci_read_config8,romcc_io.h:124.38
>      * sdram_set_registers,raminit.c:169.42
>      * main,auto.c:107.28
>      */
>     /* ,:0.0 */
>     /*
>      * __builtin_outl,<built-in>:1.0
>      * outl,io.h:25.23
>      * pci_read_config8,romcc_io.h:124.13
>      * sdram_set_registers,raminit.c:169.42
>      * main,auto.c:107.28
>      */
>     mov  $-2147483548 , %eax
>     mov  $3320 , %dx
>     outl %eax, %dx
>     /* ,:0.0 */

set cfc to 64.




    /*
>
> ******** now we get to read back the values ready to print   ************
>
>      * __builtin_inb,<built-in>:1.0
>      * inb,io.h:31.29
>      * pci_read_config8,romcc_io.h:125.19
>      * sdram_set_registers,raminit.c:169.42
>      * main,auto.c:107.28



I don't see a write to 64 either. HMMMMMM. Good detective work. Wonder
what's up here?


ron
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20060912/51a3b733/attachment.html>


More information about the coreboot mailing list