Skip to content

Commit

Permalink
ppc/xics: Implement H_IPOLL using an accessor
Browse files Browse the repository at this point in the history
None of the other presenter functions directly mucks with the
internal state, so don't do it there either.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
  • Loading branch information
ozbenh authored and dgibson committed Jul 1, 2016
1 parent 9c7027b commit 1cbd222
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
8 changes: 8 additions & 0 deletions hw/intc/xics.c
Expand Up @@ -288,6 +288,14 @@ uint32_t icp_accept(ICPState *ss)
return xirr;
}

uint32_t icp_ipoll(ICPState *ss, uint32_t *mfrr)
{
if (mfrr) {
*mfrr = ss->mfrr;
}
return ss->xirr;
}

void icp_eoi(XICSState *icp, int server, uint32_t xirr)
{
ICPState *ss = icp->ss + server;
Expand Down
7 changes: 4 additions & 3 deletions hw/intc/xics_spapr.c
Expand Up @@ -99,10 +99,11 @@ static target_ulong h_ipoll(PowerPCCPU *cpu, sPAPRMachineState *spapr,
target_ulong opcode, target_ulong *args)
{
CPUState *cs = CPU(cpu);
ICPState *ss = &spapr->icp->ss[cs->cpu_index];
uint32_t mfrr;
uint32_t xirr = icp_ipoll(spapr->icp->ss + cs->cpu_index, &mfrr);

args[0] = ss->xirr;
args[1] = ss->mfrr;
args[0] = xirr;
args[1] = mfrr;

return H_SUCCESS;
}
Expand Down
1 change: 1 addition & 0 deletions include/hw/ppc/xics.h
Expand Up @@ -186,6 +186,7 @@ int xics_get_cpu_index_by_dt_id(int cpu_dt_id);
void icp_set_cppr(XICSState *icp, int server, uint8_t cppr);
void icp_set_mfrr(XICSState *icp, int server, uint8_t mfrr);
uint32_t icp_accept(ICPState *ss);
uint32_t icp_ipoll(ICPState *ss, uint32_t *mfrr);
void icp_eoi(XICSState *icp, int server, uint32_t xirr);

void ics_write_xive(ICSState *ics, int nr, int server,
Expand Down

0 comments on commit 1cbd222

Please sign in to comment.