mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-24 10:11:26 +03:00
UPSTREAM: drm/tegra: Support sector layout on Tegra194
Tegra194 has a special physical address bit that enables some memory swizzling logic to support different sector layouts. Support the bit that selects the sector layout which is passed in the framebuffer modifier. Change-Id: I253c94e44b0ec1a4718e21927a5b8bfe604bc8b4 Signed-off-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2545945 Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com> Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
Laxman Dewangan
parent
9ca27f1245
commit
d885fa7b15
@@ -88,6 +88,22 @@ static void tegra_plane_atomic_destroy_state(struct drm_plane *plane,
|
||||
kfree(state);
|
||||
}
|
||||
|
||||
static bool tegra_plane_supports_sector_layout(struct drm_plane *plane)
|
||||
{
|
||||
struct drm_crtc *crtc;
|
||||
|
||||
drm_for_each_crtc(crtc, plane->dev) {
|
||||
if (plane->possible_crtcs & drm_crtc_mask(crtc)) {
|
||||
struct tegra_dc *dc = to_tegra_dc(crtc);
|
||||
|
||||
if (!dc->soc->supports_sector_layout)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool tegra_plane_format_mod_supported(struct drm_plane *plane,
|
||||
uint32_t format,
|
||||
uint64_t modifier)
|
||||
@@ -97,6 +113,14 @@ static bool tegra_plane_format_mod_supported(struct drm_plane *plane,
|
||||
if (modifier == DRM_FORMAT_MOD_LINEAR)
|
||||
return true;
|
||||
|
||||
/* check for the sector layout bit */
|
||||
if ((modifier >> 56) == DRM_FORMAT_MOD_VENDOR_NVIDIA) {
|
||||
if (modifier & DRM_FORMAT_MOD_NVIDIA_SECTOR_LAYOUT) {
|
||||
if (!tegra_plane_supports_sector_layout(plane))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (info->num_planes == 1)
|
||||
return true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user