diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 45 | 
1 files changed, 26 insertions, 19 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 5376328d3fd0..bdf849da32e4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -35,6 +35,7 @@  #include <linux/pm_runtime.h>  #include <linux/vga_switcheroo.h>  #include <drm/drm_probe_helper.h> +#include <linux/mmu_notifier.h>  #include "amdgpu.h"  #include "amdgpu_irq.h" @@ -79,9 +80,10 @@   * - 3.31.0 - Add support for per-flip tiling attribute changes with DC   * - 3.32.0 - Add syncobj timeline support to AMDGPU_CS.   * - 3.33.0 - Fixes for GDS ENOMEM failures in AMDGPU_CS. + * - 3.34.0 - Non-DC can flip correctly between buffers with different pitches   */  #define KMS_DRIVER_MAJOR	3 -#define KMS_DRIVER_MINOR	33 +#define KMS_DRIVER_MINOR	34  #define KMS_DRIVER_PATCHLEVEL	0  #define AMDGPU_MAX_TIMEOUT_PARAM_LENTH	256 @@ -142,7 +144,7 @@ int amdgpu_async_gfx_ring = 1;  int amdgpu_mcbp = 0;  int amdgpu_discovery = -1;  int amdgpu_mes = 0; -int amdgpu_noretry; +int amdgpu_noretry = 1;  struct amdgpu_mgpu_info mgpu_info = {  	.mutex = __MUTEX_INITIALIZER(mgpu_info.mutex), @@ -610,7 +612,7 @@ MODULE_PARM_DESC(mes,  module_param_named(mes, amdgpu_mes, int, 0444);  MODULE_PARM_DESC(noretry, -	"Disable retry faults (0 = retry enabled (default), 1 = retry disabled)"); +	"Disable retry faults (0 = retry enabled, 1 = retry disabled (default))");  module_param_named(noretry, amdgpu_noretry, int, 0644);  #ifdef CONFIG_HSA_AMD @@ -996,6 +998,11 @@ static const struct pci_device_id pciidlist[] = {  	/* Raven */  	{0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU},  	{0x1002, 0x15d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU}, +	/* Arcturus */ +	{0x1002, 0x738C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT}, +	{0x1002, 0x7388, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT}, +	{0x1002, 0x738E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT}, +	{0x1002, 0x7390, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARCTURUS|AMD_EXP_HW_SUPPORT},  	/* Navi10 */  	{0x1002, 0x7310, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},  	{0x1002, 0x7312, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10}, @@ -1004,6 +1011,11 @@ static const struct pci_device_id pciidlist[] = {  	{0x1002, 0x731A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},  	{0x1002, 0x731B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},  	{0x1002, 0x731F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10}, +	/* Navi14 */ +	{0x1002, 0x7340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14}, + +	/* Renoir */ +	{0x1002, 0x1636, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU|AMD_EXP_HW_SUPPORT},  	{0, 0, 0}  }; @@ -1092,21 +1104,21 @@ amdgpu_pci_shutdown(struct pci_dev *pdev)  	 * unfortunately we can't detect certain  	 * hypervisors so just do this all the time.  	 */ +	adev->mp1_state = PP_MP1_STATE_UNLOAD;  	amdgpu_device_ip_suspend(adev); +	adev->mp1_state = PP_MP1_STATE_NONE;  }  static int amdgpu_pmops_suspend(struct device *dev)  { -	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = dev_get_drvdata(dev); -	struct drm_device *drm_dev = pci_get_drvdata(pdev);  	return amdgpu_device_suspend(drm_dev, true, true);  }  static int amdgpu_pmops_resume(struct device *dev)  { -	struct pci_dev *pdev = to_pci_dev(dev); -	struct drm_device *drm_dev = pci_get_drvdata(pdev); +	struct drm_device *drm_dev = dev_get_drvdata(dev);  	/* GPU comes up enabled by the bios on resume */  	if (amdgpu_device_is_px(drm_dev)) { @@ -1120,33 +1132,29 @@ static int amdgpu_pmops_resume(struct device *dev)  static int amdgpu_pmops_freeze(struct device *dev)  { -	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = dev_get_drvdata(dev); -	struct drm_device *drm_dev = pci_get_drvdata(pdev);  	return amdgpu_device_suspend(drm_dev, false, true);  }  static int amdgpu_pmops_thaw(struct device *dev)  { -	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = dev_get_drvdata(dev); -	struct drm_device *drm_dev = pci_get_drvdata(pdev);  	return amdgpu_device_resume(drm_dev, false, true);  }  static int amdgpu_pmops_poweroff(struct device *dev)  { -	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = dev_get_drvdata(dev); -	struct drm_device *drm_dev = pci_get_drvdata(pdev);  	return amdgpu_device_suspend(drm_dev, true, true);  }  static int amdgpu_pmops_restore(struct device *dev)  { -	struct pci_dev *pdev = to_pci_dev(dev); +	struct drm_device *drm_dev = dev_get_drvdata(dev); -	struct drm_device *drm_dev = pci_get_drvdata(pdev);  	return amdgpu_device_resume(drm_dev, false, true);  } @@ -1205,8 +1213,7 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)  static int amdgpu_pmops_runtime_idle(struct device *dev)  { -	struct pci_dev *pdev = to_pci_dev(dev); -	struct drm_device *drm_dev = pci_get_drvdata(pdev); +	struct drm_device *drm_dev = dev_get_drvdata(dev);  	struct drm_crtc *crtc;  	if (!amdgpu_device_is_px(drm_dev)) { @@ -1373,7 +1380,7 @@ static struct drm_driver kms_driver = {  	.driver_features =  	    DRIVER_USE_AGP | DRIVER_ATOMIC |  	    DRIVER_GEM | -	    DRIVER_PRIME | DRIVER_RENDER | DRIVER_MODESET | DRIVER_SYNCOBJ, +	    DRIVER_RENDER | DRIVER_MODESET | DRIVER_SYNCOBJ,  	.load = amdgpu_driver_load_kms,  	.open = amdgpu_driver_open_kms,  	.postclose = amdgpu_driver_postclose_kms, @@ -1397,7 +1404,6 @@ static struct drm_driver kms_driver = {  	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,  	.gem_prime_export = amdgpu_gem_prime_export,  	.gem_prime_import = amdgpu_gem_prime_import, -	.gem_prime_res_obj = amdgpu_gem_prime_res_obj,  	.gem_prime_get_sg_table = amdgpu_gem_prime_get_sg_table,  	.gem_prime_import_sg_table = amdgpu_gem_prime_import_sg_table,  	.gem_prime_vmap = amdgpu_gem_prime_vmap, @@ -1464,6 +1470,7 @@ static void __exit amdgpu_exit(void)  	amdgpu_unregister_atpx_handler();  	amdgpu_sync_fini();  	amdgpu_fence_slab_fini(); +	mmu_notifier_synchronize();  }  module_init(amdgpu_init); | 
