mirror of https://gitee.com/openkylin/qemu.git
spapr_pci: Rework device-tree rendering
This replaces object_child_foreach() and callback with existing SPAPR_PCI_LIOBN() and spapr_tce_find_by_liobn() to make the code easier to read. This is a mechanical patch so no behaviour change is expected. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
fae807a2b1
commit
ccf9ff8527
|
@ -1090,29 +1090,6 @@ PCIHostState *spapr_create_phb(sPAPREnvironment *spapr, int index)
|
|||
#define b_fff(x) b_x((x), 8, 3) /* function number */
|
||||
#define b_rrrrrrrr(x) b_x((x), 0, 8) /* register number */
|
||||
|
||||
typedef struct sPAPRTCEDT {
|
||||
void *fdt;
|
||||
int node_off;
|
||||
} sPAPRTCEDT;
|
||||
|
||||
static int spapr_phb_children_dt(Object *child, void *opaque)
|
||||
{
|
||||
sPAPRTCEDT *p = opaque;
|
||||
sPAPRTCETable *tcet;
|
||||
|
||||
tcet = (sPAPRTCETable *) object_dynamic_cast(child, TYPE_SPAPR_TCE_TABLE);
|
||||
if (!tcet || SPAPR_PCI_DMA_WINDOW_NUM(tcet->liobn)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
spapr_dma_dt(p->fdt, p->node_off, "ibm,dma-window",
|
||||
tcet->liobn, tcet->bus_offset,
|
||||
tcet->nb_table << tcet->page_shift);
|
||||
/* Stop after the first window */
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int spapr_populate_pci_dt(sPAPRPHBState *phb,
|
||||
uint32_t xics_phandle,
|
||||
void *fdt)
|
||||
|
@ -1151,6 +1128,7 @@ int spapr_populate_pci_dt(sPAPRPHBState *phb,
|
|||
uint32_t interrupt_map_mask[] = {
|
||||
cpu_to_be32(b_ddddd(-1)|b_fff(0)), 0x0, 0x0, cpu_to_be32(-1)};
|
||||
uint32_t interrupt_map[PCI_SLOT_MAX * PCI_NUM_PINS][7];
|
||||
sPAPRTCETable *tcet;
|
||||
|
||||
/* Start populating the FDT */
|
||||
sprintf(nodename, "pci@%" PRIx64, phb->buid);
|
||||
|
@ -1203,8 +1181,10 @@ int spapr_populate_pci_dt(sPAPRPHBState *phb,
|
|||
_FDT(fdt_setprop(fdt, bus_off, "interrupt-map", &interrupt_map,
|
||||
sizeof(interrupt_map)));
|
||||
|
||||
object_child_foreach(OBJECT(phb), spapr_phb_children_dt,
|
||||
&((sPAPRTCEDT){ .fdt = fdt, .node_off = bus_off }));
|
||||
tcet = spapr_tce_find_by_liobn(SPAPR_PCI_LIOBN(phb->index, 0));
|
||||
spapr_dma_dt(fdt, bus_off, "ibm,dma-window",
|
||||
tcet->liobn, tcet->bus_offset,
|
||||
tcet->nb_table << tcet->page_shift);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue