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: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com> Link: https://lore.kernel.org/r/166974409867.1608150.14886452053935226038.stgit@djiang5-desk3.ch.intel.com Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
af2dfef854
commit
1191ca102d
|
@ -211,42 +211,31 @@ int cxl_map_device_regs(struct pci_dev *pdev,
|
|||
struct cxl_device_regs *regs,
|
||||
struct cxl_register_map *map)
|
||||
{
|
||||
resource_size_t phys_addr =
|
||||
pci_resource_start(pdev, map->barno) + map->block_offset;
|
||||
struct device *dev = &pdev->dev;
|
||||
resource_size_t phys_addr;
|
||||
struct mapinfo {
|
||||
struct cxl_reg_map *rmap;
|
||||
void __iomem **addr;
|
||||
} mapinfo[] = {
|
||||
{ &map->device_map.status, ®s->status, },
|
||||
{ &map->device_map.mbox, ®s->mbox, },
|
||||
{ &map->device_map.memdev, ®s->memdev, },
|
||||
};
|
||||
int i;
|
||||
|
||||
phys_addr = pci_resource_start(pdev, map->barno);
|
||||
phys_addr += map->block_offset;
|
||||
|
||||
if (map->device_map.status.valid) {
|
||||
resource_size_t addr;
|
||||
for (i = 0; i < ARRAY_SIZE(mapinfo); i++) {
|
||||
struct mapinfo *mi = &mapinfo[i];
|
||||
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 length;
|
||||
|
||||
addr = phys_addr + map->device_map.mbox.offset;
|
||||
length = map->device_map.mbox.size;
|
||||
regs->mbox = devm_cxl_iomap_block(dev, addr, length);
|
||||
if (!regs->mbox)
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (!mi->rmap->valid)
|
||||
continue;
|
||||
|
||||
if (map->device_map.memdev.valid) {
|
||||
resource_size_t addr;
|
||||
resource_size_t length;
|
||||
|
||||
addr = phys_addr + map->device_map.memdev.offset;
|
||||
length = map->device_map.memdev.size;
|
||||
regs->memdev = devm_cxl_iomap_block(dev, addr, length);
|
||||
if (!regs->memdev)
|
||||
addr = phys_addr + mi->rmap->offset;
|
||||
length = mi->rmap->size;
|
||||
*(mi->addr) = devm_cxl_iomap_block(dev, addr, length);
|
||||
if (!*(mi->addr))
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue