From: Bjorn Helgaas <helgaas@kernel.org>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: linux-pci@vger.kernel.org,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Lukas Wunner" <lukas@wunner.de>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Emmanuel Grumbach" <emmanuel.grumbach@intel.com>,
linux-kernel@vger.kernel.org,
"Bjorn Helgaas" <bhelgaas@google.com>,
ath10k@lists.infradead.org, ath11k@lists.infradead.org,
ath12k@lists.infradead.org, intel-wired-lan@lists.osuosl.org,
linux-arm-kernel@lists.infradead.org,
linux-bluetooth@vger.kernel.org,
linux-mediatek@lists.infradead.org, linux-rdma@vger.kernel.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH v2 05/13] PCI/ASPM: Add pci_enable_link_state()
Date: Wed, 11 Oct 2023 16:53:27 -0500 [thread overview]
Message-ID: <20231011215327.GA1043654@bhelgaas> (raw)
In-Reply-To: <20230918131103.24119-6-ilpo.jarvinen@linux.intel.com>
On Mon, Sep 18, 2023 at 04:10:55PM +0300, Ilpo Järvinen wrote:
> pci_disable_link_state() lacks a symmetric pair. Some drivers want to
> disable ASPM during certain phases of their operation but then
> re-enable it later on. If pci_disable_link_state() is made for the
> device, there is currently no way to re-enable the states that were
> disabled.
pci_disable_link_state() gives drivers a way to disable specified ASPM
states using a bitmask (PCIE_LINK_STATE_L0S, PCIE_LINK_STATE_L1,
PCIE_LINK_STATE_L1_1, etc), but IIUC the driver can't tell exactly
what changed and can't directly restore the original state, e.g.,
- PCIE_LINK_STATE_L1 enabled initially
- driver calls pci_disable_link_state(PCIE_LINK_STATE_L0S)
- driver calls pci_enable_link_state(PCIE_LINK_STATE_L0S)
- PCIE_LINK_STATE_L0S and PCIE_LINK_STATE_L1 are enabled now
Now PCIE_LINK_STATE_L0S is enabled even though it was not initially
enabled. Maybe that's what we want; I dunno.
pci_disable_link_state() currently returns success/failure, but only
r8169 and mt76 even check, and only rtl_init_one() (r8169) has a
non-trivial reason, so it's conceivable that it could return a bitmask
instead.
> Add pci_enable_link_state() to remove ASPM states from the state
> disable mask.
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> drivers/pci/pcie/aspm.c | 42 +++++++++++++++++++++++++++++++++++++++++
> include/linux/pci.h | 2 ++
> 2 files changed, 44 insertions(+)
>
> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
> index 91dc95aca90f..f45d18d47c20 100644
> --- a/drivers/pci/pcie/aspm.c
> +++ b/drivers/pci/pcie/aspm.c
> @@ -1117,6 +1117,48 @@ int pci_disable_link_state(struct pci_dev *pdev, int state)
> }
> EXPORT_SYMBOL(pci_disable_link_state);
>
> +/**
> + * pci_enable_link_state - Re-enable device's link state
> + * @pdev: PCI device
> + * @state: ASPM link states to re-enable
> + *
> + * Enable device's link state that were previously disable so the link is
"state[s] that were previously disable[d]" alludes to the use case you
have in mind, but I don't think it describes how this function
actually works. This function just makes it possible to enable the
specified states. The @state parameter may have nothing to do with
any previously disabled states.
> + * allowed to enter the specific states. Note that if the BIOS didn't grant
> + * ASPM control to the OS, this does nothing because we can't touch the
> + * LNKCTL register.
> + *
> + * Return: 0 or a negative errno.
> + */
> +int pci_enable_link_state(struct pci_dev *pdev, int state)
> +{
> + struct pcie_link_state *link = pcie_aspm_get_link(pdev);
> +
> + if (!link)
> + return -EINVAL;
> + /*
> + * A driver requested that ASPM be enabled on this device, but
> + * if we don't have permission to manage ASPM (e.g., on ACPI
> + * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
> + * the _OSC method), we can't honor that request.
> + */
> + if (aspm_disabled) {
> + pci_warn(pdev, "can't enable ASPM; OS doesn't have ASPM control\n");
> + return -EPERM;
> + }
> +
> + mutex_lock(&aspm_lock);
> + link->aspm_disable &= ~pci_link_state_mask(state);
> + pcie_config_aspm_link(link, policy_to_aspm_state(link));
> +
> + if (state & PCIE_LINK_STATE_CLKPM)
> + link->clkpm_disable = 0;
> + pcie_set_clkpm(link, policy_to_clkpm_state(link));
> + mutex_unlock(&aspm_lock);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(pci_enable_link_state);
> +
> /**
> * pci_set_default_link_state - Set the default device link state
> * @pdev: PCI device
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 3c24ca164104..844d09230264 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1776,11 +1776,13 @@ extern bool pcie_ports_native;
> int pci_disable_link_state(struct pci_dev *pdev, int state);
> int pci_disable_link_state_locked(struct pci_dev *pdev, int state);
> #ifdef CONFIG_PCIEASPM
> +int pci_enable_link_state(struct pci_dev *pdev, int state);
> int pci_set_default_link_state(struct pci_dev *pdev, int state);
> void pcie_no_aspm(void);
> bool pcie_aspm_support_enabled(void);
> bool pcie_aspm_enabled(struct pci_dev *pdev);
> #else
> +static inline int pci_enable_link_state(struct pci_dev *pdev, int state) { return -EOPNOTSUPP; }
> static inline int pci_set_default_link_state(struct pci_dev *pdev, int state)
> { return 0; }
> static inline void pcie_no_aspm(void) { }
> --
> 2.30.2
>
>
> --
> ath12k mailing list
> ath12k@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/ath12k
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas@kernel.org>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: linux-pci@vger.kernel.org,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Lukas Wunner" <lukas@wunner.de>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Emmanuel Grumbach" <emmanuel.grumbach@intel.com>,
linux-kernel@vger.kernel.org,
"Bjorn Helgaas" <bhelgaas@google.com>,
ath10k@lists.infradead.org, ath11k@lists.infradead.org,
ath12k@lists.infradead.org, intel-wired-lan@lists.osuosl.org,
linux-arm-kernel@lists.infradead.org,
linux-bluetooth@vger.kernel.org,
linux-mediatek@lists.infradead.org, linux-rdma@vger.kernel.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH v2 05/13] PCI/ASPM: Add pci_enable_link_state()
Date: Wed, 11 Oct 2023 16:53:27 -0500 [thread overview]
Message-ID: <20231011215327.GA1043654@bhelgaas> (raw)
In-Reply-To: <20230918131103.24119-6-ilpo.jarvinen@linux.intel.com>
On Mon, Sep 18, 2023 at 04:10:55PM +0300, Ilpo Järvinen wrote:
> pci_disable_link_state() lacks a symmetric pair. Some drivers want to
> disable ASPM during certain phases of their operation but then
> re-enable it later on. If pci_disable_link_state() is made for the
> device, there is currently no way to re-enable the states that were
> disabled.
pci_disable_link_state() gives drivers a way to disable specified ASPM
states using a bitmask (PCIE_LINK_STATE_L0S, PCIE_LINK_STATE_L1,
PCIE_LINK_STATE_L1_1, etc), but IIUC the driver can't tell exactly
what changed and can't directly restore the original state, e.g.,
- PCIE_LINK_STATE_L1 enabled initially
- driver calls pci_disable_link_state(PCIE_LINK_STATE_L0S)
- driver calls pci_enable_link_state(PCIE_LINK_STATE_L0S)
- PCIE_LINK_STATE_L0S and PCIE_LINK_STATE_L1 are enabled now
Now PCIE_LINK_STATE_L0S is enabled even though it was not initially
enabled. Maybe that's what we want; I dunno.
pci_disable_link_state() currently returns success/failure, but only
r8169 and mt76 even check, and only rtl_init_one() (r8169) has a
non-trivial reason, so it's conceivable that it could return a bitmask
instead.
> Add pci_enable_link_state() to remove ASPM states from the state
> disable mask.
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> drivers/pci/pcie/aspm.c | 42 +++++++++++++++++++++++++++++++++++++++++
> include/linux/pci.h | 2 ++
> 2 files changed, 44 insertions(+)
>
> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
> index 91dc95aca90f..f45d18d47c20 100644
> --- a/drivers/pci/pcie/aspm.c
> +++ b/drivers/pci/pcie/aspm.c
> @@ -1117,6 +1117,48 @@ int pci_disable_link_state(struct pci_dev *pdev, int state)
> }
> EXPORT_SYMBOL(pci_disable_link_state);
>
> +/**
> + * pci_enable_link_state - Re-enable device's link state
> + * @pdev: PCI device
> + * @state: ASPM link states to re-enable
> + *
> + * Enable device's link state that were previously disable so the link is
"state[s] that were previously disable[d]" alludes to the use case you
have in mind, but I don't think it describes how this function
actually works. This function just makes it possible to enable the
specified states. The @state parameter may have nothing to do with
any previously disabled states.
> + * allowed to enter the specific states. Note that if the BIOS didn't grant
> + * ASPM control to the OS, this does nothing because we can't touch the
> + * LNKCTL register.
> + *
> + * Return: 0 or a negative errno.
> + */
> +int pci_enable_link_state(struct pci_dev *pdev, int state)
> +{
> + struct pcie_link_state *link = pcie_aspm_get_link(pdev);
> +
> + if (!link)
> + return -EINVAL;
> + /*
> + * A driver requested that ASPM be enabled on this device, but
> + * if we don't have permission to manage ASPM (e.g., on ACPI
> + * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
> + * the _OSC method), we can't honor that request.
> + */
> + if (aspm_disabled) {
> + pci_warn(pdev, "can't enable ASPM; OS doesn't have ASPM control\n");
> + return -EPERM;
> + }
> +
> + mutex_lock(&aspm_lock);
> + link->aspm_disable &= ~pci_link_state_mask(state);
> + pcie_config_aspm_link(link, policy_to_aspm_state(link));
> +
> + if (state & PCIE_LINK_STATE_CLKPM)
> + link->clkpm_disable = 0;
> + pcie_set_clkpm(link, policy_to_clkpm_state(link));
> + mutex_unlock(&aspm_lock);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(pci_enable_link_state);
> +
> /**
> * pci_set_default_link_state - Set the default device link state
> * @pdev: PCI device
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 3c24ca164104..844d09230264 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1776,11 +1776,13 @@ extern bool pcie_ports_native;
> int pci_disable_link_state(struct pci_dev *pdev, int state);
> int pci_disable_link_state_locked(struct pci_dev *pdev, int state);
> #ifdef CONFIG_PCIEASPM
> +int pci_enable_link_state(struct pci_dev *pdev, int state);
> int pci_set_default_link_state(struct pci_dev *pdev, int state);
> void pcie_no_aspm(void);
> bool pcie_aspm_support_enabled(void);
> bool pcie_aspm_enabled(struct pci_dev *pdev);
> #else
> +static inline int pci_enable_link_state(struct pci_dev *pdev, int state) { return -EOPNOTSUPP; }
> static inline int pci_set_default_link_state(struct pci_dev *pdev, int state)
> { return 0; }
> static inline void pcie_no_aspm(void) { }
> --
> 2.30.2
>
>
> --
> ath12k mailing list
> ath12k@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/ath12k
--
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas@kernel.org>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: linux-pci@vger.kernel.org,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Lukas Wunner" <lukas@wunner.de>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Emmanuel Grumbach" <emmanuel.grumbach@intel.com>,
linux-kernel@vger.kernel.org,
"Bjorn Helgaas" <bhelgaas@google.com>,
ath10k@lists.infradead.org, ath11k@lists.infradead.org,
ath12k@lists.infradead.org, intel-wired-lan@lists.osuosl.org,
linux-arm-kernel@lists.infradead.org,
linux-bluetooth@vger.kernel.org,
linux-mediatek@lists.infradead.org, linux-rdma@vger.kernel.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH v2 05/13] PCI/ASPM: Add pci_enable_link_state()
Date: Wed, 11 Oct 2023 16:53:27 -0500 [thread overview]
Message-ID: <20231011215327.GA1043654@bhelgaas> (raw)
In-Reply-To: <20230918131103.24119-6-ilpo.jarvinen@linux.intel.com>
On Mon, Sep 18, 2023 at 04:10:55PM +0300, Ilpo Järvinen wrote:
> pci_disable_link_state() lacks a symmetric pair. Some drivers want to
> disable ASPM during certain phases of their operation but then
> re-enable it later on. If pci_disable_link_state() is made for the
> device, there is currently no way to re-enable the states that were
> disabled.
pci_disable_link_state() gives drivers a way to disable specified ASPM
states using a bitmask (PCIE_LINK_STATE_L0S, PCIE_LINK_STATE_L1,
PCIE_LINK_STATE_L1_1, etc), but IIUC the driver can't tell exactly
what changed and can't directly restore the original state, e.g.,
- PCIE_LINK_STATE_L1 enabled initially
- driver calls pci_disable_link_state(PCIE_LINK_STATE_L0S)
- driver calls pci_enable_link_state(PCIE_LINK_STATE_L0S)
- PCIE_LINK_STATE_L0S and PCIE_LINK_STATE_L1 are enabled now
Now PCIE_LINK_STATE_L0S is enabled even though it was not initially
enabled. Maybe that's what we want; I dunno.
pci_disable_link_state() currently returns success/failure, but only
r8169 and mt76 even check, and only rtl_init_one() (r8169) has a
non-trivial reason, so it's conceivable that it could return a bitmask
instead.
> Add pci_enable_link_state() to remove ASPM states from the state
> disable mask.
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> drivers/pci/pcie/aspm.c | 42 +++++++++++++++++++++++++++++++++++++++++
> include/linux/pci.h | 2 ++
> 2 files changed, 44 insertions(+)
>
> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
> index 91dc95aca90f..f45d18d47c20 100644
> --- a/drivers/pci/pcie/aspm.c
> +++ b/drivers/pci/pcie/aspm.c
> @@ -1117,6 +1117,48 @@ int pci_disable_link_state(struct pci_dev *pdev, int state)
> }
> EXPORT_SYMBOL(pci_disable_link_state);
>
> +/**
> + * pci_enable_link_state - Re-enable device's link state
> + * @pdev: PCI device
> + * @state: ASPM link states to re-enable
> + *
> + * Enable device's link state that were previously disable so the link is
"state[s] that were previously disable[d]" alludes to the use case you
have in mind, but I don't think it describes how this function
actually works. This function just makes it possible to enable the
specified states. The @state parameter may have nothing to do with
any previously disabled states.
> + * allowed to enter the specific states. Note that if the BIOS didn't grant
> + * ASPM control to the OS, this does nothing because we can't touch the
> + * LNKCTL register.
> + *
> + * Return: 0 or a negative errno.
> + */
> +int pci_enable_link_state(struct pci_dev *pdev, int state)
> +{
> + struct pcie_link_state *link = pcie_aspm_get_link(pdev);
> +
> + if (!link)
> + return -EINVAL;
> + /*
> + * A driver requested that ASPM be enabled on this device, but
> + * if we don't have permission to manage ASPM (e.g., on ACPI
> + * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
> + * the _OSC method), we can't honor that request.
> + */
> + if (aspm_disabled) {
> + pci_warn(pdev, "can't enable ASPM; OS doesn't have ASPM control\n");
> + return -EPERM;
> + }
> +
> + mutex_lock(&aspm_lock);
> + link->aspm_disable &= ~pci_link_state_mask(state);
> + pcie_config_aspm_link(link, policy_to_aspm_state(link));
> +
> + if (state & PCIE_LINK_STATE_CLKPM)
> + link->clkpm_disable = 0;
> + pcie_set_clkpm(link, policy_to_clkpm_state(link));
> + mutex_unlock(&aspm_lock);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(pci_enable_link_state);
> +
> /**
> * pci_set_default_link_state - Set the default device link state
> * @pdev: PCI device
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 3c24ca164104..844d09230264 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1776,11 +1776,13 @@ extern bool pcie_ports_native;
> int pci_disable_link_state(struct pci_dev *pdev, int state);
> int pci_disable_link_state_locked(struct pci_dev *pdev, int state);
> #ifdef CONFIG_PCIEASPM
> +int pci_enable_link_state(struct pci_dev *pdev, int state);
> int pci_set_default_link_state(struct pci_dev *pdev, int state);
> void pcie_no_aspm(void);
> bool pcie_aspm_support_enabled(void);
> bool pcie_aspm_enabled(struct pci_dev *pdev);
> #else
> +static inline int pci_enable_link_state(struct pci_dev *pdev, int state) { return -EOPNOTSUPP; }
> static inline int pci_set_default_link_state(struct pci_dev *pdev, int state)
> { return 0; }
> static inline void pcie_no_aspm(void) { }
> --
> 2.30.2
>
>
> --
> ath12k mailing list
> ath12k@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/ath12k
--
ath12k mailing list
ath12k@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/ath12k
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas@kernel.org>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: "Krzysztof Wilczyński" <kw@linux.com>,
linux-rdma@vger.kernel.org,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rafael J . Wysocki" <rafael@kernel.org>,
ath12k@lists.infradead.org, linux-pci@vger.kernel.org,
linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org,
ath10k@lists.infradead.org, ath11k@lists.infradead.org,
"Emmanuel Grumbach" <emmanuel.grumbach@intel.com>,
linux-bluetooth@vger.kernel.org, "Lukas Wunner" <lukas@wunner.de>,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
"Bjorn Helgaas" <bhelgaas@google.com>,
linux-mediatek@lists.infradead.org,
"Rob Herring" <robh@kernel.org>,
linux-arm-kernel@lists.infradead.org,
"Heiner Kallweit" <hkallweit1@gmail.com>
Subject: Re: [Intel-wired-lan] [PATCH v2 05/13] PCI/ASPM: Add pci_enable_link_state()
Date: Wed, 11 Oct 2023 16:53:27 -0500 [thread overview]
Message-ID: <20231011215327.GA1043654@bhelgaas> (raw)
In-Reply-To: <20230918131103.24119-6-ilpo.jarvinen@linux.intel.com>
On Mon, Sep 18, 2023 at 04:10:55PM +0300, Ilpo Järvinen wrote:
> pci_disable_link_state() lacks a symmetric pair. Some drivers want to
> disable ASPM during certain phases of their operation but then
> re-enable it later on. If pci_disable_link_state() is made for the
> device, there is currently no way to re-enable the states that were
> disabled.
pci_disable_link_state() gives drivers a way to disable specified ASPM
states using a bitmask (PCIE_LINK_STATE_L0S, PCIE_LINK_STATE_L1,
PCIE_LINK_STATE_L1_1, etc), but IIUC the driver can't tell exactly
what changed and can't directly restore the original state, e.g.,
- PCIE_LINK_STATE_L1 enabled initially
- driver calls pci_disable_link_state(PCIE_LINK_STATE_L0S)
- driver calls pci_enable_link_state(PCIE_LINK_STATE_L0S)
- PCIE_LINK_STATE_L0S and PCIE_LINK_STATE_L1 are enabled now
Now PCIE_LINK_STATE_L0S is enabled even though it was not initially
enabled. Maybe that's what we want; I dunno.
pci_disable_link_state() currently returns success/failure, but only
r8169 and mt76 even check, and only rtl_init_one() (r8169) has a
non-trivial reason, so it's conceivable that it could return a bitmask
instead.
> Add pci_enable_link_state() to remove ASPM states from the state
> disable mask.
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> drivers/pci/pcie/aspm.c | 42 +++++++++++++++++++++++++++++++++++++++++
> include/linux/pci.h | 2 ++
> 2 files changed, 44 insertions(+)
>
> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
> index 91dc95aca90f..f45d18d47c20 100644
> --- a/drivers/pci/pcie/aspm.c
> +++ b/drivers/pci/pcie/aspm.c
> @@ -1117,6 +1117,48 @@ int pci_disable_link_state(struct pci_dev *pdev, int state)
> }
> EXPORT_SYMBOL(pci_disable_link_state);
>
> +/**
> + * pci_enable_link_state - Re-enable device's link state
> + * @pdev: PCI device
> + * @state: ASPM link states to re-enable
> + *
> + * Enable device's link state that were previously disable so the link is
"state[s] that were previously disable[d]" alludes to the use case you
have in mind, but I don't think it describes how this function
actually works. This function just makes it possible to enable the
specified states. The @state parameter may have nothing to do with
any previously disabled states.
> + * allowed to enter the specific states. Note that if the BIOS didn't grant
> + * ASPM control to the OS, this does nothing because we can't touch the
> + * LNKCTL register.
> + *
> + * Return: 0 or a negative errno.
> + */
> +int pci_enable_link_state(struct pci_dev *pdev, int state)
> +{
> + struct pcie_link_state *link = pcie_aspm_get_link(pdev);
> +
> + if (!link)
> + return -EINVAL;
> + /*
> + * A driver requested that ASPM be enabled on this device, but
> + * if we don't have permission to manage ASPM (e.g., on ACPI
> + * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
> + * the _OSC method), we can't honor that request.
> + */
> + if (aspm_disabled) {
> + pci_warn(pdev, "can't enable ASPM; OS doesn't have ASPM control\n");
> + return -EPERM;
> + }
> +
> + mutex_lock(&aspm_lock);
> + link->aspm_disable &= ~pci_link_state_mask(state);
> + pcie_config_aspm_link(link, policy_to_aspm_state(link));
> +
> + if (state & PCIE_LINK_STATE_CLKPM)
> + link->clkpm_disable = 0;
> + pcie_set_clkpm(link, policy_to_clkpm_state(link));
> + mutex_unlock(&aspm_lock);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(pci_enable_link_state);
> +
> /**
> * pci_set_default_link_state - Set the default device link state
> * @pdev: PCI device
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 3c24ca164104..844d09230264 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1776,11 +1776,13 @@ extern bool pcie_ports_native;
> int pci_disable_link_state(struct pci_dev *pdev, int state);
> int pci_disable_link_state_locked(struct pci_dev *pdev, int state);
> #ifdef CONFIG_PCIEASPM
> +int pci_enable_link_state(struct pci_dev *pdev, int state);
> int pci_set_default_link_state(struct pci_dev *pdev, int state);
> void pcie_no_aspm(void);
> bool pcie_aspm_support_enabled(void);
> bool pcie_aspm_enabled(struct pci_dev *pdev);
> #else
> +static inline int pci_enable_link_state(struct pci_dev *pdev, int state) { return -EOPNOTSUPP; }
> static inline int pci_set_default_link_state(struct pci_dev *pdev, int state)
> { return 0; }
> static inline void pcie_no_aspm(void) { }
> --
> 2.30.2
>
>
> --
> ath12k mailing list
> ath12k@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/ath12k
_______________________________________________
Intel-wired-lan mailing list
Intel-wired-lan@osuosl.org
https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas@kernel.org>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: linux-pci@vger.kernel.org,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Lukas Wunner" <lukas@wunner.de>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Emmanuel Grumbach" <emmanuel.grumbach@intel.com>,
linux-kernel@vger.kernel.org,
"Bjorn Helgaas" <bhelgaas@google.com>,
ath10k@lists.infradead.org, ath11k@lists.infradead.org,
ath12k@lists.infradead.org, intel-wired-lan@lists.osuosl.org,
linux-arm-kernel@lists.infradead.org,
linux-bluetooth@vger.kernel.org,
linux-mediatek@lists.infradead.org, linux-rdma@vger.kernel.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH v2 05/13] PCI/ASPM: Add pci_enable_link_state()
Date: Wed, 11 Oct 2023 16:53:27 -0500 [thread overview]
Message-ID: <20231011215327.GA1043654@bhelgaas> (raw)
In-Reply-To: <20230918131103.24119-6-ilpo.jarvinen@linux.intel.com>
On Mon, Sep 18, 2023 at 04:10:55PM +0300, Ilpo Järvinen wrote:
> pci_disable_link_state() lacks a symmetric pair. Some drivers want to
> disable ASPM during certain phases of their operation but then
> re-enable it later on. If pci_disable_link_state() is made for the
> device, there is currently no way to re-enable the states that were
> disabled.
pci_disable_link_state() gives drivers a way to disable specified ASPM
states using a bitmask (PCIE_LINK_STATE_L0S, PCIE_LINK_STATE_L1,
PCIE_LINK_STATE_L1_1, etc), but IIUC the driver can't tell exactly
what changed and can't directly restore the original state, e.g.,
- PCIE_LINK_STATE_L1 enabled initially
- driver calls pci_disable_link_state(PCIE_LINK_STATE_L0S)
- driver calls pci_enable_link_state(PCIE_LINK_STATE_L0S)
- PCIE_LINK_STATE_L0S and PCIE_LINK_STATE_L1 are enabled now
Now PCIE_LINK_STATE_L0S is enabled even though it was not initially
enabled. Maybe that's what we want; I dunno.
pci_disable_link_state() currently returns success/failure, but only
r8169 and mt76 even check, and only rtl_init_one() (r8169) has a
non-trivial reason, so it's conceivable that it could return a bitmask
instead.
> Add pci_enable_link_state() to remove ASPM states from the state
> disable mask.
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> drivers/pci/pcie/aspm.c | 42 +++++++++++++++++++++++++++++++++++++++++
> include/linux/pci.h | 2 ++
> 2 files changed, 44 insertions(+)
>
> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
> index 91dc95aca90f..f45d18d47c20 100644
> --- a/drivers/pci/pcie/aspm.c
> +++ b/drivers/pci/pcie/aspm.c
> @@ -1117,6 +1117,48 @@ int pci_disable_link_state(struct pci_dev *pdev, int state)
> }
> EXPORT_SYMBOL(pci_disable_link_state);
>
> +/**
> + * pci_enable_link_state - Re-enable device's link state
> + * @pdev: PCI device
> + * @state: ASPM link states to re-enable
> + *
> + * Enable device's link state that were previously disable so the link is
"state[s] that were previously disable[d]" alludes to the use case you
have in mind, but I don't think it describes how this function
actually works. This function just makes it possible to enable the
specified states. The @state parameter may have nothing to do with
any previously disabled states.
> + * allowed to enter the specific states. Note that if the BIOS didn't grant
> + * ASPM control to the OS, this does nothing because we can't touch the
> + * LNKCTL register.
> + *
> + * Return: 0 or a negative errno.
> + */
> +int pci_enable_link_state(struct pci_dev *pdev, int state)
> +{
> + struct pcie_link_state *link = pcie_aspm_get_link(pdev);
> +
> + if (!link)
> + return -EINVAL;
> + /*
> + * A driver requested that ASPM be enabled on this device, but
> + * if we don't have permission to manage ASPM (e.g., on ACPI
> + * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
> + * the _OSC method), we can't honor that request.
> + */
> + if (aspm_disabled) {
> + pci_warn(pdev, "can't enable ASPM; OS doesn't have ASPM control\n");
> + return -EPERM;
> + }
> +
> + mutex_lock(&aspm_lock);
> + link->aspm_disable &= ~pci_link_state_mask(state);
> + pcie_config_aspm_link(link, policy_to_aspm_state(link));
> +
> + if (state & PCIE_LINK_STATE_CLKPM)
> + link->clkpm_disable = 0;
> + pcie_set_clkpm(link, policy_to_clkpm_state(link));
> + mutex_unlock(&aspm_lock);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(pci_enable_link_state);
> +
> /**
> * pci_set_default_link_state - Set the default device link state
> * @pdev: PCI device
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 3c24ca164104..844d09230264 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1776,11 +1776,13 @@ extern bool pcie_ports_native;
> int pci_disable_link_state(struct pci_dev *pdev, int state);
> int pci_disable_link_state_locked(struct pci_dev *pdev, int state);
> #ifdef CONFIG_PCIEASPM
> +int pci_enable_link_state(struct pci_dev *pdev, int state);
> int pci_set_default_link_state(struct pci_dev *pdev, int state);
> void pcie_no_aspm(void);
> bool pcie_aspm_support_enabled(void);
> bool pcie_aspm_enabled(struct pci_dev *pdev);
> #else
> +static inline int pci_enable_link_state(struct pci_dev *pdev, int state) { return -EOPNOTSUPP; }
> static inline int pci_set_default_link_state(struct pci_dev *pdev, int state)
> { return 0; }
> static inline void pcie_no_aspm(void) { }
> --
> 2.30.2
>
>
> --
> ath12k mailing list
> ath12k@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/ath12k
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas@kernel.org>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: linux-pci@vger.kernel.org,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Lukas Wunner" <lukas@wunner.de>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Emmanuel Grumbach" <emmanuel.grumbach@intel.com>,
linux-kernel@vger.kernel.org,
"Bjorn Helgaas" <bhelgaas@google.com>,
ath10k@lists.infradead.org, ath11k@lists.infradead.org,
ath12k@lists.infradead.org, intel-wired-lan@lists.osuosl.org,
linux-arm-kernel@lists.infradead.org,
linux-bluetooth@vger.kernel.org,
linux-mediatek@lists.infradead.org, linux-rdma@vger.kernel.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH v2 05/13] PCI/ASPM: Add pci_enable_link_state()
Date: Wed, 11 Oct 2023 16:53:27 -0500 [thread overview]
Message-ID: <20231011215327.GA1043654@bhelgaas> (raw)
In-Reply-To: <20230918131103.24119-6-ilpo.jarvinen@linux.intel.com>
On Mon, Sep 18, 2023 at 04:10:55PM +0300, Ilpo Järvinen wrote:
> pci_disable_link_state() lacks a symmetric pair. Some drivers want to
> disable ASPM during certain phases of their operation but then
> re-enable it later on. If pci_disable_link_state() is made for the
> device, there is currently no way to re-enable the states that were
> disabled.
pci_disable_link_state() gives drivers a way to disable specified ASPM
states using a bitmask (PCIE_LINK_STATE_L0S, PCIE_LINK_STATE_L1,
PCIE_LINK_STATE_L1_1, etc), but IIUC the driver can't tell exactly
what changed and can't directly restore the original state, e.g.,
- PCIE_LINK_STATE_L1 enabled initially
- driver calls pci_disable_link_state(PCIE_LINK_STATE_L0S)
- driver calls pci_enable_link_state(PCIE_LINK_STATE_L0S)
- PCIE_LINK_STATE_L0S and PCIE_LINK_STATE_L1 are enabled now
Now PCIE_LINK_STATE_L0S is enabled even though it was not initially
enabled. Maybe that's what we want; I dunno.
pci_disable_link_state() currently returns success/failure, but only
r8169 and mt76 even check, and only rtl_init_one() (r8169) has a
non-trivial reason, so it's conceivable that it could return a bitmask
instead.
> Add pci_enable_link_state() to remove ASPM states from the state
> disable mask.
>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> drivers/pci/pcie/aspm.c | 42 +++++++++++++++++++++++++++++++++++++++++
> include/linux/pci.h | 2 ++
> 2 files changed, 44 insertions(+)
>
> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
> index 91dc95aca90f..f45d18d47c20 100644
> --- a/drivers/pci/pcie/aspm.c
> +++ b/drivers/pci/pcie/aspm.c
> @@ -1117,6 +1117,48 @@ int pci_disable_link_state(struct pci_dev *pdev, int state)
> }
> EXPORT_SYMBOL(pci_disable_link_state);
>
> +/**
> + * pci_enable_link_state - Re-enable device's link state
> + * @pdev: PCI device
> + * @state: ASPM link states to re-enable
> + *
> + * Enable device's link state that were previously disable so the link is
"state[s] that were previously disable[d]" alludes to the use case you
have in mind, but I don't think it describes how this function
actually works. This function just makes it possible to enable the
specified states. The @state parameter may have nothing to do with
any previously disabled states.
> + * allowed to enter the specific states. Note that if the BIOS didn't grant
> + * ASPM control to the OS, this does nothing because we can't touch the
> + * LNKCTL register.
> + *
> + * Return: 0 or a negative errno.
> + */
> +int pci_enable_link_state(struct pci_dev *pdev, int state)
> +{
> + struct pcie_link_state *link = pcie_aspm_get_link(pdev);
> +
> + if (!link)
> + return -EINVAL;
> + /*
> + * A driver requested that ASPM be enabled on this device, but
> + * if we don't have permission to manage ASPM (e.g., on ACPI
> + * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and
> + * the _OSC method), we can't honor that request.
> + */
> + if (aspm_disabled) {
> + pci_warn(pdev, "can't enable ASPM; OS doesn't have ASPM control\n");
> + return -EPERM;
> + }
> +
> + mutex_lock(&aspm_lock);
> + link->aspm_disable &= ~pci_link_state_mask(state);
> + pcie_config_aspm_link(link, policy_to_aspm_state(link));
> +
> + if (state & PCIE_LINK_STATE_CLKPM)
> + link->clkpm_disable = 0;
> + pcie_set_clkpm(link, policy_to_clkpm_state(link));
> + mutex_unlock(&aspm_lock);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(pci_enable_link_state);
> +
> /**
> * pci_set_default_link_state - Set the default device link state
> * @pdev: PCI device
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 3c24ca164104..844d09230264 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1776,11 +1776,13 @@ extern bool pcie_ports_native;
> int pci_disable_link_state(struct pci_dev *pdev, int state);
> int pci_disable_link_state_locked(struct pci_dev *pdev, int state);
> #ifdef CONFIG_PCIEASPM
> +int pci_enable_link_state(struct pci_dev *pdev, int state);
> int pci_set_default_link_state(struct pci_dev *pdev, int state);
> void pcie_no_aspm(void);
> bool pcie_aspm_support_enabled(void);
> bool pcie_aspm_enabled(struct pci_dev *pdev);
> #else
> +static inline int pci_enable_link_state(struct pci_dev *pdev, int state) { return -EOPNOTSUPP; }
> static inline int pci_set_default_link_state(struct pci_dev *pdev, int state)
> { return 0; }
> static inline void pcie_no_aspm(void) { }
> --
> 2.30.2
>
>
> --
> ath12k mailing list
> ath12k@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/ath12k
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-10-11 21:53 UTC|newest]
Thread overview: 187+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-18 13:10 [PATCH v2 00/13] PCI/ASPM: Make ASPM in core robust and remove driver workarounds Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [PATCH v2 01/13] PCI/ASPM: Rename pci_enable_link_state() to pci_set_default_link_state() Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 16:41 ` PCI/ASPM: Make ASPM in core robust and remove driver workarounds bluez.test.bot
2023-09-18 13:10 ` [PATCH v2 02/13] PCI/ASPM: Improve pci_set_default_link_state() kerneldoc Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [PATCH v2 03/13] PCI/ASPM: Disable ASPM when driver requests it Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-10-11 20:04 ` Bjorn Helgaas
2023-10-11 20:04 ` Bjorn Helgaas
2023-10-11 20:04 ` Bjorn Helgaas
2023-10-11 20:04 ` [Intel-wired-lan] " Bjorn Helgaas
2023-10-11 20:04 ` Bjorn Helgaas
2023-10-11 20:04 ` Bjorn Helgaas
2023-10-12 10:47 ` Ilpo Järvinen
2023-10-12 10:47 ` Ilpo Järvinen
2023-10-12 10:47 ` Ilpo Järvinen
2023-10-12 10:47 ` [Intel-wired-lan] " Ilpo Järvinen
2023-10-12 10:47 ` Ilpo Järvinen
2023-10-12 10:47 ` Ilpo Järvinen
2023-10-11 21:22 ` Bjorn Helgaas
2023-10-11 21:22 ` Bjorn Helgaas
2023-10-11 21:22 ` Bjorn Helgaas
2023-10-11 21:22 ` [Intel-wired-lan] " Bjorn Helgaas
2023-10-11 21:22 ` Bjorn Helgaas
2023-10-11 21:22 ` Bjorn Helgaas
2023-10-12 10:56 ` Ilpo Järvinen
2023-10-12 10:56 ` Ilpo Järvinen
2023-10-12 10:56 ` Ilpo Järvinen
2023-10-12 10:56 ` [Intel-wired-lan] " Ilpo Järvinen
2023-10-12 10:56 ` Ilpo Järvinen
2023-10-12 10:56 ` Ilpo Järvinen
2023-10-13 16:42 ` Bjorn Helgaas
2023-10-13 16:42 ` Bjorn Helgaas
2023-10-13 16:42 ` Bjorn Helgaas
2023-10-13 16:42 ` [Intel-wired-lan] " Bjorn Helgaas
2023-10-13 16:42 ` Bjorn Helgaas
2023-10-13 16:42 ` Bjorn Helgaas
2023-10-16 14:27 ` Ilpo Järvinen
2023-10-16 14:27 ` Ilpo Järvinen
2023-10-16 14:27 ` Ilpo Järvinen
2023-10-16 14:27 ` [Intel-wired-lan] " Ilpo Järvinen
2023-10-16 14:27 ` Ilpo Järvinen
2023-10-16 14:27 ` Ilpo Järvinen
2023-10-26 22:02 ` Bjorn Helgaas
2023-10-26 22:02 ` Bjorn Helgaas
2023-10-26 22:02 ` Bjorn Helgaas
2023-10-26 22:02 ` [Intel-wired-lan] " Bjorn Helgaas
2023-10-26 22:02 ` Bjorn Helgaas
2023-10-26 22:02 ` Bjorn Helgaas
2023-09-18 13:10 ` [PATCH v2 04/13] PCI/ASPM: Move L0S/L1/sub states mask calculation into a helper Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-10-11 19:32 ` Bjorn Helgaas
2023-10-11 19:32 ` Bjorn Helgaas
2023-10-11 19:32 ` Bjorn Helgaas
2023-10-11 19:32 ` [Intel-wired-lan] " Bjorn Helgaas
2023-10-11 19:32 ` Bjorn Helgaas
2023-10-11 19:32 ` Bjorn Helgaas
2023-10-12 10:29 ` Ilpo Järvinen
2023-10-12 10:29 ` Ilpo Järvinen
2023-10-12 10:29 ` Ilpo Järvinen
2023-10-12 10:29 ` [Intel-wired-lan] " Ilpo Järvinen
2023-10-12 10:29 ` Ilpo Järvinen
2023-10-12 10:29 ` Ilpo Järvinen
2023-09-18 13:10 ` [PATCH v2 05/13] PCI/ASPM: Add pci_enable_link_state() Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-10-11 21:53 ` Bjorn Helgaas [this message]
2023-10-11 21:53 ` Bjorn Helgaas
2023-10-11 21:53 ` Bjorn Helgaas
2023-10-11 21:53 ` [Intel-wired-lan] " Bjorn Helgaas
2023-10-11 21:53 ` Bjorn Helgaas
2023-10-11 21:53 ` Bjorn Helgaas
2023-10-12 12:53 ` Ilpo Järvinen
2023-10-12 12:53 ` Ilpo Järvinen
2023-10-12 12:53 ` Ilpo Järvinen
2023-10-12 12:53 ` [Intel-wired-lan] " Ilpo Järvinen
2023-10-12 12:53 ` Ilpo Järvinen
2023-10-12 12:53 ` Ilpo Järvinen
2023-10-13 16:48 ` Bjorn Helgaas
2023-10-13 16:48 ` Bjorn Helgaas
2023-10-13 16:48 ` Bjorn Helgaas
2023-10-13 16:48 ` [Intel-wired-lan] " Bjorn Helgaas
2023-10-13 16:48 ` Bjorn Helgaas
2023-10-13 16:48 ` Bjorn Helgaas
2023-10-16 12:57 ` Ilpo Järvinen
2023-10-16 12:57 ` Ilpo Järvinen
2023-10-16 12:57 ` Ilpo Järvinen
2023-10-16 12:57 ` [Intel-wired-lan] " Ilpo Järvinen
2023-10-16 12:57 ` Ilpo Järvinen
2023-10-16 12:57 ` Ilpo Järvinen
2023-09-18 13:10 ` [PATCH v2 06/13] Bluetooth: hci_bcm4377: Convert aspm disable to quirk Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-19 13:36 ` Sven Peter
2023-09-19 13:36 ` Sven Peter
2023-09-19 13:36 ` [Intel-wired-lan] " Sven Peter
2023-09-19 13:36 ` Sven Peter
2023-09-19 13:36 ` Sven Peter
2023-09-19 13:36 ` Sven Peter
2023-09-18 13:10 ` [PATCH v2 07/13] mt76: Remove unreliable pci_disable_link_state() workaround Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [PATCH v2 08/13] e1000e: Remove unreliable pci_disable_link_state{,_locked}() workaround Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] [PATCH v2 08/13] e1000e: Remove unreliable pci_disable_link_state{, _locked}() workaround Ilpo Järvinen
2023-09-18 13:10 ` [PATCH v2 08/13] e1000e: Remove unreliable pci_disable_link_state{,_locked}() workaround Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [PATCH v2 09/13] wifi: ath10k: Use pci_disable/enable_link_state() Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-18 13:10 ` Ilpo Järvinen
2023-09-19 9:39 ` Kalle Valo
2023-09-19 9:39 ` Kalle Valo
2023-09-19 9:39 ` Kalle Valo
2023-09-19 9:39 ` [Intel-wired-lan] " Kalle Valo
2023-09-19 9:39 ` Kalle Valo
2023-09-19 9:39 ` Kalle Valo
2023-09-18 13:11 ` [PATCH v2 10/13] wifi: ath11k: " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` [Intel-wired-lan] " Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-18 13:11 ` [PATCH v2 11/13] wifi: ath12k: " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` [Intel-wired-lan] " Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-19 9:40 ` Kalle Valo
2023-09-18 13:11 ` [PATCH v2 12/13] RDMA/hfi1: " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` [PATCH v2 13/13] misc: rtsx: " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` [Intel-wired-lan] " Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
2023-09-18 13:11 ` Ilpo Järvinen
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=20231011215327.GA1043654@bhelgaas \
--to=helgaas@kernel.org \
--cc=ath10k@lists.infradead.org \
--cc=ath11k@lists.infradead.org \
--cc=ath12k@lists.infradead.org \
--cc=bhelgaas@google.com \
--cc=emmanuel.grumbach@intel.com \
--cc=hkallweit1@gmail.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=kw@linux.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=lukas@wunner.de \
--cc=netdev@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
/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.