All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Herring <robh@kernel.org>
To: equu@openmail.cc
Cc: lpieralisi@kernel.org, toke@toke.dk, kvalo@kernel.org,
	linux-pci@vger.kernel.org, linux-wireless@vger.kernel.org,
	ath10k@lists.infradead.org, kernel test robot <lkp@intel.com>
Subject: Re: [PATCH v5 3/3] wifi: ath10k: only load compatible DT cal data
Date: Fri, 3 Feb 2023 09:57:59 -0600	[thread overview]
Message-ID: <CAL_JsqKq1Yv+svKMS3R=TmDui1VJEjinoPFoDAAgr8tBbV1aSQ@mail.gmail.com> (raw)
In-Reply-To: <20230203104822.361415-4-equu@openmail.cc>

On Fri, Feb 3, 2023 at 4:48 AM <equu@openmail.cc> wrote:
>
> From: Edward Chow <equu@openmail.cc>
>
> ath10k might also be sensitive to the issue reported on
> https://github.com/openwrt/openwrt/pull/11345 , loading calibration
> data from a device tree node declared incompatible.
>
> ath10k will first check whether the device tree node is compatible
> with it, using the functionality introduced with the first patch of
> this series, ("PCI: of: Match pci devices or drivers against OF DT
> nodes") and only proceed loading calibration data from compatible node.
>
> Signed-off-by: Edward Chow <equu@openmail.cc>
> Reported-by: kernel test robot <lkp@intel.com>
> ---
>  drivers/net/wireless/ath/ath10k/core.c | 30 ++++++++++++++++++++++++++
>  drivers/net/wireless/ath/ath10k/pci.c  |  2 +-
>  drivers/net/wireless/ath/ath10k/pci.h  |  2 ++
>  3 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
> index 5eb131ab916f..a776b06f49b5 100644
> --- a/drivers/net/wireless/ath/ath10k/core.c
> +++ b/drivers/net/wireless/ath/ath10k/core.c
> @@ -13,6 +13,8 @@
>  #include <linux/ctype.h>
>  #include <linux/pm_qos.h>
>  #include <linux/nvmem-consumer.h>
> +#include <linux/of_pci.h>
> +#include <linux/pci.h>
>  #include <asm/byteorder.h>
>
>  #include "core.h"
> @@ -26,6 +28,7 @@
>  #include "testmode.h"
>  #include "wmi-ops.h"
>  #include "coredump.h"
> +#include "pci.h"
>
>  unsigned int ath10k_debug_mask;
>  EXPORT_SYMBOL(ath10k_debug_mask);
> @@ -1958,6 +1961,33 @@ static int ath10k_download_cal_nvmem(struct ath10k *ar, const char *cell_name)
>         size_t len;
>         int ret;
>
> +       /* devm_nvmem_cell_get() will get a cell first from the OF
> +        * DT node representing the given device with nvmem-cell-name
> +        * "calibration", and from the global lookup table as a fallback,
> +        * and an ath10k device could be either a pci one or a platform one.
> +        *
> +        * If the OF DT node is not compatible with the real device, the
> +        * calibration data got from the node should not be applied.
> +        *
> +        * dev_is_pci(ar->dev) && ( no OF node || caldata not from node
> +        * || not compatible ) -> do not use caldata .
> +        *
> +        * !dev_is_pci(ar->dev) -> always use caldata .
> +        *
> +        * The judgement for compatibility differs with ath9k for many
> +        * DT using "qcom,ath10k" as compatibility string.
> +        */
> +       if (dev_is_pci(ar->dev) &&
> +           (!ar->dev->of_node ||
> +            (of_property_match_string(ar->dev->of_node,
> +                                      "nvmem-cell-names",
> +                                      cell_name) < 0) ||
> +            !of_device_is_compatible(ar->dev->of_node,
> +                                     "qcom,ath10k") ||
> +            !of_pci_node_match_driver(ar->dev->of_node,
> +                                      &ath10k_pci_driver)))
> +               return -ENOENT;

I think this can be done a bit cleaner and like other drivers. I see 2 options.

The first way is use VID/PID compatible strings and don't set the
of_node pointer if there is a mismatch.

If you must use "qcom,ath10k" (and 9k) only, then we should make
of_device_get_match_data() work on PCI drivers. This should just
require adding of_match_table ptr and it needs a data struct with a
flag saying use cal data or not.

Upon further thought, why can't you decide all this just on PCI
VID/PID? The giant switch statement in ath10k_pci_probe() could all
just be struct of driver_data from the PCI match table.

Rob

WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robh@kernel.org>
To: equu@openmail.cc
Cc: lpieralisi@kernel.org, toke@toke.dk, kvalo@kernel.org,
	 linux-pci@vger.kernel.org, linux-wireless@vger.kernel.org,
	 ath10k@lists.infradead.org, kernel test robot <lkp@intel.com>
Subject: Re: [PATCH v5 3/3] wifi: ath10k: only load compatible DT cal data
Date: Fri, 3 Feb 2023 09:57:59 -0600	[thread overview]
Message-ID: <CAL_JsqKq1Yv+svKMS3R=TmDui1VJEjinoPFoDAAgr8tBbV1aSQ@mail.gmail.com> (raw)
In-Reply-To: <20230203104822.361415-4-equu@openmail.cc>

On Fri, Feb 3, 2023 at 4:48 AM <equu@openmail.cc> wrote:
>
> From: Edward Chow <equu@openmail.cc>
>
> ath10k might also be sensitive to the issue reported on
> https://github.com/openwrt/openwrt/pull/11345 , loading calibration
> data from a device tree node declared incompatible.
>
> ath10k will first check whether the device tree node is compatible
> with it, using the functionality introduced with the first patch of
> this series, ("PCI: of: Match pci devices or drivers against OF DT
> nodes") and only proceed loading calibration data from compatible node.
>
> Signed-off-by: Edward Chow <equu@openmail.cc>
> Reported-by: kernel test robot <lkp@intel.com>
> ---
>  drivers/net/wireless/ath/ath10k/core.c | 30 ++++++++++++++++++++++++++
>  drivers/net/wireless/ath/ath10k/pci.c  |  2 +-
>  drivers/net/wireless/ath/ath10k/pci.h  |  2 ++
>  3 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
> index 5eb131ab916f..a776b06f49b5 100644
> --- a/drivers/net/wireless/ath/ath10k/core.c
> +++ b/drivers/net/wireless/ath/ath10k/core.c
> @@ -13,6 +13,8 @@
>  #include <linux/ctype.h>
>  #include <linux/pm_qos.h>
>  #include <linux/nvmem-consumer.h>
> +#include <linux/of_pci.h>
> +#include <linux/pci.h>
>  #include <asm/byteorder.h>
>
>  #include "core.h"
> @@ -26,6 +28,7 @@
>  #include "testmode.h"
>  #include "wmi-ops.h"
>  #include "coredump.h"
> +#include "pci.h"
>
>  unsigned int ath10k_debug_mask;
>  EXPORT_SYMBOL(ath10k_debug_mask);
> @@ -1958,6 +1961,33 @@ static int ath10k_download_cal_nvmem(struct ath10k *ar, const char *cell_name)
>         size_t len;
>         int ret;
>
> +       /* devm_nvmem_cell_get() will get a cell first from the OF
> +        * DT node representing the given device with nvmem-cell-name
> +        * "calibration", and from the global lookup table as a fallback,
> +        * and an ath10k device could be either a pci one or a platform one.
> +        *
> +        * If the OF DT node is not compatible with the real device, the
> +        * calibration data got from the node should not be applied.
> +        *
> +        * dev_is_pci(ar->dev) && ( no OF node || caldata not from node
> +        * || not compatible ) -> do not use caldata .
> +        *
> +        * !dev_is_pci(ar->dev) -> always use caldata .
> +        *
> +        * The judgement for compatibility differs with ath9k for many
> +        * DT using "qcom,ath10k" as compatibility string.
> +        */
> +       if (dev_is_pci(ar->dev) &&
> +           (!ar->dev->of_node ||
> +            (of_property_match_string(ar->dev->of_node,
> +                                      "nvmem-cell-names",
> +                                      cell_name) < 0) ||
> +            !of_device_is_compatible(ar->dev->of_node,
> +                                     "qcom,ath10k") ||
> +            !of_pci_node_match_driver(ar->dev->of_node,
> +                                      &ath10k_pci_driver)))
> +               return -ENOENT;

I think this can be done a bit cleaner and like other drivers. I see 2 options.

The first way is use VID/PID compatible strings and don't set the
of_node pointer if there is a mismatch.

If you must use "qcom,ath10k" (and 9k) only, then we should make
of_device_get_match_data() work on PCI drivers. This should just
require adding of_match_table ptr and it needs a data struct with a
flag saying use cal data or not.

Upon further thought, why can't you decide all this just on PCI
VID/PID? The giant switch statement in ath10k_pci_probe() could all
just be struct of driver_data from the PCI match table.

Rob

_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

  reply	other threads:[~2023-02-03 15:58 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-07 15:14 [PATCH] pci: Add functions to match pci dev or driver against OF DT node Mad Horse
2023-01-10 15:24 ` Bjorn Helgaas
2023-01-17  9:27 ` [PATCH 1/3] PCI: of: Match pci devices or drivers against OF DT nodes Edward Chow
2023-01-17  9:27   ` Edward Chow
2023-01-17  9:27 ` [PATCH 2/3] wifi: ath9k: stop loading incompatible DT cal data Edward Chow
2023-01-17  9:27   ` Edward Chow
2023-01-17 19:46   ` Bjorn Helgaas
2023-01-17 19:46     ` Bjorn Helgaas
2023-02-01  3:02     ` Mad Horse
2023-02-01  3:02       ` Mad Horse
2023-02-01 21:43       ` Bjorn Helgaas
2023-02-01 21:43         ` Bjorn Helgaas
2023-02-02  4:18       ` [PATCH v2 0/3] PCI: of: Load extra data only from compatible DT nodes equu
2023-02-02  4:18         ` equu
2023-02-02  4:18         ` [PATCH v2 1/3] PCI: of: Match pci devices or drivers against OF " equu
2023-02-02  4:18           ` equu
2023-02-02  4:18         ` [PATCH v2 2/3] wifi: ath9k: stop loading incompatible DT cal data equu
2023-02-02  4:18           ` equu
2023-02-02  4:18         ` [PATCH v2 3/3] wifi: ath10k: only load compatible " equu
2023-02-02  4:18           ` equu
2023-02-02  7:26           ` kernel test robot
2023-02-02  7:26             ` kernel test robot
2023-02-02  7:55       ` [PATCH v3 0/3] PCI: of: Load extra data only from compatible DT nodes equu
2023-02-02  7:55         ` equu
2023-02-02  7:55         ` [PATCH v3 1/3] PCI: of: Match pci devices or drivers against OF " equu
2023-02-02  7:55           ` equu
2023-02-03  8:23           ` kernel test robot
2023-02-03  8:23             ` kernel test robot
2023-02-02  7:55         ` [PATCH v3 2/3] wifi: ath9k: stop loading incompatible DT cal data equu
2023-02-02  7:55           ` equu
2023-02-03  9:56           ` kernel test robot
2023-02-03  9:56             ` kernel test robot
2023-02-02  7:55         ` [PATCH v3 3/3] wifi: ath10k: only load compatible " equu
2023-02-02  7:55           ` equu
2023-02-03 11:38           ` kernel test robot
2023-02-03 11:38             ` kernel test robot
2023-02-03  8:37       ` [PATCH v4 0/3] PCI: of: Load extra data only from compatible DT nodes equu
2023-02-03  8:37         ` equu
2023-02-03  8:37         ` [PATCH v4 1/3] PCI: of: Match pci devices or drivers against OF " equu
2023-02-03  8:37           ` equu
2023-02-03  8:37         ` [PATCH v4 2/3] wifi: ath9k: stop loading incompatible DT cal data equu
2023-02-03  8:37           ` equu
2023-02-03  8:37         ` [PATCH v4 3/3] wifi: ath10k: only load compatible " equu
2023-02-03  8:37           ` equu
2023-02-03 10:48       ` [PATCH v5 0/3] PCI: of: Load extra data only from compatible DT nodes equu
2023-02-03 10:48         ` equu
2023-02-03 10:48         ` [PATCH v5 1/3] PCI: of: Match pci devices or drivers against OF " equu
2023-02-03 10:48           ` equu
2023-02-03 10:48         ` [PATCH v5 2/3] wifi: ath9k: stop loading incompatible DT cal data equu
2023-02-03 10:48           ` equu
2023-02-03 10:48         ` [PATCH v5 3/3] wifi: ath10k: only load compatible " equu
2023-02-03 10:48           ` equu
2023-02-03 15:57           ` Rob Herring [this message]
2023-02-03 15:57             ` Rob Herring
2023-02-03 17:15             ` equu
2023-02-03 17:15               ` equu
2023-02-03 18:45               ` Rob Herring
2023-02-03 18:45                 ` Rob Herring
2023-02-04  4:26                 ` equu
2023-02-04  4:26                   ` equu
2023-02-09  4:50       ` [PATCH v6 0/3] PCI: of: Load extra data only from compatible DT nodes equu
2023-02-09  4:50         ` equu
2023-02-09  4:50       ` [PATCH v6 1/3] PCI: of: Match pci devices or drivers against OF " equu
2023-02-09  4:50         ` equu
2023-02-09  4:50       ` [PATCH v6 2/3] wifi: ath9k: stop loading incompatible DT cal data equu
2023-02-09  4:50         ` equu
2023-02-09  4:50       ` [PATCH v6 3/3] wifi: ath10k: only load compatible " equu
2023-02-09  4:50         ` equu
2023-02-09 16:09         ` Rob Herring
2023-02-09 16:09           ` Rob Herring
2023-01-17  9:28 ` [PATCH " Edward Chow
2023-01-17  9:28   ` Edward Chow
2023-01-17 10:01 ` [PATCH 1/3] PCI: of: Match pci devices or drivers against OF DT nodes Mad Horse
2023-01-17 10:01   ` Mad Horse
2023-01-17 10:02 ` [PATCH 2/3] wifi: ath9k: stop loading incompatible DT cal data Mad Horse
2023-01-17 10:02   ` Mad Horse
2023-01-17 10:02 ` [PATCH 3/3] wifi: ath10k: only load compatible " Mad Horse
2023-01-17 10:02   ` Mad Horse
2023-01-17 10:29 ` [PATCH 1/3] PCI: of: Match pci devices or drivers against OF DT nodes Mad Horse
2023-01-17 10:29   ` Mad Horse
2023-01-21 10:00 ` [PATCH 2/3] wifi: ath9k: stop loading incompatible DT cal data persmule
2023-01-21 10:00   ` persmule
2023-01-21 10:06 ` [PATCH 3/3] wifi: ath10k: only load compatible " persmule
2023-01-21 10:06   ` persmule

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='CAL_JsqKq1Yv+svKMS3R=TmDui1VJEjinoPFoDAAgr8tBbV1aSQ@mail.gmail.com' \
    --to=robh@kernel.org \
    --cc=ath10k@lists.infradead.org \
    --cc=equu@openmail.cc \
    --cc=kvalo@kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=lpieralisi@kernel.org \
    --cc=toke@toke.dk \
    /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.