Received: by 10.192.165.156 with SMTP id m28csp1543301imm; Wed, 11 Apr 2018 22:18:36 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/03EoYw2tFXvSlaQd0oN5i3sP3VWLk+VdVBgRKiY/+66HxlydXov/2nGT6kgjZGojWKFQ9 X-Received: by 10.99.63.131 with SMTP id m125mr5535910pga.196.1523510316606; Wed, 11 Apr 2018 22:18:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523510316; cv=none; d=google.com; s=arc-20160816; b=tt/FvZg+TyZzpJFL37Xu57qhqrZIIjWEfIzb57MBaCG4/u11eCD8ZugVawLV/WuIoE 5uWKaA9QAPfsntqIG18WoFbrZS9Oxag2YRfl7gHIQPAd6USuGz/m1Z6M48dbgUdmRL/7 HW9EzzUEW2Deld66laZIKxCrRpuXD7aSVN+UvTErkwL6GY1Pdz+eHEyPeVpQT6iVsa75 LXbbP822f5GgJO0LZ2Mu8NrkbeipL3TTvG19Iiv97jE/uQL2N18WqY1MgfyqASPtDfcr eLHt66iLF1DD0KMKOeTyPO1R3iaHfIyWKTK7rjo0Oa+VoOFAdUlfCi1d8FM2VCvn72ej 8fig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dmarc-filter :dkim-signature:dkim-signature:arc-authentication-results; bh=dT/EcyIMSTT9n9yVf39RaYPb4L8rolOy8Alp6fyC2xI=; b=tpYqLY/VA+sMBn4/iWkkaxIUFlOYALVocEsrvnwycS35p4E3qzrpzPILBmmNKjGNy7 rG8qshnSpMCuDY/w8lero30QCE0R2XQsiBe+W3FrmyACWKimQ1tBbkoifhFlAnoweRmx p3OHdo53+LzDV3vPSU1x1JxDMVu8kR1pJDpIypbqXYKXy12V0xS+t6FrM9VH1R+h99/w /Z17ppSCmRrTrDvUlCLN4G4xeh87lOwcbs6/l68BUiH9aT+cz67KelkQzZwhfA1+yIVu PuPzOmbuBEdBNoQmMc7qfpDXcpVgH+4plGna3XkAOrEO+bB/NQ+sBb7AVW0uoOQXXfG7 9sMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=NQR9cYNg; dkim=pass header.i=@codeaurora.org header.s=default header.b=Nv2QZBk7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o1-v6si2537911pld.255.2018.04.11.22.17.59; Wed, 11 Apr 2018 22:18:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=NQR9cYNg; dkim=pass header.i=@codeaurora.org header.s=default header.b=Nv2QZBk7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752470AbeDLFNf (ORCPT + 99 others); Thu, 12 Apr 2018 01:13:35 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:40230 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750951AbeDLFNd (ORCPT ); Thu, 12 Apr 2018 01:13:33 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 302BC6090E; Thu, 12 Apr 2018 05:13:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1523510013; bh=CIqjBdT9rZhoDVFlUEPmpioGNQct3bPctwJoGzVQZeQ=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=NQR9cYNgJSXSRGyy4htahVYtERowE4HpSf4fjC43EAgCHYJIvUzvnqxA2qOOpnByw /eAuJGQcCHO4xB+kN9QGgvq8XMxbgZ/h0hUiOyKdyGcPOjId6BYidPRiEZzYOXi3WY MXeKEaGtbn+y6hDJ8is1ij1Iklcnbe7NQ83PERFc= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID,UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.0 Received: from [10.79.40.94] (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vivek.gautam@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 2837F6081C; Thu, 12 Apr 2018 05:13:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1523510012; bh=CIqjBdT9rZhoDVFlUEPmpioGNQct3bPctwJoGzVQZeQ=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=Nv2QZBk7hcK8+dYn1vQ3KO1/7mHMPQV2+aiRXBofZP/RtB26wwHi+jbrYvOM/veks eT26lrQTt2eyQPBYoisWukvXWAYnsedyd49RqWaYekP4j3HPSKK0LcETBV5UUxIyjX FHYey1q8Acm79qRhUTnimPOs9jzQpLHriqyzn7jM= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 2837F6081C Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=vivek.gautam@codeaurora.org Subject: Re: [PATCH v3 1/2] phy: Add QMP phy based UFS phy support for sdm845 To: cang@codeaurora.org Cc: subhashj@codeaurora.org, asutoshd@codeaurora.org, mgautam@codeaurora.org, kishon@ti.com, robh+dt@kernel.org, mark.rutland@arm.com, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org References: <20180327071838.11168-1-cang@codeaurora.org> <20180327071838.11168-2-cang@codeaurora.org> From: Vivek Gautam Message-ID: Date: Thu, 12 Apr 2018 10:43:26 +0530 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 4/12/2018 6:27 AM, cang@codeaurora.org wrote: > On 2018-04-09 19:28, Vivek Gautam wrote: >> Hi Can, >> >> >> On 3/27/2018 12:48 PM, Can Guo wrote: >>> Add UFS PHY support to make SDM845 UFS work with common PHY framework. >>> >>> Signed-off-by: Can Guo >>> --- >>>   drivers/phy/qualcomm/phy-qcom-qmp.c | 130 >>> +++++++++++++++++++++++++++++++++--- >>>   drivers/phy/qualcomm/phy-qcom-qmp.h |   8 +++ >>>   2 files changed, 127 insertions(+), 11 deletions(-) >>> >>> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c >>> b/drivers/phy/qualcomm/phy-qcom-qmp.c >>> index 5cf2c3c..0b58030 100644 >>> --- a/drivers/phy/qualcomm/phy-qcom-qmp.c >>> +++ b/drivers/phy/qualcomm/phy-qcom-qmp.c >>> @@ -156,6 +156,11 @@ enum qphy_reg_layout { >>>       [QPHY_PCS_LFPS_RXTERM_IRQ_STATUS] = 0x170, >>>   }; >>>   +static const unsigned int sdm845_ufsphy_regs_layout[] = { >>> +    [QPHY_START_CTRL]        = 0x00, >>> +    [QPHY_PCS_READY_STATUS]        = 0x168, >>> +}; >>> + >>>   static const struct qmp_phy_init_tbl msm8996_pcie_serdes_tbl[] = { >>>       QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x1c), >>>       QMP_PHY_INIT_CFG(QSERDES_COM_CLK_ENABLE1, 0x10), >>> @@ -601,6 +606,73 @@ enum qphy_reg_layout { >>>       QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG2, 0x60), >>>   }; >>>   +static const struct qmp_phy_init_tbl sdm845_ufsphy_serdes_tbl[] = { >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x0a), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x0f), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0xd5), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_CTRL, 0x00), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x04), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x05), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_INITVAL1, 0xff), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_INITVAL2, 0x00), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xda), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0xff), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0c), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE1, 0x98), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE1, 0x06), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE1, 0x16), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE1, 0x36), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE1, 0x3f), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE1, 0x00), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE1, 0xc1), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE1, 0x00), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE1, 0x32), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE1, 0x0f), >>> + >>> +    /* Rate B */ >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x44), >>> +}; >>> + >>> +static const struct qmp_phy_init_tbl sdm845_ufsphy_tx_tbl[] = { >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06), >>> +}; >>> + >>> +static const struct qmp_phy_init_tbl sdm845_ufsphy_rx_tbl[] = { >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_LVL, 0x24), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x0f), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x1e), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_FO_GAIN, 0x0b), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_TERM_BW, 0x5b), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x06), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1d), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SVS_SO_GAIN_HALF, 0x04), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SVS_SO_GAIN_QUARTER, 0x04), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SVS_SO_GAIN, 0x04), >>> + QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x81), >>> +    QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x80), >>> +}; >>> + >>> +static const struct qmp_phy_init_tbl sdm845_ufsphy_pcs_tbl[] = { >>> +    QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_DOWN_CONTROL, 0x01), >>> +    QMP_PHY_INIT_CFG(QPHY_V3_PCS_MULTI_LANE_CTRL1, 0x02), >>> +}; >>>     /* struct qmp_phy_cfg - per-PHY initialization config */ >>>   struct qmp_phy_cfg { >>> @@ -652,6 +724,9 @@ struct qmp_phy_cfg { >>>       /* Register offset of secondary tx/rx lanes for USB DP combo >>> PHY */ >>>       unsigned int tx_b_lane_offset; >>>       unsigned int rx_b_lane_offset; >>> + >>> +    /* true, if PCS block has no separate SW_RESET register */ >>> +    bool skip_sw_rst; >>>   }; >>>     /** >>> @@ -748,6 +823,10 @@ static inline void qphy_clrbits(void __iomem >>> *base, u32 offset, u32 val) >>>       "aux", "cfg_ahb", "ref", "com_aux", >>>   }; >>>   +static const char * const sdm845_ufs_phy_clk_l[] = { >>> +    "ref", >> >> did you miss adding 'ref_aux' clock here as in the v2 version? >> Rest looks good. After this change, you can add my reviewed-by >> Reviewed-by: Vivek Gautam >> >> Thanks >> Vivek > > Thank you Vivek. I removed 'ref_aux' as it was from the old UFS PHY > driver. > And I have tested the new patch on MTP845 V2, it worked fine. Do you have > any concerns about it? > I see in the downstream there's a ref_aux clock, so can you check from the phy's hardware docs if this is required for phy's functionality. Working on the MTP is one thing as some of the clocks may be kept enabled by the bootloader too sometimes. Thanks Vivek > Thanks > Can [snip]