diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2015-06-25 15:43:35 -0500 |
---|---|---|
committer | Matthew A. Ploetz <maploetz@us.ibm.com> | 2016-04-04 15:07:20 -0400 |
commit | 7ee7239939e96eee38863b555042295e38cd2c98 (patch) | |
tree | 5b38835ebdcdcc16d1c6e91ec7f74ea70912e7f9 /src/kernel/start.S | |
parent | a7f2273d33fc0ef4387d02302ff41da075c3f9d1 (diff) | |
download | talos-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.S | 26 |
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) |