From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752672AbcHIQHc (ORCPT ); Tue, 9 Aug 2016 12:07:32 -0400 Received: from mga09.intel.com ([134.134.136.24]:6667 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752103AbcHIQHb (ORCPT ); Tue, 9 Aug 2016 12:07:31 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,495,1464678000"; d="scan'208";a="1011275000" Message-ID: <1470758841.4887.1.camel@linux.intel.com> Subject: Re: tty/serial/8250: use mctrl_gpio helpers - Causes problems on ACPI systems From: Andy Shevchenko To: Mika Westerberg , Yegor Yefremov , Peter Hurley Cc: Greg Kroah-Hartman , linux-kernel@vger.kernel.org, "Rafael J. Wysocki" Date: Tue, 09 Aug 2016 19:07:21 +0300 In-Reply-To: <20160809130229.GN1729@lahna.fi.intel.com> References: <20160809130229.GN1729@lahna.fi.intel.com> Organization: Intel Finland Oy Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.20.4-1+b1 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org +Peter On Tue, 2016-08-09 at 16:02 +0300, Mika Westerberg wrote: > Hi, > > I noticed that with v4.8-rc1 serial console of some of our Broxton > systems does not work properly anymore. I'm able to see output but > input > does not work. > > I bisected it down to commit 4ef03d328769eddbfeca1f1c958fdb181a69c341 > ("tty/serial/8250: use mctrl_gpio helpers"). Mika, thanks for the detailed analysis.  Yegor, consider this mail as a follow up to [1]. [1] http://www.spinics.net/lists/linux-serial/msg23071.html > > The reason why it fails is that in ACPI we do not have names for GPIOs > (except when _DSD is used) so we use the "idx" to index into _CRS GPIO > resources. Now mctrl_gpio_init_noauto() goes through a list of GPIOs > calling devm_gpiod_get_index_optional() passing "idx" of 0 for each. > The > UART device in Broxton has following (simplified) ACPI description: > >     Device (URT4) >     { >         ... >         Name (_CRS, ResourceTemplate () { >             GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, > IoRestrictionOutputOnly, >                     "\\_SB.GPO0", 0x00, ResourceConsumer) >             { >                 0x003A >             } >             GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, > IoRestrictionOutputOnly, >                     "\\_SB.GPO0", 0x00, ResourceConsumer) >             { >                 0x003D >             } >         }) > > In this case it finds the first GPIO (0x003A which happens to be RX > pin > for that UART), turns it into GPIO which then breaks input for the > UART > device. This also breaks systems with bluetooth connected to UART > (those > typically have some GPIOs in their _CRS). > > Any ideas how to fix this? > > We cannot just drop the _CRS index lookup fallback because that would > break many existing machines out there so maybe we can limit this to > only DT enabled machines. Or alternatively probe if the property first > exists before trying to acquire the GPIOs (using > device_property_present()). -- Andy Shevchenko Intel Finland Oy