Commit 7258ea8a authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh64-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh64-2.6:
  sh64: Add a sane pm_power_off implementation.
  sh64: Use generic BUG_ON()/WARN_ON().
  sh64: Trivial build fixes.
  sh64: Drop deprecated ISA tuning for legacy toolchains.
parents af84b99f 1bb99a64
...@@ -26,7 +26,6 @@ LDFLAGS += -EB -mshelf32_linux ...@@ -26,7 +26,6 @@ LDFLAGS += -EB -mshelf32_linux
endif endif
# No requirements for endianess support from AFLAGS, 'as' always run through gcc # No requirements for endianess support from AFLAGS, 'as' always run through gcc
AFLAGS += -m5 -isa=sh64 -traditional
CFLAGS += $(cpu-y) CFLAGS += $(cpu-y)
LDFLAGS_vmlinux += --defsym phys_stext=_stext-$(CONFIG_CACHED_MEMORY_OFFSET) \ LDFLAGS_vmlinux += --defsym phys_stext=_stext-$(CONFIG_CACHED_MEMORY_OFFSET) \
......
...@@ -355,6 +355,9 @@ void machine_power_off(void) ...@@ -355,6 +355,9 @@ void machine_power_off(void)
enter_deep_standby(); enter_deep_standby();
} }
void (*pm_power_off)(void) = machine_power_off;
EXPORT_SYMBOL(pm_power_off);
void show_regs(struct pt_regs * regs) void show_regs(struct pt_regs * regs)
{ {
unsigned long long ah, al, bh, bl, ch, cl; unsigned long long ah, al, bh, bl, ch, cl;
......
...@@ -112,8 +112,10 @@ struct resource io_resources[] = { ...@@ -112,8 +112,10 @@ struct resource io_resources[] = {
}; };
struct resource kram_resources[] = { struct resource kram_resources[] = {
{ "Kernel code", 0, 0 }, /* These must be last in the array */ /* These must be last in the array */
{ "Kernel data", 0, 0 } /* These must be last in the array */ { .name = "Kernel code", .start = 0, .end = 0 },
/* These must be last in the array */
{ .name = "Kernel data", .start = 0, .end = 0 }
}; };
struct resource xram_resources[] = { struct resource xram_resources[] = {
......
...@@ -449,7 +449,9 @@ ioremap_proc_info(char *buf, char **start, off_t fpos, int length, int *eof, ...@@ -449,7 +449,9 @@ ioremap_proc_info(char *buf, char **start, off_t fpos, int length, int *eof,
if (p + 32 >= e) /* Better than nothing */ if (p + 32 >= e) /* Better than nothing */
break; break;
if ((nm = r->name) == 0) nm = "???"; if ((nm = r->name) == 0) nm = "???";
p += sprintf(p, "%08lx-%08lx: %s\n", r->start, r->end, nm); p += sprintf(p, "%08lx-%08lx: %s\n",
(unsigned long)r->start,
(unsigned long)r->end, nm);
} }
return p-buf; return p-buf;
......
...@@ -1579,7 +1579,7 @@ static int __init serial_console_setup(struct console *co, char *options) ...@@ -1579,7 +1579,7 @@ static int __init serial_console_setup(struct console *co, char *options)
h8300_sci_enable(port, sci_enable); h8300_sci_enable(port, sci_enable);
#endif #endif
#elif defined(CONFIG_SUPERH64) #elif defined(CONFIG_SUPERH64)
port->uartclk = current_cpu_info.module_clock * 16; port->uartclk = current_cpu_data.module_clock * 16;
#else #else
{ {
struct clk *clk = clk_get("module_clk"); struct clk *clk = clk_get("module_clk");
...@@ -1720,7 +1720,7 @@ static int __init sci_init(void) ...@@ -1720,7 +1720,7 @@ static int __init sci_init(void)
#if defined(__H8300H__) || defined(__H8300S__) #if defined(__H8300H__) || defined(__H8300S__)
sciport->port.uartclk = CONFIG_CPU_CLOCK; sciport->port.uartclk = CONFIG_CPU_CLOCK;
#elif defined(CONFIG_SUPERH64) #elif defined(CONFIG_SUPERH64)
sciport->port.uartclk = current_cpu_info.module_clock * 16; sciport->port.uartclk = current_cpu_data.module_clock * 16;
#else #else
struct clk *clk = clk_get("module_clk"); struct clk *clk = clk_get("module_clk");
sciport->port.uartclk = clk_get_rate(clk) * 16; sciport->port.uartclk = clk_get_rate(clk) * 16;
......
#ifndef __ASM_SH64_BUG_H #ifndef __ASM_SH64_BUG_H
#define __ASM_SH64_BUG_H #define __ASM_SH64_BUG_H
#ifdef CONFIG_BUG
/* /*
* Tell the user there is some problem, then force a segfault (in process * Tell the user there is some problem, then force a segfault (in process
* context) or a panic (interrupt context). * context) or a panic (interrupt context).
...@@ -11,17 +11,9 @@ ...@@ -11,17 +11,9 @@
*(volatile int *)0 = 0; \ *(volatile int *)0 = 0; \
} while (0) } while (0)
#define BUG_ON(condition) do { \ #define HAVE_ARCH_BUG
if (unlikely((condition)!=0)) \ #endif
BUG(); \
} while(0)
#define WARN_ON(condition) do { \ #include <asm-generic/bug.h>
if (unlikely((condition)!=0)) { \
printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
dump_stack(); \
} \
} while (0)
#endif /* __ASM_SH64_BUG_H */ #endif /* __ASM_SH64_BUG_H */
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include <asm/types.h> #include <asm/types.h>
static __inline__ __const__ __u32 ___arch__swab32(__u32 x) static inline __attribute_const__ __u32 ___arch__swab32(__u32 x)
{ {
__asm__("byterev %0, %0\n\t" __asm__("byterev %0, %0\n\t"
"shari %0, 32, %0" "shari %0, 32, %0"
...@@ -23,7 +23,7 @@ static __inline__ __const__ __u32 ___arch__swab32(__u32 x) ...@@ -23,7 +23,7 @@ static __inline__ __const__ __u32 ___arch__swab32(__u32 x)
return x; return x;
} }
static __inline__ __const__ __u16 ___arch__swab16(__u16 x) static inline __attribute_const__ __u16 ___arch__swab16(__u16 x)
{ {
__asm__("byterev %0, %0\n\t" __asm__("byterev %0, %0\n\t"
"shari %0, 48, %0" "shari %0, 48, %0"
......
...@@ -126,22 +126,30 @@ static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg, ...@@ -126,22 +126,30 @@ static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg,
static inline void dma_sync_single_for_cpu(struct device *dev, static inline void dma_sync_single_for_cpu(struct device *dev,
dma_addr_t dma_handle, size_t size, dma_addr_t dma_handle, size_t size,
enum dma_data_direction dir) enum dma_data_direction dir)
__attribute__ ((alias("dma_sync_single"))); {
dma_sync_single(dev, dma_handle, size, dir);
}
static inline void dma_sync_single_for_device(struct device *dev, static inline void dma_sync_single_for_device(struct device *dev,
dma_addr_t dma_handle, size_t size, dma_addr_t dma_handle, size_t size,
enum dma_data_direction dir) enum dma_data_direction dir)
__attribute__ ((alias("dma_sync_single"))); {
dma_sync_single(dev, dma_handle, size, dir);
}
static inline void dma_sync_sg_for_cpu(struct device *dev, static inline void dma_sync_sg_for_cpu(struct device *dev,
struct scatterlist *sg, int nelems, struct scatterlist *sg, int nelems,
enum dma_data_direction dir) enum dma_data_direction dir)
__attribute__ ((alias("dma_sync_sg"))); {
dma_sync_sg(dev, sg, nelems, dir);
}
static inline void dma_sync_sg_for_device(struct device *dev, static inline void dma_sync_sg_for_device(struct device *dev,
struct scatterlist *sg, int nelems, struct scatterlist *sg, int nelems,
enum dma_data_direction dir) enum dma_data_direction dir)
__attribute__ ((alias("dma_sync_sg"))); {
dma_sync_sg(dev, sg, nelems, dir);
}
static inline int dma_get_cache_alignment(void) static inline int dma_get_cache_alignment(void)
{ {
......
...@@ -123,6 +123,13 @@ void insw(unsigned long port, void *addr, unsigned long count); ...@@ -123,6 +123,13 @@ void insw(unsigned long port, void *addr, unsigned long count);
void outsl(unsigned long port, const void *addr, unsigned long count); void outsl(unsigned long port, const void *addr, unsigned long count);
void insl(unsigned long port, void *addr, unsigned long count); void insl(unsigned long port, void *addr, unsigned long count);
#define __raw_readb readb
#define __raw_readw readw
#define __raw_readl readl
#define __raw_writeb writeb
#define __raw_writew writew
#define __raw_writel writel
void memcpy_toio(void __iomem *to, const void *from, long count); void memcpy_toio(void __iomem *to, const void *from, long count);
void memcpy_fromio(void *to, void __iomem *from, long count); void memcpy_fromio(void *to, void __iomem *from, long count);
......
...@@ -28,7 +28,7 @@ struct pt_regs { ...@@ -28,7 +28,7 @@ struct pt_regs {
#ifdef __KERNEL__ #ifdef __KERNEL__
#define user_mode(regs) (((regs)->sr & 0x40000000)==0) #define user_mode(regs) (((regs)->sr & 0x40000000)==0)
#define instruction_pointer(regs) ((regs)->pc) #define instruction_pointer(regs) ((regs)->pc)
#define profile_pc(regs) instruction_pointer(regs) #define profile_pc(regs) ((unsigned long)instruction_pointer(regs))
extern void show_regs(struct pt_regs *); extern void show_regs(struct pt_regs *);
#endif #endif
......
...@@ -64,7 +64,7 @@ extern void __xchg_called_with_bad_pointer(void); ...@@ -64,7 +64,7 @@ extern void __xchg_called_with_bad_pointer(void);
#define smp_read_barrier_depends() do { } while (0) #define smp_read_barrier_depends() do { } while (0)
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#define set_rmb(var, value) do { xchg(&var, value); } while (0) #define set_rmb(var, value) do { (void)xchg(&var, value); } while (0)
#define set_mb(var, value) set_rmb(var, value) #define set_mb(var, value) set_rmb(var, value)
/* Interrupt Control */ /* Interrupt Control */
......
...@@ -128,25 +128,20 @@ do { \ ...@@ -128,25 +128,20 @@ do { \
#define __get_user_nocheck(x,ptr,size) \ #define __get_user_nocheck(x,ptr,size) \
({ \ ({ \
long __gu_addr = (long)(ptr); \ long __gu_err, __gu_val; \
long __gu_err; \ __get_user_size((void *)&__gu_val, (long)(ptr), \
__typeof(*(ptr)) __gu_val; \ (size), __gu_err); \
__asm__ ("":"=r" (__gu_val)); \ (x) = (__typeof__(*(ptr)))__gu_val; \
__asm__ ("":"=r" (__gu_err)); \
__get_user_size((void *)&__gu_val, __gu_addr, (size), __gu_err); \
(x) = (__typeof__(*(ptr))) __gu_val; \
__gu_err; \ __gu_err; \
}) })
#define __get_user_check(x,ptr,size) \ #define __get_user_check(x,ptr,size) \
({ \ ({ \
long __gu_addr = (long)(ptr); \ long __gu_addr = (long)(ptr); \
long __gu_err = -EFAULT; \ long __gu_err = -EFAULT, __gu_val; \
__typeof(*(ptr)) __gu_val; \
__asm__ ("":"=r" (__gu_val)); \
__asm__ ("":"=r" (__gu_err)); \
if (__access_ok(__gu_addr, (size))) \ if (__access_ok(__gu_addr, (size))) \
__get_user_size((void *)&__gu_val, __gu_addr, (size), __gu_err); \ __get_user_size((void *)&__gu_val, __gu_addr, \
(size), __gu_err); \
(x) = (__typeof__(*(ptr))) __gu_val; \ (x) = (__typeof__(*(ptr))) __gu_val; \
__gu_err; \ __gu_err; \
}) })
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment