-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Nobuhiro Iwamatsu
authored and
Paul Mundt
committed
May 7, 2007
1 parent
19f091a
commit 560dbf6
Showing
11 changed files
with
1,687 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: cd6c7ea234dc8a8607283e056d8010b2bd3c6369 | ||
refs/heads/master: b75762302e144b73f12b72c59b99401d036680aa |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# | ||
# Makefile for the HITACHI UL SolutionEngine 7780 specific parts of the kernel | ||
# | ||
# 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. | ||
# | ||
# | ||
|
||
obj-y := setup.o irq.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
/* | ||
* linux/arch/sh/boards/se/7780/irq.c | ||
* | ||
* Copyright (C) 2006,2007 Nobuhiro Iwamatsu | ||
* | ||
* Hitachi UL SolutionEngine 7780 Support. | ||
* | ||
* 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. | ||
*/ | ||
#include <linux/init.h> | ||
#include <linux/irq.h> | ||
#include <linux/interrupt.h> | ||
#include <asm/irq.h> | ||
#include <asm/io.h> | ||
#include <asm/se7780.h> | ||
|
||
#define INTC_INTMSK0 0xFFD00044 | ||
#define INTC_INTMSKCLR0 0xFFD00064 | ||
|
||
static void disable_se7780_irq(unsigned int irq) | ||
{ | ||
struct intc2_data *p = get_irq_chip_data(irq); | ||
ctrl_outl(1 << p->msk_shift, INTC_INTMSK0 + p->msk_offset); | ||
} | ||
|
||
static void enable_se7780_irq(unsigned int irq) | ||
{ | ||
struct intc2_data *p = get_irq_chip_data(irq); | ||
ctrl_outl(1 << p->msk_shift, INTC_INTMSKCLR0 + p->msk_offset); | ||
} | ||
|
||
static struct irq_chip se7780_irq_chip __read_mostly = { | ||
.name = "SE7780", | ||
.mask = disable_se7780_irq, | ||
.unmask = enable_se7780_irq, | ||
.mask_ack = disable_se7780_irq, | ||
}; | ||
|
||
static struct intc2_data intc2_irq_table[] = { | ||
{ 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT1 */ | ||
{ 4, 0, 30, 0, 30, 3 }, /* daughter board EXTINT2 */ | ||
{ 6, 0, 29, 0, 29, 3 }, /* daughter board EXTINT3 */ | ||
{ 8, 0, 28, 0, 28, 3 }, /* SMC 91C111 (LAN) */ | ||
{ 10, 0, 27, 0, 27, 3 }, /* daughter board EXTINT4 */ | ||
{ 4, 0, 30, 0, 30, 3 }, /* daughter board EXTINT5 */ | ||
{ 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT6 */ | ||
{ 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT7 */ | ||
{ 2, 0, 31, 0, 31, 3 }, /* daughter board EXTINT8 */ | ||
{ 0 , 0, 24, 0, 24, 3 }, /* SM501 */ | ||
}; | ||
|
||
/* | ||
* Initialize IRQ setting | ||
*/ | ||
void __init init_se7780_IRQ(void) | ||
{ | ||
int i ; | ||
|
||
/* enable all interrupt at FPGA */ | ||
ctrl_outw(0, FPGA_INTMSK1); | ||
/* mask SM501 interrupt */ | ||
ctrl_outw((ctrl_inw(FPGA_INTMSK1) | 0x0002), FPGA_INTMSK1); | ||
/* enable all interrupt at FPGA */ | ||
ctrl_outw(0, FPGA_INTMSK2); | ||
|
||
/* set FPGA INTSEL register */ | ||
/* FPGA + 0x06 */ | ||
ctrl_outw( ((IRQPIN_SM501 << IRQPOS_SM501) | | ||
(IRQPIN_SMC91CX << IRQPOS_SMC91CX)), FPGA_INTSEL1); | ||
|
||
/* FPGA + 0x08 */ | ||
ctrl_outw(((IRQPIN_EXTINT4 << IRQPOS_EXTINT4) | | ||
(IRQPIN_EXTINT3 << IRQPOS_EXTINT3) | | ||
(IRQPIN_EXTINT2 << IRQPOS_EXTINT2) | | ||
(IRQPIN_EXTINT1 << IRQPOS_EXTINT1)), FPGA_INTSEL2); | ||
|
||
/* FPGA + 0x0A */ | ||
ctrl_outw((IRQPIN_PCCPW << IRQPOS_PCCPW), FPGA_INTSEL3); | ||
|
||
for (i = 0; i < ARRAY_SIZE(intc2_irq_table); i++) { | ||
disable_irq_nosync(intc2_irq_table[i].irq); | ||
set_irq_chip_and_handler_name( intc2_irq_table[i].irq, &se7780_irq_chip, | ||
handle_level_irq, "level"); | ||
set_irq_chip_data( intc2_irq_table[i].irq, &intc2_irq_table[i] ); | ||
disable_se7780_irq(intc2_irq_table[i].irq); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
/* | ||
* linux/arch/sh/boards/se/7780/setup.c | ||
* | ||
* Copyright (C) 2006,2007 Nobuhiro Iwamatsu | ||
* | ||
* Hitachi UL SolutionEngine 7780 Support. | ||
* | ||
* 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. | ||
*/ | ||
#include <linux/init.h> | ||
#include <linux/platform_device.h> | ||
#include <asm/machvec.h> | ||
#include <asm/se7780.h> | ||
#include <asm/io.h> | ||
|
||
/* Heartbeat */ | ||
static unsigned char heartbeat_bit_pos[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; | ||
|
||
static struct resource heartbeat_resources[] = { | ||
[0] = { | ||
.start = PA_LED, | ||
.end = PA_LED + ARRAY_SIZE(heartbeat_bit_pos) - 1, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
}; | ||
|
||
static struct platform_device heartbeat_device = { | ||
.name = "heartbeat", | ||
.id = -1, | ||
.dev = { | ||
.platform_data = heartbeat_bit_pos, | ||
}, | ||
.num_resources = ARRAY_SIZE(heartbeat_resources), | ||
.resource = heartbeat_resources, | ||
}; | ||
|
||
/* SMC91x */ | ||
static struct resource smc91x_eth_resources[] = { | ||
[0] = { | ||
.name = "smc91x-regs" , | ||
.start = PA_LAN + 0x300, | ||
.end = PA_LAN + 0x300 + 0x10 , | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { | ||
.start = SMC_IRQ, | ||
.end = SMC_IRQ, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
}; | ||
|
||
static struct platform_device smc91x_eth_device = { | ||
.name = "smc91x", | ||
.id = 0, | ||
.dev = { | ||
.dma_mask = NULL, /* don't use dma */ | ||
.coherent_dma_mask = 0xffffffff, | ||
}, | ||
.num_resources = ARRAY_SIZE(smc91x_eth_resources), | ||
.resource = smc91x_eth_resources, | ||
}; | ||
|
||
static struct platform_device *se7780_devices[] __initdata = { | ||
&heartbeat_device, | ||
&smc91x_eth_device, | ||
}; | ||
|
||
static int __init se7780_devices_setup(void) | ||
{ | ||
return platform_add_devices(se7780_devices, | ||
ARRAY_SIZE(se7780_devices)); | ||
} | ||
device_initcall(se7780_devices_setup); | ||
|
||
#define GPIO_PHCR 0xFFEA000E | ||
#define GPIO_PMSELR 0xFFEA0080 | ||
#define GPIO_PECR 0xFFEA0008 | ||
|
||
static void __init se7780_setup(char **cmdline_p) | ||
{ | ||
/* "SH-Linux" on LED Display */ | ||
ctrl_outw( 'S' , PA_LED_DISP + (DISP_SEL0_ADDR << 1) ); | ||
ctrl_outw( 'H' , PA_LED_DISP + (DISP_SEL1_ADDR << 1) ); | ||
ctrl_outw( '-' , PA_LED_DISP + (DISP_SEL2_ADDR << 1) ); | ||
ctrl_outw( 'L' , PA_LED_DISP + (DISP_SEL3_ADDR << 1) ); | ||
ctrl_outw( 'i' , PA_LED_DISP + (DISP_SEL4_ADDR << 1) ); | ||
ctrl_outw( 'n' , PA_LED_DISP + (DISP_SEL5_ADDR << 1) ); | ||
ctrl_outw( 'u' , PA_LED_DISP + (DISP_SEL6_ADDR << 1) ); | ||
ctrl_outw( 'x' , PA_LED_DISP + (DISP_SEL7_ADDR << 1) ); | ||
|
||
printk(KERN_INFO "Hitachi UL Solutions Engine 7780SE03 support.\n"); | ||
|
||
/* | ||
* PCI REQ/GNT setting | ||
* REQ0/GNT0 -> USB | ||
* REQ1/GNT1 -> PC Card | ||
* REQ2/GNT2 -> Serial ATA | ||
* REQ3/GNT3 -> PCI slot | ||
*/ | ||
ctrl_outw(0x0213, FPGA_REQSEL); | ||
|
||
/* GPIO setting */ | ||
ctrl_outw(0x0000, GPIO_PECR); | ||
ctrl_outw(ctrl_inw(GPIO_PHCR)&0xfff3, GPIO_PHCR); | ||
ctrl_outw(0x0c00, GPIO_PMSELR); | ||
|
||
/* iVDR Power ON */ | ||
ctrl_outw(0x0001, FPGA_IVDRPW); | ||
} | ||
|
||
/* | ||
* The Machine Vector | ||
*/ | ||
struct sh_machine_vector mv_se7780 __initmv = { | ||
.mv_name = "Solution Engine 7780" , | ||
.mv_setup = se7780_setup , | ||
.mv_nr_irqs = 111 , | ||
.mv_init_irq = init_se7780_IRQ, | ||
}; | ||
ALIAS_MV(se7780) |
Oops, something went wrong.