All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: bhelgaas@google.com, linux-pci@vger.kernel.org,
	linux-kernel@vger.kernel.org, ashok.raj@intel.com,
	Len Brown <lenb@kernel.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>
Subject: Re: [PATCH v18 10/11] PCI/DPC: Add Error Disconnect Recover (EDR) support
Date: Thu, 11 Apr 2024 12:16:06 -0700	[thread overview]
Message-ID: <d1f40ee3-ffac-4277-a5b5-6f3d678dff6b@linux.intel.com> (raw)
In-Reply-To: <20240411180757.GA2190937@bhelgaas>


On 4/11/24 11:07 AM, Bjorn Helgaas wrote:
> On Mon, Mar 23, 2020 at 05:26:07PM -0700, sathyanarayanan.kuppuswamy@linux.intel.com wrote:
>> From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
>>
>> Error Disconnect Recover (EDR) is a feature that allows ACPI firmware to
>> notify OSPM that a device has been disconnected due to an error condition
>> (ACPI v6.3, sec 5.6.6).  OSPM advertises its support for EDR on PCI devices
>> via _OSC (see [1], sec 4.5.1, table 4-4).  The OSPM EDR notify handler
>> should invalidate software state associated with disconnected devices and
>> may attempt to recover them.  OSPM communicates the status of recovery to
>> the firmware via _OST (sec 6.3.5.2).
>>
>> For PCIe, firmware may use Downstream Port Containment (DPC) to support
>> EDR.  Per [1], sec 4.5.1, table 4-6, even if firmware has retained control
>> of DPC, OSPM may read/write DPC control and status registers during the EDR
>> notification processing window, i.e., from the time it receives an EDR
>> notification until it clears the DPC Trigger Status.
>>
>> Note that per [1], sec 4.5.1 and 4.5.2.4,
>>
>>   1. If the OS supports EDR, it should advertise that to firmware by
>>      setting OSC_PCI_EDR_SUPPORT in _OSC Support.
>>
>>   2. If the OS sets OSC_PCI_EXPRESS_DPC_CONTROL in _OSC Control to request
>>      control of the DPC capability, it must also set OSC_PCI_EDR_SUPPORT in
>>      _OSC Support.
>>
>> Add an EDR notify handler to attempt recovery.
>>
>> [1] Downstream Port Containment Related Enhancements ECN, Jan 28, 2019,
>>     affecting PCI Firmware Specification, Rev. 3.2
>>     https://members.pcisig.com/wg/PCI-SIG/document/12888
>> +static int acpi_enable_dpc(struct pci_dev *pdev)
>> +{
>> +	struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
>> +	union acpi_object *obj, argv4, req;
>> +	int status;
>> +
>> +	/*
>> +	 * Some firmware implementations will return default values for
>> +	 * unsupported _DSM calls. So checking acpi_evaluate_dsm() return
>> +	 * value for NULL condition is not a complete method for finding
>> +	 * whether given _DSM function is supported or not. So use
>> +	 * explicit func 0 call to find whether given _DSM function is
>> +	 * supported or not.
>> +	 */
>> +        status = acpi_check_dsm(adev->handle, &pci_acpi_dsm_guid, 5,
>> +				1ULL << EDR_PORT_DPC_ENABLE_DSM);
>> +        if (!status)
>> +                return 0;
>> +
>> +	status = 0;
>> +	req.type = ACPI_TYPE_INTEGER;
>> +	req.integer.value = 1;
>> +
>> +	argv4.type = ACPI_TYPE_PACKAGE;
>> +	argv4.package.count = 1;
>> +	argv4.package.elements = &req;
>> +
>> +	/*
>> +	 * Per Downstream Port Containment Related Enhancements ECN to PCI
>> +	 * Firmware Specification r3.2, sec 4.6.12, EDR_PORT_DPC_ENABLE_DSM is
>> +	 * optional.  Return success if it's not implemented.
>> +	 */
>> +	obj = acpi_evaluate_dsm(adev->handle, &pci_acpi_dsm_guid, 5,
>> +				EDR_PORT_DPC_ENABLE_DSM, &argv4);
> This has been upstream for a while, just a follow-up question: this
> _DSM function was defined by the ECN with Rev 5.  The ECN was
> incorporated into the PCI Firmware spec r3.3 with slightly different
> behavior as Rev 6.
>
> The main differences are:
>
>   ECN
>     - Rev 5
>     - Arg3 is an Integer
>     - Return is 0 (DPC disabled) or 1 (DPC enabled)
>
>   r3.3 spec
>     - Rev 6
>     - Arg3 is a Package of one Integer
>     - Return is 0 (DPC disabled, Hot-Plug Surprise may be set), 1 (DPC
>       enabled, Hot-Plug Surprise may be cleared), or 2 (failure)
>
> So the question is whether this actually implements Rev 5 or Rev 6?
> It looks like this builds a *package* for Arg3 (which would correspond
> to Rev 6), but we're evaluating Rev 5, which specified an Integer.
>
> The meaning of the Arg3 values is basically the same, so I don't see
> an issue there, but it looks like if a platform implemented Rev 5
> according to the ECN to take a bare Integer, this might not work
> correctly.

I think it implements rev 6. The version number needs to be updated.

If you would like, I can submit a patch to fix it.

>
>> +	if (!obj)
>> +		return 0;
>> +
>> +	if (obj->type != ACPI_TYPE_INTEGER) {
>> +		pci_err(pdev, FW_BUG "Enable DPC _DSM returned non integer\n");
>> +		status = -EIO;
>> +	}
>> +
>> +	if (obj->integer.value != 1) {
>> +		pci_err(pdev, "Enable DPC _DSM failed to enable DPC\n");
>> +		status = -EIO;
>> +	}
>> +
>> +	ACPI_FREE(obj);
>> +
>> +	return status;
>> +}

