Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp4942981imm; Tue, 18 Sep 2018 01:34:09 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdb+QIHlGxZ8oxtpvWDfo/Ft9iK5HS4O4wiEv6pkbyeTzISIwaj7wgyGIIvb8yS6L/VPQOrF X-Received: by 2002:a17:902:8a97:: with SMTP id p23-v6mr28093622plo.21.1537259649681; Tue, 18 Sep 2018 01:34:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537259649; cv=none; d=google.com; s=arc-20160816; b=ARuVIeEj0eL7u3Y1QlRl2cdtkTO1p/YCOwnBzR8f+0ZsO1LGsWpacVjfdY+SkScd4Y ToTQNUc7pA+9mIJ67ih6+RuF+Dx6k0bdcUPO+6OX6OZjuZHOpwX8q+HWcj/7OhcJPNlQ +O2huqy0HIKZVGCANIYHsjtKPZ9KLxeGfmJN+VZSFvF1X4oQCfswdbYxt/VSjXI0jo7d TQcWNTrHa0FLOWYFIxIkT2TJlI392n5G3qpqVfWJI9Gbi4JDKaKM22qeEJw3EXnNBjdl 0yt7+2AnUqNTFOoXCn5h6b+1HeFTxRqtQ2VTZIWPtLCUq7Ihrg9pK1f7brOJIFWXgHJ+ FdXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:organization:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=vihZ6bz0xIZuTObtlr9v2tPTqUzbWy/OG8jfs9T7UtI=; b=mK8bRINpmq8wt3Q7qRxRpm48MMyC1VESRgN74KoyeZUfKVCy3lND/g6ovGzg3wlGPY f/gC4GE3SvvNNCzpXc/wa0Hbx4BRyt0XW64u40J/qh0hGyiRDQ+UFvlo7UEmdeHEnDG7 rjYwJtnkeSxzszqAQFsgdojACbsA6mBX4d19LNtnRMqVir2wPt9Q6Lgqhqj41XX9DF1+ 2AvvFOcaEA4kWk+G+6ShgGdYkzom/WusFu7pQ3TRlDwyaI05qDnOJpE5SZ/SsXejG1/G 5Cojvc2HWuMcEwn/Y63r3zjXXiV50shWp58VL2BmaFBMzD7oo5GGvsvTwgtQDXGiBSrN IKQg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p17-v6si18312535pgd.352.2018.09.18.01.33.55; Tue, 18 Sep 2018 01:34:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729486AbeIRODv (ORCPT + 99 others); Tue, 18 Sep 2018 10:03:51 -0400 Received: from mga02.intel.com ([134.134.136.20]:21852 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728842AbeIRODu (ORCPT ); Tue, 18 Sep 2018 10:03:50 -0400 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Sep 2018 01:32:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,389,1531810800"; d="scan'208";a="233841417" Received: from lahna.fi.intel.com (HELO lahna) ([10.237.72.157]) by orsmga004.jf.intel.com with SMTP; 18 Sep 2018 01:31:58 -0700 Received: by lahna (sSMTP sendmail emulation); Tue, 18 Sep 2018 11:31:57 +0300 Date: Tue, 18 Sep 2018 11:31:57 +0300 From: Mika Westerberg To: Rajat Jain Cc: Andy Shevchenko , Linus Walleij , linux-gpio@vger.kernel.org, Linux Kernel Mailing List , casey.g.bowman@intel.com, "Atwood, Matthew S" Subject: Re: pinctrl-icelake: driver writes to wrong offsets? Message-ID: <20180918083157.GC14465@lahna.fi.intel.com> References: <20180917081249.GM14465@lahna.fi.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Sep 17, 2018 at 11:16:41AM -0700, Rajat Jain wrote: > On Mon, Sep 17, 2018 at 1:13 AM Mika Westerberg > wrote: > > > > On Fri, Sep 14, 2018 at 05:18:34PM -0700, Rajat Jain wrote: > > > This is to report what I think is a problem in the pinctrl-icelake > > > driver. It seems that when trying to control GPIO pins GPP_A* and > > > GPIO_B*, the driver ends up writing to incorrect PADCFG registers. > > > I've reached this conclusion by putting debug prints in the driver, > > > although this can be seen by the following commands too. Please let me > > > know if something is wrong in my experiments. For example, when trying > > > to control GPP_B8/ISH_I2C1_SCL, the driver ends up writing to > > > GPP_A6/ESPI_RESETB registers. > > > > Hmm, when you add debug prints to the driver and you access GPIO 224 > > (GPP_B8/ISH_I2C1_SCL) from userspace you can see that the driver > > actually uses PADCFG registers of GPP_A6/ESPI_RESETB? So that it is not > > just a side-effect of how the pins are wired on your board. > > Right, also I don't have to use put debug prints as it can be seen > from the following debug files. And it is not isolated to just this > pin. For instance, in this examples you can see that another pin 18 > (GPP_B10/I2C5_SCL) that I'm trying to write , the value actually gets > written to the PADCFG for (GPP_A8/I2S2_SFRM) i.e. pin42. So there is > clearly a pattern: > > static const struct pinctrl_pin_desc icllp_pins[] = { > ... > /* GPP_B */ > .. > PINCTRL_PIN(18, "I2C5_SCL"), <----- GPP_B10/I2C5_SCL = Pin 18 > .... > localhost /sys/class/gpio # cat > /sys/kernel/debug/pinctrl/INT3455\:00/gpio-ranges > GPIO ranges handled: > 0: INT3455:00 GPIOS [184 - 191] PINS [0 - 7] > 32: INT3455:00 GPIOS [216 - 241] PINS [8 - 33] <---- pin 18 = gpio 226 > .... > > localhost /sys/class/gpio # cat > /sys/kernel/debug/pinctrl/INT3455\:00/pins | grep > "I2C5_SCL\|(I2S2_SFRM)" > pin 18 (I2C5_SCL) mode 1 0x44000702 0x0000002a 0x00000000 [ACPI] > pin 42 (I2S2_SFRM) mode 2 0x44000b00 0x00000040 0x00000100 [ACPI] > localhost /sys/class/gpio # > localhost /sys/class/gpio # echo 226 > export > localhost /sys/class/gpio # cat > /sys/kernel/debug/pinctrl/INT3455\:00/pins | grep > "I2C5_SCL\|(I2S2_SFRM)" > pin 18 (I2C5_SCL) GPIO 0x44000102 0x0000002a 0x00000000 [ACPI] > pin 42 (I2S2_SFRM) mode 2 0x44000b00 0x00000040 0x00000100 [ACPI] > localhost /sys/class/gpio # > localhost /sys/class/gpio # > localhost /sys/class/gpio # cat gpio226/value > 0 > localhost /sys/class/gpio # cat gpio226/direction > in > localhost /sys/class/gpio # echo out > gpio226/direction > localhost /sys/class/gpio # cat gpio226/direction > out > localhost /sys/class/gpio # cat > /sys/kernel/debug/pinctrl/INT3455\:00/pins | grep > "I2C5_SCL\|(I2S2_SFRM)" > pin 18 (I2C5_SCL) GPIO 0x44000200 0x0000002a 0x00000000 [ACPI] > pin 42 (I2S2_SFRM) mode 2 0x44000b00 0x00000040 0x00000100 [ACPI] > localhost /sys/class/gpio # > localhost /sys/class/gpio # > localhost /sys/class/gpio # cat gpio226/value > 0 > localhost /sys/class/gpio # echo 1 > gpio226/value > localhost /sys/class/gpio # cat gpio226/value > 0 > localhost /sys/class/gpio # cat > /sys/kernel/debug/pinctrl/INT3455\:00/pins | grep > "I2C5_SCL\|(I2S2_SFRM)" > pin 18 (I2C5_SCL) GPIO 0x44000200 0x0000002a 0x00000000 [ACPI] > pin 42 (I2S2_SFRM) mode 2 0x44000b01 0x00000040 0x00000100 [ACPI] > localhost /sys/class/gpio # > > As you can see in the above example, when I export the pins and change > the directions from "in" to "out" PADCFG get updated correctly for pin > 18, but when writing the value, it is the PADCFG for pin 42 that gets > updated which is incorrect. It looks like we are missing translation (call intel_gpio_to_pin()) in intel_gpio_set(), intel_gpio_get() and intel_gpio_get_direction(). IIRC gpiolib handles the translation but here it seems not. Strange. > So this looks like a driver issue to me. Please let me know if I need > to file a bug on bugzilla for this. I agree, definitely driver issue. Please file bugzilla about this (add me and Andy there as well) and we'll investigate. Thanks!