On Tue, Apr 19, 2016 at 07:04:19PM +1000, Alexey Kardashevskiy wrote: >On 02/17/2016 02:44 PM, Gavin Shan wrote: >>In pnv_pci_reset_secondary_bus(), we should issue fundamental reset >>if any one subordinate device of the specified bus is requesting that. >>Otherwise, the device might not come up after the reset. >> >>Signed-off-by: Gavin Shan <gwshan@xxxxxxxxxxxxxxxxxx> > > >Reviewed-by: Alexey Kardashevskiy <aik@xxxxxxxxx> > > >Out of curiosity - what does "fundamental" reset actually do? > Please refer to the skiboot patches - power off/on the target slot. > >>--- >> arch/powerpc/platforms/powernv/eeh-powernv.c | 21 ++++++++++++++++++++- >> 1 file changed, 20 insertions(+), 1 deletion(-) >> >>diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c >>index 593b8dc..c7454ba 100644 >>--- a/arch/powerpc/platforms/powernv/eeh-powernv.c >>+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c >>@@ -866,9 +866,28 @@ static int pnv_eeh_bridge_reset(struct pci_dev *dev, int option) >> return 0; >> } >> >>+static int pnv_pci_dev_reset_type(struct pci_dev *pdev, void *data) >>+{ >>+ int *freset = data; >>+ >>+ /* >>+ * Stop the iteration immediately if there has any one >>+ * PCI device requesting fundamental reset. >>+ */ >>+ *freset |= pdev->needs_freset; >>+ return *freset; >>+} >>+ >> void pnv_pci_reset_secondary_bus(struct pci_dev *dev) >> { >>- pnv_eeh_bridge_reset(dev, EEH_RESET_HOT); >>+ int option, freset = 0; >>+ >>+ if (dev->subordinate) >>+ pci_walk_bus(dev->subordinate, >>+ pnv_pci_dev_reset_type, &freset); >>+ >>+ option = freset ? EEH_RESET_FUNDAMENTAL : EEH_RESET_HOT; >>+ pnv_eeh_bridge_reset(dev, option); >> pnv_eeh_bridge_reset(dev, EEH_RESET_DEACTIVATE); >> } >> >> > > >-- >Alexey > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html