Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 200103
b: refs/heads/master
c: 86e4dd5
h: refs/heads/master
i:
  200101: d628766
  200099: 47f6e9e
  200095: d78a65a
v: v3
  • Loading branch information
Paul Mundt committed Jun 2, 2010
1 parent 568bcbc commit 35dd17c
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 35 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: 1c98347e613bf17ea2f18c9766ce0ab77f65a96d
refs/heads/master: 86e4dd5add77ab809f5427391dfabb8f78cbcb58
5 changes: 4 additions & 1 deletion trunk/arch/sh/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
8 changes: 8 additions & 0 deletions trunk/arch/sh/include/asm/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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))
Expand Down Expand Up @@ -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
Expand All @@ -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);
Expand Down
9 changes: 5 additions & 4 deletions trunk/arch/sh/include/asm/machvec.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/sh/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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
Expand Down
22 changes: 0 additions & 22 deletions trunk/arch/sh/kernel/io.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
20 changes: 20 additions & 0 deletions trunk/arch/sh/kernel/io_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
4 changes: 4 additions & 0 deletions trunk/arch/sh/kernel/io_trapped.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
17 changes: 11 additions & 6 deletions trunk/arch/sh/kernel/machvec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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
}

0 comments on commit 35dd17c

Please sign in to comment.