18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * linux/arch/sh/boards/lbox/setup.c
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2007 Nobuhiro Iwamatsu
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * NTT COMWARE L-BOX RE2 Support
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/init.h>
118c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
128c2ecf20Sopenharmony_ci#include <linux/ata_platform.h>
138c2ecf20Sopenharmony_ci#include <asm/machvec.h>
148c2ecf20Sopenharmony_ci#include <asm/addrspace.h>
158c2ecf20Sopenharmony_ci#include <mach/lboxre2.h>
168c2ecf20Sopenharmony_ci#include <asm/io.h>
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistatic struct resource cf_ide_resources[] = {
198c2ecf20Sopenharmony_ci	[0] = {
208c2ecf20Sopenharmony_ci		.start  = 0x1f0,
218c2ecf20Sopenharmony_ci		.end    = 0x1f0 + 8 ,
228c2ecf20Sopenharmony_ci		.flags  = IORESOURCE_IO,
238c2ecf20Sopenharmony_ci	},
248c2ecf20Sopenharmony_ci	[1] = {
258c2ecf20Sopenharmony_ci		.start  = 0x1f0 + 0x206,
268c2ecf20Sopenharmony_ci		.end    = 0x1f0 +8 + 0x206 + 8,
278c2ecf20Sopenharmony_ci		.flags  = IORESOURCE_IO,
288c2ecf20Sopenharmony_ci	},
298c2ecf20Sopenharmony_ci	[2] = {
308c2ecf20Sopenharmony_ci		.start  = IRQ_CF0,
318c2ecf20Sopenharmony_ci		.flags  = IORESOURCE_IRQ,
328c2ecf20Sopenharmony_ci	},
338c2ecf20Sopenharmony_ci};
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_cistatic struct platform_device cf_ide_device  = {
368c2ecf20Sopenharmony_ci	.name           = "pata_platform",
378c2ecf20Sopenharmony_ci	.id             = -1,
388c2ecf20Sopenharmony_ci	.num_resources  = ARRAY_SIZE(cf_ide_resources),
398c2ecf20Sopenharmony_ci	.resource       = cf_ide_resources,
408c2ecf20Sopenharmony_ci};
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cistatic struct platform_device *lboxre2_devices[] __initdata = {
438c2ecf20Sopenharmony_ci       &cf_ide_device,
448c2ecf20Sopenharmony_ci};
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_cistatic int __init lboxre2_devices_setup(void)
478c2ecf20Sopenharmony_ci{
488c2ecf20Sopenharmony_ci	u32 cf0_io_base;	/* Boot CF base address */
498c2ecf20Sopenharmony_ci	pgprot_t prot;
508c2ecf20Sopenharmony_ci	unsigned long paddrbase, psize;
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci	/* open I/O area window */
538c2ecf20Sopenharmony_ci	paddrbase = virt_to_phys((void*)PA_AREA5_IO);
548c2ecf20Sopenharmony_ci	psize = PAGE_SIZE;
558c2ecf20Sopenharmony_ci	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16);
568c2ecf20Sopenharmony_ci	cf0_io_base = (u32)ioremap_prot(paddrbase, psize, pgprot_val(prot));
578c2ecf20Sopenharmony_ci	if (!cf0_io_base) {
588c2ecf20Sopenharmony_ci		printk(KERN_ERR "%s : can't open CF I/O window!\n" , __func__ );
598c2ecf20Sopenharmony_ci		return -ENOMEM;
608c2ecf20Sopenharmony_ci	}
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci	cf_ide_resources[0].start += cf0_io_base ;
638c2ecf20Sopenharmony_ci	cf_ide_resources[0].end   += cf0_io_base ;
648c2ecf20Sopenharmony_ci	cf_ide_resources[1].start += cf0_io_base ;
658c2ecf20Sopenharmony_ci	cf_ide_resources[1].end   += cf0_io_base ;
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci	return platform_add_devices(lboxre2_devices,
688c2ecf20Sopenharmony_ci			ARRAY_SIZE(lboxre2_devices));
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ci}
718c2ecf20Sopenharmony_cidevice_initcall(lboxre2_devices_setup);
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci/*
748c2ecf20Sopenharmony_ci * The Machine Vector
758c2ecf20Sopenharmony_ci */
768c2ecf20Sopenharmony_cistatic struct sh_machine_vector mv_lboxre2 __initmv = {
778c2ecf20Sopenharmony_ci	.mv_name		= "L-BOX RE2",
788c2ecf20Sopenharmony_ci	.mv_init_irq		= init_lboxre2_IRQ,
798c2ecf20Sopenharmony_ci};
80