Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp2808593pxb; Mon, 17 Jan 2022 06:15:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJwTQL7hclQH8nWW852LuQW9MU1doJOgKC8YNLgLrJ80aEbpzOy1ORKedhhpKoqOrd8NI3Xi X-Received: by 2002:a05:6a00:22c6:b0:4c1:e27b:ab61 with SMTP id f6-20020a056a0022c600b004c1e27bab61mr20775955pfj.79.1642428903794; Mon, 17 Jan 2022 06:15:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642428903; cv=none; d=google.com; s=arc-20160816; b=1KEUVi7VMKfgSZLOqHuN0nt2ZWq/fzZ8wEqQS30gzgt+V3nXdrf55ZA/afLaYDDcRw iFPXhDmm7EOT5d+9a1pyeRj/iQkVZX1M+slxmnk1KDg/LVCP4212YaQns8JpuEgMae2L pe7YIhFOdiSajsH1bduzYr06i91mOpPc9mkugMIs6MLucsrh5tSRG0QND1sxNnHXj/Dk rvR8MAjOvdrFJvvchAFm3y9jBAvJeZ6xbeauR8lEAG0vLw7J4I91XRM+7yEDOvJKwG1i 1hLyhGcDYamb5A6ETdV6V98IwR26Je3eeOkI4h+y46zDuqfEyUvcLkoSbEgmdem8jjTo 6RlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=WJIWiUWalhi2BbS+bckp3FA++wta/bhcud1UlOmtB3Y=; b=CTDuX5D3LK3tZXvqzVewYWFQPTP1ifn8x/y6a7yOCZX6EWXrxS4/HqREeA7Cdbg1eX jAJq9cOOWagX5G5IDVynDq31GcILk+zBC60S8N3n0huysAuHjIogEn87ln2eNAkqJbTl L70o3335rT572IHCAErWf0LUSCVlOP8UKwQBOZODIeY/qHRXq2ghm6fHQoN5b97mmyze B42XZXIndaYFihOE3BF8YqF4JviBYmmewjwGGhCLRLYCxNogHrvrsKsd+w0EwMYyn7yr ZHSN915y2YYlieR2gK6VMeyhmOwDs9PO3LdaiONU77gz2HvY89okwati3tBL/WAFmnk8 W0KQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b="Kr4DnpJ/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w130si13045069pfc.227.2022.01.17.06.14.51; Mon, 17 Jan 2022 06:15:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b="Kr4DnpJ/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234578AbiAQGDR (ORCPT + 99 others); Mon, 17 Jan 2022 01:03:17 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:26583 "EHLO alexa-out-sd-02.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231213AbiAQGDR (ORCPT ); Mon, 17 Jan 2022 01:03:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1642399396; x=1673935396; h=subject:to:cc:references:from:message-id:date: mime-version:in-reply-to:content-transfer-encoding; bh=WJIWiUWalhi2BbS+bckp3FA++wta/bhcud1UlOmtB3Y=; b=Kr4DnpJ/E0So2MkcxpToqM/qw0JLaZ0No0ArfyaCHHs1AVy+8thaSFzW Y7fpHzGOt3U2sECTB6JZ6ws8U3Nqg32sT9R3ELBVRJQ5KTg0ageYqW4HJ bVHhgFlA+ZAUrWYNsfP41nC2AV5JgPIgZYFlX0z0sYUYK/0OtKQ6BBid2 k=; Received: from unknown (HELO ironmsg02-sd.qualcomm.com) ([10.53.140.142]) by alexa-out-sd-02.qualcomm.com with ESMTP; 16 Jan 2022 22:03:16 -0800 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg02-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jan 2022 22:03:15 -0800 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.19; Sun, 16 Jan 2022 22:03:15 -0800 Received: from [10.216.36.108] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.19; Sun, 16 Jan 2022 22:03:07 -0800 Subject: Re: [PATCH v2 1/3] dt-bindings: usb: qcom,dwc3: Add multi-pd bindings for dwc3 qcom To: Rajendra Nayak , Ulf Hansson , Bjorn Andersson , Stephen Boyd CC: Viresh Kumar , Rob Herring , Andy Gross , Greg Kroah-Hartman , Felipe Balbi , Doug Anderson , Matthias Kaehlcke , , , , , , References: <1635152851-23660-1-git-send-email-quic_c_sanm@quicinc.com> <1635152851-23660-2-git-send-email-quic_c_sanm@quicinc.com> From: Sandeep Maheswaram Message-ID: <0153c297-f648-25d1-7f0f-2114f07ef12b@quicinc.com> Date: Mon, 17 Jan 2022 11:33:04 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rajendra, On 10/28/2021 9:26 AM, Rajendra Nayak wrote: > > > On 10/27/2021 7:54 PM, Ulf Hansson wrote: >> On Wed, 27 Oct 2021 at 06:55, Bjorn Andersson >> wrote: >>> >>> On Tue 26 Oct 19:48 CDT 2021, Stephen Boyd wrote: >>> >>>> +Rajendra >>>> >>>> Quoting Bjorn Andersson (2021-10-25 19:48:02) >>>>> On Mon 25 Oct 15:41 PDT 2021, Stephen Boyd wrote: >>>>> >>>>>> >>>>>> When the binding was introduced I recall we punted on the parent >>>>>> child >>>>>> conversion stuff. One problem at a time. There's also the >>>>>> possibility >>>>>> for a power domain to be parented by multiple power domains so >>>>>> translation tables need to account for that. >>>>>> >>>>> >>>>> But for this case - and below display case - the subdomain (the >>>>> device's >>>>> power-domain) is just a dumb gate. So there is no translation, the >>>>> given >>>>> performance_state applies to the parent. Or perhaps such implicitness >>>>> will come back and bite us? >>>> >>>> In the gate case I don't see how the implicitness will ever be a >>>> problem. >>>> >>>>> >>>>> I don't think we allow a power-domain to be a subdomain of two >>>>> power-domains - and again it's not applicable to USB or display >>>>> afaict. >>>> >>>> Ah maybe. I always confuse power domains and genpd. >>>> >>>>> >>>>>>> >>>>>>>> Or we may need to make another part of the OPP binding to >>>>>>>> indicate the >>>>>>>> relationship between the power domain and the OPP and the >>>>>>>> parent of >>>>>>>> the power domain. >>>>>>> >>>>>>> I suspect this would be useful if a power-domain provider needs to >>>>>>> translate a performance_state into a different >>>>>>> supply-performance_state. >>>>>>> Not sure if we have such case currently; these examples are all an >>>>>>> adjustable power-domain with "gating" subdomains. >>>>>> >>>>>> Even for this case, we should be able to have the GDSC map the on >>>>>> state >>>>>> to some performance state in the parent domain. Maybe we need to add >>>>>> some code to the gdsc.c file to set a performance state on the >>>>>> parent >>>>>> domain when it is turned on. I'm not sure where the value for >>>>>> that perf >>>>>> state comes from. I guess we can hardcode it in the driver for >>>>>> now and >>>>>> if it needs to be multiple values based on the clk frequency we >>>>>> can push >>>>>> it out to an OPP table or something like that. >>>>>> >>>>> >>>>> For the GDSC I believe we only have 1:1 mapping, so implementing >>>>> set_performance_state to just pass that on to the parent might do the >>>>> trick (although I haven't thought this through). >>>>> >>>>> Conceptually I guess this would be like calling clk_set_rate() on a >>>>> clock gate, relying on it being propagated upwards. The problem >>>>> here is >>>>> that the performance_state is just a "random" integer without a well >>>>> defined unit. >>>>> >>>> >>>> Right. Ideally it would be in the core code somehow so that if there >>>> isn't a set_performance_state function we go to the parent or some >>>> special return value from the function says "call it on my parent". >>>> The >>>> translation scheme could come later so we can translate the "random" >>>> integer between parent-child domains. >>> >>> As a proof of concept it should be sufficient to just add an >>> implementation of sc->pd.set_performance_state in gdsc.c. But I agree >>> that it would be nice to push this into some framework code, perhaps >>> made opt-in by some GENPD_FLAG_xyz. >>> >>>> At the end of the day the device >>>> driver wants to set a frequency or runtime pm get the device and >>>> let the >>>> OPP table or power domain code figure out what the level is >>>> supposed to >>>> be. >>>> >>> >>> Yes and this is already working for the non-nested case - where the >>> single power-domain jumps between performance states as the opp code >>> switches from one opp to another. >>> >>> So if we can list only the child power-domain (i.e. the GDSC) and have >>> the performance_stat requests propagate up to the parent rpmhpd >>> resource >>> I think we're good. >>> >>> >>> Let's give this a spin and confirm that this is the case... >>> >>>>> >>>>> >>>>> The one case where I believe we talked about having different mapping >>>>> between the performance_state levels was in the relationship >>>>> between CX >>>>> and MX. But I don't think we ever did anything about that... >>>> >>>> Hmm alright. I think there's a constraint but otherwise nobody really >>>> wants to change both at the same time. >>>> >>>>>> >>>>>> Yes, a GDSC is really a gate on a parent power domain like CX or >>>>>> MMCX, >>>>>> etc. Is the display subsystem an example of different clk >>>>>> frequencies >>>>>> wanting to change the perf state of CX? If so it's a good place >>>>>> to work >>>>>> out the translation scheme for devices that aren't listing the CX >>>>>> power >>>>>> domain in DT. >>>>> >>>>> Yes, the various display components sits in MDSS_GDSC but the >>>>> opp-tables >>>>> needs to change the performance_state of MDSS_GDSC->parent (i.e. >>>>> CX or >>>>> MMCX, depending on platform). >>>>> >>>>> As I said, today we hack this by trusting that the base drm/msm >>>>> driver >>>>> will keep MDSS_GDSC on and listing MMCX (or CX) as power-domain >>>>> for each >>>>> of these components. >>>>> >>>>> >>>>> So if we solve this, then that seems to directly map to the static >>>>> case >>>>> for USB as well. >>>>> >>>> >>>> Got it. So in this case we could have the various display components >>>> that are in the mdss gdsc domain set their frequency via OPP and then >>>> have that translate to a level in CX or MMCX. How do we parent the >>>> power >>>> domains outside of DT? I'm thinking that we'll need to do that if MMCX >>>> is parented by CX or something like that and the drivers for those two >>>> power domains are different. Is it basic string matching? >>> >>> In one way or another we need to invoke pm_genpd_add_subdomain() to >>> link >>> the two power-domains (actually genpds) together, like what was done in >>> 3652265514f5 ("clk: qcom: gdsc: enable optional power domain support"). >>> >>> In the case of MMCX and CX, my impression of the documentation is that >>> they are independent - but if we need to express that CX is parent of >>> MMCX, they are both provided by rpmhpd which already supports this by >>> just specifying .parent on mmcx to point to cx. >> >> I was trying to follow the discussion, but it turned out to be a bit >> complicated to catch up and answer all things. In any case, let me >> just add a few overall comments, perhaps that can help to move things >> forward. >> >> First, one domain can have two parent domains. Both from DT and from >> genpd point of view, just to make this clear. >> >> Although, it certainly looks questionable to me, to hook up the USB >> device to two separate power domains, one to control power and one to >> control performance. Especially, if it's really the same piece of HW >> that is managing both things. > [].. >> Additionally, if it's correct to model >> the USB GDSC power domain as a child to the CX power domain from HW >> point of view, we should likely do that. > > I think this would still require a few things in genpd, since > CX and USB GDSC are power domains from different providers. > Perhaps a pm_genpd_add_subdomain_by_name()? > Tried with the changes provided by you  where USB GDSC power domains added as a child to the CX power domain But cx shutdown is not happening  during sytem suspend as we need to keep USB GDSC active in host mode . Regards Sandeep