[Skiboot] [RFC PATCH 15/23] hw/phb3: Convert to generic FRESET
Frederic Barrat
fbarrat at linux.ibm.com
Thu Aug 1 05:23:55 AEST 2019
Le 03/04/2019 à 11:09, Oliver O'Halloran a écrit :
> NB: This removes the 1s wait after lifting PERST. This wait was added to
> allow some FPGA cards time to flash their bitstream since the PCIe
> interface would not be enabled until the image was flashed. We has since
> extended the time we spend waiting for an electrical link to 1s so this
> wait should not be necessary any longer.
>
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
> ---
> Tested on p83 with an Altera FPGA card with a CAPI image. Seems to work
> just fine...
> ---
> hw/phb3.c | 57 +------------------------------------------------------
> 1 file changed, 1 insertion(+), 56 deletions(-)
>
> diff --git a/hw/phb3.c b/hw/phb3.c
> index 4ac6aa729c4d..d86fb74bbbf9 100644
> --- a/hw/phb3.c
> +++ b/hw/phb3.c
> @@ -2418,61 +2418,6 @@ static int64_t phb3_assert_perst(struct pci_slot *slot, bool assert)
> return OPAL_SUCCESS;
> }
>
> -static int64_t phb3_freset(struct pci_slot *slot)
> -{
> - struct phb3 *p = phb_to_phb3(slot->phb);
> - uint8_t presence = 1;
> -
> - switch(slot->state) {
> - case PHB3_SLOT_NORMAL:
> - PHBDBG(p, "FRESET: Starts\n");
> -
> - /* Nothing to do without adapter connected */
> - if (slot->ops.get_presence_state)
> - slot->ops.get_presence_state(slot, &presence);
> - if (!presence) {
> - PHBDBG(p, "FRESET: No device\n");
> - return OPAL_SUCCESS;
> - }
So we're losing presence detection with the generic freset. I haven't
followed through exactly the consequences, hopefully we won't try to
train the link (?)
Fred
> -
> - PHBDBG(p, "FRESET: Prepare for link down\n");
> - slot->retry_state = PHB3_SLOT_FRESET_START;
> - if (slot->ops.prepare_link_change)
> - slot->ops.prepare_link_change(slot, false);
> - /* fall through */
> - case PHB3_SLOT_FRESET_START:
> - if (!p->skip_perst) {
> - PHBDBG(p, "FRESET: Assert\n");
> - phb3_assert_perst(slot, true);
> - pci_slot_set_state(slot,
> - PHB3_SLOT_FRESET_ASSERT_DELAY);
> - return pci_slot_set_sm_timeout(slot, secs_to_tb(1));
> - }
> -
> - /* To skip the assert during boot time */
> - PHBDBG(p, "FRESET: Assert skipped\n");
> - pci_slot_set_state(slot, PHB3_SLOT_FRESET_ASSERT_DELAY);
> - p->skip_perst = false;
> - /* fall through */
> - case PHB3_SLOT_FRESET_ASSERT_DELAY:
> - PHBDBG(p, "FRESET: Deassert\n");
> - phb3_assert_perst(slot, false);
> - pci_slot_set_state(slot,
> - PHB3_SLOT_FRESET_DEASSERT_DELAY);
> -
> - /* CAPP FPGA requires 1s to flash before polling link */
> - return pci_slot_set_sm_timeout(slot, secs_to_tb(1));
> - case PHB3_SLOT_FRESET_DEASSERT_DELAY:
> - pci_slot_set_state(slot, PHB3_SLOT_LINK_START);
> - return slot->ops.poll_link(slot);
> - default:
> - PHBERR(p, "Unexpected slot state %08x\n", slot->state);
> - }
> -
> - pci_slot_set_state(slot, PHB3_SLOT_NORMAL);
> - return OPAL_HARDWARE;
> -}
> -
> static int64_t load_capp_ucode(struct phb3 *p)
> {
> int64_t rc;
> @@ -2753,7 +2698,7 @@ static struct pci_slot *phb3_slot_create(struct phb *phb)
> slot->ops.prepare_link_change = phb3_prepare_link_change;
> slot->ops.poll_link = phb3_poll_link;
> slot->ops.hreset = phb3_hreset;
> - slot->ops.freset = phb3_freset;
> + slot->ops.freset = pci_slot_generic_freset;
> slot->ops.creset = phb3_creset;
>
> return slot;
>
More information about the Skiboot
mailing list