px_fm.h revision eae2e508a8e70b1ec407b10bd068c080651bbe5c
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai/*
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * CDDL HEADER START
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai *
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * The contents of this file are subject to the terms of the
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Common Development and Distribution License (the "License").
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * You may not use this file except in compliance with the License.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai *
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * or http://www.opensolaris.org/os/licensing.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * See the License for the specific language governing permissions
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * and limitations under the License.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai *
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * When distributing Covered Code, include this CDDL HEADER in each
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * If applicable, add the following below this CDDL HEADER, with the
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * fields enclosed by brackets "[]" replaced with your own identifying
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * information: Portions Copyright [yyyy] [name of copyright owner]
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai *
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * CDDL HEADER END
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai/*
cb174861876aea6950a7ab4ce944aff84b1914cdjoyce mcintosh * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
5496c1178a1a48006226450b13c2df195831794cAlek Pinchuk * Use is subject to license terms.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#ifndef _SYS_PX_FM_H
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define _SYS_PX_FM_H
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#pragma ident "%Z%%M% %I% %E% SMI"
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#ifdef __cplusplus
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern "C" {
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#endif
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_ERR_PIL 14
bbf6f00c25b6a2bed23c35eac6d62998ecdb338cJordan Brown#define PX_ERR_LOW_PIL 9
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
bbf6f00c25b6a2bed23c35eac6d62998ecdb338cJordan Brown/*
bbf6f00c25b6a2bed23c35eac6d62998ecdb338cJordan Brown * Error handlers maybe called due to trap or interrupts
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * occured.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_TRAP_CALL 0
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_INTR_CALL 1
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_LIB_CALL 2
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai/*
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Definition of Fire internal error severity -
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * HW Reset Errors that cause hardware to automatically reset. Software is
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * being reset along, sticky status bits need to be cleaned up upon
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * system initialization.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Panic Errors that definitely result in panic'ing the system.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Expected Expected error, do not panic, plus do not send ereport.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Protected Errors SW to determine panic or not, forgivable for safe access.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Set when SW determines this error is forgivable during safe acc.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * No-panic Errors that don't directly result in panic'ing the system.
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * No-Error When an interrupt occured and no errors were seen
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_HW_RESET (0x1 << 5)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_PANIC (0x1 << 4)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_EXPECTED (0x1 << 3)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_PROTECTED (0x1 << 2)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_NO_PANIC (0x1 << 1)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_NO_ERROR (0x1 << 0)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_HB (0x1 << 2)
bbf6f00c25b6a2bed23c35eac6d62998ecdb338cJordan Brown#define PX_RP (0x1 << 1)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_RC (0x1 << 0)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai/*
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Generic PCIe Root Port Error Handling
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * This struct must align with px_pec_err_t in sun4v/io/px/px_err.h
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaitypedef struct px_err_pcie {
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t tx_hdr1; /* sysino */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t tx_hdr2; /* sysino */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t tx_hdr3; /* ehdl */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t tx_hdr4; /* ehdl */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t primary_ue; /* stick */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t rsvd0; /* stick */
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States uint32_t rsvd1; /* pec_desc */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint16_t pci_err_status;
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint16_t pcie_err_status;
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t ce_reg;
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t ue_reg;
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t rx_hdr1; /* hdr[0] */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t rx_hdr2; /* hdr[0] */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t rx_hdr3; /* hdr[1] */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t rx_hdr4; /* hdr[1] */
bbf6f00c25b6a2bed23c35eac6d62998ecdb338cJordan Brown uint32_t rsvd3; /* err_src_reg */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t rsvd4; /* root err status */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai} px_err_pcie_t;
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_FM_BLOCK_HOST (0x1 << 0)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_FM_BLOCK_PCIE (0x1 << 1)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#define PX_FM_BLOCK_ALL (PX_FM_BLOCK_HOST | PX_FM_BLOCK_PCIE)
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai/*
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Error handling FMA hook
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern void px_bus_enter(dev_info_t *dip, ddi_acc_handle_t handle);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern void px_bus_exit(dev_info_t *dip, ddi_acc_handle_t handle);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_fm_attach(px_t *px_p);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern void px_fm_detach(px_t *px_p);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_fm_init_child(dev_info_t *, dev_info_t *, int,
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai ddi_iblock_cookie_t *);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern void px_fm_acc_setup(ddi_map_req_t *, dev_info_t *, pci_regspec_t *rp);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_fm_callback(dev_info_t *, ddi_fm_error_t *, const void *);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_err_cmn_intr(px_t *, ddi_fm_error_t *, int, int);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai/*
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Fire interrupt handlers
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern uint_t px_err_cb_intr(caddr_t arg);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern uint_t px_err_dmc_pec_intr(caddr_t arg);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesextern uint_t px_err_fabric_intr(px_t *px_p, msgcode_t msg_code,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States pcie_req_id_t rid);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
f96bd5c800e73e351b0b6e4bd7f00b578dad29bbAlan Wright/*
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Common error handling functions
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_scan_fabric(px_t *px_p, dev_info_t *rdip, ddi_fm_error_t *derr);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern void px_err_safeacc_check(px_t *px_p, ddi_fm_error_t *derr);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_err_check_eq(dev_info_t *dip);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_err_check_pcie(dev_info_t *dip, ddi_fm_error_t *derr,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States px_err_pcie_t *regs);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_fm_enter(px_t *px_p);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern void px_fm_exit(px_t *px_p);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesextern void px_err_panic(int err, int msg, int fab_err, boolean_t isTest);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern void px_rp_en_q(px_t *px_p, pcie_req_id_t fault_bdf,
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai uint32_t fault_addr, uint16_t s_status);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai/*
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai * Sparc specific cfg, pio and dma handle lookup/check functions
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_err_cfg_hdl_check(dev_info_t *dip, const void *handle,
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai const void *addr, const void *not_used);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_err_pio_hdl_check(dev_info_t *dip, const void *handle,
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai const void *addr, const void *not_used);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desaiextern int px_err_dma_hdl_check(dev_info_t *dip, const void *handle,
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai const void *addr, const void *not_used);
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#ifdef __cplusplus
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai}
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#endif
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai#endif /* _SYS_PX_FM_H */
e3f2c991a8548408db0a2787bd8b43d5124821d3Keyur Desai