* 4xx critical exceptions
@ 2002-12-04 23:00 Brian Kuschak
2002-12-05 0:11 ` Matt Porter
2002-12-06 9:22 ` Kenneth Johansson
0 siblings, 2 replies; 3+ messages in thread
From: Brian Kuschak @ 2002-12-04 23:00 UTC (permalink / raw)
To: linuxppc-embedded
I've seen a few postings regarding critical exceptions
on the 405GP, but I don't see anything new in the
linuxppc_2_5 versions of the relevant files.
I'm interested in using the watchdog interrupt as a
critical exception. I have somthing that sort-of
works, in that I get wdt interrupts and service them
appropriately, but I'm getting panics on a regular
basis.
The COMMON_PROLOG in head_4xx.S uses SPRG0,1 to
temporarily save r20, r21 for scratch use. Problem is
this prologue is used for both critical and
non-critical interrupts. As I understand it, MSR[EE]
is cleared for external interrupts, but MSR[CE] is
not. If a critical interrupt occurs while handling a
non-critical interrupt, the SPRG0,1 can be overwritten
while handling the critical interrupt.
I'm guessing we don't have any unused SPRGx registers
to use here. I was thinking about temporarily
disabling CE until saving SPRG0,1, but that can't be
done without using at least one register, and none of
them are saved at that point.
Any ideas?
Regards,
Brian
P.S. BTW, is bk://ppc.bkbits.net/linuxppc_2_5 the
right place for the latest 2.5 code?
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: 4xx critical exceptions
2002-12-04 23:00 4xx critical exceptions Brian Kuschak
@ 2002-12-05 0:11 ` Matt Porter
2002-12-06 9:22 ` Kenneth Johansson
1 sibling, 0 replies; 3+ messages in thread
From: Matt Porter @ 2002-12-05 0:11 UTC (permalink / raw)
To: Brian Kuschak; +Cc: linuxppc-embedded
On Wed, Dec 04, 2002 at 03:00:47PM -0800, Brian Kuschak wrote:
<snip>
> The COMMON_PROLOG in head_4xx.S uses SPRG0,1 to
> temporarily save r20, r21 for scratch use. Problem is
> this prologue is used for both critical and
> non-critical interrupts. As I understand it, MSR[EE]
> is cleared for external interrupts, but MSR[CE] is
> not. If a critical interrupt occurs while handling a
> non-critical interrupt, the SPRG0,1 can be overwritten
> while handling the critical interrupt.
>
> I'm guessing we don't have any unused SPRGx registers
> to use here. I was thinking about temporarily
> disabling CE until saving SPRG0,1, but that can't be
> done without using at least one register, and none of
> them are saved at that point.
>
> Any ideas?
The linuxppc-2.5 tree has a (partial) implementation of critical
exceptions. The method used is to save the registers into a
region preallocated in head_*.S.
> P.S. BTW, is bk://ppc.bkbits.net/linuxppc_2_5 the
> right place for the latest 2.5 code?
That's a dead tree. You want bk://ppc.bkbits.net/linuxppc-2.5
Regards,
--
Matt Porter
porter@cox.net
This is Linux Country. On a quiet night, you can hear Windows reboot.
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: 4xx critical exceptions
2002-12-04 23:00 4xx critical exceptions Brian Kuschak
2002-12-05 0:11 ` Matt Porter
@ 2002-12-06 9:22 ` Kenneth Johansson
1 sibling, 0 replies; 3+ messages in thread
From: Kenneth Johansson @ 2002-12-06 9:22 UTC (permalink / raw)
To: Brian Kuschak; +Cc: linuxppc-embedded@lists.linuxppc.org
On Thu, 2002-12-05 at 00:00, Brian Kuschak wrote:
>
> I'm interested in using the watchdog interrupt as a
> critical exception. I have somthing that sort-of
> works, in that I get wdt interrupts and service them
> appropriately, but I'm getting panics on a regular
> basis.
I thought this was strange as I had seen a watchdog driver in the kernel
for 405 but after reading the source of said driver I no longer think
that:(
I have not tried the driver but from the look of it I would say it's not
doing anything useful.
> I'm guessing we don't have any unused SPRGx registers
> to use here. I was thinking about temporarily
> disabling CE until saving SPRG0,1, but that can't be
> done without using at least one register, and none of
> them are saved at that point.
>
> Any ideas?
Not really. Do you want to try to set up a c environment or do you plan
on just doing the thing in asm directly? The code in the exception
handler do not have to do much something like
if(wdt_count++ < max_wdt_loops)
clear_wdt_ENW();
return
should do. Then if userspace or whatever it is that kicks the dog has
not reset the wdt_count we let the hardware just do the reset.
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2002-12-06 9:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-12-04 23:00 4xx critical exceptions Brian Kuschak
2002-12-05 0:11 ` Matt Porter
2002-12-06 9:22 ` Kenneth Johansson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).