162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/arch/sh/boards/se/770x/irq.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2000 Kazumoto Kojima 662306a36Sopenharmony_ci * Copyright (C) 2006 Nobuhiro Iwamatsu 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Hitachi SolutionEngine Support. 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/init.h> 1362306a36Sopenharmony_ci#include <linux/interrupt.h> 1462306a36Sopenharmony_ci#include <linux/irq.h> 1562306a36Sopenharmony_ci#include <asm/irq.h> 1662306a36Sopenharmony_ci#include <asm/io.h> 1762306a36Sopenharmony_ci#include <mach-se/mach/se.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic struct ipr_data ipr_irq_table[] = { 2062306a36Sopenharmony_ci /* 2162306a36Sopenharmony_ci * Super I/O (Just mimic PC): 2262306a36Sopenharmony_ci * 1: keyboard 2362306a36Sopenharmony_ci * 3: serial 0 2462306a36Sopenharmony_ci * 4: serial 1 2562306a36Sopenharmony_ci * 5: printer 2662306a36Sopenharmony_ci * 6: floppy 2762306a36Sopenharmony_ci * 8: rtc 2862306a36Sopenharmony_ci * 12: mouse 2962306a36Sopenharmony_ci * 14: ide0 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_ci#if defined(CONFIG_CPU_SUBTYPE_SH7705) 3262306a36Sopenharmony_ci /* This is default value */ 3362306a36Sopenharmony_ci { 13, 0, 8, 0x0f-13, }, 3462306a36Sopenharmony_ci { 5 , 0, 4, 0x0f- 5, }, 3562306a36Sopenharmony_ci { 10, 1, 0, 0x0f-10, }, 3662306a36Sopenharmony_ci { 7 , 2, 4, 0x0f- 7, }, 3762306a36Sopenharmony_ci { 3 , 2, 0, 0x0f- 3, }, 3862306a36Sopenharmony_ci { 1 , 3, 12, 0x0f- 1, }, 3962306a36Sopenharmony_ci { 12, 3, 4, 0x0f-12, }, /* LAN */ 4062306a36Sopenharmony_ci { 2 , 4, 8, 0x0f- 2, }, /* PCIRQ2 */ 4162306a36Sopenharmony_ci { 6 , 4, 4, 0x0f- 6, }, /* PCIRQ1 */ 4262306a36Sopenharmony_ci { 14, 4, 0, 0x0f-14, }, /* PCIRQ0 */ 4362306a36Sopenharmony_ci { 0 , 5, 12, 0x0f , }, 4462306a36Sopenharmony_ci { 4 , 5, 4, 0x0f- 4, }, 4562306a36Sopenharmony_ci { 8 , 6, 12, 0x0f- 8, }, 4662306a36Sopenharmony_ci { 9 , 6, 8, 0x0f- 9, }, 4762306a36Sopenharmony_ci { 11, 6, 4, 0x0f-11, }, 4862306a36Sopenharmony_ci#else 4962306a36Sopenharmony_ci { 14, 0, 8, 0x0f-14, }, 5062306a36Sopenharmony_ci { 12, 0, 4, 0x0f-12, }, 5162306a36Sopenharmony_ci { 8, 1, 4, 0x0f- 8, }, 5262306a36Sopenharmony_ci { 6, 2, 12, 0x0f- 6, }, 5362306a36Sopenharmony_ci { 5, 2, 8, 0x0f- 5, }, 5462306a36Sopenharmony_ci { 4, 2, 4, 0x0f- 4, }, 5562306a36Sopenharmony_ci { 3, 2, 0, 0x0f- 3, }, 5662306a36Sopenharmony_ci { 1, 3, 12, 0x0f- 1, }, 5762306a36Sopenharmony_ci#if defined(CONFIG_STNIC) 5862306a36Sopenharmony_ci /* ST NIC */ 5962306a36Sopenharmony_ci { 10, 3, 4, 0x0f-10, }, /* LAN */ 6062306a36Sopenharmony_ci#endif 6162306a36Sopenharmony_ci /* MRSHPC IRQs setting */ 6262306a36Sopenharmony_ci { 0, 4, 12, 0x0f- 0, }, /* PCIRQ3 */ 6362306a36Sopenharmony_ci { 11, 4, 8, 0x0f-11, }, /* PCIRQ2 */ 6462306a36Sopenharmony_ci { 9, 4, 4, 0x0f- 9, }, /* PCIRQ1 */ 6562306a36Sopenharmony_ci { 7, 4, 0, 0x0f- 7, }, /* PCIRQ0 */ 6662306a36Sopenharmony_ci /* #2, #13 are allocated for SLOT IRQ #1 and #2 (for now) */ 6762306a36Sopenharmony_ci /* NOTE: #2 and #13 are not used on PC */ 6862306a36Sopenharmony_ci { 13, 6, 4, 0x0f-13, }, /* SLOTIRQ2 */ 6962306a36Sopenharmony_ci { 2, 6, 0, 0x0f- 2, }, /* SLOTIRQ1 */ 7062306a36Sopenharmony_ci#endif 7162306a36Sopenharmony_ci}; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_cistatic unsigned long ipr_offsets[] = { 7462306a36Sopenharmony_ci BCR_ILCRA, 7562306a36Sopenharmony_ci BCR_ILCRB, 7662306a36Sopenharmony_ci BCR_ILCRC, 7762306a36Sopenharmony_ci BCR_ILCRD, 7862306a36Sopenharmony_ci BCR_ILCRE, 7962306a36Sopenharmony_ci BCR_ILCRF, 8062306a36Sopenharmony_ci BCR_ILCRG, 8162306a36Sopenharmony_ci}; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_cistatic struct ipr_desc ipr_irq_desc = { 8462306a36Sopenharmony_ci .ipr_offsets = ipr_offsets, 8562306a36Sopenharmony_ci .nr_offsets = ARRAY_SIZE(ipr_offsets), 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci .ipr_data = ipr_irq_table, 8862306a36Sopenharmony_ci .nr_irqs = ARRAY_SIZE(ipr_irq_table), 8962306a36Sopenharmony_ci .chip = { 9062306a36Sopenharmony_ci .name = "IPR-se770x", 9162306a36Sopenharmony_ci }, 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* 9562306a36Sopenharmony_ci * Initialize IRQ setting 9662306a36Sopenharmony_ci */ 9762306a36Sopenharmony_civoid __init init_se_IRQ(void) 9862306a36Sopenharmony_ci{ 9962306a36Sopenharmony_ci /* Disable all interrupts */ 10062306a36Sopenharmony_ci __raw_writew(0, BCR_ILCRA); 10162306a36Sopenharmony_ci __raw_writew(0, BCR_ILCRB); 10262306a36Sopenharmony_ci __raw_writew(0, BCR_ILCRC); 10362306a36Sopenharmony_ci __raw_writew(0, BCR_ILCRD); 10462306a36Sopenharmony_ci __raw_writew(0, BCR_ILCRE); 10562306a36Sopenharmony_ci __raw_writew(0, BCR_ILCRF); 10662306a36Sopenharmony_ci __raw_writew(0, BCR_ILCRG); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci register_ipr_controller(&ipr_irq_desc); 10962306a36Sopenharmony_ci} 110