From nobody Tue Feb 10 03:56:18 2026 Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.53]) (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 F24C8D2FB for ; Sat, 8 Feb 2025 00:27:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738974433; cv=none; b=hJKSFTCq6xC9t4tJ9Op88HpPXQp7pwuk2vOlwhCDvTWp5LppRAo5JGl4DnB8xY6+PWRQQJ8fbnLLsmwt/m2aKRrIVGnm8PD+lmOcrdg1b4ZlD7V5BwBnaBfjScne+prD8c43CPqRKBf46x27juKUzpDCKegAGuMp9ZdKgt5zfpE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738974433; c=relaxed/simple; bh=uXKldyyUShxj4mE/w041cBnXe/6hXGA3PeMnMd+IOm0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f2yOCmJXwji1aaUeV0ECHz58hiXrTg0dPbPALAHoB4UFzH3C3xEuAKGiWDjLHjLufzsZbUzbRFCAm2BXxaG9oDOmlKBcZHJeI2/1LYbnJxAn/QeWAJj52N3/u82o1FvBeBz9Og6gDLyvzx1EQhJfOt0Ri16hpNEdsRbsQGGPTYg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=JJgv9GxO; arc=none smtp.client-ip=209.85.167.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="JJgv9GxO" Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-540215984f0so2834694e87.1 for ; Fri, 07 Feb 2025 16:27:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1738974430; x=1739579230; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=EJv47DTctbXXdHSD+jRLQExhlN8LdBAo21I9zEUehiI=; b=JJgv9GxOaquSaTU1F4vj5pNNqiVi5AXtA81szrxchCk6plKnoIQGjuvPvylN4o0z/r uMzhlzyBnk16hKHNXxHuidJge8QrjLSBWfTx7O33LMnSOXN+WHQ8f8011skLVGh0/Tn0 z5CMsonHaFlD9fPIoQ5tJYX2ihNyEmBS4sLAzmsomKqod/c29TLjIHs4Jqdxiz8PPI5G 2PZSu8gTKf14K+Xj3exvXoB2fJOupdYKg0fHJGR/htCynvFGM7obwup/6QRq+5S4njSp CgD0wUKvWU9DMyyxmVEqtnJ6qPqoNQ3wNGOUNsgxtpY90+mFJ2Ymuj9m5T59pKplXfMA aweQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738974430; x=1739579230; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EJv47DTctbXXdHSD+jRLQExhlN8LdBAo21I9zEUehiI=; b=e6WwXj9VyB1V1nx4svJAqc1MVUi51ZYtDB60+Vr4TEDgCZhwU7mMom0V9RA6b0es4f XhaQLQRLus/lDQ0a6ZR+8tZpbpqxKdpuaFDkHwU8bcuuaLsv6sZtjW21AS+wEyjhr/eO /fIDIyv79jKgdffTmtt19Ch0rEn2+5ks6M/EqjtnqGkD1fQyZ2Oj4kFNhc9H6jycIKed oQ9/f+7f5AOxPsU2AFACDrYLYZgN3rY6gwBMxb2WEuct3BZKw5cfbtI0HtmerjTKgdTK K0+MI0+Shsz0MxEsPwLv1GVpcTnvwHjfLUYf9RTtBPjfLsFSggWh+s8tiHdp+h7Ai9XP I38g== X-Forwarded-Encrypted: i=1; AJvYcCXJeKobeGUKwD2r5ScXUKZA1mt3B85KlvHhh5RhzMwbxb7yHzClhmXEUxHRfGFKFoxYi/uxObFIE5nIM1s=@vger.kernel.org X-Gm-Message-State: AOJu0YxO5xPG+r2fmOe7aaiUSzOkY0n/0swO3sf1kIEvmSlsvOeKx6EA NYtRPcuF8di/AJrPHVCxNYYn9AcNf19/D/LuQIDpk+3E5ci+DCfiC3Oow3RFSKk= X-Gm-Gg: ASbGncuyHjttDwq75ZwOPttpBCRRQnQqFFKjmLKx5Ty2/qINyKsJ0sIm78IdeQvOPgY VW+NCZcdHpWK1uUMLgA4jHQVdgGqukXD9OLTc5W5ntac6NjBaMvWcTAvbciPvNDGoKdUkTAf9np gkKz/mVo0ST+YumnSTGoD1gNLR86ULg2CCRFsHfCMECJHS/gsSlN/gZ7jLZmiBmiZ5retcqDd5k QAFv9JGdtVLEsUiLhO4jRGfREd69Uu7BfOwF82tBDNfWdJBZ5siJTht0jLygToCVWy+sYXFWObN huISaCgdXjti+ktINYzV2f8= X-Google-Smtp-Source: AGHT+IEv2KWiExZyTc5a9/5Vv3GXcJOM2vKT9sfUvK+wfRQHsUp2vZ50Doyn8pe87sWe1wbZx0diNQ== X-Received: by 2002:ac2:4ec9:0:b0:543:baa3:87ab with SMTP id 2adb3069b0e04-54414b0637fmr1626318e87.47.1738974430078; Fri, 07 Feb 2025 16:27:10 -0800 (PST) Received: from umbar.lan ([192.130.178.90]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5441060413asm588785e87.222.2025.02.07.16.27.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 16:27:08 -0800 (PST) From: Dmitry Baryshkov Date: Sat, 08 Feb 2025 02:27:01 +0200 Subject: [PATCH v7 2/7] drm/msm/hdmi: program HDMI timings during atomic_pre_enable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250208-bridge-hdmi-connector-v7-2-0c3837f00258@linaro.org> References: <20250208-bridge-hdmi-connector-v7-0-0c3837f00258@linaro.org> In-Reply-To: <20250208-bridge-hdmi-connector-v7-0-0c3837f00258@linaro.org> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Simona Vetter , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3054; i=dmitry.baryshkov@linaro.org; h=from:subject:message-id; bh=uXKldyyUShxj4mE/w041cBnXe/6hXGA3PeMnMd+IOm0=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBnpqTVlnCUwmyS4BLskQiI3ujrk6aTTc1xPgxB8 0lAqt09hFeJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCZ6ak1QAKCRCLPIo+Aiko 1ZPqB/9UXLPdqs36l78Rn/gBwSRg+eQDbC3+ok/lZf6TRsodmlfH0bXiG1vEU05/tNSELtUSN69 ppXuioe3dimrADpDMnkEONgBIlV8qNm6JgVshm+J97UgAxflc4QQFSep692Sn2SWzHrY9p5eua6 vdKyeRjSdnnOAcsYCs4ZHDS8rufeFzOUEYQHEKGYbF+/CGgHZeqS65OtJpDBPmm2STZ8LnTaJ7J y59FuKiWooiNGeBrDuLwVwctVj/0eZVC2lISLJCzo/PbmLqwWJG2L8Rm855sCt/7aGR/P+vJFcp 7/WhQ/DWCcYE/CrGYNcf8tE/4O59UHaZhSIoe27xhdBxJ16m X-Developer-Key: i=dmitry.baryshkov@linaro.org; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A The mode_set callback is deprecated, it doesn't get the drm_bridge_state, just mode-related argumetns. Also Abhinav pointed out that HDMI timings should be programmed after setting up HDMI PHY and PLL. Rework the code to program HDMI timings at the end of atomic_pre_enable(). Reviewed-by: Maxime Ripard Signed-off-by: Dmitry Baryshkov Reviewed-by: Abhinav Kumar --- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/h= dmi/hdmi_bridge.c index d839c71091dcdc3b020fcbba8d698d58ee7fc749..bd94b3a70f0e5e457a88f089b49= 1103a8c09567b 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c @@ -126,15 +126,29 @@ static void msm_hdmi_config_avi_infoframe(struct hdmi= *hdmi) hdmi_write(hdmi, REG_HDMI_INFOFRAME_CTRL1, val); } =20 +static void msm_hdmi_set_timings(struct hdmi *hdmi, + const struct drm_display_mode *mode); + static void msm_hdmi_bridge_atomic_pre_enable(struct drm_bridge *bridge, struct drm_bridge_state *old_bridge_state) { + struct drm_atomic_state *state =3D old_bridge_state->base.state; struct hdmi_bridge *hdmi_bridge =3D to_hdmi_bridge(bridge); struct hdmi *hdmi =3D hdmi_bridge->hdmi; struct hdmi_phy *phy =3D hdmi->phy; + struct drm_encoder *encoder =3D bridge->encoder; + struct drm_connector *connector; + struct drm_connector_state *conn_state; + struct drm_crtc_state *crtc_state; =20 DBG("power up"); =20 + connector =3D drm_atomic_get_new_connector_for_encoder(state, encoder); + conn_state =3D drm_atomic_get_new_connector_state(state, connector); + crtc_state =3D drm_atomic_get_new_crtc_state(state, conn_state->crtc); + + msm_hdmi_set_timings(hdmi, &crtc_state->adjusted_mode); + if (!hdmi->power_on) { msm_hdmi_phy_resource_enable(phy); msm_hdmi_power_on(bridge); @@ -177,17 +191,12 @@ static void msm_hdmi_bridge_atomic_post_disable(struc= t drm_bridge *bridge, } } =20 -static void msm_hdmi_bridge_mode_set(struct drm_bridge *bridge, - const struct drm_display_mode *mode, - const struct drm_display_mode *adjusted_mode) +static void msm_hdmi_set_timings(struct hdmi *hdmi, + const struct drm_display_mode *mode) { - struct hdmi_bridge *hdmi_bridge =3D to_hdmi_bridge(bridge); - struct hdmi *hdmi =3D hdmi_bridge->hdmi; int hstart, hend, vstart, vend; uint32_t frame_ctrl; =20 - mode =3D adjusted_mode; - hdmi->pixclock =3D mode->clock * 1000; =20 hstart =3D mode->htotal - mode->hsync_start; @@ -306,7 +315,6 @@ static const struct drm_bridge_funcs msm_hdmi_bridge_fu= ncs =3D { .atomic_reset =3D drm_atomic_helper_bridge_reset, .atomic_pre_enable =3D msm_hdmi_bridge_atomic_pre_enable, .atomic_post_disable =3D msm_hdmi_bridge_atomic_post_disable, - .mode_set =3D msm_hdmi_bridge_mode_set, .mode_valid =3D msm_hdmi_bridge_mode_valid, .edid_read =3D msm_hdmi_bridge_edid_read, .detect =3D msm_hdmi_bridge_detect, --=20 2.39.5