diff options
| author | 2021-10-21 08:27:39 +0300 | |
|---|---|---|
| committer | 2021-10-21 08:27:39 +0300 | |
| commit | 60dd57c7479418e2bc902143eb46a2fdcfeecbbb (patch) | |
| tree | ab6005faf6076a4c93fdfbcdccc1ff4bc044c8ec /drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | |
| parent | net/mlx5: Add priorities for counters in RDMA namespaces (diff) | |
| parent | RDMA/mlx5: Attach ndescs to mlx5_ib_mkey (diff) | |
| download | linux-dev-60dd57c7479418e2bc902143eb46a2fdcfeecbbb.tar.xz linux-dev-60dd57c7479418e2bc902143eb46a2fdcfeecbbb.zip | |
Merge brank 'mlx5_mkey' into rdma.git for-next
A small series to clean up the mlx5 mkey code across the mlx5_core and
InfiniBand.
* branch 'mlx5_mkey':
  RDMA/mlx5: Attach ndescs to mlx5_ib_mkey
  RDMA/mlx5: Move struct mlx5_core_mkey to mlx5_ib
  RDMA/mlx5: Replace struct mlx5_core_mkey by u32 key
  RDMA/mlx5: Remove pd from struct mlx5_core_mkey
  RDMA/mlx5: Remove size from struct mlx5_core_mkey
  RDMA/mlx5: Remove iova from struct mlx5_core_mkey
  Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_display.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 31 | 
1 files changed, 31 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 7a7316731911..dc50c05f23fc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c @@ -837,6 +837,28 @@ static int convert_tiling_flags_to_modifier(struct amdgpu_framebuffer *afb)  	return 0;  } +/* Mirrors the is_displayable check in radeonsi's gfx6_compute_surface */ +static int check_tiling_flags_gfx6(struct amdgpu_framebuffer *afb) +{ +	u64 micro_tile_mode; + +	/* Zero swizzle mode means linear */ +	if (AMDGPU_TILING_GET(afb->tiling_flags, SWIZZLE_MODE) == 0) +		return 0; + +	micro_tile_mode = AMDGPU_TILING_GET(afb->tiling_flags, MICRO_TILE_MODE); +	switch (micro_tile_mode) { +	case 0: /* DISPLAY */ +	case 3: /* RENDER */ +		return 0; +	default: +		drm_dbg_kms(afb->base.dev, +			    "Micro tile mode %llu not supported for scanout\n", +			    micro_tile_mode); +		return -EINVAL; +	} +} +  static void get_block_dimensions(unsigned int block_log2, unsigned int cpp,  				 unsigned int *width, unsigned int *height)  { @@ -1103,6 +1125,7 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev,  				    const struct drm_mode_fb_cmd2 *mode_cmd,  				    struct drm_gem_object *obj)  { +	struct amdgpu_device *adev = drm_to_adev(dev);  	int ret, i;  	/* @@ -1122,6 +1145,14 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev,  	if (ret)  		return ret; +	if (!dev->mode_config.allow_fb_modifiers) { +		drm_WARN_ONCE(dev, adev->family >= AMDGPU_FAMILY_AI, +			      "GFX9+ requires FB check based on format modifier\n"); +		ret = check_tiling_flags_gfx6(rfb); +		if (ret) +			return ret; +	} +  	if (dev->mode_config.allow_fb_modifiers &&  	    !(rfb->base.flags & DRM_MODE_FB_MODIFIERS)) {  		ret = convert_tiling_flags_to_modifier(rfb); | 
