On 9/12/06, Ben Hewson <ben@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