[PATCH] drm: tegra: Fix undefined behavior in left shift operation

Yu-Chun Lin eleanor15x at gmail.com
Sun May 25 14:46:50 UTC 2025


According to the C11 standard (ISO/IEC 9899:2011, 6.5.7):
"If E1 has a signed type and E1 x 2^E2 is not representable in the result
type, the behavior is undefined."

Shifting 1 << 31 causes signed integer overflow, which leads to undefined
behavior.

Fix this by explicitly using 'BIT(31)' to ensure the shift operates on an
unsigned type, avoiding undefined behavior.

Signed-off-by: Yu-Chun Lin <eleanor15x at gmail.com>
---
Compile test only

 drivers/gpu/drm/tegra/dc.c    |  2 +-
 drivers/gpu/drm/tegra/hdmi.c  |  8 ++++----
 drivers/gpu/drm/tegra/hdmi.h  |  8 ++++----
 drivers/gpu/drm/tegra/riscv.c |  2 +-
 drivers/gpu/drm/tegra/sor.h   | 14 +++++++-------
 5 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index 430b2eededb2..3047a380bb83 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -2171,7 +2171,7 @@ static void tegra_crtc_atomic_enable(struct drm_crtc *crtc,
 		u32 syncpt = host1x_syncpt_id(dc->syncpt), enable;
 
 		if (dc->soc->has_nvdisplay)
-			enable = 1 << 31;
+			enable = BIT(31);
 		else
 			enable = 1 << 8;
 
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
index e705f8590c13..524b46a297be 100644
--- a/drivers/gpu/drm/tegra/hdmi.c
+++ b/drivers/gpu/drm/tegra/hdmi.c
@@ -1719,7 +1719,7 @@ static const struct tegra_hdmi_config tegra20_hdmi_config = {
 	.tmds = tegra20_tmds_config,
 	.num_tmds = ARRAY_SIZE(tegra20_tmds_config),
 	.fuse_override_offset = HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT,
-	.fuse_override_value = 1 << 31,
+	.fuse_override_value = BIT(31),
 	.has_sor_io_peak_current = false,
 	.has_hda = false,
 	.has_hbr = false,
@@ -1729,7 +1729,7 @@ static const struct tegra_hdmi_config tegra30_hdmi_config = {
 	.tmds = tegra30_tmds_config,
 	.num_tmds = ARRAY_SIZE(tegra30_tmds_config),
 	.fuse_override_offset = HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT,
-	.fuse_override_value = 1 << 31,
+	.fuse_override_value = BIT(31),
 	.has_sor_io_peak_current = false,
 	.has_hda = true,
 	.has_hbr = false,
@@ -1739,7 +1739,7 @@ static const struct tegra_hdmi_config tegra114_hdmi_config = {
 	.tmds = tegra114_tmds_config,
 	.num_tmds = ARRAY_SIZE(tegra114_tmds_config),
 	.fuse_override_offset = HDMI_NV_PDISP_SOR_PAD_CTLS0,
-	.fuse_override_value = 1 << 31,
+	.fuse_override_value = BIT(31),
 	.has_sor_io_peak_current = true,
 	.has_hda = true,
 	.has_hbr = true,
@@ -1749,7 +1749,7 @@ static const struct tegra_hdmi_config tegra124_hdmi_config = {
 	.tmds = tegra124_tmds_config,
 	.num_tmds = ARRAY_SIZE(tegra124_tmds_config),
 	.fuse_override_offset = HDMI_NV_PDISP_SOR_PAD_CTLS0,
-	.fuse_override_value = 1 << 31,
+	.fuse_override_value = BIT(31),
 	.has_sor_io_peak_current = true,
 	.has_hda = true,
 	.has_hbr = true,
diff --git a/drivers/gpu/drm/tegra/hdmi.h b/drivers/gpu/drm/tegra/hdmi.h
index 8deb04223c18..57727703779b 100644
--- a/drivers/gpu/drm/tegra/hdmi.h
+++ b/drivers/gpu/drm/tegra/hdmi.h
@@ -119,7 +119,7 @@
 
 #define ACR_SUBPACK_CTS(x) (((x) & 0xffffff) << 8)
 #define ACR_SUBPACK_N(x)   (((x) & 0xffffff) << 0)
-#define ACR_ENABLE         (1 << 31)
+#define ACR_ENABLE         BIT(31)
 
 #define HDMI_NV_PDISP_HDMI_CTRL					0x44
 #define HDMI_CTRL_REKEY(x)         (((x) & 0x7f) <<  0)
@@ -130,7 +130,7 @@
 #define HDMI_NV_PDISP_HDMI_VSYNC_WINDOW				0x46
 #define VSYNC_WINDOW_END(x)   (((x) & 0x3ff) <<  0)
 #define VSYNC_WINDOW_START(x) (((x) & 0x3ff) << 16)
-#define VSYNC_WINDOW_ENABLE   (1 << 31)
+#define VSYNC_WINDOW_ENABLE   BIT(31)
 
 #define HDMI_NV_PDISP_HDMI_GCP_CTRL				0x47
 #define HDMI_NV_PDISP_HDMI_GCP_STATUS				0x48
@@ -158,8 +158,8 @@
 #define SOR_PWR_SAFE_STATE_PD       (0 << 16)
 #define SOR_PWR_SAFE_STATE_PU       (1 << 16)
 #define SOR_PWR_SETTING_NEW_DONE    (0 << 31)
-#define SOR_PWR_SETTING_NEW_PENDING (1 << 31)
-#define SOR_PWR_SETTING_NEW_TRIGGER (1 << 31)
+#define SOR_PWR_SETTING_NEW_PENDING BIT(31)
+#define SOR_PWR_SETTING_NEW_TRIGGER BIT(31)
 
 #define HDMI_NV_PDISP_SOR_TEST					0x56
 #define HDMI_NV_PDISP_SOR_PLL0					0x57
diff --git a/drivers/gpu/drm/tegra/riscv.c b/drivers/gpu/drm/tegra/riscv.c
index 6580416408f8..a5941239b194 100644
--- a/drivers/gpu/drm/tegra/riscv.c
+++ b/drivers/gpu/drm/tegra/riscv.c
@@ -19,7 +19,7 @@
 #define RISCV_BCR_CTRL_CORE_SELECT_RISCV		(1 << 4)
 #define RISCV_BCR_DMACFG				0x466c
 #define RISCV_BCR_DMACFG_TARGET_LOCAL_FB		(0 << 0)
-#define RISCV_BCR_DMACFG_LOCK_LOCKED			(1 << 31)
+#define RISCV_BCR_DMACFG_LOCK_LOCKED			BIT(31)
 #define RISCV_BCR_DMAADDR_PKCPARAM_LO			0x4670
 #define RISCV_BCR_DMAADDR_PKCPARAM_HI			0x4674
 #define RISCV_BCR_DMAADDR_FMCCODE_LO			0x4678
diff --git a/drivers/gpu/drm/tegra/sor.h b/drivers/gpu/drm/tegra/sor.h
index 00e09d5dca30..4f404f22dd04 100644
--- a/drivers/gpu/drm/tegra/sor.h
+++ b/drivers/gpu/drm/tegra/sor.h
@@ -74,7 +74,7 @@
 #define SOR_CAP 0x14
 
 #define SOR_PWR 0x15
-#define  SOR_PWR_TRIGGER			(1 << 31)
+#define  SOR_PWR_TRIGGER			BIT(31)
 #define  SOR_PWR_MODE_SAFE			(1 << 28)
 #define  SOR_PWR_NORMAL_STATE_PU		(1 << 0)
 
@@ -154,7 +154,7 @@
 #define  SOR_SEQ_CTL_PU_PC(x)		(((x) & 0xf) <<  0)
 
 #define SOR_LANE_SEQ_CTL 0x21
-#define  SOR_LANE_SEQ_CTL_TRIGGER		(1 << 31)
+#define  SOR_LANE_SEQ_CTL_TRIGGER		BIT(31)
 #define  SOR_LANE_SEQ_CTL_STATE_BUSY		(1 << 28)
 #define  SOR_LANE_SEQ_CTL_SEQUENCE_UP		(0 << 20)
 #define  SOR_LANE_SEQ_CTL_SEQUENCE_DOWN		(1 << 20)
@@ -163,7 +163,7 @@
 #define  SOR_LANE_SEQ_CTL_DELAY(x)		(((x) & 0xf) << 12)
 
 #define SOR_SEQ_INST(x) (0x22 + (x))
-#define  SOR_SEQ_INST_PLL_PULLDOWN (1 << 31)
+#define  SOR_SEQ_INST_PLL_PULLDOWN BIT(31)
 #define  SOR_SEQ_INST_POWERDOWN_MACRO (1 << 30)
 #define  SOR_SEQ_INST_ASSERT_PLL_RESET (1 << 29)
 #define  SOR_SEQ_INST_BLANK_V (1 << 28)
@@ -192,7 +192,7 @@
 #define  SOR_PWM_DIV_MASK			0xffffff
 
 #define SOR_PWM_CTL 0x33
-#define  SOR_PWM_CTL_TRIGGER			(1 << 31)
+#define  SOR_PWM_CTL_TRIGGER			BIT(31)
 #define  SOR_PWM_CTL_CLK_SEL			(1 << 30)
 #define  SOR_PWM_CTL_DUTY_CYCLE_MASK		0xffffff
 
@@ -261,7 +261,7 @@
 #define  SOR_LANE_POSTCURSOR_LANE0(x) (((x) & 0xff) << 0)
 
 #define SOR_DP_CONFIG0 0x58
-#define SOR_DP_CONFIG_DISPARITY_NEGATIVE	(1 << 31)
+#define SOR_DP_CONFIG_DISPARITY_NEGATIVE	BIT(31)
 #define SOR_DP_CONFIG_ACTIVE_SYM_ENABLE		(1 << 26)
 #define SOR_DP_CONFIG_ACTIVE_SYM_POLARITY	(1 << 24)
 #define SOR_DP_CONFIG_ACTIVE_SYM_FRAC_MASK	(0xf << 16)
@@ -370,7 +370,7 @@
 #define  SOR_HDMI_ACR_SUBPACK_LOW_SB1(x) (((x) & 0xff) << 24)
 
 #define SOR_HDMI_ACR_0320_SUBPACK_HIGH 0xb3
-#define  SOR_HDMI_ACR_SUBPACK_HIGH_ENABLE (1 << 31)
+#define  SOR_HDMI_ACR_SUBPACK_HIGH_ENABLE BIT(31)
 
 #define SOR_HDMI_ACR_0441_SUBPACK_LOW 0xb4
 #define SOR_HDMI_ACR_0441_SUBPACK_HIGH 0xb5
@@ -382,7 +382,7 @@
 #define  SOR_HDMI_CTRL_REKEY(x) (((x) & 0x7f) << 0)
 
 #define SOR_HDMI_SPARE 0xcb
-#define  SOR_HDMI_SPARE_ACR_PRIORITY_HIGH (1 << 31)
+#define  SOR_HDMI_SPARE_ACR_PRIORITY_HIGH BIT(31)
 #define  SOR_HDMI_SPARE_CTS_RESET(x) (((x) & 0x7) << 16)
 #define  SOR_HDMI_SPARE_HW_CTS_ENABLE (1 << 0)
 
-- 
2.43.0



More information about the dri-devel mailing list