|
@@ -1407,7 +1407,6 @@ void spapr_init_all_lpcrs(target_ulong value, target_ulong mask)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
|
|
static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
|
|
target_ulong lpid, ppc_v3_pate_t *entry)
|
|
target_ulong lpid, ppc_v3_pate_t *entry)
|
|
{
|
|
{
|
|
@@ -1420,33 +1419,10 @@ static bool spapr_get_pate(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu,
|
|
/* Copy PATE1:GR into PATE0:HR */
|
|
/* Copy PATE1:GR into PATE0:HR */
|
|
entry->dw0 = spapr->patb_entry & PATE0_HR;
|
|
entry->dw0 = spapr->patb_entry & PATE0_HR;
|
|
entry->dw1 = spapr->patb_entry;
|
|
entry->dw1 = spapr->patb_entry;
|
|
-
|
|
|
|
|
|
+ return true;
|
|
} else {
|
|
} else {
|
|
- uint64_t patb, pats;
|
|
|
|
-
|
|
|
|
- assert(lpid != 0);
|
|
|
|
-
|
|
|
|
- patb = spapr->nested_ptcr & PTCR_PATB;
|
|
|
|
- pats = spapr->nested_ptcr & PTCR_PATS;
|
|
|
|
-
|
|
|
|
- /* Check if partition table is properly aligned */
|
|
|
|
- if (patb & MAKE_64BIT_MASK(0, pats + 12)) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* Calculate number of entries */
|
|
|
|
- pats = 1ull << (pats + 12 - 4);
|
|
|
|
- if (pats <= lpid) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* Grab entry */
|
|
|
|
- patb += 16 * lpid;
|
|
|
|
- entry->dw0 = ldq_phys(CPU(cpu)->as, patb);
|
|
|
|
- entry->dw1 = ldq_phys(CPU(cpu)->as, patb + 8);
|
|
|
|
|
|
+ return spapr_get_pate_nested_hv(spapr, cpu, lpid, entry);
|
|
}
|
|
}
|
|
-
|
|
|
|
- return true;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
#define HPTE(_table, _i) (void *)(((uint64_t *)(_table)) + ((_i) * 2))
|
|
#define HPTE(_table, _i) (void *)(((uint64_t *)(_table)) + ((_i) * 2))
|