162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2002 David McCullough <davidm@snapgear.com> 462306a36Sopenharmony_ci * Copyright (C) 2003 Paul Mundt <lethal@linux-sh.org> 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Based on files with the following comments: 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright (C) 2000 Kazumoto Kojima 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Modified for 7751 Solution Engine by 1162306a36Sopenharmony_ci * Ian da Silva and Jeremy Siegel, 2001. 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci#include <linux/init.h> 1462306a36Sopenharmony_ci#include <linux/irq.h> 1562306a36Sopenharmony_ci#include <linux/interrupt.h> 1662306a36Sopenharmony_ci#include <linux/timer.h> 1762306a36Sopenharmony_ci#include <linux/delay.h> 1862306a36Sopenharmony_ci#include <linux/sched.h> 1962306a36Sopenharmony_ci#include <asm/machvec.h> 2062306a36Sopenharmony_ci#include <mach/secureedge5410.h> 2162306a36Sopenharmony_ci#include <asm/irq.h> 2262306a36Sopenharmony_ci#include <asm/io.h> 2362306a36Sopenharmony_ci#include <cpu/timer.h> 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciunsigned short secureedge5410_ioport; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* 2862306a36Sopenharmony_ci * EraseConfig handling functions 2962306a36Sopenharmony_ci */ 3062306a36Sopenharmony_cistatic irqreturn_t eraseconfig_interrupt(int irq, void *dev_id) 3162306a36Sopenharmony_ci{ 3262306a36Sopenharmony_ci printk("SnapGear: erase switch interrupt!\n"); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci return IRQ_HANDLED; 3562306a36Sopenharmony_ci} 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistatic int __init eraseconfig_init(void) 3862306a36Sopenharmony_ci{ 3962306a36Sopenharmony_ci unsigned int irq = evt2irq(0x240); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci printk("SnapGear: EraseConfig init\n"); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci /* Setup "EraseConfig" switch on external IRQ 0 */ 4462306a36Sopenharmony_ci if (request_irq(irq, eraseconfig_interrupt, 0, "Erase Config", NULL)) 4562306a36Sopenharmony_ci printk("SnapGear: failed to register IRQ%d for Reset witch\n", 4662306a36Sopenharmony_ci irq); 4762306a36Sopenharmony_ci else 4862306a36Sopenharmony_ci printk("SnapGear: registered EraseConfig switch on IRQ%d\n", 4962306a36Sopenharmony_ci irq); 5062306a36Sopenharmony_ci return 0; 5162306a36Sopenharmony_ci} 5262306a36Sopenharmony_cidevice_initcall(eraseconfig_init); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci/* 5562306a36Sopenharmony_ci * Initialize IRQ setting 5662306a36Sopenharmony_ci * 5762306a36Sopenharmony_ci * IRL0 = erase switch 5862306a36Sopenharmony_ci * IRL1 = eth0 5962306a36Sopenharmony_ci * IRL2 = eth1 6062306a36Sopenharmony_ci * IRL3 = crypto 6162306a36Sopenharmony_ci */ 6262306a36Sopenharmony_cistatic void __init init_snapgear_IRQ(void) 6362306a36Sopenharmony_ci{ 6462306a36Sopenharmony_ci printk("Setup SnapGear IRQ/IPR ...\n"); 6562306a36Sopenharmony_ci /* enable individual interrupt mode for externals */ 6662306a36Sopenharmony_ci plat_irq_setup_pins(IRQ_MODE_IRQ); 6762306a36Sopenharmony_ci} 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci/* 7062306a36Sopenharmony_ci * The Machine Vector 7162306a36Sopenharmony_ci */ 7262306a36Sopenharmony_cistatic struct sh_machine_vector mv_snapgear __initmv = { 7362306a36Sopenharmony_ci .mv_name = "SnapGear SecureEdge5410", 7462306a36Sopenharmony_ci .mv_init_irq = init_snapgear_IRQ, 7562306a36Sopenharmony_ci}; 76