Commit e94ee641 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'edac_updates_for_v6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras

Pull EDAC updates from Borislav Petkov:

 - skx_edac: Fix overflow when decoding 32G DIMM ranks

 - i10nm_edac: Add Sierra Forest support

 - amd64_edac: Split driver code between legacy and SMCA systems. The
   final goal is adding support for more hw, like GPUs

 - The usual minor cleanups and fixes

* tag 'edac_updates_for_v6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras: (25 commits)
  EDAC/i10nm: Add Intel Sierra Forest server support
  EDAC/amd64: Fix indentation in umc_determine_edac_cap()
  EDAC/altera: Remove MODULE_LICENSE in non-module
  EDAC: Sanitize MODULE_AUTHOR strings
  EDAC/amd81[13]1: Remove trailing newline from MODULE_AUTHOR
  EDAC/amd64: Add get_err_info() to pvt->ops
  EDAC/amd64: Split dump_misc_regs() into dct/umc functions
  EDAC/amd64: Split init_csrows() into dct/umc functions
  EDAC/amd64: Split determine_edac_cap() into dct/umc functions
  EDAC/amd64: Rename f17h_determine_edac_ctl_cap()
  EDAC/amd64: Split setup_mci_misc_attrs() into dct/umc functions
  EDAC/amd64: Split ecc_enabled() into dct/umc functions
  EDAC/amd64: Split read_mc_regs() into dct/umc functions
  EDAC/amd64: Split determine_memory_type() into dct/umc functions
  EDAC/amd64: Split read_base_mask() into dct/umc functions
  EDAC/amd64: Split prep_chip_selects() into dct/umc functions
  EDAC/amd64: Rework hw_info_{get,put}
  EDAC/amd64: Merge struct amd64_family_type into struct amd64_pvt
  EDAC/amd64: Do not discover ECC symbol size for Family 17h and later
  EDAC/amd64: Drop dbam_to_cs() for Family 17h and later
  ...
