static void powernv_populate_chip(PnvChip *chip, void *fdt) { PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip); char *typename = pnv_core_typename(pcc->cpu_model); size_t typesize = object_type_get_instance_size(typename); int i; pnv_xscom_populate(chip, fdt, 0); /* The default LPC bus of a multichip system is on chip 0. It's * recognized by the firmware (skiboot) using a "primary" * property. */ if (chip->chip_id == 0x0) { int lpc_offset = pnv_chip_lpc_offset(chip, fdt); _FDT((fdt_setprop(fdt, lpc_offset, "primary", NULL, 0))); } for (i = 0; i < chip->nr_cores; i++) { PnvCore *pnv_core = PNV_CORE(chip->cores + i * typesize); powernv_create_core_node(chip, pnv_core, fdt); /* Interrupt Control Presenters (ICP). One per core. */ powernv_populate_icp(chip, fdt, pnv_core->pir, CPU_CORE(pnv_core)->nr_threads); } if (chip->ram_size) { powernv_populate_memory_node(fdt, chip->chip_id, chip->ram_start, chip->ram_size); } g_free(typename); }
static uint32_t pnv_xscom_pcba(PnvChip *chip, uint64_t addr) { PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip); addr &= (PNV_XSCOM_SIZE - 1); if (pcc->chip_type == PNV_CHIP_POWER9) { return addr >> 3; } else { return ((addr >> 4) & ~0xfull) | ((addr >> 3) & 0xf);