On Mon, Oct 30, 2017 at 07:27:18PM +0530, 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 <mmaddireddy@xxxxxxxxxx> > --- > V3: > * no change in this patch > V2: > * no change in this patch > > 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 4562b0c113a8..c264037112cb 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) > > #define AFI_FPCI_ERROR_MASKS 0xb0 > > @@ -1059,9 +1060,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); I think this is cleaner (and results in a smaller diff) if you simply put this on a new line: value |= AFI_CONFIGURATION_CLKEN_OVERRIDE; Thierry
Attachment:
signature.asc
Description: PGP signature