From patchwork Tue Sep 1 09:05:17 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4826 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 181FE40D07 for ; Tue, 1 Sep 2026 11:09:32 +0200 (CEST) Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-6a36683ee94sf3606089a12.0 for ; Tue, 01 Sep 2026 02:09:32 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788253771; cv=pass; d=google.com; s=arc-20260327; b=Fpip6RIm0txx4VqQw2wjvz8MwKMHwMjjtMlY6ihZDHpyyJCwOAoC1rMXqQESOKR6OF acx/qROKlG7E6dvrm0oPJsPdGfIVb48p1hmOBdYQGGhFmB5vHYQaRLv16xpT+gCY0HET URu+Xa1QNDbNyfg7cuc2+NeLQc/XjPw4f/VqmorsWPzr4zq8L404mcPcHQrEwvFBym/Y eQXUnCI8lNH69ZzbraZA6XrUo1C4dQf38pPlRrlJSR90U0FUBffF+RRJuEhnC8Mxff2C +DRaoc2qlismdiZnedwRQYN1JMTfvNIpagAHhmt5AqAB3JNDfXZSY7C7N+URHGXAd+wL mn8A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=jvVar7UDN6d2mxAOrqHGZ1Gz72/J1szmVwTjJyvdW4M=; fh=5xZwx9IaP/97++La28EMpw9yKi2/pnJmw4V2opKg5lQ=; b=WKs6Leq1F1oe9relDz827UtU7XP6uZNFVOhnAUfmT+qGttHNcaIAGX8YqTmONLAuqG g0WIexLKFKFH/nrDFAQwFja2V3Tyl3mFQZoVeCA1u8KkHTKt3xXlcAag/9ZxwbgFamjh PPEciuw/2t8w9g9thg+pBjliifvfNfQYX4nmAdSNW7vderdASGnDn3l9gL861vPvUKuZ 6tzt5i3KjlTjm0LkqhrLhkjY9pNu52v2/CJFeAKE0YxBB+umJbxooPGRFqzV3NsHN6gP hx5lXebr0E+sceC5qfUOwkSQlG/fOgz54qZJW6/C8vLRlvqbsRNFE14H5fMNrUOIllTD 1yUw==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Zd9kJfAi; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1788253771; x=1788858571; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:content-type :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=jvVar7UDN6d2mxAOrqHGZ1Gz72/J1szmVwTjJyvdW4M=; b=VxY7iRhMSdTrGUo0m8DqghfIJruUIOO1rBWCM1AmGY5/pUv3ivzP5dHxdlCETp2j8q vuyEDPe/BJx07ds7Fy8cvzW/1cFLJTdlbFU76Uz7HuKW8H6nLSzkVqCT4x4WC+ic3ZUg aPny/qVB3CPw2YhZSai+v9hzaAXwkvHUQkya8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788253771; x=1788858571; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :content-type:x-original-authentication-results:x-original-sender :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-gg:x-beenthere:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=jvVar7UDN6d2mxAOrqHGZ1Gz72/J1szmVwTjJyvdW4M=; b=TvHdbIGrOAUTJ21grcUdLufzqKZYToo5lf739K7UtGwY1zQkhnecT2QWD+R0W6Caa/ 3ZjQLkmpgB5n+EcnOXp03aaOqAXbmD8wHiuWLWYsM4h/On7sPS+tTWtybgUbO3gUPfg8 0bgSoJ+wY1FQMQozOu4daPbhP2sKp+ZkzbMp9q9AOOiIxAC7kS/Q4asLCISnFz9FV8W0 rv03G7+WMcNP7XcaDMlea9rVCcKvtZ3GgF9D0kLDIEPQwjJrq2LMF35eeOAlc6ZgPeHd f3YaMch4B9F/rcpreiEkJCJj/sSMCm2g/5VE9CGbDeNZXeGxYUVGl7cBjgMNil4hBgtR AFdg== X-Forwarded-Encrypted: i=2; AKwUvBwPOnbwH3eLrxmM1wNGp1t5UEYKTNzc9G2f8AvceMCA3kVFFK5gUfDcbcYVa/5d687dXjA2fQNSBKtYQDo2@patchwork.amarulasolutions.com X-Gm-Message-State: AFuF++nfiYBZJHhIDcaq6ihVZFKB7LI3YxLbFig0x/5NMJlvd9eLBoDN CbJQs41sfCD6U33vWTiQ4+eg9ZH0RhfUW5DsCkGPnKMeiDCH+na6kizL7tDR4xx+v178jg== X-Received: by 2002:a05:6402:4554:b0:698:e614:e4bf with SMTP id 4fb4d7f45d1cf-6a60d061a16mr14941560a12.0.1788253771719; Tue, 01 Sep 2026 02:09:31 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="ATskLdcBC99exFELtDjKfFtV+c88K/nCZx9hAlDBvEcrjT9BGA==" Received: by 2002:a05:6402:44da:b0:6a5:d94f:b1f7 with SMTP id 4fb4d7f45d1cf-6a5f7d5fd16ls5000806a12.2.-pod-prod-05-eu; Tue, 01 Sep 2026 02:09:30 -0700 (PDT) X-Received: by 2002:a05:6402:3509:b0:6a6:32f9:d7d0 with SMTP id 4fb4d7f45d1cf-6a632f9d92bmr10767327a12.21.1788253769808; Tue, 01 Sep 2026 02:09:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788253769; cv=none; d=google.com; s=arc-20260327; b=IZAEM5tGHmyYdFgsRnKIS+/aSgtJzl1/POBpU8v2ChaCNjDbaUns08HbDqqk/QMYoO 2J/h8R3fANmKSEo5FIocRVvwbpBEJ25LTMBUrM8nVycp6aARhajOW7Uv6FzKtXLqMPZx xcRX4LaopV1jSMrHSKGC9EwWZ4H81bOjYZpn0m6NStLF6SP37OfktIRvpsBuFW28o52O O+mrTmTQosYzB2DZcznOCHKwKCPgPoG3Pwuo3XVrgT3a3vAfMmernLCfvRaVIaAtlZwG w7E7qeLM9b6UK+qdyATupAjj8BKLwWpZJT3kEuqCEzxorUdvqtdx2svnT/203+OafMWI AB3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=SfZRa8H2WDMJkcsjpztb8rt8s89URmJ5lnAVHSoTHTw=; fh=DvNWzYUbqLDEGKkj7xR+THG6wwif/P922HrkLzuVV6A=; b=TpICbClod+5e+acQFx/GzD4UKTRQz8cOZrBWXGH0N6I16GXFEQIZSBeJhz3l/Hgjr+ R5CvxBw7uDr5i+naeFJ7D49rw5/y2Demx+sbhNpaRKCJ1ICHSFVi4lEy9XFouhsmExZg DR9kkH8ap2b38ZQ+95VWRIaBxzmwdzDxktqy+9K5NVuw8d2rGllNQpZyY2rbBF3ofTnK W191zmHDGtV5+7j5N/m7f3GbuUCqtaieT3hk6MXByHa2S3B9+1zRn4ecOMQHuArNubMr I8amW0DXfPkggH85fT49xQCSaDf4Xdd/v/WZTBmBwRsK6uzeeO3HMaY66u+Rs5MS+Ukl hEQQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Zd9kJfAi; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id ffacd0b85a97d-482fbb35a50sor2055461f8f.14.2026.09.01.02.09.29 for (Google Transport Security); Tue, 01 Sep 2026 02:09:29 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Gm-Gg: AYBFou16Gv63eVyxg2izwD/KP98FV4hztJ6FZF22E8ESI9f1RyBJqgGsa+UnUaM2Xv+ A4+vTziB5k4ZZAegnGmxPqZaWRfa9q0dpHgPIBmO09vY/ZjgQPWV5cZuUj5hKwMxBMIv+wSPYs3 ifCx7oqYWb1DFokU93yGblh3+w+xvQ+WQ5Fg0FCt8xU9QwHoptpASN55w6ENjKWIIoPOZjHNpa8 5/7R2jaLu9sdwebgBpkcXE/q+gLGJfWhk3S71e43kp6q2DCictBVagdvWP2DL3txup82ZiNvuWC 5oZY15QuQA+AiQ6vroHybXW46q+WFFGBedWt8QdiuH/6Ng5Oa7a0eV8q//rFDWXFCgXiFhxezdO cgVi39U6D39Jo0Dd6EfLcsQA/rZ/UgWSYRZBEgZCORAErhIKoYpIQIUIR8cazvvdaVNMnEAil1J bEXZrmXPxBTiHFmvjOngmgpNoPsBl2CMB/1EA4mDlB7ytd4gZL1zGuBJzu1k3eP2ADyQnvrCLO0 K5I4K2xjQz0YOi6ixtzkE2vK2uCWYbZ0lBKsrYIqI/WcZ1OfPihGniesLaJuOqBeLLgWUetIur+ 4G5zur8fRHW9VeQVb7dkRoLkxJbgGOuyh/TtiTpWwbopf6Hip6KzZ9DQFrU/Nxcj7Q== X-Received: by 2002:a5d:4702:0:b0:481:bb82:3f31 with SMTP id ffacd0b85a97d-482f79db522mr40181489f8f.10.1788253769303; Tue, 01 Sep 2026 02:09:29 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com (host-87-9-102-148.retail.telecomitalia.it. [87.9.102.148]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48442c425cesm3825273f8f.6.2026.09.01.02.09.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 02:09:28 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-amarula@amarulasolutions.com, Dario Binacchi , Brian Masney , Jerome Brunet , Peng Fan , Sebin Francis , Stephen Boyd , linux-clk@vger.kernel.org Subject: [PATCH v11 1/2] clk: validate spread spectrum configuration Date: Tue, 1 Sep 2026 11:05:17 +0200 Message-ID: <20260901090912.585681-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260901090912.585681-1-dario.binacchi@amarulasolutions.com> References: <20260901090912.585681-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Zd9kJfAi; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , The spread spectrum configuration is passed to the provider's set_spread_spectrum() callback without any validation, as clk-conf.c only skips all-zero triplets from "assigned-clock-sscs". An invalid device tree can hand providers a zero modulation frequency or a spread ratio above 100%, and each provider would have to add the same checks to protect e.g. divisions in its rate computations. Fixes: c86814e70390 ("clk: Introduce clk_hw_set_spread_spectrum") Signed-off-by: Dario Binacchi --- (no changes since v1) drivers/clk/clk.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index fef87167a60b..208caf60eeb5 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2851,6 +2851,20 @@ int clk_hw_set_spread_spectrum(struct clk_hw *hw, const struct clk_spread_spectr if (!hw) return 0; + switch (ss_conf->method) { + case CLK_SPREAD_NO: + break; + case CLK_SPREAD_CENTER: + case CLK_SPREAD_UP: + case CLK_SPREAD_DOWN: + if (!ss_conf->modfreq_hz || !ss_conf->spread_bp || + ss_conf->spread_bp > 10000) + return -EINVAL; + break; + default: + return -EINVAL; + } + core = hw->core; clk_prepare_lock(); From patchwork Tue Sep 1 09:05:18 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4827 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 16A9240D07 for ; Tue, 1 Sep 2026 11:09:35 +0200 (CEST) Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-495529a93f9sf41273495e9.3 for ; Tue, 01 Sep 2026 02:09:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788253774; cv=pass; d=google.com; s=arc-20260327; b=UPJ2ONmUwAj9PPhnEyGMdlB1hXO7czESLCjvpUNeZkouZN6vf06/f9bE7sw1ibfwyM m9psr2uJCrIA2CeLIXt+8GEN9qCJkYhST27LM39tmPkCVhKmawrxvSY9EXG5tVNZf1+F B5itxREzlH8TTdyPLRtsy21o0yfG41ASSv6g/NY09vxwsNjKnpcwCiwzZZ14nMERNV9V wkcMp1xNjDubLbo2KrScZvIqAz2c+fiejt3+ATQduwdXXrh+sliqMvoJs9iis6rD33uL HdwEBuUNfJfRjWQz+SZxitTUtLjXzIl4mFwNtNHemB1c8lUTkGwG6gTA+WLi3hTPEkDW Dadg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=L71kepUGTpOKBQqxtu7eLReVKkXSz3R8qLwFPbuo09Y=; fh=cbOoee7BnSB+4Rx6QukHiFGfb0Z4qg+TzfFPPwefMNY=; b=cGBABdTuRQhWTpyykIoH54InfVj2kWT5UvBJVfdPmzNOg23z+uClbDXkC5xQbKnX87 Jib9D2/bws8uYJFXN8ijv6nb3gJK7R/n4fcEFMCEbwtVR3gKf93FS+xzExc1LPfvsiRH pnsDVEht8CRZ1AeSE95i+KFwGZph4SmJmEp6Zw70ZEwSmdV/PUO5OAsee0YShs0v2KuL MaaAQwsp4me9e4SyB2OIg97j6gFFoigS7ITkPa0QIU9TH/7nf33DRbWT87Opmld52NzP wnIVblI5AvRH53Ayvd+W9e/ws5hdTzWQuX+gGOi820PTQHrwIS89Lx/HfhcKED1AlbPB qFZA==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=BoLUcQz3; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1788253774; x=1788858574; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:content-type :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=L71kepUGTpOKBQqxtu7eLReVKkXSz3R8qLwFPbuo09Y=; b=Q572P3eCNS/30+geurR+HQSIpJvwpGz6/2TphhXppABZA8uIxOXnEVWBoBU1tsg2ff BLvJNPa01cka5aCCeoxhKBEFx1hg6enrz2w7omeElvAgDl9cvHY0QD4SMEMytFz8RT65 DSEPJfdARWGj4QlGeBvIr6eYEw0JaLanOB/Uk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788253774; x=1788858574; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :content-type:x-original-authentication-results:x-original-sender :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-gg:x-beenthere:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=L71kepUGTpOKBQqxtu7eLReVKkXSz3R8qLwFPbuo09Y=; b=LtbGDcPjI7C+Ok//EM77cgD98UU4xnzvQVp/r5l+3O9yt9Wb0JmmXWQAOxJsSDZ5T6 MS46kUuE/cqhgAVQBfYX5jIQ6/Qan9zqo4uMhikxdNBCOqIwpkIB24JMVsuoe/3K9yWW zjbqCYWOILMu9t6FmYGDANuL7pIIrzBSfxvoezS3VvJ8j/UkrxlI5VM4Q2VmEYC7YL5f xd18hpiHtKuCBieGtsVfOefnDHv4Oi1Gub2+102naavPyN2Nzid/YGZAUAVAeC2JVMqb HDwYtSrfCQbjNI24K/lsHCvELjI2xZe4bjYnkdMl/06HmZKWinlSqTYEomBPPa1Rk9kb 9X7Q== X-Forwarded-Encrypted: i=2; AHgh+Rq2b9qXMWuF7sbCtkEf4dJaAma5q958JvPnVWnkUGwtRbRtKTgQ5FX7vdo00SXw+896JB14eHOkAjU0iCLF@patchwork.amarulasolutions.com X-Gm-Message-State: AFuF++lbkkCX6f61LsN0SgOdlNnytSrI+klF+KNfvkqygOVTeE6iSN45 RCIln/MM/QsGRheNPRktdG9CazglIaDJmGLaR1dAvt7fzIQOGaxTFYa3JjikXZViRbkTow== X-Received: by 2002:a05:600c:8b86:b0:493:f5bf:4dc6 with SMTP id 5b1f17b1804b1-49b91c2777emr572348445e9.7.1788253774614; Tue, 01 Sep 2026 02:09:34 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="ATskLdc9ny3SZjhv10gXupEpH45tzaxDf89a5lPNjMg/CyIy/g==" Received: by 2002:a05:600c:1991:b0:49b:d9b:b1bf with SMTP id 5b1f17b1804b1-49b1cf7970fls39739505e9.0.-pod-prod-04-eu; Tue, 01 Sep 2026 02:09:32 -0700 (PDT) X-Received: by 2002:a05:600c:4453:b0:499:8777:ccba with SMTP id 5b1f17b1804b1-49b91c486abmr442829055e9.12.1788253772417; Tue, 01 Sep 2026 02:09:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788253772; cv=none; d=google.com; s=arc-20260327; b=fJ8/aUt+cypmHGV7X23Zu7UegOKkkHdxpmpBFzvPhRYrK7tO2OUc9CCKvvoWb31D8X jko/+LC6kK9YpxnBupoO3iYNhXgz73yy5xKrXGgNq04xwa8ISr+VbNoLs+XZucmMJYqQ 8adNDu/s3CJeVB6VzNDbKBUKKoB0IN6Yre0DX0DWtgpLoD04SRPMDxvqt+yf8SgXl/hx Xtfom/l3OLKMaZzkfMDiQvncO4Ll2ZCSH8Z4llal7vO6WqhXliTXg9GDMqH4oFhiXChq PxVznbwT95YTAFngMF7xU01pOo9i72CLnijYn9N1rTDC6Da5N/QZazAZPCoWFHDfup5l XPug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=awL7EJRIIWZmZbuML6Yj4uYN8A8XYeaOTFa5cFWKueY=; fh=zuTFvgUbDA4p+duRUtqF1kHsKgia+Oibpqem6QzXfB0=; b=Ge7kNrGiNEUuBZ2H1dZ3mWekLiNzF4Jy/rh3d5Qofq4AtjxpHcXvF6nLVnVi7NrlEQ abgaDaDDyVR6K54kQdFbbuZKRBgEOmyELK9gWwKptRz+j2vNWi3QizxZnfV+oqlNpaF2 o4B3qdp6TNZWRP5mvd1tYkhJCBFMDp7xFoLQ4JcTgQ236nTwefqmTvTL/z27fC9k8INI cI4nt3OLGD+uzTa8khr4HhIVl0JQMN+nCRGZ1f1nvo4Znu0yGOdoPw0g2Xuj5yhL3oJS khRgoUXVl30K4YpSw0GeZKKBYuXqdD87T7Ss5N5RzxPreIhSWXywTteoiko5PCq9Gqv1 kITA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=BoLUcQz3; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id 5b1f17b1804b1-49b9509adebsor14990605e9.11.2026.09.01.02.09.31 for (Google Transport Security); Tue, 01 Sep 2026 02:09:31 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Gm-Gg: AR+sD1363hJnnS33LWl2pmpjxlq1/rmyhTEXqOxp1fsjCw0tanqEWVnbH0dKoQKKIMB /lw3l8eh+5pWURXbyjdjZB48sWaKsqA1suyLf0hkruWSp2AoSp84d9ygencUyVxRQMcgyK85aj9 4zlftqeTnzR2zgL91SNLjKcBCIV9gqI8ynVD7p69RduEOCywyWl30/wx0H9JxabnOwfVK4z2W/7 N3jiiRBaRPTBURXNJU8wsfaESAQ+mMxHd7PT9b1mXSG/4CXHyVnRORuNQ6ruIoWkS3GU6Ckjgv3 TuRreZm1ppD6NRiUKZtXqN2Dc3eLXYSWhF6Y8V8TI/+UajUIHGGd0pbts8QhmHhMFX2YgJxxKDi xmBCQjHlTq86DyeXZ2bkchOgyRc1Yt4Dta1oUkl4YNv2xzxxXMB64htV4GISVesYSyKZfW0lIV7 H5kbjrtNSBJGSEksq7DdtBa1swBvDJ3QGoF+JAaQVDOer0Qw3pvEsWMLRNWKtfGmDsmVr37+0TV WSrp5j9Lgj4PhwckgQaDhtE4Kg9lFurZMsAicSbT7SWzQxUVfS0EJEBxr/GXWJFTyvSiwJTapbs g/6Mz92nP6qzZFUbPseqtr1Q/ajnUkpHDhIFyM9/7sW/ocsqPLoOGVM= X-Received: by 2002:a05:600c:19c8:b0:49b:c8e:a211 with SMTP id 5b1f17b1804b1-49b91c20bfamr497636215e9.5.1788253771241; Tue, 01 Sep 2026 02:09:31 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com (host-87-9-102-148.retail.telecomitalia.it. [87.9.102.148]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48442c425cesm3825273f8f.6.2026.09.01.02.09.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 02:09:30 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: linux-amarula@amarulasolutions.com, Dario Binacchi , Abel Vesa , Brian Masney , Fabio Estevam , Frank Li , Jerome Brunet , Peng Fan , Pengutronix Kernel Team , Sascha Hauer , Stephen Boyd , imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org Subject: [PATCH v11 2/2] clk: imx: pll14xx: support spread spectrum clock generation Date: Tue, 1 Sep 2026 11:05:18 +0200 Message-ID: <20260901090912.585681-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260901090912.585681-1-dario.binacchi@amarulasolutions.com> References: <20260901090912.585681-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=BoLUcQz3; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Add support for spread spectrum clock (SSC) generation to the pll14xx driver. Tested on the video PLL of i.MX8MN and i.MX8MP based boards. Signed-off-by: Dario Binacchi --- Changes in v11: - Drop the dt-bindings/clock/clock.h include and use the enum clk_ssc_method values from clk-provider.h, as clk-scmi-oem.c does. - Disable SSC and clear the modulation fields in SSCG_CTRL when no spread method is configured, so that a setup left enabled by the bootloader is not kept active. - Skip the SSC setup instead of dividing by zero when modfreq_hz is zero or mfr truncates to zero. - Reject mfr and mrr values that do not fit the MFREQ_CTL and MRAT_CTL register fields instead of letting FIELD_PREP silently truncate them. This also prevents the 10000 * mfr multiplication from overflowing. - Compute the mfr divisor in 64-bit arithmetic, as the 32-bit product could wrap with out of range modfreq_hz values. Changes in v10: - Drop 'Reviewed-by' tag of Peng Fan. - Adapt the driver to the new infrastructure. Implement the set_spread_spectrum() and get the modulation parameters from struct clk_spread_spectrum. Changes in v9: - Add 'Reviewed-by' tag of Peng Fan. drivers/clk/imx/clk-pll14xx.c | 79 +++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c index b6f1cc9f5700..0c2b812ba20c 100644 --- a/drivers/clk/imx/clk-pll14xx.c +++ b/drivers/clk/imx/clk-pll14xx.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,8 @@ #define GNRL_CTL 0x0 #define DIV_CTL0 0x4 #define DIV_CTL1 0x8 +#define SSCG_CTRL 0xc + #define LOCK_STATUS BIT(31) #define LOCK_SEL_MASK BIT(29) #define CLKE_MASK BIT(11) @@ -33,6 +36,13 @@ #define KDIV_MASK GENMASK(15, 0) #define KDIV_MIN SHRT_MIN #define KDIV_MAX SHRT_MAX +#define SSCG_ENABLE BIT(31) +#define MFREQ_CTL_MASK GENMASK(19, 12) +#define MRAT_CTL_MASK GENMASK(9, 4) +#define SEL_PF_DOWN_SPREAD 0 +#define SEL_PF_UP_SPREAD 1 +#define SEL_PF_CENTER_SPREAD 2 +#define SEL_PF_MASK GENMASK(1, 0) #define LOCK_TIMEOUT_US 10000 @@ -44,6 +54,7 @@ struct clk_pll14xx { int rate_count; s16 delta_k; spinlock_t lock; + struct clk_spread_spectrum ss_conf; }; #define to_clk_pll14xx(_hw) container_of(_hw, struct clk_pll14xx, hw) @@ -366,6 +377,58 @@ static int clk_pll1416x_set_rate(struct clk_hw *hw, unsigned long drate, return 0; } +static void __clk_pll1443x_set_spread_spectrum(struct clk_hw *hw, + unsigned long parent_rate, + unsigned int pdiv, + unsigned int mdiv) +{ + struct clk_pll14xx *pll = to_clk_pll14xx(hw); + struct clk_spread_spectrum *conf = &pll->ss_conf; + u32 sscg_ctrl, mfr, mrr, sel_pf; + + sscg_ctrl = readl_relaxed(pll->base + SSCG_CTRL); + sscg_ctrl &= ~(SSCG_ENABLE | MFREQ_CTL_MASK | MRAT_CTL_MASK | SEL_PF_MASK); + + switch (conf->method) { + case CLK_SPREAD_CENTER: + sel_pf = SEL_PF_CENTER_SPREAD; + break; + case CLK_SPREAD_UP: + sel_pf = SEL_PF_UP_SPREAD; + break; + case CLK_SPREAD_DOWN: + sel_pf = SEL_PF_DOWN_SPREAD; + break; + default: + /* No spread: disable modulation and clear any stale state */ + goto out; + } + + if (!conf->modfreq_hz) + goto out; + + mfr = div64_u64(parent_rate, (u64)conf->modfreq_hz * pdiv * BIT(5)); + if (!mfr || mfr > FIELD_MAX(MFREQ_CTL_MASK)) { + pr_warn("%s: SSC disabled, modulation frequency (%u Hz) out of range\n", + clk_hw_get_name(hw), conf->modfreq_hz); + goto out; + } + + mrr = (conf->spread_bp * mdiv * BIT(6)) / (10000 * mfr); + if (!mrr || mrr > FIELD_MAX(MRAT_CTL_MASK)) { + pr_warn("%s: SSC disabled, spread (%u permyriad) out of range\n", + clk_hw_get_name(hw), conf->spread_bp); + goto out; + } + + sscg_ctrl |= SSCG_ENABLE | FIELD_PREP(MFREQ_CTL_MASK, mfr) | + FIELD_PREP(MRAT_CTL_MASK, mrr) | + FIELD_PREP(SEL_PF_MASK, sel_pf); + +out: + writel_relaxed(sscg_ctrl, pll->base + SSCG_CTRL); +} + static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, unsigned long prate) { @@ -390,6 +453,9 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, writel_relaxed(FIELD_PREP(KDIV_MASK, rate.kdiv), pll->base + DIV_CTL1); + __clk_pll1443x_set_spread_spectrum(hw, prate, rate.pdiv, + rate.mdiv); + spin_unlock_irqrestore(&pll->lock, flags); return 0; @@ -411,6 +477,8 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, writel_relaxed(FIELD_PREP(KDIV_MASK, rate.kdiv), pll->base + DIV_CTL1); + __clk_pll1443x_set_spread_spectrum(hw, prate, rate.pdiv, rate.mdiv); + spin_unlock_irqrestore(&pll->lock, flags); /* @@ -437,6 +505,16 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, return 0; } +static int clk_pll1443x_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf) +{ + struct clk_pll14xx *pll = to_clk_pll14xx(hw); + + memcpy(&pll->ss_conf, ss_conf, sizeof(pll->ss_conf)); + + return 0; +} + static int clk_pll14xx_prepare(struct clk_hw *hw) { struct clk_pll14xx *pll = to_clk_pll14xx(hw); @@ -509,6 +587,7 @@ static const struct clk_ops clk_pll1443x_ops = { .recalc_rate = clk_pll14xx_recalc_rate, .determine_rate = clk_pll1443x_determine_rate, .set_rate = clk_pll1443x_set_rate, + .set_spread_spectrum = clk_pll1443x_set_spread_spectrum, }; struct clk_hw *imx_dev_clk_hw_pll14xx(struct device *dev, const char *name,