Lines Matching +full:pd +full:- +full:node

2  * Copyright 2003-2011 NetLogic Microsystems, Inc. (NetLogic). All rights
53 #include <asm/netlogic/mips-extns.h>
59 #include <asm/netlogic/xlp-hal/iomap.h>
60 #include <asm/netlogic/xlp-hal/xlp.h>
61 #include <asm/netlogic/xlp-hal/pic.h>
81 struct nlm_soc_info *node; member
90 struct nlm_pic_irq *pd = irq_data_get_irq_chip_data(d); in xlp_pic_enable() local
92 BUG_ON(!pd); in xlp_pic_enable()
93 spin_lock_irqsave(&pd->node->piclock, flags); in xlp_pic_enable()
94 nlm_pic_enable_irt(pd->node->picbase, pd->irt); in xlp_pic_enable()
95 spin_unlock_irqrestore(&pd->node->piclock, flags); in xlp_pic_enable()
100 struct nlm_pic_irq *pd = irq_data_get_irq_chip_data(d); in xlp_pic_disable() local
103 BUG_ON(!pd); in xlp_pic_disable()
104 spin_lock_irqsave(&pd->node->piclock, flags); in xlp_pic_disable()
105 nlm_pic_disable_irt(pd->node->picbase, pd->irt); in xlp_pic_disable()
106 spin_unlock_irqrestore(&pd->node->piclock, flags); in xlp_pic_disable()
111 struct nlm_pic_irq *pd = irq_data_get_irq_chip_data(d); in xlp_pic_mask_ack() local
113 clear_c0_eimr(pd->picirq); in xlp_pic_mask_ack()
114 ack_c0_eirr(pd->picirq); in xlp_pic_mask_ack()
119 struct nlm_pic_irq *pd = irq_data_get_irq_chip_data(d); in xlp_pic_unmask() local
121 BUG_ON(!pd); in xlp_pic_unmask()
123 if (pd->extra_ack) in xlp_pic_unmask()
124 pd->extra_ack(d); in xlp_pic_unmask()
126 /* re-enable the intr on this cpu */ in xlp_pic_unmask()
127 set_c0_eimr(pd->picirq); in xlp_pic_unmask()
130 nlm_pic_ack(pd->node->picbase, pd->irt); in xlp_pic_unmask()
134 .name = "XLP-PIC",
143 clear_c0_eimr(d->irq); in cpuintr_disable()
148 set_c0_eimr(d->irq); in cpuintr_enable()
153 ack_c0_eirr(d->irq); in cpuintr_ack()
161 .name = "XLP-CPU-INTR",
184 void nlm_setup_pic_irq(int node, int picirq, int irq, int irt) in nlm_setup_pic_irq() argument
189 xirq = nlm_irq_to_xirq(node, irq); in nlm_setup_pic_irq()
192 pic_data->irt = irt; in nlm_setup_pic_irq()
193 pic_data->picirq = picirq; in nlm_setup_pic_irq()
194 pic_data->node = nlm_get_node(node); in nlm_setup_pic_irq()
199 void nlm_set_pic_extra_ack(int node, int irq, void (*xack)(struct irq_data *)) in nlm_set_pic_extra_ack() argument
204 xirq = nlm_irq_to_xirq(node, irq); in nlm_set_pic_extra_ack()
208 pic_data->extra_ack = xack; in nlm_set_pic_extra_ack()
211 static void nlm_init_node_irqs(int node) in nlm_init_node_irqs() argument
216 pr_info("Init IRQ for node %d\n", node); in nlm_init_node_irqs()
217 nodep = nlm_get_node(node); in nlm_init_node_irqs()
218 nodep->irqmask = PERCPU_IRQ_MASK; in nlm_init_node_irqs()
221 if (irt == -1) /* unused irq */ in nlm_init_node_irqs()
223 nodep->irqmask |= 1ull << i; in nlm_init_node_irqs()
224 if (irt == -2) /* not a direct PIC irq */ in nlm_init_node_irqs()
227 nlm_pic_init_irt(nodep->picbase, irt, i, in nlm_init_node_irqs()
228 node * nlm_threads_per_node(), 0); in nlm_init_node_irqs()
229 nlm_setup_pic_irq(node, i, i, irt); in nlm_init_node_irqs()
235 int cpu, node; in nlm_smp_irq_init() local
238 node = hwtid / nlm_threads_per_node(); in nlm_smp_irq_init()
240 if (cpu == 0 && node != 0) in nlm_smp_irq_init()
241 nlm_init_node_irqs(node); in nlm_smp_irq_init()
242 write_c0_eimr(nlm_get_node(node)->irqmask); in nlm_smp_irq_init()
248 int i, node; in plat_irq_dispatch() local
250 node = nlm_nodeid(); in plat_irq_dispatch()
256 /* per-CPU IRQs don't need translation */ in plat_irq_dispatch()
265 nlm_dispatch_msi(node, i); in plat_irq_dispatch()
269 nlm_dispatch_msix(node, i); in plat_irq_dispatch()
275 do_IRQ(nlm_irq_to_xirq(node, i)); in plat_irq_dispatch()
279 static int __init xlp_of_pic_init(struct device_node *node, in xlp_of_pic_init() argument
282 const int n_picirqs = PIC_IRT_LAST_IRQ - PIC_IRQ_BASE + 1; in xlp_of_pic_init()
288 ret = of_address_to_resource(node, 0, &res); in xlp_of_pic_init()
290 pr_err("PIC %pOFn: reg property not found!\n", node); in xlp_of_pic_init()
291 return -EINVAL; in xlp_of_pic_init()
299 if (nlm_get_node(socid)->socbus == bus) in xlp_of_pic_init()
303 pr_err("PIC %pOFn: Node mapping for bus %d not found!\n", in xlp_of_pic_init()
304 node, bus); in xlp_of_pic_init()
305 return -EINVAL; in xlp_of_pic_init()
310 pr_err("PIC %pOFn: node %d does not exist!\n", in xlp_of_pic_init()
311 node, socid); in xlp_of_pic_init()
312 return -EINVAL; in xlp_of_pic_init()
317 pr_err("PIC %pOFn: node %d does not exist!\n", node, socid); in xlp_of_pic_init()
318 return -EINVAL; in xlp_of_pic_init()
321 xlp_pic_domain = irq_domain_add_legacy(node, n_picirqs, in xlp_of_pic_init()
325 pr_err("PIC %pOFn: Creating legacy domain failed!\n", node); in xlp_of_pic_init()
326 return -EINVAL; in xlp_of_pic_init()
328 pr_info("Node %d: IRQ domain created for PIC@%pR\n", socid, &res); in xlp_of_pic_init()
333 { .compatible = "netlogic,xlp-pic", .data = xlp_of_pic_init },
343 write_c0_eimr(nlm_current_node()->irqmask); in arch_init_irq()