Received: by 10.213.65.68 with SMTP id h4csp2800523imn; Mon, 9 Apr 2018 09:12:52 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/OWUSeFf03IIP0Tjjrx/iAb5uyAd61JeNr7Gbuh00xoeG3C/bv3LKwluA5XsoRT0MgDFYB X-Received: by 10.101.74.193 with SMTP id c1mr25635677pgu.116.1523290371992; Mon, 09 Apr 2018 09:12:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523290371; cv=none; d=google.com; s=arc-20160816; b=NkWzjA9+Y+KCa7F/1jEyDiqWBKaY1xx3W/7EMV+vmILEc/9N6fVuM1eRNnbKz+7Avr MyfCs4s4UHKVx28N4f3ObA4IP95RwY+qcwG9cdWnZtPFI37ZOWYxba5mR3uwnI5iS6OU Iaeq405Lx31vvjyACA/tW+vGLWJ+274+LV1P4fp7qlyUU2I4X2elvrjN14jE8kr/Tt8v BMEaorKQkz6DIWRtGaC2pO+4XDYdDsNKBSxrKKU/b8yMKJqqEdVKNNtjdSJoii7I2fGz 54ya1QTKUV5Y7mkX92u4tRj0F4+UxgkcBwoQLF2s/kweHEmTRZFxaBbkZIBf0MDzul+l 8ssg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dmarc-filter:dkim-signature:dkim-signature :arc-authentication-results; bh=bMlbbgV9+ug8T/9DYqXo98S3SCWhiQ+6hEDC5F+WBVg=; b=jIM8S42LWGIu+XKbXcnxgHA3Y/KscSYiW5RwdXY3ItUsIG7ThYwjKHoqNkb4xDTFqb 6nG1dL8fFguynSoHcjiuv+O8mxgGxfv1Wo5t5AS6KAwEsdBcPbK1F2vJFrKq8r6FDkuX Aepbb8mjC08rIhIx4x+nFRZYxEuYAUuO1itCRLYzNa+11m3zu6DMSWJ28YZ9ytdxuUcb KhzGVy45ZLto2iPwC08+G2/WdLz0CRp06FZuHSKUcMy3rJqbP690ADo/hEmBx1JPaiRs pQdQEysgTZfiG7HaCdB6IjFF4G/xybzXmMhg03S36+Bskivahu2mA/UTUkD5LRTjFrVd ykLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=PxuiLaL0; dkim=pass header.i=@codeaurora.org header.s=default header.b=m2qsWcJq; 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 e98-v6si568391plb.273.2018.04.09.09.12.14; Mon, 09 Apr 2018 09:12:51 -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=@codeaurora.org header.s=default header.b=PxuiLaL0; dkim=pass header.i=@codeaurora.org header.s=default header.b=m2qsWcJq; 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 S1753273AbeDIQIG (ORCPT + 99 others); Mon, 9 Apr 2018 12:08:06 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:50414 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753167AbeDIQID (ORCPT ); Mon, 9 Apr 2018 12:08:03 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id E827460386; Mon, 9 Apr 2018 16:08:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1523290083; bh=0s1PQudy0ORG77HoHZforxcSqB8tFPqWE7Zjn3Cba0c=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=PxuiLaL0c/DEnn1P5EZ03WbGJRwaM0Im/0froelo97dmhaVNRNdbS48aOUDcsYB6E ObBWozRsQkK1JxfQBcyoelF7f0rnNTMUSJhlcUNl97PsnJDUeJlAwW6dqltgV6pGvb dhz6642cVZGJ5CIAjSCozQd+BrOYrNamFF33ocK0= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from localhost (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: ilina@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id A6DEF60386; Mon, 9 Apr 2018 16:08:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1523290081; bh=0s1PQudy0ORG77HoHZforxcSqB8tFPqWE7Zjn3Cba0c=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=m2qsWcJq3V7ltwudsjszEBwGpuT7OxMtQQ9PLYkWS2XfpGp+Cob8h6Lfh9he+lKk2 nL+d29iP/MQLs2hVelEK266ChOO62Yd/GwJpiJwJR8mHNVOzdM/fp8SigGkg5voOTP whZam0l7ZS1bdeEkTKbVZrNr4ZdGoRTovq//bc7g= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org A6DEF60386 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=ilina@codeaurora.org Date: Mon, 9 Apr 2018 10:08:00 -0600 From: Lina Iyer To: Stephen Boyd 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 Subject: Re: [PATCH v5 02/10] dt-bindings: introduce RPMH RSC bindings for Qualcomm SoCs Message-ID: <20180409160800.GC19682@codeaurora.org> References: <20180405161834.3850-1-ilina@codeaurora.org> <20180405161834.3850-3-ilina@codeaurora.org> <152306368031.94378.14957212064809086345@swboyd.mtv.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <152306368031.94378.14957212064809086345@swboyd.mtv.corp.google.com> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.txt 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 @@ >> +RPMH RSC: >> +------------ >> + >> +Resource Power Manager Hardened (RPMH) is the mechanism for communicating with >> +the hardened resource accelerators on Qualcomm SoCs. Requests to the resources >> +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 over an >> +internal bus. >> + >> +The hardware block (Direct Resource Voter or DRV) is a part of the h/w entity >> +(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 template >> +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 classified 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 hardware >> +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. Clients >> +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/response >> + 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 logs. >> + >> +Drivers that want to use the RSC to communicate with RPMH must specify their >> +bindings as child of the RSC controllers they wish to communicate with. > >s/child/child nodes/ > > Ok to these as well as the above. >> + >> +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 = 0x179E0000 >> +Second tuple: 0x179E0000 + 0xD00 = 0x179E0D00 >> + >> + apps_rsc: rsc@179e000 { >> + label = "apps_rsc"; >> + compatible = "qcom,rpmh-rsc"; >> + reg = <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 = "qcom,rpmh-rsc"; > reg = <0x179c0000 0x10000>, > <0x179d0000 0x10000>, > <0x179e0000 0x10000>; > qcom,tcs-offset = <0xd00>; > qcom,drv-id = <0/1/2>; > interrupts = , > , > ; > } > >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? > 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. The memory organization of the RSC mandates that we know the DRV id to access registers specific to the DRV. 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 benefit describing the whole RSC as it is not usable from Linux (because of access restrictions). >> + reg-names = "drv", "tcs"; >> + interrupts = ; >> + qcom,drv-id = <2>; >> + qcom,tcs-config = , >> + , >> + , >> + ; >> + }; >> + >> +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 = 0xAF21C00 >> + >> + disp_rsc: rsc@af20000 { >> + label = "disp_rsc"; >> + compatible = "qcom,rpmh-rsc"; >> + reg = <0xaf20000 0x10000>, <0xaf21c00 0x3000>; > >Ok. The TCS offset seems totally random now. > Yes it would appear so. Because the register space is optimized based on the functionality supported by the RSC, the TCS for a DRV is at a different offset in the RSC. Hence the explicit description of the address in the binding. Thanks, Lina >> + reg-names = "drv", "tcs"; >> + interrupts = ; >> + qcom,drv-id = <0>; >> + qcom,tcs-config = , >> + , >> + , >> + ; >> + };