amd8111_edac.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * amd8111_edac.h, EDAC defs for AMD8111 hypertransport chip
  4. *
  5. * Copyright (c) 2008 Wind River Systems, Inc.
  6. *
  7. * Authors: Cao Qingtao <[email protected]>
  8. * Benjamin Walsh <[email protected]>
  9. * Hu Yongqi <[email protected]>
  10. */
  11. #ifndef _AMD8111_EDAC_H_
  12. #define _AMD8111_EDAC_H_
  13. /************************************************************
  14. * PCI Bridge Status and Command Register, DevA:0x04
  15. ************************************************************/
  16. #define REG_PCI_STSCMD 0x04
  17. enum pci_stscmd_bits {
  18. PCI_STSCMD_SSE = BIT(30),
  19. PCI_STSCMD_RMA = BIT(29),
  20. PCI_STSCMD_RTA = BIT(28),
  21. PCI_STSCMD_SERREN = BIT(8),
  22. PCI_STSCMD_CLEAR_MASK = (PCI_STSCMD_SSE |
  23. PCI_STSCMD_RMA |
  24. PCI_STSCMD_RTA)
  25. };
  26. /************************************************************
  27. * PCI Bridge Memory Base-Limit Register, DevA:0x1c
  28. ************************************************************/
  29. #define REG_MEM_LIM 0x1c
  30. enum mem_limit_bits {
  31. MEM_LIMIT_DPE = BIT(31),
  32. MEM_LIMIT_RSE = BIT(30),
  33. MEM_LIMIT_RMA = BIT(29),
  34. MEM_LIMIT_RTA = BIT(28),
  35. MEM_LIMIT_STA = BIT(27),
  36. MEM_LIMIT_MDPE = BIT(24),
  37. MEM_LIMIT_CLEAR_MASK = (MEM_LIMIT_DPE |
  38. MEM_LIMIT_RSE |
  39. MEM_LIMIT_RMA |
  40. MEM_LIMIT_RTA |
  41. MEM_LIMIT_STA |
  42. MEM_LIMIT_MDPE)
  43. };
  44. /************************************************************
  45. * HyperTransport Link Control Register, DevA:0xc4
  46. ************************************************************/
  47. #define REG_HT_LINK 0xc4
  48. enum ht_link_bits {
  49. HT_LINK_LKFAIL = BIT(4),
  50. HT_LINK_CRCFEN = BIT(1),
  51. HT_LINK_CLEAR_MASK = (HT_LINK_LKFAIL)
  52. };
  53. /************************************************************
  54. * PCI Bridge Interrupt and Bridge Control, DevA:0x3c
  55. ************************************************************/
  56. #define REG_PCI_INTBRG_CTRL 0x3c
  57. enum pci_intbrg_ctrl_bits {
  58. PCI_INTBRG_CTRL_DTSERREN = BIT(27),
  59. PCI_INTBRG_CTRL_DTSTAT = BIT(26),
  60. PCI_INTBRG_CTRL_MARSP = BIT(21),
  61. PCI_INTBRG_CTRL_SERREN = BIT(17),
  62. PCI_INTBRG_CTRL_PEREN = BIT(16),
  63. PCI_INTBRG_CTRL_CLEAR_MASK = (PCI_INTBRG_CTRL_DTSTAT),
  64. PCI_INTBRG_CTRL_POLL_MASK = (PCI_INTBRG_CTRL_DTSERREN |
  65. PCI_INTBRG_CTRL_MARSP |
  66. PCI_INTBRG_CTRL_SERREN)
  67. };
  68. /************************************************************
  69. * I/O Control 1 Register, DevB:0x40
  70. ************************************************************/
  71. #define REG_IO_CTRL_1 0x40
  72. enum io_ctrl_1_bits {
  73. IO_CTRL_1_NMIONERR = BIT(7),
  74. IO_CTRL_1_LPC_ERR = BIT(6),
  75. IO_CTRL_1_PW2LPC = BIT(1),
  76. IO_CTRL_1_CLEAR_MASK = (IO_CTRL_1_LPC_ERR | IO_CTRL_1_PW2LPC)
  77. };
  78. /************************************************************
  79. * Legacy I/O Space Registers
  80. ************************************************************/
  81. #define REG_AT_COMPAT 0x61
  82. enum at_compat_bits {
  83. AT_COMPAT_SERR = BIT(7),
  84. AT_COMPAT_IOCHK = BIT(6),
  85. AT_COMPAT_CLRIOCHK = BIT(3),
  86. AT_COMPAT_CLRSERR = BIT(2),
  87. };
  88. struct amd8111_dev_info {
  89. u16 err_dev; /* PCI Device ID */
  90. struct pci_dev *dev;
  91. int edac_idx; /* device index */
  92. char *ctl_name;
  93. struct edac_device_ctl_info *edac_dev;
  94. void (*init)(struct amd8111_dev_info *dev_info);
  95. void (*exit)(struct amd8111_dev_info *dev_info);
  96. void (*check)(struct edac_device_ctl_info *edac_dev);
  97. };
  98. struct amd8111_pci_info {
  99. u16 err_dev; /* PCI Device ID */
  100. struct pci_dev *dev;
  101. int edac_idx; /* pci index */
  102. const char *ctl_name;
  103. struct edac_pci_ctl_info *edac_dev;
  104. void (*init)(struct amd8111_pci_info *dev_info);
  105. void (*exit)(struct amd8111_pci_info *dev_info);
  106. void (*check)(struct edac_pci_ctl_info *edac_dev);
  107. };
  108. #endif /* _AMD8111_EDAC_H_ */