diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-04-16 14:06:50 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-28 18:11:00 -0400 |
commit | df62b1e663904e257fd5b174a9b29e6be6d0e902 (patch) | |
tree | 6590c8c33523d342768028606cd1df30d9399ab3 /drivers/edac | |
parent | 6458fc08b648cb71db85376abc81feba46d61ca5 (diff) |
cpc925_edac: convert driver to use the new edac ABI
The legacy edac ABI is going to be removed. Port the driver to use
and benefit from the new API functionality.
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Michal Marek <mmarek@suse.cz>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/cpc925_edac.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/edac/cpc925_edac.c b/drivers/edac/cpc925_edac.c index 7b764a882dae..2d94fa91c746 100644 --- a/drivers/edac/cpc925_edac.c +++ b/drivers/edac/cpc925_edac.c | |||
@@ -555,13 +555,18 @@ static void cpc925_mc_check(struct mem_ctl_info *mci) | |||
555 | if (apiexcp & CECC_EXCP_DETECTED) { | 555 | if (apiexcp & CECC_EXCP_DETECTED) { |
556 | cpc925_mc_printk(mci, KERN_INFO, "DRAM CECC Fault\n"); | 556 | cpc925_mc_printk(mci, KERN_INFO, "DRAM CECC Fault\n"); |
557 | channel = cpc925_mc_find_channel(mci, syndrome); | 557 | channel = cpc925_mc_find_channel(mci, syndrome); |
558 | edac_mc_handle_ce(mci, pfn, offset, syndrome, | 558 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, |
559 | csrow, channel, mci->ctl_name); | 559 | pfn, offset, syndrome, |
560 | csrow, channel, -1, | ||
561 | mci->ctl_name, "", NULL); | ||
560 | } | 562 | } |
561 | 563 | ||
562 | if (apiexcp & UECC_EXCP_DETECTED) { | 564 | if (apiexcp & UECC_EXCP_DETECTED) { |
563 | cpc925_mc_printk(mci, KERN_INFO, "DRAM UECC Fault\n"); | 565 | cpc925_mc_printk(mci, KERN_INFO, "DRAM UECC Fault\n"); |
564 | edac_mc_handle_ue(mci, pfn, offset, csrow, mci->ctl_name); | 566 | edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, |
567 | pfn, offset, 0, | ||
568 | csrow, -1, -1, | ||
569 | mci->ctl_name, "", NULL); | ||
565 | } | 570 | } |
566 | 571 | ||
567 | cpc925_mc_printk(mci, KERN_INFO, "Dump registers:\n"); | 572 | cpc925_mc_printk(mci, KERN_INFO, "Dump registers:\n"); |
@@ -933,6 +938,7 @@ static int __devinit cpc925_probe(struct platform_device *pdev) | |||
933 | { | 938 | { |
934 | static int edac_mc_idx; | 939 | static int edac_mc_idx; |
935 | struct mem_ctl_info *mci; | 940 | struct mem_ctl_info *mci; |
941 | struct edac_mc_layer layers[2]; | ||
936 | void __iomem *vbase; | 942 | void __iomem *vbase; |
937 | struct cpc925_mc_pdata *pdata; | 943 | struct cpc925_mc_pdata *pdata; |
938 | struct resource *r; | 944 | struct resource *r; |
@@ -969,8 +975,15 @@ static int __devinit cpc925_probe(struct platform_device *pdev) | |||
969 | } | 975 | } |
970 | 976 | ||
971 | nr_channels = cpc925_mc_get_channels(vbase) + 1; | 977 | nr_channels = cpc925_mc_get_channels(vbase) + 1; |
972 | mci = edac_mc_alloc(sizeof(struct cpc925_mc_pdata), | 978 | |
973 | CPC925_NR_CSROWS, nr_channels, edac_mc_idx); | 979 | layers[0].type = EDAC_MC_LAYER_CHIP_SELECT; |
980 | layers[0].size = CPC925_NR_CSROWS; | ||
981 | layers[0].is_virt_csrow = true; | ||
982 | layers[1].type = EDAC_MC_LAYER_CHANNEL; | ||
983 | layers[1].size = nr_channels; | ||
984 | layers[1].is_virt_csrow = false; | ||
985 | mci = new_edac_mc_alloc(edac_mc_idx, ARRAY_SIZE(layers), layers, | ||
986 | sizeof(struct cpc925_mc_pdata)); | ||
974 | if (!mci) { | 987 | if (!mci) { |
975 | cpc925_printk(KERN_ERR, "No memory for mem_ctl_info\n"); | 988 | cpc925_printk(KERN_ERR, "No memory for mem_ctl_info\n"); |
976 | res = -ENOMEM; | 989 | res = -ENOMEM; |