From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8E6F2E8B81 for ; Fri, 31 Oct 2025 08:38:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761899901; cv=none; b=gu6PNF9JJX6YP+kp9V+nLD1aaVegnfqwqlWGM02TyU28X0Z1l/sv6xqXdsS4sLDCCn7rLxGvMKWw3jwA00uOxv00cuYivrRCECWvIMJRDCNW9yr1T+vgKahzEiQpiJlXzF+2tV1IGeq40yMrZC9QASDxGUGaRmqLd3U5bCe4cU8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761899901; c=relaxed/simple; bh=mvdRL0eRXqSA+526MRb8wrH/hIEEZzYdIMjUsLSo1m8=; h=Message-ID:Date:MIME-Version:From:Subject:To:Cc:References: In-Reply-To:Content-Type; b=bWpjoFse4CHkLvZVNPepOsU173Tq/wP/8cRC9WL4CZE3dXszLuAod1q+EvW0a+dXiyrk0bOlxRKvGHXyP3Dhb4ukbCaSgfq2ZmQHSOZryTojXG+L8tR2NAWWucjCcacMu5xGJiuPjA7zwZOiwDEQ4294D3ukbzOky8Y8YMcBmQk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=jgCtW3qK; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="jgCtW3qK" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-427007b1fe5so1495902f8f.1 for ; Fri, 31 Oct 2025 01:38:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1761899898; x=1762504698; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:organization:autocrypt :content-language:references:cc:to:subject:reply-to:from:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=f6lvlxZOeNShZGHSRhU6n7ci4eXoYPRCi1nv1xhCxuA=; b=jgCtW3qK5geev2iqj26PVjKsaoO+eSCRdhHPpqOSCIQPv67Amebmtu175bz1379NXd FHFq3mbSf4KbW12RIXTsxU29irz55Ub69zOeuViqpbPLlM8MUVqdUH1ndNblA+g6lJ4Q GiZAOd89k5m1Tj/T/lYJJDZ3W3AX8I9XUIl4dNR9jxzw86UTybY7uNNggnjBQXaAb6GJ 6gY+iCYrfw/cng/mFAwSjBqqzASmP6xTocdC1OEA962u3/gPLnh0FZhIt+BTJFuyT4hX 9GFgN36UpnwpumHKpT5tYeF50KDQvRMZpOA+AqDYyD9nu6bOxarFayvRzPfTnT4eZcEV 6ihg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761899898; x=1762504698; h=content-transfer-encoding:in-reply-to:organization:autocrypt :content-language:references:cc:to:subject:reply-to:from:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=f6lvlxZOeNShZGHSRhU6n7ci4eXoYPRCi1nv1xhCxuA=; b=CwVvGIeKSFVWd2oHoU782j4W3SLltlz0zuPyDyZpSOw3ZePuBrfE0t/6gPkruUM3S3 8owatkoUP+WA5qoaBOApdoC8j7MAFZIQkipXUX1/4vGh7SFcbObSF95NpZn9Z6ygXRLk y0srTvE9OaqtKbM7wWysyZl/EdJTLlYTTbuzyP76rmKTQ8Wf+kfmDjvNdEH73ZalCmba 2tLx1hEXUR4O50T2up13iyyCBUDA180vN4bYz9y4t+vGQm7jSAS8L57IigSPoETjMcL1 Ad6JTCh6UMpmwdE/R3l/s1fcTizYBWGGTa+bofoISCk+SgNr+rvIQGzSvUnNwBxt9nXR I8Sw== X-Forwarded-Encrypted: i=1; AJvYcCXS7n58OrkyVkj6V/VPXw5eBvXGnMHM43d8RzQyZYqIqzPSfhGsm9Qkqy18H92PETBcffeqLiTx+hdCLb4=@vger.kernel.org X-Gm-Message-State: AOJu0YyGUxRg/8wJX151y73fv/2AAAifzyJrN839Ddosts/jvTVgVk8b irOTOR2/t9GdHRqaFKhOi68DbHP/CRF8CaK666N55KT1qusRnUDMnCBhdXbT2PH3Ry4= X-Gm-Gg: ASbGncv1TmcnJwGGXpkXjfDl8PV/Se1AWXbjed/l61+ExMlbI/LSjIOSR+aNxMP7KlN RPrANPAqUbrugkb2YFUuHcUt6MMby+rmgYgXvoh+KlPknNkrJdfQfeWKKOdcGq/e1oI+zpv2PNE ag/FbjMOwVzpNo3GHazKVj43Pkwm4h7qArpv2LeVP6Z8WDm7i1DCqUnzvbutAQizyNUJUXUn21P S9r/wDwk+/6YYiBOzRnhTqJkcGLcaNYfXSmN4FmHMLGpp/Kw4Ytyv/Gd/y86H6s5AkctuB4rnJr f4i/mZv2L2WcgSfFemcc86RqlYMlmCKzuKkzLnE5Y6EbfFyZth3zw2Ue3q/Mkxr9bKBL+FDJabr u4+qFR5LBGLlyiqA00Ujg/Fm2NtVaN1RTrhAmTTVyjvy9QTdQzl3b4BQMsaUq+ZBQvl/kcntIWz LK0tTsUnUHbQ/8FKTbJ9uqn7I350lDS6ScIBsQA++X2TtTuZeLwPz37wzr4D5IIkg= X-Google-Smtp-Source: AGHT+IErXLg/QmSgzOAE18wcz9HH6P7fSPY03Id1jjTfataBPrbX11spvWK9xxIDtFbQtBn/mPn0cA== X-Received: by 2002:a05:6000:2489:b0:429:b751:7929 with SMTP id ffacd0b85a97d-429bd6ae1f4mr2336595f8f.45.1761899897805; Fri, 31 Oct 2025 01:38:17 -0700 (PDT) Received: from ?IPV6:2a01:e0a:cad:2140:d967:2bcf:d2d0:b324? ([2a01:e0a:cad:2140:d967:2bcf:d2d0:b324]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-429c13edc36sm2278703f8f.37.2025.10.31.01.38.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 31 Oct 2025 01:38:17 -0700 (PDT) Message-ID: Date: Fri, 31 Oct 2025 09:38:15 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Neil Armstrong Reply-To: Neil Armstrong Subject: Re: [PATCH RFC RFT] drm/msm: adreno: attach the GMU device to a driver To: Akhil P Oommen Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter References: <20251022-topic-adreno-attach-gmu-to-driver-v1-1-999037f7c83e@linaro.org> Content-Language: en-US, fr Autocrypt: addr=neil.armstrong@linaro.org; keydata= xsBNBE1ZBs8BCAD78xVLsXPwV/2qQx2FaO/7mhWL0Qodw8UcQJnkrWmgTFRobtTWxuRx8WWP GTjuhvbleoQ5Cxjr+v+1ARGCH46MxFP5DwauzPekwJUD5QKZlaw/bURTLmS2id5wWi3lqVH4 BVF2WzvGyyeV1o4RTCYDnZ9VLLylJ9bneEaIs/7cjCEbipGGFlfIML3sfqnIvMAxIMZrvcl9 qPV2k+KQ7q+aXavU5W+yLNn7QtXUB530Zlk/d2ETgzQ5FLYYnUDAaRl+8JUTjc0CNOTpCeik 80TZcE6f8M76Xa6yU8VcNko94Ck7iB4vj70q76P/J7kt98hklrr85/3NU3oti3nrIHmHABEB AAHNKk5laWwgQXJtc3Ryb25nIDxuZWlsLmFybXN0cm9uZ0BsaW5hcm8ub3JnPsLAkQQTAQoA OwIbIwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBInsPQWERiF0UPIoSBaat7Gkz/iuBQJk Q5wSAhkBAAoJEBaat7Gkz/iuyhMIANiD94qDtUTJRfEW6GwXmtKWwl/mvqQtaTtZID2dos04 YqBbshiJbejgVJjy+HODcNUIKBB3PSLaln4ltdsV73SBcwUNdzebfKspAQunCM22Mn6FBIxQ GizsMLcP/0FX4en9NaKGfK6ZdKK6kN1GR9YffMJd2P08EO8mHowmSRe/ExAODhAs9W7XXExw UNCY4pVJyRPpEhv373vvff60bHxc1k/FF9WaPscMt7hlkbFLUs85kHtQAmr8pV5Hy9ezsSRa GzJmiVclkPc2BY592IGBXRDQ38urXeM4nfhhvqA50b/nAEXc6FzqgXqDkEIwR66/Gbp0t3+r yQzpKRyQif3OwE0ETVkGzwEIALyKDN/OGURaHBVzwjgYq+ZtifvekdrSNl8TIDH8g1xicBYp QTbPn6bbSZbdvfeQPNCcD4/EhXZuhQXMcoJsQQQnO4vwVULmPGgtGf8PVc7dxKOeta+qUh6+ SRh3vIcAUFHDT3f/Zdspz+e2E0hPV2hiSvICLk11qO6cyJE13zeNFoeY3ggrKY+IzbFomIZY 4yG6xI99NIPEVE9lNBXBKIlewIyVlkOaYvJWSV+p5gdJXOvScNN1epm5YHmf9aE2ZjnqZGoM Mtsyw18YoX9BqMFInxqYQQ3j/HpVgTSvmo5ea5qQDDUaCsaTf8UeDcwYOtgI8iL4oHcsGtUX oUk33HEAEQEAAcLAXwQYAQIACQUCTVkGzwIbDAAKCRAWmrexpM/4rrXiB/sGbkQ6itMrAIfn M7IbRuiSZS1unlySUVYu3SD6YBYnNi3G5EpbwfBNuT3H8//rVvtOFK4OD8cRYkxXRQmTvqa3 3eDIHu/zr1HMKErm+2SD6PO9umRef8V82o2oaCLvf4WeIssFjwB0b6a12opuRP7yo3E3gTCS KmbUuLv1CtxKQF+fUV1cVaTPMyT25Od+RC1K+iOR0F54oUJvJeq7fUzbn/KdlhA8XPGzwGRy 4zcsPWvwnXgfe5tk680fEKZVwOZKIEuJC3v+/yZpQzDvGYJvbyix0lHnrCzq43WefRHI5XTT QbM0WUIBIcGmq38+OgUsMYu4NzLu7uZFAcmp6h8g Organization: Linaro In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 10/30/25 22:29, Akhil P Oommen wrote: > On 10/22/2025 6:14 PM, Neil Armstrong wrote: >> Due to the sync_state is enabled by default in pmdomain & CCF since v6.17, >> the GCC and GPUCC sync_state would stay pending, leaving the resources in >> full performance: >> gcc-x1e80100 100000.clock-controller: sync_state() pending due to 3d6a000.gmu >> gpucc-x1e80100 3d90000.clock-controller: sync_state() pending due to 3d6a000.gmu >> >> In order to fix this state and allow the GMU to be properly >> probed, let's add a proper driver for the GMU and add it to >> the MSM driver components. >> >> Only the proper GMU has been tested since I don't have >> access to hardware with a GMU wrapper. >> >> Signed-off-by: Neil Armstrong >> --- >> drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 354 ++++++++++++++--------------- >> drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 - >> drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 3 - >> drivers/gpu/drm/msm/adreno/adreno_device.c | 4 + >> drivers/gpu/drm/msm/adreno/adreno_gpu.h | 4 + >> drivers/gpu/drm/msm/msm_drv.c | 16 +- >> 6 files changed, 192 insertions(+), 195 deletions(-) >> >> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c >> index fc62fef2fed8..6e7c3e627509 100644 >> --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c >> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c >> @@ -1859,11 +1859,14 @@ void a6xx_gmu_sysprof_setup(struct msm_gpu *gpu) >> pm_runtime_put(&gpu->pdev->dev); >> } >> >> -void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu) >> +static void a6xx_gmu_unbind(struct device *dev, struct device *master, void *data) >> { > > I feel we should keep gmu and gmu_wrapper implementations separate. It > is already overloaded. How about adding a separate gmu_wrapper_bind_ops > and keep it in the match data? Good idea, will try something like that. > >> - struct adreno_gpu *adreno_gpu = &a6xx_gpu->base; >> + struct platform_device *pdev = to_platform_device(dev); >> + struct msm_drm_private *priv = dev_get_drvdata(master); >> + struct msm_gpu *gpu = priv->gpu; > > << snip >> > >> static inline uint32_t get_wptr(struct msm_ringbuffer *ring) >> { >> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c >> index 7e977fec4100..0618da7e8b40 100644 >> --- a/drivers/gpu/drm/msm/msm_drv.c >> +++ b/drivers/gpu/drm/msm/msm_drv.c >> @@ -998,18 +998,30 @@ static const struct of_device_id msm_gpu_match[] = { >> { }, >> }; >> >> +static const struct of_device_id msm_gmu_match[] = { >> + { .compatible = "qcom,adreno-gmu" }, >> + { .compatible = "qcom,adreno-gmu-wrapper" }, >> + { }, >> +}; >> + >> static int add_gpu_components(struct device *dev, >> struct component_match **matchptr) >> { >> - struct device_node *np; >> + struct device_node *np, *gmu; >> >> np = of_find_matching_node(NULL, msm_gpu_match); >> if (!np) >> return 0; >> >> - if (of_device_is_available(np) && adreno_has_gpu(np)) >> + if (of_device_is_available(np) && adreno_has_gpu(np)) { >> drm_of_component_match_add(dev, matchptr, component_compare_of, np); >> >> + gmu = of_find_matching_node(NULL, msm_gmu_match); > > Instead of this, we can probably use the gmu phandle from "qcom,gmu" > property? That is quicker and also doesn't assume that there is only a > single GPU. Ack you're right, let's do this since we have the GPU node already. > >> + if (of_device_is_available(gmu)) >> + drm_of_component_match_add(dev, matchptr, component_compare_of, gmu); >> + of_node_put(gmu); > I think you missed the recently added headless support. Please check > separate_gpu_kms modparam and msm_gpu_probe(). I saw it but seems I probably forgot the check if it's still functional, will double check. Thanks, Neil > > -Akhil > >> + } >> + >> of_node_put(np); >> >> return 0; >> >> --- >> base-commit: 211ddde0823f1442e4ad052a2f30f050145ccada >> change-id: 20251022-topic-adreno-attach-gmu-to-driver-e47025fd7ebb >> >> Best regards,