Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp2518900rwr; Sat, 6 May 2023 12:46:28 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ59SVzpYmpYZ6YzM/KZSuvtWhExVZK0fMbJcqsBHu1L1twfe6XCafSDDD+ShVs1bALqcZjS X-Received: by 2002:a17:902:da8a:b0:1ab:1a5f:e061 with SMTP id j10-20020a170902da8a00b001ab1a5fe061mr6832993plx.6.1683402388606; Sat, 06 May 2023 12:46:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683402388; cv=none; d=google.com; s=arc-20160816; b=APyIac9sVBqpLbY8e1vH8VNGyW6UsUP9ocT7MQnlIIeLLZgJWuf1mpO21P4b6yHx46 lT2RWlune3XclxB9aUbH6c39TjXNgIGmVEgdl7NgPi08HWWaRGCyL1Z2rEPun80x8rE5 ICfjeG4GPQ7A0uICey0kkNxsTqYcNUE4GXnjGCy5ULed0YTwPnDdpPQYOpHIQ6MX+/eB v4x+K8PDDGYKENqe2Y8zw14wq1RsRPzangBDbp82cj/xZMcnQrLdR8gyYmaO8+D2Gtv3 06w3fdlhVvw51PcIN26fi2wqq17BbLgTCs5BXZnYfs41MCYIQ9sFt28dlpl3WGauqYdB Iydg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=KhmHVm3biAYbsxZZFqn6S1mZ25+9+Btd76fwE2r61yM=; b=uu79lrIp6uzahC7WoKiq7gXZlflDRBXxvbfaihwHUH9T3g0Q7QsFt7eKSWtno+4h1k wQYkcZ7QsIKCax+jEIF743hv3jBgan4NbcxOp8S6EdrfZkqOGU6rSbCO8CqU56XMMFr4 nvwtkhv0bdaagGOWJp4iqt3+wAmd92B1Kn8F0dNen3Fi/epA1Tbu2cCqIbT/aUNIdSkN 2+dr/3XXm7AvnFTwdOk7qEYTJlVbzBvwtLXZWp00YJfH7BA4986wpvpTG5M+iBN9h1kY f2tvQ9vaVnxzkHLBeWl4nJAUyO/vjKPEkVr2zG+Ja8i26qg8678A3awaDLRi7qEzQn5p AA8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=btCZ0BDq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jj19-20020a170903049300b001a6f3949171si4438770plb.24.2023.05.06.12.46.14; Sat, 06 May 2023 12:46:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=btCZ0BDq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229787AbjEFTZ0 (ORCPT + 99 others); Sat, 6 May 2023 15:25:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47022 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229753AbjEFTZX (ORCPT ); Sat, 6 May 2023 15:25:23 -0400 Received: from mail-il1-x129.google.com (mail-il1-x129.google.com [IPv6:2607:f8b0:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77B351887C for ; Sat, 6 May 2023 12:25:22 -0700 (PDT) Received: by mail-il1-x129.google.com with SMTP id e9e14a558f8ab-3318961b385so32131295ab.1 for ; Sat, 06 May 2023 12:25:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683401122; x=1685993122; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KhmHVm3biAYbsxZZFqn6S1mZ25+9+Btd76fwE2r61yM=; b=btCZ0BDq9ZJQcZ22rZUpnQjg4WSCmVGJhuyjjbQdV+XQ3LgzqqhqE7J9DxoYwLcOdn poZiWpYIXfBFwiuxl2Yv2hlKoKe/xFG5awl8Wo/zPTp1diFTAy7x7FDky39OatDuFjyQ glbROCQALf7AtroAdEommvvMngmYOBo2jjdW5qkcXIvezIMudubDc1GgCrK7bXh3X+IQ si90SgYKEqMyn30KgMWw7YMp7ZxZG5i44amB2ObibIC/WAwrciHdZOQTFz0i35T7zjuk GnqPllCOY/tQmEWxQfJDSvWY3GPMdQgmtWS1n+9/BcP5WBXo6TLjvzaI8JfxUo5+PTtW bVnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683401122; x=1685993122; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KhmHVm3biAYbsxZZFqn6S1mZ25+9+Btd76fwE2r61yM=; b=Td4JlmFIM6uQwB6aT9dkVNIcyeFBDTTqb8dDPOJidX26JY9JtgbpNb3hMpBsYQg89D NtYfsRR+UZ/IMGummUzE4+sQiZ0H8gwBwy9uEn06M0OTRZ8AnBMgmzZjndxyG0tNoPxu PLylAfb8E+35YNOXw8qhHbW4jA/GUX4Wu6ox5A5F51D7UKHBayu+OMwbs/sBVj+tqExM ll0frOpaVfas4M5h54iB4G08APpCgyppqOsbh7wpxS9EnQXTm3kSgsgZoGRPEYD13z3g ZqegG7Bm9cNya10Nac33gDD+SCTzPIi2f036u/obzsdqPKV8oKW+6Joz93oMrMmUW3G/ ugZg== X-Gm-Message-State: AC+VfDzsIjSD46rqeLLxfrk5/GUQGLYS5niaM3aEKOqW2zTIM0VD1cv5 CDGzi+uQAup2Afvnp8/9j7I= X-Received: by 2002:a6b:8d86:0:b0:76c:26cb:ea1d with SMTP id p128-20020a6b8d86000000b0076c26cbea1dmr2253451iod.6.1683401121666; Sat, 06 May 2023 12:25:21 -0700 (PDT) Received: from aford-B741.lan ([2601:447:d001:897f:5e49:1bed:79d0:5c25]) by smtp.gmail.com with ESMTPSA id z18-20020a05663822b200b0041631393ac9sm847824jas.18.2023.05.06.12.25.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 May 2023 12:25:21 -0700 (PDT) From: Adam Ford To: dri-devel@lists.freedesktop.org Cc: aford@beaconembedded.com, Adam Ford , Lucas Stach , Chen-Yu Tsai , Frieder Schrempf , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , David Airlie , Daniel Vetter , Inki Dae , Jagan Teki , Marek Szyprowski , Marek Vasut , linux-kernel@vger.kernel.org Subject: [PATCH V5 2/6] drm: bridge: samsung-dsim: Fix PMS Calculator on imx8m[mnp] Date: Sat, 6 May 2023 14:24:49 -0500 Message-Id: <20230506192453.725621-3-aford173@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230506192453.725621-1-aford173@gmail.com> References: <20230506192453.725621-1-aford173@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org According to Table 13-45 of the i.MX8M Mini Reference Manual, the min and max values for M and the frequency range for the VCO_out calculator were incorrect. This information was contradicted in other parts of the mini, nano and plus manuals. After reaching out to my NXP Rep, when confronting him about discrepencies in the Nano manual, he responded with: "Yes it is definitely wrong, the one that is part of the NOTE in MIPI_DPHY_M_PLLPMS register table against PMS_P, PMS_M and PMS_S is not correct. I will report this to Doc team, the one customer should be take into account is the Table 13-40 DPHY PLL Parameters and the Note above." These updated values also match what is used in the NXP downstream kernel. To fix this, make new variables to hold the min and max values of m and the minimum value of VCO_out, and update the PMS calculator to use these new variables instead of using hard-coded values to keep the backwards compatibility with other parts using this driver. Fixes: 4d562c70c4dc ("drm: bridge: samsung-dsim: Add i.MX8M Mini/Nano support") Signed-off-by: Adam Ford Reviewed-by: Lucas Stach Tested-by: Chen-Yu Tsai Tested-by: Frieder Schrempf Reviewed-by: Frieder Schrempf --- drivers/gpu/drm/bridge/samsung-dsim.c | 22 ++++++++++++++++++++-- include/drm/bridge/samsung-dsim.h | 3 +++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c index 2be3b58624c3..bf4b33d2de76 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -405,6 +405,9 @@ static const struct samsung_dsim_driver_data exynos3_dsi_driver_data = { .num_bits_resol = 11, .pll_p_offset = 13, .reg_values = reg_values, + .m_min = 41, + .m_max = 125, + .min_freq = 500, }; static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = { @@ -418,6 +421,9 @@ static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = { .num_bits_resol = 11, .pll_p_offset = 13, .reg_values = reg_values, + .m_min = 41, + .m_max = 125, + .min_freq = 500, }; static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = { @@ -429,6 +435,9 @@ static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = { .num_bits_resol = 11, .pll_p_offset = 13, .reg_values = reg_values, + .m_min = 41, + .m_max = 125, + .min_freq = 500, }; static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = { @@ -441,6 +450,9 @@ static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = { .num_bits_resol = 12, .pll_p_offset = 13, .reg_values = exynos5433_reg_values, + .m_min = 41, + .m_max = 125, + .min_freq = 500, }; static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = { @@ -453,6 +465,9 @@ static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = { .num_bits_resol = 12, .pll_p_offset = 13, .reg_values = exynos5422_reg_values, + .m_min = 41, + .m_max = 125, + .min_freq = 500, }; static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data = { @@ -469,6 +484,9 @@ static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data = { */ .pll_p_offset = 14, .reg_values = imx8mm_dsim_reg_values, + .m_min = 64, + .m_max = 1023, + .min_freq = 1050, }; static const struct samsung_dsim_driver_data * @@ -547,12 +565,12 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi, tmp = (u64)fout * (_p << _s); do_div(tmp, fin); _m = tmp; - if (_m < 41 || _m > 125) + if (_m < driver_data->m_min || _m > driver_data->m_max) continue; tmp = (u64)_m * fin; do_div(tmp, _p); - if (tmp < 500 * MHZ || + if (tmp < driver_data->min_freq * MHZ || tmp > driver_data->max_freq * MHZ) continue; diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung-dsim.h index ba5484de2b30..a1a5b2b89a7a 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -54,11 +54,14 @@ struct samsung_dsim_driver_data { unsigned int has_freqband:1; unsigned int has_clklane_stop:1; unsigned int num_clks; + unsigned int min_freq; unsigned int max_freq; unsigned int wait_for_reset; unsigned int num_bits_resol; unsigned int pll_p_offset; const unsigned int *reg_values; + u16 m_min; + u16 m_max; }; struct samsung_dsim_host_ops { -- 2.39.2