From patchwork Fri Jun 20 10:31:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Weiss X-Patchwork-Id: 899155 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (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 3DDF9283FC3 for ; Fri, 20 Jun 2025 10:31:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750415498; cv=none; b=ePeqB35m9ujVoz2GcFyjR4EtkMfzUGeA/hzr0q043qd4eVCI6LiPIGhDcUbQuHgL+B5OT7omsVOC2C1Gp+Vt8hmNCFo8V9LMGzORcW8zYyjYXzh/RN31oStrLFUT3CAmF7JhKjMDRbn+EtT/xz4rTjsFmzjAb6rw/ZNvF0o1+wc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750415498; c=relaxed/simple; bh=WbYAkf28JuDB96zhXvwINlUm7Z+jr4BgOqrEfl46LOQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Cn5uqE46aRG9NOC8YAkCAw3dUcWmznEe8CHFMnlHVPm7ZI+Q4NN+B1Z6auEv3gyzHuqiAq2z+C8F2UEymYMLltMoPRsX3NV7BcXYB7zMBC+wmRJ3L1b6DVADv+VAR3W/mLkGMHcxsRLAdgGLtwfAavU+szH5oLe6p0Wlwp+Rv+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=fairphone.com; spf=pass smtp.mailfrom=fairphone.com; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b=0YERWasn; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=fairphone.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fairphone.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b="0YERWasn" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-ade4679fba7so324758066b.2 for ; Fri, 20 Jun 2025 03:31:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fairphone.com; s=fair; t=1750415494; x=1751020294; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=X8TW+dnA/RLSUCo5w0FhkO5CxTqAKcs/iJjNLMWWbto=; b=0YERWasncf+NVmlsSfe8Cv1whAklJamFlVlB7/HIsEaUEq8YeXWyCvEjSYDSxCZsja bn67UXwW55iwrWuYTe9uhhTarQ6Cy+o+ThNOPy4NACCB+tIfEPtDNVg8xk1fZBoZSX1b ZiOruCxw2qdq6mQwTWc7e2wm1is132LuTqyp+fG92tfOhkPGVo17WnslDgb+uPeiyIee 9BtXInIW8VQg4LjOHf4Z+4a8qHafFUPkT94nHmp34PJewSC8nw0XXMlwiP1gS4GbiewR zhydQFMMw+zqR3K5FlZA0509eKb+ySUXM3iOKqkDIKV3LYi+XDFQJQiI62RX3l3C5WIx 8PLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750415494; x=1751020294; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=X8TW+dnA/RLSUCo5w0FhkO5CxTqAKcs/iJjNLMWWbto=; b=JS0FWXGNRUI1QWWEQk24zivjnKMmJIwbtoG2hAqRbnYdnQqJxxVZ4jNlzweZNYcp0E Nps4mu/nPFKDW9/v2mqrgpLYaTIQ9YMZZGP+TxTxec1lw1fdfLMFDwVcejafwauqCe7q fuk2OfBC95/t2yXnKcoOf+QZAgSvM2rfyUOaU0Keuu04yZsw0Nt+My8mBiXyFAC/m5bG V/PlNWGQdjgZpNNuAUyRESawrG6fbkckZPtFQHsxoxPxYIE4E7EJE49PJyTPcdhRya3w Ks1INj3wwCJdI1oexBG4xbypKH8Vdh23iqASctvreAbVVL+nUpqk1rsKHYIBD5J2j0yh 5T6w== X-Gm-Message-State: AOJu0YxmKcKzMBrn3ZYsUhFtEgAF3Y/5eLK86WyipwhV494ZGSzUkYWe uGLbFq80xPE+I4c1mZVcm4UgUAqfFHqZsjFiKlFDGfrSRDCQtB7pHy01JoZ+4JUa2KTR4gA+5QS sEhpV X-Gm-Gg: ASbGncv1t4W89oshbuz1MXSQBjHwgfh1oHVxsFbrxzZKDY4HGWwjL+r8IUYTSaxap05 Vqj13DWYsX0Xwgio2FY9AugkuJzhx8D3VUGMe3f6s66nrhJ//k8s96zPZRemXidfIAVdabOwQjc gSq6thPqTYAyaPSmPUUvsg6AiaQwKV6G3GgVlXCL0l6kPgd/SXtyeYwQQNrCOsOn00FcfJE4aKd wKGQXZmsQuOSBujmCuBOMAwuxDedSG4xo9mYHE8rXo6gX8Q7w/0AzH7M65EJLKMOQanD96ZOJ1i At9G94sXGuwfiogXKOy7Q9EURtM2ueLM3nrOUuLeNW+WT/uIlJ8JHoBr4Kw+BOFMsxG5bzjvSBF cgFAuHtVP1plqyrP8cDAilQ8zKquTk/MU X-Google-Smtp-Source: AGHT+IE9P6hDfRXmnpE+5S+EKxKkHp70DsQJ2ovXtC7hTz0ZIMVcZscGLt+vhpJFn076myB8MB2log== X-Received: by 2002:a17:906:dc8d:b0:ad8:9257:5735 with SMTP id a640c23a62f3a-ae0578f527emr214907766b.3.1750415494301; Fri, 20 Jun 2025 03:31:34 -0700 (PDT) Received: from otso.local (144-178-202-138.static.ef-service.nl. [144.178.202.138]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae0541b6f5csm138047366b.122.2025.06.20.03.31.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Jun 2025 03:31:34 -0700 (PDT) From: Luca Weiss Date: Fri, 20 Jun 2025 12:31:25 +0200 Subject: [PATCH 1/3] dt-bindings: display: simple-framebuffer: Add interconnects property Precedence: bulk X-Mailing-List: linux-fbdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250620-simple-drm-fb-icc-v1-1-d92142e8f74f@fairphone.com> References: <20250620-simple-drm-fb-icc-v1-0-d92142e8f74f@fairphone.com> In-Reply-To: <20250620-simple-drm-fb-icc-v1-0-d92142e8f74f@fairphone.com> To: Hans de Goede , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Javier Martinez Canillas , Helge Deller Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Weiss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750415493; l=1090; i=luca.weiss@fairphone.com; s=20250611; h=from:subject:message-id; bh=WbYAkf28JuDB96zhXvwINlUm7Z+jr4BgOqrEfl46LOQ=; b=Y2GDVlFS+pU31aOX4ttTn8hlbLrxRlFtAH65SYN7sC9Zi1EhHz2D8Jo4kgsda6sDYGZfr6MTp AOzkGxhs9TXBET7U25bdMMFdcIgeFo2aN4c/Q85bn4pS2/9RgeCHpZw X-Developer-Key: i=luca.weiss@fairphone.com; a=ed25519; pk=O1aw+AAust5lEmgrNJ1Bs7PTY0fEsJm+mdkjExA69q8= Document the interconnects property which is a list of interconnect paths that is used by the framebuffer and therefore needs to be kept alive when the framebuffer is being used. Signed-off-by: Luca Weiss --- Documentation/devicetree/bindings/display/simple-framebuffer.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/display/simple-framebuffer.yaml b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml index 296500f9da05e296dbbeec50ba5186b6b30aaffc..f0fa0ef23d91043dfb2b220c654b80e2e80850cd 100644 --- a/Documentation/devicetree/bindings/display/simple-framebuffer.yaml +++ b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml @@ -79,6 +79,9 @@ properties: power-domains: description: List of power domains used by the framebuffer. + interconnects: + description: List of interconnect paths used by the framebuffer. + width: $ref: /schemas/types.yaml#/definitions/uint32 description: Width of the framebuffer in pixels From patchwork Fri Jun 20 10:31:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Weiss X-Patchwork-Id: 898484 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 13803284B49 for ; Fri, 20 Jun 2025 10:31:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750415499; cv=none; b=Ew8vMVr3cqOFD2xxpVyuoD/sVRKIKMx79b4ALuppdMIprxIAg4TzeribIONtMJf9khZX+LUY+Q8YSvhGNNVrJCWCsc9ZOyciofLE71pRajdae/DLh3RCWym2GQ3JY2EZM043rBKsMZBusuBmizvFA+IehXl0lXzO4Dmz0iAyYKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750415499; c=relaxed/simple; bh=d04Nc6/zavO+68KQ3Z8w4PpWXB7iws3XS1jyTPHwCgw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AO/GqSLLjQl2RVNoI586kjJdKK/2XoGfNndyWuunJ2GteBBabmZe9as0vf1/fZJtntRUnVo33bd3eP+PjXdQG5GxL4PwyuFDO0h0c32Kp6yEwJAbhDfnCfpBiciMkXsGQcadH8LxR4Ybi67+kWKnW5ipiu7UVqHFFESM6Yiy73s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=fairphone.com; spf=pass smtp.mailfrom=fairphone.com; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b=nYBHb4TX; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=fairphone.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fairphone.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b="nYBHb4TX" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-adb2bb25105so279918666b.0 for ; Fri, 20 Jun 2025 03:31:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fairphone.com; s=fair; t=1750415495; x=1751020295; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=t2iMhnvf5EQaGrzDAr8D2TdFfXYKdA4ikA05GtxeBtI=; b=nYBHb4TXWv4Am7gyFjTEEPFBiof1UAdlu9k00l/TVyqsDz2Y8He+xWDpauNmlMmHM2 sNOELYFOhvQUqP9gc0dKYaHcWL/TzSHXGJPpmIa9/b8zXAQht9RSKWE1uzaiG4SQtG6l 1/uMlBEzYNZmvcBWDPZJEgj0KEGpdQ4hVa7SU8G1c9QSmP4qCg3tF1SrnFKKnyyMBCFg 80bu26Ova4EsXjCTd/zbUqLN9W2Ad06711oCd5E9HzMdEEHav6gbOrf/tzp14G3b0M/F 10K6YwHS/kqEBl/Ye/YVkcIAfijy+tAfFoYQ0VnzipOGFn00rvHh6W1yt7JdTL8kK73A Z55g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750415495; x=1751020295; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t2iMhnvf5EQaGrzDAr8D2TdFfXYKdA4ikA05GtxeBtI=; b=nbmXMWCCpwKeTP/4XqiKJR7THoOyN4I513+SuYdLXTH888WLI2g1rjgMljyzs+p62C 4l1M+eriC1wTulV/HS7WI90qIkNqChKwy6V/GHHzAPFtLg/L0Hu53N/yvV2H2A+Fj5Ft kSsyxxlgV3azff52tXp5QSI3zEC/GPhpJsBSWo0Ih4LoQ6202tc0bnvbo3qEBGWhbS+b Xr36KGCfASbNd3/P0bp2VBWsp9mzh0RVxYkdbSeJQRNI0u11WBemsF8Wrh1ANBHFNuyk YQrChbA/5KXSOTVEVZlpj22PqeUqjOcBDsMFCKz2FrVCOWsdYwkno0JVx/+dUNq2/yn5 ju/g== X-Gm-Message-State: AOJu0Yz62Y5eJjjHq+aizebGvVV4nfeLYAbStJ8o+33cRTib+vGa2xpZ st+o8Mw4rR+JC4bNp0jL0F+HMldSW9L9veNelaMgGruaUlhXG2QA2KP0THUytdbsvODILDeh/DJ XWZVa X-Gm-Gg: ASbGnctUkzI69lNhZbdSTFNbw7E99tObDQh651zneXUVD4bNcmrmVy1RiKIhDFxxH/o gfZ7Tk57J0TSK32hOWAw2i1H+2LsuFwGQ8Kn/7m7vxQBGux4OuLgFd2ra0/NoLKOw3+9LfMe0d6 VfJug1fXS4VF1/RsnASQcBS5E9XSIx7daTONvbCn0q0FmKUbTHBe6L8hBIrnWxchjAypXxERqI+ aR6S6EveJzjQ7WPe7SmNMr6Ujxrnu6sRIggNz2C/IuupSr1CiECN8rkOmprJRm6VVsvU1GF86Jd 9eZ/jH9JlGbbtwBCh3nDN2AGgMQIMio4G+yx7IBl1rZ8liRu+7jJ67NpMa4p4udNSmnycBWusj1 JnBy/6U7rWeeMyR8X3Yb4ryud+FOHIduhr1v2wdekJ/k= X-Google-Smtp-Source: AGHT+IFSpq+n0pTlSttcHCNoQdEWNKKFQKqrUEc9bXWtRz+fgibBvmNaNt5W95K1E/I9mpYWKSpYIQ== X-Received: by 2002:a17:907:2d89:b0:adb:e08:5e71 with SMTP id a640c23a62f3a-ae0579930e0mr234979566b.17.1750415495176; Fri, 20 Jun 2025 03:31:35 -0700 (PDT) Received: from otso.local (144-178-202-138.static.ef-service.nl. [144.178.202.138]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae0541b6f5csm138047366b.122.2025.06.20.03.31.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Jun 2025 03:31:34 -0700 (PDT) From: Luca Weiss Date: Fri, 20 Jun 2025 12:31:26 +0200 Subject: [PATCH 2/3] drm/sysfb: simpledrm: Add support for interconnect paths Precedence: bulk X-Mailing-List: linux-fbdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250620-simple-drm-fb-icc-v1-2-d92142e8f74f@fairphone.com> References: <20250620-simple-drm-fb-icc-v1-0-d92142e8f74f@fairphone.com> In-Reply-To: <20250620-simple-drm-fb-icc-v1-0-d92142e8f74f@fairphone.com> To: Hans de Goede , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Javier Martinez Canillas , Helge Deller Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Weiss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750415493; l=3566; i=luca.weiss@fairphone.com; s=20250611; h=from:subject:message-id; bh=d04Nc6/zavO+68KQ3Z8w4PpWXB7iws3XS1jyTPHwCgw=; b=OSCxYbk+zEmgHOxlnlJRAUggV3hgQS7+vk3wWQc+tTa51GNZjK7RbLR0z3Knt58EHBfB/eyny jamZmL7PXsQAdWIECU8g+Y44oAzAB4KcTf8rQG9xPOUXnsp8dcOdowe X-Developer-Key: i=luca.weiss@fairphone.com; a=ed25519; pk=O1aw+AAust5lEmgrNJ1Bs7PTY0fEsJm+mdkjExA69q8= Some devices might require keeping an interconnect path alive so that the framebuffer continues working. Add support for that by setting the bandwidth requirements appropriately for all provided interconnect paths. Signed-off-by: Luca Weiss --- drivers/gpu/drm/sysfb/simpledrm.c | 83 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/drivers/gpu/drm/sysfb/simpledrm.c b/drivers/gpu/drm/sysfb/simpledrm.c index a1c3119330deffc9e122b83941f3697e5b87f277..9643f7c1734ab558d52779d7c45465dbe1d85762 100644 --- a/drivers/gpu/drm/sysfb/simpledrm.c +++ b/drivers/gpu/drm/sysfb/simpledrm.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -225,6 +226,10 @@ struct simpledrm_device { struct device **pwr_dom_devs; struct device_link **pwr_dom_links; #endif +#if defined CONFIG_OF && defined CONFIG_INTERCONNECT + unsigned int icc_count; + struct icc_path **icc_paths; +#endif /* modesetting */ u32 formats[DRM_SYSFB_PLANE_NFORMATS(1)]; @@ -547,6 +552,81 @@ static int simpledrm_device_attach_genpd(struct simpledrm_device *sdev) } #endif +#if defined CONFIG_OF && defined CONFIG_PM_GENERIC_DOMAINS +/* + * Generic interconnect path handling code. + */ +static void simpledrm_device_detach_icc(void *res) +{ + struct simpledrm_device *sdev = res; + int i; + + for (i = sdev->icc_count - 1; i >= 0; i--) { + if (!IS_ERR_OR_NULL(sdev->icc_paths[i])) + icc_put(sdev->icc_paths[i]); + } +} + +static int simpledrm_device_attach_icc(struct simpledrm_device *sdev) +{ + struct device *dev = sdev->sysfb.dev.dev; + int ret, count, i; + + count = of_count_phandle_with_args(dev->of_node, "interconnects", + "#interconnect-cells"); + if (count < 0) + return 0; + + /* An interconnect path consists of two elements */ + if (count % 2) { + drm_err(&sdev->sysfb.dev, + "invalid interconnects value\n"); + return -EINVAL; + } + sdev->icc_count = count / 2; + + sdev->icc_paths = devm_kcalloc(dev, sdev->icc_count, + sizeof(*sdev->icc_paths), + GFP_KERNEL); + if (!sdev->icc_paths) + return -ENOMEM; + + for (i = 0; i < sdev->icc_count; i++) { + sdev->icc_paths[i] = of_icc_get_by_index(dev, i); + if (IS_ERR_OR_NULL(sdev->icc_paths[i])) { + ret = PTR_ERR(sdev->icc_paths[i]); + if (ret == -EPROBE_DEFER) + goto err; + drm_err(&sdev->sysfb.dev, "failed to get interconnect path %u: %d\n", + i, ret); + continue; + } + + ret = icc_set_bw(sdev->icc_paths[i], 0, UINT_MAX); + if (ret) { + drm_err(&sdev->sysfb.dev, "failed to set interconnect bandwidth %u: %d\n", + i, ret); + continue; + } + } + + return devm_add_action_or_reset(dev, simpledrm_device_detach_icc, sdev); + +err: + while (i) { + --i; + if (!IS_ERR_OR_NULL(sdev->icc_paths[i])) + icc_put(sdev->icc_paths[i]); + } + return ret; +} +#else +static int simpledrm_device_attach_icc(struct simpledrm_device *sdev) +{ + return 0; +} +#endif + /* * Modesetting */ @@ -633,6 +713,9 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv, if (ret) return ERR_PTR(ret); ret = simpledrm_device_attach_genpd(sdev); + if (ret) + return ERR_PTR(ret); + ret = simpledrm_device_attach_icc(sdev); if (ret) return ERR_PTR(ret); From patchwork Fri Jun 20 10:31:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luca Weiss X-Patchwork-Id: 899154 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 11EB7285401 for ; Fri, 20 Jun 2025 10:31:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750415500; cv=none; b=GP5mr1N5DJgMFGQ8489ItgZuhDO0M5QPjLb4fo+V6c0q7T4KBJkF0fGeMD1owkiyvkKXxlGw5dyJQclyd6TZ8Fdc3Vn4aSuobQBtlX0xUvxGuP867mzkknXudNw8zw+T67cmOBcQYk34lG73nQvD3PpD2TI8yEvWpZfjZ/G7Ycs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750415500; c=relaxed/simple; bh=aUgglQRYn7bTkMkwBI8lk1cjN4alca4VUVFQsxvzbtU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ekUK6bJCEbW0BsfOnK1wMI6mNpOTb/smMDdMG9Mcuz8R9dPB1mVSYIi78S1jKyyHTelGDteHanCsqhWt5ghYvXQmYfluGfXgzXiArhmvY2uCNGywE7dAfYDOSYYjqjBQH7NP3IRDKPD0+lD5oPHzgqBgI0fRq3YLyFgXJaUe4Bo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=fairphone.com; spf=pass smtp.mailfrom=fairphone.com; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b=Ef3hi0+N; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=fairphone.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=fairphone.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=fairphone.com header.i=@fairphone.com header.b="Ef3hi0+N" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-ade326e366dso308612066b.3 for ; Fri, 20 Jun 2025 03:31:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fairphone.com; s=fair; t=1750415496; x=1751020296; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rx+JsSfgW45704ajaCZP3Z6JsbN0dOsJusfnG4fSCwM=; b=Ef3hi0+N+Z5WWS/agg0jMBcgMKFfGfwH0xEmeaAAB+F68900rK3SVA8+qHojPbj1vZ 9kKAA57TBZCuXc9TtEPev9+7udaZt8nVu6WbguIts1TCaqISdirKeEA5df23r0cbDzZG wm2mpvCiNeadzcJ9XhEMPqfGFE956uiqRL4P1AMQZCBEXqZ5mlyYU07S2fpMP3a/99a0 jweoa3yIREfEDV/ARYmJja/4+IcGIATA/+fsBzg62Rzx4F+rV46YXxmJaYj5xKUfbncl V+aw5ViNlZ13q67WGo0PXRvSbLKj07mXaH2Q5oqhARu3RnZ00edtuE2oBHYFTGDumtyR apVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750415496; x=1751020296; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rx+JsSfgW45704ajaCZP3Z6JsbN0dOsJusfnG4fSCwM=; b=HD2/7/gJdHR9BdLJ2QV6B3c6/fsbv8uQMVsN3BCLYa8mvL5ZTMFzuooVjbUame123H XynUHjY4Y3owrtn3gt2E/NOD/7gEwFlnTyTbzFY2SfK9bHrtZ5oJ+fVPl6txSwHYcMWv zn50PFPYGMzSU27QC7khNkwlAQO868OeOZBQhdi/4MyTW768zGHWtEXETqaZwQR9ARU5 S00+IxhaAjvJeBsdJaZYGIbbefc9KJ/lnLVxLjOqay68kIlh76/7eSbSe0QVWWT5Ct/E 6iXbberTWQYEVbfMmihFrtRIv+7wBtErnwXK3BkTogTpX06pHFetL3ptLYKi33k8jEWI v9SQ== X-Gm-Message-State: AOJu0Yzj9ASoHAMYHj9MQTeHdvw590gg33jkXHFXZKX2NjD2zHg8cJkx HTJTjoSOajbgpC7/OLZdE4SzfbzJC4ljjwcjujcFIN8nzG0eTG2tmRXexiO8LWx1CNA= X-Gm-Gg: ASbGncv30dvlfcQrC3/oCdlgTnZFj6rGJ0qDOuEU3brt1RarR0rh5vSn/RjVlE5B+WW yApREMQzvnY9YI3ntVlPBEYuVd/RVs70Havc9XI58JBnX2+y1VuhhUagfQJGCr4lPD4q7dKdeBq +Qn1LrwBkSUOloP6pe3DNH8NYdv3i/iAYGvaLJirGLYocq16EgKcdCWwUW4i6RCFV9vwLbaT+AI TZ+UnIfI/YjufpavNVM3ZCHd9igGlbECtcyOG4W1dfZR87FYqgH9/xcAfyl7CZBbzGSmcXjo1G7 1pa0ggy01jUZHTyk6WnT7+XdChWhb89ZeQTWsx8OAyDrTTAEp5LbpxSCLLvtO3JmmGHhmXtc/TQ tKWWVDRjgBYG3BLYyJcOWMpChBvwoVAQG X-Google-Smtp-Source: AGHT+IFojvse3lqX+gqKA0HNP3nkQ76ONpxVInRK6fKU0+nbCKCU4x5vFpvTAQSlT7CHl0bt8sS96g== X-Received: by 2002:a17:907:3ccb:b0:ad5:4440:23 with SMTP id a640c23a62f3a-ae057f21fcdmr207244766b.50.1750415496144; Fri, 20 Jun 2025 03:31:36 -0700 (PDT) Received: from otso.local (144-178-202-138.static.ef-service.nl. [144.178.202.138]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae0541b6f5csm138047366b.122.2025.06.20.03.31.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Jun 2025 03:31:35 -0700 (PDT) From: Luca Weiss Date: Fri, 20 Jun 2025 12:31:27 +0200 Subject: [PATCH 3/3] fbdev/simplefb: Add support for interconnect paths Precedence: bulk X-Mailing-List: linux-fbdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250620-simple-drm-fb-icc-v1-3-d92142e8f74f@fairphone.com> References: <20250620-simple-drm-fb-icc-v1-0-d92142e8f74f@fairphone.com> In-Reply-To: <20250620-simple-drm-fb-icc-v1-0-d92142e8f74f@fairphone.com> To: Hans de Goede , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Javier Martinez Canillas , Helge Deller Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Weiss X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750415493; l=3509; i=luca.weiss@fairphone.com; s=20250611; h=from:subject:message-id; bh=aUgglQRYn7bTkMkwBI8lk1cjN4alca4VUVFQsxvzbtU=; b=q76OcxFnlNqs8zk3v5IaY0TIGBj4kLjAwREPukb0aGjW2/MaP/fIm50kqwa8fh+iuaE1x69fK +4EOmwW3pikCwZOl7W1EI5MmfpyvVdzGesSDUA4icHlf9y6PepTL2jt X-Developer-Key: i=luca.weiss@fairphone.com; a=ed25519; pk=O1aw+AAust5lEmgrNJ1Bs7PTY0fEsJm+mdkjExA69q8= Some devices might require keeping an interconnect path alive so that the framebuffer continues working. Add support for that by setting the bandwidth requirements appropriately for all provided interconnect paths. Signed-off-by: Luca Weiss --- drivers/video/fbdev/simplefb.c | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/drivers/video/fbdev/simplefb.c b/drivers/video/fbdev/simplefb.c index be95fcddce4c8ca794826b805cd7dad2985bd637..ca73e079fd13550ddc779e84db80f7f9b743d074 100644 --- a/drivers/video/fbdev/simplefb.c +++ b/drivers/video/fbdev/simplefb.c @@ -27,6 +27,7 @@ #include #include #include +#include static const struct fb_fix_screeninfo simplefb_fix = { .id = "simple", @@ -89,6 +90,10 @@ struct simplefb_par { u32 regulator_count; struct regulator **regulators; #endif +#if defined CONFIG_OF && defined CONFIG_INTERCONNECT + unsigned int icc_count; + struct icc_path **icc_paths; +#endif }; static void simplefb_clocks_destroy(struct simplefb_par *par); @@ -525,6 +530,80 @@ static int simplefb_attach_genpds(struct simplefb_par *par, } #endif +#if defined CONFIG_OF && defined CONFIG_PM_GENERIC_DOMAINS +/* + * Generic interconnect path handling code. + */ +static void simplefb_detach_icc(void *res) +{ + struct simplefb_par *par = res; + int i; + + for (i = par->icc_count - 1; i >= 0; i--) { + if (!IS_ERR_OR_NULL(par->icc_paths[i])) + icc_put(par->icc_paths[i]); + } +} + +static int simplefb_attach_icc(struct simplefb_par *par, + struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + int ret, count, i; + + count = of_count_phandle_with_args(dev->of_node, "interconnects", + "#interconnect-cells"); + if (count < 0) + return 0; + + /* An interconnect path consists of two elements */ + if (count % 2) { + dev_err(dev, "invalid interconnects value\n"); + return -EINVAL; + } + par->icc_count = count / 2; + + par->icc_paths = devm_kcalloc(dev, par->icc_count, + sizeof(*par->icc_paths), + GFP_KERNEL); + if (!par->icc_paths) + return -ENOMEM; + + for (i = 0; i < par->icc_count; i++) { + par->icc_paths[i] = of_icc_get_by_index(dev, i); + if (IS_ERR_OR_NULL(par->icc_paths[i])) { + ret = PTR_ERR(par->icc_paths[i]); + if (ret == -EPROBE_DEFER) + goto err; + dev_err(dev, "failed to get interconnect path %u: %d\n", i, ret); + continue; + } + + ret = icc_set_bw(par->icc_paths[i], 0, UINT_MAX); + if (ret) { + dev_err(dev, "failed to set interconnect bandwidth %u: %d\n", i, ret); + continue; + } + } + + return devm_add_action_or_reset(dev, simplefb_detach_icc, par); + +err: + while (i) { + --i; + if (!IS_ERR_OR_NULL(par->icc_paths[i])) + icc_put(par->icc_paths[i]); + } + return ret; +} +#else +static int simplefb_attach_icc(struct simplefb_par *par, + struct platform_device *pdev) +{ + return 0; +} +#endif + static int simplefb_probe(struct platform_device *pdev) { int ret; @@ -615,6 +694,10 @@ static int simplefb_probe(struct platform_device *pdev) if (ret < 0) goto error_regulators; + ret = simplefb_attach_icc(par, pdev); + if (ret < 0) + goto error_regulators; + simplefb_clocks_enable(par, pdev); simplefb_regulators_enable(par, pdev);