Lines Matching refs:sbridge_dev
354 struct sbridge_dev { struct
385 struct sbridge_dev *sbridge_dev; argument
734 static struct sbridge_dev *get_sbridge_dev(int seg, u8 bus, enum domain dom, in get_sbridge_dev()
736 struct sbridge_dev *prev) in get_sbridge_dev()
738 struct sbridge_dev *sbridge_dev; in get_sbridge_dev() local
746 struct sbridge_dev, list); in get_sbridge_dev()
749 sbridge_dev = list_entry(prev ? prev->list.next in get_sbridge_dev()
750 : sbridge_edac_list.next, struct sbridge_dev, list); in get_sbridge_dev()
752 list_for_each_entry_from(sbridge_dev, &sbridge_edac_list, list) { in get_sbridge_dev()
753 if ((sbridge_dev->seg == seg) && (sbridge_dev->bus == bus) && in get_sbridge_dev()
754 (dom == SOCK || dom == sbridge_dev->dom)) in get_sbridge_dev()
755 return sbridge_dev; in get_sbridge_dev()
761 static struct sbridge_dev *alloc_sbridge_dev(int seg, u8 bus, enum domain dom, in alloc_sbridge_dev()
764 struct sbridge_dev *sbridge_dev; in alloc_sbridge_dev() local
766 sbridge_dev = kzalloc(sizeof(*sbridge_dev), GFP_KERNEL); in alloc_sbridge_dev()
767 if (!sbridge_dev) in alloc_sbridge_dev()
770 sbridge_dev->pdev = kcalloc(table->n_devs_per_imc, in alloc_sbridge_dev()
771 sizeof(*sbridge_dev->pdev), in alloc_sbridge_dev()
773 if (!sbridge_dev->pdev) { in alloc_sbridge_dev()
774 kfree(sbridge_dev); in alloc_sbridge_dev()
778 sbridge_dev->seg = seg; in alloc_sbridge_dev()
779 sbridge_dev->bus = bus; in alloc_sbridge_dev()
780 sbridge_dev->dom = dom; in alloc_sbridge_dev()
781 sbridge_dev->n_devs = table->n_devs_per_imc; in alloc_sbridge_dev()
782 list_add_tail(&sbridge_dev->list, &sbridge_edac_list); in alloc_sbridge_dev()
784 return sbridge_dev; in alloc_sbridge_dev()
787 static void free_sbridge_dev(struct sbridge_dev *sbridge_dev) in free_sbridge_dev() argument
789 list_del(&sbridge_dev->list); in free_sbridge_dev()
790 kfree(sbridge_dev->pdev); in free_sbridge_dev()
791 kfree(sbridge_dev); in free_sbridge_dev()
1575 pvt->sbridge_dev->source_id = SOURCE_ID_KNL(reg); in get_source_id()
1577 pvt->sbridge_dev->source_id = SOURCE_ID(reg); in get_source_id()
1633 pvt->sbridge_dev->source_id, in __populate_dimms()
1634 pvt->sbridge_dev->dom, i); in __populate_dimms()
1655 pvt->sbridge_dev->mc, pvt->sbridge_dev->dom, i, j, in __populate_dimms()
1666 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom, i, j); in __populate_dimms()
1681 pvt->sbridge_dev->node_id = pvt->info.get_node_id(pvt); in get_dimm_config()
1683 pvt->sbridge_dev->mc, in get_dimm_config()
1684 pvt->sbridge_dev->node_id, in get_dimm_config()
1685 pvt->sbridge_dev->source_id); in get_dimm_config()
1916 struct sbridge_dev *sbridge_dev; in get_mci_for_node_id() local
1918 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) { in get_mci_for_node_id()
1919 if (sbridge_dev->node_id == node_id && sbridge_dev->dom == ha) in get_mci_for_node_id()
1920 return sbridge_dev->mci; in get_mci_for_node_id()
2004 pvt->sbridge_dev->mc, in get_memory_error_data()
2301 static void sbridge_put_devices(struct sbridge_dev *sbridge_dev) in sbridge_put_devices() argument
2306 for (i = 0; i < sbridge_dev->n_devs; i++) { in sbridge_put_devices()
2307 struct pci_dev *pdev = sbridge_dev->pdev[i]; in sbridge_put_devices()
2319 struct sbridge_dev *sbridge_dev, *tmp; in sbridge_put_all_devices() local
2321 list_for_each_entry_safe(sbridge_dev, tmp, &sbridge_edac_list, list) { in sbridge_put_all_devices()
2322 sbridge_put_devices(sbridge_dev); in sbridge_put_all_devices()
2323 free_sbridge_dev(sbridge_dev); in sbridge_put_all_devices()
2333 struct sbridge_dev *sbridge_dev = NULL; in sbridge_get_onedevice() local
2371 sbridge_dev = get_sbridge_dev(seg, bus, dev_descr->dom, in sbridge_get_onedevice()
2372 multi_bus, sbridge_dev); in sbridge_get_onedevice()
2373 if (!sbridge_dev) { in sbridge_get_onedevice()
2385 sbridge_dev = alloc_sbridge_dev(seg, bus, dev_descr->dom, table); in sbridge_get_onedevice()
2386 if (!sbridge_dev) { in sbridge_get_onedevice()
2393 if (sbridge_dev->pdev[sbridge_dev->i_devs]) { in sbridge_get_onedevice()
2401 sbridge_dev->pdev[sbridge_dev->i_devs++] = pdev; in sbridge_get_onedevice()
2487 struct sbridge_dev *sbridge_dev) in sbridge_mci_bind_devs() argument
2494 for (i = 0; i < sbridge_dev->n_devs; i++) { in sbridge_mci_bind_devs()
2495 pdev = sbridge_dev->pdev[i]; in sbridge_mci_bind_devs()
2537 sbridge_dev->bus, in sbridge_mci_bind_devs()
2561 struct sbridge_dev *sbridge_dev) in ibridge_mci_bind_devs() argument
2568 for (i = 0; i < sbridge_dev->n_devs; i++) { in ibridge_mci_bind_devs()
2569 pdev = sbridge_dev->pdev[i]; in ibridge_mci_bind_devs()
2620 sbridge_dev->bus, in ibridge_mci_bind_devs()
2647 struct sbridge_dev *sbridge_dev) in haswell_mci_bind_devs() argument
2661 for (i = 0; i < sbridge_dev->n_devs; i++) { in haswell_mci_bind_devs()
2662 pdev = sbridge_dev->pdev[i]; in haswell_mci_bind_devs()
2711 sbridge_dev->bus, in haswell_mci_bind_devs()
2732 struct sbridge_dev *sbridge_dev) in broadwell_mci_bind_devs() argument
2746 for (i = 0; i < sbridge_dev->n_devs; i++) { in broadwell_mci_bind_devs()
2747 pdev = sbridge_dev->pdev[i]; in broadwell_mci_bind_devs()
2792 sbridge_dev->bus, in broadwell_mci_bind_devs()
2813 struct sbridge_dev *sbridge_dev) in knl_mci_bind_devs() argument
2822 for (i = 0; i < sbridge_dev->n_devs; i++) { in knl_mci_bind_devs()
2823 pdev = sbridge_dev->pdev[i]; in knl_mci_bind_devs()
3196 static void sbridge_unregister_mci(struct sbridge_dev *sbridge_dev) in sbridge_unregister_mci() argument
3198 struct mem_ctl_info *mci = sbridge_dev->mci; in sbridge_unregister_mci()
3201 edac_dbg(0, "MC: dev = %p\n", &sbridge_dev->pdev[0]->dev); in sbridge_unregister_mci()
3208 mci, &sbridge_dev->pdev[0]->dev); in sbridge_unregister_mci()
3216 sbridge_dev->mci = NULL; in sbridge_unregister_mci()
3219 static int sbridge_register_mci(struct sbridge_dev *sbridge_dev, enum type type) in sbridge_register_mci() argument
3224 struct pci_dev *pdev = sbridge_dev->pdev[0]; in sbridge_register_mci()
3235 mci = edac_mc_alloc(sbridge_dev->mc, ARRAY_SIZE(layers), layers, in sbridge_register_mci()
3248 pvt->sbridge_dev = sbridge_dev; in sbridge_register_mci()
3249 sbridge_dev->mci = mci; in sbridge_register_mci()
3279 rc = ibridge_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3284 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3304 rc = sbridge_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3309 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3329 rc = haswell_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3334 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3354 rc = broadwell_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3359 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3378 rc = knl_mci_bind_devs(mci, sbridge_dev); in sbridge_register_mci()
3383 pvt->sbridge_dev->source_id, pvt->sbridge_dev->dom); in sbridge_register_mci()
3416 sbridge_dev->mci = NULL; in sbridge_register_mci()
3444 struct sbridge_dev *sbridge_dev; in sbridge_probe() local
3457 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) { in sbridge_probe()
3461 sbridge_dev->mc = mc++; in sbridge_probe()
3462 rc = sbridge_register_mci(sbridge_dev, ptable->type); in sbridge_probe()
3472 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) in sbridge_probe()
3473 sbridge_unregister_mci(sbridge_dev); in sbridge_probe()
3486 struct sbridge_dev *sbridge_dev; in sbridge_remove() local
3490 list_for_each_entry(sbridge_dev, &sbridge_edac_list, list) in sbridge_remove()
3491 sbridge_unregister_mci(sbridge_dev); in sbridge_remove()