AR7: AR7 strikes back
Subsystems (7)
cover AR7: AR7 strikes back
Here are the new patches made against latest 2.6.23 git tree
PATCH 1/6 AR7: core support
arch/mips/Kconfig +16 -0
@@ -16,6 +16,22 @@ choice prompt "System type" default SGI_IP22 +config AR7 + bool "Texas Instruments AR7" + select BOOT_ELF32 + select DMA_NONCOHERENT + select IRQ_CPU + select NO_EXCEPT_FILL + select SWAP_IO_SPACE + select SYS_HAS_CPU_MIPS32_R1 + select SYS_HAS_EARLY_PRINTK + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_KGDB + select SYS_SUPPORTS_LITTLE_ENDIAN + select SYS_SUPPORTS_BIG_ENDIAN + select GENERIC_GPIO + select GENERIC_HARDIRQS_NO__DO_IRQ + config MACH_ALCHEMY bool "Alchemy processor based machines"
arch/mips/Makefile +7 -0
@@ -157,6 +157,13 @@ libs-$(CONFIG_SIBYTE_CFE) += arch/mips/sibyte/cfe/ # # +# Texas Instruments AR7 +# +core-$(CONFIG_AR7) += arch/mips/ar7/ +cflags-$(CONFIG_AR7) += -Iinclude/asm-mips/ar7 +load-$(CONFIG_AR7) += 0xffffffff94100000 + +# # Acer PICA 61, Mips Magnum 4000 and Olivetti M700. # core-$(CONFIG_MACH_JAZZ) += arch/mips/jazz/
arch/mips/ar7/Makefile new file +10 -0
@@ -0,0 +1,10 @@ + +obj-y := \ + prom.o \ + setup.o \ + memory.o \ + irq.o \ + time.o \ + platform.o \ + gpio.o \ + clock.o
arch/mips/ar7/clock.c new file +485 -0
485 lines not on this page · raw message
arch/mips/ar7/gpio.c new file +48 -0
48 lines not on this page · raw message
arch/mips/ar7/irq.c new file +182 -0
182 lines not on this page · raw message
arch/mips/ar7/memory.c new file +73 -0
73 lines not on this page · raw message
arch/mips/ar7/platform.c new file +494 -0
494 lines not on this page · raw message
arch/mips/ar7/prom.c new file +324 -0
324 lines not on this page · raw message
arch/mips/ar7/setup.c new file +106 -0
106 lines not on this page · raw message
arch/mips/ar7/time.c new file +32 -0
@@ -0,0 +1,32 @@ +/* +* Carsten Langgaard, [email protected] +* Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved. +* +* This program is free software; you can distribute it and/or modify it +* under the terms of the GNU General Public License (Version 2) as +* published by the Free Software Foundation. +* +* This program is distributed in the hope it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +* for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program; if not, write to the Free Software Foundation, Inc., +* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. +* +* Setting up the clock on the MIPS boards. +*/ + +#include <asm/time.h> +#include <asm/ar7/ar7.h> + +void __init ar7_time_init (void ) +{ + mips_hpt_frequency =ar7_cpu_freq () /2 ; +} + +void __init plat_timer_setup (struct irqaction *irq) +{ +setup_irq (7 , irq); +}
arch/mips/kernel/traps.c +16 -3
@@ -1076,9 +1076,22 @@ void *set_except_vector(int n, void *addr) exception_handlers[n] = handler;if (n ==0 && cpu_has_divec) { - *(u32 *)(ebase +0x200 ) =0x08000000 | - (0x03ffffff & (handler >>2 )); -flush_icache_range (ebase +0x200 , ebase +0x204 ); +if ((handler ^ (ebase +4 )) &0xfc000000 ) { +/* lui k0, 0x0000 */ + *(u32 *)(ebase +0x200 ) =0x3c1a0000 | (handler >>16 ); +/* ori k0, 0x0000 */ + *(u32 *)(ebase +0x204 ) = +0x375a0000 | (handler &0xffff ); +/* jr k0 */ + *(u32 *)(ebase +0x208 ) =0x03400008 ; +/* nop */ + *(u32 *)(ebase +0x20C ) =0x00000000 ; +flush_icache_range (ebase +0x200 , ebase +0x210 ); + }else { + *(volatile u32 *)(ebase +0x200 ) = +0x08000000 | (0x03ffffff & (handler >>2 )); +flush_icache_range (ebase +0x200 , ebase +0x204 ); + } }return (void *)old_handler; }
include/asm-mips/ar7/ar7.h new file +169 -0
169 lines not on this page · raw message
include/asm-mips/ar7/gpio.h new file +121 -0
121 lines not on this page · raw message
include/asm-mips/ar7/irq.h new file +16 -0
@@ -0,0 +1,16 @@ +/* +* 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. +* +* Shamelessly copied from asm-mips/mach-emma2rh/ +* Copyright (C) 2003 by Ralf Baechle +*/ +#ifndef __ASM_AR7_IRQ_H +#define __ASM_AR7_IRQ_H + +#define NR_IRQS 256 + +#include_next <irq.h> + +#endif /* __ASM_AR7_IRQ_H */
include/asm-mips/ar7/prom.h new file +25 -0
@@ -0,0 +1,25 @@ +/* +* Copyright (C) 2006, 2007 Florian Fainelli <[email protected]> +* +* 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. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef __PROM_H__ +#define __PROM_H__ + +extern char *prom_getenv (char *name); +extern void prom_printf (char *fmt, ...); + +#endif /* __PROM_H__ */
include/asm-mips/ar7/spaces.h new file +32 -0
@@ -0,0 +1,32 @@ +/* +* 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) 1994 - 1999, 2000, 03, 04 Ralf Baechle +* Copyright (C) 2000, 2002 Maciej W. Rozycki +* Copyright (C) 1990, 1999, 2000 Silicon Graphics, Inc. +*/ +#ifndef _ASM_AR7_SPACES_H +#define _ASM_AR7_SPACES_H + +#define CAC_BASE 0x80000000 +#define IO_BASE 0xa0000000 +#define UNCAC_BASE 0xa0000000 +#define MAP_BASE 0xc0000000 + +/* +* This handles the memory map. +* We handle pages at KSEG0 for kernels with 32 bit address space. +*/ +#define PAGE_OFFSET 0x94000000UL +#define PHYS_OFFSET 0x14000000UL + +/* +* Memory above this physical address will be considered highmem. +*/ +#ifndef HIGHMEM_START +#define HIGHMEM_START 0x40000000UL +#endif + +#endif /* __ASM_AR7_SPACES_H */
include/asm-mips/page.h +4 -2
@@ -184,8 +184,10 @@ typedef struct { unsigned long pgprot; } pgprot_t;#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) -#define UNCAC_ADDR (addr) ((addr) - PAGE_OFFSET + UNCAC_BASE) -#define CAC_ADDR (addr) ((addr) - UNCAC_BASE + PAGE_OFFSET) +#define UNCAC_ADDR (addr) ((addr) - PAGE_OFFSET + UNCAC_BASE + \ + PHYS_OFFSET) +#define CAC_ADDR (addr) ((addr) - UNCAC_BASE + PAGE_OFFSET - \ + PHYS_OFFSET)#include <asm-generic/memory_model.h> #include <asm-generic/page.h>
PATCH 2/6 AR7: VLYNQ bus
In reply to Matteo CroceSupport for the Texas Instrument VLYNQ interconnect bus
drivers/vlynq/Kconfig new file +13 -0
@@ -0,0 +1,13 @@ +menu "TI VLYNQ" + +config VLYNQ + bool "TI VLYNQ bus support" + depends on AR7 && EXPERIMENTAL + help + Support for the TI VLYNQ bus + + The module will be called vlynq + + If unsure, say N + +endmenu
drivers/vlynq/Makefile new file +5 -0
@@ -0,0 +1,5 @@ +# +# Makefile for kernel vlynq drivers +# + +obj-$(CONFIG_VLYNQ) += vlynq.o
drivers/vlynq/vlynq.c new file +670 -0
670 lines not on this page · raw message
include/linux/vlynq.h new file +161 -0
161 lines not on this page · raw message
PATCH 3/6 AR7: mtd partition map
In reply to Matteo Crocedrivers/mtd/Kconfig +6 -0
@@ -150,6 +150,12 @@ config MTD_AFS_PARTS for your particular device. It won't happen automatically. The 'armflash' map driver (CONFIG_MTD_ARMFLASH) does this, for example. +config MTD_AR7_PARTS + tristate "TI AR7 partitioning support" + depends on MTD_PARTITIONS + ---help--- + TI AR7 partitioning support + comment "User Modules And Translation Layers" config MTD_CHAR
drivers/mtd/Makefile +1 -0
@@ -11,6 +11,7 @@ obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o obj-$(CONFIG_MTD_AFS_PARTS) += afs.o +obj-$(CONFIG_MTD_AR7_PARTS) += ar7part.o # 'Users' - code which presents functionality to userspace. obj-$(CONFIG_MTD_CHAR) += mtdchar.o
drivers/mtd/ar7part.c new file +146 -0
146 lines not on this page · raw message
PATCH 4/6 AR7: gpio char device
In reply to Matteo Crocedrivers/char/Kconfig +9 -0
@@ -928,6 +928,15 @@ config MWAVE To compile this driver as a module, choose M here: the module will be called mwave. +config AR7_GPIO + tristate "TI AR7 GPIO Support" + depends on AR7 + help + Give userspace access to the GPIO pins on the Texas Instruments AR7 + processors. + + If compiled as a module, it will be called ar7_gpio. + config SCx200_GPIO tristate "NatSemi SCx200 GPIO Support" depends on SCx200
drivers/char/Makefile +1 -0
@@ -89,6 +89,7 @@ obj-$(CONFIG_COBALT_LCD) += lcd.o obj-$(CONFIG_PPDEV) += ppdev.o obj-$(CONFIG_NWBUTTON) += nwbutton.o obj-$(CONFIG_NWFLASH) += nwflash.o +obj-$(CONFIG_AR7_GPIO) += ar7_gpio.o obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o obj-$(CONFIG_PC8736x_GPIO) += pc8736x_gpio.o obj-$(CONFIG_NSC_GPIO) += nsc_gpio.o
drivers/char/ar7_gpio.c new file +158 -0
158 lines not on this page · raw message
PATCH 5/6 AR7: serial hack
In reply to Matteo Crocedrivers/serial/8250.c +11 -0
@@ -267,6 +267,13 @@ static const struct serial8250_config uart_config[] = { .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, .flags = UART_CAP_FIFO, }, + [PORT_AR7] = { + .name = "TI-AR7", + .fifo_size = 16, + .tx_loadsz = 16, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_00, + .flags = UART_CAP_FIFO | UART_CAP_AFE, + }, };#if defined (CONFIG_SERIAL_8250_AU1X00 )
@@ -2453,7 +2460,11 @@ static void serial8250_console_putchar(struct uart_port *port, int ch) {struct uart_8250_port *up = (struct uart_8250_port *)port; +#ifdef CONFIG_AR7 +wait_for_xmitr (up,BOTH_EMPTY ); +#else wait_for_xmitr (up,UART_LSR_THRE ); +#endif serial_out (up,UART_TX , ch); }
include/linux/serialP.h +4 -0
@@ -135,6 +135,10 @@ struct rs_multiport_struct {* the interrupt line _up_ instead of down, so if we register the IRQ * while the UART is in that state, we die in an IRQ storm. */ #define ALPHA_KLUDGE_MCR (UART_MCR_OUT2) +#elif defined(CONFIG_AR7 ) +/* This is how it is set up by bootloader... */ +#define ALPHA_KLUDGE_MCR (UART_MCR_OUT2 | UART_MCR_OUT1 \ + | UART_MCR_RTS | UART_MCR_DTR)#else #define ALPHA_KLUDGE_MCR 0#endif
include/linux/serial_core.h +1 -0
@@ -40,6 +40,7 @@#define PORT_NS16550A 14#define PORT_XSCALE 15#define PORT_RM9000 16/* PMC-Sierra RM9xxx internal UART */ +#define PORT_AR7 16#define PORT_MAX_8250 16/* max port ID */ /*
Re: [PATCH][MIPS][6/6] AR7: leds driver
In reply to Matteo CroceThe new led driver, uses leds-gpio now
drivers/leds/leds-ar7.c new file +130 -0
@@ -0,0 +1,130 @@ +/* +* Copyright (C) 2007 Nicolas Thill <[email protected]> +* +* 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. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/leds.h> +#include <linux/err.h> +#include <linux/io.h> +#include <gpio.h> + +#define DRVNAME "ar7-leds" +#define LONGNAME "TI AR7 LEDs driver" +#define AR7_GPIO_BIT_STATUS_LED 8 + +MODULE_AUTHOR ("Nicolas Thill <[email protected]>" ); +MODULE_DESCRIPTION (LONGNAME ); +MODULE_LICENSE ("GPL" ); + +static void ar7_status_led_set (struct led_classdev *pled, +enum led_brightness value) +{ +gpio_set_value (AR7_GPIO_BIT_STATUS_LED , value ?0 :1 ); +} + +static struct led_classdev ar7_status_led = { + .name ="ar7:status" , + .brightness_set = ar7_status_led_set, +}; + +#ifdef CONFIG_PM +static int ar7_leds_suspend (struct platform_device *dev, +pm_message_t state) +{ +led_classdev_suspend (&ar7_status_led); +return 0 ; +} + +static int ar7_leds_resume (struct platform_device *dev) +{ +led_classdev_resume (&ar7_status_led); +return 0 ; +} +#else /* CONFIG_PM */ +#define ar7_leds_suspend NULL +#define ar7_leds_resume NULL +#endif /* CONFIG_PM */ + +static int ar7_leds_probe (struct platform_device *pdev) +{ +int rc; + + rc =led_classdev_register (&pdev->dev, &ar7_status_led); +if (rc <0 ) + goto out; + +ar7_gpio_enable (AR7_GPIO_BIT_STATUS_LED ); +gpio_direction_output (AR7_GPIO_BIT_STATUS_LED ,0 ); + +out: +return rc; +} + +static int ar7_leds_remove (struct platform_device *pdev) +{ +led_classdev_unregister (&ar7_status_led); + +return 0 ; +} + +static struct platform_device *ar7_leds_device; + +static struct platform_driver ar7_leds_driver = { + .probe = ar7_leds_probe, + .remove = ar7_leds_remove, + .suspend = ar7_leds_suspend, + .resume = ar7_leds_resume, + .driver = { + .name =DRVNAME , + }, +}; + +static int __init ar7_leds_init (void ) +{ +int rc; + + ar7_leds_device =platform_device_alloc (DRVNAME ,-1 ); +if (!ar7_leds_device) +return -ENOMEM ; + + rc =platform_device_add (ar7_leds_device); +if (rc <0 ) + goto out_put; + + rc =platform_driver_register (&ar7_leds_driver); +if (rc <0 ) + goto out_put; + + goto out; + +out_put: +platform_device_put (ar7_leds_device); +out: +return rc; +} + +static void __exit ar7_leds_exit(void) +{ +platform_driver_unregister (&ar7_leds_driver); +platform_device_unregister (ar7_leds_device); +} + +module_init (ar7_leds_init); +module_exit (ar7_leds_exit);
Hi all,
Jeff Garzik merged the AR7 ethernet driver and Wim Van Sebroeck merged the watchdog driver.
Is there anything that needs some cleanup for a linux-mips inclusion ?
Quoted 1 line · On Thursday 11 October 2007 02:48:32 Matteo Croce wrote:
Here are the new patches made against latest 2.6.23 git tree