forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce support for PCI drivers using only functionality provided generically by the PCI subsystem, by adding the minimum arch-provided functions required. The driver this has been developed for & tested with the xilinx-pcie on a MIPS Boston development board. Signed-off-by: Paul Burton <[email protected]> Cc: [email protected] Patchwork: https://patchwork.linux-mips.org/patch/14346/ Signed-off-by: Ralf Baechle <[email protected]>
- Loading branch information
1 parent
c5611df
commit 87dd9a4
Showing
3 changed files
with
54 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* | ||
* Copyright (C) 2016 Imagination Technologies | ||
* Author: Paul Burton <[email protected]> | ||
* | ||
* pcibios_align_resource taken from arch/arm/kernel/bios32.c. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2 of the License, or (at your | ||
* option) any later version. | ||
*/ | ||
|
||
#include <linux/pci.h> | ||
|
||
/* | ||
* We need to avoid collisions with `mirrored' VGA ports | ||
* and other strange ISA hardware, so we always want the | ||
* addresses to be allocated in the 0x000-0x0ff region | ||
* modulo 0x400. | ||
* | ||
* Why? Because some silly external IO cards only decode | ||
* the low 10 bits of the IO address. The 0x00-0xff region | ||
* is reserved for motherboard devices that decode all 16 | ||
* bits, so it's ok to allocate at, say, 0x2800-0x28ff, | ||
* but we want to try to avoid allocating at 0x2900-0x2bff | ||
* which might have be mirrored at 0x0100-0x03ff.. | ||
*/ | ||
resource_size_t pcibios_align_resource(void *data, const struct resource *res, | ||
resource_size_t size, resource_size_t align) | ||
{ | ||
struct pci_dev *dev = data; | ||
resource_size_t start = res->start; | ||
struct pci_host_bridge *host_bridge; | ||
|
||
if (res->flags & IORESOURCE_IO && start & 0x300) | ||
start = (start + 0x3ff) & ~0x3ff; | ||
|
||
start = (start + align - 1) & ~(align - 1); | ||
|
||
host_bridge = pci_find_host_bridge(dev->bus); | ||
|
||
if (host_bridge->align_resource) | ||
return host_bridge->align_resource(dev, res, | ||
start, size, align); | ||
|
||
return start; | ||
} | ||
|
||
void pcibios_fixup_bus(struct pci_bus *bus) | ||
{ | ||
pci_read_bridge_bases(bus); | ||
} |