Commit 52fefcec authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/czankel/xtensa-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/czankel/xtensa-2.6:
  xtensa: Update platform files to reflect new location of the header files.
  xtensa: switch to packed struct unaligned access implementation
  xtensa: Add xt2000 support files.
  xtensa: move headers files to arch/xtensa/include
  xtensa: use the new byteorder headers
parents a0e280e0 5fee325e
...@@ -33,6 +33,15 @@ KBUILD_CFLAGS += -ffreestanding ...@@ -33,6 +33,15 @@ KBUILD_CFLAGS += -ffreestanding
KBUILD_CFLAGS += -pipe -mlongcalls KBUILD_CFLAGS += -pipe -mlongcalls
vardirs := $(patsubst %,arch/xtensa/variants/%/,$(variant-y))
plfdirs := $(patsubst %,arch/xtensa/platforms/%/,$(platform-y))
ifeq ($(KBUILD_SRC),)
KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(vardirs) $(plfdirs))
else
KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs))
endif
KBUILD_DEFCONFIG := iss_defconfig KBUILD_DEFCONFIG := iss_defconfig
# ramdisk/initrd support # ramdisk/initrd support
...@@ -66,21 +75,6 @@ libs-y += arch/xtensa/lib/ $(LIBGCC) ...@@ -66,21 +75,6 @@ libs-y += arch/xtensa/lib/ $(LIBGCC)
boot := arch/xtensa/boot boot := arch/xtensa/boot
archinc := include/asm-xtensa
archprepare: $(archinc)/.platform
# Update processor variant and platform symlinks if something which affects
# them changed.
$(archinc)/.platform: $(wildcard include/config/arch/*.h) include/config/auto.conf
@echo ' SYMLINK $(archinc)/variant -> $(archinc)/variant-$(VARIANT)'
$(Q)mkdir -p $(archinc)
$(Q)ln -fsn $(srctree)/$(archinc)/variant-$(VARIANT) $(archinc)/variant
@echo ' SYMLINK $(archinc)/platform -> $(archinc)/platform-$(PLATFORM)'
$(Q)ln -fsn $(srctree)/$(archinc)/platform-$(PLATFORM) $(archinc)/platform
@touch $@
all: zImage all: zImage
...@@ -89,10 +83,6 @@ bzImage : zImage ...@@ -89,10 +83,6 @@ bzImage : zImage
zImage zImage.initrd: vmlinux zImage zImage.initrd: vmlinux
$(Q)$(MAKE) $(build)=$(boot) $@ $(Q)$(MAKE) $(build)=$(boot) $@
CLEAN_FILES += arch/xtensa/vmlinux.lds \
$(archinc)/platform $(archinc)/variant \
$(archinc)/.platform
define archhelp define archhelp
@echo '* zImage - Compressed kernel image (arch/xtensa/boot/images/zImage.*)' @echo '* zImage - Compressed kernel image (arch/xtensa/boot/images/zImage.*)'
endef endef
......
#include <asm/variant/core.h> #include <variant/core.h>
OUTPUT_ARCH(xtensa) OUTPUT_ARCH(xtensa)
ENTRY(_ResetVector) ENTRY(_ResetVector)
......
#include <asm/variant/core.h> #include <variant/core.h>
#include <asm/regs.h> #include <asm/regs.h>
#include <asm/asmmacro.h> #include <asm/asmmacro.h>
#include <asm/cacheasm.h> #include <asm/cacheasm.h>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#ifndef _XTENSA_ASMMACRO_H #ifndef _XTENSA_ASMMACRO_H
#define _XTENSA_ASMMACRO_H #define _XTENSA_ASMMACRO_H
#include <asm/variant/core.h> #include <variant/core.h>
/* /*
* Some little helpers for loops. Use zero-overhead-loops * Some little helpers for loops. Use zero-overhead-loops
......
...@@ -14,7 +14,17 @@ ...@@ -14,7 +14,17 @@
#include <asm/types.h> #include <asm/types.h>
#include <linux/compiler.h> #include <linux/compiler.h>
static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) #ifdef __XTENSA_EL__
# define __LITTLE_ENDIAN
#elif defined(__XTENSA_EB__)
# define __BIG_ENDIAN
#else
# error processor byte order undefined!
#endif
#define __SWAB_64_THRU_32__
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
{ {
__u32 res; __u32 res;
/* instruction sequence from Xtensa ISA release 2/2000 */ /* instruction sequence from Xtensa ISA release 2/2000 */
...@@ -28,8 +38,9 @@ static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) ...@@ -28,8 +38,9 @@ static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
); );
return res; return res;
} }
#define __arch_swab32 __arch_swab32
static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
{ {
/* Given that 'short' values are signed (i.e., can be negative), /* Given that 'short' values are signed (i.e., can be negative),
* we cannot assume that the upper 16-bits of the register are * we cannot assume that the upper 16-bits of the register are
...@@ -62,21 +73,8 @@ static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) ...@@ -62,21 +73,8 @@ static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x)
return res; return res;
} }
#define __arch_swab16 __arch_swab16
#define __arch__swab32(x) ___arch__swab32(x) #include <linux/byteorder.h>
#define __arch__swab16(x) ___arch__swab16(x)
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
# define __BYTEORDER_HAS_U64__
# define __SWAB_64_THRU_32__
#endif
#ifdef __XTENSA_EL__
# include <linux/byteorder/little_endian.h>
#elif defined(__XTENSA_EB__)
# include <linux/byteorder/big_endian.h>
#else
# error processor byte order undefined!
#endif
#endif /* _XTENSA_BYTEORDER_H */ #endif /* _XTENSA_BYTEORDER_H */
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#ifndef _XTENSA_CACHE_H #ifndef _XTENSA_CACHE_H
#define _XTENSA_CACHE_H #define _XTENSA_CACHE_H
#include <asm/variant/core.h> #include <variant/core.h>
#define L1_CACHE_SHIFT XCHAL_DCACHE_LINEWIDTH #define L1_CACHE_SHIFT XCHAL_DCACHE_LINEWIDTH
#define L1_CACHE_BYTES XCHAL_DCACHE_LINESIZE #define L1_CACHE_BYTES XCHAL_DCACHE_LINESIZE
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#define _XTENSA_CHECKSUM_H #define _XTENSA_CHECKSUM_H
#include <linux/in6.h> #include <linux/in6.h>
#include <asm/variant/core.h> #include <variant/core.h>
/* /*
* computes the checksum of a memory block at buff, length len, * computes the checksum of a memory block at buff, length len,
......
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
#define _XTENSA_COPROCESSOR_H #define _XTENSA_COPROCESSOR_H
#include <linux/stringify.h> #include <linux/stringify.h>
#include <asm/variant/tie.h> #include <variant/tie.h>
#include <asm/types.h> #include <asm/types.h>
#ifdef __ASSEMBLY__ #ifdef __ASSEMBLY__
# include <asm/variant/tie-asm.h> # include <variant/tie-asm.h>
.macro xchal_sa_start a b .macro xchal_sa_start a b
.set .Lxchal_pofs_, 0 .set .Lxchal_pofs_, 0
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
#ifndef _XTENSA_IRQ_H #ifndef _XTENSA_IRQ_H
#define _XTENSA_IRQ_H #define _XTENSA_IRQ_H
#include <asm/platform/hardware.h> #include <platform/hardware.h>
#include <asm/variant/core.h> #include <variant/core.h>
#ifndef PLATFORM_NR_IRQS #ifndef PLATFORM_NR_IRQS
# define PLATFORM_NR_IRQS 0 # define PLATFORM_NR_IRQS 0
......
/* /*
* include/asm-xtensa/platform.h
*
* Platform specific functions * Platform specific functions
* *
* This file is subject to the terms and conditions of the GNU General * This file is subject to the terms and conditions of the GNU General
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#ifndef _XTENSA_PROCESSOR_H #ifndef _XTENSA_PROCESSOR_H
#define _XTENSA_PROCESSOR_H #define _XTENSA_PROCESSOR_H
#include <asm/variant/core.h> #include <variant/core.h>
#include <asm/coprocessor.h> #include <asm/coprocessor.h>
#include <linux/compiler.h> #include <linux/compiler.h>
......
...@@ -111,7 +111,7 @@ struct pt_regs { ...@@ -111,7 +111,7 @@ struct pt_regs {
unsigned long areg[16]; /* 128 (64) */ unsigned long areg[16]; /* 128 (64) */
}; };
#include <asm/variant/core.h> #include <variant/core.h>
# define task_pt_regs(tsk) ((struct pt_regs*) \ # define task_pt_regs(tsk) ((struct pt_regs*) \
(task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1) (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1)
......
...@@ -13,6 +13,6 @@ ...@@ -13,6 +13,6 @@
#ifndef _XTENSA_SERIAL_H #ifndef _XTENSA_SERIAL_H
#define _XTENSA_SERIAL_H #define _XTENSA_SERIAL_H
#include <asm/platform/serial.h> #include <platform/serial.h>
#endif /* _XTENSA_SERIAL_H */ #endif /* _XTENSA_SERIAL_H */
...@@ -10,20 +10,20 @@ ...@@ -10,20 +10,20 @@
#ifndef _ASM_XTENSA_UNALIGNED_H #ifndef _ASM_XTENSA_UNALIGNED_H
#define _ASM_XTENSA_UNALIGNED_H #define _ASM_XTENSA_UNALIGNED_H
#ifdef __XTENSA_EL__ #include <asm/byteorder.h>
# include <linux/unaligned/le_memmove.h>
#ifdef __LITTLE_ENDIAN
# include <linux/unaligned/le_struct.h>
# include <linux/unaligned/be_byteshift.h> # include <linux/unaligned/be_byteshift.h>
# include <linux/unaligned/generic.h> # include <linux/unaligned/generic.h>
# define get_unaligned __get_unaligned_le # define get_unaligned __get_unaligned_le
# define put_unaligned __put_unaligned_le # define put_unaligned __put_unaligned_le
#elif defined(__XTENSA_EB__) #else
# include <linux/unaligned/be_memmove.h> # include <linux/unaligned/be_struct.h>
# include <linux/unaligned/le_byteshift.h> # include <linux/unaligned/le_byteshift.h>
# include <linux/unaligned/generic.h> # include <linux/unaligned/generic.h>
# define get_unaligned __get_unaligned_be # define get_unaligned __get_unaligned_be
# define put_unaligned __put_unaligned_be # define put_unaligned __put_unaligned_be
#else
# error processor byte order undefined!
#endif #endif
#endif /* _ASM_XTENSA_UNALIGNED_H */ #endif /* _ASM_XTENSA_UNALIGNED_H */
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/signal.h> #include <asm/signal.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/variant/tie-asm.h> #include <variant/tie-asm.h>
/* Unimplemented features. */ /* Unimplemented features. */
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
#include <asm/variant/core.h> #include <variant/core.h>
OUTPUT_ARCH(xtensa) OUTPUT_ARCH(xtensa)
ENTRY(_start) ENTRY(_start)
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include <asm/errno.h> #include <asm/errno.h>
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/variant/core.h> #include <variant/core.h>
/* /*
* computes a partial checksum, e.g. for TCP/UDP fragments * computes a partial checksum, e.g. for TCP/UDP fragments
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Copyright (C) 2002 - 2005 Tensilica Inc. * Copyright (C) 2002 - 2005 Tensilica Inc.
*/ */
#include <asm/variant/core.h> #include <variant/core.h>
.macro src_b r, w0, w1 .macro src_b r, w0, w1
#ifdef __XTENSA_EB__ #ifdef __XTENSA_EB__
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* Copyright (C) 2002 Tensilica Inc. * Copyright (C) 2002 Tensilica Inc.
*/ */
#include <asm/variant/core.h> #include <variant/core.h>
/* /*
* void *memset(void *dst, int c, size_t length) * void *memset(void *dst, int c, size_t length)
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* Copyright (C) 2002 Tensilica Inc. * Copyright (C) 2002 Tensilica Inc.
*/ */
#include <asm/variant/core.h> #include <variant/core.h>
#include <linux/errno.h> #include <linux/errno.h>
/* Load or store instructions that may cause exceptions use the EX macro. */ /* Load or store instructions that may cause exceptions use the EX macro. */
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* Copyright (C) 2002 Tensilica Inc. * Copyright (C) 2002 Tensilica Inc.
*/ */
#include <asm/variant/core.h> #include <variant/core.h>
/* Load or store instructions that may cause exceptions use the EX macro. */ /* Load or store instructions that may cause exceptions use the EX macro. */
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
* a11/ original length * a11/ original length
*/ */
#include <asm/variant/core.h> #include <variant/core.h>
#ifdef __XTENSA_EB__ #ifdef __XTENSA_EB__
#define ALIGN(R, W0, W1) src R, W0, W1 #define ALIGN(R, W0, W1) src R, W0, W1
......
/* /*
* arch/xtensa/platform-iss/console.c * arch/xtensa/platforms/iss/console.c
* *
* This file is subject to the terms and conditions of the GNU General Public * This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/platform/simcall.h> #include <platform/simcall.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/tty_flip.h> #include <linux/tty_flip.h>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#if 0 #if 0
#include <asm/io.h> #include <asm/io.h>
#include <xtensa/simcall.h> #include <platform/platform-iss/simcall.h>
extern int __simc (); extern int __simc ();
......
/* /*
* *
* arch/xtensa/platform-iss/network.c * arch/xtensa/platforms/iss/network.c
* *
* Platform specific initialization. * Platform specific initialization.
* *
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include <linux/rtnetlink.h> #include <linux/rtnetlink.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <asm/platform/simcall.h> #include <platform/simcall.h>
#define DRIVER_NAME "iss-netdev" #define DRIVER_NAME "iss-netdev"
#define ETH_MAX_PACKET 1500 #define ETH_MAX_PACKET 1500
......
#
# Makefile for the Tensilica XT2000 Emulation Board
#
obj-y = setup.o
/*
* platform/hardware.h
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2001 Tensilica Inc.
*/
/*
* This file contains the hardware configuration of the XT2000 board.
*/
#ifndef _XTENSA_XT2000_HARDWARE_H
#define _XTENSA_XT2000_HARDWARE_H
#include <variant/core.h>
#include <asm/io.h>
/*
* Memory configuration.
*/
#define PLATFORM_DEFAULT_MEM_START 0x00000000
#define PLATFORM_DEFAULT_MEM_SIZE 0x08000000
/*
* Number of platform IRQs
*/
#define PLATFORM_NR_IRQS 3
/*
* On-board components.
*/
#define SONIC83934_INTNUM XCHAL_EXTINT3_NUM
#define SONIC83934_ADDR IOADDR(0x0d030000)
/*
* V3-PCI
*/
/* The XT2000 uses the V3 as a cascaded interrupt controller for the PCI bus */
#define IRQ_PCI_A (XCHAL_NUM_INTERRUPTS + 0)
#define IRQ_PCI_B (XCHAL_NUM_INTERRUPTS + 1)
#define IRQ_PCI_C (XCHAL_NUM_INTERRUPTS + 2)
/*
* Various other components.
*/
#define XT2000_LED_ADDR IOADDR(0x0d040000)
#endif /* _XTENSA_XT2000_HARDWARE_H */
/*
* platform/serial.h
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2001 Tensilica Inc.
*/
#ifndef _XTENSA_XT2000_SERIAL_H
#define _XTENSA_XT2000_SERIAL_H
#include <variant/core.h>
#include <asm/io.h>
/* National-Semi PC16552D DUART: */
#define DUART16552_1_INTNUM XCHAL_EXTINT4_NUM
#define DUART16552_2_INTNUM XCHAL_EXTINT5_NUM
#define DUART16552_1_ADDR IOADDR(0x0d050020) /* channel 1 */
#define DUART16552_2_ADDR IOADDR(0x0d050000) /* channel 2 */
#define DUART16552_XTAL_FREQ 18432000 /* crystal frequency in Hz */
#define BASE_BAUD ( DUART16552_XTAL_FREQ / 16 )
#endif /* _XTENSA_XT2000_SERIAL_H */
/*
* arch/xtensa/platforms/xt2000/setup.c
*
* Platform specific functions for the XT2000 board.
*
* Authors: Chris Zankel <chris@zankel.net>
* Joe Taylor <joe@tensilica.com>
*
* Copyright 2001 - 2004 Tensilica Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
*/
#include <linux/stddef.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/reboot.h>
#include <linux/kdev_t.h>
#include <linux/types.h>
#include <linux/major.h>
#include <linux/console.h>
#include <linux/delay.h>
#include <linux/stringify.h>
#include <linux/platform_device.h>
#include <linux/serial.h>
#include <linux/serial_8250.h>
#include <asm/processor.h>
#include <asm/platform.h>
#include <asm/bootparam.h>
#include <platform/hardware.h>
#include <platform/serial.h>
/* Assumes s points to an 8-chr string. No checking for NULL. */
static void led_print (int f, char *s)
{
unsigned long* led_addr = (unsigned long*) (XT2000_LED_ADDR + 0xE0) + f;
int i;
for (i = f; i < 8; i++)
if ((*led_addr++ = *s++) == 0)
break;
}
void platform_halt(void)
{
led_print (0, " HALT ");
local_irq_disable();
while (1);
}
void platform_power_off(void)
{
led_print (0, "POWEROFF");
local_irq_disable();
while (1);
}
void platform_restart(void)
{
/* Flush and reset the mmu, simulate a processor reset, and
* jump to the reset vector. */
__asm__ __volatile__ ("movi a2, 15\n\t"
"wsr a2, " __stringify(ICOUNTLEVEL) "\n\t"
"movi a2, 0\n\t"
"wsr a2, " __stringify(ICOUNT) "\n\t"
"wsr a2, " __stringify(IBREAKENABLE) "\n\t"
"wsr a2, " __stringify(LCOUNT) "\n\t"
"movi a2, 0x1f\n\t"
"wsr a2, " __stringify(PS) "\n\t"
"isync\n\t"
"jx %0\n\t"
:
: "a" (XCHAL_RESET_VECTOR_VADDR)
: "a2"
);
/* control never gets here */
}
void __init platform_setup(char** cmdline)
{
led_print (0, "LINUX ");
}
/* early initialization */
extern sysmem_info_t __initdata sysmem;
void platform_init(bp_tag_t* first)
{
/* Set default memory block if not provided by the bootloader. */
if (sysmem.nr_banks == 0) {
sysmem.nr_banks = 1;
sysmem.bank[0].start = PLATFORM_DEFAULT_MEM_START;
sysmem.bank[0].end = PLATFORM_DEFAULT_MEM_START
+ PLATFORM_DEFAULT_MEM_SIZE;
}
}
/* Heartbeat. Let the LED blink. */
void platform_heartbeat(void)
{
static int i=0, t = 0;
if (--t < 0)
{
t = 59;
led_print(7, i ? ".": " ");
i ^= 1;
}
}
//#define RS_TABLE_SIZE 2
//#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF|ASYNC_SKIP_TEST)
#define _SERIAL_PORT(_base,_irq) \
{ \
.mapbase = (_base), \
.membase = (void*)(_base), \
.irq = (_irq), \
.uartclk = DUART16552_XTAL_FREQ, \
.iotype = UPIO_MEM, \
.flags = UPF_BOOT_AUTOCONF, \
.regshift = 2, \
}
static struct plat_serial8250_port xt2000_serial_data[] = {
#if XCHAL_HAVE_BE
_SERIAL_PORT(DUART16552_1_ADDR + 3, DUART16552_1_INTNUM),
_SERIAL_PORT(DUART16552_2_ADDR + 3, DUART16552_2_INTNUM),
#else
_SERIAL_PORT(DUART16552_1_ADDR, DUART16552_1_INTNUM),
_SERIAL_PORT(DUART16552_2_ADDR, DUART16552_2_INTNUM),
#endif
{ }
};
static struct platform_device xt2000_serial8250_device = {
.name = "serial8250",
.id = PLAT8250_DEV_PLATFORM,
.dev = {
.platform_data = xt2000_serial_data,
},
};
static struct resource xt2000_sonic_res[] = {
{
.start = SONIC83934_ADDR,
.end = SONIC83934_ADDR + 0xff,
.flags = IORESOURCE_MEM,
},
{
.start = SONIC83934_INTNUM,
.end = SONIC83934_INTNUM,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device xt2000_sonic_device = {
.name = "xtsonic",
.num_resources = ARRAY_SIZE(xt2000_sonic_res),
.resource = xt2000_sonic_res,
};
static int __init xt2000_setup_devinit(void)
{
platform_device_register(&xt2000_serial8250_device);
platform_device_register(&xt2000_sonic_device);
return 0;
}
device_initcall(xt2000_setup_devinit);
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