parents f7301270 ce8ac911
...@@ -2149,10 +2149,8 @@ static int altr_edac_a10_probe(struct platform_device *pdev) ...@@ -2149,10 +2149,8 @@ static int altr_edac_a10_probe(struct platform_device *pdev)
} }
edac->sb_irq = platform_get_irq(pdev, 0); edac->sb_irq = platform_get_irq(pdev, 0);
if (edac->sb_irq < 0) { if (edac->sb_irq < 0)
dev_err(&pdev->dev, "No SBERR IRQ resource\n");
return edac->sb_irq; return edac->sb_irq;
}
irq_set_chained_handler_and_data(edac->sb_irq, irq_set_chained_handler_and_data(edac->sb_irq,
altr_edac_a10_irq_handler, altr_edac_a10_irq_handler,
...@@ -2184,10 +2182,9 @@ static int altr_edac_a10_probe(struct platform_device *pdev) ...@@ -2184,10 +2182,9 @@ static int altr_edac_a10_probe(struct platform_device *pdev)
} }
#else #else
edac->db_irq = platform_get_irq(pdev, 1); edac->db_irq = platform_get_irq(pdev, 1);
if (edac->db_irq < 0) { if (edac->db_irq < 0)
dev_err(&pdev->dev, "No DBERR IRQ resource\n");
return edac->db_irq; return edac->db_irq;
}
irq_set_chained_handler_and_data(edac->db_irq, irq_set_chained_handler_and_data(edac->db_irq,
altr_edac_a10_irq_handler, edac); altr_edac_a10_irq_handler, edac);
#endif #endif
...@@ -2226,6 +2223,5 @@ static struct platform_driver altr_edac_a10_driver = { ...@@ -2226,6 +2223,5 @@ static struct platform_driver altr_edac_a10_driver = {
}; };
module_platform_driver(altr_edac_a10_driver); module_platform_driver(altr_edac_a10_driver);
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Thor Thayer"); MODULE_AUTHOR("Thor Thayer");
MODULE_DESCRIPTION("EDAC Driver for Altera Memories"); MODULE_DESCRIPTION("EDAC Driver for Altera Memories");
This diff is collapsed.
...@@ -273,25 +273,6 @@ ...@@ -273,25 +273,6 @@
#define UMC_SDP_INIT BIT(31) #define UMC_SDP_INIT BIT(31)
enum amd_families {
K8_CPUS = 0,
F10_CPUS,
F15_CPUS,
F15_M30H_CPUS,
F15_M60H_CPUS,
F16_CPUS,
F16_M30H_CPUS,
F17_CPUS,
F17_M10H_CPUS,
F17_M30H_CPUS,
F17_M60H_CPUS,
F17_M70H_CPUS,
F19_CPUS,
F19_M10H_CPUS,
F19_M50H_CPUS,
NUM_FAMILIES,
};
/* Error injection control structure */ /* Error injection control structure */
struct error_injection { struct error_injection {
u32 section; u32 section;
...@@ -334,6 +315,16 @@ struct amd64_umc { ...@@ -334,6 +315,16 @@ struct amd64_umc {
enum mem_type dram_type; enum mem_type dram_type;
}; };
struct amd64_family_flags {
/*
* Indicates that the system supports the new register offsets, etc.
* first introduced with Family 19h Model 10h.
*/
__u64 zn_regs_v2 : 1,
__reserved : 63;
};
struct amd64_pvt { struct amd64_pvt {
struct low_ops *ops; struct low_ops *ops;
...@@ -375,6 +366,12 @@ struct amd64_pvt { ...@@ -375,6 +366,12 @@ struct amd64_pvt {
/* x4, x8, or x16 syndromes in use */ /* x4, x8, or x16 syndromes in use */
u8 ecc_sym_sz; u8 ecc_sym_sz;
const char *ctl_name;
u16 f1_id, f2_id;
/* Maximum number of memory controllers per die/node. */
u8 max_mcs;
struct amd64_family_flags flags;
/* place to store error injection parameters prior to issue */ /* place to store error injection parameters prior to issue */
struct error_injection injection; struct error_injection injection;
...@@ -465,29 +462,15 @@ struct ecc_settings { ...@@ -465,29 +462,15 @@ struct ecc_settings {
* functions and per device encoding/decoding logic. * functions and per device encoding/decoding logic.
*/ */
struct low_ops { struct low_ops {
void (*map_sysaddr_to_csrow) (struct mem_ctl_info *mci, u64 sys_addr, void (*map_sysaddr_to_csrow)(struct mem_ctl_info *mci, u64 sys_addr,
struct err_info *); struct err_info *err);
int (*dbam_to_cs) (struct amd64_pvt *pvt, u8 dct, int (*dbam_to_cs)(struct amd64_pvt *pvt, u8 dct,
unsigned cs_mode, int cs_mask_nr); unsigned int cs_mode, int cs_mask_nr);
}; int (*hw_info_get)(struct amd64_pvt *pvt);
bool (*ecc_enabled)(struct amd64_pvt *pvt);
struct amd64_family_flags { void (*setup_mci_misc_attrs)(struct mem_ctl_info *mci);
/* void (*dump_misc_regs)(struct amd64_pvt *pvt);
* Indicates that the system supports the new register offsets, etc. void (*get_err_info)(struct mce *m, struct err_info *err);
* first introduced with Family 19h Model 10h.
*/
__u64 zn_regs_v2 : 1,
__reserved : 63;
};
struct amd64_family_type {
const char *ctl_name;
u16 f1_id, f2_id;
/* Maximum number of memory controllers per die/node. */
u8 max_mcs;
struct amd64_family_flags flags;
struct low_ops ops;
}; };
int __amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset, int __amd64_read_pci_cfg_dword(struct pci_dev *pdev, int offset,
......
...@@ -593,5 +593,5 @@ module_init(amd8111_edac_init); ...@@ -593,5 +593,5 @@ module_init(amd8111_edac_init);
module_exit(amd8111_edac_exit); module_exit(amd8111_edac_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Cao Qingtao <qingtao.cao@windriver.com>\n"); MODULE_AUTHOR("Cao Qingtao <qingtao.cao@windriver.com>");
MODULE_DESCRIPTION("AMD8111 HyperTransport I/O Hub EDAC kernel module"); MODULE_DESCRIPTION("AMD8111 HyperTransport I/O Hub EDAC kernel module");
...@@ -354,5 +354,5 @@ module_init(amd8131_edac_init); ...@@ -354,5 +354,5 @@ module_init(amd8131_edac_init);
module_exit(amd8131_edac_exit); module_exit(amd8131_edac_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Cao Qingtao <qingtao.cao@windriver.com>\n"); MODULE_AUTHOR("Cao Qingtao <qingtao.cao@windriver.com>");
MODULE_DESCRIPTION("AMD8131 HyperTransport PCI-X Tunnel EDAC kernel module"); MODULE_DESCRIPTION("AMD8131 HyperTransport PCI-X Tunnel EDAC kernel module");
...@@ -1462,7 +1462,7 @@ module_init(e752x_init); ...@@ -1462,7 +1462,7 @@ module_init(e752x_init);
module_exit(e752x_exit); module_exit(e752x_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Linux Networx (http://lnxi.com) Tom Zimmerman\n"); MODULE_AUTHOR("Linux Networx (http://lnxi.com) Tom Zimmerman");
MODULE_DESCRIPTION("MC support for Intel e752x/3100 memory controllers"); MODULE_DESCRIPTION("MC support for Intel e752x/3100 memory controllers");
module_param(force_function_unhide, int, 0444); module_param(force_function_unhide, int, 0444);
......
...@@ -596,8 +596,7 @@ module_init(e7xxx_init); ...@@ -596,8 +596,7 @@ module_init(e7xxx_init);
module_exit(e7xxx_exit); module_exit(e7xxx_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Linux Networx (http://lnxi.com) Thayne Harbaugh et al\n" MODULE_AUTHOR("Linux Networx (http://lnxi.com) Thayne Harbaugh et al");
"Based on.work by Dan Hollis et al");
MODULE_DESCRIPTION("MC support for Intel e7xxx memory controllers"); MODULE_DESCRIPTION("MC support for Intel e7xxx memory controllers");
module_param(edac_op_state, int, 0444); module_param(edac_op_state, int, 0444);
MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");
...@@ -906,6 +906,7 @@ static const struct x86_cpu_id i10nm_cpuids[] = { ...@@ -906,6 +906,7 @@ static const struct x86_cpu_id i10nm_cpuids[] = {
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SAPPHIRERAPIDS_X, X86_STEPPINGS(0x0, 0xf), &spr_cfg), X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SAPPHIRERAPIDS_X, X86_STEPPINGS(0x0, 0xf), &spr_cfg),
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(EMERALDRAPIDS_X, X86_STEPPINGS(0x0, 0xf), &spr_cfg), X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(EMERALDRAPIDS_X, X86_STEPPINGS(0x0, 0xf), &spr_cfg),
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(GRANITERAPIDS_X, X86_STEPPINGS(0x0, 0xf), &gnr_cfg), X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(GRANITERAPIDS_X, X86_STEPPINGS(0x0, 0xf), &gnr_cfg),
X86_MATCH_INTEL_FAM6_MODEL_STEPPINGS(SIERRAFOREST_X, X86_STEPPINGS(0x0, 0xf), &gnr_cfg),
{} {}
}; };
MODULE_DEVICE_TABLE(x86cpu, i10nm_cpuids); MODULE_DEVICE_TABLE(x86cpu, i10nm_cpuids);
......
...@@ -1573,13 +1573,10 @@ module_init(i5000_init); ...@@ -1573,13 +1573,10 @@ module_init(i5000_init);
module_exit(i5000_exit); module_exit(i5000_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR MODULE_AUTHOR("Linux Networx (http://lnxi.com) Doug Thompson <norsk5@xmission.com>");
("Linux Networx (http://lnxi.com) Doug Thompson <norsk5@xmission.com>"); MODULE_DESCRIPTION("MC Driver for Intel I5000 memory controllers - " I5000_REVISION);
MODULE_DESCRIPTION("MC Driver for Intel I5000 memory controllers - "
I5000_REVISION);
module_param(edac_op_state, int, 0444); module_param(edac_op_state, int, 0444);
MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI"); MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");
module_param(misc_messages, int, 0444); module_param(misc_messages, int, 0444);
MODULE_PARM_DESC(misc_messages, "Log miscellaneous non fatal messages"); MODULE_PARM_DESC(misc_messages, "Log miscellaneous non fatal messages");
...@@ -909,7 +909,7 @@ static void i5100_do_inject(struct mem_ctl_info *mci) ...@@ -909,7 +909,7 @@ static void i5100_do_inject(struct mem_ctl_info *mci)
* *
* The injection code don't work without setting this register. * The injection code don't work without setting this register.
* The register needs to be flipped off then on else the hardware * The register needs to be flipped off then on else the hardware
* will only preform the first injection. * will only perform the first injection.
* *
* Stop condition bits 7:4 * Stop condition bits 7:4
* 1010 - Stop after one injection * 1010 - Stop after one injection
...@@ -1220,6 +1220,5 @@ module_init(i5100_init); ...@@ -1220,6 +1220,5 @@ module_init(i5100_init);
module_exit(i5100_exit); module_exit(i5100_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR MODULE_AUTHOR("Arthur Jones <ajones@riverbed.com>");
("Arthur Jones <ajones@riverbed.com>");
MODULE_DESCRIPTION("MC Driver for Intel I5100 memory controllers"); MODULE_DESCRIPTION("MC Driver for Intel I5100 memory controllers");
...@@ -355,8 +355,7 @@ module_init(i82860_init); ...@@ -355,8 +355,7 @@ module_init(i82860_init);
module_exit(i82860_exit); module_exit(i82860_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Red Hat Inc. (http://www.redhat.com) " MODULE_AUTHOR("Red Hat Inc. (http://www.redhat.com) Ben Woodard <woodard@redhat.com>");
"Ben Woodard <woodard@redhat.com>");
MODULE_DESCRIPTION("ECC support for Intel 82860 memory hub controllers"); MODULE_DESCRIPTION("ECC support for Intel 82860 memory hub controllers");
module_param(edac_op_state, int, 0444); module_param(edac_op_state, int, 0444);
......
...@@ -72,5 +72,4 @@ module_exit(fsl_ddr_mc_exit); ...@@ -72,5 +72,4 @@ module_exit(fsl_ddr_mc_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("NXP Semiconductor"); MODULE_AUTHOR("NXP Semiconductor");
module_param(edac_op_state, int, 0444); module_param(edac_op_state, int, 0444);
MODULE_PARM_DESC(edac_op_state, MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll, 2=Interrupt");
"EDAC Error Reporting state: 0=Poll, 2=Interrupt");
...@@ -711,5 +711,4 @@ module_exit(mpc85xx_mc_exit); ...@@ -711,5 +711,4 @@ module_exit(mpc85xx_mc_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Montavista Software, Inc."); MODULE_AUTHOR("Montavista Software, Inc.");
module_param(edac_op_state, int, 0444); module_param(edac_op_state, int, 0444);
MODULE_PARM_DESC(edac_op_state, MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll, 2=Interrupt");
"EDAC Error Reporting state: 0=Poll, 2=Interrupt");
...@@ -415,8 +415,7 @@ module_init(r82600_init); ...@@ -415,8 +415,7 @@ module_init(r82600_init);
module_exit(r82600_exit); module_exit(r82600_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Tim Small <tim@buttersideup.com> - WPAD Ltd. " MODULE_AUTHOR("Tim Small <tim@buttersideup.com> - WPAD Ltd. on behalf of EADS Astrium");
"on behalf of EADS Astrium");
MODULE_DESCRIPTION("MC support for Radisys 82600 memory controllers"); MODULE_DESCRIPTION("MC support for Radisys 82600 memory controllers");
module_param(disable_hardware_scrub, bool, 0644); module_param(disable_hardware_scrub, bool, 0644);
......
...@@ -510,7 +510,7 @@ static bool skx_rir_decode(struct decoded_addr *res) ...@@ -510,7 +510,7 @@ static bool skx_rir_decode(struct decoded_addr *res)
} }
static u8 skx_close_row[] = { static u8 skx_close_row[] = {
15, 16, 17, 18, 20, 21, 22, 28, 10, 11, 12, 13, 29, 30, 31, 32, 33 15, 16, 17, 18, 20, 21, 22, 28, 10, 11, 12, 13, 29, 30, 31, 32, 33, 34
}; };
static u8 skx_close_column[] = { static u8 skx_close_column[] = {
...@@ -518,7 +518,7 @@ static u8 skx_close_column[] = { ...@@ -518,7 +518,7 @@ static u8 skx_close_column[] = {
}; };
static u8 skx_open_row[] = { static u8 skx_open_row[] = {
14, 15, 16, 20, 28, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33 14, 15, 16, 20, 28, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34
}; };
static u8 skx_open_column[] = { static u8 skx_open_column[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment