-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6: (108 commits) sh: Fix occasional flush_cache_4096() stack corruption. sh: Calculate shm alignment at runtime. sh: dma-mapping compile fixes. sh: Initial vsyscall page support. sh: Clean up PAGE_SIZE definition for assembly use. sh: Selective flush_cache_mm() flushing. sh: More intelligent entry_mask/way_size calculation. sh: Support for L2 cache on newer SH-4A CPUs. sh: Update kexec support for API changes. sh: Optimized readsl()/writesl() support. sh: Report movli.l/movco.l capabilities. sh: CPU flags in AT_HWCAP in ELF auxvt. sh: Add support for 4K stacks. sh: Enable /proc/kcore support. sh: stack debugging support. sh: select CONFIG_EMBEDDED. sh: machvec rework. sh: Solution Engine SH7343 board support. sh: SH7710VoIPGW board support. sh: Enable verbose BUG() support. ...
- Loading branch information
Showing
355 changed files
with
20,709 additions
and
9,006 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
Notes on register bank usage in the kernel | ||
========================================== | ||
|
||
Introduction | ||
------------ | ||
|
||
The SH-3 and SH-4 CPU families traditionally include a single partial register | ||
bank (selected by SR.RB, only r0 ... r7 are banked), whereas other families | ||
may have more full-featured banking or simply no such capabilities at all. | ||
|
||
SR.RB banking | ||
------------- | ||
|
||
In the case of this type of banking, banked registers are mapped directly to | ||
r0 ... r7 if SR.RB is set to the bank we are interested in, otherwise ldc/stc | ||
can still be used to reference the banked registers (as r0_bank ... r7_bank) | ||
when in the context of another bank. The developer must keep the SR.RB value | ||
in mind when writing code that utilizes these banked registers, for obvious | ||
reasons. Userspace is also not able to poke at the bank1 values, so these can | ||
be used rather effectively as scratch registers by the kernel. | ||
|
||
Presently the kernel uses several of these registers. | ||
|
||
- r0_bank, r1_bank (referenced as k0 and k1, used for scratch | ||
registers when doing exception handling). | ||
- r2_bank (used to track the EXPEVT/INTEVT code) | ||
- Used by do_IRQ() and friends for doing irq mapping based off | ||
of the interrupt exception vector jump table offset | ||
- r6_bank (global interrupt mask) | ||
- The SR.IMASK interrupt handler makes use of this to set the | ||
interrupt priority level (used by local_irq_enable()) | ||
- r7_bank (current) | ||
|
Oops, something went wrong.