From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F5C4303975; Mon, 5 May 2025 22:27:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746484030; cv=none; b=QEuIq9ZXMzeA5NtM+Q3QzXQpIS3uuahkCLUjzrboPdAp1sHKXnWC6P2Ic3c9NrI8omdGhaK72bok22ffHihdmest1cFtkOp325OH7NYG0l4Yo1BfYBC4QewKZeNuGDQGEiZ6hkFio48UU+dB4jBNIHrhOSAR7xTemf9Hw5Bditg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746484030; c=relaxed/simple; bh=NEnIgFa1vzdx6SehrHdu6hqP61wk6W3TvGqPC8DhPrE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=p1755lmojIItVJzWYHWSNPhQxxyT6ZDcfNDIbIKX9U7fHJ7+UsPf2Zy5P0LRvBdp2QDqRlHNbNT3njPCINJzYAoUmh/SKeoZ5MBuiZnODcvES60oMXUtIdj7sUhgYFRQhjSXnZwHTeU0y27NUJijouaGygItZvuTglZgPNOC9Jo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ErDnQ88m; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ErDnQ88m" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D66EAC4CEE4; Mon, 5 May 2025 22:27:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746484029; bh=NEnIgFa1vzdx6SehrHdu6hqP61wk6W3TvGqPC8DhPrE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ErDnQ88mrTThXEjlh2ZNbVs5FnzLsQD0ZO+IwSwk/LYh7mAobcq/kGUBnxbCiLide J7Fd1wj4MmM0Wl24AHzZfBjpBsjxikv3tpN4dVkExWpr1Guwl39nQXb0K6wAaioG4h TfLBMmzQkLzRb0tXA9+iKn0zJNExKnL2K+ebqkUzVsh0jbx0x5g64kpqvZW4O6yyna SeMhMOPLaiAVAgrc/BmWmRMM9H4oLuAnuNW4aj/lQx2eqEGYSPCjbD3ucoI+8ATBPe 2bL4dIqlhWK8hLzncJvE7AJF/mLZEnzIRDpyzGQJ4kUyMn9Z7dO706vXyfDdEDAeKc Dg2pizzQwOdKw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Samson Tam , Jun Lei , Daniel Wheeler , Alex Deucher , Sasha Levin , harry.wentland@amd.com, sunpeng.li@amd.com, christian.koenig@amd.com, airlied@gmail.com, simona@ffwll.ch, alex.hung@amd.com, navid.assadian@amd.com, Relja.Vojvodic@amd.com, wenjing.liu@amd.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 6.14 323/642] drm/amd/display: fix check for identity ratio Date: Mon, 5 May 2025 18:08:59 -0400 Message-Id: <20250505221419.2672473-323-sashal@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250505221419.2672473-1-sashal@kernel.org> References: <20250505221419.2672473-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.14.5 Content-Transfer-Encoding: 8bit From: Samson Tam [ Upstream commit 0d3004647631aedb713251525a99784661574767 ] [Why] IDENTITY_RATIO check uses 2 bits for integer, which only allows checking downscale ratios up to 3. But we support up to 6x downscale [How] Update IDENTITY_RATIO to check 3 bits for integer Add ASSERT to catch if we downscale more than 6x Signed-off-by: Samson Tam Reviewed-by: Jun Lei Tested-by: Daniel Wheeler Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/display/dc/spl/dc_spl.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/display/dc/spl/dc_spl.c b/drivers/gpu/drm/amd/display/dc/spl/dc_spl.c index 38a9a0d680581..18b423bd302a7 100644 --- a/drivers/gpu/drm/amd/display/dc/spl/dc_spl.c +++ b/drivers/gpu/drm/amd/display/dc/spl/dc_spl.c @@ -8,7 +8,7 @@ #include "dc_spl_isharp_filters.h" #include "spl_debug.h" -#define IDENTITY_RATIO(ratio) (spl_fixpt_u2d19(ratio) == (1 << 19)) +#define IDENTITY_RATIO(ratio) (spl_fixpt_u3d19(ratio) == (1 << 19)) #define MIN_VIEWPORT_SIZE 12 static bool spl_is_yuv420(enum spl_pixel_format format) @@ -887,6 +887,8 @@ static bool spl_get_isharp_en(struct spl_in *spl_in, static void spl_get_taps_non_adaptive_scaler( struct spl_scratch *spl_scratch, const struct spl_taps *in_taps) { + bool check_max_downscale = false; + if (in_taps->h_taps == 0) { if (spl_fixpt_ceil(spl_scratch->scl_data.ratios.horz) > 1) spl_scratch->scl_data.taps.h_taps = spl_min(2 * spl_fixpt_ceil( @@ -926,6 +928,23 @@ static void spl_get_taps_non_adaptive_scaler( else spl_scratch->scl_data.taps.h_taps_c = in_taps->h_taps_c; + + /* + * Max downscale supported is 6.0x. Add ASSERT to catch if go beyond that + */ + check_max_downscale = spl_fixpt_le(spl_scratch->scl_data.ratios.horz, + spl_fixpt_from_fraction(6, 1)); + SPL_ASSERT(check_max_downscale); + check_max_downscale = spl_fixpt_le(spl_scratch->scl_data.ratios.vert, + spl_fixpt_from_fraction(6, 1)); + SPL_ASSERT(check_max_downscale); + check_max_downscale = spl_fixpt_le(spl_scratch->scl_data.ratios.horz_c, + spl_fixpt_from_fraction(6, 1)); + SPL_ASSERT(check_max_downscale); + check_max_downscale = spl_fixpt_le(spl_scratch->scl_data.ratios.vert_c, + spl_fixpt_from_fraction(6, 1)); + SPL_ASSERT(check_max_downscale); + if (IDENTITY_RATIO(spl_scratch->scl_data.ratios.horz)) spl_scratch->scl_data.taps.h_taps = 1; if (IDENTITY_RATIO(spl_scratch->scl_data.ratios.vert)) -- 2.39.5