Skip to content

Commit 0ff9b9b

Browse files
committed
Merge branches 'pci/aspm', 'pci/enumeration', 'pci/hotplug', 'pci/misc', 'pci/msi', 'pci/resource' and 'pci/virtualization' into next
* pci/aspm: PCI/ASPM: Simplify Clock Power Management setting PCI: Use dev->has_secondary_link to find downstream PCIe links PCI/ASPM: Use dev->has_secondary_link to find downstream links PCI: Add dev->has_secondary_link to track downstream PCIe links PCI/ASPM: Remove redundant PCIe port type checking PCI/ASPM: Drop __pci_disable_link_state() useless "force" parameter * pci/enumeration: PCI: Remove unused pci_scan_bus_parented() xen/pcifront: Don't use deprecated function pci_scan_bus_parented() PCI: designware: Use pci_scan_root_bus() for simplicity PCI: tegra: Remove tegra_pcie_scan_bus() PCI: mvebu: Remove mvebu_pcie_scan_bus() * pci/hotplug: PCI: pciehp: Wait for hotplug command completion where necessary PCI: Propagate the "ignore hotplug" setting to parent ACPI / hotplug / PCI: Check ignore_hotplug for all downstream devices PCI: pciehp: Drop pointless label from pciehp_probe() PCI: pciehp: Drop pointless ACPI-based "slot detection" check * pci/misc: PCI: Remove unused pci_dma_burst_advice() PCI: Remove unused pcibios_select_root() (again) PCI: Remove unnecessary #includes of <asm/pci.h> PCI: Include <linux/pci.h>, not <asm/pci.h> * pci/msi: PCI/MSI: Remove unused pci_msi_off() PCI/MSI: Drop pci_msi_off() calls from quirks ntb: Drop pci_msi_off() call during probe virtio_pci: drop pci_msi_off() call during probe PCI/MSI: Disable MSI at enumeration even if kernel doesn't support MSI PCI/MSI: Export pci_msi_set_enable(), pci_msix_clear_and_set_ctrl() PCI/MSI: Rename msi_set_enable(), msix_clear_and_set_ctrl() * pci/resource: PCI: Add pci_bus_addr_t * pci/virtualization: ACPI / PCI: Account for ARI in _PRT lookups PCI: Move pci_ari_enabled() to global header PCI: Add function 1 DMA alias quirk for Marvell 9120 PCI: Add ACS quirks for Intel 9-series PCH root ports
8 parents 5ebe6af + 0c0cbb6 + c030008 + a5dd4b4 + 01d72a9 + c6201cd + 3a9ad0b + 917bfd9 commit 0ff9b9b

File tree

56 files changed

+250
-692
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+250
-692
lines changed

Documentation/DMA-API-HOWTO.txt

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,18 @@ physical addresses. These are the addresses in /proc/iomem. The physical
2525
address is not directly useful to a driver; it must use ioremap() to map
2626
the space and produce a virtual address.
2727

28-
I/O devices use a third kind of address: a "bus address" or "DMA address".
29-
If a device has registers at an MMIO address, or if it performs DMA to read
30-
or write system memory, the addresses used by the device are bus addresses.
31-
In some systems, bus addresses are identical to CPU physical addresses, but
32-
in general they are not. IOMMUs and host bridges can produce arbitrary
28+
I/O devices use a third kind of address: a "bus address". If a device has
29+
registers at an MMIO address, or if it performs DMA to read or write system
30+
memory, the addresses used by the device are bus addresses. In some
31+
systems, bus addresses are identical to CPU physical addresses, but in
32+
general they are not. IOMMUs and host bridges can produce arbitrary
3333
mappings between physical and bus addresses.
3434

35+
From a device's point of view, DMA uses the bus address space, but it may
36+
be restricted to a subset of that space. For example, even if a system
37+
supports 64-bit addresses for main memory and PCI BARs, it may use an IOMMU
38+
so devices only need to use 32-bit DMA addresses.
39+
3540
Here's a picture and some examples:
3641

3742
CPU CPU Bus
@@ -72,11 +77,11 @@ can use virtual address X to access the buffer, but the device itself
7277
cannot because DMA doesn't go through the CPU virtual memory system.
7378

7479
In some simple systems, the device can do DMA directly to physical address
75-
Y. But in many others, there is IOMMU hardware that translates bus
80+
Y. But in many others, there is IOMMU hardware that translates DMA
7681
addresses to physical addresses, e.g., it translates Z to Y. This is part
7782
of the reason for the DMA API: the driver can give a virtual address X to
7883
an interface like dma_map_single(), which sets up any required IOMMU
79-
mapping and returns the bus address Z. The driver then tells the device to
84+
mapping and returns the DMA address Z. The driver then tells the device to
8085
do DMA to Z, and the IOMMU maps it to the buffer at address Y in system
8186
RAM.
8287

