
On Tue, Apr 01, 2003 at 10:14:46AM +0200, Marius Groeger wrote:
Have you looked at the assembly code generated by the compiler? Maybe the subroutine call enforces some instruction ordering, that otherwise doesn't take place.
Guessing from your tests, timing doesn't seem to be the issue. Hm, stack operations don't seem to relate to the problem either.
Ack.
The D-Cache is still off, right?
Yep.
Does the problem persist, if you turn off the I-Cache?
No change; the icache enabling code in start.S is off anyway.
Are there any instructions to enforce pending IO operation, such as the eieio on the PPC?
I don't think so.
Just for clarification: by "the putx() function", you mean the puts("x"); call, right? (probably slipped from s to x on your keyboard :-)
Yep.
I don't really understand this sentence. Could you explain this again, please?
I've done some further tests, the scenario looks like this now:
----------8<---------- ... void test1(void) nops
void test2(char) output character to serial port
smc_send_packet(...) ... (the critical line with the FIXME) test2('x'); ... ----------8<----------
- if test1 and test2 are not present (commented out) it does not work. - adding test2() and calling it makes it work - adding test1() and _not_ alling it makes it break again when there are more than 4 nops present. With 4 nops and less it still works.
All this looks like the positon of the code seems to be the problem, but why?
Robert