Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xtensa: Add xt2000 support files.

The last check-in to support the xt2000 development platform was missing
some files.

Signed-off-by: Chris Zankel <chris@zankel.net>

+269
+5
arch/xtensa/platforms/xt2000/Makefile
··· 1 + # 2 + # Makefile for the Tensilica XT2000 Emulation Board 3 + # 4 + 5 + obj-y = setup.o
+55
arch/xtensa/platforms/xt2000/include/platform/hardware.h
··· 1 + /* 2 + * platform/hardware.h 3 + * 4 + * This file is subject to the terms and conditions of the GNU General Public 5 + * License. See the file "COPYING" in the main directory of this archive 6 + * for more details. 7 + * 8 + * Copyright (C) 2001 Tensilica Inc. 9 + */ 10 + 11 + /* 12 + * This file contains the hardware configuration of the XT2000 board. 13 + */ 14 + 15 + #ifndef _XTENSA_XT2000_HARDWARE_H 16 + #define _XTENSA_XT2000_HARDWARE_H 17 + 18 + #include <variant/core.h> 19 + #include <asm/io.h> 20 + 21 + /* 22 + * Memory configuration. 23 + */ 24 + 25 + #define PLATFORM_DEFAULT_MEM_START 0x00000000 26 + #define PLATFORM_DEFAULT_MEM_SIZE 0x08000000 27 + 28 + /* 29 + * Number of platform IRQs 30 + */ 31 + #define PLATFORM_NR_IRQS 3 32 + /* 33 + * On-board components. 34 + */ 35 + 36 + #define SONIC83934_INTNUM XCHAL_EXTINT3_NUM 37 + #define SONIC83934_ADDR IOADDR(0x0d030000) 38 + 39 + /* 40 + * V3-PCI 41 + */ 42 + 43 + /* The XT2000 uses the V3 as a cascaded interrupt controller for the PCI bus */ 44 + 45 + #define IRQ_PCI_A (XCHAL_NUM_INTERRUPTS + 0) 46 + #define IRQ_PCI_B (XCHAL_NUM_INTERRUPTS + 1) 47 + #define IRQ_PCI_C (XCHAL_NUM_INTERRUPTS + 2) 48 + 49 + /* 50 + * Various other components. 51 + */ 52 + 53 + #define XT2000_LED_ADDR IOADDR(0x0d040000) 54 + 55 + #endif /* _XTENSA_XT2000_HARDWARE_H */
+28
arch/xtensa/platforms/xt2000/include/platform/serial.h
··· 1 + /* 2 + * platform/serial.h 3 + * 4 + * This file is subject to the terms and conditions of the GNU General Public 5 + * License. See the file "COPYING" in the main directory of this archive 6 + * for more details. 7 + * 8 + * Copyright (C) 2001 Tensilica Inc. 9 + */ 10 + 11 + #ifndef _XTENSA_XT2000_SERIAL_H 12 + #define _XTENSA_XT2000_SERIAL_H 13 + 14 + #include <variant/core.h> 15 + #include <asm/io.h> 16 + 17 + /* National-Semi PC16552D DUART: */ 18 + 19 + #define DUART16552_1_INTNUM XCHAL_EXTINT4_NUM 20 + #define DUART16552_2_INTNUM XCHAL_EXTINT5_NUM 21 + 22 + #define DUART16552_1_ADDR IOADDR(0x0d050020) /* channel 1 */ 23 + #define DUART16552_2_ADDR IOADDR(0x0d050000) /* channel 2 */ 24 + 25 + #define DUART16552_XTAL_FREQ 18432000 /* crystal frequency in Hz */ 26 + #define BASE_BAUD ( DUART16552_XTAL_FREQ / 16 ) 27 + 28 + #endif /* _XTENSA_XT2000_SERIAL_H */
+181
arch/xtensa/platforms/xt2000/setup.c
··· 1 + /* 2 + * arch/xtensa/platforms/xt2000/setup.c 3 + * 4 + * Platform specific functions for the XT2000 board. 5 + * 6 + * Authors: Chris Zankel <chris@zankel.net> 7 + * Joe Taylor <joe@tensilica.com> 8 + * 9 + * Copyright 2001 - 2004 Tensilica Inc. 10 + * 11 + * This program is free software; you can redistribute it and/or modify it 12 + * under the terms of the GNU General Public License as published by the 13 + * Free Software Foundation; either version 2 of the License, or (at your 14 + * option) any later version. 15 + * 16 + */ 17 + #include <linux/stddef.h> 18 + #include <linux/kernel.h> 19 + #include <linux/init.h> 20 + #include <linux/errno.h> 21 + #include <linux/reboot.h> 22 + #include <linux/kdev_t.h> 23 + #include <linux/types.h> 24 + #include <linux/major.h> 25 + #include <linux/console.h> 26 + #include <linux/delay.h> 27 + #include <linux/stringify.h> 28 + #include <linux/platform_device.h> 29 + #include <linux/serial.h> 30 + #include <linux/serial_8250.h> 31 + 32 + #include <asm/processor.h> 33 + #include <asm/platform.h> 34 + #include <asm/bootparam.h> 35 + #include <platform/hardware.h> 36 + #include <platform/serial.h> 37 + 38 + /* Assumes s points to an 8-chr string. No checking for NULL. */ 39 + 40 + static void led_print (int f, char *s) 41 + { 42 + unsigned long* led_addr = (unsigned long*) (XT2000_LED_ADDR + 0xE0) + f; 43 + int i; 44 + for (i = f; i < 8; i++) 45 + if ((*led_addr++ = *s++) == 0) 46 + break; 47 + } 48 + 49 + void platform_halt(void) 50 + { 51 + led_print (0, " HALT "); 52 + local_irq_disable(); 53 + while (1); 54 + } 55 + 56 + void platform_power_off(void) 57 + { 58 + led_print (0, "POWEROFF"); 59 + local_irq_disable(); 60 + while (1); 61 + } 62 + 63 + void platform_restart(void) 64 + { 65 + /* Flush and reset the mmu, simulate a processor reset, and 66 + * jump to the reset vector. */ 67 + 68 + __asm__ __volatile__ ("movi a2, 15\n\t" 69 + "wsr a2, " __stringify(ICOUNTLEVEL) "\n\t" 70 + "movi a2, 0\n\t" 71 + "wsr a2, " __stringify(ICOUNT) "\n\t" 72 + "wsr a2, " __stringify(IBREAKENABLE) "\n\t" 73 + "wsr a2, " __stringify(LCOUNT) "\n\t" 74 + "movi a2, 0x1f\n\t" 75 + "wsr a2, " __stringify(PS) "\n\t" 76 + "isync\n\t" 77 + "jx %0\n\t" 78 + : 79 + : "a" (XCHAL_RESET_VECTOR_VADDR) 80 + : "a2" 81 + ); 82 + 83 + /* control never gets here */ 84 + } 85 + 86 + void __init platform_setup(char** cmdline) 87 + { 88 + led_print (0, "LINUX "); 89 + } 90 + 91 + /* early initialization */ 92 + 93 + extern sysmem_info_t __initdata sysmem; 94 + 95 + void platform_init(bp_tag_t* first) 96 + { 97 + /* Set default memory block if not provided by the bootloader. */ 98 + 99 + if (sysmem.nr_banks == 0) { 100 + sysmem.nr_banks = 1; 101 + sysmem.bank[0].start = PLATFORM_DEFAULT_MEM_START; 102 + sysmem.bank[0].end = PLATFORM_DEFAULT_MEM_START 103 + + PLATFORM_DEFAULT_MEM_SIZE; 104 + } 105 + } 106 + 107 + /* Heartbeat. Let the LED blink. */ 108 + 109 + void platform_heartbeat(void) 110 + { 111 + static int i=0, t = 0; 112 + 113 + if (--t < 0) 114 + { 115 + t = 59; 116 + led_print(7, i ? ".": " "); 117 + i ^= 1; 118 + } 119 + } 120 + 121 + //#define RS_TABLE_SIZE 2 122 + //#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF|ASYNC_SKIP_TEST) 123 + 124 + #define _SERIAL_PORT(_base,_irq) \ 125 + { \ 126 + .mapbase = (_base), \ 127 + .membase = (void*)(_base), \ 128 + .irq = (_irq), \ 129 + .uartclk = DUART16552_XTAL_FREQ, \ 130 + .iotype = UPIO_MEM, \ 131 + .flags = UPF_BOOT_AUTOCONF, \ 132 + .regshift = 2, \ 133 + } 134 + 135 + static struct plat_serial8250_port xt2000_serial_data[] = { 136 + #if XCHAL_HAVE_BE 137 + _SERIAL_PORT(DUART16552_1_ADDR + 3, DUART16552_1_INTNUM), 138 + _SERIAL_PORT(DUART16552_2_ADDR + 3, DUART16552_2_INTNUM), 139 + #else 140 + _SERIAL_PORT(DUART16552_1_ADDR, DUART16552_1_INTNUM), 141 + _SERIAL_PORT(DUART16552_2_ADDR, DUART16552_2_INTNUM), 142 + #endif 143 + { } 144 + }; 145 + 146 + static struct platform_device xt2000_serial8250_device = { 147 + .name = "serial8250", 148 + .id = PLAT8250_DEV_PLATFORM, 149 + .dev = { 150 + .platform_data = xt2000_serial_data, 151 + }, 152 + }; 153 + 154 + static struct resource xt2000_sonic_res[] = { 155 + { 156 + .start = SONIC83934_ADDR, 157 + .end = SONIC83934_ADDR + 0xff, 158 + .flags = IORESOURCE_MEM, 159 + }, 160 + { 161 + .start = SONIC83934_INTNUM, 162 + .end = SONIC83934_INTNUM, 163 + .flags = IORESOURCE_IRQ, 164 + }, 165 + }; 166 + 167 + static struct platform_device xt2000_sonic_device = { 168 + .name = "xtsonic", 169 + .num_resources = ARRAY_SIZE(xt2000_sonic_res), 170 + .resource = xt2000_sonic_res, 171 + }; 172 + 173 + static int __init xt2000_setup_devinit(void) 174 + { 175 + platform_device_register(&xt2000_serial8250_device); 176 + platform_device_register(&xt2000_sonic_device); 177 + 178 + return 0; 179 + } 180 + 181 + device_initcall(xt2000_setup_devinit);