ipic
extern struct ipic * ipic_init(struct device_node *node, unsigned int flags);
static struct ipic * primary_ipic;
static inline struct ipic * ipic_from_irq(unsigned int virq)
struct ipic *ipic = ipic_from_irq(d->irq);
temp = ipic_read(ipic->regs, ipic_info[src].mask);
ipic_write(ipic->regs, ipic_info[src].mask, temp);
struct ipic *ipic = ipic_from_irq(d->irq);
temp = ipic_read(ipic->regs, ipic_info[src].mask);
ipic_write(ipic->regs, ipic_info[src].mask, temp);
struct ipic *ipic = ipic_from_irq(d->irq);
ipic_write(ipic->regs, ipic_info[src].ack, temp);
struct ipic *ipic = ipic_from_irq(d->irq);
temp = ipic_read(ipic->regs, ipic_info[src].mask);
ipic_write(ipic->regs, ipic_info[src].mask, temp);
ipic_write(ipic->regs, ipic_info[src].ack, temp);
struct ipic *ipic = ipic_from_irq(d->irq);
vold = ipic_read(ipic->regs, IPIC_SECNR);
ipic_write(ipic->regs, IPIC_SECNR, vnew);
struct ipic *ipic = h->host_data;
irq_set_chip_data(virq, ipic);
struct ipic * __init ipic_init(struct device_node *node, unsigned int flags)
struct ipic *ipic;
ipic = kzalloc_obj(*ipic);
if (ipic == NULL)
ipic->irqhost = irq_domain_create_linear(of_fwnode_handle(node),
&ipic_host_ops, ipic);
if (ipic->irqhost == NULL) {
kfree(ipic);
ipic->regs = ioremap(res.start, resource_size(&res));
ipic_write(ipic->regs, IPIC_SICNR, 0x0);
ipic_write(ipic->regs, IPIC_SICFR, temp);
ipic_write(ipic->regs, IPIC_SERCR, temp);
temp = ipic_read(ipic->regs, IPIC_SEMSR);
ipic_write(ipic->regs, IPIC_SEMSR, temp);
primary_ipic = ipic;
ipic_write(ipic->regs, IPIC_SIMSR_H, 0);
ipic_write(ipic->regs, IPIC_SIMSR_L, 0);
return ipic;
struct ipic *ipic = primary_ipic;
ipic_saved_state.sicfr = ipic_read(ipic->regs, IPIC_SICFR);
ipic_saved_state.siprr[0] = ipic_read(ipic->regs, IPIC_SIPRR_A);
ipic_saved_state.siprr[1] = ipic_read(ipic->regs, IPIC_SIPRR_D);
ipic_saved_state.simsr[0] = ipic_read(ipic->regs, IPIC_SIMSR_H);
ipic_saved_state.simsr[1] = ipic_read(ipic->regs, IPIC_SIMSR_L);
ipic_saved_state.sicnr = ipic_read(ipic->regs, IPIC_SICNR);
ipic_saved_state.smprr[0] = ipic_read(ipic->regs, IPIC_SMPRR_A);
ipic_saved_state.smprr[1] = ipic_read(ipic->regs, IPIC_SMPRR_B);
ipic_saved_state.semsr = ipic_read(ipic->regs, IPIC_SEMSR);
ipic_saved_state.secnr = ipic_read(ipic->regs, IPIC_SECNR);
ipic_saved_state.sermr = ipic_read(ipic->regs, IPIC_SERMR);
ipic_saved_state.sercr = ipic_read(ipic->regs, IPIC_SERCR);
ipic_write(ipic->regs, IPIC_SIMSR_H, 0);
ipic_write(ipic->regs, IPIC_SIMSR_L, 0);
ipic_write(ipic->regs, IPIC_SEMSR, 0);
ipic_write(ipic->regs, IPIC_SERMR, 0);
struct ipic *ipic = primary_ipic;
ipic_write(ipic->regs, IPIC_SICFR, ipic_saved_state.sicfr);
ipic_write(ipic->regs, IPIC_SIPRR_A, ipic_saved_state.siprr[0]);
ipic_write(ipic->regs, IPIC_SIPRR_D, ipic_saved_state.siprr[1]);
ipic_write(ipic->regs, IPIC_SIMSR_H, ipic_saved_state.simsr[0]);
ipic_write(ipic->regs, IPIC_SIMSR_L, ipic_saved_state.simsr[1]);
ipic_write(ipic->regs, IPIC_SICNR, ipic_saved_state.sicnr);
ipic_write(ipic->regs, IPIC_SMPRR_A, ipic_saved_state.smprr[0]);
ipic_write(ipic->regs, IPIC_SMPRR_B, ipic_saved_state.smprr[1]);
ipic_write(ipic->regs, IPIC_SEMSR, ipic_saved_state.semsr);
ipic_write(ipic->regs, IPIC_SECNR, ipic_saved_state.secnr);
ipic_write(ipic->regs, IPIC_SERMR, ipic_saved_state.sermr);
ipic_write(ipic->regs, IPIC_SERCR, ipic_saved_state.sercr);