-
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.
powerpc/powernv: Add OPAL takeover from PowerVM
On machines supporting the OPAL firmware version 1, the system is initially booted under pHyp. We then use a special hypercall to verify if OPAL is available and if it is, we then trigger a "takeover" which disables pHyp and loads the OPAL runtime firmware, giving control to the kernel in hypervisor mode. This patch add the necessary code to detect that the OPAL takeover capability is present when running under PowerVM (aka pHyp) and perform said takeover to get hypervisor control of the processor. To perform the takeover, we must first use RTAS (within Open Firmware runtime environment) to start all processors & threads, in order to give control to OPAL on all of them. We then call the takeover hypercall on everybody, OPAL will re-enter the kernel main entry point passing it a flat device-tree. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
- Loading branch information
Benjamin Herrenschmidt
committed
Sep 20, 2011
1 parent
344eb01
commit 27f4488
Showing
6 changed files
with
419 additions
and
19 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* | ||
* PowerNV OPAL definitions. | ||
* | ||
* Copyright 2011 IBM Corp. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the License, or (at your option) any later version. | ||
*/ | ||
|
||
#ifndef __OPAL_H | ||
#define __OPAL_H | ||
|
||
/****** Takeover interface ********/ | ||
|
||
/* PAPR H-Call used to querty the HAL existence and/or instanciate | ||
* it from within pHyp (tech preview only). | ||
* | ||
* This is exclusively used in prom_init.c | ||
*/ | ||
|
||
#ifndef __ASSEMBLY__ | ||
|
||
struct opal_takeover_args { | ||
u64 k_image; /* r4 */ | ||
u64 k_size; /* r5 */ | ||
u64 k_entry; /* r6 */ | ||
u64 k_entry2; /* r7 */ | ||
u64 hal_addr; /* r8 */ | ||
u64 rd_image; /* r9 */ | ||
u64 rd_size; /* r10 */ | ||
u64 rd_loc; /* r11 */ | ||
}; | ||
|
||
extern long opal_query_takeover(u64 *hal_size, u64 *hal_align); | ||
|
||
extern long opal_do_takeover(struct opal_takeover_args *args); | ||
|
||
extern int opal_enter_rtas(struct rtas_args *args, | ||
unsigned long data, | ||
unsigned long entry); | ||
|
||
|
||
#endif /* __ASSEMBLY__ */ | ||
|
||
/****** OPAL APIs ******/ | ||
|
||
|
||
#endif /* __OPAL_H */ |
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
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 |
---|---|---|
@@ -1,2 +1,2 @@ | ||
obj-y += setup.o | ||
obj-y += setup.o opal-takeover.o | ||
obj-$(CONFIG_SMP) += smp.o |
Oops, something went wrong.