static bool firenze_probe(void) { if (!dt_node_is_compatible(dt_root, "ibm,firenze")) return false; firenze_dt_fixup_i2cm(); return true; }
static bool firestone_probe(void) { if (!dt_node_is_compatible(dt_root, "ibm,firestone")) return false; /* Lot of common early inits here */ astbmc_early_init(); return true; }
static bool habanero_probe(void) { const char *model; if (!dt_node_is_compatible(dt_root, "ibm,powernv")) return false; /* Temporary ... eventually we'll get that in compatible */ model = dt_prop_get_def(dt_root, "model", NULL); if ((!model || !strstr(model, "habanero")) && (!dt_node_is_compatible(dt_root, "tyan,habanero"))) return false; /* Lot of common early inits here */ astbmc_early_init(); prd_init(); return true; }
static bool p9dsu_probe(void) { if (!dt_node_is_compatible(dt_root, "supermicro,p9dsu")) return false; /* Lot of common early inits here */ astbmc_early_init(); /* Setup UART for use by OPAL (Linux hvc) */ uart_set_console_policy(UART_CONSOLE_OPAL); return true; }
void nx_create_compress_node(struct dt_node *node) { u32 gcid, pb_base; int rc; gcid = dt_get_chip_id(node); pb_base = dt_get_address(node, 0, NULL); prlog(PR_INFO, "NX%d: 842 at 0x%x\n", gcid, pb_base); if (dt_node_is_compatible(node, "ibm,power9-nx")) { u64 cfg_mmio, cfg_txwc, cfg_uctrl, cfg_dma; printf("Found ibm,power9-nx\n"); cfg_mmio = pb_base + NX_P9_UMAC_VAS_MMIO_BAR; cfg_dma = pb_base + NX_P9_DMA_VAS_MMIO_BAR; cfg_txwc = pb_base + NX_P9_UMAC_TX_WINDOW_CONTEXT_BAR; cfg_uctrl = pb_base + NX_P9_UMAC_STATUS_CTRL; rc = nx_cfg_umac_vas_mmio(gcid, cfg_mmio); if (rc) return; rc = nx_cfg_dma_vas_mmio(gcid, cfg_dma); if (rc) return; rc = nx_cfg_umac_tx_wc(gcid, cfg_txwc); if (rc) return; rc = nx_cfg_umac_status_ctrl(gcid, cfg_uctrl); if (rc) return; p9_nx_enable_842(node, gcid, pb_base); p9_nx_enable_gzip(node, gcid, pb_base); } else nx_enable_842(node, gcid, pb_base); }
static void find_npu_checkstop_reason(int flat_chip_id, struct OpalHMIEvent *hmi_evt, uint64_t *out_flags) { struct phb *phb; struct npu *p = NULL; uint64_t npu_fir; uint64_t npu_fir_mask; uint64_t npu_fir_action0; uint64_t npu_fir_action1; uint64_t fatal_errors; /* Only check for NPU errors if the chip has a NPU */ if (PVR_TYPE(mfspr(SPR_PVR)) != PVR_TYPE_P8NVL) return find_npu2_checkstop_reason(flat_chip_id, hmi_evt, out_flags); /* Find the NPU on the chip associated with the HMI. */ for_each_phb(phb) { /* NOTE: if a chip ever has >1 NPU this will need adjusting */ if (dt_node_is_compatible(phb->dt_node, "ibm,power8-npu-pciex") && (dt_get_chip_id(phb->dt_node) == flat_chip_id)) { p = phb_to_npu(phb); break; } } /* If we didn't find a NPU on the chip, it's not our checkstop. */ if (p == NULL) return; /* Read all the registers necessary to find a checkstop condition. */ if (xscom_read(flat_chip_id, p->at_xscom + NX_FIR, &npu_fir) || xscom_read(flat_chip_id, p->at_xscom + NX_FIR_MASK, &npu_fir_mask) || xscom_read(flat_chip_id, p->at_xscom + NX_FIR_ACTION0, &npu_fir_action0) || xscom_read(flat_chip_id, p->at_xscom + NX_FIR_ACTION1, &npu_fir_action1)) { prerror("Couldn't read NPU registers with XSCOM\n"); return; } fatal_errors = npu_fir & ~npu_fir_mask & npu_fir_action0 & npu_fir_action1; /* If there's no errors, we don't need to do anything. */ if (!fatal_errors) return; prlog(PR_DEBUG, "NPU: FIR 0x%016llx mask 0x%016llx\n", npu_fir, npu_fir_mask); prlog(PR_DEBUG, "NPU: ACTION0 0x%016llx, ACTION1 0x%016llx\n", npu_fir_action0, npu_fir_action1); /* Set the NPU to fenced since it can't recover. */ npu_set_fence_state(p, true); /* Set up the HMI event */ hmi_evt->severity = OpalHMI_SEV_WARNING; hmi_evt->type = OpalHMI_ERROR_MALFUNC_ALERT; hmi_evt->u.xstop_error.xstop_type = CHECKSTOP_TYPE_NPU; hmi_evt->u.xstop_error.u.chip_id = flat_chip_id; /* The HMI is "recoverable" because it shouldn't crash the system */ queue_hmi_event(hmi_evt, 1, out_flags); }
static bool phb_is_npu2(struct dt_node *dn) { return (dt_node_is_compatible(dn, "ibm,power9-npu-pciex") || dt_node_is_compatible(dn, "ibm,power9-npu-opencapi-pciex")); }
static bool apollo_probe(void) { return dt_node_is_compatible(dt_root, "ibm,apollo"); }