Received: by 10.192.165.156 with SMTP id m28csp1216498imm; Fri, 13 Apr 2018 15:42:00 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/Gur6VavM4ldsoSw5QmoqvH0Xuoc9ntWP0fGBrWMYs3FlMH0jvoDpHdalxRdvtd2QLR7zr X-Received: by 2002:a17:902:7841:: with SMTP id e1-v6mr6847012pln.197.1523659320527; Fri, 13 Apr 2018 15:42:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523659320; cv=none; d=google.com; s=arc-20160816; b=V03CB2pYBCzImqnt8WNnNlKTy60HIO4WXHvj7quXVILZzObRHXqSodfFhENmO7ENE7 +Rh3FY1vchMzJNREwjM01uXSQt5BLWslOzBUwEJgiXjdBK2aUdJsw8FNwjN3JqKLP/yP qIbz81DiBnYLd5Iu8MisMd7YqKh0VcoSPr8S9lVInQ7oYMBtU+15p0oUcIrL9PKJwNWO pJFoyMxZbubPhiOduTUZdTFtMGlrZH1kUxDgvh6zCKGmIoTDv8GrIGyAMABYWg/sY6H9 CkaKba4an+caDsXQ8FRTqD136QB31oqADi3w7VtEB4BP9mb+VSCjkU5xKQyLgzW8jUHF pwuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:user-agent:message-id :references:cc:in-reply-to:from:to:content-transfer-encoding :mime-version:dkim-signature:arc-authentication-results; bh=u5b1r9+g5+Rt4CfvSdrszrRMt1fxfoQE1IVgdK2Vz58=; b=JUowZ6BKlnJN1T0m3RDnd4Gg5b8nQkE41CSdEBFnoE3L2p0VZy2f98AZ8gCUGGBO5q aoNBcW+v1hNbV/W2KvEOeJUIaMzH2FLMmht7O92vNfDdkmYm0Ehn3Y6yaLM2Hb5erprH C0ybN1ChUlIGwjAgKjTrIRAxMjnupUIJJvXQcnEnsfgjFs5ns1goTh4CZ+71P5W/lFXB TXtB5IS4bqPbq+KmPWtmnvw18pbzlZU59QMpa6mbA8RtMFyuX7dUf9An2INiCMZ1slPx tH5eS6tPnyitCWu3rcxz/HT7dbyOW+ahNAPZ8WRZZdMIXi3aa5qxFH8TS6PJQdbCtAoG yt9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=jmjN2EUW; 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=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 70-v6si6414923ple.372.2018.04.13.15.41.46; Fri, 13 Apr 2018 15:42:00 -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=pass header.i=@chromium.org header.s=google header.b=jmjN2EUW; 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=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752258AbeDMWkk (ORCPT + 99 others); Fri, 13 Apr 2018 18:40:40 -0400 Received: from mail-pl0-f68.google.com ([209.85.160.68]:40366 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751553AbeDMWkh (ORCPT ); Fri, 13 Apr 2018 18:40:37 -0400 Received: by mail-pl0-f68.google.com with SMTP id x4-v6so6841144pln.7 for ; Fri, 13 Apr 2018 15:40:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:content-transfer-encoding:to:from:in-reply-to:cc :references:message-id:user-agent:subject:date; bh=u5b1r9+g5+Rt4CfvSdrszrRMt1fxfoQE1IVgdK2Vz58=; b=jmjN2EUWWqYbuV8tpfW/2MH2M4TzvT+a7jn1OC1WucvoW0rAlY2mZBTNnIOOb7Ww1S lpdEpfipNec96bvy8RataxdLtbyAuTCy8Zr+IIx+t3thkjg26beZx7GQCnNVFFeji6c1 oY2f2OFF+0nN7L/Ba3baAjORty5Dv/JewhvKM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:content-transfer-encoding:to:from :in-reply-to:cc:references:message-id:user-agent:subject:date; bh=u5b1r9+g5+Rt4CfvSdrszrRMt1fxfoQE1IVgdK2Vz58=; b=KiiG7DYS/NavnhKYzfk6UhO84JyzIORzX82jPbxajW6uza4k3SeRmqLXw44xbb/fUo HPTRl7PyNBGMg0q0Zt13wsFz7cEWi7h7SvP7uYV217MI3dmVCEAVatKqUBFJs2q/n5Mf 0w38QhvbLlOjURAQxqKruEYxiZ0BaJGKsUT5k1K3fFEZ3D1LBEzGXTzVS3uwL+ZXl6Ai Bgp50lgchJ/UEzR5qjNYfn3NJhGCsTykOIXsB5oDuIfx6ACTDfrZDacSXSxmx/zwe3gO U6lM1maiEo51xTLIuK0g5+VfNL6p8f/ix6shSjPeoaza54TCUlXdKdsatQA9eykPBVwI ggrg== X-Gm-Message-State: ALQs6tBTt+F7q9xxIlM9+HqD9L1SF8xasI5egRXI3KaTls4ApWv74MhH lnB+ov8lC6eq+YJ+AMbTam0nbQ== X-Received: by 2002:a17:902:9898:: with SMTP id s24-v6mr6754302plp.51.1523659237314; Fri, 13 Apr 2018 15:40:37 -0700 (PDT) Received: from localhost ([2620:0:1000:1511:d30e:62c6:f82c:ff40]) by smtp.gmail.com with ESMTPSA id t25sm15766171pfk.69.2018.04.13.15.40.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 13 Apr 2018 15:40:36 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: Lina Iyer From: Stephen Boyd In-Reply-To: <20180411212431.GG19682@codeaurora.org> Cc: andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, evgreen@chromium.org, dianders@chromium.org, devicetree@vger.kernel.org References: <20180405161834.3850-1-ilina@codeaurora.org> <20180405161834.3850-3-ilina@codeaurora.org> <152306368031.94378.14957212064809086345@swboyd.mtv.corp.google.com> <20180409160800.GC19682@codeaurora.org> <152346054406.180276.4468371342222361883@swboyd.mtv.corp.google.com> <20180411212431.GG19682@codeaurora.org> Message-ID: <152365923361.51482.7839380101584600308@swboyd.mtv.corp.google.com> User-Agent: alot/0.7 Subject: Re: [PATCH v5 02/10] dt-bindings: introduce RPMH RSC bindings for Qualcomm SoCs Date: Fri, 13 Apr 2018 15:40:33 -0700 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting Lina Iyer (2018-04-11 14:24:31) > On Wed, Apr 11 2018 at 09:29 -0600, Stephen Boyd wrote: > >Quoting Lina Iyer (2018-04-09 09:08:00) > >> On Fri, Apr 06 2018 at 19:14 -0600, Stephen Boyd wrote: > >> >Quoting Lina Iyer (2018-04-05 09:18:26) > >> >> diff --git a/Documentation/devicetree/bindings/soc/qcom/rpmh-rsc.tx= t b/Documentation/devicetree/bindings/soc/qcom/rpmh-rsc.txt > >> >> new file mode 100644 > >> >> index 000000000000..dcf71a5b302f > >> >> --- /dev/null > >> >> +++ b/Documentation/devicetree/bindings/soc/qcom/rpmh-rsc.txt > >> >> @@ -0,0 +1,127 @@ > >> >> + > >> >> +Example 1: > >> >> + > >> >> +For a TCS whose RSC base address is is 0x179C0000 and is at a DRV = id of 2, the > >> >> +register offsets for DRV2 start at 0D00, the register calculations= are like > >> >> +this - > >> >> +First tuple: 0x179C0000 + 0x10000 * 2 =3D 0x179E0000 > >> >> +Second tuple: 0x179E0000 + 0xD00 =3D 0x179E0D00 > >> >> + > >> >> + apps_rsc: rsc@179e000 { > >> >> + label =3D "apps_rsc"; > >> >> + compatible =3D "qcom,rpmh-rsc"; > >> >> + reg =3D <0x179e0000 0x10000>, <0x179e0d00 0x3000>; > >> > > >> >The first reg property overlaps the second one. Does this second one > >> >ever move around? I would hardcode it in the driver to be 0xd00 away > >> >from the drv base instead of specifying it in DT if it's the same all > >> >the time. > >> > > >> >Also, the example shows 0x179c0000 which I guess is the actual beginn= ing > >> >of the RSC block. So the binding seems to be for one DRV inside of an > >> >RSC. Can we get the full description of the RSC in the binding instea= d? > >> >I imagine that means there's a DRV0,1,2 and those probably have an > >> >interrupt per each DRV and then a different TCS config per each one t= oo? > >> >If the binding can describe all of the RSC then we can use different > >> >DRVs by changing the qcom,drv-id property. > >> > > >> > rsc@179c0000 { > >> > compatible =3D "qcom,rpmh-rsc"; > >> > reg =3D <0x179c0000 0x10000>, > >> > <0x179d0000 0x10000>, > >> > <0x179e0000 0x10000>; > >> > qcom,tcs-offset =3D <0xd00>; > >> > qcom,drv-id =3D <0/1/2>; > >> > interrupts =3D , > >> > , > >> > ; > >> > } > >> > > >> >This is sort of what I imagine it would look like. I have no idea how > >> >the tcs config would work unless each DRV has the same TCS config > >> >though. Otherwise, if each node is for a drv, then I would expect the > >> >node would be called 'drv' and we wouldn't need the drv-id property a= nd > >> >the compatible string would say drv instead of rsc? > >> > > >> >BTW, what are the other DRVs used for in the apps RSC? > >> > > >> The DRV is the voter for an execution environment (Linux, Hypervisor, > >> ATF) in the RSC. The RSC has a lot of other registers that Linux is not > >> privy to. They are access restricted. > > > >Alright. Well sometimes access restrictions aren't there, so this isn't > >a good assumption to make. > > > >> The memory organization of the RSC > >> mandates that we know the DRV id to access registers specific to the > >> DRV. > > > >I think qcom,drv-id covers that, no? > > > >> Unfortunately, not all RSC have identical DRV configuration and the > >> register space is also variable depending on the capability of the RSC. > >> There are functionalities supported by other RSCs in the SoC that are > >> not supported by the RSC associated with the application processor, > >> while not many RSCs' support multiple DRVs. Therefore it doesn't benef= it > >> describing the whole RSC as it is not usable from Linux (because of > >> access restrictions). > > > >If we're not describing the whole RSC in the RSC binding then we're not > >going to get very far. From what I can tell, this binding describes one > >DRV inside of an RSC instead of the whole RSC. Yes we'll probably never > >use the ATF part of the RSC in Linux, but we may use the hypervisor part > >if we use KVM/Xen so the binding should be describing as much as it can > >about this device in case some software needs to use it. > > > The RSC is pretty much this. A set of registers that are RSC specific at > the address pointed to by the "rsc" reg and the TCS regsiters pointed to > by the "tcs" reg. You do not want to clobber multiple DRVs into the same > device node. It will be a lot confusing for the drivers to determine > which DRV to vote. Well it seems like an RSC contains many DRVs and those DRVs contain many TCSes. This is what I get after talking with Bjorn on IRC. +--------------------------------------------------+ (0x00000) | | | DRV #0 | | | |---------- --------------| (tcs-offset (0xd00)) | DRV0_TCS0 | = | common space | = | cmd sequencer | 0xd00 + 0x14 | | | DRV0_TCS1 | = | common space | 0xd00 + 0x2a0 | cmd sequencer | 0xd00 + 0x2a0 + 0x14 | | | DRV0_TCS2 | = | | | | +--------------------------------------------------+ (0x10000) | | | DRV #1 | | | |---------- --------------| (tcs-offset) | DRV1_TCS0 | = | DRV1_TCS1 | = | DRV1_TCS2 | = +--------------------------------------------------+ (0x20000) | | | DRV #2 | | | |---------- --------------| | DRV2_TCS0 | = | DRV2_TCS1 | = | DRV2_TCS2 | = | DRV2_TCS3 | = | DRV2_TCS4 | = | DRV2_TCS5 | = +--------------------------------------------------+ I think I understand it now. There aren't any "RSC common" registers that are common to the entire RSC. Instead, everything goes into a DRV, or into a common TCS space, or into a TCS "queue". > >Put another way, even if the "apps" RSC is complicated, we should be > >describing it to the best of our abilities in the binding so that when > >it is used by non-linux OSes things still work by simply tweaking the > >drv-id that we use to pick the right things out of the node. > > > >Or we're describing the RSC but it's really a container node that > >doesn't do much besides hold DRVs? So this is described at the wrong > >level? > What we are describing is a DRV, but a standalone DRV alone is useless > without the necessary RSC registers. So its a unique RSC+DRV combination > that is represented here. > = If my understanding is correct up there then the binding could either describe a single RSC DRV, or it could describe all the RSC DRV instances and interrupts going into the RSC "block" and then we can use drv-id to pick the offset we jump to. I imagine we don't have any practical use-case for the entire RSC space because there aren't any common RSC registers to deal with. So we've boiled this all down to describing one DRV and then I wonder why we care about having drv-id at all? It looks to be used to check for a max number of TCS, but that's already described by DT so it doesn't seem very useful to double check what the hardware can tells us. Long story short, we can remove drv-id and just describe drvs by themselves?