Message ID | 20190403090920.362-12-oohall@gmail.com |
---|---|
State | RFC |
Headers | show |
Series | [RFC,01/23] platform/firenze-pci: Remove freset | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch master (050d8165ab05b6d9cdf4bfee42d9776969c77029) |
snowpatch_ozlabs/apply_patch | fail | Failed to apply to any branch |
Le 03/04/2019 à 11:09, Oliver O'Halloran a écrit : > For slots where we have power control we can use the generic FRESET > method. > > Signed-off-by: Oliver O'Halloran <oohall@gmail.com> > --- > platforms/ibm-fsp/firenze-pci.c | 25 +++++++++++++++++++++++-- > 1 file changed, 23 insertions(+), 2 deletions(-) > > diff --git a/platforms/ibm-fsp/firenze-pci.c b/platforms/ibm-fsp/firenze-pci.c > index 36414425e80d..3221ba92a83d 100644 > --- a/platforms/ibm-fsp/firenze-pci.c > +++ b/platforms/ibm-fsp/firenze-pci.c > @@ -360,14 +360,32 @@ bail: > firenze_inv_cnt = 0; > } > > -static int64_t __unused firenze_pci_slot_get_power_state(struct pci_slot *slot, > +static int64_t firenze_pci_inband_perst(struct pci_slot *slot, > + bool val) > +{ > + struct firenze_pci_slot *plat_slot = slot->data; > + uint16_t ctrl, bdfn = slot->pd->bdfn; > + > + pci_cfg_read16(slot->phb, bdfn, plat_slot->perst_reg, &ctrl); > + > + if (val) > + ctrl |= plat_slot->perst_bit; > + else > + ctrl &= ~plat_slot->perst_bit; > + > + pci_cfg_write16(slot->phb, bdfn, plat_slot->perst_reg, ctrl); > + > + return OPAL_SUCCESS; > +} > + This function comes out of nowhere. I think the intent is to have it in the next patch. Fred > +static int64_t firenze_pci_slot_get_power_state(struct pci_slot *slot, > uint8_t *val) > { > *val = slot->power_state; > return OPAL_SUCCESS; > } > > -static int64_t __unused firenze_pci_slot_set_power_state(struct pci_slot *slot, > +static int64_t firenze_pci_slot_set_power_state(struct pci_slot *slot, > uint8_t val) > { > struct firenze_pci_slot *plat_slot = slot->data; > @@ -644,6 +662,9 @@ static void firenze_pci_slot_init(struct pci_slot *slot) > */ > if (plat_slot->req) { > /* placeholder */ > + slot->ops.freset = pci_slot_generic_freset; > + slot->ops.get_power_state = firenze_pci_slot_get_power_state; > + slot->ops.set_power_state = firenze_pci_slot_set_power_state; > prlog(PR_DEBUG, "%016llx: External power mgt initialized\n", > slot->id); > } else if (info->inband_perst) { >
diff --git a/platforms/ibm-fsp/firenze-pci.c b/platforms/ibm-fsp/firenze-pci.c index 36414425e80d..3221ba92a83d 100644 --- a/platforms/ibm-fsp/firenze-pci.c +++ b/platforms/ibm-fsp/firenze-pci.c @@ -360,14 +360,32 @@ bail: firenze_inv_cnt = 0; } -static int64_t __unused firenze_pci_slot_get_power_state(struct pci_slot *slot, +static int64_t firenze_pci_inband_perst(struct pci_slot *slot, + bool val) +{ + struct firenze_pci_slot *plat_slot = slot->data; + uint16_t ctrl, bdfn = slot->pd->bdfn; + + pci_cfg_read16(slot->phb, bdfn, plat_slot->perst_reg, &ctrl); + + if (val) + ctrl |= plat_slot->perst_bit; + else + ctrl &= ~plat_slot->perst_bit; + + pci_cfg_write16(slot->phb, bdfn, plat_slot->perst_reg, ctrl); + + return OPAL_SUCCESS; +} + +static int64_t firenze_pci_slot_get_power_state(struct pci_slot *slot, uint8_t *val) { *val = slot->power_state; return OPAL_SUCCESS; } -static int64_t __unused firenze_pci_slot_set_power_state(struct pci_slot *slot, +static int64_t firenze_pci_slot_set_power_state(struct pci_slot *slot, uint8_t val) { struct firenze_pci_slot *plat_slot = slot->data; @@ -644,6 +662,9 @@ static void firenze_pci_slot_init(struct pci_slot *slot) */ if (plat_slot->req) { /* placeholder */ + slot->ops.freset = pci_slot_generic_freset; + slot->ops.get_power_state = firenze_pci_slot_get_power_state; + slot->ops.set_power_state = firenze_pci_slot_set_power_state; prlog(PR_DEBUG, "%016llx: External power mgt initialized\n", slot->id); } else if (info->inband_perst) {
For slots where we have power control we can use the generic FRESET method. Signed-off-by: Oliver O'Halloran <oohall@gmail.com> --- platforms/ibm-fsp/firenze-pci.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)