Path: blob/master/arch/sh/boards/mach-se/770x/setup.c
15162 views
/*1* linux/arch/sh/boards/se/770x/setup.c2*3* Copyright (C) 2000 Kazumoto Kojima4*5* Hitachi SolutionEngine Support.6*7*/8#include <linux/init.h>9#include <linux/platform_device.h>10#include <mach-se/mach/se.h>11#include <mach-se/mach/mrshpc.h>12#include <asm/machvec.h>13#include <asm/io.h>14#include <asm/smc37c93x.h>15#include <asm/heartbeat.h>1617/*18* Configure the Super I/O chip19*/20static void __init smsc_config(int index, int data)21{22outb_p(index, INDEX_PORT);23outb_p(data, DATA_PORT);24}2526/* XXX: Another candidate for a more generic cchip machine vector */27static void __init smsc_setup(char **cmdline_p)28{29outb_p(CONFIG_ENTER, CONFIG_PORT);30outb_p(CONFIG_ENTER, CONFIG_PORT);3132/* FDC */33smsc_config(CURRENT_LDN_INDEX, LDN_FDC);34smsc_config(ACTIVATE_INDEX, 0x01);35smsc_config(IRQ_SELECT_INDEX, 6); /* IRQ6 */3637/* AUXIO (GPIO): to use IDE1 */38smsc_config(CURRENT_LDN_INDEX, LDN_AUXIO);39smsc_config(GPIO46_INDEX, 0x00); /* nIOROP */40smsc_config(GPIO47_INDEX, 0x00); /* nIOWOP */4142/* COM1 */43smsc_config(CURRENT_LDN_INDEX, LDN_COM1);44smsc_config(ACTIVATE_INDEX, 0x01);45smsc_config(IO_BASE_HI_INDEX, 0x03);46smsc_config(IO_BASE_LO_INDEX, 0xf8);47smsc_config(IRQ_SELECT_INDEX, 4); /* IRQ4 */4849/* COM2 */50smsc_config(CURRENT_LDN_INDEX, LDN_COM2);51smsc_config(ACTIVATE_INDEX, 0x01);52smsc_config(IO_BASE_HI_INDEX, 0x02);53smsc_config(IO_BASE_LO_INDEX, 0xf8);54smsc_config(IRQ_SELECT_INDEX, 3); /* IRQ3 */5556/* RTC */57smsc_config(CURRENT_LDN_INDEX, LDN_RTC);58smsc_config(ACTIVATE_INDEX, 0x01);59smsc_config(IRQ_SELECT_INDEX, 8); /* IRQ8 */6061/* XXX: PARPORT, KBD, and MOUSE will come here... */62outb_p(CONFIG_EXIT, CONFIG_PORT);63}646566static struct resource cf_ide_resources[] = {67[0] = {68.start = PA_MRSHPC_IO + 0x1f0,69.end = PA_MRSHPC_IO + 0x1f0 + 8,70.flags = IORESOURCE_MEM,71},72[1] = {73.start = PA_MRSHPC_IO + 0x1f0 + 0x206,74.end = PA_MRSHPC_IO + 0x1f0 + 8 + 0x206 + 8,75.flags = IORESOURCE_MEM,76},77[2] = {78.start = IRQ_CFCARD,79.flags = IORESOURCE_IRQ,80},81};8283static struct platform_device cf_ide_device = {84.name = "pata_platform",85.id = -1,86.num_resources = ARRAY_SIZE(cf_ide_resources),87.resource = cf_ide_resources,88};8990static unsigned char heartbeat_bit_pos[] = { 8, 9, 10, 11, 12, 13, 14, 15 };9192static struct heartbeat_data heartbeat_data = {93.bit_pos = heartbeat_bit_pos,94.nr_bits = ARRAY_SIZE(heartbeat_bit_pos),95};9697static struct resource heartbeat_resource = {98.start = PA_LED,99.end = PA_LED,100.flags = IORESOURCE_MEM | IORESOURCE_MEM_16BIT,101};102103static struct platform_device heartbeat_device = {104.name = "heartbeat",105.id = -1,106.dev = {107.platform_data = &heartbeat_data,108},109.num_resources = 1,110.resource = &heartbeat_resource,111};112113#if defined(CONFIG_CPU_SUBTYPE_SH7710) ||\114defined(CONFIG_CPU_SUBTYPE_SH7712)115/* SH771X Ethernet driver */116static struct resource sh_eth0_resources[] = {117[0] = {118.start = SH_ETH0_BASE,119.end = SH_ETH0_BASE + 0x1B8,120.flags = IORESOURCE_MEM,121},122[1] = {123.start = SH_ETH0_IRQ,124.end = SH_ETH0_IRQ,125.flags = IORESOURCE_IRQ,126},127};128129static struct platform_device sh_eth0_device = {130.name = "sh-eth",131.id = 0,132.dev = {133.platform_data = PHY_ID,134},135.num_resources = ARRAY_SIZE(sh_eth0_resources),136.resource = sh_eth0_resources,137};138139static struct resource sh_eth1_resources[] = {140[0] = {141.start = SH_ETH1_BASE,142.end = SH_ETH1_BASE + 0x1B8,143.flags = IORESOURCE_MEM,144},145[1] = {146.start = SH_ETH1_IRQ,147.end = SH_ETH1_IRQ,148.flags = IORESOURCE_IRQ,149},150};151152static struct platform_device sh_eth1_device = {153.name = "sh-eth",154.id = 1,155.dev = {156.platform_data = PHY_ID,157},158.num_resources = ARRAY_SIZE(sh_eth1_resources),159.resource = sh_eth1_resources,160};161#endif162163static struct platform_device *se_devices[] __initdata = {164&heartbeat_device,165&cf_ide_device,166#if defined(CONFIG_CPU_SUBTYPE_SH7710) ||\167defined(CONFIG_CPU_SUBTYPE_SH7712)168&sh_eth0_device,169&sh_eth1_device,170#endif171};172173static int __init se_devices_setup(void)174{175mrshpc_setup_windows();176return platform_add_devices(se_devices, ARRAY_SIZE(se_devices));177}178device_initcall(se_devices_setup);179180/*181* The Machine Vector182*/183static struct sh_machine_vector mv_se __initmv = {184.mv_name = "SolutionEngine",185.mv_setup = smsc_setup,186#if defined(CONFIG_CPU_SH4)187.mv_nr_irqs = 48,188#elif defined(CONFIG_CPU_SUBTYPE_SH7708)189.mv_nr_irqs = 32,190#elif defined(CONFIG_CPU_SUBTYPE_SH7709)191.mv_nr_irqs = 61,192#elif defined(CONFIG_CPU_SUBTYPE_SH7705)193.mv_nr_irqs = 86,194#elif defined(CONFIG_CPU_SUBTYPE_SH7710) || defined(CONFIG_CPU_SUBTYPE_SH7712)195.mv_nr_irqs = 104,196#endif197.mv_init_irq = init_se_IRQ,198};199200201