Commit dceed697 authored by Bjorn Helgaas's avatar Bjorn Helgaas

Merge branch 'pci/devres'

- Export pcim_request_region(), a managed counterpart of
  pci_request_region(), for use by drivers (Philipp Stanner)

- Request the PCI BAR used by xboxvideo (Philipp Stanner)

- Export pcim_iomap_region() and deprecate pcim_iomap_regions() (Philipp
  Stanner)

- Request and map drm/ast BARs with pcim_iomap_region() (Philipp Stanner)

* pci/devres:
  drm/ast: Request PCI BAR with devres
  PCI: Deprecate pcim_iomap_regions() in favor of pcim_iomap_region()
  drm/vboxvideo: Add PCI region request
  PCI: Make pcim_request_region() a public function
parents 59b748cd 2eb20b96
...@@ -287,9 +287,9 @@ static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -287,9 +287,9 @@ static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if (ret) if (ret)
return ret; return ret;
regs = pcim_iomap(pdev, 1, 0); regs = pcim_iomap_region(pdev, 1, "ast");
if (!regs) if (IS_ERR(regs))
return -EIO; return PTR_ERR(regs);
if (pdev->revision >= 0x40) { if (pdev->revision >= 0x40) {
/* /*
...@@ -311,9 +311,9 @@ static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -311,9 +311,9 @@ static int ast_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if (len < AST_IO_MM_LENGTH) if (len < AST_IO_MM_LENGTH)
return -EIO; return -EIO;
ioregs = pcim_iomap(pdev, 2, 0); ioregs = pcim_iomap_region(pdev, 2, "ast");
if (!ioregs) if (IS_ERR(ioregs))
return -EIO; return PTR_ERR(ioregs);
} else { } else {
/* /*
* Anything else is best effort. * Anything else is best effort.
......
...@@ -114,6 +114,10 @@ int vbox_hw_init(struct vbox_private *vbox) ...@@ -114,6 +114,10 @@ int vbox_hw_init(struct vbox_private *vbox)
DRM_INFO("VRAM %08x\n", vbox->full_vram_size); DRM_INFO("VRAM %08x\n", vbox->full_vram_size);
ret = pcim_request_region(pdev, 0, "vboxvideo");
if (ret)
return ret;
/* Map guest-heap at end of vram */ /* Map guest-heap at end of vram */
vbox->guest_heap = pcim_iomap_range(pdev, 0, vbox->guest_heap = pcim_iomap_range(pdev, 0,
GUEST_HEAP_OFFSET(vbox), GUEST_HEAP_SIZE); GUEST_HEAP_OFFSET(vbox), GUEST_HEAP_SIZE);
......
...@@ -728,7 +728,7 @@ EXPORT_SYMBOL(pcim_iounmap); ...@@ -728,7 +728,7 @@ EXPORT_SYMBOL(pcim_iounmap);
* Mapping and region will get automatically released on driver detach. If * Mapping and region will get automatically released on driver detach. If
* desired, release manually only with pcim_iounmap_region(). * desired, release manually only with pcim_iounmap_region().
*/ */
static void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar, void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar,
const char *name) const char *name)
{ {
int ret; int ret;
...@@ -761,6 +761,7 @@ static void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar, ...@@ -761,6 +761,7 @@ static void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar,
return IOMEM_ERR_PTR(ret); return IOMEM_ERR_PTR(ret);
} }
EXPORT_SYMBOL(pcim_iomap_region);
/** /**
* pcim_iounmap_region - Unmap and release a PCI BAR * pcim_iounmap_region - Unmap and release a PCI BAR
...@@ -783,7 +784,7 @@ static void pcim_iounmap_region(struct pci_dev *pdev, int bar) ...@@ -783,7 +784,7 @@ static void pcim_iounmap_region(struct pci_dev *pdev, int bar)
} }
/** /**
* pcim_iomap_regions - Request and iomap PCI BARs * pcim_iomap_regions - Request and iomap PCI BARs (DEPRECATED)
* @pdev: PCI device to map IO resources for * @pdev: PCI device to map IO resources for
* @mask: Mask of BARs to request and iomap * @mask: Mask of BARs to request and iomap
* @name: Name associated with the requests * @name: Name associated with the requests
...@@ -791,6 +792,9 @@ static void pcim_iounmap_region(struct pci_dev *pdev, int bar) ...@@ -791,6 +792,9 @@ static void pcim_iounmap_region(struct pci_dev *pdev, int bar)
* Returns: 0 on success, negative error code on failure. * Returns: 0 on success, negative error code on failure.
* *
* Request and iomap regions specified by @mask. * Request and iomap regions specified by @mask.
*
* This function is DEPRECATED. Do not use it in new code.
* Use pcim_iomap_region() instead.
*/ */
int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name) int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name)
{ {
...@@ -863,6 +867,7 @@ int pcim_request_region(struct pci_dev *pdev, int bar, const char *name) ...@@ -863,6 +867,7 @@ int pcim_request_region(struct pci_dev *pdev, int bar, const char *name)
{ {
return _pcim_request_region(pdev, bar, name, 0); return _pcim_request_region(pdev, bar, name, 0);
} }
EXPORT_SYMBOL(pcim_request_region);
/** /**
* pcim_request_region_exclusive - Request a PCI BAR exclusively * pcim_request_region_exclusive - Request a PCI BAR exclusively
......
...@@ -892,8 +892,6 @@ static inline pci_power_t mid_pci_get_power_state(struct pci_dev *pdev) ...@@ -892,8 +892,6 @@ static inline pci_power_t mid_pci_get_power_state(struct pci_dev *pdev)
#endif #endif
int pcim_intx(struct pci_dev *dev, int enable); int pcim_intx(struct pci_dev *dev, int enable);
int pcim_request_region(struct pci_dev *pdev, int bar, const char *name);
int pcim_request_region_exclusive(struct pci_dev *pdev, int bar, int pcim_request_region_exclusive(struct pci_dev *pdev, int bar,
const char *name); const char *name);
void pcim_release_region(struct pci_dev *pdev, int bar); void pcim_release_region(struct pci_dev *pdev, int bar);
......
...@@ -2291,8 +2291,11 @@ static inline void pci_fixup_device(enum pci_fixup_pass pass, ...@@ -2291,8 +2291,11 @@ static inline void pci_fixup_device(enum pci_fixup_pass pass,
#endif #endif
void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen); void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar,
const char *name);
void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
void __iomem * const *pcim_iomap_table(struct pci_dev *pdev); void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
int pcim_request_region(struct pci_dev *pdev, int bar, const char *name);
int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name); int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name);
int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask, int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask,
const char *name); const char *name);
......
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