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 /* ,: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 /* ,: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 /* ,: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 /* ,: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 /* * 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 */ /*
******** 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
Ok now unless I am going crazy there appear to only be 2 writes of 0xe6 !!!! Where is the 3rd one? Also if romcc has missed this out, it is also possible that other bits of code are not getting executed.
Ok now maybe I am wrong and not understanding auto.inc but I am pretty sure I am looking at the right bit of code here.
What do you think ?