Commit 1191ca10 authored by Dan Williams's avatar Dan Williams

cxl/pci: Cleanup cxl_map_device_regs()

Use a loop to reduce the duplicated code in cxl_map_device_regs(). This
is in preparation for deleting cxl_map_regs().
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/166974409867.1608150.14886452053935226038.stgit@djiang5-desk3.ch.intel.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent af2dfef8
...@@ -211,42 +211,31 @@ int cxl_map_device_regs(struct pci_dev *pdev, ...@@ -211,42 +211,31 @@ int cxl_map_device_regs(struct pci_dev *pdev,
struct cxl_device_regs *regs, struct cxl_device_regs *regs,
struct cxl_register_map *map) struct cxl_register_map *map)
{ {
resource_size_t phys_addr =
pci_resource_start(pdev, map->barno) + map->block_offset;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
resource_size_t phys_addr; struct mapinfo {
struct cxl_reg_map *rmap;
phys_addr = pci_resource_start(pdev, map->barno); void __iomem **addr;
phys_addr += map->block_offset; } mapinfo[] = {
{ &map->device_map.status, &regs->status, },
if (map->device_map.status.valid) { { &map->device_map.mbox, &regs->mbox, },
resource_size_t addr; { &map->device_map.memdev, &regs->memdev, },
};
int i;
for (i = 0; i < ARRAY_SIZE(mapinfo); i++) {
struct mapinfo *mi = &mapinfo[i];
resource_size_t length; resource_size_t length;
addr = phys_addr + map->device_map.status.offset;
length = map->device_map.status.size;
regs->status = devm_cxl_iomap_block(dev, addr, length);
if (!regs->status)
return -ENOMEM;
}
if (map->device_map.mbox.valid) {
resource_size_t addr; resource_size_t addr;
resource_size_t length;
addr = phys_addr + map->device_map.mbox.offset; if (!mi->rmap->valid)
length = map->device_map.mbox.size; continue;
regs->mbox = devm_cxl_iomap_block(dev, addr, length);
if (!regs->mbox)
return -ENOMEM;
}
if (map->device_map.memdev.valid) {
resource_size_t addr;
resource_size_t length;
addr = phys_addr + map->device_map.memdev.offset; addr = phys_addr + mi->rmap->offset;
length = map->device_map.memdev.size; length = mi->rmap->size;
regs->memdev = devm_cxl_iomap_block(dev, addr, length); *(mi->addr) = devm_cxl_iomap_block(dev, addr, length);
if (!regs->memdev) if (!*(mi->addr))
return -ENOMEM; return -ENOMEM;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment