On 11/02/2014 21:02, Mark Cave-Ayland wrote:
On 11/02/14 00:43, Olivier Danet wrote:
I had tested with NextSTEP, which, afaik, is the only user of this damn counter...
In OpenBIOS, the CPU "PSR.PIL" register masked all interrupts. Here is a version which enable the interrupt level 14, used by the timer. It is not optimal because the psr_get/set functions are also declared in arch/sparc32/psr.h, maybe it should be moved to include/arch/sparc32...
Aha so that was the part I was missing! Please find attached a squashed reworked version of your patch which makes the following changes:
- Fixes up psr.h and friends so we can use the constants/functions
that are already there
- Change obp_ticks from int32_t obp_ticks to uint32_t *obp_ticks (this
is so we can reference it in Forth too)
- Add an implementation of get-msecs in Forth which is surrounded by
[IFDEF] CONFIG_SPARC32 ... [THEN] guards which references the value from the above pointer
This appears to work for me, and most importantly it doesn't appear to affect Solaris 8 boot (which is good, as Solaris is generally the most sensitive OS when changing things in OpenBIOS).
Welcome to OpenBIOS v1.1 built on Feb 11 2014 19:37 Type 'help' for detailed information
0 > get-msecs u. 1bd0 ok 0 > get-msecs u. 2ada ok 0 > get-msecs u. 389a ok 0 >
Can you test on NextStep and let me know if it looks okay to you too?
ATB,
Mark.
Your patch works great !
BTW, this should not change anything :
- intregs->cpu_intregs[0].clear = ~0x17fff; + intregs->cpu_intregs[0].clear = 0xffffffff;
The per-CPU clear mask is marked as "reserved" for hard ints, bits 16 and 14..0, so ~0x17fff should be enough. (Sun4M sys. arch, page 31, ยง5.7.1.2)
Solaris 8 is very sensitive indeed. I have tried a genuine CD in an authentic SparcStation and it keeps hanging during install ;-)
Olivier