From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E5E8AC33C8C for ; Tue, 7 Jan 2020 12:39:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BB3732146E for ; Tue, 7 Jan 2020 12:39:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=nvidia.com header.i=@nvidia.com header.b="KH/8cGBd" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728179AbgAGMjJ (ORCPT ); Tue, 7 Jan 2020 07:39:09 -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