From patchwork Thu Jul 9 08:28:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chris Ruehl X-Patchwork-Id: 6754161 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5D431C05AC for ; Thu, 9 Jul 2015 08:30:51 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 5124020607 for ; Thu, 9 Jul 2015 08:30:50 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A127C205FC for ; Thu, 9 Jul 2015 08:30:48 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZD7CQ-0002Y7-5P; Thu, 09 Jul 2015 08:28:54 +0000 Received: from mail.fpasia.hk ([202.130.89.98] helo=fpa01n0.fpasia.hk) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1ZD7CL-0002A3-Ty for linux-arm-kernel@lists.infradead.org; Thu, 09 Jul 2015 08:28:51 +0000 Received: from localhost (localhost [127.0.0.1]) by fpa01n0.fpasia.hk (Postfix) with ESMTP id 65270CFA1FB; Thu, 9 Jul 2015 16:28:13 +0800 (HKT) X-Virus-Scanned: FPASIA amavisd-new at fpasia.hk Received: from fpa01n0.fpasia.hk ([127.0.0.1]) by localhost (fpa01n0.office.fpa.com.hk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tRz8x50ca2vf; Thu, 9 Jul 2015 16:28:11 +0800 (HKT) Received: from s01.gtsys.com.hk (gtsnode.office.fpasia.hk [10.10.37.40]) by fpa01n0.fpasia.hk (Postfix) with ESMTP id 88180CFA1F1; Thu, 9 Jul 2015 16:28:11 +0800 (HKT) Received: from [10.128.2.32] (pcd253202.netvigator.com [203.218.43.202]) by s01.gtsys.com.hk (Postfix) with ESMTPSA id 7F923C01F98; Thu, 9 Jul 2015 16:28:11 +0800 (HKT) Message-ID: <559E3098.9070609@gtsys.com.hk> Date: Thu, 09 Jul 2015 16:28:08 +0800 From: Chris Ruehl User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.7.0 MIME-Version: 1.0 To: =?windows-1252?Q?Uwe_Kleine-K=F6nig?= , Markus Pargmann Subject: Re: [PATCH] pinctrl: imx1-core: Fix debug output pin array index References: <1436364966-19778-1-git-send-email-mpa@pengutronix.de> <20150709071252.GF1426@pengutronix.de> In-Reply-To: <20150709071252.GF1426@pengutronix.de> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150709_012850_321864_36816A0D X-CRM114-Status: GOOD ( 27.64 ) X-Spam-Score: -1.9 (-) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arm-kernel@lists.infradead.org, Linus Walleij , Shawn Guo , kernel@pengutronix.de, stable@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Uwe, On Thursday, July 09, 2015 03:12 PM, Uwe Kleine-König wrote: > Hello Markus, > > Cc += Chris Ruehl > > On Wed, Jul 08, 2015 at 04:16:06PM +0200, Markus Pargmann wrote: >> The pins do not have a 1:1 mapping from index to pin_id. Unfortunately >> the debug output assumes exactly that. >> >> The first driver using imx1-core was imx27, which had exactly this 1:1 >> mapping. It was accidently removed when removing all unused pads which >> were listed: >> 607af165c047 (pinctrl: i.MX27: Remove nonexistent pad definitions) >> >> The patch fixes this issue by printing the pin_id directly and not the >> pin name. > Knowing a bit about the imx pinctrl drivers I failed to understand what > you wrote here. Probably because I first though that "1:1 mapping" is a > hardware property. What about: > > Subject: pinctrl: imx1-core: Fix debug output in .pin_config_set callback > > imx1_pinconf_set assumes that the array of pins in struct > imx1_pinctrl_soc_info can be indexed by pin id to get the > pinctrl_pin_desc for a pin. This used to be correct up to commit > 607af165c047 ("pinctrl: i.MX27: Remove nonexistent pad definitions") > which removed some entries from the array and so made it wrong to access > the array by pin id. > > Implement the easiest fix by not resolving the pin id to a name but > printing the id instead. > > Fixes: 607af165c047 ("pinctrl: i.MX27: Remove nonexistent pad definitions") > Cc: stable@vger.kernel.org > Reported-by: Chris Ruehl > Signed-off-by: Markus Pargmann > > Having the pad name in the output is nice, is it worth to search for the > right pinctrl_pin_desc in the array? The array is still sorted, so a > binary search would do, maybe a function for this already exists? > > How did Chris notice the error? Just a bogus output, or did it crash the > kernel? That would be worth to note in the commit log, too. > > Otherwise the change looks fine. > > Best regards > Uwe I had a crash on a array overrun. I'd applied a patch to the linux-usb (which was spit out by the maintainer perl script) chris@wheezyvm:~/kernel.d/linux-next$ cat 0001-Pinctrl-imx1-fix-wrong-pin-name-resolving.patch From 50d56e5f626b2ea86211818cf487514c96f60487 Mon Sep 17 00:00:00 2001 From: Chris Ruehl Date: Sat, 23 May 2015 15:02:44 +0800 Subject: [PATCH] Pinctrl: imx1: fix wrong pin-name resolving Bug in function imx1_pinconf_set() cause crash when princtrl debug is enabled and the pin_id becomes larger then the info->pins[] contains. imx27-pinctrl 10015000.iomuxc: request pin 134 (MX27_PAD_UART2_TXD) for 1000b000.serial imx27-pinctrl 10015000.iomuxc: request pin 135 (MX27_PAD_UART2_RXD) for 1000b000.serial imx27-pinctrl 10015000.iomuxc: request pin 131 (MX27_PAD_UART2_CTS) for 1000b000.serial imx27-pinctrl 10015000.iomuxc: request pin 132 (MX27_PAD_UART2_RTS) for 1000b000.serial imx27-pinctrl 10015000.iomuxc: enable function uart group uart2-1 imx27-pinctrl 10015000.iomuxc: imx1_pmx_set, pin 0x86, function 0, gpio 0, direction 1, oconf 0, iconfa 0, iconfb 0 imx27-pinctrl 10015000.iomuxc: imx1_pmx_set, pin 0x87, function 0, gpio 0, direction 0, oconf 0, iconfa 0, iconfb 0 imx27-pinctrl 10015000.iomuxc: imx1_pmx_set, pin 0x83, function 0, gpio 0, direction 1, oconf 0, iconfa 0, iconfb 0 imx27-pinctrl 10015000.iomuxc: imx1_pmx_set, pin 0x84, function 0, gpio 0, direction 0, oconf 0, iconfa 0, iconfb 0 imx27-pinctrl 10015000.iomuxc: num_configs=1 PinID=134 imx27-pinctrl 10015000.iomuxc: pinconf set pullup pin MX27_PAD_UART1_RTS imx27-pinctrl 10015000.iomuxc: num_configs=1 PinID=135 imx27-pinctrl 10015000.iomuxc: pinconf set pullup pin MX27_PAD_RTCK imx27-pinctrl 10015000.iomuxc: num_configs=1 PinID=131 imx27-pinctrl 10015000.iomuxc: pinconf set pullup pin MX27_PAD_UART1_TXD imx27-pinctrl 10015000.iomuxc: num_configs=1 PinID=132 imx27-pinctrl 10015000.iomuxc: pinconf set pullup pin MX27_PAD_UART1_RXD ... imx27-pinctrl 10015000.iomuxc: write: register 0xf4415508 offset 4 value 0x3 imx27-pinctrl 10015000.iomuxc: write: register 0xf4415510 offset 4 value 0x0 imx27-pinctrl 10015000.iomuxc: write: register 0xf4415518 offset 4 value 0x0 imx27-pinctrl 10015000.iomuxc: imx1_pmx_set, pin 0xb5, function 0, gpio 0, direction 1, oconf 0, iconfa 0, iconfb 0 imx27-pinctrl 10015000.iomuxc: num_configs=1 PinID=171 Unable to handle kernel paging request at virtual address 6c61765f pgd = c0004000 6c61765f] *pgd=00000000 Internal error: Oops: 5 [#1] ARM Modules linked in: CPU: 0 PID: 1 Comm: swapper Not tainted 4.1.0-rc4-next-20150522-dirty #8 Hardware name: GTSYS i.MX27GTSIR (Device Tree Support) task: ce832000 ti: ce848000 task.ti: ce848000 PC is at strnlen+0x28/0x3c LR is at string.isra.4+0x34/0xcc pc : [] lr : [] psr: 20000093 sp : ce849a88 ip : ce849a98 fp : ce849a94 r10: c05d7e3a r9 : c05d81e4 r8 : 00000000 r7 : 6c61765f r6 : c05d81e4 r5 : ffffffff r4 : c05d7e3a r3 : 6c61765f r2 : 6c61765f r1 : 6c61765e r0 : 6c61765f Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel Signed-off-by: Chris Ruehl --- drivers/pinctrl/freescale/pinctrl-imx1-core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/pinctrl/freescale/pinctrl-imx1-core.c b/drivers/pinctrl/freescale/pinctrl-imx1-core.c index 5ac59fb..8408bd8 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx1-core.c +++ b/drivers/pinctrl/freescale/pinctrl-imx1-core.c @@ -403,14 +403,16 @@ static int imx1_pinconf_set(struct pinctrl_dev *pctldev, unsigned num_configs) { struct imx1_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); - const struct imx1_pinctrl_soc_info *info = ipctl->info; + struct pin_desc *desc; int i; + desc = pin_desc_get(pctldev, pin_id); + for (i = 0; i != num_configs; ++i) { imx1_write_bit(ipctl, pin_id, configs[i] & 0x01, MX1_PUEN); dev_dbg(ipctl->dev, "pinconf set pullup pin %s\n", - info->pins[pin_id].name); + desc->name); } return 0;