Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 146658
b: refs/heads/master
c: 99f95f1
h: refs/heads/master
v: v3
  • Loading branch information
Paul Mundt committed Apr 20, 2009
1 parent f8d721b commit b2277e5
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 26 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: 0bb34a6bf1f71d5ad2abfda582a2c2794957bc7b
refs/heads/master: 99f95f117848088f2708b45c70be73152e78bb8a
29 changes: 11 additions & 18 deletions trunk/arch/sh/include/asm/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
#endif

#ifdef CONFIG_PCI
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
enum pci_dma_burst_strategy *strat,
unsigned long *strategy_parameter)
Expand All @@ -99,24 +98,18 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,
*strategy_parameter = ~0UL;
}

static inline int __is_pci_memory(unsigned long phys_addr, unsigned long size)
{
struct pci_channel *p;
struct resource *res;

for (p = board_pci_channels; p->init; p++) {
res = p->mem_resource;
if (p->enabled && (phys_addr >= res->start) &&
(phys_addr + size) <= (res->end + 1))
return 1;
}
return 0;
}
#ifdef CONFIG_SUPERH32
/*
* If we're on an SH7751 or SH7780 PCI controller, PCI memory is mapped
* at the end of the address space in a special non-translatable area.
*/
#define PCI_MEM_FIXED_START 0xfd000000
#define PCI_MEM_FIXED_END (PCI_MEM_FIXED_START + 0x01000000)

#define is_pci_memory_fixed_range(s, e) \
((s) >= PCI_MEM_FIXED_START && (e) < PCI_MEM_FIXED_END)
#else
static inline int __is_pci_memory(unsigned long phys_addr, unsigned long size)
{
return 0;
}
#define is_pci_memory_fixed_range(s, e) (0)
#endif

/* Board-specific fixup routines. */
Expand Down
14 changes: 7 additions & 7 deletions trunk/arch/sh/mm/ioremap_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,15 @@ void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
return NULL;

/*
* If we're on an SH7751 or SH7780 PCI controller, PCI memory is
* mapped at the end of the address space (typically 0xfd000000)
* in a non-translatable area, so mapping through page tables for
* this area is not only pointless, but also fundamentally
* broken. Just return the physical address instead.
* If we're in the fixed PCI memory range, mapping through page
* tables is not only pointless, but also fundamentally broken.
* Just return the physical address instead.
*
* For boards that map a small PCI memory aperture somewhere in
* P1/P2 space, ioremap() will already do the right thing,
* and we'll never get this far.
*/
if (__is_pci_memory(phys_addr, size))
if (is_pci_memory_fixed_range(phys_addr, size))
return (void __iomem *)phys_addr;

#if !defined(CONFIG_PMB_FIXED)
Expand Down Expand Up @@ -121,7 +119,9 @@ void __iounmap(void __iomem *addr)
unsigned long seg = PXSEG(vaddr);
struct vm_struct *p;

if (seg < P3SEG || vaddr >= P3_ADDR_MAX || __is_pci_memory(vaddr, 0))
if (seg < P3SEG || vaddr >= P3_ADDR_MAX)
return;
if (is_pci_memory_fixed_range(vaddr, 0))
return;

#ifdef CONFIG_PMB
Expand Down

0 comments on commit b2277e5

Please sign in to comment.