Received: by 10.192.165.156 with SMTP id m28csp457747imm; Fri, 13 Apr 2018 02:05:27 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+cihGx4GrHxUyltGNXNLV9x4stC+GzU9RXOho/Ou6aXS/Hmt7Bws/zp/76HAsLl7CjOCjf X-Received: by 2002:a17:902:3341:: with SMTP id a59-v6mr4476976plc.68.1523610327433; Fri, 13 Apr 2018 02:05:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523610327; cv=none; d=google.com; s=arc-20160816; b=IfFkMXmb5lwltGmL8kqWUFzXPc2NLFz10wEP8dA2tm0lMKGVKzWDRwMzdVJcsxTvqb HFuAWKgLlHEqznErwsNs8jq2VnDlMKU8fZMHqjlk7ZKqmrb3YMkfJYIJwGKW8P4rF7+5 QAPoepSH46tYm6ZDqReD+0KehI1yDeNXA26AyAc3ggoNLVf8ZKZSk+47uFdz1Lm35cl0 cDqNVxf6C3mI1YS1qbuSSIIjP6oXBqv8eikyZXFvvQqtlOUbwrRm/Oeny12UjELIgitA 6DOzRjjmJQ8I6uh6UqPO07MEJNQBfCutHmDWetknpP1Wm+eCyK7WKwhK8/P28L7n2FVt Dvtw== 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=yCYC9byHG9VD/zrLivNPURKgQuoaCrTpu1QdTT44L4A=; b=sEI+5KCmQvO6F/Y7ii1D3XjB9afDOV21tmhUwjXpUxxXSSDkmZni0KLnFgLNTcZOSi NQKcQgGaZNn8hRtoryAf0DFTNjOKC4W2s/OACqWC2oqPBh9ane9j4AKa1snJpmJP1UAY HPN8Rcjbjzt9uLQTyahsctnk8ok2TRSaNmQxiwpJFTVcH3ufrGj9qStEvPcO4fXl2ewE UOAcwsx/usT1VDTh3W578+r/YkNoYmhbggXuNycpCiYjHFwZj+lkgwiOwJl+Ka0aAqES 4aXS5iWzFUAsIX172FlUchSOV90vxMhMwQndUbhlSylxiHUlW9z5pFC8BFjTtTN2lumH Vmdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=QSoE5khq; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e16si1938191pgr.502.2018.04.13.02.05.13; Fri, 13 Apr 2018 02:05:27 -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; dkim=fail header.i=@gmail.com header.s=20161025 header.b=QSoE5khq; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754158AbeDMJC7 (ORCPT + 99 others); Fri, 13 Apr 2018 05:02:59 -0400 Received: from mail-qk0-f194.google.com ([209.85.220.194]:34263 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752669AbeDMJC4 (ORCPT ); Fri, 13 Apr 2018 05:02:56 -0400 Received: by mail-qk0-f194.google.com with SMTP id g7so8131874qkm.1; Fri, 13 Apr 2018 02:02:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=yCYC9byHG9VD/zrLivNPURKgQuoaCrTpu1QdTT44L4A=; b=QSoE5khqmgXwY2SBOYkdYd6TR9XegZVNKiP88cVJNFg6ifMvgQd4S4/mt+bNip24g0 KL+Kp77C2buAkyOHaW7cmEqG1c4UeaVdq0zsFjNyVpTLZC6hUhHRjtoFpx+q4FhUv5b9 VdPp1Az/yOq3Zm3e9IEy8FzFocArxPzqIQzwqxpcSlA3SGH0xAahDEZdmVPfRtJOTKWL h6IGjZQg8BSb7vmYVhEWC6uvwgvA0CaOas0XfDdD7+GBVDQ77jmDlMeGpQY5XT37y3UC 0Ut6Wl8aa3QXI0l2u5cUWMMdaI08EHYSx1qhXEO08G3BtwxpDd/IcutQWWo2wh/Xsm80 tAbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=yCYC9byHG9VD/zrLivNPURKgQuoaCrTpu1QdTT44L4A=; b=G6kGP6yRUUqHi+XavFE/YEyRxxrJVboDXTo4UuiC9Frz8qtpeIxUe/WugHm6xokiUU GCVxIlH3BNFzdjPNM0vCApdscXE0xCnpBgxV0++Z7QFVZ1DE/f0s5vUsQ2PzTfNu8KlN 6Tug2M/R3zaB9lWEhiYaGjBj1Wo0a6xRH+6NLUXjN0CWKpkjGin+BpuOjHCZWp++fgF8 EOGVuW814GuANJJ8r9BRiQRqFkMZtXgb/lUS13DRhYLJPfpHAnmuBKSNr0TdKYnzZqT7 p8u5TZ1go2ehrPydpnKbo2XyFX/mrI5hi+JF40flmAMEGodex7CR2aLm2GWylt/CfL4S JJbg== X-Gm-Message-State: ALQs6tD2BhZTMWVpwKtMrD6uDT5mcdcGVyG+5aD0En1HLXpwHuQ3NrRw +ERRYd0SrR+5NHVEH+LOMXjjwuq3piVonf4m9pk= X-Received: by 10.55.209.79 with SMTP id s76mr3612472qki.89.1523610175514; Fri, 13 Apr 2018 02:02:55 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.23.67 with HTTP; Fri, 13 Apr 2018 02:02:54 -0700 (PDT) In-Reply-To: References: <1523438149-16433-1-git-send-email-geert+renesas@glider.be> <1523438149-16433-4-git-send-email-geert+renesas@glider.be> <2e09425d-0f27-3069-3421-e454ee70e3b2@redhat.com> <1523542206.3689.10.camel@pengutronix.de> From: Geert Uytterhoeven Date: Fri, 13 Apr 2018 11:02:54 +0200 X-Google-Sender-Auth: y8LnOlVIySW4AsGpAIbaZwJdY3E Message-ID: Subject: Re: [PATCH v3 2/2] vfio: platform: Add generic DT reset support To: Auger Eric Cc: Philipp Zabel , Sinan Kaya , Geert Uytterhoeven , Baptiste Reynal , Alex Williamson , Rob Herring , Mark Rutland , KVM list , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Linux-Renesas , Linux Kernel Mailing List 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 Eric, On Fri, Apr 13, 2018 at 10:52 AM, Auger Eric wrote: > On 12/04/18 18:02, Geert Uytterhoeven wrote: >> On Thu, Apr 12, 2018 at 4:10 PM, Philipp Zabel wrote: >>> On Thu, 2018-04-12 at 15:12 +0200, Geert Uytterhoeven wrote: >>>> On Thu, Apr 12, 2018 at 2:36 PM, Sinan Kaya wrote: >>>>> On 4/12/2018 7:49 AM, Auger Eric wrote: >>>>>> On 12/04/18 13:32, Geert Uytterhoeven wrote: >>>>>>> On Thu, Apr 12, 2018 at 12:31 PM, Auger Eric wrote: >>>>>>>> On 11/04/18 11:15, Geert Uytterhoeven wrote: >>>>>>>>> Vfio-platform requires reset support, provided either by ACPI, or, on DT >>>>>>>>> platforms, by a device-specific reset driver matching against the >>>>>>>>> device's compatible value. >>>>>>>>> >>>>>>>>> On many SoCs, devices are connected to an SoC-internal reset controller. >>>>>>>>> If the reset hierarchy is described in DT using "resets" properties, >>>>>>>>> such devices can be reset in a generic way through the reset controller >>>>>>>>> subsystem. Hence add support for this, avoiding the need to write >>>>>>>>> device-specific reset drivers for each single device on affected SoCs. >>>>>>>>> >>>>>>>>> Devices that do require a more complex reset procedure can still provide >>>>>>>>> a device-specific reset driver, as that takes precedence. >>>>>>>>> >>>>>>>>> Note that this functionality depends on CONFIG_RESET_CONTROLLER=y, and >>>>>>>>> becomes a no-op (as in: "No reset function found for device") if reset >>>>>>>>> controller support is disabled. >>>>>>>>> >>>>>>>>> Signed-off-by: Geert Uytterhoeven >>>>>>>>> Reviewed-by: Philipp Zabel >>>>>>>>> --- a/drivers/vfio/platform/vfio_platform_common.c >>>>>>>>> +++ b/drivers/vfio/platform/vfio_platform_common.c >>>>>>>>> @@ -127,8 +130,16 @@ static int vfio_platform_get_reset(struct vfio_platform_device *vdev) >>>>>>>>> vdev->of_reset = vfio_platform_lookup_reset(vdev->compat, >>>>>>>>> &vdev->reset_module); >>>>>>>>> } >>>>>>>>> + if (vdev->of_reset) >>>>>>>>> + return 0; >>>>>>>>> + >>>>>>>>> + rstc = of_reset_control_get_exclusive(vdev->device->of_node, NULL); >>>>>>>> >>>>>>>> Shouldn't we prefer the top level reset_control_get_exclusive()? >>>>>>> >>>>>>> I guess that should work, too. >>>>>>> >>>>>>>> To make sure about the exclusive/shared terminology, does >>>>>>>> get_reset_control_get_exclusive() check we have an exclusive wire >>>>>>>> between this device and the reset controller? >>>>>>> >>>>>>> AFAIU, the "exclusive" means that only a single user can obtain access to >>>>>>> the reset, and it does not guarantee that we have an exclusive wire between >>>>>>> the device and the reset controller. >>>>>>> >>>>>>> The latter depends on the SoC's reset topology. If a reset wire is shared >>>>>>> by multiple devices (e.g. resets shared by PWM or Display Unit devices on >>>>>>> R-Car SoCs), exporting a subset of these devices to a guest is a bad idea, >>>>>>> indeed. >>>>>> >>>>>> So who's going to check this assigned device will not trigger a reset of >>>>>> other non assigned devices sharing the same reset controller? >>> >>> If the reset control is requested as exclusive, any other driver >>> requesting the same reset control will fail (or this reset_control_get >>> will fail, whichever comes last). >>> >>>>> I like the direction in general. I was hoping that you'd call it of_reset_control >>>>> rather than reset_control. >>>> >>>> You mean vfio_platform_device.of_reset_control? >>>> If we switch to reset_control_get_exclusive(), that doesn't make much sense... >>>> >>>>> Is there anything in the OF spec about what to expect from DT's reset? >>>> >>>> Documentation/devicetree/bindings/reset/reset.txt says: >>>> >>>> "A word on where to place reset signal consumers in device tree: It is possible >>>> in hardware for a reset signal to affect multiple logically separate HW blocks >>>> at once. In this case, it would be unwise to represent this reset signal in >>>> the DT node of each affected HW block, since if activated, an unrelated block >>>> may be reset. Instead, reset signals should be represented in the DT node >>>> where it makes most sense to control it; this may be a bus node if all >>>> children of the bus are affected by the reset signal, or an individual HW >>>> block node for dedicated reset signals. The intent of this binding is to give >>>> appropriate software access to the reset signals in order to manage the HW, >>>> rather than to slavishly enumerate the reset signal that affects each HW >>>> block." >>> >>> This was written in 2012, and unfortunately the DT binding documentation >>> does not inform hardware development, and has not been updated since. >>> >>> There's generally two kinds of reset uses: >>> - either to bring a device into a known state at a given point in time, >>> which is often done using a timed assert/deassert sequence, >>> - or just to park a device while not in active use (must deassert any >>> time before use, may or may not assert any time after use) >>> >>> For the former case, the above paragraph makes a lot of sense, because >>> when it is necessary to reset a device that shares the reset line with >>> another, either choice between disturbing the other device, or not >>> being able to reset when necessary, is a bad one. The reset controller >>> framework supports those use cases via the reset_control_get_exclusive >>> function variants. >>> >>> But for the latter case, there is absolutely no need to forbid sharing >>> reset lines among multiple devices, as deassertion/assertion can just be >>> handled reference counted, like clocks or power management. The reset >>> controller framework supports those use cases via the >>> reset_control_get_shared function variants. >>> >>> The case we are talking about here is the first one. >> >> Except that vfio-platform wants to reset the device before and after its >> use by the guest, for isolation reasons, which does cause a major >> disturbance in case of a shared reset. > > Do we have any guarantee that drivers whose device are sharing the reset > signal will have got the reset control when the vfio-platform driver > calls reset_control_get_exclusive(). In such a case vfio-platform > reset_control_get_exclusive() will fail and this is what we want. > Otherwise it is unsafe, right. Doesn't this assumption look a little risky? No we don't: most drivers don't use reset_control at all. I think on the Renesas SoCs only USB and Ethernet PHY (which is BTW external, and thus not covered by the on-SoC reset controller) do. A few more users may be added in the future. But all module resets are described in DT. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds