Quoting Fenglin Wu (2021-09-16 23:33:00) > From: David Collins <collinsd@xxxxxxxxxxxxxx> > > Correct the way that duplicate PPID mappings are handled for PMIC > arbiter v5. The final APID mapped to a given PPID should be the > one which has write owner = APPS EE, if it exists, or if not > that, then the first APID mapped to the PPID, if it exists. > > Signed-off-by: David Collins <collinsd@xxxxxxxxxxxxxx> > Signed-off-by: Fenglin Wu <quic_fenglinw@xxxxxxxxxxx> > --- Does this need a Fixes tag? > drivers/spmi/spmi-pmic-arb.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c > index 59c445b..f1b72d8 100644 > --- a/drivers/spmi/spmi-pmic-arb.c > +++ b/drivers/spmi/spmi-pmic-arb.c > @@ -918,7 +918,8 @@ static int pmic_arb_read_apid_map_v5(struct spmi_pmic_arb *pmic_arb) > * version 5, there is more than one APID mapped to each PPID. > * The owner field for each of these mappings specifies the EE which is > * allowed to write to the APID. The owner of the last (highest) APID > - * for a given PPID will receive interrupts from the PPID. > + * which has the IRQ owner bit set for a given PPID will receive > + * interrupts from the PPID. > */ > for (i = 0; ; i++, apidd++) { > offset = pmic_arb->ver_ops->apid_map_offset(i); > @@ -941,16 +942,16 @@ static int pmic_arb_read_apid_map_v5(struct spmi_pmic_arb *pmic_arb) > apid = pmic_arb->ppid_to_apid[ppid] & ~PMIC_ARB_APID_VALID; > prev_apidd = &pmic_arb->apid_data[apid]; > > - if (valid && is_irq_ee && > - prev_apidd->write_ee == pmic_arb->ee) { > + if (!valid || apidd->write_ee == pmic_arb->ee) { > + /* First PPID mapping or one for this EE */ > + pmic_arb->ppid_to_apid[ppid] = i | PMIC_ARB_APID_VALID; > + } else if (valid && is_irq_ee && > + prev_apidd->write_ee == pmic_arb->ee) { This can be one line please. > /* > * Duplicate PPID mapping after the one for this EE; > * override the irq owner > */ > prev_apidd->irq_ee = apidd->irq_ee; > - } else if (!valid || is_irq_ee) { > - /* First PPID mapping or duplicate for another EE */ > - pmic_arb->ppid_to_apid[ppid] = i | PMIC_ARB_APID_VALID; > } > > apidd->ppid = ppid; > -- > 2.7.4 >