Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp1632787pxa; Thu, 6 Aug 2020 12:03:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzasw5cvm5hf15l9eJKBt+FQ+o5ni0pxO/+mjxlOhdt3V5zgM/yhLFDqDmBM+X1Ru6h1tmQ X-Received: by 2002:a17:906:12cd:: with SMTP id l13mr5646263ejb.385.1596740606416; Thu, 06 Aug 2020 12:03:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596740606; cv=none; d=google.com; s=arc-20160816; b=xUAiyKZ/QmYoWlOaKN2NtaAofDTC6fpJLqHURspEjxdUtnGwEmV61tCyh0M9LgQJ6+ ZriotiEs3K7bHIESdsUX0keS7mdyyiZxYFqkWo4yagdaUKn/qn5ozF4mOK6QoN3hOzTV mkGu31xyms9vMQxzLQ779N8Qf4mmaEzt+F3Kjxh1ucjUzMJ3T3EG/JWCweyJwsfMfygz PCBTWjyCo5LRGuIhqqvpQnTy/yPAB5vzCjInPwZnum6j5jpWzp20v/gQAv5AM1njTfya 5ZxovgYNtYq/cN4Z2WlkyTFAV/gODHd0SAQJAuK/YTdcaErTaI0S9r1tu1g2cMGJO4/W Flbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from; bh=LTS932fdLvwXI9om1DiK7LN0NCuI1nrSF4ze3h9IP80=; b=n/nqfsSF1o14nbizm8SBsCjWpv3rLp18xI6kHwz8+FDt2tjdACbXgD8RHxNyNy3ZGY LLy/3sR0iqk3goPxEU+ZYWXBgXrLgrHtWHd8KneB/v3wG9CQGJKMVNLdbLWwxL0ejyRQ 1G7rDhgHMOAzPWanj180YD6NxWapxDcgWBROLwkqclDvREvPnkcOGCCD1eq7fyPCX/2w rIJTbZvTpOo6Ay+nESs6Dp6mfqV1On3wKf6v4/I0zishfaniblqk2R8D2N2AFuzQpau3 sROVTAl8UmKnAV43GU6KaAXru6SRFSO4tYCEbyWjmqqj6Z21MnxTJ9olN2Gry6TkYNDl ZKfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=JUTR1VQx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id os22si3420145ejb.693.2020.08.06.12.02.57; Thu, 06 Aug 2020 12:03:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=JUTR1VQx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729724AbgHFTCS (ORCPT + 99 others); Thu, 6 Aug 2020 15:02:18 -0400 Received: from hqnvemgate26.nvidia.com ([216.228.121.65]:11917 "EHLO hqnvemgate26.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729193AbgHFTBp (ORCPT ); Thu, 6 Aug 2020 15:01:45 -0400 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate26.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 06 Aug 2020 12:01:31 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Thu, 06 Aug 2020 12:01:44 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Thu, 06 Aug 2020 12:01:44 -0700 Received: from HQMAIL111.nvidia.com (172.20.187.18) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Thu, 6 Aug 2020 19:01:44 +0000 Received: from rnnvemgw01.nvidia.com (10.128.109.123) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Thu, 6 Aug 2020 19:01:43 +0000 Received: from skomatineni-linux.nvidia.com (Not Verified[10.2.172.190]) by rnnvemgw01.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Thu, 06 Aug 2020 12:01:43 -0700 From: Sowjanya Komatineni To: , , , , , , , CC: , , , , , Subject: [PATCH v9 08/10] gpu: host1x: mipi: Keep MIPI clock enabled and mutex locked till calibration done Date: Thu, 6 Aug 2020 12:01:32 -0700 Message-ID: <1596740494-19306-9-git-send-email-skomatineni@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1596740494-19306-1-git-send-email-skomatineni@nvidia.com> References: <1596740494-19306-1-git-send-email-skomatineni@nvidia.com> X-NVConfidentiality: public MIME-Version: 1.0 Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1596740491; bh=LTS932fdLvwXI9om1DiK7LN0NCuI1nrSF4ze3h9IP80=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:X-NVConfidentiality:MIME-Version: Content-Type; b=JUTR1VQx+mSyXYtJ+ORG/ZfpDlmkPyEM1o1CVjWhBPYzQ3Q5sltU50l7o1cIds63l KDvPnFngDb996vl4UkRwV0EmWer06cyCTohvqw6kviQoi7rq9tXxbZAnyQM2W/K3Qu iUy0XE/XKiAt8lLpsWDdgiAMaeQA7APymgK5gMrAvm20U1UR9eXes45oQPeBVV7cIe cb7scIrHGb+u84Uz7uMR+AjenKdM6GQR7gp47wUG5Qc/kwzdLVw8pWOcI8jY1O9MYz oyQcY7+8KbGX1FrosUsiPbmw/eVr9tbbQdnJNsH4lQ0n/1UNLms0SiOvv+fZsK05SK +EFw5DCEyDQpA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With the split of MIPI calibration into tegra_mipi_calibrate() and tegra_mipi_wait(), MIPI clock is not kept enabled and mutex is not locked till the calibration is done. So, this patch keeps MIPI clock enabled and mutex locked after triggering start of calibration till its done. To let calibration process go through its finite sequence codes before calibration logic waiting for pads idle state added wait time of 75usec to make sure it sees idle state to apply the results. This patch renames tegra_mipi_calibrate() as tegra_mipi_start_calibration() and tegra_mipi_wait() as tegra_mipi_finish_calibration() to be inline with their usage. Reviewed-by: Dmitry Osipenko Signed-off-by: Sowjanya Komatineni --- drivers/gpu/drm/tegra/dsi.c | 4 ++-- drivers/gpu/host1x/mipi.c | 22 ++++++++++------------ include/linux/host1x.h | 4 ++-- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c index 3820e8d..a7864e9 100644 --- a/drivers/gpu/drm/tegra/dsi.c +++ b/drivers/gpu/drm/tegra/dsi.c @@ -694,11 +694,11 @@ static int tegra_dsi_pad_calibrate(struct tegra_dsi *dsi) DSI_PAD_PREEMP_PD(0x03) | DSI_PAD_PREEMP_PU(0x3); tegra_dsi_writel(dsi, value, DSI_PAD_CONTROL_3); - err = tegra_mipi_calibrate(dsi->mipi); + err = tegra_mipi_start_calibration(dsi->mipi); if (err < 0) return err; - return tegra_mipi_wait(dsi->mipi); + return tegra_mipi_finish_calibration(dsi->mipi); } static void tegra_dsi_set_timeout(struct tegra_dsi *dsi, unsigned long bclk, diff --git a/drivers/gpu/host1x/mipi.c b/drivers/gpu/host1x/mipi.c index e606464..2efe12d 100644 --- a/drivers/gpu/host1x/mipi.c +++ b/drivers/gpu/host1x/mipi.c @@ -293,19 +293,13 @@ int tegra_mipi_disable(struct tegra_mipi_device *dev) } EXPORT_SYMBOL(tegra_mipi_disable); -int tegra_mipi_wait(struct tegra_mipi_device *device) +int tegra_mipi_finish_calibration(struct tegra_mipi_device *device) { struct tegra_mipi *mipi = device->mipi; void __iomem *status_reg = mipi->regs + (MIPI_CAL_STATUS << 2); u32 value; int err; - err = clk_enable(device->mipi->clk); - if (err < 0) - return err; - - mutex_lock(&device->mipi->lock); - err = readl_relaxed_poll_timeout(status_reg, value, !(value & MIPI_CAL_STATUS_ACTIVE) && (value & MIPI_CAL_STATUS_DONE), 50, @@ -315,9 +309,9 @@ int tegra_mipi_wait(struct tegra_mipi_device *device) return err; } -EXPORT_SYMBOL(tegra_mipi_wait); +EXPORT_SYMBOL(tegra_mipi_finish_calibration); -int tegra_mipi_calibrate(struct tegra_mipi_device *device) +int tegra_mipi_start_calibration(struct tegra_mipi_device *device) { const struct tegra_mipi_soc *soc = device->mipi->soc; unsigned int i; @@ -381,12 +375,16 @@ int tegra_mipi_calibrate(struct tegra_mipi_device *device) value |= MIPI_CAL_CTRL_START; tegra_mipi_writel(device->mipi, value, MIPI_CAL_CTRL); - mutex_unlock(&device->mipi->lock); - clk_disable(device->mipi->clk); + /* + * Wait for min 72uS to let calibration logic finish calibration + * sequence codes before waiting for pads idle state to apply the + * results. + */ + usleep_range(75, 80); return 0; } -EXPORT_SYMBOL(tegra_mipi_calibrate); +EXPORT_SYMBOL(tegra_mipi_start_calibration); static const struct tegra_mipi_pad tegra114_mipi_pads[] = { { .data = MIPI_CAL_CONFIG_CSIA }, diff --git a/include/linux/host1x.h b/include/linux/host1x.h index 20c885d..ce59a6a 100644 --- a/include/linux/host1x.h +++ b/include/linux/host1x.h @@ -333,7 +333,7 @@ struct tegra_mipi_device *tegra_mipi_request(struct device *device, void tegra_mipi_free(struct tegra_mipi_device *device); int tegra_mipi_enable(struct tegra_mipi_device *device); int tegra_mipi_disable(struct tegra_mipi_device *device); -int tegra_mipi_calibrate(struct tegra_mipi_device *device); -int tegra_mipi_wait(struct tegra_mipi_device *device); +int tegra_mipi_start_calibration(struct tegra_mipi_device *device); +int tegra_mipi_finish_calibration(struct tegra_mipi_device *device); #endif -- 2.7.4