amd64_edac: Concentrate per-family init even more
authorBorislav Petkov <borislav.petkov@amd.com>
Fri, 1 Oct 2010 17:35:38 +0000 (19:35 +0200)
committerBorislav Petkov <borislav.petkov@amd.com>
Fri, 7 Jan 2011 10:33:53 +0000 (11:33 +0100)
Move the remaining per-family init code into the proper place and
simplify the rest of the initialization. Reorganize error handling in
amd64_init_one_instance().

Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
drivers/edac/amd64_edac.c
drivers/edac/amd64_edac.h

index 437f5b6..0caea2b 100644 (file)
@@ -2573,11 +2573,13 @@ static struct amd64_family_type *amd64_per_family_init(struct amd64_pvt *pvt)
        switch (fam) {
        case 0xf:
                fam_type                = &amd64_family_types[K8_CPUS];
+               pvt->ops                = &amd64_family_types[K8_CPUS].ops;
                pvt->ctl_name           = fam_type->ctl_name;
                pvt->min_scrubrate      = K8_MIN_SCRUB_RATE_BITS;
                break;
        case 0x10:
                fam_type                = &amd64_family_types[F10_CPUS];
+               pvt->ops                = &amd64_family_types[F10_CPUS].ops;
                pvt->ctl_name           = fam_type->ctl_name;
                pvt->min_scrubrate      = F10_MIN_SCRUB_RATE_BITS;
                break;
@@ -2587,6 +2589,8 @@ static struct amd64_family_type *amd64_per_family_init(struct amd64_pvt *pvt)
                return NULL;
        }
 
+       pvt->ext_model = boot_cpu_data.x86_model >> 4;
+
        amd64_printk(KERN_INFO, "%s %s detected.\n", pvt->ctl_name,
                     (fam == 0xf ?
                                (pvt->ext_model >= K8_REV_F  ? "revF or later"
@@ -2607,8 +2611,7 @@ static struct amd64_family_type *amd64_per_family_init(struct amd64_pvt *pvt)
  * later come back in a finish-setup function to perform that final
  * initialization. See also amd64_init_2nd_stage() for that.
  */
-static int amd64_probe_one_instance(struct pci_dev *dram_f2_ctl,
-                                   int mc_type_index)
+static int amd64_probe_one_instance(struct pci_dev *dram_f2_ctl)
 {
        struct amd64_pvt *pvt = NULL;
        struct amd64_family_type *fam_type = NULL;
@@ -2619,12 +2622,8 @@ static int amd64_probe_one_instance(struct pci_dev *dram_f2_ctl,
        if (!pvt)
                goto err_exit;
 
-       pvt->mc_node_id = get_node_id(dram_f2_ctl);
-
-       pvt->dram_f2_ctl        = dram_f2_ctl;
-       pvt->ext_model          = boot_cpu_data.x86_model >> 4;
-       pvt->mc_type_index      = mc_type_index;
-       pvt->ops                = family_ops(mc_type_index);
+       pvt->mc_node_id  = get_node_id(dram_f2_ctl);
+       pvt->dram_f2_ctl = dram_f2_ctl;
 
        ret = -EINVAL;
        fam_type = amd64_per_family_init(pvt);
@@ -2743,20 +2742,22 @@ err_exit:
 
 
 static int __devinit amd64_init_one_instance(struct pci_dev *pdev,
-                                const struct pci_device_id *mc_type)
+                                            const struct pci_device_id *mc_type)
 {
        int ret = 0;
 
        debugf0("(MC node=%d)\n", get_node_id(pdev));
 
        ret = pci_enable_device(pdev);
-       if (ret < 0)
-               ret = -EIO;
-       else
-               ret = amd64_probe_one_instance(pdev, mc_type->driver_data);
+       if (ret < 0) {
+               debugf0("ret=%d\n", ret);
+               return -EIO;
+       }
 
+       ret = amd64_probe_one_instance(pdev);
        if (ret < 0)
-               debugf0("ret=%d\n", ret);
+               amd64_printk(KERN_ERR, "Error probing instance: %d\n",
+                                       get_node_id(pdev));
 
        return ret;
 }
@@ -2805,7 +2806,6 @@ static const struct pci_device_id amd64_pci_table[] __devinitdata = {
                .subdevice      = PCI_ANY_ID,
                .class          = 0,
                .class_mask     = 0,
-               .driver_data    = K8_CPUS
        },
        {
                .vendor         = PCI_VENDOR_ID_AMD,
@@ -2814,7 +2814,6 @@ static const struct pci_device_id amd64_pci_table[] __devinitdata = {
                .subdevice      = PCI_ANY_ID,
                .class          = 0,
                .class_mask     = 0,
-               .driver_data    = F10_CPUS
        },
        {0, }
 };
Simple merge