|
@@ -1147,13 +1147,14 @@ static struct platform_driver mpc85xx_mc_err_driver = {
|
|
|
static void __init mpc85xx_mc_clear_rfxe(void *data)
|
|
|
{
|
|
|
orig_hid1[smp_processor_id()] = mfspr(SPRN_HID1);
|
|
|
- mtspr(SPRN_HID1, (orig_hid1[smp_processor_id()] & ~0x20000));
|
|
|
+ mtspr(SPRN_HID1, (orig_hid1[smp_processor_id()] & ~HID1_RFXE));
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
static int __init mpc85xx_mc_init(void)
|
|
|
{
|
|
|
int res = 0;
|
|
|
+ u32 pvr = 0;
|
|
|
|
|
|
printk(KERN_INFO "Freescale(R) MPC85xx EDAC driver, "
|
|
|
"(C) 2006 Montavista Software\n");
|
|
@@ -1183,12 +1184,17 @@ static int __init mpc85xx_mc_init(void)
|
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_FSL_SOC_BOOKE
|
|
|
- /*
|
|
|
- * need to clear HID1[RFXE] to disable machine check int
|
|
|
- * so we can catch it
|
|
|
- */
|
|
|
- if (edac_op_state == EDAC_OPSTATE_INT)
|
|
|
- on_each_cpu(mpc85xx_mc_clear_rfxe, NULL, 0);
|
|
|
+ pvr = mfspr(SPRN_PVR);
|
|
|
+
|
|
|
+ if ((PVR_VER(pvr) == PVR_VER_E500V1) ||
|
|
|
+ (PVR_VER(pvr) == PVR_VER_E500V2)) {
|
|
|
+ /*
|
|
|
+ * need to clear HID1[RFXE] to disable machine check int
|
|
|
+ * so we can catch it
|
|
|
+ */
|
|
|
+ if (edac_op_state == EDAC_OPSTATE_INT)
|
|
|
+ on_each_cpu(mpc85xx_mc_clear_rfxe, NULL, 0);
|
|
|
+ }
|
|
|
#endif
|
|
|
|
|
|
return 0;
|
|
@@ -1206,7 +1212,12 @@ static void __exit mpc85xx_mc_restore_hid1(void *data)
|
|
|
static void __exit mpc85xx_mc_exit(void)
|
|
|
{
|
|
|
#ifdef CONFIG_FSL_SOC_BOOKE
|
|
|
- on_each_cpu(mpc85xx_mc_restore_hid1, NULL, 0);
|
|
|
+ u32 pvr = mfspr(SPRN_PVR);
|
|
|
+
|
|
|
+ if ((PVR_VER(pvr) == PVR_VER_E500V1) ||
|
|
|
+ (PVR_VER(pvr) == PVR_VER_E500V2)) {
|
|
|
+ on_each_cpu(mpc85xx_mc_restore_hid1, NULL, 0);
|
|
|
+ }
|
|
|
#endif
|
|
|
#ifdef CONFIG_PCI
|
|
|
platform_driver_unregister(&mpc85xx_pci_err_driver);
|