Lines Matching refs:pmic_arb

205 	int (*ppid_to_apid)(struct spmi_pmic_arb *pmic_arb, u16 ppid);
207 int (*offset)(struct spmi_pmic_arb *pmic_arb, u8 sid, u16 addr,
212 void __iomem *(*owner_acc_status)(struct spmi_pmic_arb *pmic_arb, u8 m,
214 void __iomem *(*acc_enable)(struct spmi_pmic_arb *pmic_arb, u16 n);
215 void __iomem *(*irq_status)(struct spmi_pmic_arb *pmic_arb, u16 n);
216 void __iomem *(*irq_clear)(struct spmi_pmic_arb *pmic_arb, u16 n);
218 void __iomem *(*apid_owner)(struct spmi_pmic_arb *pmic_arb, u16 n);
221 static inline void pmic_arb_base_write(struct spmi_pmic_arb *pmic_arb, in pmic_arb_base_write() argument
224 writel_relaxed(val, pmic_arb->wr_base + offset); in pmic_arb_base_write()
227 static inline void pmic_arb_set_rd_cmd(struct spmi_pmic_arb *pmic_arb, in pmic_arb_set_rd_cmd() argument
230 writel_relaxed(val, pmic_arb->rd_base + offset); in pmic_arb_set_rd_cmd()
240 pmic_arb_read_data(struct spmi_pmic_arb *pmic_arb, u8 *buf, u32 reg, u8 bc) in pmic_arb_read_data() argument
242 u32 data = __raw_readl(pmic_arb->rd_base + reg); in pmic_arb_read_data()
253 static void pmic_arb_write_data(struct spmi_pmic_arb *pmic_arb, const u8 *buf, in pmic_arb_write_data() argument
259 __raw_writel(data, pmic_arb->wr_base + reg); in pmic_arb_write_data()
266 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_wait_for_done() local
272 rc = pmic_arb->ver_ops->offset(pmic_arb, sid, addr, ch_type); in pmic_arb_wait_for_done()
315 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_non_data_cmd_v1() local
321 rc = pmic_arb->ver_ops->offset(pmic_arb, sid, 0, PMIC_ARB_CHANNEL_RW); in pmic_arb_non_data_cmd_v1()
328 raw_spin_lock_irqsave(&pmic_arb->lock, flags); in pmic_arb_non_data_cmd_v1()
329 pmic_arb_base_write(pmic_arb, offset + PMIC_ARB_CMD, cmd); in pmic_arb_non_data_cmd_v1()
330 rc = pmic_arb_wait_for_done(ctrl, pmic_arb->wr_base, sid, 0, in pmic_arb_non_data_cmd_v1()
332 raw_spin_unlock_irqrestore(&pmic_arb->lock, flags); in pmic_arb_non_data_cmd_v1()
346 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_cmd() local
354 return pmic_arb->ver_ops->non_data_cmd(ctrl, opc, sid); in pmic_arb_cmd()
357 static int pmic_arb_fmt_read_cmd(struct spmi_pmic_arb *pmic_arb, u8 opc, u8 sid, in pmic_arb_fmt_read_cmd() argument
363 rc = pmic_arb->ver_ops->offset(pmic_arb, sid, addr, in pmic_arb_fmt_read_cmd()
370 dev_err(&pmic_arb->spmic->dev, "pmic-arb supports 1..%d bytes per trans, but:%zu requested", in pmic_arb_fmt_read_cmd()
385 *cmd = pmic_arb->ver_ops->fmt_cmd(opc, sid, addr, bc); in pmic_arb_fmt_read_cmd()
394 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_read_cmd_unlocked() local
398 pmic_arb_set_rd_cmd(pmic_arb, offset + PMIC_ARB_CMD, cmd); in pmic_arb_read_cmd_unlocked()
399 rc = pmic_arb_wait_for_done(ctrl, pmic_arb->rd_base, sid, addr, in pmic_arb_read_cmd_unlocked()
404 pmic_arb_read_data(pmic_arb, buf, offset + PMIC_ARB_RDATA0, in pmic_arb_read_cmd_unlocked()
408 pmic_arb_read_data(pmic_arb, buf + 4, offset + PMIC_ARB_RDATA1, in pmic_arb_read_cmd_unlocked()
416 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_read_cmd() local
421 rc = pmic_arb_fmt_read_cmd(pmic_arb, opc, sid, addr, len, &cmd, in pmic_arb_read_cmd()
426 raw_spin_lock_irqsave(&pmic_arb->lock, flags); in pmic_arb_read_cmd()
428 raw_spin_unlock_irqrestore(&pmic_arb->lock, flags); in pmic_arb_read_cmd()
433 static int pmic_arb_fmt_write_cmd(struct spmi_pmic_arb *pmic_arb, u8 opc, in pmic_arb_fmt_write_cmd() argument
440 rc = pmic_arb->ver_ops->offset(pmic_arb, sid, addr, in pmic_arb_fmt_write_cmd()
447 dev_err(&pmic_arb->spmic->dev, "pmic-arb supports 1..%d bytes per trans, but:%zu requested", in pmic_arb_fmt_write_cmd()
464 *cmd = pmic_arb->ver_ops->fmt_cmd(opc, sid, addr, bc); in pmic_arb_fmt_write_cmd()
473 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_write_cmd_unlocked() local
477 pmic_arb_write_data(pmic_arb, buf, offset + PMIC_ARB_WDATA0, in pmic_arb_write_cmd_unlocked()
480 pmic_arb_write_data(pmic_arb, buf + 4, offset + PMIC_ARB_WDATA1, in pmic_arb_write_cmd_unlocked()
484 pmic_arb_base_write(pmic_arb, offset + PMIC_ARB_CMD, cmd); in pmic_arb_write_cmd_unlocked()
485 return pmic_arb_wait_for_done(ctrl, pmic_arb->wr_base, sid, addr, in pmic_arb_write_cmd_unlocked()
492 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_write_cmd() local
497 rc = pmic_arb_fmt_write_cmd(pmic_arb, opc, sid, addr, len, &cmd, in pmic_arb_write_cmd()
502 raw_spin_lock_irqsave(&pmic_arb->lock, flags); in pmic_arb_write_cmd()
505 raw_spin_unlock_irqrestore(&pmic_arb->lock, flags); in pmic_arb_write_cmd()
513 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in pmic_arb_masked_write() local
519 rc = pmic_arb_fmt_read_cmd(pmic_arb, SPMI_CMD_EXT_READL, sid, addr, len, in pmic_arb_masked_write()
524 rc = pmic_arb_fmt_write_cmd(pmic_arb, SPMI_CMD_EXT_WRITEL, sid, addr, in pmic_arb_masked_write()
529 raw_spin_lock_irqsave(&pmic_arb->lock, flags); in pmic_arb_masked_write()
541 raw_spin_unlock_irqrestore(&pmic_arb->lock, flags); in pmic_arb_masked_write()
567 struct spmi_pmic_arb *pmic_arb = irq_data_get_irq_chip_data(d); in qpnpint_spmi_write() local
571 if (pmic_arb_write_cmd(pmic_arb->spmic, SPMI_CMD_EXT_WRITEL, sid, in qpnpint_spmi_write()
573 dev_err_ratelimited(&pmic_arb->spmic->dev, "failed irqchip transaction on %x\n", in qpnpint_spmi_write()
579 struct spmi_pmic_arb *pmic_arb = irq_data_get_irq_chip_data(d); in qpnpint_spmi_read() local
583 if (pmic_arb_read_cmd(pmic_arb->spmic, SPMI_CMD_EXT_READL, sid, in qpnpint_spmi_read()
585 dev_err_ratelimited(&pmic_arb->spmic->dev, "failed irqchip transaction on %x\n", in qpnpint_spmi_read()
593 struct spmi_pmic_arb *pmic_arb = irq_data_get_irq_chip_data(d); in qpnpint_spmi_masked_write() local
598 rc = pmic_arb_masked_write(pmic_arb->spmic, sid, (per << 8) + reg, buf, in qpnpint_spmi_masked_write()
601 dev_err_ratelimited(&pmic_arb->spmic->dev, "failed irqchip transaction on %x rc=%d\n", in qpnpint_spmi_masked_write()
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()
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()
630 irq = irq_find_mapping(pmic_arb->domain, in periph_interrupt()
633 cleanup_irq(pmic_arb, apid, id); in periph_interrupt()
645 struct spmi_pmic_arb *pmic_arb = irq_desc_get_handler_data(desc); in pmic_arb_chained_irq() local
646 const struct pmic_arb_ver_ops *ver_ops = pmic_arb->ver_ops; in pmic_arb_chained_irq()
648 int first = pmic_arb->min_apid; in pmic_arb_chained_irq()
649 int last = pmic_arb->max_apid; in pmic_arb_chained_irq()
654 int acc_offset = pmic_arb->base_apid >> 5; in pmic_arb_chained_irq()
655 u8 ee = pmic_arb->ee; in pmic_arb_chained_irq()
665 status = readl_relaxed(ver_ops->owner_acc_status(pmic_arb, ee, i - acc_offset)); 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()
690 if (pmic_arb->apid_data[i].irq_ee != pmic_arb->ee) in pmic_arb_chained_irq()
694 ver_ops->irq_status(pmic_arb, i)); in pmic_arb_chained_irq()
697 ver_ops->acc_enable(pmic_arb, i)); in pmic_arb_chained_irq()
699 dev_dbg(&pmic_arb->spmic->dev, in pmic_arb_chained_irq()
702 if (periph_interrupt(pmic_arb, i) != 0) in pmic_arb_chained_irq()
717 struct spmi_pmic_arb *pmic_arb = irq_data_get_irq_chip_data(d); in qpnpint_irq_ack() local
722 writel_relaxed(BIT(irq), pmic_arb->ver_ops->irq_clear(pmic_arb, apid)); in qpnpint_irq_ack()
738 struct spmi_pmic_arb *pmic_arb = irq_data_get_irq_chip_data(d); in qpnpint_irq_unmask() local
739 const struct pmic_arb_ver_ops *ver_ops = pmic_arb->ver_ops; in qpnpint_irq_unmask()
745 ver_ops->acc_enable(pmic_arb, apid)); in qpnpint_irq_unmask()
802 struct spmi_pmic_arb *pmic_arb = irq_data_get_irq_chip_data(d); in qpnpint_irq_set_wake() local
804 return irq_set_irq_wake(pmic_arb->irq, on); in qpnpint_irq_set_wake()
826 struct spmi_pmic_arb *pmic_arb = irq_data_get_irq_chip_data(d); in qpnpint_irq_domain_activate() local
833 if (pmic_arb->apid_data[apid].irq_ee != pmic_arb->ee) { in qpnpint_irq_domain_activate()
834 …dev_err(&pmic_arb->spmic->dev, "failed to xlate sid = %#x, periph = %#x, irq = %u: ee=%u but owner… in qpnpint_irq_domain_activate()
835 sid, periph, irq, pmic_arb->ee, in qpnpint_irq_domain_activate()
836 pmic_arb->apid_data[apid].irq_ee); in qpnpint_irq_domain_activate()
863 struct spmi_pmic_arb *pmic_arb = d->host_data; in qpnpint_irq_domain_translate() local
868 dev_dbg(&pmic_arb->spmic->dev, "intspec[0] 0x%1x intspec[1] 0x%02x intspec[2] 0x%02x\n", in qpnpint_irq_domain_translate()
871 if (irq_domain_get_of_node(d) != pmic_arb->spmic->dev.of_node) in qpnpint_irq_domain_translate()
879 rc = pmic_arb->ver_ops->ppid_to_apid(pmic_arb, ppid); in qpnpint_irq_domain_translate()
881 dev_err(&pmic_arb->spmic->dev, "failed to xlate sid = %#x, periph = %#x, irq = %u rc = %d\n", 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()
896 dev_dbg(&pmic_arb->spmic->dev, "out_hwirq = %lu\n", *out_hwirq); in qpnpint_irq_domain_translate()
903 static void qpnpint_irq_domain_map(struct spmi_pmic_arb *pmic_arb, in qpnpint_irq_domain_map() argument
909 dev_dbg(&pmic_arb->spmic->dev, "virq = %u, hwirq = %lu, type = %u\n", in qpnpint_irq_domain_map()
920 irq_domain_set_info(domain, virq, hwirq, &pmic_arb_irqchip, pmic_arb, in qpnpint_irq_domain_map()
928 struct spmi_pmic_arb *pmic_arb = domain->host_data; in qpnpint_irq_domain_alloc() local
939 qpnpint_irq_domain_map(pmic_arb, domain, virq + i, hwirq + i, in qpnpint_irq_domain_alloc()
945 static int pmic_arb_ppid_to_apid_v1(struct spmi_pmic_arb *pmic_arb, u16 ppid) in pmic_arb_ppid_to_apid_v1() argument
947 u32 *mapping_table = pmic_arb->mapping_table; in pmic_arb_ppid_to_apid_v1()
953 apid_valid = pmic_arb->ppid_to_apid[ppid]; in pmic_arb_ppid_to_apid_v1()
960 if (!test_and_set_bit(index, pmic_arb->mapping_table_valid)) in pmic_arb_ppid_to_apid_v1()
961 mapping_table[index] = readl_relaxed(pmic_arb->cnfg + in pmic_arb_ppid_to_apid_v1()
971 pmic_arb->ppid_to_apid[ppid] in pmic_arb_ppid_to_apid_v1()
973 pmic_arb->apid_data[apid].ppid = ppid; in pmic_arb_ppid_to_apid_v1()
981 pmic_arb->ppid_to_apid[ppid] in pmic_arb_ppid_to_apid_v1()
983 pmic_arb->apid_data[apid].ppid = ppid; in pmic_arb_ppid_to_apid_v1()
993 static int pmic_arb_offset_v1(struct spmi_pmic_arb *pmic_arb, u8 sid, u16 addr, in pmic_arb_offset_v1() argument
996 return 0x800 + 0x80 * pmic_arb->channel; in pmic_arb_offset_v1()
999 static u16 pmic_arb_find_apid(struct spmi_pmic_arb *pmic_arb, u16 ppid) in pmic_arb_find_apid() argument
1001 struct apid_data *apidd = &pmic_arb->apid_data[pmic_arb->last_apid]; in pmic_arb_find_apid()
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()
1007 if (offset >= pmic_arb->core_size) in pmic_arb_find_apid()
1010 regval = readl_relaxed(pmic_arb->ver_ops->apid_owner(pmic_arb, in pmic_arb_find_apid()
1015 regval = readl_relaxed(pmic_arb->core + offset); in pmic_arb_find_apid()
1020 pmic_arb->ppid_to_apid[id] = 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()
1032 static int pmic_arb_ppid_to_apid_v2(struct spmi_pmic_arb *pmic_arb, u16 ppid) in pmic_arb_ppid_to_apid_v2() argument
1036 apid_valid = pmic_arb->ppid_to_apid[ppid]; in pmic_arb_ppid_to_apid_v2()
1038 apid_valid = pmic_arb_find_apid(pmic_arb, ppid); in pmic_arb_ppid_to_apid_v2()
1045 static int pmic_arb_read_apid_map_v5(struct spmi_pmic_arb *pmic_arb) in pmic_arb_read_apid_map_v5() argument
1068 apidd = &pmic_arb->apid_data[pmic_arb->base_apid]; in pmic_arb_read_apid_map_v5()
1069 apid_max = pmic_arb->base_apid + pmic_arb->apid_count; in pmic_arb_read_apid_map_v5()
1070 for (i = pmic_arb->base_apid; i < apid_max; i++, apidd++) { in pmic_arb_read_apid_map_v5()
1071 offset = pmic_arb->ver_ops->apid_map_offset(i); in pmic_arb_read_apid_map_v5()
1072 if (offset >= pmic_arb->core_size) in pmic_arb_read_apid_map_v5()
1075 regval = readl_relaxed(pmic_arb->core + offset); in pmic_arb_read_apid_map_v5()
1081 regval = readl_relaxed(pmic_arb->ver_ops->apid_owner(pmic_arb, in pmic_arb_read_apid_map_v5()
1087 valid = pmic_arb->ppid_to_apid[ppid] & PMIC_ARB_APID_VALID; 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()
1091 if (!valid || apidd->write_ee == pmic_arb->ee) { in pmic_arb_read_apid_map_v5()
1093 pmic_arb->ppid_to_apid[ppid] = i | PMIC_ARB_APID_VALID; in pmic_arb_read_apid_map_v5()
1095 prev_apidd->write_ee == pmic_arb->ee) { in pmic_arb_read_apid_map_v5()
1104 pmic_arb->last_apid = i; 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()
1113 apidd = &pmic_arb->apid_data[apid]; in pmic_arb_read_apid_map_v5()
1114 dev_dbg(&pmic_arb->spmic->dev, "%#03X %3u %2u %2u\n", in pmic_arb_read_apid_map_v5()
1122 static int pmic_arb_ppid_to_apid_v5(struct spmi_pmic_arb *pmic_arb, u16 ppid) in pmic_arb_ppid_to_apid_v5() argument
1124 if (!(pmic_arb->ppid_to_apid[ppid] & PMIC_ARB_APID_VALID)) in pmic_arb_ppid_to_apid_v5()
1127 return pmic_arb->ppid_to_apid[ppid] & ~PMIC_ARB_APID_VALID; in pmic_arb_ppid_to_apid_v5()
1131 static int pmic_arb_offset_v2(struct spmi_pmic_arb *pmic_arb, u8 sid, u16 addr, in pmic_arb_offset_v2() argument
1139 rc = pmic_arb_ppid_to_apid_v2(pmic_arb, ppid); in pmic_arb_offset_v2()
1144 return 0x1000 * pmic_arb->ee + 0x8000 * apid; in pmic_arb_offset_v2()
1151 static int pmic_arb_offset_v5(struct spmi_pmic_arb *pmic_arb, u8 sid, u16 addr, in pmic_arb_offset_v5() argument
1159 rc = pmic_arb_ppid_to_apid_v5(pmic_arb, ppid); 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()
1170 dev_err(&pmic_arb->spmic->dev, "disallowed SPMI write to sid=%u, addr=0x%04X\n", in pmic_arb_offset_v5()
1185 static int pmic_arb_offset_v7(struct spmi_pmic_arb *pmic_arb, u8 sid, u16 addr, in pmic_arb_offset_v7() argument
1193 rc = pmic_arb->ver_ops->ppid_to_apid(pmic_arb, ppid); 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()
1204 dev_err(&pmic_arb->spmic->dev, "disallowed SPMI write to sid=%u, addr=0x%04X\n", in pmic_arb_offset_v7()
1226 pmic_arb_owner_acc_status_v1(struct spmi_pmic_arb *pmic_arb, u8 m, u16 n) in pmic_arb_owner_acc_status_v1() argument
1228 return pmic_arb->intr + 0x20 * m + 0x4 * n; in pmic_arb_owner_acc_status_v1()
1232 pmic_arb_owner_acc_status_v2(struct spmi_pmic_arb *pmic_arb, u8 m, u16 n) in pmic_arb_owner_acc_status_v2() argument
1234 return pmic_arb->intr + 0x100000 + 0x1000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v2()
1238 pmic_arb_owner_acc_status_v3(struct spmi_pmic_arb *pmic_arb, u8 m, u16 n) in pmic_arb_owner_acc_status_v3() argument
1240 return pmic_arb->intr + 0x200000 + 0x1000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v3()
1244 pmic_arb_owner_acc_status_v5(struct spmi_pmic_arb *pmic_arb, u8 m, u16 n) in pmic_arb_owner_acc_status_v5() argument
1246 return pmic_arb->intr + 0x10000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v5()
1250 pmic_arb_owner_acc_status_v7(struct spmi_pmic_arb *pmic_arb, u8 m, u16 n) in pmic_arb_owner_acc_status_v7() argument
1252 return pmic_arb->intr + 0x1000 * m + 0x4 * n; in pmic_arb_owner_acc_status_v7()
1256 pmic_arb_acc_enable_v1(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_acc_enable_v1() argument
1258 return pmic_arb->intr + 0x200 + 0x4 * n; in pmic_arb_acc_enable_v1()
1262 pmic_arb_acc_enable_v2(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_acc_enable_v2() argument
1264 return pmic_arb->intr + 0x1000 * n; in pmic_arb_acc_enable_v2()
1268 pmic_arb_acc_enable_v5(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_acc_enable_v5() argument
1270 return pmic_arb->wr_base + 0x100 + 0x10000 * n; in pmic_arb_acc_enable_v5()
1274 pmic_arb_acc_enable_v7(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_acc_enable_v7() argument
1276 return pmic_arb->wr_base + 0x100 + 0x1000 * n; in pmic_arb_acc_enable_v7()
1280 pmic_arb_irq_status_v1(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_status_v1() argument
1282 return pmic_arb->intr + 0x600 + 0x4 * n; in pmic_arb_irq_status_v1()
1286 pmic_arb_irq_status_v2(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_status_v2() argument
1288 return pmic_arb->intr + 0x4 + 0x1000 * n; in pmic_arb_irq_status_v2()
1292 pmic_arb_irq_status_v5(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_status_v5() argument
1294 return pmic_arb->wr_base + 0x104 + 0x10000 * n; in pmic_arb_irq_status_v5()
1298 pmic_arb_irq_status_v7(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_status_v7() argument
1300 return pmic_arb->wr_base + 0x104 + 0x1000 * n; in pmic_arb_irq_status_v7()
1304 pmic_arb_irq_clear_v1(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_clear_v1() argument
1306 return pmic_arb->intr + 0xA00 + 0x4 * n; in pmic_arb_irq_clear_v1()
1310 pmic_arb_irq_clear_v2(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_clear_v2() argument
1312 return pmic_arb->intr + 0x8 + 0x1000 * n; in pmic_arb_irq_clear_v2()
1316 pmic_arb_irq_clear_v5(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_clear_v5() argument
1318 return pmic_arb->wr_base + 0x108 + 0x10000 * n; in pmic_arb_irq_clear_v5()
1322 pmic_arb_irq_clear_v7(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_irq_clear_v7() argument
1324 return pmic_arb->wr_base + 0x108 + 0x1000 * n; in pmic_arb_irq_clear_v7()
1343 pmic_arb_apid_owner_v2(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_apid_owner_v2() argument
1345 return pmic_arb->cnfg + 0x700 + 0x4 * n; in pmic_arb_apid_owner_v2()
1354 pmic_arb_apid_owner_v7(struct spmi_pmic_arb *pmic_arb, u16 n) in pmic_arb_apid_owner_v7() argument
1356 return pmic_arb->cnfg + 0x4 * (n - pmic_arb->base_apid); in pmic_arb_apid_owner_v7()
1438 struct spmi_pmic_arb *pmic_arb; in spmi_pmic_arb_probe() local
1446 ctrl = spmi_controller_alloc(&pdev->dev, sizeof(*pmic_arb)); in spmi_pmic_arb_probe()
1450 pmic_arb = spmi_controller_get_drvdata(ctrl); in spmi_pmic_arb_probe()
1451 pmic_arb->spmic = ctrl; in spmi_pmic_arb_probe()
1470 pmic_arb->core_size = resource_size(res); in spmi_pmic_arb_probe()
1472 pmic_arb->ppid_to_apid = devm_kcalloc(&ctrl->dev, PMIC_ARB_MAX_PPID, in spmi_pmic_arb_probe()
1473 sizeof(*pmic_arb->ppid_to_apid), in spmi_pmic_arb_probe()
1475 if (!pmic_arb->ppid_to_apid) { in spmi_pmic_arb_probe()
1483 pmic_arb->ver_ops = &pmic_arb_v1; in spmi_pmic_arb_probe()
1484 pmic_arb->wr_base = core; in spmi_pmic_arb_probe()
1485 pmic_arb->rd_base = core; in spmi_pmic_arb_probe()
1487 pmic_arb->core = core; in spmi_pmic_arb_probe()
1490 pmic_arb->ver_ops = &pmic_arb_v2; in spmi_pmic_arb_probe()
1492 pmic_arb->ver_ops = &pmic_arb_v3; in spmi_pmic_arb_probe()
1494 pmic_arb->ver_ops = &pmic_arb_v5; in spmi_pmic_arb_probe()
1496 pmic_arb->ver_ops = &pmic_arb_v7; in spmi_pmic_arb_probe()
1500 pmic_arb->rd_base = devm_ioremap(&ctrl->dev, res->start, in spmi_pmic_arb_probe()
1502 if (IS_ERR(pmic_arb->rd_base)) { in spmi_pmic_arb_probe()
1503 err = PTR_ERR(pmic_arb->rd_base); in spmi_pmic_arb_probe()
1509 pmic_arb->wr_base = devm_ioremap(&ctrl->dev, res->start, in spmi_pmic_arb_probe()
1511 if (IS_ERR(pmic_arb->wr_base)) { in spmi_pmic_arb_probe()
1512 err = PTR_ERR(pmic_arb->wr_base); in spmi_pmic_arb_probe()
1517 pmic_arb->max_periphs = PMIC_ARB_MAX_PERIPHS; in spmi_pmic_arb_probe()
1520 pmic_arb->max_periphs = PMIC_ARB_MAX_PERIPHS_V7; in spmi_pmic_arb_probe()
1523 &pmic_arb->bus_instance); in spmi_pmic_arb_probe()
1524 if (pmic_arb->bus_instance > 1) { in spmi_pmic_arb_probe()
1527 pmic_arb->bus_instance); in spmi_pmic_arb_probe()
1531 if (pmic_arb->bus_instance == 0) { in spmi_pmic_arb_probe()
1532 pmic_arb->base_apid = 0; in spmi_pmic_arb_probe()
1533 pmic_arb->apid_count = in spmi_pmic_arb_probe()
1537 pmic_arb->base_apid = in spmi_pmic_arb_probe()
1540 pmic_arb->apid_count = in spmi_pmic_arb_probe()
1545 if (pmic_arb->base_apid + pmic_arb->apid_count > pmic_arb->max_periphs) { in spmi_pmic_arb_probe()
1548 pmic_arb->base_apid + pmic_arb->apid_count); in spmi_pmic_arb_probe()
1552 pmic_arb->base_apid = 0; in spmi_pmic_arb_probe()
1553 pmic_arb->apid_count = readl_relaxed(core + PMIC_ARB_FEATURES) & in spmi_pmic_arb_probe()
1556 if (pmic_arb->apid_count > pmic_arb->max_periphs) { in spmi_pmic_arb_probe()
1559 pmic_arb->apid_count); in spmi_pmic_arb_probe()
1564 pmic_arb->apid_data = devm_kcalloc(&ctrl->dev, pmic_arb->max_periphs, in spmi_pmic_arb_probe()
1565 sizeof(*pmic_arb->apid_data), in spmi_pmic_arb_probe()
1567 if (!pmic_arb->apid_data) { in spmi_pmic_arb_probe()
1573 pmic_arb->ver_ops->ver_str, hw_ver); in spmi_pmic_arb_probe()
1576 pmic_arb->intr = devm_ioremap_resource(&ctrl->dev, res); in spmi_pmic_arb_probe()
1577 if (IS_ERR(pmic_arb->intr)) { in spmi_pmic_arb_probe()
1578 err = PTR_ERR(pmic_arb->intr); in spmi_pmic_arb_probe()
1583 pmic_arb->cnfg = devm_ioremap_resource(&ctrl->dev, res); in spmi_pmic_arb_probe()
1584 if (IS_ERR(pmic_arb->cnfg)) { in spmi_pmic_arb_probe()
1585 err = PTR_ERR(pmic_arb->cnfg); in spmi_pmic_arb_probe()
1589 pmic_arb->irq = platform_get_irq_byname(pdev, "periph_irq"); in spmi_pmic_arb_probe()
1590 if (pmic_arb->irq < 0) { in spmi_pmic_arb_probe()
1591 err = pmic_arb->irq; in spmi_pmic_arb_probe()
1608 pmic_arb->channel = channel; in spmi_pmic_arb_probe()
1622 pmic_arb->ee = ee; in spmi_pmic_arb_probe()
1623 mapping_table = devm_kcalloc(&ctrl->dev, pmic_arb->max_periphs, in spmi_pmic_arb_probe()
1630 pmic_arb->mapping_table = mapping_table; in spmi_pmic_arb_probe()
1633 pmic_arb->max_apid = 0; in spmi_pmic_arb_probe()
1634 pmic_arb->min_apid = pmic_arb->max_periphs - 1; in spmi_pmic_arb_probe()
1637 raw_spin_lock_init(&pmic_arb->lock); in spmi_pmic_arb_probe()
1644 err = pmic_arb_read_apid_map_v5(pmic_arb); in spmi_pmic_arb_probe()
1653 pmic_arb->domain = irq_domain_add_tree(pdev->dev.of_node, in spmi_pmic_arb_probe()
1654 &pmic_arb_irq_domain_ops, pmic_arb); in spmi_pmic_arb_probe()
1655 if (!pmic_arb->domain) { in spmi_pmic_arb_probe()
1661 irq_set_chained_handler_and_data(pmic_arb->irq, pmic_arb_chained_irq, in spmi_pmic_arb_probe()
1662 pmic_arb); in spmi_pmic_arb_probe()
1670 irq_set_chained_handler_and_data(pmic_arb->irq, NULL, NULL); in spmi_pmic_arb_probe()
1671 irq_domain_remove(pmic_arb->domain); in spmi_pmic_arb_probe()
1680 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl); in spmi_pmic_arb_remove() local
1682 irq_set_chained_handler_and_data(pmic_arb->irq, NULL, NULL); in spmi_pmic_arb_remove()
1683 irq_domain_remove(pmic_arb->domain); in spmi_pmic_arb_remove()