Lines Matching full:apid

109 #define spec_to_hwirq(slave_id, periph_id, irq_id, apid) \  argument
113 (((apid) & 0x3FF) << 0))
140 * @min_apid: minimum APID (used for bounding IRQ search)
141 * @max_apid: maximum APID
142 * @base_apid: on v7: minimum APID associated with the particular SPMI
146 * @mapping_table: in-memory copy of PPID -> APID mapping table.
150 * @ppid_to_apid: in-memory copy of PPID -> APID mapping table.
151 * @last_apid: Highest value APID in use
186 * @ppid_to_apid: finds the apid for a given ppid.
606 static void cleanup_irq(struct spmi_pmic_arb *pmic_arb, u16 apid, int id) in cleanup_irq() argument
608 u16 ppid = pmic_arb->apid_data[apid].ppid; in cleanup_irq()
613 dev_err_ratelimited(&pmic_arb->spmic->dev, "%s apid=%d sid=0x%x per=0x%x irq=%d\n", in cleanup_irq()
614 __func__, apid, sid, per, id); in cleanup_irq()
615 writel_relaxed(irq_mask, pmic_arb->ver_ops->irq_clear(pmic_arb, apid)); in cleanup_irq()
618 static int periph_interrupt(struct spmi_pmic_arb *pmic_arb, u16 apid) in periph_interrupt() argument
623 u8 sid = (pmic_arb->apid_data[apid].ppid >> 8) & 0xF; in periph_interrupt()
624 u8 per = pmic_arb->apid_data[apid].ppid & 0xFF; in periph_interrupt()
626 status = readl_relaxed(pmic_arb->ver_ops->irq_status(pmic_arb, apid)); in periph_interrupt()
631 spec_to_hwirq(sid, per, id, apid)); in periph_interrupt()
633 cleanup_irq(pmic_arb, apid, id); in periph_interrupt()
657 int i, id, apid; in pmic_arb_chained_irq() local
672 apid = id + i * 32; in pmic_arb_chained_irq()
673 if (apid < first || apid > last) { in pmic_arb_chained_irq()
674 WARN_ONCE(true, "spurious spmi irq received for apid=%d\n", in pmic_arb_chained_irq()
675 apid); in pmic_arb_chained_irq()
679 ver_ops->acc_enable(pmic_arb, apid)); in pmic_arb_chained_irq()
681 if (periph_interrupt(pmic_arb, apid) != 0) in pmic_arb_chained_irq()
700 "Dispatching IRQ for apid=%d status=%x\n", in pmic_arb_chained_irq()
719 u16 apid = hwirq_to_apid(d->hwirq); in qpnpint_irq_ack() local
722 writel_relaxed(BIT(irq), pmic_arb->ver_ops->irq_clear(pmic_arb, apid)); in qpnpint_irq_ack()
741 u16 apid = hwirq_to_apid(d->hwirq); in qpnpint_irq_unmask() local
745 ver_ops->acc_enable(pmic_arb, apid)); in qpnpint_irq_unmask()
828 u16 apid = hwirq_to_apid(d->hwirq); in qpnpint_irq_domain_activate() local
833 if (pmic_arb->apid_data[apid].irq_ee != pmic_arb->ee) { in qpnpint_irq_domain_activate()
836 pmic_arb->apid_data[apid].irq_ee); in qpnpint_irq_domain_activate()
865 u16 apid, ppid; in qpnpint_irq_domain_translate() local
886 apid = rc; in qpnpint_irq_domain_translate()
888 if (apid > pmic_arb->max_apid) in qpnpint_irq_domain_translate()
889 pmic_arb->max_apid = apid; in qpnpint_irq_domain_translate()
890 if (apid < pmic_arb->min_apid) in qpnpint_irq_domain_translate()
891 pmic_arb->min_apid = apid; in qpnpint_irq_domain_translate()
893 *out_hwirq = spec_to_hwirq(intspec[0], intspec[1], intspec[2], apid); in qpnpint_irq_domain_translate()
950 u16 apid; in pmic_arb_ppid_to_apid_v1() local
955 apid = apid_valid & ~PMIC_ARB_APID_VALID; in pmic_arb_ppid_to_apid_v1()
956 return apid; in pmic_arb_ppid_to_apid_v1()
970 apid = SPMI_MAPPING_BIT_IS_1_RESULT(data); in pmic_arb_ppid_to_apid_v1()
972 = apid | PMIC_ARB_APID_VALID; in pmic_arb_ppid_to_apid_v1()
973 pmic_arb->apid_data[apid].ppid = ppid; in pmic_arb_ppid_to_apid_v1()
974 return apid; in pmic_arb_ppid_to_apid_v1()
980 apid = SPMI_MAPPING_BIT_IS_0_RESULT(data); in pmic_arb_ppid_to_apid_v1()
982 = apid | PMIC_ARB_APID_VALID; in pmic_arb_ppid_to_apid_v1()
983 pmic_arb->apid_data[apid].ppid = ppid; in pmic_arb_ppid_to_apid_v1()
984 return apid; in pmic_arb_ppid_to_apid_v1()
1003 u16 id, apid; in pmic_arb_find_apid() local
1005 for (apid = pmic_arb->last_apid; ; apid++, apidd++) { in pmic_arb_find_apid()
1006 offset = pmic_arb->ver_ops->apid_map_offset(apid); in pmic_arb_find_apid()
1011 apid)); in pmic_arb_find_apid()
1020 pmic_arb->ppid_to_apid[id] = apid | PMIC_ARB_APID_VALID; in pmic_arb_find_apid()
1023 apid |= PMIC_ARB_APID_VALID; in pmic_arb_find_apid()
1027 pmic_arb->last_apid = apid & ~PMIC_ARB_APID_VALID; in pmic_arb_find_apid()
1029 return apid; in pmic_arb_find_apid()
1049 u16 i, apid, ppid, apid_max; in pmic_arb_read_apid_map_v5() local
1055 * version 5 and 7, there is more than one APID mapped to each PPID. in pmic_arb_read_apid_map_v5()
1057 * allowed to write to the APID. The owner of the last (highest) APID in pmic_arb_read_apid_map_v5()
1061 * In arbiter version 7, the APID numbering space is divided between in pmic_arb_read_apid_map_v5()
1063 * APID = 0 to N-1 are assigned to the primary bus in pmic_arb_read_apid_map_v5()
1064 * APID = N to N+M-1 are assigned to the secondary bus in pmic_arb_read_apid_map_v5()
1088 apid = pmic_arb->ppid_to_apid[ppid] & ~PMIC_ARB_APID_VALID; in pmic_arb_read_apid_map_v5()
1089 prev_apidd = &pmic_arb->apid_data[apid]; in pmic_arb_read_apid_map_v5()
1108 dev_dbg(&pmic_arb->spmic->dev, "PPID APID Write-EE IRQ-EE\n"); in pmic_arb_read_apid_map_v5()
1110 apid = pmic_arb->ppid_to_apid[ppid]; in pmic_arb_read_apid_map_v5()
1111 if (apid & PMIC_ARB_APID_VALID) { in pmic_arb_read_apid_map_v5()
1112 apid &= ~PMIC_ARB_APID_VALID; in pmic_arb_read_apid_map_v5()
1113 apidd = &pmic_arb->apid_data[apid]; in pmic_arb_read_apid_map_v5()
1115 ppid, apid, apidd->write_ee, apidd->irq_ee); in pmic_arb_read_apid_map_v5()
1134 u16 apid; in pmic_arb_offset_v2() local
1143 apid = rc; in pmic_arb_offset_v2()
1144 return 0x1000 * pmic_arb->ee + 0x8000 * apid; in pmic_arb_offset_v2()
1148 * v5 offset per ee and per apid for observer channels and per apid for
1154 u16 apid; in pmic_arb_offset_v5() local
1163 apid = rc; in pmic_arb_offset_v5()
1166 offset = 0x10000 * pmic_arb->ee + 0x80 * apid; in pmic_arb_offset_v5()
1169 if (pmic_arb->apid_data[apid].write_ee != pmic_arb->ee) { in pmic_arb_offset_v5()
1174 offset = 0x10000 * apid; in pmic_arb_offset_v5()
1182 * v7 offset per ee and per apid for observer channels and per apid for
1188 u16 apid; in pmic_arb_offset_v7() local
1197 apid = rc; in pmic_arb_offset_v7()
1200 offset = 0x8000 * pmic_arb->ee + 0x20 * apid; in pmic_arb_offset_v7()
1203 if (pmic_arb->apid_data[apid].write_ee != pmic_arb->ee) { in pmic_arb_offset_v7()
1208 offset = 0x1000 * apid; in pmic_arb_offset_v7()
1349 * For arbiter version 7, APID ownership table registers have independent
1537 dev_err(&pdev->dev, "Unsupported APID count %d detected\n", in spmi_pmic_arb_probe()
1547 dev_err(&pdev->dev, "Unsupported APID count %d detected\n", in spmi_pmic_arb_probe()
1623 dev_err(&pdev->dev, "could not read APID->PPID mapping table, rc= %d\n", in spmi_pmic_arb_probe()