Home | History | Annotate | Download | only in conf
History log of /src/sys/arch/arm/conf/files.footbridge
RevisionDateAuthorComments
 1.13  03-Dec-2007  ad Interrupt handling changes, in discussion since February:

- Reduce available SPL levels for hardware devices to none, vm, sched, high.
- Acquire kernel_lock only for interrupts at IPL_VM.
- Implement threaded soft interrupts.
 1.12  19-Sep-2006  he branches: 1.12.8; 1.12.24; 1.12.26; 1.12.28; 1.12.30; 1.12.36;
Convert the NetBSD/cats port to use generic TODR.

This gets rid of the now-unneded "todclock" and "todservice" attributes
from the footbridge device files, which should allow netwinder to build
again after its conversion to generic TODR.

Resulting kernel verified to boot up OK on gxemul (after my recent
fixes of the gxemul package to emulate free-running timers).
 1.11  03-Jan-2003  thorpej branches: 1.11.18; 1.11.48; 1.11.50;
Use the generic irq_dispatch.S
 1.10  03-Nov-2002  chris Checkin new interrupt handling code for the footbridge.
This is based upon Jason's work on xscale.

Most of the interrupt handling code is now written in C using an asm stub to
call into the C code.

spl* now only updates a software mask, and does not update the hardware,
this should be much faster.

The new code works well on cats, it's untested on netwinder, but should work.

The code implements generic soft interrupts.

More work is still required to bring the isa interrupt handling code upto
scratch currently all isa interrupts are handled at IPL_BIO on the footbridge.
This may cause isa interrupts to be handled later than they should be.
I plan to fix this in the near future.
 1.9  18-Oct-2002  thorpej branches: 1.9.2;
Make sure the footbridge device has the interface attribute.
 1.8  12-Apr-2002  thorpej Use the bus_space_generic bus space ops.
 1.7  10-Apr-2002  thorpej G/c FOOTBRIDGE option.
 1.6  28-Nov-2001  lukem - convert usage of "defopt" to "defflag" where the relevant option does
not support a value (e.g., it's to be used as "options FOO" instead of
"options FOO=xxx"). options that take a value were converted to
defparam recently.
- minor whitespace & formatting cleanups
 1.5  20-Jun-2001  chris branches: 1.5.2; 1.5.4; 1.5.10;
Remove defopt EBSA285.
Move the files from footbridge that are cats specific.
Remove EBSA285 kernel as people should be able to use the generic cats kernel for EBSA285 systems.
 1.4  12-Jun-2001  matt Move netwinder_machdep.c to files.netwinder. Eliminate opt_netwinder.h and
use #ifdef netwinder insead. XXX ebsa285_machdep.c should move to the cats
directory and files.cats
 1.3  11-Jun-2001  chris Move defopt FOOTBRIDGE to where it really should be in files.footbridge, which is where I should have left it.
 1.2  09-Jun-2001  chris Move the footbridge dir out of arm32 into arm.
 1.1  23-May-2001  chris Add a files.footbridge for inclusion by cats and netwinder. This is to make moving of the footbridge dir easier (when it eventually moves from arm32)

Also remove EBSA285 defopt from the netwinder file as the netwinder isn't an eval board.
 1.5.10.6  03-Jan-2003  thorpej Sync with HEAD.
 1.5.10.5  11-Nov-2002  nathanw Catch up to -current
 1.5.10.4  18-Oct-2002  thorpej Sync with HEAD.
 1.5.10.3  17-Apr-2002  nathanw Catch up to -current.
 1.5.10.2  08-Jan-2002  nathanw Catch up to -current.
 1.5.10.1  20-Jun-2001  nathanw file files.footbridge was added on branch nathanw_sa on 2002-01-08 00:23:10 +0000
 1.5.4.2  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.5.4.1  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.5.2.1  21-Jun-2001  nathanw Catch up to -current.
 1.9.2.1  09-Nov-2002  bjh21 Catch up with -current.
 1.11.50.1  22-Oct-2006  yamt sync with head
 1.11.48.1  18-Nov-2006  ad Sync with head.
 1.11.18.2  07-Dec-2007  yamt sync with head
 1.11.18.1  30-Dec-2006  yamt sync with head.
 1.12.36.1  08-Dec-2007  mjf Sync with HEAD.
 1.12.30.1  09-Jan-2008  matt sync with HEAD
 1.12.28.3  01-Jan-2008  chris Make branch build again following sync to head.
 1.12.28.2  01-Jan-2008  chris Sync with HEAD.
 1.12.28.1  11-Aug-2007  chris Initial check-in of reworked arm interrupt routines.

Main things to note on this branch:
* spl routines are inlined, less complex, and small (kernel drops in size)
* interrupts are handled in priority order (for most things it doesn't
matter, but pending ipls are used to determine if there is any work to do)
* arm_irqhandler.c is derived from footbridge_irqhandler.c, which was based
on work by thorpej.
* The code tries to touch hardware as little as possible.
* spl masks are no longer tracked, as the system is based on pending ipls

The shared code uses global ipl lists to track which interrupt handlers
are attached to which ipl (arm_iplq[]).

Interrupt sources register with the common code to indicate:
* how many irq lines they have
* a function to set the hardware mask.
* call arm_intr_claim and arm_intr_disestablish to setup handlers

When an interrupt occurs the ipl is flagged as pending, in ipls_pending.
If it can be handled at the current_ipl_level the code does so.
If it can't be handled it's left until the current_ipl_level drops.

As the ipl level changes down a quick test is made of the new ipl level
against the ipls_pending value. If an ipl is pending arm_intr_splx_lifter
is called to handle the pending ipls.

It should be noted that all interrupts are left enabled at the hardware
level, interrupts are only masked when they occur. They are only
re-enabled after it's interrupt handler is called. Hardware masks are not
changed at any other time.

Soft interrupts are treated the same as hardware interrupts, they
register as a provider, and do not get treated specially. All the soft
interrupt handlers are placed onto the relevant global ipl queue, the same
as hard interrupts handlers.

At the moment only footbridge within a cats has been updated to use the new
handling.

Todo:
* change the handling of interrupts, so that the hardware doesn't register
a routine to fetch the hardware status. Instead is makes a call which
provides the mask. This removes the primary flag when registering an
interrupt provider. It also makes more sense with multiple interrupt
sources.
* Arm v5 has the clz asm, which could be used instead of the carefully
hand rolled arm_intr_fls function.
* switch cats isa support to use this framework.
* switch iomd and acorn32 to use this framework.
* switch shark to use this framework.
* port any other arm platforms that are interested
* examine overlaps between this code and ppcoea-renovation branch.
* add support for different trigger types (Edge, level, pulse, etc)

(note that iomd and shark currently touch hardware on every spl change,
hence why they're targets to port)
 1.12.26.1  09-Dec-2007  jmcneill Sync with HEAD.
 1.12.24.1  26-Dec-2007  rjs Sync with HEAD.
 1.12.8.1  03-Dec-2007  ad Sync with HEAD.

RSS XML Feed