From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manikanta Maddireddy Subject: Re: [PATCH 07/12] PCI: tegra: Disable AFI dynamic clock gating Date: Mon, 30 Oct 2017 09:25:50 +0530 Message-ID: <7c478bcc-3ee0-51c1-0e5a-b0febc4dff8c@nvidia.com> References: <1509132569-9398-1-git-send-email-mmaddireddy@nvidia.com> <1509132569-9398-8-git-send-email-mmaddireddy@nvidia.com> <171c265a-c1f9-913c-54e5-02b325a7487c@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8BIT Return-path: In-Reply-To: <171c265a-c1f9-913c-54e5-02b325a7487c@nvidia.com> Content-Language: en-US Sender: linux-pci-owner@vger.kernel.org To: Vidya Sagar , thierry.reding@gmail.com, bhelgaas@google.com, jonathanh@nvidia.com Cc: linux-tegra@vger.kernel.org, linux-pci@vger.kernel.org, kthota@nvidia.com List-Id: linux-tegra@vger.kernel.org On 29-Oct-17 3:12 PM, Vidya Sagar wrote: > > > On Saturday 28 October 2017 12:59 AM, Manikanta Maddireddy wrote: >> When there are 32 outstanding writes from AFI to memory, the outstanding >> write counter overflows and indicates that there are "0" outstanding write >> transactions. This outstanding write counter is used to generate IDLE >> signal to dynamically gate the AFI clock. >> >> When memory controller is under heavy load, its possible that write >> completions will come back to AFI after long delay and AFI write counter >> overflows. AFI clock gets gated even when there are outstanding >> transactions towards memory controller resutling in system hang. >> >> Disable dynamic clock gating of AFI clock to avoid system hang. >> >> Signed-off-by: Manikanta Maddireddy >> --- >>   drivers/pci/host/pci-tegra.c | 10 ++++++---- >>   1 file changed, 6 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c >> index 27a8211c48b2..b8cac871712b 100644 >> --- a/drivers/pci/host/pci-tegra.c >> +++ b/drivers/pci/host/pci-tegra.c >> @@ -103,8 +103,9 @@ >>   #define AFI_MSI_EN_VEC6        0xa4 >>   #define AFI_MSI_EN_VEC7        0xa8 >>   -#define AFI_CONFIGURATION        0xac >> -#define  AFI_CONFIGURATION_EN_FPCI    (1 << 0) >> +#define AFI_CONFIGURATION            0xac >> +#define  AFI_CONFIGURATION_EN_FPCI        (1 << 0) >> +#define  AFI_CONFIGURATION_CLKEN_OVERRIDE    (1 << 31) > BIT macro is preferred here. Left shift is used everywhere, so to be inline with that I used same format >>     #define AFI_FPCI_ERROR_MASKS    0xb0 >>   @@ -1057,9 +1058,10 @@ static int tegra_pcie_enable_controller(struct tegra_pcie *pcie) >>           } >>       } >>   -    /* finally enable PCIe */ >> +    /* Disable AFI dynamic clock gating and enable PCIe */ >>       value = afi_readl(pcie, AFI_CONFIGURATION); >> -    value |= AFI_CONFIGURATION_EN_FPCI; >> +    value |= (AFI_CONFIGURATION_EN_FPCI | >> +            AFI_CONFIGURATION_CLKEN_OVERRIDE); >>       afi_writel(pcie, value, AFI_CONFIGURATION); >>         value = AFI_INTR_EN_INI_SLVERR | AFI_INTR_EN_INI_DECERR | >