162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/arch/sh/boards/sh03/setup.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2004 Interface Co.,Ltd. Saito.K 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/init.h> 1062306a36Sopenharmony_ci#include <linux/irq.h> 1162306a36Sopenharmony_ci#include <linux/pci.h> 1262306a36Sopenharmony_ci#include <linux/platform_device.h> 1362306a36Sopenharmony_ci#include <linux/ata_platform.h> 1462306a36Sopenharmony_ci#include <asm/io.h> 1562306a36Sopenharmony_ci#include <asm/rtc.h> 1662306a36Sopenharmony_ci#include <mach-sh03/mach/io.h> 1762306a36Sopenharmony_ci#include <mach-sh03/mach/sh03.h> 1862306a36Sopenharmony_ci#include <asm/addrspace.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic void __init init_sh03_IRQ(void) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci plat_irq_setup_pins(IRQ_MODE_IRQ); 2362306a36Sopenharmony_ci} 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistatic struct resource cf_ide_resources[] = { 2662306a36Sopenharmony_ci [0] = { 2762306a36Sopenharmony_ci .start = 0x1f0, 2862306a36Sopenharmony_ci .end = 0x1f0 + 8, 2962306a36Sopenharmony_ci .flags = IORESOURCE_IO, 3062306a36Sopenharmony_ci }, 3162306a36Sopenharmony_ci [1] = { 3262306a36Sopenharmony_ci .start = 0x1f0 + 0x206, 3362306a36Sopenharmony_ci .end = 0x1f0 +8 + 0x206 + 8, 3462306a36Sopenharmony_ci .flags = IORESOURCE_IO, 3562306a36Sopenharmony_ci }, 3662306a36Sopenharmony_ci [2] = { 3762306a36Sopenharmony_ci .start = IRL2_IRQ, 3862306a36Sopenharmony_ci .flags = IORESOURCE_IRQ, 3962306a36Sopenharmony_ci }, 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistatic struct platform_device cf_ide_device = { 4362306a36Sopenharmony_ci .name = "pata_platform", 4462306a36Sopenharmony_ci .id = -1, 4562306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(cf_ide_resources), 4662306a36Sopenharmony_ci .resource = cf_ide_resources, 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistatic struct resource heartbeat_resources[] = { 5062306a36Sopenharmony_ci [0] = { 5162306a36Sopenharmony_ci .start = 0xa0800000, 5262306a36Sopenharmony_ci .end = 0xa0800000, 5362306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 5462306a36Sopenharmony_ci }, 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistatic struct platform_device heartbeat_device = { 5862306a36Sopenharmony_ci .name = "heartbeat", 5962306a36Sopenharmony_ci .id = -1, 6062306a36Sopenharmony_ci .num_resources = ARRAY_SIZE(heartbeat_resources), 6162306a36Sopenharmony_ci .resource = heartbeat_resources, 6262306a36Sopenharmony_ci}; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistatic struct platform_device *sh03_devices[] __initdata = { 6562306a36Sopenharmony_ci &heartbeat_device, 6662306a36Sopenharmony_ci &cf_ide_device, 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cistatic int __init sh03_devices_setup(void) 7062306a36Sopenharmony_ci{ 7162306a36Sopenharmony_ci pgprot_t prot; 7262306a36Sopenharmony_ci unsigned long paddrbase; 7362306a36Sopenharmony_ci void *cf_ide_base; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci /* open I/O area window */ 7662306a36Sopenharmony_ci paddrbase = virt_to_phys((void *)PA_AREA5_IO); 7762306a36Sopenharmony_ci prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); 7862306a36Sopenharmony_ci cf_ide_base = ioremap_prot(paddrbase, PAGE_SIZE, pgprot_val(prot)); 7962306a36Sopenharmony_ci if (!cf_ide_base) { 8062306a36Sopenharmony_ci printk("allocate_cf_area : can't open CF I/O window!\n"); 8162306a36Sopenharmony_ci return -ENOMEM; 8262306a36Sopenharmony_ci } 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci /* IDE cmd address : 0x1f0-0x1f7 and 0x3f6 */ 8562306a36Sopenharmony_ci cf_ide_resources[0].start += (unsigned long)cf_ide_base; 8662306a36Sopenharmony_ci cf_ide_resources[0].end += (unsigned long)cf_ide_base; 8762306a36Sopenharmony_ci cf_ide_resources[1].start += (unsigned long)cf_ide_base; 8862306a36Sopenharmony_ci cf_ide_resources[1].end += (unsigned long)cf_ide_base; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci return platform_add_devices(sh03_devices, ARRAY_SIZE(sh03_devices)); 9162306a36Sopenharmony_ci} 9262306a36Sopenharmony_cidevice_initcall(sh03_devices_setup); 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_cistatic struct sh_machine_vector mv_sh03 __initmv = { 9562306a36Sopenharmony_ci .mv_name = "Interface (CTP/PCI-SH03)", 9662306a36Sopenharmony_ci .mv_init_irq = init_sh03_IRQ, 9762306a36Sopenharmony_ci}; 98