@@ -98,7 +103,7 @@ First of all, you should make sure
98103
#include <linux/dma-mapping.h>
99104

100105
is in your driver, which provides the definition of dma_addr_t. This type
101-
can hold any valid DMA or bus address for the platform and should be used
106+
can hold any valid DMA address for the platform and should be used
102107
everywhere you hold a DMA address returned from the DMA mapping functions.
103108

104109
What memory is DMA'able?
@@ -316,7 +321,7 @@ There are two types of DMA mappings:
316321
Think of "consistent" as "synchronous" or "coherent".
317322

318323
The current default is to return consistent memory in the low 32
319-
bits of the bus space. However, for future compatibility you should
324+
bits of the DMA space. However, for future compatibility you should
320325
set the consistent mask even if this default is fine for your
321326
driver.
322327

@@ -403,7 +408,7 @@ dma_alloc_coherent() returns two values: the virtual address which you
403408
can use to access it from the CPU and dma_handle which you pass to the
404409
card.
405410

406-
The CPU virtual address and the DMA bus address are both
411+
The CPU virtual address and the DMA address are both
407412
guaranteed to be aligned to the smallest PAGE_SIZE order which
408413
is greater than or equal to the requested size. This invariant
409414
exists (for example) to guarantee that if you allocate a chunk
@@ -645,8 +650,8 @@ PLEASE NOTE: The 'nents' argument to the dma_unmap_sg call must be
645650
dma_map_sg call.
646651

647652
Every dma_map_{single,sg}() call should have its dma_unmap_{single,sg}()
648-
counterpart, because the bus address space is a shared resource and
649-
you could render the machine unusable by consuming all bus addresses.
653+
counterpart, because the DMA address space is a shared resource and
654+
you could render the machine unusable by consuming all DMA addresses.
650655

651656
If you need to use the same streaming DMA region multiple times and touch
652657
the data in between the DMA transfers, the buffer needs to be synced

Documentation/DMA-API.txt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ Part I - dma_ API
1818
To get the dma_ API, you must #include <linux/dma-mapping.h>. This
1919
provides dma_addr_t and the interfaces described below.
2020

21-
A dma_addr_t can hold any valid DMA or bus address for the platform. It
22-
can be given to a device to use as a DMA source or target. A CPU cannot
23-
reference a dma_addr_t directly because there may be translation between
24-
its physical address space and the bus address space.
21+
A dma_addr_t can hold any valid DMA address for the platform. It can be
22+
given to a device to use as a DMA source or target. A CPU cannot reference
23+
a dma_addr_t directly because there may be translation between its physical
24+
address space and the DMA address space.
2525

2626
Part Ia - Using large DMA-coherent buffers
2727
------------------------------------------
@@ -42,7 +42,7 @@ It returns a pointer to the allocated region (in the processor's virtual
4242
address space) or NULL if the allocation failed.
4343

4444
It also returns a <dma_handle> which may be cast to an unsigned integer the
45-
same width as the bus and given to the device as the bus address base of
45+
same width as the bus and given to the device as the DMA address base of
4646
the region.
4747

4848
Note: consistent memory can be expensive on some platforms, and the
@@ -193,7 +193,7 @@ dma_map_single(struct device *dev, void *cpu_addr, size_t size,
193193
enum dma_data_direction direction)
194194

195195
Maps a piece of processor virtual memory so it can be accessed by the
196-
device and returns the bus address of the memory.
196+
device and returns the DMA address of the memory.
197197

198198
The direction for both APIs may be converted freely by casting.
199199
However the dma_ API uses a strongly typed enumerator for its
@@ -212,20 +212,20 @@ contiguous piece of memory. For this reason, memory to be mapped by
212212
this API should be obtained from sources which guarantee it to be
213213
physically contiguous (like kmalloc).
214214

215-
Further, the bus address of the memory must be within the
215+
Further, the DMA address of the memory must be within the
216216
dma_mask of the device (the dma_mask is a bit mask of the
217-
addressable region for the device, i.e., if the bus address of
218-
the memory ANDed with the dma_mask is still equal to the bus
217+
addressable region for the device, i.e., if the DMA address of
218+
the memory ANDed with the dma_mask is still equal to the DMA
219219
address, then the device can perform DMA to the memory). To
220220
ensure that the memory allocated by kmalloc is within the dma_mask,
221221
the driver may specify various platform-dependent flags to restrict
222-
the bus address range of the allocation (e.g., on x86, GFP_DMA
223-
guarantees to be within the first 16MB of available bus addresses,
222+
the DMA address range of the allocation (e.g., on x86, GFP_DMA
223+
guarantees to be within the first 16MB of available DMA addresses,
224224
as required by ISA devices).
225225

226226
Note also that the above constraints on physical contiguity and
227227
dma_mask may not apply if the platform has an IOMMU (a device which
228-
maps an I/O bus address to a physical memory address). However, to be
228+
maps an I/O DMA address to a physical memory address). However, to be
229229
portable, device driver writers may *not* assume that such an IOMMU
230230
exists.
231231