-- 
Sathyanarayanan Kuppuswamy
Linux Kernel Developer


  reply	other threads:[~2024-04-11 19:16 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-24  0:25 [PATCH v18 00/11] Add Error Disconnect Recover (EDR) support sathyanarayanan.kuppuswamy
2020-03-24  0:25 ` [PATCH v18 01/11] PCI/ERR: Update error status after reset_link() sathyanarayanan.kuppuswamy
2020-03-24  0:25 ` [PATCH v18 02/11] PCI: move {pciehp,shpchp}_is_native() definitions to pci.c sathyanarayanan.kuppuswamy
2020-03-24  0:26 ` [PATCH v18 03/11] PCI/DPC: Fix DPC recovery issue in non hotplug case sathyanarayanan.kuppuswamy
2020-03-24 23:49   ` Bjorn Helgaas
2020-03-25  1:17     ` Kuppuswamy, Sathyanarayanan
2020-03-28 17:10       ` Bjorn Helgaas
2020-03-28 22:04         ` Kuppuswamy, Sathyanarayanan
2020-03-28 22:21           ` Bjorn Helgaas
2020-03-28 22:40             ` Kuppuswamy, Sathyanarayanan
2020-03-24  0:26 ` [PATCH v18 04/11] PCI/DPC: Move DPC data into struct pci_dev sathyanarayanan.kuppuswamy
2020-03-24  0:26 ` [PATCH v18 05/11] PCI/ERR: Remove service dependency in pcie_do_recovery() sathyanarayanan.kuppuswamy
2020-03-28 21:12   ` Kuppuswamy, Sathyanarayanan
2020-03-28 21:32     ` Bjorn Helgaas
2020-03-28 21:55       ` Kuppuswamy, Sathyanarayanan
2020-03-28 22:16         ` Bjorn Helgaas
2020-03-24  0:26 ` [PATCH v18 06/11] PCI/ERR: Return status of pcie_do_recovery() sathyanarayanan.kuppuswamy
2020-03-24  0:26 ` [PATCH v18 07/11] PCI/DPC: Cache DPC capabilities in pci_init_capabilities() sathyanarayanan.kuppuswamy
2020-03-24  0:26 ` [PATCH v18 08/11] PCI/AER: Add pci_aer_raw_clear_status() to unconditionally clear Error Status sathyanarayanan.kuppuswamy
2020-03-24  0:26 ` [PATCH v18 09/11] PCI/DPC: Expose dpc_process_error(), dpc_reset_link() for use by EDR sathyanarayanan.kuppuswamy
2020-03-24  0:26 ` [PATCH v18 10/11] PCI/DPC: Add Error Disconnect Recover (EDR) support sathyanarayanan.kuppuswamy
2020-03-24 21:37   ` Bjorn Helgaas
2020-03-25  1:00     ` Kuppuswamy, Sathyanarayanan
2020-03-26 22:36       ` Bjorn Helgaas
2024-04-11 18:07   ` Bjorn Helgaas
2024-04-11 19:16     ` Kuppuswamy Sathyanarayanan [this message]
2020-03-24  0:26 ` [PATCH v18 11/11] PCI/AER: Rationalize error status register clearing sathyanarayanan.kuppuswamy
2020-03-31 15:28 ` [PATCH v18 00/11] Add Error Disconnect Recover (EDR) support Bjorn Helgaas
2020-03-31 16:28   ` Kuppuswamy, Sathyanarayanan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d1f40ee3-ffac-4277-a5b5-6f3d678dff6b@linux.intel.com \
    --to=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=ashok.raj@intel.com \
    --cc=bhelgaas@google.com \
    --cc=helgaas@kernel.org \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.