diff options
Diffstat (limited to 'drivers/edac/mpc85xx_edac.c')
-rw-r--r-- | drivers/edac/mpc85xx_edac.c | 54 |
1 files changed, 31 insertions, 23 deletions
diff --git a/drivers/edac/mpc85xx_edac.c b/drivers/edac/mpc85xx_edac.c index b123bb308a4a..38ab8e2cd7f4 100644 --- a/drivers/edac/mpc85xx_edac.c +++ b/drivers/edac/mpc85xx_edac.c | |||
@@ -200,8 +200,7 @@ static irqreturn_t mpc85xx_pci_isr(int irq, void *dev_id) | |||
200 | return IRQ_HANDLED; | 200 | return IRQ_HANDLED; |
201 | } | 201 | } |
202 | 202 | ||
203 | static int __devinit mpc85xx_pci_err_probe(struct platform_device *op, | 203 | static int __devinit mpc85xx_pci_err_probe(struct platform_device *op) |
204 | const struct of_device_id *match) | ||
205 | { | 204 | { |
206 | struct edac_pci_ctl_info *pci; | 205 | struct edac_pci_ctl_info *pci; |
207 | struct mpc85xx_pci_pdata *pdata; | 206 | struct mpc85xx_pci_pdata *pdata; |
@@ -338,7 +337,7 @@ static struct of_device_id mpc85xx_pci_err_of_match[] = { | |||
338 | }; | 337 | }; |
339 | MODULE_DEVICE_TABLE(of, mpc85xx_pci_err_of_match); | 338 | MODULE_DEVICE_TABLE(of, mpc85xx_pci_err_of_match); |
340 | 339 | ||
341 | static struct of_platform_driver mpc85xx_pci_err_driver = { | 340 | static struct platform_driver mpc85xx_pci_err_driver = { |
342 | .probe = mpc85xx_pci_err_probe, | 341 | .probe = mpc85xx_pci_err_probe, |
343 | .remove = __devexit_p(mpc85xx_pci_err_remove), | 342 | .remove = __devexit_p(mpc85xx_pci_err_remove), |
344 | .driver = { | 343 | .driver = { |
@@ -503,8 +502,7 @@ static irqreturn_t mpc85xx_l2_isr(int irq, void *dev_id) | |||
503 | return IRQ_HANDLED; | 502 | return IRQ_HANDLED; |
504 | } | 503 | } |
505 | 504 | ||
506 | static int __devinit mpc85xx_l2_err_probe(struct platform_device *op, | 505 | static int __devinit mpc85xx_l2_err_probe(struct platform_device *op) |
507 | const struct of_device_id *match) | ||
508 | { | 506 | { |
509 | struct edac_device_ctl_info *edac_dev; | 507 | struct edac_device_ctl_info *edac_dev; |
510 | struct mpc85xx_l2_pdata *pdata; | 508 | struct mpc85xx_l2_pdata *pdata; |
@@ -656,7 +654,7 @@ static struct of_device_id mpc85xx_l2_err_of_match[] = { | |||
656 | }; | 654 | }; |
657 | MODULE_DEVICE_TABLE(of, mpc85xx_l2_err_of_match); | 655 | MODULE_DEVICE_TABLE(of, mpc85xx_l2_err_of_match); |
658 | 656 | ||
659 | static struct of_platform_driver mpc85xx_l2_err_driver = { | 657 | static struct platform_driver mpc85xx_l2_err_driver = { |
660 | .probe = mpc85xx_l2_err_probe, | 658 | .probe = mpc85xx_l2_err_probe, |
661 | .remove = mpc85xx_l2_err_remove, | 659 | .remove = mpc85xx_l2_err_remove, |
662 | .driver = { | 660 | .driver = { |
@@ -956,8 +954,7 @@ static void __devinit mpc85xx_init_csrows(struct mem_ctl_info *mci) | |||
956 | } | 954 | } |
957 | } | 955 | } |
958 | 956 | ||
959 | static int __devinit mpc85xx_mc_err_probe(struct platform_device *op, | 957 | static int __devinit mpc85xx_mc_err_probe(struct platform_device *op) |
960 | const struct of_device_id *match) | ||
961 | { | 958 | { |
962 | struct mem_ctl_info *mci; | 959 | struct mem_ctl_info *mci; |
963 | struct mpc85xx_mc_pdata *pdata; | 960 | struct mpc85xx_mc_pdata *pdata; |
@@ -1136,7 +1133,7 @@ static struct of_device_id mpc85xx_mc_err_of_match[] = { | |||
1136 | }; | 1133 | }; |
1137 | MODULE_DEVICE_TABLE(of, mpc85xx_mc_err_of_match); | 1134 | MODULE_DEVICE_TABLE(of, mpc85xx_mc_err_of_match); |
1138 | 1135 | ||
1139 | static struct of_platform_driver mpc85xx_mc_err_driver = { | 1136 | static struct platform_driver mpc85xx_mc_err_driver = { |
1140 | .probe = mpc85xx_mc_err_probe, | 1137 | .probe = mpc85xx_mc_err_probe, |
1141 | .remove = mpc85xx_mc_err_remove, | 1138 | .remove = mpc85xx_mc_err_remove, |
1142 | .driver = { | 1139 | .driver = { |
@@ -1150,13 +1147,14 @@ static struct of_platform_driver mpc85xx_mc_err_driver = { | |||
1150 | static void __init mpc85xx_mc_clear_rfxe(void *data) | 1147 | static void __init mpc85xx_mc_clear_rfxe(void *data) |
1151 | { | 1148 | { |
1152 | orig_hid1[smp_processor_id()] = mfspr(SPRN_HID1); | 1149 | orig_hid1[smp_processor_id()] = mfspr(SPRN_HID1); |
1153 | mtspr(SPRN_HID1, (orig_hid1[smp_processor_id()] & ~0x20000)); | 1150 | mtspr(SPRN_HID1, (orig_hid1[smp_processor_id()] & ~HID1_RFXE)); |
1154 | } | 1151 | } |
1155 | #endif | 1152 | #endif |
1156 | 1153 | ||
1157 | static int __init mpc85xx_mc_init(void) | 1154 | static int __init mpc85xx_mc_init(void) |
1158 | { | 1155 | { |
1159 | int res = 0; | 1156 | int res = 0; |
1157 | u32 pvr = 0; | ||
1160 | 1158 | ||
1161 | printk(KERN_INFO "Freescale(R) MPC85xx EDAC driver, " | 1159 | printk(KERN_INFO "Freescale(R) MPC85xx EDAC driver, " |
1162 | "(C) 2006 Montavista Software\n"); | 1160 | "(C) 2006 Montavista Software\n"); |
@@ -1171,27 +1169,32 @@ static int __init mpc85xx_mc_init(void) | |||
1171 | break; | 1169 | break; |
1172 | } | 1170 | } |
1173 | 1171 | ||
1174 | res = of_register_platform_driver(&mpc85xx_mc_err_driver); | 1172 | res = platform_driver_register(&mpc85xx_mc_err_driver); |
1175 | if (res) | 1173 | if (res) |
1176 | printk(KERN_WARNING EDAC_MOD_STR "MC fails to register\n"); | 1174 | printk(KERN_WARNING EDAC_MOD_STR "MC fails to register\n"); |
1177 | 1175 | ||
1178 | res = of_register_platform_driver(&mpc85xx_l2_err_driver); | 1176 | res = platform_driver_register(&mpc85xx_l2_err_driver); |
1179 | if (res) | 1177 | if (res) |
1180 | printk(KERN_WARNING EDAC_MOD_STR "L2 fails to register\n"); | 1178 | printk(KERN_WARNING EDAC_MOD_STR "L2 fails to register\n"); |
1181 | 1179 | ||
1182 | #ifdef CONFIG_PCI | 1180 | #ifdef CONFIG_PCI |
1183 | res = of_register_platform_driver(&mpc85xx_pci_err_driver); | 1181 | res = platform_driver_register(&mpc85xx_pci_err_driver); |
1184 | if (res) | 1182 | if (res) |
1185 | printk(KERN_WARNING EDAC_MOD_STR "PCI fails to register\n"); | 1183 | printk(KERN_WARNING EDAC_MOD_STR "PCI fails to register\n"); |
1186 | #endif | 1184 | #endif |
1187 | 1185 | ||
1188 | #ifdef CONFIG_FSL_SOC_BOOKE | 1186 | #ifdef CONFIG_FSL_SOC_BOOKE |
1189 | /* | 1187 | pvr = mfspr(SPRN_PVR); |
1190 | * need to clear HID1[RFXE] to disable machine check int | 1188 | |
1191 | * so we can catch it | 1189 | if ((PVR_VER(pvr) == PVR_VER_E500V1) || |
1192 | */ | 1190 | (PVR_VER(pvr) == PVR_VER_E500V2)) { |
1193 | if (edac_op_state == EDAC_OPSTATE_INT) | 1191 | /* |
1194 | on_each_cpu(mpc85xx_mc_clear_rfxe, NULL, 0); | 1192 | * need to clear HID1[RFXE] to disable machine check int |
1193 | * so we can catch it | ||
1194 | */ | ||
1195 | if (edac_op_state == EDAC_OPSTATE_INT) | ||
1196 | on_each_cpu(mpc85xx_mc_clear_rfxe, NULL, 0); | ||
1197 | } | ||
1195 | #endif | 1198 | #endif |
1196 | 1199 | ||
1197 | return 0; | 1200 | return 0; |
@@ -1209,13 +1212,18 @@ static void __exit mpc85xx_mc_restore_hid1(void *data) | |||
1209 | static void __exit mpc85xx_mc_exit(void) | 1212 | static void __exit mpc85xx_mc_exit(void) |
1210 | { | 1213 | { |
1211 | #ifdef CONFIG_FSL_SOC_BOOKE | 1214 | #ifdef CONFIG_FSL_SOC_BOOKE |
1212 | on_each_cpu(mpc85xx_mc_restore_hid1, NULL, 0); | 1215 | u32 pvr = mfspr(SPRN_PVR); |
1216 | |||
1217 | if ((PVR_VER(pvr) == PVR_VER_E500V1) || | ||
1218 | (PVR_VER(pvr) == PVR_VER_E500V2)) { | ||
1219 | on_each_cpu(mpc85xx_mc_restore_hid1, NULL, 0); | ||
1220 | } | ||
1213 | #endif | 1221 | #endif |
1214 | #ifdef CONFIG_PCI | 1222 | #ifdef CONFIG_PCI |
1215 | of_unregister_platform_driver(&mpc85xx_pci_err_driver); | 1223 | platform_driver_unregister(&mpc85xx_pci_err_driver); |
1216 | #endif | 1224 | #endif |
1217 | of_unregister_platform_driver(&mpc85xx_l2_err_driver); | 1225 | platform_driver_unregister(&mpc85xx_l2_err_driver); |
1218 | of_unregister_platform_driver(&mpc85xx_mc_err_driver); | 1226 | platform_driver_unregister(&mpc85xx_mc_err_driver); |
1219 | } | 1227 | } |
1220 | 1228 | ||
1221 | module_exit(mpc85xx_mc_exit); | 1229 | module_exit(mpc85xx_mc_exit); |