mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'sh/iomap'
This commit is contained in:
commit
019e2574f9
15 changed files with 99 additions and 75 deletions
|
|
@ -9,7 +9,7 @@ config SUPERH
|
|||
def_bool y
|
||||
select EMBEDDED
|
||||
select HAVE_CLK
|
||||
select HAVE_IDE
|
||||
select HAVE_IDE if HAS_IOPORT
|
||||
select HAVE_LMB
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_GENERIC_DMA_COHERENT
|
||||
|
|
@ -174,6 +174,9 @@ config ARCH_HAS_DEFAULT_IDLE
|
|||
config ARCH_HAS_CPU_IDLE_WAIT
|
||||
def_bool y
|
||||
|
||||
config NO_IOPORT
|
||||
bool
|
||||
|
||||
config IO_TRAPPED
|
||||
bool
|
||||
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ config SH_SDK7786
|
|||
bool "SDK7786"
|
||||
depends on CPU_SUBTYPE_SH7786
|
||||
select SYS_SUPPORTS_PCI
|
||||
select NO_IOPORT if !PCI
|
||||
help
|
||||
Select SDK7786 if configuring for a Renesas Technology Europe
|
||||
SH7786-65nm board.
|
||||
|
|
@ -190,6 +191,7 @@ config SH_URQUELL
|
|||
depends on CPU_SUBTYPE_SH7786
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select SYS_SUPPORTS_PCI
|
||||
select NO_IOPORT if !PCI
|
||||
|
||||
config SH_MIGOR
|
||||
bool "Migo-R"
|
||||
|
|
@ -286,6 +288,7 @@ config SH_LBOX_RE2
|
|||
config SH_X3PROTO
|
||||
bool "SH-X3 Prototype board"
|
||||
depends on CPU_SUBTYPE_SHX3
|
||||
select NO_IOPORT if !PCI
|
||||
|
||||
config SH_MAGIC_PANEL_R2
|
||||
bool "Magic Panel R2"
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@
|
|||
#include <asm/io_generic.h>
|
||||
#include <asm/io_trapped.h>
|
||||
|
||||
#ifdef CONFIG_HAS_IOPORT
|
||||
|
||||
#define inb(p) sh_mv.mv_inb((p))
|
||||
#define inw(p) sh_mv.mv_inw((p))
|
||||
#define inl(p) sh_mv.mv_inl((p))
|
||||
|
|
@ -60,6 +62,8 @@
|
|||
#define outsw(p,b,c) sh_mv.mv_outsw((p), (b), (c))
|
||||
#define outsl(p,b,c) sh_mv.mv_outsl((p), (b), (c))
|
||||
|
||||
#endif
|
||||
|
||||
#define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile u8 __force *)(a) = (v))
|
||||
#define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile u16 __force *)(a) = (v))
|
||||
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile u32 __force *)(a) = (v))
|
||||
|
|
@ -240,6 +244,8 @@ __BUILD_MEMORY_STRING(q, u64)
|
|||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
|
||||
#ifdef CONFIG_HAS_IOPORT
|
||||
|
||||
/*
|
||||
* This function provides a method for the generic case where a
|
||||
* board-specific ioport_map simply needs to return the port + some
|
||||
|
|
@ -255,6 +261,8 @@ static inline void __set_io_port_base(unsigned long pbase)
|
|||
|
||||
#define __ioport_map(p, n) sh_mv.mv_ioport_map((p), (n))
|
||||
|
||||
#endif
|
||||
|
||||
/* We really want to try and get these to memcpy etc */
|
||||
void memcpy_fromio(void *, const volatile void __iomem *, unsigned long);
|
||||
void memcpy_toio(volatile void __iomem *, const void *, unsigned long);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ struct sh_machine_vector {
|
|||
const char *mv_name;
|
||||
int mv_nr_irqs;
|
||||
|
||||
int (*mv_irq_demux)(int irq);
|
||||
void (*mv_init_irq)(void);
|
||||
|
||||
#ifdef CONFIG_HAS_IOPORT
|
||||
u8 (*mv_inb)(unsigned long);
|
||||
u16 (*mv_inw)(unsigned long);
|
||||
u32 (*mv_inl)(unsigned long);
|
||||
|
|
@ -40,12 +44,9 @@ struct sh_machine_vector {
|
|||
void (*mv_outsw)(unsigned long, const void *src, unsigned long count);
|
||||
void (*mv_outsl)(unsigned long, const void *src, unsigned long count);
|
||||
|
||||
int (*mv_irq_demux)(int irq);
|
||||
|
||||
void (*mv_init_irq)(void);
|
||||
|
||||
void __iomem *(*mv_ioport_map)(unsigned long port, unsigned int size);
|
||||
void (*mv_ioport_unmap)(void __iomem *);
|
||||
#endif
|
||||
|
||||
int (*mv_clk_init)(void);
|
||||
int (*mv_mode_pins)(void);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ endif
|
|||
CFLAGS_REMOVE_return_address.o = -pg
|
||||
|
||||
obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \
|
||||
idle.o io.o io_generic.o irq.o \
|
||||
idle.o io.o irq.o \
|
||||
irq_$(BITS).o machvec.o nmi_debug.o process.o \
|
||||
process_$(BITS).o ptrace_$(BITS).o \
|
||||
reboot.o return_address.o \
|
||||
|
|
@ -39,6 +39,7 @@ obj-$(CONFIG_DUMP_CODE) += disassemble.o
|
|||
obj-$(CONFIG_HIBERNATION) += swsusp.o
|
||||
obj-$(CONFIG_DWARF_UNWINDER) += dwarf.o
|
||||
obj-$(CONFIG_PERF_EVENTS) += perf_event.o perf_callchain.o
|
||||
obj-$(CONFIG_HAS_IOPORT) += io_generic.o
|
||||
|
||||
obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
|
||||
obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += localtimer.o
|
||||
|
|
|
|||
|
|
@ -112,25 +112,3 @@ void memset_io(volatile void __iomem *dst, int c, unsigned long count)
|
|||
}
|
||||
}
|
||||
EXPORT_SYMBOL(memset_io);
|
||||
|
||||
#ifndef CONFIG_GENERIC_IOMAP
|
||||
|
||||
void __iomem *ioport_map(unsigned long port, unsigned int nr)
|
||||
{
|
||||
void __iomem *ret;
|
||||
|
||||
ret = __ioport_map_trapped(port, nr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return __ioport_map(port, nr);
|
||||
}
|
||||
EXPORT_SYMBOL(ioport_map);
|
||||
|
||||
void ioport_unmap(void __iomem *addr)
|
||||
{
|
||||
sh_mv.mv_ioport_unmap(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(ioport_unmap);
|
||||
|
||||
#endif /* CONFIG_GENERIC_IOMAP */
|
||||
|
|
|
|||
|
|
@ -158,3 +158,23 @@ void __iomem *generic_ioport_map(unsigned long addr, unsigned int size)
|
|||
void generic_ioport_unmap(void __iomem *addr)
|
||||
{
|
||||
}
|
||||
|
||||
#ifndef CONFIG_GENERIC_IOMAP
|
||||
void __iomem *ioport_map(unsigned long port, unsigned int nr)
|
||||
{
|
||||
void __iomem *ret;
|
||||
|
||||
ret = __ioport_map_trapped(port, nr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return __ioport_map(port, nr);
|
||||
}
|
||||
EXPORT_SYMBOL(ioport_map);
|
||||
|
||||
void ioport_unmap(void __iomem *addr)
|
||||
{
|
||||
sh_mv.mv_ioport_unmap(addr);
|
||||
}
|
||||
EXPORT_SYMBOL(ioport_unmap);
|
||||
#endif /* CONFIG_GENERIC_IOMAP */
|
||||
|
|
|
|||
|
|
@ -91,10 +91,14 @@ int register_trapped_io(struct trapped_io *tiop)
|
|||
tiop->magic = IO_TRAPPED_MAGIC;
|
||||
INIT_LIST_HEAD(&tiop->list);
|
||||
spin_lock_irq(&trapped_lock);
|
||||
#ifdef CONFIG_HAS_IOPORT
|
||||
if (flags & IORESOURCE_IO)
|
||||
list_add(&tiop->list, &trapped_io);
|
||||
#endif
|
||||
#ifdef CONFIG_HAS_IOMEM
|
||||
if (flags & IORESOURCE_MEM)
|
||||
list_add(&tiop->list, &trapped_mem);
|
||||
#endif
|
||||
spin_unlock_irq(&trapped_lock);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -118,6 +118,14 @@ void __init sh_mv_setup(void)
|
|||
sh_mv.mv_##elem = generic_##elem; \
|
||||
} while (0)
|
||||
|
||||
#ifdef CONFIG_HAS_IOPORT
|
||||
|
||||
#ifdef P2SEG
|
||||
__set_io_port_base(P2SEG);
|
||||
#else
|
||||
__set_io_port_base(0);
|
||||
#endif
|
||||
|
||||
mv_set(inb); mv_set(inw); mv_set(inl);
|
||||
mv_set(outb); mv_set(outw); mv_set(outl);
|
||||
|
||||
|
|
@ -129,16 +137,13 @@ void __init sh_mv_setup(void)
|
|||
|
||||
mv_set(ioport_map);
|
||||
mv_set(ioport_unmap);
|
||||
|
||||
#endif
|
||||
|
||||
mv_set(irq_demux);
|
||||
mv_set(mode_pins);
|
||||
mv_set(mem_init);
|
||||
|
||||
if (!sh_mv.mv_nr_irqs)
|
||||
sh_mv.mv_nr_irqs = NR_IRQS;
|
||||
|
||||
#ifdef P2SEG
|
||||
__set_io_port_base(P2SEG);
|
||||
#else
|
||||
__set_io_port_base(0);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue