diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 16:11:46 +0900 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 16:11:46 +0900 |
commit | 1ea4f4f8405cc1ceec23f2d261bc3775785e6712 (patch) | |
tree | a43ced12b9acf357623088d479fa69f3f00d2997 /arch/xtensa/platforms | |
parent | dea77ccdc93448d81e495a57bc1c1e97be4fdfe8 (diff) | |
parent | 70cefe765433529fc894fd1995a1d5883cb33e05 (diff) |
Merge tag 'xtensa-next-20121008' of git://github.com/czankel/xtensa-linux
Pull Xtensa patchset from Chris Zankel:
"The Xtensa tree has been broken for some time now, and this patchset
brings it back to life. It has been part of the linux-next tree for
some time.
Most changes are inside the xtensa subdirectory; the other changes
mostly add another rule to already existing #ifdefs to exclude Xtensa,
where required. The only 'common' change is to add two more sections
('.xt.prop' and '.xt.lit') to the white list in modpost."
* tag 'xtensa-next-20121008' of git://github.com/czankel/xtensa-linux: (27 commits)
xtensa: Setup CROSS_COMPILE at the top
xtensa: drop CONFIG_EMBEDDED_RAMDISK
xtensa: fix TIOCGSERIAL and TIOCSSERIAL definitions
xtensa: provide dummy gcc intrinsics
xtensa: add missing symbol exports
parport: disable for xtensa arch
xtensa: rename MISC SR definition to avoid name clashes
hisax: disable build for big-endian xtensa
xtensa: fix CODA build
xtensa: fix parallel make
xtensa: ISS: drop unused io.c
xtensa: ISS: exit simulator in case of halt or poweroff
xtensa: ISS: change keyboard polling rate
xtensa: ISS: add platform_pcibios_init
xtensa: ISS: add dummy serial.h for ISS platform
xtensa: change default platform clock frequency to 10MHz
xtensa: add ARCH_WANT_OPTIONAL_GPIOLIB to xtensa config
xtensa: set NO_IOPORT to 'n' by default
xtensa: adopt generic io routines
xtensa: fix ioremap
...
Diffstat (limited to 'arch/xtensa/platforms')
-rw-r--r-- | arch/xtensa/platforms/iss/Makefile | 4 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/console.c | 15 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/include/platform/serial.h | 0 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/include/platform/simcall.h | 53 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/io.c | 32 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/network.c | 49 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/setup.c | 14 |
7 files changed, 66 insertions, 101 deletions
diff --git a/arch/xtensa/platforms/iss/Makefile b/arch/xtensa/platforms/iss/Makefile index af96e314d71f..b7d1a5c0ff7f 100644 --- a/arch/xtensa/platforms/iss/Makefile +++ b/arch/xtensa/platforms/iss/Makefile @@ -4,5 +4,5 @@ # "prom monitor" library routines under Linux. # -obj-y = io.o console.o setup.o network.o - +obj-y = console.o setup.o +obj-$(CONFIG_NET) += network.o diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index 2cd3d3a3400b..8ab47edd7c82 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c @@ -33,7 +33,7 @@ #endif #define SERIAL_MAX_NUM_LINES 1 -#define SERIAL_TIMER_VALUE (20 * HZ) +#define SERIAL_TIMER_VALUE (HZ / 10) static struct tty_driver *serial_driver; static struct tty_port serial_port; @@ -41,19 +41,6 @@ static struct timer_list serial_timer; static DEFINE_SPINLOCK(timer_lock); -int errno; - -static int __simc (int a, int b, int c, int d, int e, int f) __attribute__((__noinline__)); -static int __simc (int a, int b, int c, int d, int e, int f) -{ - int ret; - __asm__ __volatile__ ("simcall\n" - "mov %0, a2\n" - "mov %1, a3\n" : "=a" (ret), "=a" (errno) - : : "a2", "a3"); - return ret; -} - static char *serial_version = "0.1"; static char *serial_name = "ISS serial driver"; diff --git a/arch/xtensa/platforms/iss/include/platform/serial.h b/arch/xtensa/platforms/iss/include/platform/serial.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/arch/xtensa/platforms/iss/include/platform/serial.h diff --git a/arch/xtensa/platforms/iss/include/platform/simcall.h b/arch/xtensa/platforms/iss/include/platform/simcall.h index b7952c06a2b7..8c43bfea05e1 100644 --- a/arch/xtensa/platforms/iss/include/platform/simcall.h +++ b/arch/xtensa/platforms/iss/include/platform/simcall.h @@ -57,6 +57,59 @@ #define XTISS_SELECT_ONE_WRITE 2 #define XTISS_SELECT_ONE_EXCEPT 3 +static int errno; + +static inline int __simc(int a, int b, int c, int d, int e, int f) +{ + int ret; + register int a1 asm("a2") = a; + register int b1 asm("a3") = b; + register int c1 asm("a4") = c; + register int d1 asm("a5") = d; + register int e1 asm("a6") = e; + register int f1 asm("a7") = f; + __asm__ __volatile__ ( + "simcall\n" + "mov %0, a2\n" + "mov %1, a3\n" + : "=a" (ret), "=a" (errno), "+r"(a1), "+r"(b1) + : "r"(c1), "r"(d1), "r"(e1), "r"(f1) + : ); + return ret; +} + +static inline int simc_open(char *file, int flags, int mode) +{ + return __simc(SYS_open, (int) file, flags, mode, 0, 0); +} + +static inline int simc_close(int fd) +{ + return __simc(SYS_close, fd, 0, 0, 0, 0); +} + +static inline int simc_ioctl(int fd, int request, void *arg) +{ + return __simc(SYS_ioctl, fd, request, (int) arg, 0, 0); +} + +static inline int simc_read(int fd, void *buf, size_t count) +{ + return __simc(SYS_read, fd, (int) buf, count, 0, 0); +} + +static inline int simc_write(int fd, void *buf, size_t count) +{ + return __simc(SYS_write, fd, (int) buf, count, 0, 0); +} + +static inline int simc_poll(int fd) +{ + struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; + + return __simc(SYS_select_one, fd, XTISS_SELECT_ONE_READ, (int)&tv, + 0, 0); +} #endif /* _XTENSA_PLATFORM_ISS_SIMCALL_H */ diff --git a/arch/xtensa/platforms/iss/io.c b/arch/xtensa/platforms/iss/io.c deleted file mode 100644 index 571d0b24f895..000000000000 --- a/arch/xtensa/platforms/iss/io.c +++ /dev/null @@ -1,32 +0,0 @@ -/* This file isn't really needed right now. */ - -#if 0 - -#include <asm/io.h> -#include <platform/platform-iss/simcall.h> - -extern int __simc (); - - -char iss_serial_getc() -{ - char c; - __simc( SYS_read, 0, &c, 1 ); - return c; -} - -void iss_serial_putc( char c ) -{ - __simc( SYS_write, 1, &c, 1 ); -} - -void iss_serial_puts( char *s ) -{ - if( s != 0 && *s != 0 ) - __simc( SYS_write, 1, s, strlen(s) ); -} - -/*#error Need I/O ports to specific hardware!*/ - -#endif - diff --git a/arch/xtensa/platforms/iss/network.c b/arch/xtensa/platforms/iss/network.c index 7dde24456427..7d0fea6d7f20 100644 --- a/arch/xtensa/platforms/iss/network.c +++ b/arch/xtensa/platforms/iss/network.c @@ -101,55 +101,6 @@ struct iss_net_private { }; -/* ======================= ISS SIMCALL INTERFACE =========================== */ - -/* Note: __simc must _not_ be declared inline! */ - -static int errno; - -static int __simc (int a, int b, int c, int d, int e, int f) __attribute__((__noinline__)); -static int __simc (int a, int b, int c, int d, int e, int f) -{ - int ret; - __asm__ __volatile__ ("simcall\n" - "mov %0, a2\n" - "mov %1, a3\n" : "=a" (ret), "=a" (errno) - : : "a2", "a3"); - return ret; -} - -static int inline simc_open(char *file, int flags, int mode) -{ - return __simc(SYS_open, (int) file, flags, mode, 0, 0); -} - -static int inline simc_close(int fd) -{ - return __simc(SYS_close, fd, 0, 0, 0, 0); -} - -static int inline simc_ioctl(int fd, int request, void *arg) -{ - return __simc(SYS_ioctl, fd, request, (int) arg, 0, 0); -} - -static int inline simc_read(int fd, void *buf, size_t count) -{ - return __simc(SYS_read, fd, (int) buf, count, 0, 0); -} - -static int inline simc_write(int fd, void *buf, size_t count) -{ - return __simc(SYS_write, fd, (int) buf, count, 0, 0); -} - -static int inline simc_poll(int fd) -{ - struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; - - return __simc(SYS_select_one, fd, XTISS_SELECT_ONE_READ, (int)&tv,0,0); -} - /* ================================ HELPERS ================================ */ diff --git a/arch/xtensa/platforms/iss/setup.c b/arch/xtensa/platforms/iss/setup.c index f60c8cf6dfbe..927acf378ea3 100644 --- a/arch/xtensa/platforms/iss/setup.c +++ b/arch/xtensa/platforms/iss/setup.c @@ -38,16 +38,22 @@ void __init platform_init(bp_tag_t* bootparam) } +#ifdef CONFIG_PCI +void platform_pcibios_init(void) +{ +} +#endif + void platform_halt(void) { - printk (" ** Called platform_halt(), looping forever! **\n"); - while (1); + pr_info(" ** Called platform_halt() **\n"); + __asm__ __volatile__("movi a2, 1\nsimcall\n"); } void platform_power_off(void) { - printk (" ** Called platform_power_off(), looping forever! **\n"); - while (1); + pr_info(" ** Called platform_power_off() **\n"); + __asm__ __volatile__("movi a2, 1\nsimcall\n"); } void platform_restart(void) { |