NEC VR5701 support
Subsystems (4)
Source: MontaVista Software, Inc. Sergey Podstavin <[email protected]>
MR: 11590
Type: Enhancement
Disposition: needs submitting to linuxmips-embedded mailing list
Description:
NEC Electronics Corporation VR5701 SolutionGearII board LSP
arch/mips/vr5701/tcube/irq_vr5701.c new file +194 -0
@@ -0,0 +1,194 @@ +/* +* arch/mips/vr5701/tcube/irq_vr5701.c +* +* This file defines the irq handler for NEC Electronics Corporation VR5701 SolutionGearII +* +* Author: Sergey Podstavin <[email protected]> +* +* 2005 (c) MontaVista Software, Inc. This file is licensed under +* the terms of the GNU General Public License version 2. This program +* is licensed "as is" without any warranty of any kind, whether express +* or implied. +*/ +/* +* NEC Electronics Corporation VR5701 SolutionGearII defines 32 IRQs. +* +*/ +#include <linux/interrupt.h> +#include <linux/types.h> +#include <linux/ptrace.h> + +#include <asm/debug.h> +#include <asm/tcube.h> + +static int vr5701_irq_base =-1 ; + +void ll_vr5701_irq_disable (int vr5701_irq,int ack); + +static void vr5701_irq_enable (unsigned int irq) +{ +ll_vr5701_irq_enable (irq - vr5701_irq_base); +} + +static void vr5701_irq_disable (unsigned int irq) +{ +ll_vr5701_irq_disable (irq - vr5701_irq_base,0 ); +} + +static unsigned int vr5701_irq_startup (unsigned int irq) +{ +vr5701_irq_enable (irq); +return 0 ; +} + +static void vr5701_irq_ack (unsigned int irq) +{ +unsigned long flags; +local_irq_save (flags); + +/* clear the interrupt bit for edge trigger */ +/* some irqs require the driver to clear the sources */ +if (irq < vr5701_irq_base +NUM_5701_IRQ ) { +ddb_out32 (INT_CLR ,1 << (irq - vr5701_irq_base)); + } +/* don't need for PCIs, for they are level triger */ + +/* disable interrupt - some handler will re-enable the irq +* and if the interrupt is leveled, we will have infinite loop +*/ +ll_vr5701_irq_disable (irq - vr5701_irq_base,1 ); +local_irq_restore (flags); +} + +static void vr5701_irq_end (unsigned int irq) +{ +unsigned long flags; +local_irq_save (flags); + +if (!(irq_desc[irq].status & (IRQ_DISABLED |IRQ_INPROGRESS ))) { +ll_vr5701_irq_enable (irq - vr5701_irq_base); + } +local_irq_restore (flags); +} + +struct hw_interrupt_type vr5701_irq_type = { +"vr5701_irq" , + vr5701_irq_startup, + vr5701_irq_disable, + vr5701_irq_enable, + vr5701_irq_disable, + vr5701_irq_ack, + vr5701_irq_end, +NULL /* no affinity stuff for UP */ +}; + +void vr5701_irq_init (u32 irq_base) +{ +extern irq_desc_t irq_desc[]; +u32 i; + vr5701_irq_base = irq_base; +for (i = irq_base; + i < irq_base +NUM_5701_IRQ +NUM_EPCI_IRQ +NUM_IPCI_IRQ ; i++) { + irq_desc[i].status =IRQ_DISABLED ; + irq_desc[i].action =0 ; + irq_desc[i].depth =1 ; + irq_desc[i].handler = &vr5701_irq_type; + } +} + +int vr5701_irq_to_irq (int irq) +{ +return irq + vr5701_irq_base; +} + +void ll_vr5701_irq_route (int vr5701_irq,int ip) +{ +u32 reg_value; +u32 reg_bitmask; +u32 reg_index; + +if (vr5701_irq >=NUM_5701_IRQ ) { +if (vr5701_irq >=NUM_5701_IRQ +NUM_EPCI_IRQ ) { + vr5701_irq =7 ; + }else { + vr5701_irq =6 ; + } + } + reg_index =INT_ROUTE0 + vr5701_irq /8 *4 ; + reg_value =ddb_in32 (reg_index); + reg_bitmask =7 << (vr5701_irq %8 *4 ); + reg_value &= ~reg_bitmask; + reg_value |= ip << (vr5701_irq %8 *4 ); +ddb_out32 (reg_index, reg_value); +} + +void ll_vr5701_irq_enable (int vr5701_irq) +{ +u16 reg_value; +u32 reg_bitmask; +unsigned long flags; + +local_irq_save (flags); + irq_desc[vr5701_irq_base + vr5701_irq].depth++; + +if (vr5701_irq >=NUM_5701_IRQ ) { +if (vr5701_irq >=NUM_5701_IRQ +NUM_EPCI_IRQ ) { + reg_value =ddb_in32 (IPCI_INTM ); + reg_bitmask = +1 << (vr5701_irq -NUM_5701_IRQ -NUM_EPCI_IRQ ); +ddb_out32 (IPCI_INTM , reg_value | reg_bitmask); + vr5701_irq =7 ; + }else { + reg_value =ddb_in32 (EPCI_INTM ); + reg_bitmask =1 << (vr5701_irq -NUM_5701_IRQ ); +ddb_out32 (EPCI_INTM , reg_value | reg_bitmask); + vr5701_irq =6 ; + } + } + reg_value =ddb_in32 (INT_MASK ); +ddb_out32 (INT_MASK , reg_value | (1 << vr5701_irq)); +local_irq_restore (flags); +} + +void ll_vr5701_irq_disable (int vr5701_irq,int ack) +{ +u16 reg_value; +u32 udummy; +u32 reg_bitmask; +unsigned long flags; + +local_irq_save (flags); +if (!ack) { + irq_desc[vr5701_irq_base + vr5701_irq].depth--; +if (irq_desc[vr5701_irq_base + vr5701_irq].depth) { +local_irq_restore (flags); +return ; + } + } + +if (vr5701_irq >=NUM_5701_IRQ ) { +if (vr5701_irq >=NUM_5701_IRQ +NUM_EPCI_IRQ ) { + goto DISABLE_IRQ_IPCI; + }else { + goto DISABLE_IRQ_EPCI; + } + } + reg_value =ddb_in32 (INT_MASK ); +ddb_out32 (INT_MASK , reg_value & ~(1 << vr5701_irq)); + udummy =ddb_in32 (INT_MASK ); +local_irq_restore (flags); +return ; + + DISABLE_IRQ_IPCI: + reg_value =ddb_in32 (IPCI_INTM ); + reg_bitmask =1 << (vr5701_irq -NUM_5701_IRQ -NUM_EPCI_IRQ ); +ddb_out32 (IPCI_INTM , reg_value & ~reg_bitmask); +local_irq_restore (flags); +return ; + + DISABLE_IRQ_EPCI: + reg_value =ddb_in32 (EPCI_INTM ); + reg_bitmask =1 << (vr5701_irq -NUM_5701_IRQ ); +ddb_out32 (EPCI_INTM , reg_value & ~reg_bitmask); +local_irq_restore (flags); +}
arch/mips/pci/pci-tcube.c new file +126 -0
126 lines not on this page · raw message
include/asm-mips/serial.h +17 -1
@@ -412,6 +412,21 @@#define DDB5477_SERIAL_PORT_DEFNS #endif +#ifdef CONFIG_TCUBE +#include <asm/tcube.h> +#define TCUBE_SERIAL_PORT_DEFNS \ + { baud_base: BASE_BAUD, irq: 16, flags: STD_COM_FLAGS, \ + iomem_base: (u8*)0xbe000a00, iomem_reg_shift: 3, \ + io_type: SERIAL_IO_MEM},\ + { baud_base: BASE_BAUD, irq: 17, flags: STD_COM_FLAGS, \ + iomem_base: (u8*)0xbe000a40, iomem_reg_shift: 3, \ + io_type: SERIAL_IO_MEM}, +#else +#define TCUBE_SERIAL_PORT_DEFNS +#endif + + +#ifdef CONFIG_SGI_IP32 /* * The IP32 (SGI O2) has standard serial ports (UART 16550A) mapped in memory
@@ -439,6 +454,7 @@MOMENCO_OCELOT_SERIAL_PORT_DEFNS \ MOMENCO_OCELOT_3_SERIAL_PORT_DEFNS \ TXX927_SERIAL_PORT_DEFNS \ - AU1000_SERIAL_PORT_DEFNS + AU1000_SERIAL_PORT_DEFNS \ + TCUBE_SERIAL_PORT_DEFNS#endif /* _ASM_SERIAL_H */
drivers/ide/pci/Makefile +1 -0
@@ -28,6 +28,7 @@ obj-$(CONFIG_BLK_DEV_SLC90E66) += slc90 obj-$(CONFIG_BLK_DEV_TRIFLEX) += triflex.o obj-$(CONFIG_BLK_DEV_TRM290) += trm290.o obj-$(CONFIG_BLK_DEV_VIA82CXXX) += via82cxxx.o +obj-$(CONFIG_BLK_DEV_NEC_VR5701_SG2) += nec_vr5701_sg2.o # Must appear at the end of the block obj-$(CONFIG_BLK_DEV_GENERIC) += generic.o
drivers/ide/pci/nec_vr5701_sg2.c new file +111 -0
111 lines not on this page · raw message
arch/mips/Makefile +11 -0
@@ -183,6 +183,10 @@ cflags-$(CONFIG_CPU_R5432) += \ $(call set_gccflags,r5400,mips4,r5000,mips4,mips2) \ -Wa,--trap +cflags-$(CONFIG_CPU_R5500) += \ + $(call set_gccflags,mips32,mips4,r5000,mips4,mips2) \ + -Wa,--trap + cflags-$(CONFIG_CPU_NEVADA) += \ $(call set_gccflags,rm5200,mips4,r5000,mips4,mips2) \ -Wa,--trap
@@ -472,6 +476,13 @@ load-$(CONFIG_DDB5476) += 0xffffffff800 core-$(CONFIG_DDB5477) += arch/mips/ddb5xxx/ddb5477/ load-$(CONFIG_DDB5477) += 0xffffffff80100000 +# +# NEC TCUBE +# +core-$(CONFIG_TCUBE) += arch/mips/vr5701/common/ +core-$(CONFIG_TCUBE) += arch/mips/vr5701/tcube/ +load-$(CONFIG_TCUBE) += 0xffffffff80080000 + core-$(CONFIG_LASAT) += arch/mips/lasat/ cflags-$(CONFIG_LASAT) += -Iinclude/asm-mips/mach-lasat load-$(CONFIG_LASAT) += 0xffffffff80000000
include/asm-mips/tlb.h +1 -1
@@ -6,7 +6,7 @@* we need to flush cache for area to be unmapped. */ #ifdef CONFIG_PREEMPT_RT -#ifdef CONFIG_CPU_MIPS32 +#if defined(CONFIG_CPU_MIPS32 ) || defined(CONFIG_CPU_R5500 )/* * We need the cache flush in case of such processors, eg. MIPS Malta */
arch/mips/mm/Makefile +1 -0
@@ -18,6 +18,7 @@ obj-$(CONFIG_CPU_R4300) += c-r4k.o cex- obj-$(CONFIG_CPU_R4X00) += c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o obj-$(CONFIG_CPU_R5000) += c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o obj-$(CONFIG_CPU_R5432) += c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o +obj-$(CONFIG_CPU_R5500) += c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o obj-$(CONFIG_CPU_R8000) += c-r4k.o cex-gen.o pg-r4k.o tlb-r8k.o obj-$(CONFIG_CPU_RM7000) += c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o obj-$(CONFIG_CPU_RM9000) += c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o
include/asm-mips/vr5701.h new file +96 -0
96 lines not on this page · raw message
arch/mips/vr5701/tcube/int-handler.S new file +77 -0
77 lines not on this page · raw message
include/asm-mips/tcube.h new file +200 -0
200 lines not on this page · raw message
drivers/video/Makefile +1 -0
@@ -36,6 +36,7 @@ obj-$(CONFIG_FB_I810) += cfb vgastate.o obj-$(CONFIG_FB_INTEL) += cfbfillrect.o cfbcopyarea.o \ cfbimgblt.o +obj-$(CONFIG_FB_SM) += smi/ cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_RADEON_OLD) += radeonfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o obj-$(CONFIG_FB_NEOMAGIC) += neofb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o vgastate.o
arch/mips/kernel/Makefile +1 -0
@@ -34,6 +34,7 @@ obj-$(CONFIG_CPU_R4300) += r4k_fpu.o r4 obj-$(CONFIG_CPU_R4X00) += r4k_fpu.o r4k_switch.o obj-$(CONFIG_CPU_R5000) += r4k_fpu.o r4k_switch.o obj-$(CONFIG_CPU_R5432) += r4k_fpu.o r4k_switch.o +obj-$(CONFIG_CPU_R5500) += r4k_fpu.o r4k_switch.o obj-$(CONFIG_CPU_R8000) += r4k_fpu.o r4k_switch.o obj-$(CONFIG_CPU_RM7000) += r4k_fpu.o r4k_switch.o obj-$(CONFIG_CPU_RM9000) += r4k_fpu.o r4k_switch.o
arch/mips/pci/Makefile +1 -0
@@ -52,3 +52,4 @@ obj-$(CONFIG_TOSHIBA_JMR3927) += fixup-j obj-$(CONFIG_TOSHIBA_RBTX4927) += fixup-rbtx4927.o ops-tx4927.o obj-$(CONFIG_VICTOR_MPC30X) += fixup-mpc30x.o obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o +obj-$(CONFIG_TCUBE) += pci-tcube.o ops-tcube.o
drivers/video/smi/smi_hw.c new file +188 -0
188 lines not on this page · raw message
include/linux/pci_ids.h +6 -0
@@ -555,6 +555,7 @@#define PCI_DEVICE_ID_MIRO_DC30PLUS 0xd801#define PCI_VENDOR_ID_NEC 0x1033 +#define PCI_DEVICE_ID_NEC_USB_AND_IDE 0x0000/* USB 1.1 or IDE Controller*/ #define PCI_DEVICE_ID_NEC_CBUS_1 0x0001/* PCI-Cbus Bridge */ #define PCI_DEVICE_ID_NEC_LOCAL 0x0002/* Local Bridge */ #define PCI_DEVICE_ID_NEC_ATM 0x0003/* ATM LAN Controller */
@@ -1643,6 +1644,11 @@#define PCI_DEVICE_ID_SATSAGEM_PCR2101 0x5352#define PCI_DEVICE_ID_SATSAGEM_TELSATTURBO 0x5a4b +#define PCI_VENDOR_ID_SMI 0x126f +#define PCI_DEVICE_ID_SMI_LYNX_EM 0x0710 +#define PCI_DEVICE_ID_SMI_LYNX_EM_PLUS 0x0712 +#define PCI_DEVICE_ID_SMI_LYNX_3DM 0x0720 +#define PCI_VENDOR_ID_HUGHES 0x1273#define PCI_DEVICE_ID_HUGHES_DIRECPC 0x0002
drivers/video/smi/smi_base.c new file +512 -0
512 lines not on this page · raw message
drivers/video/smi/smi_hw.h new file +197 -0
197 lines not on this page · raw message
arch/mips/Kconfig +16 -0
@@ -449,6 +449,17 @@ config DDB5477_BUS_FREQUENCY depends on DDB5477 default 0 +config TCUBE + bool "Support for NEC Electronics Corporation VR5701 SolutionGearII" + select IRQ_CPU + select HW_HAS_PCI + select DMA_NONCOHERENT + help + This enables support for the VR5500 - based NEC Electronics Corporation + VR5701 SolutionGearII evaluation board. + + + config NEC_OSPREY bool "Support for NEC Osprey board" select DMA_NONCOHERENT
@@ -1204,6 +1215,11 @@ config CPU_R5000 config CPU_R5432 bool "R5432" +config CPU_R5500 + bool "R5500" + help + MIPS Technologies Vr5500 - series processors. + config CPU_R6000 bool "R6000" depends on MIPS32 && EXPERIMENTAL
arch/mips/vr5701/tcube/Makefile new file +7 -0
@@ -0,0 +1,7 @@ +# +# Makefile for the NEC Electronics Corporation VR5701 SolutionGearII specific kernel interface routines +# under Linux. +# + +obj-y += setup.o irq.o int-handler.o irq_vr5701.o +EXTRA_AFLAGS: = $(CFLAGS)
arch/mips/vr5701/common/rtc_rx5c348.c new file +182 -0
182 lines not on this page · raw message
drivers/pci/pci.ids +2 -2
@@ -1451,7 +1451,7 @@ 6057 MiroVideo DC10/DC30+ 1032 Compaq 1033 NEC Corporation - 0000 Vr4181A USB Host or Function Control Unit + 0000 Vr4181A USB Host or IDE Controller 0001 PCI to 486-like bus Bridge 0002 PCI to VL98 Bridge 0003 ATM Controller
@@ -1491,7 +1491,7 @@ 1033 8014 RCV56ACF 56k Voice Modem 009b Vrc5476 00a5 VRC4173 - 00a6 VRC5477 AC97 + 00a6 VRC5477 or VR5701 AC97 Controller 00cd IEEE 1394 [OrangeLink] Host Controller 12ee 8011 Root hub 00ce IEEE 1394 Host Controller
drivers/video/smi/Makefile new file +9 -0
@@ -0,0 +1,9 @@ +# +# Makefile for LynxEM+/EM4+(Silicon Motion Inc.) fb driver for NEC Electronics Corporation VR5701 SolutionGearII +# under Linux. +# + +obj-$(CONFIG_FB_SM) += smfb.o + +smfb-objs := smi_base.o smi_hw.o +
arch/mips/vr5701/tcube/setup.c new file +188 -0
188 lines not on this page · raw message
drivers/ide/Kconfig +7 -0
@@ -836,6 +836,13 @@ config BLK_DEV_GAYLE Note that you also have to enable Zorro bus support if you want to use Gayle IDE interfaces on the Zorro expansion bus. +config BLK_DEV_NEC_VR5701_SG2 + tristate "NEC Electronics Corporation VR5701 SolutionGearII IDE interface support" + depends on TCUBE + help + This is the IDE driver for the NEC Electronics Corporation VR5701 + SolutionGearII IDE interface. + config BLK_DEV_IDEDOUBLER bool "Amiga IDE Doubler support (EXPERIMENTAL)" depends on BLK_DEV_GAYLE && EXPERIMENTAL
arch/mips/vr5701/tcube/irq.c new file +146 -0
146 lines not on this page · raw message
arch/mips/pci/ops-tcube.c new file +267 -0
267 lines not on this page · raw message
arch/mips/vr5701/common/Makefile new file +5 -0
@@ -0,0 +1,5 @@ +# +# Makefile for the common code of NEC Electronics Corporation VR5701 SolutionGearII board +# + +obj-y += nec_vrxxxx.o prom.o rtc_rx5c348.o
include/asm-mips/bootinfo.h +6 -0
@@ -213,6 +213,12 @@#define MACH_GROUP_TITAN 22/* PMC-Sierra Titan */ #define MACH_TITAN_YOSEMITE 1/* PMC-Sierra Yosemite */ +/* +* Valid machtype for group SHIMA +*/ +#define MACH_GROUP_SHIMA 24/* SHIMAFUJI */ +#define MACH_SHIMA_TCUBE 0/* SHIMAFUJI T-Cube(Vr5701) */ +#define CL_SIZE COMMAND_LINE_SIZEconst char *get_system_type (void );
drivers/video/smi/smifb.h new file +89 -0
89 lines not on this page · raw message
arch/mips/mm/tlbex.c +2 -0
@@ -784,6 +784,7 @@ static __init void __attribute__((unusedcase CPU_R5000 :case CPU_R5000A :case CPU_NEVADA : +case CPU_R5500 :i_nop (p);i_tlbp (p);break ;
@@ -831,6 +832,7 @@ static __init void build_tlb_write_entrycase CPU_R4600 :case CPU_R4700 :case CPU_R5000 : +case CPU_R5500 :case CPU_R5000A :case CPU_5KC :case CPU_TX49XX :
arch/mips/vr5701/common/prom.c new file +53 -0
53 lines not on this page · raw message
arch/mips/lib-64/Makefile +1 -0
@@ -13,6 +13,7 @@ obj-$(CONFIG_CPU_R4300) += dump_tlb.o obj-$(CONFIG_CPU_R4X00) += dump_tlb.o obj-$(CONFIG_CPU_R5000) += dump_tlb.o obj-$(CONFIG_CPU_R5432) += dump_tlb.o +obj-$(CONFIG_CPU_R5500) += dump_tlb.o obj-$(CONFIG_CPU_R6000) += obj-$(CONFIG_CPU_R8000) += obj-$(CONFIG_CPU_RM7000) += dump_tlb.o
arch/mips/lib-32/Makefile +1 -0
@@ -13,6 +13,7 @@ obj-$(CONFIG_CPU_R4300) += dump_tlb.o obj-$(CONFIG_CPU_R4X00) += dump_tlb.o obj-$(CONFIG_CPU_R5000) += dump_tlb.o obj-$(CONFIG_CPU_R5432) += dump_tlb.o +obj-$(CONFIG_CPU_R5500) += dump_tlb.o obj-$(CONFIG_CPU_R6000) += obj-$(CONFIG_CPU_R8000) += obj-$(CONFIG_CPU_RM7000) += dump_tlb.o
sound/oss/Kconfig +7 -0
@@ -233,6 +233,13 @@ config SOUND_VRC5477 integrated, multi-function controller chip for MIPS CPUs. Works with the AC97 codec. +config SOUND_VR5701 + tristate "NEC Electronics Corporation VR5701 SolutionGearII AC97 sound" + depends on SOUND_PRIME!=n && TCUBE && SOUND + help + Say Y here to enable sound support for the NEC Electronics Corporation + VR5701 SolutionGearII AC97 sound. Works with the AC97 codec. + config SOUND_AU1000 tristate "Au1000 Sound" depends on SOUND_PRIME!=n && (SOC_AU1000 || SOC_AU1100 || SOC_AU1500) && SOUND
drivers/video/Kconfig +19 -0
@@ -795,6 +795,25 @@ config FB_ATY_GX is at <http://support.ati.com/products/pc/mach64/graphics_xpression.html>. +config FB_SM + tristate "Silicon Motion SM722 support" + depends on FB && PCI + help + SM722 + +choice + prompt "Display size" + depends on FB_SM + default DISPLAY_640x480 + +config DISPLAY_640x480 + bool "640x480" + +config DISPLAY_1024x768 + bool "1024x768" + +endchoice + config FB_SAVAGE tristate "S3 Savage support" depends on FB && PCI && EXPERIMENTAL
arch/mips/kernel/cpu-probe.c +1 -0
@@ -98,6 +98,7 @@ static inline void check_wait(void)case CPU_R4650 :case CPU_R4700 :case CPU_R5000 : +case CPU_R5500 :case CPU_NEVADA :case CPU_RM7000 :case CPU_RM9000 :
drivers/video/smi/smi_params.h new file +442 -0
101 lines not on this page · raw message
arch/mips/vr5701/common/nec_vrxxxx.c new file +119 -0
119 lines not on this page · raw message
sound/oss/nec_vr5701_sg2.c new file +1368 -0
1,368 lines not on this page · raw message
sound/oss/nec_vr5701_sg2.h new file +531 -0
531 lines not on this page · raw message
arch/mips/configs/nec_vr5701_defconfig new file +1250 -0
1,250 lines not on this page · raw message
sound/pci/vr5701/nec_vr5701_sg2.c new file +795 -0
795 lines not on this page · raw message
sound/pci/vr5701/nec_vr5701_sg2.h new file +155 -0
155 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.