Skip to content
  • Cédric Le Goater's avatar
    ad5d1add
    ppc/xics: introduce an 'intc' backlink under PowerPCCPU · ad5d1add
    Cédric Le Goater authored
    
    
    Today, the ICPState array of the sPAPR machine is indexed with
    'cpu_index' of the CPUState. This numbering of CPUs is internal to
    QEMU and the guest only knows about what is exposed in the device
    tree, that is the 'cpu_dt_id'. This is why sPAPR uses the helper
    xics_get_cpu_index_by_dt_id() to do the mapping in a couple of places.
    
    To provide a more generic XICS layer, we need to abstract the IRQ
    'server' number and remove any assumption made on its nature. It
    should not be used as a 'cpu_index' for lookups like xics_cpu_setup()
    and xics_cpu_destroy() do.
    
    To reach that goal, we choose to introduce a generic 'intc' backlink
    under PowerPCCPU, and let the machine core init routine do the
    ICPState lookup. The resulting object is passed on to xics_cpu_setup()
    which does the store under PowerPCCPU. The IRQ 'server' number in XICS
    is now generic. sPAPR uses 'cpu_dt_id' and PowerNV will use 'PIR'
    number.
    
    This also has the benefit of simplifying the sPAPR hcall routines
    which do not need to do any ICPState lookups anymore.
    
    Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    ad5d1add
    ppc/xics: introduce an 'intc' backlink under PowerPCCPU
    Cédric Le Goater authored
    
    
    Today, the ICPState array of the sPAPR machine is indexed with
    'cpu_index' of the CPUState. This numbering of CPUs is internal to
    QEMU and the guest only knows about what is exposed in the device
    tree, that is the 'cpu_dt_id'. This is why sPAPR uses the helper
    xics_get_cpu_index_by_dt_id() to do the mapping in a couple of places.
    
    To provide a more generic XICS layer, we need to abstract the IRQ
    'server' number and remove any assumption made on its nature. It
    should not be used as a 'cpu_index' for lookups like xics_cpu_setup()
    and xics_cpu_destroy() do.
    
    To reach that goal, we choose to introduce a generic 'intc' backlink
    under PowerPCCPU, and let the machine core init routine do the
    ICPState lookup. The resulting object is passed on to xics_cpu_setup()
    which does the store under PowerPCCPU. The IRQ 'server' number in XICS
    is now generic. sPAPR uses 'cpu_dt_id' and PowerNV will use 'PIR'
    number.
    
    This also has the benefit of simplifying the sPAPR hcall routines
    which do not need to do any ICPState lookups anymore.
    
    Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Loading