summaryrefslogtreecommitdiffstats
path: root/src/kernel/start.S
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2015-06-25 15:43:35 -0500
committerMatthew A. Ploetz <maploetz@us.ibm.com>2016-04-04 15:07:20 -0400
commit7ee7239939e96eee38863b555042295e38cd2c98 (patch)
tree5b38835ebdcdcc16d1c6e91ec7f74ea70912e7f9 /src/kernel/start.S
parenta7f2273d33fc0ef4387d02302ff41da075c3f9d1 (diff)
downloadtalos-hostboot-7ee7239939e96eee38863b555042295e38cd2c98.tar.gz
talos-hostboot-7ee7239939e96eee38863b555042295e38cd2c98.zip
Add doorbell support.
Change-Id: I4c5ef96c4793f6da26d54d1d61a51f6395e6b34b Backport: master-p8 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/930 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com> Tested-by: FSP CI Jenkins Reviewed-by: Matthew A. Ploetz <maploetz@us.ibm.com>
Diffstat (limited to 'src/kernel/start.S')
-rw-r--r--src/kernel/start.S26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/kernel/start.S b/src/kernel/start.S
index 5d30ed15d..f9b5a95ce 100644
--- a/src/kernel/start.S
+++ b/src/kernel/start.S
@@ -208,7 +208,17 @@ UNIMPL_INTERRUPT_STUB(hype_data_storage, 0xE00)
UNIMPL_INTERRUPT_STUB(hype_inst_storage, 0xE20)
STD_INTERRUPT_STUB(hype_emu_assist, 0xE40)
UNIMPL_INTERRUPT_STUB(hype_maint, 0xE60)
+
+;// Hypervisor Doorbell Exception Vector
+;//
+;// There isn't enough room here for a "normal" stub, so jump out to 'stub2'
+;// where there is some space.
+.org _start + 0xE80
+intvect_syscall_hype_doorbell_stub:
+ b intvect_syscall_hype_doorbell_stub2
+
STD_INTERRUPT_STUB(hypervisor_external, 0xEA0)
+
UNIMPL_INTERRUPT_STUB(perf_monitor, 0xF00)
UNIMPL_INTERRUPT_STUB(vector_unavail, 0xF20)
UNIMPL_INTERRUPT_STUB(vsx_unavail, 0xF40)
@@ -877,6 +887,22 @@ UNIMPL_INTERRUPT_NOADDR(trace, 0xD00)
UNIMPL_INTERRUPT_NOADDR(hype_data_storage, 0xE00)
UNIMPL_INTERRUPT_NOADDR(hype_inst_storage, 0xE20)
UNIMPL_INTERRUPT_NOADDR(hype_maint, 0xE60)
+
+;// Hypervisor Doorbell Exception (part 2).
+;//
+;// Doorbells come in with the HSSR[01] registers, since they are Hypervisor
+;// exceptions, instead of the SRR[01] registers that the normal exception
+;// code deals with. Copy the contents of HSSR[01] -> SRR[01] first.
+;//
+intvect_syscall_hype_doorbell_stub2:
+ mtsprg0 r1
+ mfspr r1,HSRR0
+ mtsrr0 r1
+ mfspr r1,HSRR1
+ mtsrr1 r1
+ mfsprg0 r1
+STD_INTERRUPT_NOADDR(hype_doorbell)
+
UNIMPL_INTERRUPT_NOADDR(perf_monitor, 0xF00)
UNIMPL_INTERRUPT_NOADDR(vector_unavail, 0xF20)
UNIMPL_INTERRUPT_NOADDR(vsx_unavail, 0xF40)
OpenPOWER on IntegriCloud