Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 146655
b: refs/heads/master
c: a3c0e0d
h: refs/heads/master
i:
  146653: b69e9b0
  146651: a5d056a
  146647: 9c0661e
  146639: 4659d4a
  146623: de07098
v: v3
  • Loading branch information
Paul Mundt committed Apr 20, 2009
1 parent daf631e commit d502694
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 54 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9833385131fc4e8c52f95320ab899051d1c06831
refs/heads/master: a3c0e0d0032d5bbfd7dc04827a257c717d432a5b
9 changes: 6 additions & 3 deletions trunk/arch/sh/boards/mach-se/7751/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
#define PCIC_WRITE(x,v) writel((v), PCI_REG(x))
#define PCIC_READ(x) readl(PCI_REG(x))

#define xPCIBIOS_MIN_IO board_pci_channels->io_resource->start
#define xPCIBIOS_MIN_MEM board_pci_channels->mem_resource->start

/*
* Description: This function sets up and initializes the pcic, sets
* up the BARS, maps the DRAM into the address space etc, etc.
Expand Down Expand Up @@ -97,12 +100,12 @@ int __init pcibios_init_platform(void)
* meaning all calls go straight through... use BUG_ON to
* catch erroneous assumption.
*/
BUG_ON(PCIBIOS_MIN_MEM != SH7751_PCI_MEMORY_BASE);
BUG_ON(xPCIBIOS_MIN_MEM != SH7751_PCI_MEMORY_BASE);

PCIC_WRITE(SH7751_PCIMBR, PCIBIOS_MIN_MEM);
PCIC_WRITE(SH7751_PCIMBR, xPCIBIOS_MIN_MEM);

/* Set IOBR for window containing area specified in pci.h */
PCIC_WRITE(SH7751_PCIIOBR, (PCIBIOS_MIN_IO & SH7751_PCIIOBR_MASK));
PCIC_WRITE(SH7751_PCIIOBR, (xPCIBIOS_MIN_IO & SH7751_PCIIOBR_MASK));

/* All done, may as well say so... */
printk("SH7751 PCI: Finished initialization of the PCI controller\n");
Expand Down
42 changes: 42 additions & 0 deletions trunk/arch/sh/drivers/pci/pci-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,41 @@
#include <linux/types.h>
#include <linux/pci.h>

unsigned long PCIBIOS_MIN_IO = 0x0000;
unsigned long PCIBIOS_MIN_MEM = 0;

/*
* 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.
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
struct pci_dev *dev = data;
struct pci_channel *chan = dev->sysdata;
resource_size_t start = res->start;

if (res->flags & IORESOURCE_IO) {
if (start < PCIBIOS_MIN_IO + chan->io_resource->start)
start = PCIBIOS_MIN_IO + chan->io_resource->start;

/*
* Put everything into 0x00-0xff region modulo 0x400.
*/
if (start & 0x300) {
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
} else if (res->flags & IORESOURCE_MEM) {
if (start < PCIBIOS_MIN_MEM + chan->mem_resource->start)
start = PCIBIOS_MIN_MEM + chan->mem_resource->start;
}

res->start = start;
}

int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state, int write_combine)
{
Expand All @@ -24,3 +59,10 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
vma->vm_end - vma->vm_start,
vma->vm_page_prot);
}

#ifdef CONFIG_HOTPLUG
EXPORT_SYMBOL(pcibios_resource_to_bus);
EXPORT_SYMBOL(pcibios_bus_to_resource);
EXPORT_SYMBOL(PCIBIOS_MIN_IO);
EXPORT_SYMBOL(PCIBIOS_MIN_MEM);
#endif
23 changes: 0 additions & 23 deletions trunk/arch/sh/drivers/pci/pci-new.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,29 +129,6 @@ pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
res->end = region->end + offset;
}

void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
__attribute__ ((weak));

/*
* 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.
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;

if (start & 0x300) {
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}
}

int pcibios_enable_device(struct pci_dev *dev, int mask)
{
u16 cmd, old_cmd;
Expand Down
23 changes: 0 additions & 23 deletions trunk/arch/sh/drivers/pci/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,29 +86,6 @@ void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
res->end = region->end;
}

void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
__attribute__ ((weak));

/*
* 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.
*/
void pcibios_align_resource(void *data, struct resource *res,
resource_size_t size, resource_size_t align)
{
if (res->flags & IORESOURCE_IO) {
resource_size_t start = res->start;

if (start & 0x300) {
start = (start + 0x3ff) & ~0x3ff;
res->start = start;
}
}
}

int pcibios_enable_device(struct pci_dev *dev, int mask)
{
u16 cmd, old_cmd;
Expand Down
5 changes: 1 addition & 4 deletions trunk/arch/sh/include/asm/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,7 @@ struct pci_channel {
*/
extern struct pci_channel board_pci_channels[];

/* ugly as hell, but makes drivers/pci/setup-res.c compile and work */
#define __PCI_CHAN(bus) ((struct pci_channel *)bus->sysdata)
#define PCIBIOS_MIN_IO __PCI_CHAN(bus)->io_resource->start
#define PCIBIOS_MIN_MEM __PCI_CHAN(bus)->mem_resource->start
extern unsigned long PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM;

struct pci_dev;

Expand Down

0 comments on commit d502694

Please sign in to comment.