[PATCH 2/9] drm/amdkfd: Conditionally enable PCIe atomics

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 5, 2018 at 12:17 AM, Felix Kuehling <Felix.Kuehling at amd.com> wrote:
> This will be needed for most dGPUs.
>
> CC: linux-pci at vger.kernel.org
> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
>  drivers/gpu/drm/amd/amdkfd/kfd_device.c | 17 +++++++++++++++++
>  drivers/gpu/drm/amd/amdkfd/kfd_priv.h   |  1 +
>  2 files changed, 18 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> index a8fa33a..fafe971 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> @@ -41,6 +41,7 @@ static const struct kfd_device_info kaveri_device_info = {
>         .num_of_watch_points = 4,
>         .mqd_size_aligned = MQD_SIZE_ALIGNED,
>         .supports_cwsr = false,
> +       .needs_pci_atomics = false,
>  };
>
>  static const struct kfd_device_info carrizo_device_info = {
> @@ -53,6 +54,7 @@ static const struct kfd_device_info carrizo_device_info = {
>         .num_of_watch_points = 4,
>         .mqd_size_aligned = MQD_SIZE_ALIGNED,
>         .supports_cwsr = true,
> +       .needs_pci_atomics = false,
>  };
>
>  struct kfd_deviceid {
> @@ -127,6 +129,21 @@ struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
>                 return NULL;
>         }
>
> +       if (device_info->needs_pci_atomics) {
> +               /* Allow BIF to recode atomics to PCIe 3.0
> +                * AtomicOps. 32 and 64-bit requests are possible and
> +                * must be supported.
> +                */
> +               if (pci_enable_atomic_ops_to_root(pdev,
> +                               PCI_EXP_DEVCAP2_ATOMIC_COMP32 |
> +                               PCI_EXP_DEVCAP2_ATOMIC_COMP64) < 0) {
> +                       dev_info(kfd_device,
> +                               "skipped device %x:%x, PCI rejects atomics",
> +                                pdev->vendor, pdev->device);
> +                       return NULL;
> +               }
> +       }
> +
>         kfd = kzalloc(sizeof(*kfd), GFP_KERNEL);
>         if (!kfd)
>                 return NULL;
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> index 6a48d29..eebfb1e 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
> @@ -158,6 +158,7 @@ struct kfd_device_info {
>         uint8_t num_of_watch_points;
>         uint16_t mqd_size_aligned;
>         bool supports_cwsr;
> +       bool needs_pci_atomics;
>  };
>
>  struct kfd_mem_obj {
> --
> 2.7.4
>
This patch is:
Reviewed-by: Oded Gabbay <oded.gabbay at gmail.com>


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux