cregit-Linux how code gets into the kernel

Release 4.14 arch/powerpc/sysdev/xilinx_intc.c

/*
 * Interrupt controller driver for Xilinx Virtex FPGAs
 *
 * Copyright (C) 2007 Secret Lab Technologies Ltd.
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2. This program is licensed "as is" without any warranty of any
 * kind, whether express or implied.
 *
 */

/*
 * This is a driver for the interrupt controller typically found in
 * Xilinx Virtex FPGA designs.
 *
 * The interrupt sense levels are hard coded into the FPGA design with
 * typically a 1:1 relationship between irq lines and devices (no shared
 * irq lines).  Therefore, this driver does not attempt to handle edge
 * and level interrupts differently.
 */

#undef DEBUG

#include <linux/kernel.h>
#include <linux/irq.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <asm/io.h>
#include <asm/processor.h>
#include <asm/i8259.h>
#include <asm/irq.h>
#include <linux/irqchip.h>

#if defined(CONFIG_PPC_I8259)
/*
 * Support code for cascading to 8259 interrupt controllers
 */

static void xilinx_i8259_cascade(struct irq_desc *desc) { struct irq_chip *chip = irq_desc_get_chip(desc); unsigned int cascade_irq = i8259_irq(); if (cascade_irq) generic_handle_irq(cascade_irq); /* Let xilinx_intc end the interrupt */ chip->irq_unmask(&desc->irq_data); }

Contributors

PersonTokensPropCommitsCommitProp
Grant C. Likely3368.75%133.33%
Lennert Buytenhek1429.17%133.33%
Thomas Gleixner12.08%133.33%
Total48100.00%3100.00%


static void __init xilinx_i8259_setup_cascade(void) { struct device_node *cascade_node; int cascade_irq; /* Initialize i8259 controller */ cascade_node = of_find_compatible_node(NULL, NULL, "chrp,iic"); if (!cascade_node) return; cascade_irq = irq_of_parse_and_map(cascade_node, 0); if (!cascade_irq) { pr_err("virtex_ml510: Failed to map cascade interrupt\n"); goto out; } i8259_init(cascade_node, 0); irq_set_chained_handler(cascade_irq, xilinx_i8259_cascade); /* Program irq 7 (usb/audio), 14/15 (ide) to level sensitive */ /* This looks like a dirty hack to me --gcl */ outb(0xc0, 0x4d0); outb(0xc0, 0x4d1); out: of_node_put(cascade_node); }

Contributors

PersonTokensPropCommitsCommitProp
Grant C. Likely7173.96%240.00%
Roderick Colenbrander1616.67%120.00%
Stephen Neuendorffer88.33%120.00%
Thomas Gleixner11.04%120.00%
Total96100.00%5100.00%

#else
static inline void xilinx_i8259_setup_cascade(void) { return; }

Contributors

PersonTokensPropCommitsCommitProp
Grant C. Likely10100.00%1100.00%
Total10100.00%1100.00%

#endif /* defined(CONFIG_PPC_I8259) */ /* * Initialize master Xilinx interrupt controller */
void __init xilinx_intc_init_tree(void) { irqchip_init(); xilinx_i8259_setup_cascade(); }

Contributors

PersonTokensPropCommitsCommitProp
Grant C. Likely1285.71%266.67%
Zubair Lutfullah Kakakhel214.29%133.33%
Total14100.00%3100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Grant C. Likely16576.39%222.22%
Roderick Colenbrander167.41%111.11%
Lennert Buytenhek146.48%111.11%
Stephen Neuendorffer83.70%111.11%
Rob Herring62.78%222.22%
Zubair Lutfullah Kakakhel52.31%111.11%
Thomas Gleixner20.93%111.11%
Total216100.00%9100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.