Received: by 10.192.165.156 with SMTP id m28csp2135425imm; Thu, 12 Apr 2018 09:08:37 -0700 (PDT) X-Google-Smtp-Source: AIpwx49aKKCzReXTnKPY6nfw1P0TtsP83ookkqwdr1Us56yGd4jDI3+wvnyKynmF6DD6w3amB5/b X-Received: by 2002:a17:902:2c83:: with SMTP id n3-v6mr1714478plb.317.1523549317573; Thu, 12 Apr 2018 09:08:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523549317; cv=none; d=google.com; s=arc-20160816; b=L3qz3bcbMU4A73LqpdD4Xtpw4MXa2QGdZmzeyBifFKzsYJZMhXBXLrfiAF2V/fUD6G wm1vpbO4SIY3CYfUHCmDgaRlhDXO69yKf/QSBGmQGiOHsBvxpDLuUGnn0Q8dJT+GRpnZ ErpMkMF1O7hnvuCv0iDWO53yqQRrIOrkfGKA/hAkVILO2H5BriTMcIMYQwE+xG26Dayr zmUaJVNmf+iqmlqnhk581ivcZ+8OInrYWXN2IdxLn/RcMAFPjSgaH4ry/jh5fwGY+4uQ S+kG6H0ig+1n9FMVQrfFjpaUvi7J7zU5RmuH45aMEh24kfhW/u5SETCprh30BM4ku9uU NsXg== 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=ksF3jHZkXcncIT8WLhwX3lOGX6fjS4LSq8opWYrcp3c=; b=aNrwZFr7jU3dQa9BCId4UhaYekbHj0wybjOo44tfZeSeO2tm/MWx7z4cvrKFjccpbO EDRbtvhRzfotxW5Gj+/BF0bbYPkytuxHCw62a3qEwcImMLlNdoV2LUBxyPG6wfSdYADI 72enQj2ON4I9RXKLmnMdfn1OflE6GTvRI5R342MxXdZOvgbleB6IBHHLGWTxpb6Ds8d/ U72BX0aBgCP0LPUEnQbr8qCzD8PdeH/GFAiWfkDhNvBiuthvoD0s9UR1P3L3/utGK7wE lMPkafeV2gEViF/2KOm4iah+IW+ifY9Bwqi5EpaFQhcDgnBOdDQUMQisBprUGGn6H7Pa 8O4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=i6/2HMTy; 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 k1-v6si3507456pld.267.2018.04.12.09.08.00; Thu, 12 Apr 2018 09:08:37 -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=i6/2HMTy; 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 S1753103AbeDLQC7 (ORCPT + 99 others); Thu, 12 Apr 2018 12:02:59 -0400 Received: from mail-qt0-f193.google.com ([209.85.216.193]:44131 "EHLO mail-qt0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753068AbeDLQC4 (ORCPT ); Thu, 12 Apr 2018 12:02:56 -0400 Received: by mail-qt0-f193.google.com with SMTP id j26so6716135qtl.11; Thu, 12 Apr 2018 09:02:55 -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=ksF3jHZkXcncIT8WLhwX3lOGX6fjS4LSq8opWYrcp3c=; b=i6/2HMTyyhk8EOtXo4UrJKIv37a8Xiaifa5zg/utSPcLhM1K6ziocdrpEZJ8U1AZT0 Jg7xP4I3iBlcfMV8QcIgxPwed6G5n/W/KSntFl9ckMdfGvifAqPHpORA1hLIxupmJzc0 Tx10QsyBRkG7SgUGfaYrJ/8xUQ3/mNBZWy08iKlSo6p5or1X9fWvCvASYdKB8L+wMoMc yde5V0SkFtD0l/ND7OCnJzH6D0ULC3A759b532wSZV75EMtXVSpr5EB6fhY6jgymk6Io hIVwLsAznqtSDgtTrbx1zzIM5wJY1EDEFZO1PJjelJU+y46gSu41IaYERUFEV8CwUOgl NHGg== 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=ksF3jHZkXcncIT8WLhwX3lOGX6fjS4LSq8opWYrcp3c=; b=qfzLpWNa7YiGidRQTkzhKDl/0x5+3hoecOlLWdr9Sxc3VBiN8PIHCq7BazDyyfKVag src1OIaosPblo9wO5MPLLG9XV7RaSK61El1UKOmpnV7SEAtCtOos8+UWD74kuO072M7l uGYSl1lvsCvrH04o9gCy8l2VQ3Thv0xib8NtwlC+vjRmPhqgvPL2avpOrKgLmoBrV5/W GxvntPRViWYO5diNh22H8PF/vzQTQ0qmsuLwh/PU5zE+KGNlyWUrQ4wM3wD5hiLN9/bz K6S5FLZn6zpLk5lHdw16u/ouIn1AdeyYc/0oq6cAcg0Edbyg9Td7Ab/cHvmVl8Z2fG2m NVxg== X-Gm-Message-State: ALQs6tDbUWbQGfNCDN0epGU/XhFS8ib6UVgcrS1LNBZf6K3Ym3jG5RwJ rVy+uYDe42oT4rV3lkfYPneJiiE5qhXXIO/w/Yw= X-Received: by 10.200.44.164 with SMTP id 33mr2185698qtw.160.1523548975106; Thu, 12 Apr 2018 09:02:55 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.23.67 with HTTP; Thu, 12 Apr 2018 09:02:53 -0700 (PDT) In-Reply-To: <1523542206.3689.10.camel@pengutronix.de> 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: Thu, 12 Apr 2018 18:02:53 +0200 X-Google-Sender-Auth: 97JrXy6jeo4hUdubP_7I4-fEJLQ Message-ID: Subject: Re: [PATCH v3 2/2] vfio: platform: Add generic DT reset support To: Philipp Zabel Cc: Sinan Kaya , Auger Eric , 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 Philipp, 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. >> So according to the bindings, a specific reset should apply to a single >> device only. > > Indeed sharing reset lines between peripherals has become unexpectedly > common, making it impractical to forbid shared resets in the device > tree. > >> A quick check shows there are several violators: [...] >> Perhaps we should start grouping devices sharing a reset signal in a >> "simple-bus" node? >> >> Phillip: any comments? > > For some of those it may be possible, but that is basically just a work- > around for reality not matching expectations. There may be other cases > where devices sharing a reset line are not even in the same parent node > because they are controlled via a different bus. In general, I don't > think it is feasible or desirable to force grouping of devices that > share the same reset line into a common parent node. At least for Renesas R-Car SoCs, I think this is feasible, as all affected devices are currently grouped under the same /soc node. I added subnodes for all devices sharing resets (one for pwm, 4 for USB2, and one for USB3; display doesn't have resets yet), and it still boots ;-) However, ehci_platform_probe() cannot get its (optional) resets anymore. Probably the reset controller framework needs to be taught to look for shared resets in the parent node, too? > My suggestion would be to relax the language in the reset.txt DT > bindings doc. Which is fine to keep the status quo with the hardware designers, but makes it less likely for non-whitelisted generic reset controller support to become acceptable for the vfio people... 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