Lines Matching refs:sbridge_dev
353 struct sbridge_dev { struct
384 struct sbridge_dev *sbridge_dev; argument
733 static struct sbridge_dev *get_sbridge_dev(int seg, u8 bus, enum domain dom, in get_sbridge_dev()
735 struct sbridge_dev *prev) in get_sbridge_dev()
737 struct sbridge_dev *sbridge_dev; in get_sbridge_dev() local
745 struct sbridge_dev, list); in get_sbridge_dev()
748 sbridge_dev = list_entry(prev ? prev->list.next in get_sbridge_dev()
749 : sbridge_edac_list.next, struct sbridge_dev, list); in get_sbridge_dev()
751 list_for_each_entry_from(sbridge_dev, &sbridge_edac_list, list) { in get_sbridge_dev()
752 if ((sbridge_dev->seg == seg) && (sbridge_dev->bus == bus) && in get_sbridge_dev()
753 (dom == SOCK || dom == sbridge_dev->dom)) in get_sbridge_dev()
754 return sbridge_dev; in get_sbridge_dev()
760 static struct sbridge_dev *alloc_sbridge_dev(int seg, u8 bus, enum domain dom, in alloc_sbridge_dev()
763 struct sbridge_dev *sbridge_dev; in alloc_sbridge_dev() local
765 sbridge_dev = kzalloc(sizeof(*sbridge_dev), GFP_KERNEL); in alloc_sbridge_dev()
766 if (!sbridge_dev) in alloc_sbridge_dev()
769 sbridge_dev->pdev = kcalloc(table->n_devs_per_imc, in alloc_sbridge_dev()
770 sizeof(*sbridge_dev->pdev), in alloc_sbridge_dev()
772 if (!sbridge_dev->pdev) { in alloc_sbridge_dev()
773 kfree(sbridge_dev); in alloc_sbridge_dev()
777 sbridge_dev->seg = seg; in alloc_sbridge_dev()
778 sbridge_dev->bus = bus; in alloc_sbridge_dev()
779 sbridge_dev->dom = dom; in alloc_sbridge_dev()
780 sbridge_dev->n_devs = table->n_devs_per_imc; in alloc_sbridge_dev()
781 list_add_tail(&sbridge_dev->list, &sbridge_edac_list); in alloc_sbridge_dev()
783 return sbridge_dev; in alloc_sbridge_dev()
786 static void free_sbridge_dev(struct sbridge_dev *sbridge_dev) in free_sbridge_dev() argument
788 list_del(&sbridge_dev->list); in free_sbridge_dev()
789 kfree(sbridge_dev->pdev); in free_sbridge_dev()
790 kfree(sbridge_dev); in free_sbridge_dev()
1546 pvt->sbridge_dev->source_id = SOURCE_ID_KNL(reg); in get_source_id()
1548 pvt->sbridge_dev->source_id = SOURCE_ID(reg); in get_source_id()
1604 pvt->sbridge_dev->source_id, in __populate_dimms()
1605 pvt->sbridge_dev->dom, i); in __populate_dimms()
1626 pvt->sbridge_dev->mc, pvt->sbridge_dev->dom, i, j, in __populate_dimms()
1637 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom, i, j); in __populate_dimms()
1652 pvt->sbridge_dev->node_id = pvt->info.get_node_id(pvt); in get_dimm_config()
1654 pvt->sbridge_dev->mc, in get_dimm_config()
1655 pvt->sbridge_dev->node_id, in get_dimm_config()
1656 pvt->sbridge_dev->source_id); in get_dimm_config()
1887 struct sbridge_dev *sbridge_dev; in get_mci_for_node_id() local
1889 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) { in get_mci_for_node_id()
1890 if (sbridge_dev->node_id == node_id && sbridge_dev->dom == ha) in get_mci_for_node_id()
1891 return sbridge_dev->mci; in get_mci_for_node_id()
1975 pvt->sbridge_dev->mc, in get_memory_error_data()
2218 static void sbridge_put_devices(struct sbridge_dev *sbridge_dev) in sbridge_put_devices() argument
2223 for (i = 0; i < sbridge_dev->n_devs; i++) { in sbridge_put_devices()
2224 struct pci_dev *pdev = sbridge_dev->pdev[i]; in sbridge_put_devices()
2236 struct sbridge_dev *sbridge_dev, *tmp; in sbridge_put_all_devices() local
2238 list_for_each_entry_safe(sbridge_dev, tmp, &sbridge_edac_list, list) { in sbridge_put_all_devices()
2239 sbridge_put_devices(sbridge_dev); in sbridge_put_all_devices()
2240 free_sbridge_dev(sbridge_dev); in sbridge_put_all_devices()
2250 struct sbridge_dev *sbridge_dev = NULL; in sbridge_get_onedevice() local
2288 sbridge_dev = get_sbridge_dev(seg, bus, dev_descr->dom, in sbridge_get_onedevice()
2289 multi_bus, sbridge_dev); in sbridge_get_onedevice()
2290 if (!sbridge_dev) { in sbridge_get_onedevice()
2302 sbridge_dev = alloc_sbridge_dev(seg, bus, dev_descr->dom, table); in sbridge_get_onedevice()
2303 if (!sbridge_dev) { in sbridge_get_onedevice()
2310 if (sbridge_dev->pdev[sbridge_dev->i_devs]) { in sbridge_get_onedevice()
2318 sbridge_dev->pdev[sbridge_dev->i_devs++] = pdev; in sbridge_get_onedevice()
2404 struct sbridge_dev *sbridge_dev) in sbridge_mci_bind_devs() argument
2411 for (i = 0; i < sbridge_dev->n_devs; i++) { in sbridge_mci_bind_devs()
2412 pdev = sbridge_dev->pdev[i]; in sbridge_mci_bind_devs()
2454 sbridge_dev->bus, in sbridge_mci_bind_devs()
2478 struct sbridge_dev *sbridge_dev) in ibridge_mci_bind_devs() argument
2485 for (i = 0; i < sbridge_dev->n_devs; i++) { in ibridge_mci_bind_devs()
2486 pdev = sbridge_dev->pdev[i]; in ibridge_mci_bind_devs()
2537 sbridge_dev->bus, in ibridge_mci_bind_devs()
2564 struct sbridge_dev *sbridge_dev) in haswell_mci_bind_devs() argument
2578 for (i = 0; i < sbridge_dev->n_devs; i++) { in haswell_mci_bind_devs()
2579 pdev = sbridge_dev->pdev[i]; in haswell_mci_bind_devs()
2628 sbridge_dev->bus, in haswell_mci_bind_devs()
2649 struct sbridge_dev *sbridge_dev) in broadwell_mci_bind_devs() argument
2663 for (i = 0; i < sbridge_dev->n_devs; i++) { in broadwell_mci_bind_devs()
2664 pdev = sbridge_dev->pdev[i]; in broadwell_mci_bind_devs()
2709 sbridge_dev->bus, in broadwell_mci_bind_devs()
2730 struct sbridge_dev *sbridge_dev) in knl_mci_bind_devs() argument
2739 for (i = 0; i < sbridge_dev->n_devs; i++) { in knl_mci_bind_devs()
2740 pdev = sbridge_dev->pdev[i]; in knl_mci_bind_devs()
3101 static void sbridge_unregister_mci(struct sbridge_dev *sbridge_dev) in sbridge_unregister_mci() argument
3103 struct mem_ctl_info *mci = sbridge_dev->mci; in sbridge_unregister_mci()
3107 edac_dbg(0, "MC: dev = %p\n", &sbridge_dev->pdev[0]->dev); in sbridge_unregister_mci()
3116 mci, &sbridge_dev->pdev[0]->dev); in sbridge_unregister_mci()
3124 sbridge_dev->mci = NULL; in sbridge_unregister_mci()
3127 static int sbridge_register_mci(struct sbridge_dev *sbridge_dev, enum type type) in sbridge_register_mci() argument
3132 struct pci_dev *pdev = sbridge_dev->pdev[0]; in sbridge_register_mci()
3143 mci = edac_mc_alloc(sbridge_dev->mc, ARRAY_SIZE(layers), layers, in sbridge_register_mci()
3156 pvt->sbridge_dev = sbridge_dev; in sbridge_register_mci()
3157 sbridge_dev->mci = mci; in sbridge_register_mci()
3186 rc = ibridge_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3191 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3210 rc = sbridge_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3215 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3234 rc = haswell_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3239 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3258 rc = broadwell_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3263 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3281 rc = knl_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3286 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3319 sbridge_dev->mci = NULL; in sbridge_register_mci()
3350 struct sbridge_dev *sbridge_dev; in sbridge_probe() local
3363 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) { in sbridge_probe()
3367 sbridge_dev->mc = mc++; in sbridge_probe()
3368 rc = sbridge_register_mci(sbridge_dev, ptable->type); in sbridge_probe()
3378 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) in sbridge_probe()
3379 sbridge_unregister_mci(sbridge_dev); in sbridge_probe()
3392 struct sbridge_dev *sbridge_dev; in sbridge_remove() local
3396 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) in sbridge_remove()
3397 sbridge_unregister_mci(sbridge_dev); in sbridge_remove()