cxl/pci: Map registers based on capabilities
authorIra Weiny <ira.weiny@intel.com>
Fri, 4 Jun 2021 00:50:36 +0000 (17:50 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sun, 6 Jun 2021 00:37:16 +0000 (17:37 -0700)
commit30af97296f48d84bc4a6abbaabb92c796a84ca57
tree214e2d12ce72c06f88c9126ff21ef2ca392eeeaf
parentf8a7e8c29be873b90fcc426e93bdb6184df5970e
cxl/pci: Map registers based on capabilities

The information required to map registers based on capabilities is
contained within the bars themselves.  This means the bar must be mapped
to read the information needed and then unmapped to map the individual
parts of the BAR based on capabilities.

Change cxl_setup_device_regs() to return a new cxl_register_map, change
the name to cxl_probe_device_regs().  Allocate and place
cxl_register_maps on a list while processing all of the specified
register blocks.

After probing all the register blocks go back and map smaller registers
blocks based on their capabilities and dispose of the cxl_register_maps.

NOTE: pci_iomap() is not managed automatically via pcim_enable_device()
so be careful to call pci_iounmap() correctly.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Link: https://lore.kernel.org/r/20210604005036.4187184-1-ira.weiny@intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/cxl/core.c
drivers/cxl/cxl.h
drivers/cxl/pci.c