From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDE6B3947AE for ; Mon, 6 Jul 2026 13:27:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783344430; cv=none; b=qGzkH+DqOaPJFx3ZHXDSg8utCiweWLLt8ILnBuU4VzK/k8SsHMvj/X+DjoZ6lBz1aVNa3evrCWaXYtq9f4MRFi+/7uWcVK8Hbt3GD8IWW8O/S/QUkAm0GI7xLxxjwpvaZVWxChVkZkE1xPfcwMoBqBldSTvXeONc1WaAyEK7w4E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783344430; c=relaxed/simple; bh=r59EUgtIsaoxZtEmDgwSAtgrbkt8LgaNF7WBBajdhfk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=jrjHTOzkpFwPo1+0d2/oNqFb8H5KYXzz7hHEqV3lIpCha7Zu3rL6Jurc4Dd6alcTCrhL9XDOyecWno+99v1YiR1svmmZtHuhOAY3hrBkiW4HW/gKPzvuZi9lhWYZFZeBedrm2a5NIBn5Ioy/gASokCZs7BhcaqqgObv485uAmCs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZI22YvHn; arc=none smtp.client-ip=209.85.215.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZI22YvHn" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-c88973b6965so2676263a12.1 for ; Mon, 06 Jul 2026 06:27:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783344424; x=1783949224; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=n0i9VdK/Ma3gHZKckXQb+1T7ww2+Cb/2KCUzwQQKXZo=; b=ZI22YvHn5aBhmPdDXiXtIJyRLJujfalTVCjz0dZ52SRMIjIRE+OpJ+JtjmCU2PxzHI R17eK8Yi8I65V5b2xui69/Dln9SoBmuY5qB4hACXotsNuJG2DE+ae3Dc5JczbCPF8SVH nOWohzz5TidX3HTv2O5jL1fq12acTidv+zRHnIiMX1ONUDiZOQtKiuvE8mhXervnd4yv DxjMgIYqg13muYjBK0pf0UKqY/dEZXfEZ5I0yrzeJe1Uj2lJ5eWcKYsL/u17E0R39Fdp EEX3oMLmigj+Nv59x4SzsGZQil6yyjRRx3ZhZJ/hW1dKTGz3VMYjxfcWpg0ezHJWyTWc aKKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783344424; x=1783949224; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=n0i9VdK/Ma3gHZKckXQb+1T7ww2+Cb/2KCUzwQQKXZo=; b=S22/D0x8EiRmGEoVKfq48w3OqqKlCFwVToZNhDF4dtEh6gVKhf7n+M0duL3TD0EBT6 PyowFRMUiZfyc7Attu/GSH7SHcIs81h2F6Ztqly9IslBR+zAOxWQUxWLN6lcPpUSHKDI OGR3TF/tHoEptQBG259KWjk7auvo0eZ7GDiIkz5viEdo29yqwHT9LxOsNT/Dk374O3mY SaH/dvebpoT3pH56nzmvIYvpjT3CV4ubyr1kV6jWwgfXYvlbobl+3hieZBb2yZOTTJsA 1Z+YrO1FNKBShT+RmZPDXZac4htzem8TEJLfTsGo7/4+HuFCWQM6zINvpBwCI98uDXjg 2hqA== X-Forwarded-Encrypted: i=1; AHgh+Roy3LGhzE8ReSSVTeycEh/947z4AfYgJ0mbn6aYm5ud3l+c4IsfG8Aum5vVLYnrPXMi52162OLMy27yPVY=@vger.kernel.org X-Gm-Message-State: AOJu0YxQH5u45cr+rM2092c9FhizSflz8wkHhBQ33r0CAR1fCynxd0gD Z9zjw0KH+sgX4y4iK9UzYzv3ssFGXiYzoV0glLfBh2Md4dQTkYqE1fwP X-Gm-Gg: AfdE7cn1ugNXxg60lW1jlKvRaEGoCqzHlYP3zt735Tz9QBN80EaD+7niSZRu1LldDaI 8VtV1gHWd4N8xOIRRRLd89PON0CySgX3z/E4raSOVWeXKxQPm2Uq0QZ1LroMESoEeQENRb1I3TE wPbor4V9q/tbQRkEgrr2zQEE+jzgJEGA+C8vPCQwWU8AOzK5O2oDAhby2V5IniYUQ9by96TdyjX Xcg6YWupu+FKAcbmepYELEHDnVaaw5Q3ZHKYX4vw/o/8ocsZrBBvQnmh3TCftTL3QMLnJd+w2oU DDugZUNTfSZ5X5MDdcqpxS8GkEsjE8oR2kS7aiEEcOb+DhhPy0TwFqjRAILXyhLZkFh+mFKI/IF 1GJU/t4r4aXSEHzHfnN+rGOQScyrD9XR/SmtyyYAwD/kFLVBZPGwRfyGNEe8NAHX2nmBxweP8Jz RKZUNHQ7NeZwuu+jb88jEK2+fM+KRGQvsEWoCqTGePeA/zgE4ZmjTWJLS8G1G1Mkej8BKzsHLBm wmHflwO X-Received: by 2002:a05:6a21:4c11:b0:3b2:8674:9830 with SMTP id adf61e73a8af0-3c01c65ff4fmr14772604637.14.1783344424235; Mon, 06 Jul 2026 06:27:04 -0700 (PDT) Received: from leonardoc-nb ([67.159.246.222]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3114fe08b1bsm17734598eec.26.2026.07.06.06.26.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Jul 2026 06:27:03 -0700 (PDT) From: Leonardo Costa To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, luca.ceresoli@bootlin.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomi.valkeinen@ideasonboard.com, francesco@dolcini.it, leonardo.costa@toradex.com, stable@vger.kernel.org Subject: [PATCH RESEND] drm/bridge: tc358768: Enforce input bus flags via atomic_check Date: Mon, 6 Jul 2026 10:24:17 -0300 Message-ID: <20260706132440.1594239-1-leoreis.costa@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Leonardo Costa The tc358768 declares static bridge timings requiring pixel data to be sampled on the positive clock edge. However, the DRM core default propagation simply copies the output-side bus flags, coming from the next bridge, connector or panel, to the input side. If the propagated flags are incompatible with the bridge ones, the data is wrongly sampled, typically resulting in visual artifacts on the panel. Implement the atomic_check hook, replacing the mutually exclusive mode_fixup, and set the bridge state input bus flags to the ones required by the tc358768. The sync polarity defaulting previously done in mode_fixup is carried over into atomic_check unchanged. Fixes: ff1ca6397b1d ("drm/bridge: Add tc358768 driver") Cc: stable@vger.kernel.org Signed-off-by: Leonardo Costa --- drivers/gpu/drm/bridge/tc358768.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c index 0d85120fcc7a3..0516a331e71ba 100644 --- a/drivers/gpu/drm/bridge/tc358768.c +++ b/drivers/gpu/drm/bridge/tc358768.c @@ -1262,10 +1262,13 @@ tc358768_atomic_get_input_bus_fmts(struct drm_bridge *bridge, return input_fmts; } -static bool tc358768_mode_fixup(struct drm_bridge *bridge, - const struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) +static int tc358768_bridge_atomic_check(struct drm_bridge *bridge, + struct drm_bridge_state *bridge_state, + struct drm_crtc_state *crtc_state, + struct drm_connector_state *conn_state) { + struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode; + /* Default to positive sync */ if (!(adjusted_mode->flags & @@ -1276,13 +1279,15 @@ static bool tc358768_mode_fixup(struct drm_bridge *bridge, (DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC))) adjusted_mode->flags |= DRM_MODE_FLAG_PVSYNC; - return true; + bridge_state->input_bus_cfg.flags = bridge->timings->input_bus_flags; + + return 0; } static const struct drm_bridge_funcs tc358768_bridge_funcs = { .attach = tc358768_bridge_attach, .mode_valid = tc358768_bridge_mode_valid, - .mode_fixup = tc358768_mode_fixup, + .atomic_check = tc358768_bridge_atomic_check, .atomic_pre_enable = tc358768_bridge_atomic_pre_enable, .atomic_enable = tc358768_bridge_atomic_enable, .atomic_disable = tc358768_bridge_atomic_disable,