@@ -296,7 +296,7 @@ reduce current DMA mapping usage or delay and try again later).
296296
dma_map_sg(struct device *dev, struct scatterlist *sg,
297297
int nents, enum dma_data_direction direction)
298298

299-
Returns: the number of bus address segments mapped (this may be shorter
299+
Returns: the number of DMA address segments mapped (this may be shorter
300300
than <nents> passed in if some elements of the scatter/gather list are
301301
physically or virtually adjacent and an IOMMU maps them with a single
302302
entry).
@@ -340,7 +340,7 @@ must be the same as those and passed in to the scatter/gather mapping
340340
API.
341341

342342
Note: <nents> must be the number you passed in, *not* the number of
343-
bus address entries returned.
343+
DMA address entries returned.
344344

345345
void
346346
dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
@@ -507,7 +507,7 @@ it's asked for coherent memory for this device.
507507
phys_addr is the CPU physical address to which the memory is currently
508508
assigned (this will be ioremapped so the CPU can access the region).
509509

510-
device_addr is the bus address the device needs to be programmed
510+
device_addr is the DMA address the device needs to be programmed
511511
with to actually address this memory (this will be handed out as the
512512
dma_addr_t in dma_alloc_coherent()).
513513

arch/alpha/include/asm/pci.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,6 @@ extern void pcibios_set_master(struct pci_dev *dev);
7171
/* implement the pci_ DMA API in terms of the generic device dma_ one */
7272
#include <asm-generic/pci-dma-compat.h>
7373

74-
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
75-
enum pci_dma_burst_strategy *strat,
76-
unsigned long *strategy_parameter)
77-
{
78-
unsigned long cacheline_size;
79-
u8 byte;
80-
81-
pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &byte);
82-
if (byte == 0)
83-
cacheline_size = 1024;
84-
else
85-
cacheline_size = (int) byte * 4;
86-
87-
*strat = PCI_DMA_BURST_BOUNDARY;
88-
*strategy_parameter = cacheline_size;
89-
}
9074
#endif
9175

9276
/* TODO: integrate with include/asm-generic/pci.h ? */

arch/alpha/kernel/core_irongate.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include <linux/bootmem.h>
2323

2424
#include <asm/ptrace.h>
25-
#include <asm/pci.h>
2625
#include <asm/cacheflush.h>
2726
#include <asm/tlbflush.h>
2827

arch/alpha/kernel/sys_eiger.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include <asm/irq.h>
2323
#include <asm/mmu_context.h>
2424
#include <asm/io.h>
25-
#include <asm/pci.h>
2625
#include <asm/pgtable.h>
2726
#include <asm/core_tsunami.h>
2827
#include <asm/hwrpb.h>

arch/alpha/kernel/sys_nautilus.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
#include <asm/irq.h>
4040
#include <asm/mmu_context.h>
4141
#include <asm/io.h>
42-
#include <asm/pci.h>
4342
#include <asm/pgtable.h>
4443
#include <asm/core_irongate.h>
4544
#include <asm/hwrpb.h>

arch/arm/include/asm/pci.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)
3131
*/
3232
#define PCI_DMA_BUS_IS_PHYS (1)
3333

34-
#ifdef CONFIG_PCI
35-
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
36-
enum pci_dma_burst_strategy *strat,
37-
unsigned long *strategy_parameter)
38-
{
39-
*strat = PCI_DMA_BURST_INFINITY;
40-
*strategy_parameter = ~0UL;
41-
}
42-
#endif
43-
4434
#define HAVE_PCI_MMAP
4535
extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
4636
enum pci_mmap_state mmap_state, int write_combine);

