From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752859AbdJSN0I (ORCPT ); Thu, 19 Oct 2017 09:26:08 -0400 Received: from smtp-out4.electric.net ([192.162.216.185]:64658 "EHLO smtp-out4.electric.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751501AbdJSN0G (ORCPT ); Thu, 19 Oct 2017 09:26:06 -0400 From: David Laight To: "'Faiz Abbas'" , "kishon@ti.com" CC: "bhelgaas@google.com" , "linux-omap@vger.kernel.org" , "linux-pci@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: RE: [PATCH v2] dwc: dra7xx: Print link state to console for debug Thread-Topic: [PATCH v2] dwc: dra7xx: Print link state to console for debug Thread-Index: AQHTSNuGTUP8a2zRIUGaj97h04/Q4KLrJrYA Date: Thu, 19 Oct 2017 13:26:06 +0000 Message-ID: <063D6719AE5E284EB5DD2968C1650D6DD009C62B@AcuExch.aculab.com> References: <1508417009-30869-1-git-send-email-faiz_abbas@ti.com> <9378c5c9-381d-4c40-3290-f7e3720792ba@ti.com> In-Reply-To: <9378c5c9-381d-4c40-3290-f7e3720792ba@ti.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.202.99.200] Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-Outbound-IP: 156.67.243.126 X-Env-From: David.Laight@ACULAB.COM X-Proto: esmtps X-Revdns: X-HELO: AcuExch.aculab.com X-TLS: TLSv1:AES128-SHA:128 X-Authenticated_ID: X-PolicySMART: 3396946, 3397078 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id v9JDQCb2014297 From: Faiz Abbas > Sent: 19 October 2017 14:09 > On Thursday 19 October 2017 06:13 PM, Faiz Abbas wrote: > > Enable support for printing the LTSSM link state for debugging PCI > > when link is down. > > > > Signed-off-by: Faiz Abbas > > --- > > v2: > > 1. Changed dev_err() to dev_dbg() > > 2. Changed static char array to static const char * const > > 3. format changes > > > > drivers/pci/dwc/pci-dra7xx.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 48 insertions(+) > > > > diff --git a/drivers/pci/dwc/pci-dra7xx.c b/drivers/pci/dwc/pci-dra7xx.c > > index 34427a6..0e70e77 100644 > > --- a/drivers/pci/dwc/pci-dra7xx.c > > +++ b/drivers/pci/dwc/pci-dra7xx.c > > @@ -98,6 +98,45 @@ struct dra7xx_pcie_of_data { > > > > #define to_dra7xx_pcie(x) dev_get_drvdata((x)->dev) > > > > +static const char * const state[] = { > > + "DETECT_QUIET", ... > > + "RCVRY_EQ3" > > +}; > > + > > static inline u32 dra7xx_pcie_readl(struct dra7xx_pcie *pcie, u32 offset) > > { > > return readl(pcie->base + offset); > > @@ -118,6 +157,15 @@ static int dra7xx_pcie_link_up(struct dw_pcie *pci) > > { > > struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci); > > u32 reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_PHY_CS); > > + u32 cmd_reg; > > + u32 ltssm_state; > > + > > + if (!(reg & LINK_UP)) { > > + cmd_reg = dra7xx_pcie_readl(dra7xx, > > + PCIECTRL_DRA7XX_CONF_DEVICE_CMD); > > + ltssm_state = (cmd_reg & GENMASK(7, 2)) >> 2; > > + dev_dbg(pci->dev, "Link state:%s\n", state[ltssm_state]); Hmmm... GENMASK leaves by hunting header files... Why not (cmd_reg >> 2) & 63 and explicitly define state[64] to guarantee that you never print anything worse than a NULL pointer. > > + } > > > > return !!(reg & LINK_UP); > > } > > > > I missed David's comment in v1. Will submit a new version. Please ignore. I've a 'neat' trick for generating strings that match constants. You can get the compiler to do all the work for you: (Assuming I've typed it correctly) #define LTSSM_DEFS(x) \ x(DETECT_QUIET) \ x(DETECT_ACT) \ (continue for all the names) Define an enum with the named constants: #define X(name) LTSSM_STATE_##name, enum (LTSSM_DEFS(X) LTSSM_STATE_SIZE=64); #undef X Array of strings: #define X(name) [LTSSM_STATE_##name] = #name static const char * const state_names[LTSSM_STATE_SIZE] = { LTSSM_DEFS(X) }; #undef X David