Received: by 10.213.65.68 with SMTP id h4csp160094imn; Fri, 6 Apr 2018 18:18:33 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/UXBMm/4pDOnm0N2/oTBCtg9epsb90YpzjdorpXQmV/xpa9heEBAbdQjHrsKlbuGFYMnLO X-Received: by 2002:a17:902:2f:: with SMTP id 44-v6mr29603560pla.187.1523063913228; Fri, 06 Apr 2018 18:18:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523063913; cv=none; d=google.com; s=arc-20160816; b=uvxSSX8w7PsOtKozwLDicA2o24zDj9HoKqjkaw7AUKwQvjhu1GNZSBsKxHs27AcoDZ iPaAGx/N9HVIfEBWvyyWxzkbSEa2TnhnjEYdCTdHcu03GCgg6gFcFGaitfwl+zjtO/0Q 6Vu9oM8Y1/PGpZEhg0MYIEO88mSTWYMk1RzoWSYq/SDvh1MoyP0RYXb5WmliavHJECnz YfkaFrSNtSatYacL7kRuEGSnyEaBZoYBHUUPpk/W1j6pwzwb0Kv509DNspcJuzJP4/LA 8PEUdcHtw1zw/6S762HseIWD0JSA6EzXJ8BB5tb5VQSl7Zpuv6uQ9M36APW46rb03HDP QVZQ== 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=qkQsmtb124dP1cHhDIJDwckyDjdYteFGfRGn5Slfwks=; b=KoLz0k+Qbc+8RuAAIrRYlN2NutjmU7tmEOlYFziumrZRX/q7OpACSOjta1QP29ZLDx JKiDwHF1XpmtxGEW99eI/WeUlSdx/C57vPam9ZbwHHA4yaDOKDsTxwa44Lv80QtMOHz8 PVYn59F9TjWPHAsGDPfWgQ5JiV3DfLgQQQsB8Ftavj+gp+Y44Jwl3h0p4rqTOAhkOIXm HFBkCUbjjvXLfY6Vd3N5z3dtZ86yPCcy/Yylzo47WkcGB03CBNMkoqjoee0uHVuJWvUV petFQuU3hiAAHJzkkD0aej7BaBmsZaYJeZ8MVjao4CwtuFtmJnLSy1/VoOqoZghdDp9h q1Wg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=FORKqOHz; 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 o11si2594984pgp.493.2018.04.06.18.17.54; Fri, 06 Apr 2018 18:18:33 -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=FORKqOHz; 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 S1751523AbeDGBOp (ORCPT + 99 others); Fri, 6 Apr 2018 21:14:45 -0400 Received: from mail-pl0-f66.google.com ([209.85.160.66]:35290 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751298AbeDGBOm (ORCPT ); Fri, 6 Apr 2018 21:14:42 -0400 Received: by mail-pl0-f66.google.com with SMTP id 61-v6so1644928plb.2 for ; Fri, 06 Apr 2018 18:14:42 -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=qkQsmtb124dP1cHhDIJDwckyDjdYteFGfRGn5Slfwks=; b=FORKqOHzu/JdLyB8NQo5ySkQgEYTAXHXILJ4vPHkGK0Ok0KJNa/1msQtKoiI/vJZC3 23IMfVgnm+n2Rsj72UuFdF177EX0s8pQS4TvDntgFWeMBGycGNPmqAzxLVJYDsAOKrrN PSW/JDV+W+KMXfpBp61KJOjolsZ3qJScPADxc= 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=qkQsmtb124dP1cHhDIJDwckyDjdYteFGfRGn5Slfwks=; b=oGkzjav7PBsvVX1NUsTFHXxfV0LUoQtxqRwDcsLH3m4XBgDej/0tXHI4vfWWk6JxRT 8yZQ3pwRLAV3PTlfWJFnA3EzeKHXWqhzrc/Stg10HzUQEv5f1DA4inUADV4T8nAubL82 0l6iay19iBgD+x0atFYyJ7TGAciGSUoVHhTdUjmsQp8yM95UsCesA/vRuihfm1e7A7Ug d/jVd2Jv5EYF9OKCgYwk3aQjsOIpx47dJMG/IN9PxtjBkngM/FNCYdp6n09/UUsLzXcc S1W+utobnNFIYyWyo5RBRm70Nyq3Ki2Y9Gkfd0fAOJozUsdmkdvP0bVRYzXO/YnlAv3H m34A== X-Gm-Message-State: AElRT7HZB6pFJZt8hh0tpvKRY+EIEM/R+sXVTfYwGuhbcDg81fR+pFul SjivHPJuw2TL7pGJkrnt4cvkiA== X-Received: by 2002:a17:902:8212:: with SMTP id x18-v6mr30248521pln.372.1523063681721; Fri, 06 Apr 2018 18:14:41 -0700 (PDT) Received: from localhost ([2620:0:1000:1511:d30e:62c6:f82c:ff40]) by smtp.gmail.com with ESMTPSA id c62sm23521859pfk.179.2018.04.06.18.14.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 06 Apr 2018 18:14:41 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: Lina Iyer , andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org From: Stephen Boyd In-Reply-To: <20180405161834.3850-3-ilina@codeaurora.org> Cc: rnayak@codeaurora.org, bjorn.andersson@linaro.org, linux-kernel@vger.kernel.org, evgreen@chromium.org, dianders@chromium.org, Lina Iyer , devicetree@vger.kernel.org References: <20180405161834.3850-1-ilina@codeaurora.org> <20180405161834.3850-3-ilina@codeaurora.org> Message-ID: <152306368031.94378.14957212064809086345@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, 06 Apr 2018 18:14:40 -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-05 09:18:26) > diff --git a/Documentation/devicetree/bindings/soc/qcom/rpmh-rsc.txt b/Do= cumentation/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 @@ > +RPMH RSC: > +------------ > + > +Resource Power Manager Hardened (RPMH) is the mechanism for communicatin= g with > +the hardened resource accelerators on Qualcomm SoCs. Requests to the res= ources > +can be written to the Trigger Command Set (TCS) registers and using a (= addr, > +val) pair and triggered. Messages in the TCS are then sent in sequence o= ver an > +internal bus. > + > +The hardware block (Direct Resource Voter or DRV) is a part of the h/w e= ntity > +(Resource State Coordinator a.k.a RSC) that can handle a multiple sleep = and s/ a / / > +active/wake resource requests. Multiple such DRVs can exist in a SoC and= can > +be written to from Linux. The structure of each DRV follows the same tem= plate > +with a few variations that are captured by the properties here. > + > +A TCS may be triggered from Linux or triggered by the F/W after all the = CPUs > +have powered off to facilitate idle power saving. TCS could be classifie= d as - s/ -/:/ > + > + SLEEP, /* Triggered by F/W */ > + WAKE, /* Triggered by F/W */ > + ACTIVE, /* Triggered by Linux */ > + CONTROL /* Triggered by F/W */ Drop the commas? > + > +The order in which they are described in the DT, should match the hardwa= re > +configuration. > + > +Requests can be made for the state of a resource, when the subsystem is = active > +or idle. When all subsystems like Modem, GPU, CPU are idle, the resource= state > +will be an aggregate of the sleep votes from each of those subsystems. C= lients > +may request a sleep value for their shared resources in addition to the = active > +mode requests. > + > +Properties: > + > +- compatible: > + Usage: required > + Value type: > + Definition: Should be "qcom,rpmh-rsc". > + > +- reg: > + Usage: required > + Value type: > + Definition: The first register specifies the base address of the = DRV. > + The second register specifies the start address of the > + TCS. > + > +- reg-names: > + Usage: required > + Value type: > + Definition: Maps the register specified in the reg property. Must= be > + "drv" and "tcs". > + > +- interrupts: > + Usage: required > + Value type: > + Definition: The interrupt that trips when a message complete/resp= onse > + is received for this DRV from the accelerators. > + > +- qcom,drv-id: > + Usage: required > + Value type: > + Definition: the id of the DRV in the RSC block. > + > +- qcom,tcs-config: > + Usage: required > + Value type: > + Definition: the tuple defining the configuration of TCS. > + Must have 2 cells which describe each TCS type. > + . > + The order of the TCS must match the hardware > + configuration. > + - Cell #1 (TCS Type): TCS types to be specified - > + SLEEP_TCS > + WAKE_TCS > + ACTIVE_TCS > + CONTROL_TCS > + - Cell #2 (Number of TCS): > + > +- label: > + Usage: optional > + Value type: > + Definition: Name for the RSC. The name would be used in trace log= s. > + > +Drivers that want to use the RSC to communicate with RPMH must specify t= heir > +bindings as child of the RSC controllers they wish to communicate with. s/child/child nodes/ > + > +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 l= ike > +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 beginning 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 instead? 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 too? 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 and the compatible string would say drv instead of rsc? BTW, what are the other DRVs used for in the apps RSC? > + reg-names =3D "drv", "tcs"; > + interrupts =3D ; > + qcom,drv-id =3D <2>; > + qcom,tcs-config =3D , > + , > + , > + ; > + }; > + > +Example 2: > + > +For a TCS whose RSC base address is 0xAF20000 and is at DRV id of 0, the > +register offsets for DRV0 start at 01C00, the register calculations are = like > +this - > +First tuple: 0xAF20000 > +Second tuple: 0xAF20000 + 0x1C00 =3D 0xAF21C00 > + > + disp_rsc: rsc@af20000 { > + label =3D "disp_rsc"; > + compatible =3D "qcom,rpmh-rsc"; > + reg =3D <0xaf20000 0x10000>, <0xaf21c00 0x3000>; Ok. The TCS offset seems totally random now. > + reg-names =3D "drv", "tcs"; > + interrupts =3D ; > + qcom,drv-id =3D <0>; > + qcom,tcs-config =3D , > + , > + , > + ; > + };