[PowerPC64LE] Tell the hypervisor to switch interrupts to LE at CHRP attach.

Since we will need to be able to take traps relatively early in the process,
ensure that the hypervisor changes our ILE for us as soon as we are ready.

Sponsored by:	Tag1 Consulting, Inc.
This commit is contained in:
Brandon Bergren 2020-09-23 00:03:35 +00:00
parent b49db8270a
commit 35ef395191
2 changed files with 28 additions and 0 deletions

View File

@ -170,6 +170,13 @@
#define H_PP1 (1UL<<(63-62))
#define H_PP2 (1UL<<(63-63))
/* H_SET_MODE resource identifiers from 14.5.4.3.5. */
#define H_SET_MODE_RSRC_CIABR 0x1 /* All versions */
#define H_SET_MODE_RSRC_DAWR0 0x2 /* All versions */
#define H_SET_MODE_RSRC_INTR_TRANS_MODE 0x3 /* All versions */
#define H_SET_MODE_RSRC_ILE 0x4 /* PAPR 2.8 / ISA 2.07 */
#define H_SET_MODE_RSRC_DAWR1 0x5 /* ISA 3.1 Future support */
/* pSeries hypervisor opcodes. */
#define H_REMOVE 0x04
#define H_ENTER 0x08

View File

@ -136,6 +136,9 @@ chrp_attach(platform_t plat)
int quiesce;
#ifdef __powerpc64__
int i;
#if BYTE_ORDER == LITTLE_ENDIAN
int result;
#endif
/* XXX: check for /rtas/ibm,hypertas-functions? */
if (!(mfmsr() & PSL_HV)) {
@ -171,6 +174,24 @@ chrp_attach(platform_t plat)
/* Set up hypervisor CPU stuff */
chrp_smp_ap_init(plat);
#if BYTE_ORDER == LITTLE_ENDIAN
/*
* Ask the hypervisor to update the LPAR ILE bit.
*
* This involves all processors reentering the hypervisor
* so the change appears simultaneously in all processors.
* This can take a long time.
*/
for(;;) {
result = phyp_hcall(H_SET_MODE, 1UL,
H_SET_MODE_RSRC_ILE, 0, 0);
if (result == H_SUCCESS)
break;
DELAY(1000);
}
#endif
}
#endif
chrp_cpuref_init();