From 765b05cdbd4de854c05f771c954ecee0e019d734 Mon Sep 17 00:00:00 2001 From: Matthias Tafelmeier Date: Tue, 22 Dec 2020 19:23:47 +0100 Subject: [PATCH 1/6] refer to uaccess to prevent build failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tackling following build glitch for 4.19 kernel: /var/lib/dkms/vendor-reset/0.0.18/build/src/ioctl.c: In function ‘vendor_reset_ioctl_reset’: /var/lib/dkms/vendor-reset/0.0.18/build/src/ioctl.c:34:7: error: implicit declaration of function ‘copy_from_user’; did you mean ‘sg_copy_from_buffer’? [-Werror=implicit-function-declaration] if (copy_from_user(&iodev, (void __user *)arg, sizeof(iodev))) ^~~~~~~~~~~~~~ sg_copy_from_buffer cc1: some warnings being treated as errors make[4]: *** [/usr/src/linux-headers-4.19.0-12-common/scripts/Makefile.build:308: /var/lib/dkms/vendor-reset/0.0.18/build/src/ioctl.o] Error 1 make[4]: *** Waiting for unfinished jobs.... make[3]: *** [/usr/src/linux-headers-4.19.0-12-common/Makefile:1565: _module_/var/lib/dkms/vendor-reset/0.0.18/build] Error 2 make[2]: *** [Makefile:146: sub-make] Error 2 make[1]: *** [Makefile:8: all] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.19.0-12-amd64' make: *** [Makefile:8: build] Error 2 --- src/ioctl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ioctl.c b/src/ioctl.c index ec2ce31..ebe7dbc 100644 --- a/src/ioctl.c +++ b/src/ioctl.c @@ -21,6 +21,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA #include "vendor-reset-ioctl.h" #include +#include #define VENDOR_RESET_IOCTL_DEVNAME "vendor_reset" From f435bf9e9342caeab0f234c0a681906a24be6a45 Mon Sep 17 00:00:00 2001 From: Eugene Shatsky Date: Sat, 21 Nov 2020 15:28:54 +0200 Subject: [PATCH 2/6] Add lists of Polaris GPUs --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6866406..4cde823 100644 --- a/README.md +++ b/README.md @@ -55,9 +55,9 @@ updating your initrd. | Vendor | Family | Common Name(s) |---|---|---| -|AMD|Polaris 10| -|AMD|Polaris 11| -|AMD|Polaris 12| +|AMD|Polaris 10| RX 470, 480, 570, 580, 590 +|AMD|Polaris 11| RX 460, 560 +|AMD|Polaris 12| RX 540, 550 |AMD|Vega 10| Vega 56/64 | |AMD|Vega 20| Radeon VII | |AMD|Navi 10| 5600XT, 5700, 5700XT From eadbb20b3895ba44d611d00bab56b4d7fd124f75 Mon Sep 17 00:00:00 2001 From: BegoneRaven Date: Tue, 5 Jan 2021 16:07:59 +0530 Subject: [PATCH 3/6] Update README.md Adding the 'Vega FE' Common Name for the Vega 10 Family under the Supported Devices section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4cde823..205bc32 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ updating your initrd. |AMD|Polaris 10| RX 470, 480, 570, 580, 590 |AMD|Polaris 11| RX 460, 560 |AMD|Polaris 12| RX 540, 550 -|AMD|Vega 10| Vega 56/64 | +|AMD|Vega 10| Vega 56/64/FE | |AMD|Vega 20| Radeon VII | |AMD|Navi 10| 5600XT, 5700, 5700XT |AMD|Navi 12| Pro 5600M | From 623fa20705d10ff8f3ffed56895cebc7ce8106f9 Mon Sep 17 00:00:00 2001 From: Adam Madsen Date: Tue, 12 Jan 2021 11:22:18 -0600 Subject: [PATCH 4/6] [amd] audio: Preserve PCI config space for audio device --- src/amd/common.c | 20 ++++++++++++- src/amd/common.h | 78 +++++++++++++++++++++++++----------------------- 2 files changed, 59 insertions(+), 39 deletions(-) diff --git a/src/amd/common.c b/src/amd/common.c index 57563df..a888e5b 100644 --- a/src/amd/common.c +++ b/src/amd/common.c @@ -84,6 +84,15 @@ int amd_common_pre_reset(struct vendor_reset_dev *dev) pci_read_config_word(pdev, PCI_COMMAND, &priv->cfg); pci_write_config_word(pdev, PCI_COMMAND, priv->cfg | PCI_COMMAND_MEMORY | PCI_COMMAND_INTX_DISABLE); + priv->audio_pdev = pci_get_domain_bus_and_slot(pci_domain_nr(pdev->bus), + pdev->bus->number, 1); + if (priv->audio_pdev) + { + pci_set_power_state(priv->audio_pdev, PCI_D0); + pci_clear_master(priv->audio_pdev); + pci_save_state(priv->audio_pdev); + } + return 0; err_free: @@ -96,7 +105,8 @@ int amd_common_post_reset(struct vendor_reset_dev *dev) struct amd_vendor_private *priv = amd_private(dev); struct pci_dev *pdev = dev->pdev; - if (priv->mmio) { + if (priv->mmio) + { iounmap(priv->mmio); priv->mmio = NULL; } @@ -114,6 +124,14 @@ int amd_common_post_reset(struct vendor_reset_dev *dev) } pci_write_config_word(pdev, PCI_COMMAND, priv->cfg); + if (priv->audio_pdev) + { + pci_restore_state(priv->audio_pdev); + pci_set_power_state(priv->audio_pdev, PCI_D3hot); + pci_dev_put(priv->audio_pdev); + priv->audio_pdev = NULL; + } + /* don't try to go to low power if reset failed */ if (!dev->reset_ret) pci_set_power_state(pdev, PCI_D3hot); diff --git a/src/amd/common.h b/src/amd/common.h index 4c8dd66..57b855c 100644 --- a/src/amd/common.h +++ b/src/amd/common.h @@ -30,52 +30,52 @@ Place, Suite 330, Boston, MA 02111-1307 USA #define DRM_DEBUG(fmt, args...) pr_debug("vendor-reset-drm: " fmt, ##args) static inline bool drm_can_sleep(void) { - if (in_atomic() || in_dbg_master() || irqs_disabled()) - return false; - return true; + if (in_atomic() || in_dbg_master() || irqs_disabled()) + return false; + return true; } -#define RREG32(reg) \ - ({ \ - u32 __out; \ - if (((reg) * 4) < adev_to_amd_private(adev)->mmio_size) \ - __out = readl(adev_to_amd_private(adev)->mmio + (reg)); \ - else \ - { \ - writel(((reg) * 4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ - __out = readl(adev_to_amd_private(adev)->mmio + mmMM_DATA); \ - } \ - __out; \ +#define RREG32(reg) \ + ({ \ + u32 __out; \ + if (((reg)*4) < adev_to_amd_private(adev)->mmio_size) \ + __out = readl(adev_to_amd_private(adev)->mmio + (reg)); \ + else \ + { \ + writel(((reg)*4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ + __out = readl(adev_to_amd_private(adev)->mmio + mmMM_DATA); \ + } \ + __out; \ }) -#define WREG32(reg, v) \ - do \ - { \ - if (((reg) * 4) < adev_to_amd_private(adev)->mmio_size) \ - writel(v, adev_to_amd_private(adev)->mmio + (reg)); \ - else \ - { \ - writel(((reg) * 4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ - writel(v, adev_to_amd_private(adev)->mmio + mmMM_DATA); \ - } \ +#define WREG32(reg, v) \ + do \ + { \ + if (((reg)*4) < adev_to_amd_private(adev)->mmio_size) \ + writel(v, adev_to_amd_private(adev)->mmio + (reg)); \ + else \ + { \ + writel(((reg)*4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ + writel(v, adev_to_amd_private(adev)->mmio + mmMM_DATA); \ + } \ } while (0) -#define WREG32_PCIE(reg, v) \ - do \ - { \ - WREG32(mmPCIE_INDEX2, reg); \ - (void)RREG32(mmPCIE_INDEX2); \ - WREG32(mmPCIE_DATA2, v); \ - (void)RREG32(mmPCIE_DATA2); \ +#define WREG32_PCIE(reg, v) \ + do \ + { \ + WREG32(mmPCIE_INDEX2, reg); \ + (void)RREG32(mmPCIE_INDEX2); \ + WREG32(mmPCIE_DATA2, v); \ + (void)RREG32(mmPCIE_DATA2); \ } while (0) -#define RREG32_PCIE(reg) \ - ({ \ - u32 __tmp_read; \ - WREG32(mmPCIE_INDEX2, reg); \ - (void)RREG32(mmPCIE_INDEX2); \ - __tmp_read = RREG32(mmPCIE_DATA2); \ - __tmp_read; \ +#define RREG32_PCIE(reg) \ + ({ \ + u32 __tmp_read; \ + WREG32(mmPCIE_INDEX2, reg); \ + (void)RREG32(mmPCIE_INDEX2); \ + __tmp_read = RREG32(mmPCIE_DATA2); \ + __tmp_read; \ }) /* KIQ is only used for SRIOV accesses, we are not targetting these devices so @@ -117,6 +117,8 @@ struct amd_vendor_private { u16 cfg; + struct pci_dev *audio_pdev; + struct vendor_reset_dev *vdev; struct pci_saved_state *saved_state; struct amd_fake_dev adev; From 30ffca808b2452327af2141061e067b1aa03ba29 Mon Sep 17 00:00:00 2001 From: Adam Madsen Date: Tue, 12 Jan 2021 11:26:40 -0600 Subject: [PATCH 5/6] [core] dkms: bump version --- dkms.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dkms.conf b/dkms.conf index 15de063..e981d84 100644 --- a/dkms.conf +++ b/dkms.conf @@ -1,5 +1,5 @@ PACKAGE_NAME="vendor-reset" -PACKAGE_VERSION="0.0.18" +PACKAGE_VERSION="0.0.19" BUILT_MODULE_NAME[0]="${PACKAGE_NAME}" MAKE[0]="make KDIR=${kernel_source_dir}" CLEAN="make KDIR=${kernel_source_dir} clean" From 6875092f2fe7001b38d3a7bc46533fd71343fcb1 Mon Sep 17 00:00:00 2001 From: Geoffrey McRae Date: Wed, 13 Jan 2021 14:06:40 +1100 Subject: [PATCH 6/6] [core] revert commits that are not quite ready yet This reverts commit 30ffca808b2452327af2141061e067b1aa03ba29. This reverts commit 623fa20705d10ff8f3ffed56895cebc7ce8106f9. --- dkms.conf | 2 +- src/amd/common.c | 20 +------------ src/amd/common.h | 78 +++++++++++++++++++++++------------------------- 3 files changed, 40 insertions(+), 60 deletions(-) diff --git a/dkms.conf b/dkms.conf index e981d84..15de063 100644 --- a/dkms.conf +++ b/dkms.conf @@ -1,5 +1,5 @@ PACKAGE_NAME="vendor-reset" -PACKAGE_VERSION="0.0.19" +PACKAGE_VERSION="0.0.18" BUILT_MODULE_NAME[0]="${PACKAGE_NAME}" MAKE[0]="make KDIR=${kernel_source_dir}" CLEAN="make KDIR=${kernel_source_dir} clean" diff --git a/src/amd/common.c b/src/amd/common.c index a888e5b..57563df 100644 --- a/src/amd/common.c +++ b/src/amd/common.c @@ -84,15 +84,6 @@ int amd_common_pre_reset(struct vendor_reset_dev *dev) pci_read_config_word(pdev, PCI_COMMAND, &priv->cfg); pci_write_config_word(pdev, PCI_COMMAND, priv->cfg | PCI_COMMAND_MEMORY | PCI_COMMAND_INTX_DISABLE); - priv->audio_pdev = pci_get_domain_bus_and_slot(pci_domain_nr(pdev->bus), - pdev->bus->number, 1); - if (priv->audio_pdev) - { - pci_set_power_state(priv->audio_pdev, PCI_D0); - pci_clear_master(priv->audio_pdev); - pci_save_state(priv->audio_pdev); - } - return 0; err_free: @@ -105,8 +96,7 @@ int amd_common_post_reset(struct vendor_reset_dev *dev) struct amd_vendor_private *priv = amd_private(dev); struct pci_dev *pdev = dev->pdev; - if (priv->mmio) - { + if (priv->mmio) { iounmap(priv->mmio); priv->mmio = NULL; } @@ -124,14 +114,6 @@ int amd_common_post_reset(struct vendor_reset_dev *dev) } pci_write_config_word(pdev, PCI_COMMAND, priv->cfg); - if (priv->audio_pdev) - { - pci_restore_state(priv->audio_pdev); - pci_set_power_state(priv->audio_pdev, PCI_D3hot); - pci_dev_put(priv->audio_pdev); - priv->audio_pdev = NULL; - } - /* don't try to go to low power if reset failed */ if (!dev->reset_ret) pci_set_power_state(pdev, PCI_D3hot); diff --git a/src/amd/common.h b/src/amd/common.h index 57b855c..4c8dd66 100644 --- a/src/amd/common.h +++ b/src/amd/common.h @@ -30,52 +30,52 @@ Place, Suite 330, Boston, MA 02111-1307 USA #define DRM_DEBUG(fmt, args...) pr_debug("vendor-reset-drm: " fmt, ##args) static inline bool drm_can_sleep(void) { - if (in_atomic() || in_dbg_master() || irqs_disabled()) - return false; - return true; + if (in_atomic() || in_dbg_master() || irqs_disabled()) + return false; + return true; } -#define RREG32(reg) \ - ({ \ - u32 __out; \ - if (((reg)*4) < adev_to_amd_private(adev)->mmio_size) \ - __out = readl(adev_to_amd_private(adev)->mmio + (reg)); \ - else \ - { \ - writel(((reg)*4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ - __out = readl(adev_to_amd_private(adev)->mmio + mmMM_DATA); \ - } \ - __out; \ +#define RREG32(reg) \ + ({ \ + u32 __out; \ + if (((reg) * 4) < adev_to_amd_private(adev)->mmio_size) \ + __out = readl(adev_to_amd_private(adev)->mmio + (reg)); \ + else \ + { \ + writel(((reg) * 4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ + __out = readl(adev_to_amd_private(adev)->mmio + mmMM_DATA); \ + } \ + __out; \ }) -#define WREG32(reg, v) \ - do \ - { \ - if (((reg)*4) < adev_to_amd_private(adev)->mmio_size) \ - writel(v, adev_to_amd_private(adev)->mmio + (reg)); \ - else \ - { \ - writel(((reg)*4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ - writel(v, adev_to_amd_private(adev)->mmio + mmMM_DATA); \ - } \ +#define WREG32(reg, v) \ + do \ + { \ + if (((reg) * 4) < adev_to_amd_private(adev)->mmio_size) \ + writel(v, adev_to_amd_private(adev)->mmio + (reg)); \ + else \ + { \ + writel(((reg) * 4), adev_to_amd_private(adev)->mmio + mmMM_INDEX); \ + writel(v, adev_to_amd_private(adev)->mmio + mmMM_DATA); \ + } \ } while (0) -#define WREG32_PCIE(reg, v) \ - do \ - { \ - WREG32(mmPCIE_INDEX2, reg); \ - (void)RREG32(mmPCIE_INDEX2); \ - WREG32(mmPCIE_DATA2, v); \ - (void)RREG32(mmPCIE_DATA2); \ +#define WREG32_PCIE(reg, v) \ + do \ + { \ + WREG32(mmPCIE_INDEX2, reg); \ + (void)RREG32(mmPCIE_INDEX2); \ + WREG32(mmPCIE_DATA2, v); \ + (void)RREG32(mmPCIE_DATA2); \ } while (0) -#define RREG32_PCIE(reg) \ - ({ \ - u32 __tmp_read; \ - WREG32(mmPCIE_INDEX2, reg); \ - (void)RREG32(mmPCIE_INDEX2); \ - __tmp_read = RREG32(mmPCIE_DATA2); \ - __tmp_read; \ +#define RREG32_PCIE(reg) \ + ({ \ + u32 __tmp_read; \ + WREG32(mmPCIE_INDEX2, reg); \ + (void)RREG32(mmPCIE_INDEX2); \ + __tmp_read = RREG32(mmPCIE_DATA2); \ + __tmp_read; \ }) /* KIQ is only used for SRIOV accesses, we are not targetting these devices so @@ -117,8 +117,6 @@ struct amd_vendor_private { u16 cfg; - struct pci_dev *audio_pdev; - struct vendor_reset_dev *vdev; struct pci_saved_state *saved_state; struct amd_fake_dev adev;