1*45051539SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2a35a2818SHarry Ciao /* 3a35a2818SHarry Ciao * amd8131_edac.h, EDAC defs for AMD8131 hypertransport chip 4a35a2818SHarry Ciao * 5a35a2818SHarry Ciao * Copyright (c) 2008 Wind River Systems, Inc. 6a35a2818SHarry Ciao * 7a35a2818SHarry Ciao * Authors: Cao Qingtao <qingtao.cao@windriver.com> 8a35a2818SHarry Ciao * Benjamin Walsh <benjamin.walsh@windriver.com> 9a35a2818SHarry Ciao * Hu Yongqi <yongqi.hu@windriver.com> 10a35a2818SHarry Ciao */ 11a35a2818SHarry Ciao 12a35a2818SHarry Ciao #ifndef _AMD8131_EDAC_H_ 13a35a2818SHarry Ciao #define _AMD8131_EDAC_H_ 14a35a2818SHarry Ciao 15a35a2818SHarry Ciao #define DEVFN_PCIX_BRIDGE_NORTH_A 8 16a35a2818SHarry Ciao #define DEVFN_PCIX_BRIDGE_NORTH_B 16 17a35a2818SHarry Ciao #define DEVFN_PCIX_BRIDGE_SOUTH_A 24 18a35a2818SHarry Ciao #define DEVFN_PCIX_BRIDGE_SOUTH_B 32 19a35a2818SHarry Ciao 20a35a2818SHarry Ciao /************************************************************ 21a35a2818SHarry Ciao * PCI-X Bridge Status and Command Register, DevA:0x04 22a35a2818SHarry Ciao ************************************************************/ 23a35a2818SHarry Ciao #define REG_STS_CMD 0x04 24a35a2818SHarry Ciao enum sts_cmd_bits { 25a35a2818SHarry Ciao STS_CMD_SSE = BIT(30), 26a35a2818SHarry Ciao STS_CMD_SERREN = BIT(8) 27a35a2818SHarry Ciao }; 28a35a2818SHarry Ciao 29a35a2818SHarry Ciao /************************************************************ 30a35a2818SHarry Ciao * PCI-X Bridge Interrupt and Bridge Control Register, 31a35a2818SHarry Ciao ************************************************************/ 32a35a2818SHarry Ciao #define REG_INT_CTLR 0x3c 33a35a2818SHarry Ciao enum int_ctlr_bits { 34a35a2818SHarry Ciao INT_CTLR_DTSE = BIT(27), 35a35a2818SHarry Ciao INT_CTLR_DTS = BIT(26), 36a35a2818SHarry Ciao INT_CTLR_SERR = BIT(17), 37a35a2818SHarry Ciao INT_CTLR_PERR = BIT(16) 38a35a2818SHarry Ciao }; 39a35a2818SHarry Ciao 40a35a2818SHarry Ciao /************************************************************ 41a35a2818SHarry Ciao * PCI-X Bridge Memory Base-Limit Register, DevA:0x1C 42a35a2818SHarry Ciao ************************************************************/ 43a35a2818SHarry Ciao #define REG_MEM_LIM 0x1c 44a35a2818SHarry Ciao enum mem_limit_bits { 45a35a2818SHarry Ciao MEM_LIMIT_DPE = BIT(31), 46a35a2818SHarry Ciao MEM_LIMIT_RSE = BIT(30), 47a35a2818SHarry Ciao MEM_LIMIT_RMA = BIT(29), 48a35a2818SHarry Ciao MEM_LIMIT_RTA = BIT(28), 49a35a2818SHarry Ciao MEM_LIMIT_STA = BIT(27), 50a35a2818SHarry Ciao MEM_LIMIT_MDPE = BIT(24), 51a35a2818SHarry Ciao MEM_LIMIT_MASK = MEM_LIMIT_DPE|MEM_LIMIT_RSE|MEM_LIMIT_RMA| 52a35a2818SHarry Ciao MEM_LIMIT_RTA|MEM_LIMIT_STA|MEM_LIMIT_MDPE 53a35a2818SHarry Ciao }; 54a35a2818SHarry Ciao 55a35a2818SHarry Ciao /************************************************************ 56a35a2818SHarry Ciao * Link Configuration And Control Register, side A 57a35a2818SHarry Ciao ************************************************************/ 58a35a2818SHarry Ciao #define REG_LNK_CTRL_A 0xc4 59a35a2818SHarry Ciao 60a35a2818SHarry Ciao /************************************************************ 61a35a2818SHarry Ciao * Link Configuration And Control Register, side B 62a35a2818SHarry Ciao ************************************************************/ 63a35a2818SHarry Ciao #define REG_LNK_CTRL_B 0xc8 64a35a2818SHarry Ciao 65a35a2818SHarry Ciao enum lnk_ctrl_bits { 66a35a2818SHarry Ciao LNK_CTRL_CRCERR_A = BIT(9), 67a35a2818SHarry Ciao LNK_CTRL_CRCERR_B = BIT(8), 68a35a2818SHarry Ciao LNK_CTRL_CRCFEN = BIT(1) 69a35a2818SHarry Ciao }; 70a35a2818SHarry Ciao 71a35a2818SHarry Ciao enum pcix_bridge_inst { 72a35a2818SHarry Ciao NORTH_A = 0, 73a35a2818SHarry Ciao NORTH_B = 1, 74a35a2818SHarry Ciao SOUTH_A = 2, 75a35a2818SHarry Ciao SOUTH_B = 3, 76a35a2818SHarry Ciao NO_BRIDGE = 4 77a35a2818SHarry Ciao }; 78a35a2818SHarry Ciao 79a35a2818SHarry Ciao struct amd8131_dev_info { 80a35a2818SHarry Ciao int devfn; 81a35a2818SHarry Ciao enum pcix_bridge_inst inst; 82a35a2818SHarry Ciao struct pci_dev *dev; 83a35a2818SHarry Ciao int edac_idx; /* pci device index */ 84a35a2818SHarry Ciao char *ctl_name; 85a35a2818SHarry Ciao struct edac_pci_ctl_info *edac_dev; 86a35a2818SHarry Ciao }; 87a35a2818SHarry Ciao 88a35a2818SHarry Ciao /* 89a35a2818SHarry Ciao * AMD8131 chipset has two pairs of PCIX Bridge and related IOAPIC 90b595076aSUwe Kleine-König * Controller, and ATCA-6101 has two AMD8131 chipsets, so there are 91a35a2818SHarry Ciao * four PCIX Bridges on ATCA-6101 altogether. 92a35a2818SHarry Ciao * 93a35a2818SHarry Ciao * These PCIX Bridges share the same PCI Device ID and are all of 94a35a2818SHarry Ciao * Function Zero, they could be discrimated by their pci_dev->devfn. 95a35a2818SHarry Ciao * They share the same set of init/check/exit methods, and their 96a35a2818SHarry Ciao * private structures are collected in the devices[] array. 97a35a2818SHarry Ciao */ 98a35a2818SHarry Ciao struct amd8131_info { 99a35a2818SHarry Ciao u16 err_dev; /* PCI Device ID for AMD8131 APIC*/ 100a35a2818SHarry Ciao struct amd8131_dev_info *devices; 101a35a2818SHarry Ciao void (*init)(struct amd8131_dev_info *dev_info); 102a35a2818SHarry Ciao void (*exit)(struct amd8131_dev_info *dev_info); 103a35a2818SHarry Ciao void (*check)(struct edac_pci_ctl_info *edac_dev); 104a35a2818SHarry Ciao }; 105a35a2818SHarry Ciao 106a35a2818SHarry Ciao #endif /* _AMD8131_EDAC_H_ */ 107a35a2818SHarry Ciao 108