arch/frv/include/asm/pci.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,6 @@ extern void pci_free_consistent(struct pci_dev *hwdev, size_t size,
4141
/* Return the index of the PCI controller for device PDEV. */
4242
#define pci_controller_num(PDEV) (0)
4343

44-
#ifdef CONFIG_PCI
45-
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
46-
enum pci_dma_burst_strategy *strat,
47-
unsigned long *strategy_parameter)
48-
{
49-
*strat = PCI_DMA_BURST_INFINITY;
50-
*strategy_parameter = ~0UL;
51-
}
52-
#endif
53-
5444
/*
5545
* These are pretty much arbitrary with the CoMEM implementation.
5646
* We have the whole address space to ourselves.

arch/ia64/include/asm/pci.h

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -52,25 +52,6 @@ extern unsigned long ia64_max_iommu_merge_mask;
5252

5353
#include <asm-generic/pci-dma-compat.h>
5454

55-
#ifdef CONFIG_PCI
56-
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
57-
enum pci_dma_burst_strategy *strat,
58-
unsigned long *strategy_parameter)
59-
{
60-
unsigned long cacheline_size;
61-
u8 byte;
62-
63-
pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &byte);
64-
if (byte == 0)
65-
cacheline_size = 1024;
66-
else
67-
cacheline_size = (int) byte * 4;
68-
69-
*strat = PCI_DMA_BURST_MULTIPLE;
70-
*strategy_parameter = cacheline_size;
71-
}
72-
#endif
73-
7455
#define HAVE_PCI_MMAP
7556
extern int pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma,
7657
enum pci_mmap_state mmap_state, int write_combine);
@@ -108,19 +89,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)
10889
return (pci_domain_nr(bus) != 0);
10990
}
11091

111-
static inline struct resource *
112-
pcibios_select_root(struct pci_dev *pdev, struct resource *res)
113-
{
114-
struct resource *root = NULL;
115-
116-
if (res->flags & IORESOURCE_IO)
117-
root = &ioport_resource;
118-
if (res->flags & IORESOURCE_MEM)
119-
root = &iomem_resource;
120-
121-
return root;
122-
}
123-
12492
#define HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
12593
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
12694
{

arch/microblaze/include/asm/pci.h

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,6 @@ struct pci_dev;
4444
*/
4545
#define pcibios_assign_all_busses() 0
4646

47-
#ifdef CONFIG_PCI
48-
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
49-
enum pci_dma_burst_strategy *strat,
50-
unsigned long *strategy_parameter)
51-
{
52-
*strat = PCI_DMA_BURST_INFINITY;
53-
*strategy_parameter = ~0UL;
54-
}
55-
#endif
56-
5747
extern int pci_domain_nr(struct pci_bus *bus);
5848

5949
/* Decide whether to display the domain number in /proc */
@@ -83,19 +73,6 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus,
8373
*/
8474
#define PCI_DMA_BUS_IS_PHYS (1)
8575

86-
static inline struct resource *pcibios_select_root(struct pci_dev *pdev,
87-
struct resource *res)
88-
{
89-
struct resource *root = NULL;
90-
91-
if (res->flags & IORESOURCE_IO)
92-
root = &ioport_resource;
93-
if (res->flags & IORESOURCE_MEM)
94-
root = &iomem_resource;
95-
96-
return root;
97-
}
98-
9976
extern void pcibios_claim_one_bus(struct pci_bus *b);
10077

10178
extern void pcibios_finish_adding_to_bus(struct pci_bus *bus);

arch/mips/include/asm/pci.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,6 @@ struct pci_dev;
113113
*/
114114
extern unsigned int PCI_DMA_BUS_IS_PHYS;
115115

116-
#ifdef CONFIG_PCI
117-
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
118-
enum pci_dma_burst_strategy *strat,
119-
unsigned long *strategy_parameter)
120-
{
121-
*strat = PCI_DMA_BURST_INFINITY;
122-
*strategy_parameter = ~0UL;
123-
}
124-
#endif
125-
126116
#ifdef CONFIG_PCI_DOMAINS
127117
#define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index
128118

arch/mips/pci/fixup-cobalt.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include <linux/kernel.h>
1414
#include <linux/init.h>
1515

16-
#include <asm/pci.h>
1716
#include <asm/io.h>
1817
#include <asm/gt64120.h>
1918

arch/mips/pci/ops-mace.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <linux/kernel.h>
99
#include <linux/pci.h>
1010
#include <linux/types.h>
11-
#include <asm/pci.h>
1211
#include <asm/ip32/mace.h>
1312

1413
#if 0

arch/mips/pci/pci-lantiq.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include <linux/of_irq.h>
2121
#include <linux/of_pci.h>
2222

23-
#include <asm/pci.h>
2423
#include <asm/gpio.h>
2524
#include <asm/addrspace.h>
2625

arch/mn10300/include/asm/pci.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,6 @@ extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
8383
/* implement the pci_ DMA API in terms of the generic device dma_ one */
8484
#include <asm-generic/pci-dma-compat.h>
8585

86-
static inline struct resource *
87-
pcibios_select_root(struct pci_dev *pdev, struct resource *res)
88-
{
89-
struct resource *root = NULL;
90-
91-
if (res->flags & IORESOURCE_IO)
92-
root = &ioport_resource;
93-
if (res->flags & IORESOURCE_MEM)
94-
root = &iomem_resource;
95-
96-
return root;
97-
}
98-
9986
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
10087
{
10188
return channel ? 15 : 14;

0 commit comments

Comments
 (0)