linux/drivers/edac/highbank_mc_edac.c
mg src=".
<<
> > p/spa pspa class="lxr_search"> > ="+search" method="post" onsubmit="return do_search(this);"> > > > Search > p/spa > ="ajax+*" method="post" onsubmit="return false;"> pinput typ"v2hidden" nam"v2ajax_lookup" idv2ajax_lookup" lue="v2"> >
pdiv idv2file_contents"
o o1p/a>pspa
 class="comment">/*p/spa
  o o2p/a>pspa
 class="comment"> * Copyright 2011-2012 Calxeda, Inc.p/spa
  o o3p/a>pspa
 class="comment"> *p/spa
  o o4p/a>pspa
 class="comment"> * This program is free software; you ca
 redistribute it and/or modify itp/spa
  o o5p/a>pspa
 class="comment"> * under the terms and condion>
s of the GNU General Public License,p/spa
  o o6p/a>pspa
 class="comment"> * versn va2, as published by the Free Software Foundaon>
.p/spa
  o o7p/a>pspa
 class="comment"> *p/spa
  o o8p/a>pspa
 class="comment"> * This program is distributed in the hope it will be useful, but WITHOUTp/spa
  o o9p/a>pspa
 class="comment"> * ANY WARRANTY; without even the implied 2, rantyt11TxACHRANABILITY orTp/spa
  o=val/a>pspa
 class="comment"> *FITNESS FOR A PARTICULAR PURPOSE.  Sree the GNU General Public Licens forTp/spa
  o1o1p/a>pspa
 class="comment"> *moaredetails
.p/spa
  o1o2p/a>pspa
 class="comment"> .p/spa
  o1o3p/a>pspa
 class="comment">  Yyousthold have
 rcerivd ad cpys of the GNU General Public Licens" aong; wit.p/spa
  o1o4p/a>pspa
 class="comment"> *tThis progra.  If not, sree<http://www.gnu.org./licenss/;>
.p/spa
  o1o5p/a>pspa
 class="comment"> /.p/spa
  o1o6p/a#ioncudee< /linu/ typs.h6p/a;>  o176p/a#ioncudee< /linu/kernel.h6p/a;>  o186p/a#ioncudee< /linu/c typ.h6p/a;>  o196p/a#ioncudee< /linu/_edach6p/a;>  o206p/a#ioncudee< /linu/iontrruptch6p/a;>  o216p/a#ioncudee< /linu/plat/for_devlicch6p/a;>  o226p/a#ioncudee< /linu/of_plat/forch6p/a;>  o236p/a#ioncudee< /linu/uaccess.h6p/a;>  o2o4p/a  o256p/a#ioncudee" /edae_crcch6p/a;quot;  o266p/a#ioncudee" /edae moulcch6p/a;quot;  o274p/a  o2o8p/a>pspa
 class="comment"/* DDR Ctrlr Err/orRegdisver> /.p/spa
  o296p/a#deflinHB_DDR_ECC_OPT6p/a                  0x128  o306p/a#deflinHB_DDR_ECC_U_ERR_ADDR6p/a           0x130  o316p/a#deflinHB_DDR_ECC_U_ERR_STAT6p/a           0x134  o326p/a#deflinHB_DDR_ECC_U_ERR_DATAL6p/a          0x138  o336p/a#deflinHB_DDR_ECC_U_ERR_DATAH6p/a          0x13c  o346p/a#deflinHB_DDR_ECC_C_ERR_ADDR6p/a           0x140  o356p/a#deflinHB_DDR_ECC_C_ERR_STAT6p/a           0x144  o366p/a#deflinHB_DDR_ECC_C_ERR_DATAL6p/a          0x148  o376p/a#deflinHB_DDR_ECC_C_ERR_DATAH6p/a          0x14c  o386p/a#deflinHB_DDR_ECC_INT_STATUS6p/a           0x180  o396p/a#deflinHB_DDR_ECC_INT_ACK6p/a              0x184  o406p/a#deflinHB_DDR_ECC_U_ERR_ID6p/a             0x424  o416p/a#deflinHB_DDR_ECC_C_ERR_ID6p/a             0x428  o424p/a  o436p/a#deflinHB_DDR_ECC_INT_STAT_CE6p/a          0x8  o446p/a#deflinHB_DDR_ECC_INT_STAT_DOUBLE_CE6p/a   0x10  o456p/a#deflinHB_DDR_ECC_INT_STAT_UE6p/a          0x20  o466p/a#deflinHB_DDR_ECC_INT_STAT_DOUBLE_UE6p/a   0x40  o474p/a  o486p/a#deflinHB_DDR_ECC_OPT_MODE_MASK6p/a        0x3  o496p/a#deflinHB_DDR_ECC_OPT_FWC6p/a              0x100  o506p/a#deflinHB_DDR_ECC_OPT_XOR_SHIFT6p/a        16  o514p/a  o524p/astructhbk_mcdrvdata6p/a {  o536p/a        void__iomem6p/a *opa href="code=_mcvbases" class="frf">_mcvbase6p/a;  o546p/a};  o554p/a  o564p/asttatiirq"retur_t6p/a opa href="code=hhighbank_mc_rr_handlers" class="frf">hhighbank_mc_rr_handler6p/a(intirq6p/a, void<*opa href="code=dev_ids" class="frf">dev_id6p/a)  o574p/a{  o586p/a        struct_em_ctl_info6p/a *opa href="code=_mis" class="frf">_mi6p/a =dev_id6p/a;  o596p/a        structhbk_mcdrvdata6p/a *opa href="code=drvdatas" class="frf">drvdata6p/a =_mi6p/a-;>opa href="code=pvt_infos" class="frf">pvt_info6p/a;  o606p/a        opa href="code=u3L2" class="frf">u326p/a opa href="code=sttaus2" class="frf">sttaus6p/a, opa href="code=_rr_addrs" class="frf">_rr_addr6p/a;  o614p/a  o626p/a        opspa
 class="comment"/* Readn the ontrrupt sttaus regdisve> /.p/spa
  o636p/a        opa href="code=sttaus2" class="frf">sttaus6p/a =readl6p/a(opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_INT_STATUS6p/a);  o6o4p/a  o656p/a        if (opa href="code=sttaus2" class="frf">sttaus6p/a &HB_DDR_ECC_INT_STAT_UE6p/a) {  o666p/a                opa href="code=_rr_addrs" class="frf">_rr_addr6p/a =readl6p/a(opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_U_ERR_ADDR6p/a);  o676p/a                opa href="code=_edae c_handlec_rrors" class="frf">_edae c_handlec_rror6p/a(opa href="code=HW_EVENT_ERR_UNCORRECTEDs" class="frf">HW_EVENT_ERR_UNCORRECTED6p/a, opa href="code=_mis" class="frf">_mi6p/a, 1,  o686p/a                                     opa href="code=_rr_addrs" class="frf">_rr_addr6p/a ">> opa href="code=PAGE_SHIFTs" class="frf">PAGE_SHIFT6p/a,  o696p/a                                     opa href="code=_rr_addrs" class="frf">_rr_addr6p/a "amp;<~opa href="code=PAGE_MASKs" class="frf">PAGE_MASK6p/a, 0,  o706p/a                                     0, 0, -1,  o716p/a                                     opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=ctl_ nams" class="frf">ctl_ nam6p/a, opspa
 class=istrng"a;quot;" p/spa
);  o726p/a        }  o736p/a        if (opa href="code=sttaus2" class="frf">sttaus6p/a &HB_DDR_ECC_INT_STAT_CE6p/a) {  o746p/a                opa href="code=u3L2" class="frf">u326p/a opa href="code=syndroams" class="frf">syndroam6p/a =readl6p/a(opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_C_ERR_STAT6p/a);  o756p/a                opa href="code=syndroams" class="frf">syndroam6p/a =<(opa href="code=syndroams" class="frf">syndroam6p/a ">> 8) &<0xff;  o766p/a                opa href="code=_rr_addrs" class="frf">_rr_addr6p/a =readl6p/a(opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_C_ERR_ADDR6p/a);  o776p/a                opa href="code=_edae c_handlec_rrors" class="frf">_edae c_handlec_rror6p/a(opa href="code=HW_EVENT_ERR_CORRECTEDs" class="frf">HW_EVENT_ERR_CORRECTED6p/a, opa href="code=_mis" class="frf">_mi6p/a, 1,  o786p/a                                     opa href="code=_rr_addrs" class="frf">_rr_addr6p/a ">> opa href="code=PAGE_SHIFTs" class="frf">PAGE_SHIFT6p/a,  o796p/a                                     opa href="code=_rr_addrs" class="frf">_rr_addr6p/a "amp;<~opa href="code=PAGE_MASKs" class="frf">PAGE_MASK6p/a, opa href="code=syndroams" class="frf">syndroam6p/a,  o806p/a                                     0, 0, -1,  o816p/a                                     opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=ctl_ nams" class="frf">ctl_ nam6p/a, opspa
 class=istrng"a;quot;" p/spa
);  o826p/a        }  o834p/a  o846p/a        opspa
 class="comment"/* cleaer the_rror, cleaesn the ontrrupt  /.p/spa
  o856p/a        opa href="code=writel2" class="frf">writel6p/a(opa href="code=sttaus2" class="frf">sttaus6p/a, opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_INT_ACK6p/a);  o866p/a        "returnopa href="code=IRQ_HANDLEDs" class="frf">IRQ_HANDLED6p/a;  o876p/a}  o884p/a  o896p/a#ifdefnopa href="code=CONFIG_EDAC_DEBUGs" class="frf">CONFIG_EDAC_DEBUG4p/a  o904p/asttatissize_t6p/a opa href="code=hhighbank_mc_rr_inject_writes" class="frf">hhighbank_mc_rr_inject_write6p/a(struct2fil6p/a *opa href="code=2fils" class="frf">2fil6p/a,  o916p/a                                     d cost chaeropa href="code=__users" class="frf">__user6p/a *opa href="code=datas" class="frf">data6p/a,  o926p/a                                     dopa href="code=size_ts" class="frf">size_t6p/a opa href="code=counts" class="frf">count6p/a, opa href="code=loff_ts" class="frf">loff_t6p/a *opa href="code=ppos2" class="frf">ppos6p/a)  o934p/a{  o946p/a        struct_em_ctl_info6p/a *opa href="code=_mis" class="frf">_mi6p/a =2fil6p/a-;>opa href="code=pdriate_datas" class="frf">pdriate_data6p/a;  o956p/a        structhbk_mcdrvdata6p/a *opa href="code=pdatas" class="frf">pdata6p/a =_mi6p/a-;>opa href="code=pvt_infos" class="frf">pvt_info6p/a;  o966p/a        chaeropa href="code=bufs" class="frf">buf6p/a[32];  o976p/a        opa href="code=size_ts" class="frf">size_t6p/a opa href="code=buf_sizes" class="frf">buf_size6p/a;  o986p/a        opa href="code=u3L2" class="frf">u326p/a opa href="code=reg2" class="frf">reg6p/a;  o996p/a        opa href="code=u82" class="frf">u86p/a opa href="code=synds" class="frf">synd6p/a;  L004p/a  L016p/a        opa href="code=buf_sizes" class="frf">buf_size6p/a =_in6p/a(opa href="code=counts" class="frf">count6p/a, (sizeof(opa href="code=bufs" class="frf">buf6p/a)-1));  L026p/a        if (opa href="code= cpy_from_users" class="frf"> cpy_from_user6p/a(opa href="code=bufs" class="frf">buf6p/a, opa href="code=datas" class="frf">data6p/a, opa href="code=buf_sizes" class="frf">buf_size6p/a))  L036p/a                "return-opa href="code=EFAULTs" class="frf">EFAULT6p/a;  L046p/a        opa href="code=bufs" class="frf">buf6p/a[opa href="code=buf_sizes" class="frf">buf_size6p/a] =<0;  L054p/a  L066p/a        if (!opa href="code=kstrtou82" class="frf">kstrtou86p/a(opa href="code=bufs" class="frf">buf6p/a, 16, "amp;opa href="code=synds" class="frf">synd6p/a)) {  L076p/a                opa href="code=reg2" class="frf">reg6p/a =readl6p/a(opa href="code=pdatas" class="frf">pdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_OPT6p/a);  L086p/a                opa href="code=reg2" class="frf">reg6p/a "amp;=HB_DDR_ECC_OPT_MODE_MASK6p/a;  L096p/a                opa href="code=reg2" class="frf">reg6p/a |=<(opa href="code=synds" class="frf">synd6p/ae<<HB_DDR_ECC_OPT_XOR_SHIFT6p/a) |HB_DDR_ECC_OPT_FWC6p/a;  1106p/a                opa href="code=writel2" class="frf">writel6p/a(opa href="code=reg2" class="frf">reg6p/a, opa href="code=pdatas" class="frf">pdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_OPT6p/a);  L116p/a        }  1124p/a  1136p/a        "returnopa href="code=counts" class="frf">count6p/a;  11o4p/a}  1154p/a  1164p/asttati< cost struct2fil_operdaon>s6p/a opa href="code=hhighbank_mcdebug_inject_fops2" class="frf">hhighbank_mcdebug_inject_fops6p/a =<{  1176p/a        .opa href="code=opens" class="frf">open6p/a =s impl_open6p/a,  1186p/a        .opa href="code=writes" class="frf">write6p/a =hhighbank_mc_rr_inject_write6p/a,  1196p/a        .opa href="code=llseeks" class="frf">llseek6p/a =gGeneic_2fil_llseek6p/a,  1206p/a};  1214p/a  1224p/asttatihhighbank_mccreate_debugfs_nodes6p/a(struct_em_ctl_info6p/a *opa href="code=_mis" class="frf">_mi6p/a)  1234p/a{  1246p/a        if (opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=debugfss" class="frf">debugfs6p/a)  1256p/a                opa href="code=debugfs_create_2fils" class="frf">debugfs_create_2fil6p/a(opspa
 class=istrng"a;quot;inject_ctrl" p/spa
, opa href="code=S_IWUSRs" class="frf">S_IWUSR6p/a, opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=debugfss" class="frf">debugfs6p/a, opa href="code=_mis" class="frf">_mi6p/a,  1266p/a                                    "amp;opa href="code=hhighbank_mcdebug_inject_fops2" class="frf">hhighbank_mcdebug_inject_fops6p/a);  1274p/a;  12o8p/a}  1296p/a#else  1304p/asttatihhighbank_mccreate_debugfs_nodes6p/a(struct_em_ctl_info6p/a *opa href="code=_mis" class="frf">_mi6p/a)  1316p/a{}  1326p/a#endif  1334p/a  1346p/asttatihhighbank_mcprobe6p/a(structplat/for_devlic6p/a *opa href="code=pdevs" class="frf">pdev6p/a)  1356p/a{  1366p/a        struct_edae c_layer6p/a opa href="code=layers2" class="frf">layers6p/a[2];  1376p/a        struct_em_ctl_info6p/a *opa href="code=_mis" class="frf">_mi6p/a;  1386p/a        structhbk_mcdrvdata6p/a *opa href="code=drvdatas" class="frf">drvdata6p/a;  1396p/a        structdimm_info6p/a *opa href="code=dimms" class="frf">dimm6p/a;  1406p/a        structresouric6p/a *opa href="code=rs" class="frf">r6p/a;  1416p/a        opa href="code=u3L2" class="frf">u326p/a opa href="code=_conrol2" class="frf">_conrol6p/a;  1426p/a        intirq6p/a;  1436p/a        intres6p/a =<0;  14o4p/a  1456p/a        opa href="code=layers2" class="frf">layers6p/a[0].opa href="code= typ2" class="frf"> typ6p/a =EDAC_MC_LAYER_CHIP_SELECT6p/a;  1466p/a        opa href="code=layers2" class="frf">layers6p/a[0].opa href="code=sizes" class="frf">size6p/a =<1;  1476p/a        opa href="code=layers2" class="frf">layers6p/a[0].opa href="code=is_virt_csrows" class="frf">is_virt_csrow6p/a = rup6p/a;  1486p/a        opa href="code=layers2" class="frf">layers6p/a[1].opa href="code= typ2" class="frf"> typ6p/a =EDAC_MC_LAYER_CHANNEL6p/a;  1496p/a        opa href="code=layers2" class="frf">layers6p/a[1].opa href="code=sizes" class="frf">size6p/a =<1;  1506p/a        opa href="code=layers2" class="frf">layers6p/a[1].opa href="code=is_virt_csrows" class="frf">is_virt_csrow6p/a =2fals6p/a;  1516p/a        opa href="code=_mis" class="frf">_mi6p/a =_edae c_alloc6p/a(0, opa href="code=WARRY_SIZEs" class="frf">WARRY_SIZE6p/a(opa href="code=layers2" class="frf">layers6p/a), opa href="code=layers2" class="frf">layers6p/a,  1526p/a                            sizeof(structhbk_mcdrvdata6p/a));  1536p/a        if (!opa href="code=_mis" class="frf">_mi6p/a)  1546p/a                "return-opa href="code=ENOMEMs" class="frf">ENOMEM6p/a;  1554p/a  1566p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=pdevs" class="frf">pdev6p/a =<"amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a;  1576p/a        opa href="code=drvdatas" class="frf">drvdata6p/a =_mi6p/a-;>opa href="code=pvt_infos" class="frf">pvt_info6p/a;  1586p/a        opa href="code=plat/for_setcdrvdatas" class="frf">plat/for_setcdrvdata6p/a(opa href="code=pdevs" class="frf">pdev6p/a, opa href="code=_mis" class="frf">_mi6p/a);  1596p/a  1606p/a        if (!opa href="code=devres_open_grokup" class="frf">devres_open_groku6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opa href="code=NULLs" class="frf">NULL6p/a, opa href="code=GFP_KERNELs" class="frf">GFP_KERNEL6p/a))  1616p/a                "return-opa href="code=ENOMEMs" class="frf">ENOMEM6p/a;  1624p/a  1636p/a        opa href="code=rs" class="frf">r6p/a =plat/for_getcresouric6p/a(opa href="code=pdevs" class="frf">pdev6p/a, opa href="code=IORESOURCE_MEMs" class="frf">IORESOURCE_MEM6p/a, 0);  1646p/a        if (!opa href="code=rs" class="frf">r6p/a) {  1656p/a                opa href="code=devc_rrs" class="frf">devc_rr6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opspa
 class=istrng"a;quot;Unable to get mem resouric\n" p/spa
);  1666p/a                opa href="code=res2" class="frf">res6p/a =<-opa href="code=ENODEVs" class="frf">ENODEV6p/a;  1676p/a                goto opa href="code=_rrs" class="frf">_rr6p/a;  1686p/a        }  1696p/a  1706p/a        if (!opa href="code=devmcrequest__em_regdons" class="frf">devmcrequest__em_regdon6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opa href="code=rs" class="frf">r6p/a-;>opa href="code=starts" class="frf">start6p/a,  1716p/a                                     opa href="code=resouric_sizes" class="frf">resouric_size6p/a(opa href="code=rs" class="frf">r6p/a), opa href="code=devc nams" class="frf">devc nam6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a))) {  1726p/a                opa href="code=devc_rrs" class="frf">devc_rr6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opspa
 class=istrng"a;quot;Err/orwhile
 rquestrng mem regdon\n" p/spa
);  1736p/a                opa href="code=res2" class="frf">res6p/a =<-opa href="code=EBUSYs" class="frf">EBUSY6p/a;  1746p/a                goto opa href="code=_rrs" class="frf">_rr6p/a;  1756p/a        }  1766p/a  1776p/a        opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a =devm_ioremau6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a,  1786p/a                                          opa href="code=rs" class="frf">r6p/a-;>opa href="code=starts" class="frf">start6p/a, opa href="code=resouric_sizes" class="frf">resouric_size6p/a(opa href="code=rs" class="frf">r6p/a));  1796p/a        if (!opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a) {  1806p/a                opa href="code=devc_rrs" class="frf">devc_rr6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opspa
 class=istrng"a;quot;Unable to mau regs\n" p/spa
);  1816p/a                opa href="code=res2" class="frf">res6p/a =<-opa href="code=ENOMEMs" class="frf">ENOMEM6p/a;  1826p/a                goto opa href="code=_rrs" class="frf">_rr6p/a;  1836p/a        }  18o4p/a  1856p/a        opa href="code=_conrol2" class="frf">_conrol6p/a =readl6p/a(opa href="code=drvdatas" class="frf">drvdata6p/a-;>opa href="code=_mcvbases" class="frf">_mcvbase6p/a +HB_DDR_ECC_OPT6p/a) &<0x3;  1866p/a        if (!opa href="code=_conrol2" class="frf">_conrol6p/a || (opa href="code= conrol2" class="frf">_conrol6p/a == 0x2)) {  1876p/a                opa href="code=devc_rrs" class="frf">devc_rr6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opspa
 class=istrng"a;quot;No ECC present, /orECC disabled\n" p/spa
);  1886p/a                opa href="code=res2" class="frf">res6p/a =<-opa href="code=ENODEVs" class="frf">ENODEV6p/a;  1896p/a                goto opa href="code=_rrs" class="frf">_rr6p/a;  1906p/a        }  1914p/a  1926p/a        opa href="code=irqs" class="frf">irq6p/a =plat/for_getcirq6p/a(opa href="code=pdevs" class="frf">pdev6p/a, 0);  1936p/a        opa href="code=res2" class="frf">res6p/a =devmcrequest_irq6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opa href="code=irqs" class="frf">irq6p/a, opa href="code=hhighbank_mc_rr_handlers" class="frf">hhighbank_mc_rr_handler6p/a,  1946p/a                               0, opa href="code=devc nams" class="frf">devc nam6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a), opa href="code=_mis" class="frf">_mi6p/a);  1956p/a        if (opa href="code=res2" class="frf">res6p/a <<0) {  1966p/a                opa href="code=devc_rrs" class="frf">devc_rr6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opspa
 class=istrng"a;quot;Unable to request irq %d\n" p/spa
, opa href="code=irqs" class="frf">irq6p/a);  1976p/a                goto opa href="code=_rrs" class="frf">_rr6p/a;  1986p/a        }  1996p/a  2006p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=m typ_caup" class="frf">m typ_cau6p/a =MEM_FLAG_DDR36p/a;  2016p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=_edaectl_caup" class="frf">_edaectl_cau6p/a =EDAC_FLAG_NONE6p/a |EDAC_FLAG_SECDED6p/a;  2026p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=_edaecaup" class="frf">_edaecau6p/a =EDAC_FLAG_SECDED6p/a;  2036p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=modc nams" class="frf">modc nam6p/a =devc nam6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a);  2046p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=modcvers" class="frf">modcver6p/a =2056p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=ctl_ nams" class="frf">ctl_ nam6p/a =devc nam6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a);  2066p/a        opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=scrub_modes" class="frf">scrub_mode6p/a =SCRUB_SW_SRC6p/a;  2076p/a  2086p/a        opspa
 class="comment"/* Only a srngle 4GB DIMM is supported  /.p/spa
  2096p/a        opa href="code=dimms" class="frf">dimm6p/a =<*opa href="code=_mis" class="frf">_mi6p/a-;>opa href="code=dimmss" class="frf">dimms6p/a;  2106p/a        opa href="code=dimms" class="frf">dimm6p/a-;>opa href="code=nr_pages2" class="frf">nr_pages6p/a =<(~0UL ">> opa href="code=PAGE_SHIFTs" class="frf">PAGE_SHIFT6p/a) +<1;  2116p/a        opa href="code=dimms" class="frf">dimm6p/a-;>opa href="code=grains" class="frf">grain6p/a =<8;  2126p/a        opa href="code=dimms" class="frf">dimm6p/a-;>opa href="code=d typ2" class="frf">d typ6p/a =DEV_X86p/a;  2136p/a        opa href="code=dimms" class="frf">dimm6p/a-;>opa href="code=m typ2" class="frf">m typ6p/a =MEM_DDR36p/a;  2146p/a        opa href="code=dimms" class="frf">dimm6p/a-;>opa href="code=_edaemodes" class="frf">_edaemode6p/a =EDAC_SECDED6p/a;  2154p/a  2166p/a        opa href="code=res2" class="frf">res6p/a =_edaemc_addemc6p/a(opa href="code=_mis" class="frf">_mi6p/a);  2176p/a        if (opa href="code=res2" class="frf">res6p/a <<0)  2186p/a                goto opa href="code=_rrs" class="frf">_rr6p/a;  2196p/a  2206p/a        opa href="code=/highbank_mccreate_debugfs_nodes2" class="frf">hhighbank_mccreate_debugfs_nodes6p/a(opa href="code=_mis" class="frf">_mi6p/a);  2214p/a  2226p/a        opa href="code=devres_close_grokup" class="frf">devres_close_groku6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opa href="code=NULLs" class="frf">NULL6p/a);  2236p/a        "return0;  2246p/aopa href="code=_rrs" class="frf">_rr6p/a:  2256p/a        opa href="code=devres_release_grokup" class="frf">devres_release_groku6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a, opa href="code=NULLs" class="frf">NULL6p/a);  2266p/a        opa href="code=_edaemc_frees" class="frf">_edaemc_free6p/a(opa href="code=_mis" class="frf">_mi6p/a);  2276p/a        "returnopa href="code=res2" class="frf">res6p/a;  22o8p/a}  2296p/a  2304p/asttati/highbank_mcremove6p/a(structplat/for_devlic6p/a *opa href="code=pdevs" class="frf">pdev6p/a)  2316p/a{  2326p/a        struct_em_ctl_info6p/a *opa href="code=_mis" class="frf">_mi6p/a =plat/for_getcdrvdata6p/a(opa href="code=pdevs" class="frf">pdev6p/a);  2334p/a  2346p/a        opa href="code=_edaemc_delemcs" class="frf">_edaemc_delemc6p/a("amp;opa href="code=pdevs" class="frf">pdev6p/a-;>opa href="code=devs" class="frf">dev6p/a);  2356p/a        opa href="code=_edaemc_frees" class="frf">_edaemc_free6p/a(opa href="code=_mis" class="frf">_mi6p/a);  2366p/a        "return0;  2376p/a}  2384p/a  2396p/asttati< cost structof_devlic_id6p/a opa href="code=/b_ddr_ctrl_of_matchs" class="frf">/b_ddr_ctrl_of_match6p/a[] =<{  2406p/a        { .opa href="code=comptatbils" class="frf">comptatbil6p/a =2416p/a        {},  2426p/a};  2436p/aopa href="code=MODULE_DEVICE_TABLEs" class="frf">MODULE_DEVICE_TABLE6p/a(opa href="code=ofs" class="frf">of6p/a, opa href="code=/b_ddr_ctrl_of_matchs" class="frf">/b_ddr_ctrl_of_match6p/a);  24o4p/a  2456p/asttatiplat/for_ddrive6p/a opa href="code=/highbank_mc_eda_ddrives" class="frf">/highbank_mc_eda_ddrive6p/a =<{  2466p/a        .opa href="code=probes" class="frf">probe6p/a =hhighbank_mcprobe6p/a,  2476p/a        .opa href="code=removes" class="frf">remove6p/a =/highbank_mcremove6p/a,  2486p/a        .opa href="code=ddrives" class="frf">ddrive6p/a =<{  2496p/a                .opa href="code= nams" class="frf"> nam6p/a =2506p/a                .opa href="code=of_match_tabils" class="frf">of_match_tabil6p/a =/b_ddr_ctrl_of_match6p/a,  2516p/a        },  2526p/a};  2534p/a  2546p/aopa href="code=module_plat/for_ddrives" class="frf">module_plat/for_ddrive6p/a(opa href="code=/highbank_mc_eda_ddrives" class="frf">/highbank_mc_eda_ddrive6p/a);  2554p/a  2566p/aopa href="code=MODULE_LICENSEs" class="frf">MODULE_LICENSE6p/a(opspa
 class=istrng"a;quot;GPL v2" p/spa
);  2576p/aopa href="code=MODULE_AUTHORs" class="frf">MODULE_AUTHOR6p/a(opspa
 class=istrng"a;quot;Calx_ed, Inc." p/spa
);  2586p/aopa href="code=MODULE_DESCRIPTIONs" class="frf">MODULE_DESCRIPTION6p/a(opspa
 class=istrng"a;quot;EDAC Ddrive /fo Calx_ed Hhighban" p/spa
);  2596p/a


The original LXR software by the LXR "comunity6p/a, this experimmenal iverion by lxe@"liux.no6p/a. lxe."liux.no kindly hosted by Redpill Llipro AS6p/a, providve of Lliux< cosultrng and operdaon>s servlics srnce>1995.