Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp195125ybl; Tue, 7 Jan 2020 04:41:31 -0800 (PST) X-Google-Smtp-Source: APXvYqzSYfz7UfOWFE9tupGfR36wsSDRQajALYuNT9QWxb42BZHmWDvpIazND73UUGeyFr8R017O X-Received: by 2002:a05:6830:451:: with SMTP id d17mr116399001otc.53.1578400891511; Tue, 07 Jan 2020 04:41:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578400891; cv=none; d=google.com; s=arc-20160816; b=d95wtf/5iHmxC41h0NAvnqagWYiwR9zUyURQ2RO5+7HuKFFNzZrhSxoDYKwQWsA/eU P3V39Y7uiOl/A6x1XtUZ3Q6TxtZhvwhmZXBgzV24dHZ03DnUY4+vdYaqZB2mv46qblbi 1pd7u9xHJfLwcUS5NhpN/7m34z8F5pefkQgbWtz4h0IxY8FWYYYxzBQWA5LQW+BH9alc 6a2ui7qEowJ7JvoN8CC/fueuGLamfjvNcUW2jKq7sRNgVW4UC6v3M62FwsGoA86H/cwV +91T9Bz/7OFmWI6Pv1I9yBgpsLHmxbEuMcxcvPrF2T+XjEf1mKdpsbWgJOQSl2I0aOB+ OEZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:content-transfer-encoding :date:message-id:mime-version:references:in-reply-to:subject:cc:to :from; bh=fDe8QF6Qd+pzpZ7Hq8X+ohanu9osoehQ71lHHEy7IBY=; b=k/IVTU+Ea/f3p4Eq8sMoAcglYx5L0dFZrJw6kYqD/wGsOR+JVTAdMlN94DpXoWUEn7 WERVtbfL0oIgO5SMrwVN9CMs5NpYtL8gVhm6MlAfKPwKrFditI97uxzDq4flyTIGWWUI Q2ZOjgSFt5JVRW7N2inzqlL6P+cnuppeBtSamVhcW07DoJkNvLuYY7ZqpxfWUvimcRjw ooMN/Utt2FFxWTNCoB+SNQIepzvprz8bMf1ArosAw2pMSf8ecxXbKz3SR8JikCpduj9R 8XP/5ynER59T4uV5jxZa/UiWGvd+RVqgrcj4kA/I5ipVzZj6gIdcElLf96L7473RhxCX UTZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b="KH/8cGBd"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 11si35091622otu.301.2020.01.07.04.41.17; Tue, 07 Jan 2020 04:41:31 -0800 (PST) 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; dkim=pass header.i=@nvidia.com header.s=n1 header.b="KH/8cGBd"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728176AbgAGMjI (ORCPT + 99 others); Tue, 7 Jan 2020 07:39:08 -0500 Received: from hqnvemgate25.nvidia.com ([216.228.121.64]:11715 "EHLO hqnvemgate25.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727972AbgAGMjH (ORCPT ); Tue, 7 Jan 2020 07:39:07 -0500 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Tue, 07 Jan 2020 04:38:49 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Tue, 07 Jan 2020 04:39:06 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Tue, 07 Jan 2020 04:39:06 -0800 Received: from HQMAIL105.nvidia.com (172.20.187.12) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 7 Jan 2020 12:39:06 +0000 Received: from [192.168.22.23] (10.124.1.5) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Tue, 7 Jan 2020 12:39:04 +0000 From: Thierry Reding To: Dmitry Osipenko CC: Thierry Reding , Jonathan Hunter , Laxman Dewangan , "Mikko Perttunen" , Wolfram Sang , , , Subject: Re: [PATCH v3 4/9] i2c: tegra: Support atomic transfers In-Reply-To: <20200106010423.5890-5-digetx@gmail.com> References: <20200106010423.5890-5-digetx@gmail.com> X-NVConfidentiality: public MIME-Version: 1.0 Message-ID: Date: Tue, 7 Jan 2020 12:39:04 +0000 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1578400729; bh=fDe8QF6Qd+pzpZ7Hq8X+ohanu9osoehQ71lHHEy7IBY=; h=X-PGP-Universal:From:To:CC:Subject:In-Reply-To:References: X-NVConfidentiality:MIME-Version:Message-ID:Date:Content-Type: Content-Transfer-Encoding; b=KH/8cGBdfXfaP+sQk1gX0er1A+4A+GfsXaYU2BjpIgE22SssZq1cVrtiey04eQj00 vXbaU0qJLharsnA0MbeqpAAQn8t/pHAG1FBTgS9QDlYzVVYgS8jouR2wUxXyNOdPik GSQXc57vIouHOo8T6CTmn1HY6gqCV5OvzD7iuorP3wKB6SUfjKg9wtzgXCeAOO0QTy 6fkRrQays/x8xnESaFkxb0hr3qbnEdMo1GIMTKk0oD+dGOcglVFA1hOlkWXmz5t8A6 qgWEjW5EnjEz/slfjxeqZrfSrTnoKu6lsz+2R3BVjgipWv3aLycX06wspmboe5W+dD 3jPbaLoGd4iGQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 06 Jan 2020 04:04:18 +0300, Dmitry Osipenko wrote: > System shutdown may happen with interrupts being disabled and in this case > I2C core rejects transfers if atomic transfer isn't supported by driver. > > There were several occurrences where I found my Nexus 7 completely > discharged despite of being turned off and then one day I spotted this in > the log: > > reboot: Power down > ------------[ cut here ]------------ > WARNING: CPU: 0 PID: 1 at drivers/i2c/i2c-core.h:40 i2c_transfer+0x95/0x9c > No atomic I2C transfer handler for 'i2c-1' > Modules linked in: tegra30_devfreq > CPU: 0 PID: 1 Comm: systemd-shutdow Not tainted 5.4.0-next-20191202-00120-gf7ecd80fb803-dirty #3195 > Hardware name: NVIDIA Tegra SoC (Flattened Device Tree) > [] (unwind_backtrace) from [] (show_stack+0x11/0x14) > [] (show_stack) from [] (dump_stack+0x85/0x94) > [] (dump_stack) from [] (__warn+0xc1/0xc4) > [] (__warn) from [] (warn_slowpath_fmt+0x61/0x78) > [] (warn_slowpath_fmt) from [] (i2c_transfer+0x95/0x9c) > [] (i2c_transfer) from [] (regmap_i2c_read+0x4d/0x6c) > [] (regmap_i2c_read) from [] (_regmap_raw_read+0x99/0x1cc) > [] (_regmap_raw_read) from [] (_regmap_bus_read+0x23/0x38) > [] (_regmap_bus_read) from [] (_regmap_read+0x3d/0xfc) > [] (_regmap_read) from [] (_regmap_update_bits+0x87/0xc4) > [] (_regmap_update_bits) from [] (regmap_update_bits_base+0x39/0x50) > [] (regmap_update_bits_base) from [] (max77620_pm_power_off+0x29/0x2c) > [] (max77620_pm_power_off) from [] (__do_sys_reboot+0xe9/0x170) > [] (__do_sys_reboot) from [] (ret_fast_syscall+0x1/0x28) > Exception stack(0xde907fa8 to 0xde907ff0) > 7fa0: 00000000 00000000 fee1dead 28121969 4321fedc 00000000 > 7fc0: 00000000 00000000 00000000 00000058 00000000 00000000 00000000 00000000 > 7fe0: 0045adf0 bed9abb8 004444a0 b6c666d0 > ---[ end trace bdd18f87595b1a5e ]--- > > The atomic transferring is implemented by enforcing PIO mode for the > transfer and by polling interrupt status until transfer is completed or > failed. > > Now system shuts down properly every time. > > Signed-off-by: Dmitry Osipenko > --- > drivers/i2c/busses/i2c-tegra.c | 84 ++++++++++++++++++++++++++++------ > 1 file changed, 69 insertions(+), 15 deletions(-) Tested-by: Thierry Reding