Received: by 10.223.185.116 with SMTP id b49csp2627427wrg; Mon, 5 Mar 2018 06:14:59 -0800 (PST) X-Google-Smtp-Source: AG47ELuJSFT+uCNZtzishXNvgKDqpLL9jYkMSkYFDpPfUfp579boaAAN1Z5lDEJwsvXO69cV+Qwm X-Received: by 10.98.103.69 with SMTP id b66mr15635771pfc.114.1520259299490; Mon, 05 Mar 2018 06:14:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520259299; cv=none; d=google.com; s=arc-20160816; b=n/SJUfJuHJAJySejMTIh0DT98Lm4C/kxRoCjyO2Yxt14vVLu/mMBXazjjhgmlZriCJ y2ucx1GSN8k0ycHDhPh4DupDvXE/gtCaljRRX9vt6Mj2RCAzGJFy7r1+xpA1yFlHgVEv UZQSkTJA3FWcGxdz3yccsXgq/lcEqJrCbMQa1UFqkH2jQzOmZB4if21Bc1Po/Y8nSAIP qTjI+08jwsrPqNHRIco6TO5PiGiGm7pNjPGA8lh6gE6N+sjSI60m2Jop0UKDCYiytKXP I7liz6G9I0gd6NmLnnqKAwF7PiQvdAXuKaW7vWV8rumrWtR/eaVKgBbsQLJ8pVLT4j06 3+ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=hGX6C1tHztUreULTAWnynP9LgI0kBhCHr7Dj3fIVzUs=; b=N/lZDcYgt3VPBv7Edj1GAMOjqk5kJZ8xCAm19pVt5gofWYVr5VBFn1ZwSieoma0aKW okgCru9B5Rr/1v0bf9+QERFo2AqvN7Dz/8vmuoa77//XrWOYHHSC6RpxH2d9v98/gNsA X00m8ONEc3oIta0/6xWb5E54qlmqE3LD9bl1S/FUOS4TNtS6zH7ns97bFvoUyrrM7XX/ gEMTdaJe4kE/75s6vWXtUq8af5/ZtV35nKnAQDvgaZjhjdJWmMObkokmFjXUYIQ8KZKj nqHhkDyPGHBAdJGj5ILsPP8cINN6Eo/rtwxkzRMl5U8WyRo59RCFgxm89FyLP2ZiLhFx OxZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gyZ7ePxv; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b59-v6si9291939plc.309.2018.03.05.06.14.45; Mon, 05 Mar 2018 06:14:59 -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=@gmail.com header.s=20161025 header.b=gyZ7ePxv; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934695AbeCEMey (ORCPT + 99 others); Mon, 5 Mar 2018 07:34:54 -0500 Received: from mail-ot0-f179.google.com ([74.125.82.179]:36100 "EHLO mail-ot0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932864AbeCEMev (ORCPT ); Mon, 5 Mar 2018 07:34:51 -0500 Received: by mail-ot0-f179.google.com with SMTP id 108so14714501otv.3; Mon, 05 Mar 2018 04:34:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=hGX6C1tHztUreULTAWnynP9LgI0kBhCHr7Dj3fIVzUs=; b=gyZ7ePxvRrGRPCQn8hDa4GTg3ZoqvuLK8DrPGisQHWy0RRvE72dt0Ts6G7leh8dX4E qr9N2vo7BSEIc1NsezRqCSkEaNHBI73ONe2o+4CoOl/GLZ9bQdqtpYE9LAy9eXrFq9Ti 7VJaHUX2CmHiM7RNJe/V9yvvSxKZ4mWRvT7leESYHKlHZ8yFHQSszcv+GJxsP/DRls2v E8LWZk92CbhNSoIpnn5wlCHLkzwFe4ftOEXo2V8ISdTgKmLygTUq0RcuJf2w8n4Iulzm +uS8WJwyTQKtx/yeguV2dt06t2MDyE9oztOuNl6K2WeDBNd7te6/Ldx/iS9cPAgd0v0j nX1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=hGX6C1tHztUreULTAWnynP9LgI0kBhCHr7Dj3fIVzUs=; b=QsWlk7onBsbuhQU8fgS6+3Ndol42HeYhC715OD8tf5y5GCGoBXEXxjvB0MVYhQqW4g nWDy1D2hOZhfpw4SA6qRv5Qm+8L72fgFg6E14f/h6v8aCQ+TnnJlCGJvHNXw2gLgAB1P 5/U5K2RSCxKpUdFfBmXf+SivgxcH+B65o2nEW2UTey0J6n1umSQmtvhUeatJcKxl/t5t BNtwzR3ZJ6DrwUlBmBnp4x11sfnw+g3qUJi2X5WRytMJXxlVNW1rCWJAElRNp4SJtWU/ vCpe6G6AhUiNqRPHJxW5Dxl7Zp5JqzY/rgyI9HVlnxoSIrULItdoeJXk/tjQ06w49aVx DgVA== X-Gm-Message-State: AElRT7HpI8GEd0VifJ8SmojUNkOV8jK69RJIGUFV055GHGS30Kd6ukHL n+ZXmwHKAwwhE7+Nbe1CAd+ZtM3b6rDXfmUur2c= X-Received: by 10.157.5.183 with SMTP id 52mr5733669otd.61.1520253290517; Mon, 05 Mar 2018 04:34:50 -0800 (PST) MIME-Version: 1.0 Received: by 10.157.5.137 with HTTP; Mon, 5 Mar 2018 04:34:50 -0800 (PST) In-Reply-To: <1519980169-8491-1-git-send-email-m.purski@samsung.com> References: <1519980169-8491-1-git-send-email-m.purski@samsung.com> From: Fabio Estevam Date: Mon, 5 Mar 2018 09:34:50 -0300 Message-ID: Subject: Re: [PATCH v5 0/5] Add coupled regulators mechanism To: Maciej Purski , Mark Brown Cc: linux-kernel , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Liam Girdwood , Rob Herring , Mark Rutland , Marek Szyprowski , Doug Anderson , Bartlomiej Zolnierkiewicz Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Maciej, On Fri, Mar 2, 2018 at 5:42 AM, Maciej Purski wrote: > Hi all, > > this patchset adds a new mechanism to the framework - regulators' coupling. > > On Odroid XU3/4 and other Exynos5422 based boards there is a case, that > different devices on the board are supplied by different regulators > with non-fixed voltages. If one of these devices temporarily requires > higher voltage, there might occur a situation that the spread between > devices' voltages is so high, that there is a risk of changing > 'high' and 'low' states on the interconnection between devices powered > by those regulators. > > Algorithmicaly the problem was solved by: > Inderpal Singh > Doug Anderson > > The discussion on that subject can be found here: > https://lkml.org/lkml/2014/4/29/28 > > Therefore this patchset is an attempt to apply the idea to regulators core > as concluded in the discussion by Mark Brown and Doug Anderson. > > This feature is required to enable support for generic CPUfreq > and devfreq drivers for the mentioned boards. > > Note on the locking model: > When balancing voltage of a group of coupled regulators, we lock all > of them for the whole operation. When voltage of an individual regulator > is about to change, its suppliers are additionally locked. > > The current assumption is that an uncoupled regulator is a special case > of a coupled one, so they should share a common voltage setting path. This series breaks has reached linux-next 20180305 and it breaks booting on imx6: [ 0.269646] imx-pgc-pd imx-pgc-power-domain.0: Linked as a consumer to 20dc000.gpc [ 0.270348] [ 0.270363] ============================================ [ 0.270373] WARNING: possible recursive locking detected [ 0.270385] 4.16.0-rc3-next-20180305 #156 Not tainted [ 0.270397] -------------------------------------------- [ 0.270408] swapper/0/1 is trying to acquire lock: [ 0.270419] (&rdev->mutex){+.+.}, at: [] regulator_lock_supply+0x24/0x44 [ 0.270460] [ 0.270460] but task is already holding lock: [ 0.270471] (&rdev->mutex){+.+.}, at: [] regulator_enable+0x78/0x298 [ 0.270502] [ 0.270502] other info that might help us debug this: [ 0.270513] Possible unsafe locking scenario: [ 0.270513] [ 0.270523] CPU0 [ 0.270532] ---- [ 0.270540] lock(&rdev->mutex); [ 0.270555] lock(&rdev->mutex); [ 0.270572] [ 0.270572] *** DEADLOCK *** [ 0.270572] [ 0.270585] May be due to missing lock nesting notation [ 0.270585] [ 0.270598] 3 locks held by swapper/0/1: [ 0.270606] #0: (&dev->mutex){....}, at: [] __driver_attach+0x58/0xcc [ 0.270642] #1: (&dev->mutex){....}, at: [] __driver_attach+0x68/0xcc [ 0.270672] #2: (&rdev->mutex){+.+.}, at: [] regulator_enable+0x78/0x298 [ 0.270701] [ 0.270701] stack backtrace: [ 0.270719] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.16.0-rc3-next-20180305 #156 [ 0.270731] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree) [ 0.270741] Backtrace: [ 0.270767] [] (dump_backtrace) from [] (show_stack+0x18/0x1c) [ 0.270783] r7:00000000 r6:60000093 r5:00000000 r4:c1078360 [ 0.270805] [] (show_stack) from [] (dump_stack+0xb4/0xe8) [ 0.270830] [] (dump_stack) from [] (__lock_acquire+0x13a4/0x199c) [ 0.270848] r9:c17d75fc r8:c11ae35c r7:c17c73b0 r6:ec060000 r5:ec060570 r4:c11ae35c [ 0.270867] [] (__lock_acquire) from [] (lock_acquire+0x70/0x90) [ 0.270883] r10:00000000 r9:ec195800 r8:00000001 r7:00000001 r6:60000013 r5:00000000 [ 0.270893] r4:ffffe000 [ 0.270914] [] (lock_acquire) from [] (__mutex_lock+0x64/0x978) [ 0.270929] r8:00000001 r7:00000001 r6:00000000 r5:00000000 r4:ec00b89c [ 0.270947] [] (__mutex_lock) from [] (mutex_lock_nested+0x24/0x2c) [ 0.270963] r10:00000000 r9:ec195800 r8:00000001 r7:00000001 r6:ec195800 r5:00000000 [ 0.270975] r4:ec00b800 [ 0.270992] [] (mutex_lock_nested) from [] (regulator_lock_supply+0x24/0x44) [ 0.271013] [] (regulator_lock_supply) from [] (regulator_balance_voltage+0x298/0x584) [ 0.271024] r5:000b1008 r4:ec195800 [ 0.271042] [] (regulator_balance_voltage) from [] (regulator_enable+0xdc/0x298) [ 0.271059] r10:00000000 r9:00000000 r8:00000001 r7:00000001 r6:ec195800 r5:ec195824 [ 0.271069] r4:00000001 [ 0.271086] [] (regulator_enable) from [] (imx6_pm_domain_power_on+0x30/0x1b4) [ 0.271102] r9:00000000 r8:c102d114 r7:c1008908 r6:c102d114 r5:ec3d7a00 r4:ec3d7a00 [ 0.271119] [] (imx6_pm_domain_power_on) from [] (imx_pgc_power_domain_probe+0x64/0xf4) [ 0.271135] r8:c102d114 r7:ec49c810 r6:c102d114 r5:ec49c800 r4:ec3d7a00 [ 0.271153] [] (imx_pgc_power_domain_probe) from [] (platform_drv_probe+0x54/0xb8) [ 0.271168] r7:fffffdfb r6:c102d114 r5:ec49c810 r4:ec49c810 [ 0.271189] [] (platform_drv_probe) from [] (driver_probe_device+0x2b0/0x338) [ 0.271204] r7:c17e234c r6:00000000 r5:c17e2348 r4:ec49c810 [ 0.271222] [] (driver_probe_device) from [] (__driver_attach+0xc8/0xcc) [ 0.271237] r10:c0f00630 r9:00000000 r8:c1008908 r7:c1008908 r6:ec49c844 r5:c102d114 [ 0.271248] r4:ec49c810 r3:00000000 [ 0.271267] [] (__driver_attach) from [] (bus_for_each_dev+0x6c/0xbc) [ 0.271280] r7:c1008908 r6:c057f310 r5:c102d114 r4:00000000 [ 0.271298] [] (bus_for_each_dev) from [] (driver_attach+0x20/0x28) [ 0.271314] r7:00000000 r6:c103b0a8 r5:ec479b00 r4:c102d114 [ 0.271332] [] (driver_attach) from [] (bus_add_driver+0x18c/0x214) [ 0.271351] [] (bus_add_driver) from [] (driver_register+0x80/0x100) [ 0.271366] r7:c0e125e4 r6:c0f63850 r5:c0f41c18 r4:c102d114 [ 0.271383] [] (driver_register) from [] (__platform_driver_register+0x38/0x4c) [ 0.271396] r5:c0f41c18 r4:ffffe000 [ 0.271418] [] (__platform_driver_register) from [] (imx_pgc_power_domain_driver_init+0x18/0x20) [ 0.271438] [] (imx_pgc_power_domain_driver_init) from [] (do_one_initcall+0x50/0x1a0) [ 0.271464] [] (do_one_initcall) from [] (kernel_init_freeable+0x118/0x1d0) [ 0.271481] r9:c0f63858 r8:000000f2 r7:c0e125e4 r6:c0f63850 r5:c1079f80 r4:c0f77ab4 [ 0.271508] [] (kernel_init_freeable) from [] (kernel_init+0x10/0x118) [ 0.271524] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c0a5c6e0 [ 0.271533] r4:00000000 [ 0.271552] [] (kernel_init) from [] (ret_from_fork+0x14/0x20) [ 0.271564] Exception stack(0xec069fb0 to 0xec069ff8) [ 0.271579] 9fa0: 00000000 00000000 00000000 00000000 [ 0.271594] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 0.271609] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 [ 0.271621] r5:c0a5c6e0 r4:00000000 [ 0.271723] imx-pgc-pd imx-pgc-power-domain.1: Linked as a consumer to 20dc000.gpc [ 0.273566] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 26, base_baud = 5000000) is a IMX [ 1.660948] console [ttymxc0] enabled [ 1.666242] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 65, base_baud = 5000000) is a IMX [ 1.683484] etnaviv etnaviv: bound 130000.gpu (ops gpu_ops) [ 1.689464] etnaviv etnaviv: bound 134000.gpu (ops gpu_ops) If I revert this series I am able to boot again.