Path: blob/master/arch/sh/kernel/cpu/sh3/setup-sh7710.c
17525 views
/*1* SH3 Setup code for SH7710, SH77122*3* Copyright (C) 2006 - 2009 Paul Mundt4* Copyright (C) 2007 Nobuhiro Iwamatsu5*6* This file is subject to the terms and conditions of the GNU General Public7* License. See the file "COPYING" in the main directory of this archive8* for more details.9*/10#include <linux/platform_device.h>11#include <linux/init.h>12#include <linux/irq.h>13#include <linux/serial.h>14#include <linux/serial_sci.h>15#include <linux/sh_timer.h>16#include <asm/rtc.h>1718enum {19UNUSED = 0,2021/* interrupt sources */22IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5,23DMAC1, SCIF0, SCIF1, DMAC2, IPSEC,24EDMAC0, EDMAC1, EDMAC2,25SIOF0, SIOF1,2627TMU0, TMU1, TMU2,28RTC, WDT, REF,29};3031static struct intc_vect vectors[] __initdata = {32/* IRQ0->5 are handled in setup-sh3.c */33INTC_VECT(DMAC1, 0x800), INTC_VECT(DMAC1, 0x820),34INTC_VECT(DMAC1, 0x840), INTC_VECT(DMAC1, 0x860),35INTC_VECT(SCIF0, 0x880), INTC_VECT(SCIF0, 0x8a0),36INTC_VECT(SCIF0, 0x8c0), INTC_VECT(SCIF0, 0x8e0),37INTC_VECT(SCIF1, 0x900), INTC_VECT(SCIF1, 0x920),38INTC_VECT(SCIF1, 0x940), INTC_VECT(SCIF1, 0x960),39INTC_VECT(DMAC2, 0xb80), INTC_VECT(DMAC2, 0xba0),40#ifdef CONFIG_CPU_SUBTYPE_SH771041INTC_VECT(IPSEC, 0xbe0),42#endif43INTC_VECT(EDMAC0, 0xc00), INTC_VECT(EDMAC1, 0xc20),44INTC_VECT(EDMAC2, 0xc40),45INTC_VECT(SIOF0, 0xe00), INTC_VECT(SIOF0, 0xe20),46INTC_VECT(SIOF0, 0xe40), INTC_VECT(SIOF0, 0xe60),47INTC_VECT(SIOF1, 0xe80), INTC_VECT(SIOF1, 0xea0),48INTC_VECT(SIOF1, 0xec0), INTC_VECT(SIOF1, 0xee0),49INTC_VECT(TMU0, 0x400), INTC_VECT(TMU1, 0x420),50INTC_VECT(TMU2, 0x440),51INTC_VECT(RTC, 0x480), INTC_VECT(RTC, 0x4a0),52INTC_VECT(RTC, 0x4c0),53INTC_VECT(WDT, 0x560),54INTC_VECT(REF, 0x580),55};5657static struct intc_prio_reg prio_registers[] __initdata = {58{ 0xfffffee2, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },59{ 0xfffffee4, 0, 16, 4, /* IPRB */ { WDT, REF, 0, 0 } },60{ 0xa4000016, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },61{ 0xa4000018, 0, 16, 4, /* IPRD */ { 0, 0, IRQ5, IRQ4 } },62{ 0xa400001a, 0, 16, 4, /* IPRE */ { DMAC1, SCIF0, SCIF1 } },63{ 0xa4080000, 0, 16, 4, /* IPRF */ { IPSEC, DMAC2 } },64{ 0xa4080002, 0, 16, 4, /* IPRG */ { EDMAC0, EDMAC1, EDMAC2 } },65{ 0xa4080004, 0, 16, 4, /* IPRH */ { 0, 0, 0, SIOF0 } },66{ 0xa4080006, 0, 16, 4, /* IPRI */ { 0, 0, SIOF1 } },67};6869static DECLARE_INTC_DESC(intc_desc, "sh7710", vectors, NULL,70NULL, prio_registers, NULL);7172static struct resource rtc_resources[] = {73[0] = {74.start = 0xa413fec0,75.end = 0xa413fec0 + 0x1e,76.flags = IORESOURCE_IO,77},78[1] = {79.start = 20,80.flags = IORESOURCE_IRQ,81},82};8384static struct sh_rtc_platform_info rtc_info = {85.capabilities = RTC_CAP_4_DIGIT_YEAR,86};8788static struct platform_device rtc_device = {89.name = "sh-rtc",90.id = -1,91.num_resources = ARRAY_SIZE(rtc_resources),92.resource = rtc_resources,93.dev = {94.platform_data = &rtc_info,95},96};9798static struct plat_sci_port scif0_platform_data = {99.mapbase = 0xa4400000,100.flags = UPF_BOOT_AUTOCONF,101.scscr = SCSCR_TE | SCSCR_RE | SCSCR_REIE |102SCSCR_CKE1 | SCSCR_CKE0,103.scbrr_algo_id = SCBRR_ALGO_2,104.type = PORT_SCIF,105.irqs = { 52, 52, 52, 52 },106};107108static struct platform_device scif0_device = {109.name = "sh-sci",110.id = 0,111.dev = {112.platform_data = &scif0_platform_data,113},114};115116static struct plat_sci_port scif1_platform_data = {117.mapbase = 0xa4410000,118.flags = UPF_BOOT_AUTOCONF,119.scscr = SCSCR_TE | SCSCR_RE | SCSCR_REIE |120SCSCR_CKE1 | SCSCR_CKE0,121.scbrr_algo_id = SCBRR_ALGO_2,122.type = PORT_SCIF,123.irqs = { 56, 56, 56, 56 },124};125126static struct platform_device scif1_device = {127.name = "sh-sci",128.id = 1,129.dev = {130.platform_data = &scif1_platform_data,131},132};133134static struct sh_timer_config tmu0_platform_data = {135.channel_offset = 0x02,136.timer_bit = 0,137.clockevent_rating = 200,138};139140static struct resource tmu0_resources[] = {141[0] = {142.start = 0xa412fe94,143.end = 0xa412fe9f,144.flags = IORESOURCE_MEM,145},146[1] = {147.start = 16,148.flags = IORESOURCE_IRQ,149},150};151152static struct platform_device tmu0_device = {153.name = "sh_tmu",154.id = 0,155.dev = {156.platform_data = &tmu0_platform_data,157},158.resource = tmu0_resources,159.num_resources = ARRAY_SIZE(tmu0_resources),160};161162static struct sh_timer_config tmu1_platform_data = {163.channel_offset = 0xe,164.timer_bit = 1,165.clocksource_rating = 200,166};167168static struct resource tmu1_resources[] = {169[0] = {170.start = 0xa412fea0,171.end = 0xa412feab,172.flags = IORESOURCE_MEM,173},174[1] = {175.start = 17,176.flags = IORESOURCE_IRQ,177},178};179180static struct platform_device tmu1_device = {181.name = "sh_tmu",182.id = 1,183.dev = {184.platform_data = &tmu1_platform_data,185},186.resource = tmu1_resources,187.num_resources = ARRAY_SIZE(tmu1_resources),188};189190static struct sh_timer_config tmu2_platform_data = {191.channel_offset = 0x1a,192.timer_bit = 2,193};194195static struct resource tmu2_resources[] = {196[0] = {197.start = 0xa412feac,198.end = 0xa412feb5,199.flags = IORESOURCE_MEM,200},201[1] = {202.start = 18,203.flags = IORESOURCE_IRQ,204},205};206207static struct platform_device tmu2_device = {208.name = "sh_tmu",209.id = 2,210.dev = {211.platform_data = &tmu2_platform_data,212},213.resource = tmu2_resources,214.num_resources = ARRAY_SIZE(tmu2_resources),215};216217static struct platform_device *sh7710_devices[] __initdata = {218&scif0_device,219&scif1_device,220&tmu0_device,221&tmu1_device,222&tmu2_device,223&rtc_device,224};225226static int __init sh7710_devices_setup(void)227{228return platform_add_devices(sh7710_devices,229ARRAY_SIZE(sh7710_devices));230}231arch_initcall(sh7710_devices_setup);232233static struct platform_device *sh7710_early_devices[] __initdata = {234&scif0_device,235&scif1_device,236&tmu0_device,237&tmu1_device,238&tmu2_device,239};240241void __init plat_early_device_setup(void)242{243early_platform_add_devices(sh7710_early_devices,244ARRAY_SIZE(sh7710_early_devices));245}246247void __init plat_irq_setup(void)248{249register_intc_controller(&intc_desc);250plat_irq_setup_sh3();251}252253254