Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762864AbdDSMH4 (ORCPT ); Wed, 19 Apr 2017 08:07:56 -0400 Received: from sym2.noone.org ([178.63.92.236]:48594 "EHLO sym2.noone.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1762841AbdDSMHx (ORCPT ); Wed, 19 Apr 2017 08:07:53 -0400 Date: Wed, 19 Apr 2017 14:07:49 +0200 From: Tobias Klauser To: matthew.gerlach@linux.intel.com Cc: kbuild test robot , kbuild-all@01.org, Alan Tull , Moritz Fischer , linux-fpga@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] fpga: allow to compile-test Altera FPGA bridge drivers Message-ID: <20170419120749.GB10395@distanz.ch> References: <201704121352.3vqxa89x%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 11417 Lines: 201 Hi Matthew Thanks for the detailed analysis! On 2017-04-18 at 17:27:15 +0200, matthew.gerlach@linux.intel.com wrote: [...] > >[auto build test WARNING on linus/master] > >[also build test WARNING on v4.11-rc6 next-20170411] > >[if your patch is applied to the wrong git tree, please drop us a note to help improve the system] > > > >url: https://github.com/0day-ci/linux/commits/Tobias-Klauser/fpga-allow-to-compile-test-Altera-FPGA-bridge-drivers/20170411-181401 > >config: m32r-allmodconfig (attached as .config) > >compiler: m32r-linux-gcc (GCC) 6.2.0 > >reproduce: > > wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > > chmod +x ~/bin/make.cross > > # save the attached .config to linux build tree > > make.cross ARCH=m32r > > > >All warnings (new ones prefixed by >>): > > > > In file included from include/linux/printk.h:329:0, > > from include/linux/kernel.h:13, > > from include/linux/delay.h:21, > > from drivers/fpga/altera-freeze-bridge.c:18: > > drivers/fpga/altera-freeze-bridge.c: In function 'altera_freeze_br_do_freeze': > >>>drivers/fpga/altera-freeze-bridge.c:107:15: warning: format '%d' expects argument of type 'int', but argument 6 has type 'long unsigned int' [-Wformat=] > > dev_dbg(dev, "%s %d %d\n", __func__, status, readl(csr_ctrl_addr)); > > ^ > > The line above compiles cleanly for x86 and 32-bit ARM. > Interestingly, the variable, status, is declared locally as an u32 > and is assigned by a > call to readl(), and there is no warning. On x86 and 32-bit arm, > readl(), is defined as returning u32, but on this m32r processor, > readl() returns unsigned long, thus the warning. > > A possilbe fix to this warning is to declare another local u32, ctrl, and > assign a value with a call to readl(). In other words, mimic what > is done with the variable, status. While this would get rid of the > warning, I can't help but think there is either a compiler problem > or a problem with m32r. I'd say this is a problem with how readl() is declared on m32r. On almost all architectures readl() returns a u32 (which seems to be unsigned int on all architectures). Judging from a quick m32r allmodconfig build, it seems the warning occurs at quite a few places in the kernel already and a quick Google search also turns up quite some patches, where the same warning occured [1], [2], [3]. [1] https://www.spinics.net/lists/linux-ide/msg53956.html [2] https://lists.01.org/pipermail/kbuild-all/2016-September/025251.html [3] https://www.spinics.net/lists/linux-bluetooth/msg70076.html IMO the proper fix would probably be to fix the readl() implementation on m32r. > > > include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg' > > __dynamic_dev_dbg(&descriptor, dev, fmt, \ > > ^~~ > >>>drivers/fpga/altera-freeze-bridge.c:107:2: note: in expansion of macro 'dev_dbg' > > dev_dbg(dev, "%s %d %d\n", __func__, status, readl(csr_ctrl_addr)); > > ^~~~~~~ > > drivers/fpga/altera-freeze-bridge.c: In function 'altera_freeze_br_do_unfreeze': > > drivers/fpga/altera-freeze-bridge.c:144:15: warning: format '%d' expects argument of type 'int', but argument 6 has type 'long unsigned int' [-Wformat=] > > dev_dbg(dev, "%s %d %d\n", __func__, status, readl(csr_ctrl_addr)); > > ^ > > include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg' > > __dynamic_dev_dbg(&descriptor, dev, fmt, \ > > ^~~ > > drivers/fpga/altera-freeze-bridge.c:144:2: note: in expansion of macro 'dev_dbg' > > dev_dbg(dev, "%s %d %d\n", __func__, status, readl(csr_ctrl_addr)); > > ^~~~~~~ > > drivers/fpga/altera-freeze-bridge.c:162:15: warning: format '%d' expects argument of type 'int', but argument 6 has type 'long unsigned int' [-Wformat=] > > dev_dbg(dev, "%s %d %d\n", __func__, status, readl(csr_ctrl_addr)); > > ^ > > include/linux/dynamic_debug.h:134:39: note: in definition of macro 'dynamic_dev_dbg' > > __dynamic_dev_dbg(&descriptor, dev, fmt, \ > > ^~~ > > drivers/fpga/altera-freeze-bridge.c:162:2: note: in expansion of macro 'dev_dbg' > > dev_dbg(dev, "%s %d %d\n", __func__, status, readl(csr_ctrl_addr)); > > ^~~~~~~ > > > >vim +107 drivers/fpga/altera-freeze-bridge.c > > > >ca24a648 Alan Tull 2016-11-01 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for > >ca24a648 Alan Tull 2016-11-01 13 * more details. > >ca24a648 Alan Tull 2016-11-01 14 * > >ca24a648 Alan Tull 2016-11-01 15 * You should have received a copy of the GNU General Public License along with > >ca24a648 Alan Tull 2016-11-01 16 * this program. If not, see . > >ca24a648 Alan Tull 2016-11-01 17 */ > >ca24a648 Alan Tull 2016-11-01 @18 #include > >ca24a648 Alan Tull 2016-11-01 19 #include > >ca24a648 Alan Tull 2016-11-01 20 #include > >ca24a648 Alan Tull 2016-11-01 21 #include > >ca24a648 Alan Tull 2016-11-01 22 #include > >ca24a648 Alan Tull 2016-11-01 23 #include > >ca24a648 Alan Tull 2016-11-01 24 > >ca24a648 Alan Tull 2016-11-01 25 #define FREEZE_CSR_STATUS_OFFSET 0 > >ca24a648 Alan Tull 2016-11-01 26 #define FREEZE_CSR_CTRL_OFFSET 4 > >ca24a648 Alan Tull 2016-11-01 27 #define FREEZE_CSR_ILLEGAL_REQ_OFFSET 8 > >ca24a648 Alan Tull 2016-11-01 28 #define FREEZE_CSR_REG_VERSION 12 > >ca24a648 Alan Tull 2016-11-01 29 > >ca24a648 Alan Tull 2016-11-01 30 #define FREEZE_CSR_SUPPORTED_VERSION 2 > >ca24a648 Alan Tull 2016-11-01 31 > >ca24a648 Alan Tull 2016-11-01 32 #define FREEZE_CSR_STATUS_FREEZE_REQ_DONE BIT(0) > >ca24a648 Alan Tull 2016-11-01 33 #define FREEZE_CSR_STATUS_UNFREEZE_REQ_DONE BIT(1) > >ca24a648 Alan Tull 2016-11-01 34 > >ca24a648 Alan Tull 2016-11-01 35 #define FREEZE_CSR_CTRL_FREEZE_REQ BIT(0) > >ca24a648 Alan Tull 2016-11-01 36 #define FREEZE_CSR_CTRL_RESET_REQ BIT(1) > >ca24a648 Alan Tull 2016-11-01 37 #define FREEZE_CSR_CTRL_UNFREEZE_REQ BIT(2) > >ca24a648 Alan Tull 2016-11-01 38 > >ca24a648 Alan Tull 2016-11-01 39 #define FREEZE_BRIDGE_NAME "freeze" > >ca24a648 Alan Tull 2016-11-01 40 > >ca24a648 Alan Tull 2016-11-01 41 struct altera_freeze_br_data { > >ca24a648 Alan Tull 2016-11-01 42 struct device *dev; > >ca24a648 Alan Tull 2016-11-01 43 void __iomem *base_addr; > >ca24a648 Alan Tull 2016-11-01 44 bool enable; > >ca24a648 Alan Tull 2016-11-01 45 }; > >ca24a648 Alan Tull 2016-11-01 46 > >ca24a648 Alan Tull 2016-11-01 47 /* > >ca24a648 Alan Tull 2016-11-01 48 * Poll status until status bit is set or we have a timeout. > >ca24a648 Alan Tull 2016-11-01 49 */ > >ca24a648 Alan Tull 2016-11-01 50 static int altera_freeze_br_req_ack(struct altera_freeze_br_data *priv, > >ca24a648 Alan Tull 2016-11-01 51 u32 timeout, u32 req_ack) > >ca24a648 Alan Tull 2016-11-01 52 { > >ca24a648 Alan Tull 2016-11-01 53 struct device *dev = priv->dev; > >ca24a648 Alan Tull 2016-11-01 54 void __iomem *csr_illegal_req_addr = priv->base_addr + > >ca24a648 Alan Tull 2016-11-01 55 FREEZE_CSR_ILLEGAL_REQ_OFFSET; > >ca24a648 Alan Tull 2016-11-01 56 u32 status, illegal, ctrl; > >ca24a648 Alan Tull 2016-11-01 57 int ret = -ETIMEDOUT; > >ca24a648 Alan Tull 2016-11-01 58 > >ca24a648 Alan Tull 2016-11-01 59 do { > >ca24a648 Alan Tull 2016-11-01 60 illegal = readl(csr_illegal_req_addr); > >ca24a648 Alan Tull 2016-11-01 61 if (illegal) { > >ca24a648 Alan Tull 2016-11-01 62 dev_err(dev, "illegal request detected 0x%x", illegal); > >ca24a648 Alan Tull 2016-11-01 63 > >ca24a648 Alan Tull 2016-11-01 64 writel(1, csr_illegal_req_addr); > >ca24a648 Alan Tull 2016-11-01 65 > >ca24a648 Alan Tull 2016-11-01 66 illegal = readl(csr_illegal_req_addr); > >ca24a648 Alan Tull 2016-11-01 67 if (illegal) > >ca24a648 Alan Tull 2016-11-01 68 dev_err(dev, "illegal request not cleared 0x%x", > >ca24a648 Alan Tull 2016-11-01 69 illegal); > >ca24a648 Alan Tull 2016-11-01 70 > >ca24a648 Alan Tull 2016-11-01 71 ret = -EINVAL; > >ca24a648 Alan Tull 2016-11-01 72 break; > >ca24a648 Alan Tull 2016-11-01 73 } > >ca24a648 Alan Tull 2016-11-01 74 > >ca24a648 Alan Tull 2016-11-01 75 status = readl(priv->base_addr + FREEZE_CSR_STATUS_OFFSET); > >ca24a648 Alan Tull 2016-11-01 76 dev_dbg(dev, "%s %x %x\n", __func__, status, req_ack); > >ca24a648 Alan Tull 2016-11-01 77 status &= req_ack; > >ca24a648 Alan Tull 2016-11-01 78 if (status) { > >ca24a648 Alan Tull 2016-11-01 79 ctrl = readl(priv->base_addr + FREEZE_CSR_CTRL_OFFSET); > >ca24a648 Alan Tull 2016-11-01 80 dev_dbg(dev, "%s request %x acknowledged %x %x\n", > >ca24a648 Alan Tull 2016-11-01 81 __func__, req_ack, status, ctrl); > >ca24a648 Alan Tull 2016-11-01 82 ret = 0; > >ca24a648 Alan Tull 2016-11-01 83 break; > >ca24a648 Alan Tull 2016-11-01 84 } > >ca24a648 Alan Tull 2016-11-01 85 > >ca24a648 Alan Tull 2016-11-01 86 udelay(1); > >ca24a648 Alan Tull 2016-11-01 87 } while (timeout--); > >ca24a648 Alan Tull 2016-11-01 88 > >ca24a648 Alan Tull 2016-11-01 89 if (ret == -ETIMEDOUT) > >ca24a648 Alan Tull 2016-11-01 90 dev_err(dev, "%s timeout waiting for 0x%x\n", > >ca24a648 Alan Tull 2016-11-01 91 __func__, req_ack); > >ca24a648 Alan Tull 2016-11-01 92 > >ca24a648 Alan Tull 2016-11-01 93 return ret; > >ca24a648 Alan Tull 2016-11-01 94 } > >ca24a648 Alan Tull 2016-11-01 95 > >ca24a648 Alan Tull 2016-11-01 96 static int altera_freeze_br_do_freeze(struct altera_freeze_br_data *priv, > >ca24a648 Alan Tull 2016-11-01 97 u32 timeout) > >ca24a648 Alan Tull 2016-11-01 98 { > >ca24a648 Alan Tull 2016-11-01 99 struct device *dev = priv->dev; > >ca24a648 Alan Tull 2016-11-01 100 void __iomem *csr_ctrl_addr = priv->base_addr + > >ca24a648 Alan Tull 2016-11-01 101 FREEZE_CSR_CTRL_OFFSET; > >ca24a648 Alan Tull 2016-11-01 102 u32 status; > >ca24a648 Alan Tull 2016-11-01 103 int ret; > >ca24a648 Alan Tull 2016-11-01 104 > >ca24a648 Alan Tull 2016-11-01 105 status = readl(priv->base_addr + FREEZE_CSR_STATUS_OFFSET); > >ca24a648 Alan Tull 2016-11-01 106 > >ca24a648 Alan Tull 2016-11-01 @107 dev_dbg(dev, "%s %d %d\n", __func__, status, readl(csr_ctrl_addr)); > >ca24a648 Alan Tull 2016-11-01 108 > >ca24a648 Alan Tull 2016-11-01 109 if (status & FREEZE_CSR_STATUS_FREEZE_REQ_DONE) { > >ca24a648 Alan Tull 2016-11-01 110 dev_dbg(dev, "%s bridge already disabled %d\n", > > > >:::::: The code at line 107 was first introduced by commit > >:::::: ca24a648f535a02b4163ca4f4d2e51869f155a3a fpga: add altera freeze bridge support > > > >:::::: TO: Alan Tull > >:::::: CC: Greg Kroah-Hartman > > > >--- > >0-DAY kernel test infrastructure Open Source Technology Center > >https://lists.01.org/pipermail/kbuild-all Intel Corporation > > >