IRQ in realmode and sleep()
Hello,
the data cache is disabled on the CPCI750 board for the SDRAM by the DBAT entry for the SDRAM, but the data cache is enabled for most 74xx_7xx boards in
cpu/74xx_7xx/start.S together with the translation.
The decrementer irq is executed in real mode with translation disabled.
Now in the irq routine, the processor writes the data into the cache, and the sleep() reads directly from RAM, and do not see the timer running.
A good solution would be to have translation on for the irq's too, but a simple solution is to put an '#if !(defined CPCI750)' around the routine, that enables the l1 data cache.
I am not shure, if the problem with the sleep() (and the missing timeouts in the networks stack) hits other boards too.
Reinhard
Quoted 8 lines · Reinhard Arlt
Hello,
the data cache is disabled on the CPCI750 board for the SDRAM by the DBAT entry for the SDRAM, but the data cache is enabled for most 74xx_7xx boards in
cpu/74xx_7xx/start.Stogether with the translation.
Quoted 8 lines
The decrementer irq is executed in real mode with translation disabled.
Now in the irq routine, the processor writes the data into the cache, and the
sleep()reads directly from RAM, and do not see the timer running.A good solution would be to have translation on for the irq's too, but a simple solution is to put an '#if !(defined CPCI750)' around the routine, that enables the l1 data cache.
Sounds like the right solution is to change the DBAT to be cacheable.
-Scott
Hello,
Quoted 11 lines · Scott Wood
Quoted 10 lines · Reinhard Arlt
Hello,
the data cache is disabled on the CPCI750 board for the SDRAM by the DBAT entry for the SDRAM, but the data cache is enabled for most 74xx_7xx boards in
cpu/74xx_7xx/start.Stogether with the translation.The decrementer irq is executed in real mode with translation disabled.
Quoted 9 lines
Quoted 6 lines
Now in the irq routine, the processor writes the data into the cache, and the
sleep()reads directly from RAM, and do not see the timer running.A good solution would be to have translation on for the irq's too, but a simple solution is to put an '#if !(defined CPCI750)' around the routine, that enables the l1 data cache.
Sounds like the right solution is to change the DBAT to be cacheable.
due to a bug in the MV64360, the data structures for the MPSC (serial port) must be in not cacheable ram. In operating systems, this is done by a page table entry, but i do not want to start with a page table in u-boot.
The question is: Is it O.K., that the irq routines run in real mode, with all your I/O locations are cacheable, for example.
Quoted 2 lines
-Scott
Reinhard
Dear Reinhard Arlt,
Quoted 3 lines · In message <[email protected]> you wrote:
The question is: Is it O.K., that the irq routines run in real mode, with all your I/O locations are cacheable, for example.
I expect to see problems when you enable data cache for I/O; there are many drivers in U-Boot which are not prepared for such conditions.
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Always borrow money from a pessimist; they don't expect to be paid back.
Hello,
i is the other way round.
as there is no translation on (real mode) when executing the irq routine, the data caching always is on.
Best regards,
Reinhard Arlt
Quoted 14 lines · Wolfgang Denk
Dear Reinhard Arlt,
Quoted 3 lines · In message<[email protected]> you wrote:
The question is: Is it O.K., that the irq routines run in real mode, with all your I/O locations are cacheable, for example.
I expect to see problems when you enable data cache for I/O; there are many drivers in U-Boot which are not prepared for such conditions.
Best regards,
Wolfgang Denk