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;
-
-       phys_addr = pci_resource_start(pdev, map->barno);
-       phys_addr += map->block_offset;
-
-       if (map->device_map.status.valid) {
-               resource_size_t 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;
+
+       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 (map->device_map.memdev.valid) {
-               resource_size_t addr;
-               resource_size_t length;
+               if (!mi->rmap->valid)
+                       continue;
 
-               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;
        }