[PATCH v8 35/45] powerpc/powernv: Fundamental reset in pnv_pci_reset_secondary_bus()
Gavin Shan
gwshan at linux.vnet.ibm.com
Wed Apr 20 11:36:10 AEST 2016
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 at linux.vnet.ibm.com>
>
>
>Reviewed-by: Alexey Kardashevskiy <aik at ozlabs.ru>
>
>
>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
>
More information about the Linuxppc-dev
mailing list