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_fff(x) b_x((x), 8, 3) /* function number */
|
||||||
#define b_rrrrrrrr(x) b_x((x), 0, 8) /* register 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,
|
int spapr_populate_pci_dt(sPAPRPHBState *phb,
|
||||||
uint32_t xics_phandle,
|
uint32_t xics_phandle,
|
||||||
void *fdt)
|
void *fdt)
|
||||||
|
@ -1151,6 +1128,7 @@ int spapr_populate_pci_dt(sPAPRPHBState *phb,
|
||||||
uint32_t interrupt_map_mask[] = {
|
uint32_t interrupt_map_mask[] = {
|
||||||
cpu_to_be32(b_ddddd(-1)|b_fff(0)), 0x0, 0x0, cpu_to_be32(-1)};
|
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];
|
uint32_t interrupt_map[PCI_SLOT_MAX * PCI_NUM_PINS][7];
|
||||||
|
sPAPRTCETable *tcet;
|
||||||
|
|
||||||
/* Start populating the FDT */
|
/* Start populating the FDT */
|
||||||
sprintf(nodename, "pci@%" PRIx64, phb->buid);
|
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,
|
_FDT(fdt_setprop(fdt, bus_off, "interrupt-map", &interrupt_map,
|
||||||
sizeof(interrupt_map)));
|
sizeof(interrupt_map)));
|
||||||
|
|
||||||
object_child_foreach(OBJECT(phb), spapr_phb_children_dt,
|
tcet = spapr_tce_find_by_liobn(SPAPR_PCI_LIOBN(phb->index, 0));
|
||||||
&((sPAPRTCEDT){ .fdt = fdt, .node_off = bus_off }));
|
spapr_dma_dt(fdt, bus_off, "ibm,dma-window",
|
||||||
|
tcet->liobn, tcet->bus_offset,
|
||||||
|
tcet->nb_table << tcet->page_shift);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue