brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · 2bef5c8 Raw
41 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3==========================================4Notes on register bank usage in the kernel5==========================================6 7Introduction8------------9 10The SH-3 and SH-4 CPU families traditionally include a single partial register11bank (selected by SR.RB, only r0 ... r7 are banked), whereas other families12may have more full-featured banking or simply no such capabilities at all.13 14SR.RB banking15-------------16 17In the case of this type of banking, banked registers are mapped directly to18r0 ... r7 if SR.RB is set to the bank we are interested in, otherwise ldc/stc19can still be used to reference the banked registers (as r0_bank ... r7_bank)20when in the context of another bank. The developer must keep the SR.RB value21in mind when writing code that utilizes these banked registers, for obvious22reasons. Userspace is also not able to poke at the bank1 values, so these can23be used rather effectively as scratch registers by the kernel.24 25Presently the kernel uses several of these registers.26 27	- r0_bank, r1_bank (referenced as k0 and k1, used for scratch28	  registers when doing exception handling).29 30	- r2_bank (used to track the EXPEVT/INTEVT code)31 32		- Used by do_IRQ() and friends for doing irq mapping based off33		  of the interrupt exception vector jump table offset34 35	- r6_bank (global interrupt mask)36 37		- The SR.IMASK interrupt handler makes use of this to set the38		  interrupt priority level (used by local_irq_enable())39 40	- r7_bank (current)41