Lines Matching refs:acpi_desc

59 static struct acpi_device *to_acpi_dev(struct acpi_nfit_desc *acpi_desc)  in to_acpi_dev()  argument
61 struct nvdimm_bus_descriptor *nd_desc = &acpi_desc->nd_desc; in to_acpi_dev()
71 return to_acpi_device(acpi_desc->dev); in to_acpi_dev()
78 struct acpi_nfit_desc *acpi_desc = to_acpi_nfit_desc(nd_desc); in acpi_nfit_ctl() local
81 struct device *dev = acpi_desc->dev; in acpi_nfit_ctl()
102 struct acpi_device *adev = to_acpi_dev(acpi_desc); in acpi_nfit_ctl()
232 static bool add_spa(struct acpi_nfit_desc *acpi_desc, in add_spa() argument
237 struct device *dev = acpi_desc->dev; in add_spa()
242 list_move_tail(&nfit_spa->list, &acpi_desc->spas); in add_spa()
252 list_add_tail(&nfit_spa->list, &acpi_desc->spas); in add_spa()
259 static bool add_memdev(struct acpi_nfit_desc *acpi_desc, in add_memdev() argument
264 struct device *dev = acpi_desc->dev; in add_memdev()
269 list_move_tail(&nfit_memdev->list, &acpi_desc->memdevs); in add_memdev()
278 list_add_tail(&nfit_memdev->list, &acpi_desc->memdevs); in add_memdev()
285 static bool add_dcr(struct acpi_nfit_desc *acpi_desc, in add_dcr() argument
290 struct device *dev = acpi_desc->dev; in add_dcr()
295 list_move_tail(&nfit_dcr->list, &acpi_desc->dcrs); in add_dcr()
304 list_add_tail(&nfit_dcr->list, &acpi_desc->dcrs); in add_dcr()
310 static bool add_bdw(struct acpi_nfit_desc *acpi_desc, in add_bdw() argument
315 struct device *dev = acpi_desc->dev; in add_bdw()
320 list_move_tail(&nfit_bdw->list, &acpi_desc->bdws); in add_bdw()
329 list_add_tail(&nfit_bdw->list, &acpi_desc->bdws); in add_bdw()
335 static bool add_idt(struct acpi_nfit_desc *acpi_desc, in add_idt() argument
340 struct device *dev = acpi_desc->dev; in add_idt()
345 list_move_tail(&nfit_idt->list, &acpi_desc->idts); in add_idt()
354 list_add_tail(&nfit_idt->list, &acpi_desc->idts); in add_idt()
360 static bool add_flush(struct acpi_nfit_desc *acpi_desc, in add_flush() argument
365 struct device *dev = acpi_desc->dev; in add_flush()
370 list_move_tail(&nfit_flush->list, &acpi_desc->flushes); in add_flush()
379 list_add_tail(&nfit_flush->list, &acpi_desc->flushes); in add_flush()
385 static void *add_table(struct acpi_nfit_desc *acpi_desc, in add_table() argument
388 struct device *dev = acpi_desc->dev; in add_table()
404 if (!add_spa(acpi_desc, prev, table)) in add_table()
408 if (!add_memdev(acpi_desc, prev, table)) in add_table()
412 if (!add_dcr(acpi_desc, prev, table)) in add_table()
416 if (!add_bdw(acpi_desc, prev, table)) in add_table()
420 if (!add_idt(acpi_desc, prev, table)) in add_table()
424 if (!add_flush(acpi_desc, prev, table)) in add_table()
438 static void nfit_mem_find_spa_bdw(struct acpi_nfit_desc *acpi_desc, in nfit_mem_find_spa_bdw() argument
445 list_for_each_entry(nfit_spa, &acpi_desc->spas, list) { in nfit_mem_find_spa_bdw()
453 list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) { in nfit_mem_find_spa_bdw()
466 dev_dbg(acpi_desc->dev, "SPA-BDW not found for SPA-DCR %d\n", in nfit_mem_find_spa_bdw()
471 static void nfit_mem_init_bdw(struct acpi_nfit_desc *acpi_desc, in nfit_mem_init_bdw() argument
481 list_for_each_entry(nfit_bdw, &acpi_desc->bdws, list) { in nfit_mem_init_bdw()
491 nfit_mem_find_spa_bdw(acpi_desc, nfit_mem); in nfit_mem_init_bdw()
497 list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) { in nfit_mem_init_bdw()
503 list_for_each_entry(nfit_idt, &acpi_desc->idts, list) { in nfit_mem_init_bdw()
510 list_for_each_entry(nfit_flush, &acpi_desc->flushes, list) { in nfit_mem_init_bdw()
521 static int nfit_mem_dcr_init(struct acpi_nfit_desc *acpi_desc, in nfit_mem_dcr_init() argument
536 list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) { in nfit_mem_dcr_init()
546 list_for_each_entry(nfit_mem, &acpi_desc->dimms, list) in nfit_mem_dcr_init()
556 nfit_mem = devm_kzalloc(acpi_desc->dev, in nfit_mem_dcr_init()
561 list_add(&nfit_mem->list, &acpi_desc->dimms); in nfit_mem_dcr_init()
564 list_for_each_entry(nfit_dcr, &acpi_desc->dcrs, list) { in nfit_mem_dcr_init()
583 dev_err(acpi_desc->dev, "SPA %d missing DCR %d\n", in nfit_mem_dcr_init()
596 list_for_each_entry(nfit_idt, &acpi_desc->idts, list) { in nfit_mem_dcr_init()
602 nfit_mem_init_bdw(acpi_desc, nfit_mem, spa); in nfit_mem_dcr_init()
631 static int nfit_mem_init(struct acpi_nfit_desc *acpi_desc) in nfit_mem_init() argument
643 list_for_each_entry(nfit_spa, &acpi_desc->spas, list) { in nfit_mem_init()
646 rc = nfit_mem_dcr_init(acpi_desc, nfit_spa->spa); in nfit_mem_init()
651 list_sort(NULL, &acpi_desc->dimms, nfit_mem_cmp); in nfit_mem_init()
661 struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc); in revision_show() local
663 return sprintf(buf, "%d\n", acpi_desc->acpi_header.revision); in revision_show()
813 static struct nvdimm *acpi_nfit_dimm_by_handle(struct acpi_nfit_desc *acpi_desc, in acpi_nfit_dimm_by_handle() argument
818 list_for_each_entry(nfit_mem, &acpi_desc->dimms, list) in acpi_nfit_dimm_by_handle()
825 static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc, in acpi_nfit_add_dimm() argument
829 struct device *dev = acpi_desc->dev; in acpi_nfit_add_dimm()
833 nfit_mem->dsm_mask = acpi_desc->dimm_dsm_force_en; in acpi_nfit_add_dimm()
834 adev = to_acpi_dev(acpi_desc); in acpi_nfit_add_dimm()
853 static int acpi_nfit_register_dimms(struct acpi_nfit_desc *acpi_desc) in acpi_nfit_register_dimms() argument
858 list_for_each_entry(nfit_mem, &acpi_desc->dimms, list) { in acpi_nfit_register_dimms()
866 nvdimm = acpi_nfit_dimm_by_handle(acpi_desc, device_handle); in acpi_nfit_register_dimms()
879 rc = acpi_nfit_add_dimm(acpi_desc, nfit_mem, device_handle); in acpi_nfit_register_dimms()
883 nvdimm = nvdimm_create(acpi_desc->nvdimm_bus, nfit_mem, in acpi_nfit_register_dimms()
895 dev_info(acpi_desc->dev, "%s flags:%s%s%s%s\n", in acpi_nfit_register_dimms()
904 return nvdimm_bus_check_dimm_count(acpi_desc->nvdimm_bus, dimm_count); in acpi_nfit_register_dimms()
907 static void acpi_nfit_init_dsms(struct acpi_nfit_desc *acpi_desc) in acpi_nfit_init_dsms() argument
909 struct nvdimm_bus_descriptor *nd_desc = &acpi_desc->nd_desc; in acpi_nfit_init_dsms()
914 nd_desc->dsm_mask = acpi_desc->bus_dsm_force_en; in acpi_nfit_init_dsms()
915 adev = to_acpi_dev(acpi_desc); in acpi_nfit_init_dsms()
979 struct acpi_nfit_desc *acpi_desc, u16 range_index, int n) in memdev_from_spa() argument
983 list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) in memdev_from_spa()
990 static int acpi_nfit_init_interleave_set(struct acpi_nfit_desc *acpi_desc, in acpi_nfit_init_interleave_set() argument
995 struct device *dev = acpi_desc->dev; in acpi_nfit_init_interleave_set()
1017 struct acpi_nfit_memory_map *memdev = memdev_from_spa(acpi_desc, in acpi_nfit_init_interleave_set()
1192 struct acpi_nfit_desc *acpi_desc = spa_map->acpi_desc; in nfit_spa_mapping_release() local
1194 WARN_ON(!mutex_is_locked(&acpi_desc->spa_map_mutex)); in nfit_spa_mapping_release()
1195 dev_dbg(acpi_desc->dev, "%s: SPA%d\n", __func__, spa->range_index); in nfit_spa_mapping_release()
1206 struct acpi_nfit_desc *acpi_desc, in find_spa_mapping() argument
1211 WARN_ON(!mutex_is_locked(&acpi_desc->spa_map_mutex)); in find_spa_mapping()
1212 list_for_each_entry(spa_map, &acpi_desc->spa_maps, list) in find_spa_mapping()
1219 static void nfit_spa_unmap(struct acpi_nfit_desc *acpi_desc, in nfit_spa_unmap() argument
1224 mutex_lock(&acpi_desc->spa_map_mutex); in nfit_spa_unmap()
1225 spa_map = find_spa_mapping(acpi_desc, spa); in nfit_spa_unmap()
1229 mutex_unlock(&acpi_desc->spa_map_mutex); in nfit_spa_unmap()
1232 static void __iomem *__nfit_spa_map(struct acpi_nfit_desc *acpi_desc, in __nfit_spa_map() argument
1240 WARN_ON(!mutex_is_locked(&acpi_desc->spa_map_mutex)); in __nfit_spa_map()
1242 spa_map = find_spa_mapping(acpi_desc, spa); in __nfit_spa_map()
1255 spa_map->acpi_desc = acpi_desc; in __nfit_spa_map()
1257 res = request_mem_region(start, n, dev_name(acpi_desc->dev)); in __nfit_spa_map()
1272 list_add_tail(&spa_map->list, &acpi_desc->spa_maps); in __nfit_spa_map()
1295 static void __iomem *nfit_spa_map(struct acpi_nfit_desc *acpi_desc, in nfit_spa_map() argument
1300 mutex_lock(&acpi_desc->spa_map_mutex); in nfit_spa_map()
1301 iomem = __nfit_spa_map(acpi_desc, spa, type); in nfit_spa_map()
1302 mutex_unlock(&acpi_desc->spa_map_mutex); in nfit_spa_map()
1348 struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc); in acpi_nfit_blk_region_enable() local
1376 mmio->addr.base = nfit_spa_map(acpi_desc, nfit_mem->spa_bdw, in acpi_nfit_blk_region_enable()
1399 mmio->addr.base = nfit_spa_map(acpi_desc, nfit_mem->spa_dcr, in acpi_nfit_blk_region_enable()
1456 struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc); in acpi_nfit_blk_region_disable() local
1469 nfit_spa_unmap(acpi_desc, mmio->spa); in acpi_nfit_blk_region_disable()
1475 static int acpi_nfit_init_mapping(struct acpi_nfit_desc *acpi_desc, in acpi_nfit_init_mapping() argument
1480 struct nvdimm *nvdimm = acpi_nfit_dimm_by_handle(acpi_desc, in acpi_nfit_init_mapping()
1487 dev_err(acpi_desc->dev, "spa%d dimm: %#x not found\n", in acpi_nfit_init_mapping()
1502 dev_dbg(acpi_desc->dev, "spa%d %s missing bdw\n", in acpi_nfit_init_mapping()
1516 ndbr_desc->do_io = acpi_desc->blk_do_io; in acpi_nfit_init_mapping()
1517 if (!nvdimm_blk_region_create(acpi_desc->nvdimm_bus, ndr_desc)) in acpi_nfit_init_mapping()
1525 static int acpi_nfit_register_region(struct acpi_nfit_desc *acpi_desc, in acpi_nfit_register_region() argument
1541 dev_dbg(acpi_desc->dev, "%s: detected invalid spa index\n", in acpi_nfit_register_region()
1561 list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) { in acpi_nfit_register_region()
1568 dev_err(acpi_desc->dev, "spa%d exceeds max mappings %d\n", in acpi_nfit_register_region()
1573 rc = acpi_nfit_init_mapping(acpi_desc, nd_mapping, ndr_desc, in acpi_nfit_register_region()
1581 rc = acpi_nfit_init_interleave_set(acpi_desc, ndr_desc, spa); in acpi_nfit_register_region()
1585 nvdimm_bus = acpi_desc->nvdimm_bus; in acpi_nfit_register_region()
1598 static int acpi_nfit_register_regions(struct acpi_nfit_desc *acpi_desc) in acpi_nfit_register_regions() argument
1602 list_for_each_entry(nfit_spa, &acpi_desc->spas, list) { in acpi_nfit_register_regions()
1603 int rc = acpi_nfit_register_region(acpi_desc, nfit_spa); in acpi_nfit_register_regions()
1611 static int acpi_nfit_check_deletions(struct acpi_nfit_desc *acpi_desc, in acpi_nfit_check_deletions() argument
1614 struct device *dev = acpi_desc->dev; in acpi_nfit_check_deletions()
1628 int acpi_nfit_init(struct acpi_nfit_desc *acpi_desc, acpi_size sz) in acpi_nfit_init() argument
1630 struct device *dev = acpi_desc->dev; in acpi_nfit_init()
1636 mutex_lock(&acpi_desc->init_mutex); in acpi_nfit_init()
1645 list_cut_position(&prev.spas, &acpi_desc->spas, in acpi_nfit_init()
1646 acpi_desc->spas.prev); in acpi_nfit_init()
1647 list_cut_position(&prev.memdevs, &acpi_desc->memdevs, in acpi_nfit_init()
1648 acpi_desc->memdevs.prev); in acpi_nfit_init()
1649 list_cut_position(&prev.dcrs, &acpi_desc->dcrs, in acpi_nfit_init()
1650 acpi_desc->dcrs.prev); in acpi_nfit_init()
1651 list_cut_position(&prev.bdws, &acpi_desc->bdws, in acpi_nfit_init()
1652 acpi_desc->bdws.prev); in acpi_nfit_init()
1653 list_cut_position(&prev.idts, &acpi_desc->idts, in acpi_nfit_init()
1654 acpi_desc->idts.prev); in acpi_nfit_init()
1655 list_cut_position(&prev.flushes, &acpi_desc->flushes, in acpi_nfit_init()
1656 acpi_desc->flushes.prev); in acpi_nfit_init()
1658 data = (u8 *) acpi_desc->nfit; in acpi_nfit_init()
1661 data = add_table(acpi_desc, &prev, data, end); in acpi_nfit_init()
1670 rc = acpi_nfit_check_deletions(acpi_desc, &prev); in acpi_nfit_init()
1674 if (nfit_mem_init(acpi_desc) != 0) { in acpi_nfit_init()
1679 acpi_nfit_init_dsms(acpi_desc); in acpi_nfit_init()
1681 rc = acpi_nfit_register_dimms(acpi_desc); in acpi_nfit_init()
1685 rc = acpi_nfit_register_regions(acpi_desc); in acpi_nfit_init()
1688 mutex_unlock(&acpi_desc->init_mutex); in acpi_nfit_init()
1696 struct acpi_nfit_desc *acpi_desc; in acpi_nfit_desc_init() local
1699 acpi_desc = devm_kzalloc(dev, sizeof(*acpi_desc), GFP_KERNEL); in acpi_nfit_desc_init()
1700 if (!acpi_desc) in acpi_nfit_desc_init()
1703 dev_set_drvdata(dev, acpi_desc); in acpi_nfit_desc_init()
1704 acpi_desc->dev = dev; in acpi_nfit_desc_init()
1705 acpi_desc->blk_do_io = acpi_nfit_blk_region_do_io; in acpi_nfit_desc_init()
1706 nd_desc = &acpi_desc->nd_desc; in acpi_nfit_desc_init()
1711 acpi_desc->nvdimm_bus = nvdimm_bus_register(dev, nd_desc); in acpi_nfit_desc_init()
1712 if (!acpi_desc->nvdimm_bus) { in acpi_nfit_desc_init()
1713 devm_kfree(dev, acpi_desc); in acpi_nfit_desc_init()
1717 INIT_LIST_HEAD(&acpi_desc->spa_maps); in acpi_nfit_desc_init()
1718 INIT_LIST_HEAD(&acpi_desc->spas); in acpi_nfit_desc_init()
1719 INIT_LIST_HEAD(&acpi_desc->dcrs); in acpi_nfit_desc_init()
1720 INIT_LIST_HEAD(&acpi_desc->bdws); in acpi_nfit_desc_init()
1721 INIT_LIST_HEAD(&acpi_desc->idts); in acpi_nfit_desc_init()
1722 INIT_LIST_HEAD(&acpi_desc->flushes); in acpi_nfit_desc_init()
1723 INIT_LIST_HEAD(&acpi_desc->memdevs); in acpi_nfit_desc_init()
1724 INIT_LIST_HEAD(&acpi_desc->dimms); in acpi_nfit_desc_init()
1725 mutex_init(&acpi_desc->spa_map_mutex); in acpi_nfit_desc_init()
1726 mutex_init(&acpi_desc->init_mutex); in acpi_nfit_desc_init()
1728 return acpi_desc; in acpi_nfit_desc_init()
1734 struct acpi_nfit_desc *acpi_desc; in acpi_nfit_add() local
1748 acpi_desc = acpi_nfit_desc_init(adev); in acpi_nfit_add()
1749 if (IS_ERR(acpi_desc)) { in acpi_nfit_add()
1751 __func__, PTR_ERR(acpi_desc)); in acpi_nfit_add()
1752 return PTR_ERR(acpi_desc); in acpi_nfit_add()
1759 acpi_desc->acpi_header = *tbl; in acpi_nfit_add()
1760 acpi_desc->nfit = (void *) tbl + sizeof(struct acpi_table_nfit); in acpi_nfit_add()
1772 acpi_desc->nfit = in acpi_nfit_add()
1780 rc = acpi_nfit_init(acpi_desc, sz); in acpi_nfit_add()
1782 nvdimm_bus_unregister(acpi_desc->nvdimm_bus); in acpi_nfit_add()
1790 struct acpi_nfit_desc *acpi_desc = dev_get_drvdata(&adev->dev); in acpi_nfit_remove() local
1792 nvdimm_bus_unregister(acpi_desc->nvdimm_bus); in acpi_nfit_remove()
1798 struct acpi_nfit_desc *acpi_desc = dev_get_drvdata(&adev->dev); in acpi_nfit_notify() local
1815 if (!acpi_desc) { in acpi_nfit_notify()
1816 acpi_desc = acpi_nfit_desc_init(adev); in acpi_nfit_notify()
1817 if (IS_ERR(acpi_desc)) { in acpi_nfit_notify()
1819 __func__, PTR_ERR(acpi_desc)); in acpi_nfit_notify()
1831 nfit_saved = acpi_desc->nfit; in acpi_nfit_notify()
1834 acpi_desc->nfit = in acpi_nfit_notify()
1836 ret = acpi_nfit_init(acpi_desc, obj->buffer.length); in acpi_nfit_notify()
1839 acpi_desc->nfit = nfit_saved; in acpi_nfit_notify()