From patchwork Fri Sep 4 10:06:30 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4839 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id E9ABD3F1D4 for ; Fri, 4 Sep 2026 12:12:53 +0200 (CEST) Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-4858e4b3e92sf17335f8f.3 for ; Fri, 04 Sep 2026 03:12:53 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788516773; cv=pass; d=google.com; s=arc-20260327; b=fUgzIvQXU9UetstL+kLd/ZPDE0w7ygq/QhRl1cmRfzRjvUZ7B2xodHvwFS0Ar8J106 RsLaWg1uMV0d+0DOBEcDdb+Y4VW93dMmqCWyvxyyRTdvAb4vX1aALKBPOUjYwbCgF3o0 TIoz2sqg260U1ukc9MKV5FINr5jRYJ8pNfQNCglt1Utxu/dj8V4qYGDzpBQb12BzvZ8T Oz2leMSTsWvIL3fQkGMfcgoZvxznwv7Katihpi1YffKQ/ciTRtJBWkgL5ufvUPZohcPp 9yJn5af4XOVb6fT76d9y+ba+HQ0WWFISu4vkVHu65cTFFNpXy4zRUi2txMWYJEnZarxj BkQQ== 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=O52Jv1BOSzJXz32j5fkK0fcdem20r+ryLKZbLZ0pLhw=; fh=q2hFqDdF+XmB5lDMQiELgKsyFTg4kA+BXCoLkUFHBs4=; b=oSjrmBGt0vhXmhTDrWqbhbm33d2FGztKyIst7BS0tKDFp5SUTUGXRbWC5PmMFOhYlX GmlLC2p25W1YVLHFASB0S7UvXrYNUl9gOUUGtg9sfL+vCqJR9CuzM6z7dK94isGDVVu7 JjPGrOpDwB5UuTltligNmy+YP+A1H13zfX3Qi+1JR64SjFQ03NQFq333TFCD5IfKCdWU ifFlAfponOwFJ0gCE5LCNhOPH6sL7n5fUlRzLMaoPNqZtgQaOX4S1uKBz6lgQQDGCFEX ATQWWPf6BmWdIl5UOK8E2xlxjxiFBCQDRB1cGyK1QR0zgUYIXGmG+SX7qw5pdvFyqaqh cXgw==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=fTYoQSHa; 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=1788516773; x=1789121573; 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=O52Jv1BOSzJXz32j5fkK0fcdem20r+ryLKZbLZ0pLhw=; b=TsB0ovDzkFMJPi6D/+D+fWkKk/W1uvoOomvtXManp9NquuutINUZiB5luC6bL4EA4v m/vUMm7LpAWEt5KZ1WCpIQYGu8/Vq8yjy6tLsL1l0vbX9UsF0pWGftcB+1rATza+65ys B8jB0Z/uIllUY/qMawWllezSsvfk19PpXKySk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788516773; x=1789121573; 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=O52Jv1BOSzJXz32j5fkK0fcdem20r+ryLKZbLZ0pLhw=; b=gvELmKC4GrsgHxdiiaWXBXNMxCAX4AJHhljQ6ZJSaMo4mgHEqZkqdEp7o+caQ0lTSI P5nUGAmUqCU9SJhq6FRKZfFAVpFskv5KVG6B7BY+PdC5bMDqzDrv84BaPZ715UxwQddd vVbVCy45H+Dyed3Ry/g11Wj5Hg8sbQnn9JN9F2PtzBG81PCnZODe23MHlnXyfpGmpVaS nziSvz3ok2d/FMCw817bmeN6zNH20dvNZ1hYa/jpqNudZXvU1Fh9WDccy/SZIdKWCaJA KNLSJkE+pwYtRFNT5T3oVgRRWg7EF4bcHydgtF7UohlqQ7aMqhGJcWH47/yXgd0aLvhO FqCA== X-Forwarded-Encrypted: i=2; AKwUvByBvHFQCTT6wLn78djpwNEePmPuNTIlJ34DYxSxPiSKlR6YJZQ3JxEzoiHKchgVfwiMnUkven1Lj9tWYwdu@patchwork.amarulasolutions.com X-Gm-Message-State: AFuF++lqp3kQGKhpm73Kuh3ofBdOSz+S6PRGAqZOJG/Ss/GKdzyOOV9r Zr2lUt3PehicruG5DCjkB3cWUXHkOIUGD2TJNLpvcoo3zB7APjtuYO/rmYjyorDQzyIzzSn8JiB PaA== X-Received: by 2002:a05:6000:26d3:b0:481:5b58:c589 with SMTP id ffacd0b85a97d-485870935eamr6318300f8f.10.1788516773586; Fri, 04 Sep 2026 03:12:53 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="ATskLdeDc+q11GpMOx9nZKzR+hPivyN1JYdKfLR/QZvFD2+TDQ==" Received: by 2002:a05:6000:25f7:b0:47f:5ef0:da75 with SMTP id ffacd0b85a97d-4858651a2a2ls527372f8f.2.-pod-prod-03-eu; Fri, 04 Sep 2026 03:12:52 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBxNk445KR+HjnrWHg0K1tfSMPF7uwDU76bI9mNIw15w4zyCp2wQGcyoyRW6O0g2DAQe9Y+gONuxvhMhM7yh@amarulasolutions.com X-Received: by 2002:a5d:5e87:0:b0:485:8a47:5b85 with SMTP id ffacd0b85a97d-4858a475c6bmr2998734f8f.34.1788516771531; Fri, 04 Sep 2026 03:12:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788516771; cv=none; d=google.com; s=arc-20260327; b=PQsPJVYOLU45hqJJq0lXq0EgTNCttbUVCiqAsxSKOv9Wdf87aiISPdjm9yII3noGaR uquQ87sXY6+3xdtfckZNedk2/N1WoXgPg0CWYFv+PuKWLBN82rgBEPU/3FW5gSBF+Uz2 zKoYLFLLbat+eyMCbuVEh/JgfTmFmincGl+iW+R+HOnZCWe+tVeq5Fc4rI1uunlh5rzx EvXLbCM0jiy79j2dvXfsi4OeKFcc7PkAgmqV7qXzs6AtPSs4n9+iQbWFIyTt/YX+oZCu 9caawR19+7n/ysk2SpMNkYHDB9UHDKaXgJugNJ210i9Z9A1/vobl62jui5DpSfIxYfeN IuOA== 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=trMLdDdWbBp5aYskl2hpYhEKm0ijNRyi5bjjWx05fj4=; fh=PGTbqOq+Ia+l7dW4IIb9tEOZNED8hpyIKodVoKPXwDE=; b=KuPwwYiWPRqdLa4G35u1gR9+k2jtbTvWi0cGd9B5kJN6nu+cz+2lHPcOGjKTffxUjl 6VNQRqWWvGtHm+tXTYdEemQCSWUvE8QqwS+bpSc3yFeprcfcj03OZ8sgeLfKEqZX9yNQ zNX48PmTaPTJSTUrYDywGA6InLNbcAHmjEcTbfrg9nW+/zUKGArLy+eLRaPZeCa9e4n5 MHLCmC1zGkAv5aBV30htXHJAn5hWaJ3rdmnlRhKQNH9vAkJmA8LaLjTsUaFMr6pAsQ4q 3B1SVUyblmXoICThXck6v8JtYbI3Km0WCoOE0p+kCaTDMVc4OPCc8sJFfuCh7h+ZI2pI xreA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=fTYoQSHa; 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-485885bad5bsor304622f8f.9.2026.09.04.03.12.51 for (Google Transport Security); Fri, 04 Sep 2026 03:12:51 -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-Forwarded-Encrypted: i=1; AKwUvByLCC2DypbD4cNt5fiw1F+guk76m4wgp3Y7IXBaE/K6SqMuXlfzJ7n93fEJi56eK/SHgS90PKXkmUHZJvNT@amarulasolutions.com X-Gm-Gg: AYBFou3dgMBxFh1Yr+CIs7npFjS2HCQPUC/+zo3hVG7HHJVpfiRp9lZljgUSiKl8Tpe lkh+D/cpPhVkyCZ9ZdAXLBgMea75IaFjLtuvJX7A1Atay8Mi9avUlO++WTygPZcflv0P+B0FCBr wWX48j6B2Bgunsh35qKZhfs9j5BT9c7G3Ylcioge4voqtZSJzDXZsVaa8R9aFFEV5Gz6okUxjLa KX/02L7k5yNerO03r3lyJtROoDY+g+3AUzu56y3xiYekfgYWxf78paV0U+RPa1gW9M9pPyKyAUn BiJ/G1jPzv9mUNwoSCwrDpR6ahv26+ACoJp7l9hY4oOoUvHQ3+6SqZFdS1776VOvOaM1/hoZ3qz 5Dbr46AdqTQOlhIqpvwc7Z7Yq2GcIhiKbftZqW6lIDcJK4fu9chqA+Eggxc8YLXwwp5Zh6mQ7WT 7P4wC33RUDKG0ZONJuM7Zs/KSxCJe1jHRj8kcUxY4VNvQe9qOAWN/b8OrI2htGfNdXaZNMz/CH3 6op7HZ4T0lASEUztUOtUAkruTHK2QXk+bGuDOxNAtl7Pzw3LC0ErGEobTJz0zNL6kiTenRGSc7/ 8KfnLkzYjTA3GsHGD3J7W68XcKap641yT5FTv2TDfpi2oWFfM6bnXiZABjCtuupOcw== X-Received: by 2002:a05:6000:41d8:b0:485:8a47:5b96 with SMTP id ffacd0b85a97d-4858a475cc1mr2833945f8f.51.1788516771007; Fri, 04 Sep 2026 03:12:51 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com (host-95-245-93-90.retail.telecomitalia.it. [95.245.93.90]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48588390e30sm5317990f8f.7.2026.09.04.03.12.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 03:12:50 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, linux-amarula@amarulasolutions.com, Dario Binacchi , Sashiko , Peng Fan , Brian Masney , Cristian Marussi , Jerome Brunet , Sebin Francis , Stephen Boyd , linux-clk@vger.kernel.org Subject: [PATCH v14 1/4] clk: scmi: fix SSC spread conversion Date: Fri, 4 Sep 2026 12:06:30 +0200 Message-ID: <20260904101243.412006-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904101243.412006-1-dario.binacchi@amarulasolutions.com> References: <20260904101243.412006-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=fTYoQSHa; 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_bp field of struct clk_spread_spectrum holds the modulation depth in permyriad (1/100 of a percent), as documented in clk-provider.h and in the assigned-clock-sscs binding, while the i.MX SCMI OEM extension expects a value in tenths of a percent, as pointed out by Peng Fan. The conversion divides spread_bp by 10000 instead of 10, as reported by Sashiko, so any valid configuration is truncated to 0 and the hardware is silently programmed with no spread at all. Divide by 10 and fix the comment accordingly. Fixes: 77369b1e6a37 ("clk: scmi: Add i.MX95 OEM extension support for SCMI clock driver") Reported-by: Sashiko Closes: https://lore.kernel.org/r/20260901155657.6A5981F00A3A@smtp.kernel.org Reported-by: Peng Fan Closes: https://lore.kernel.org/r/ZR6PR04MB375776A27E98F140534E8F7FE488B62@ZR6PR04MB375776.eurprd04.prod.outlook.com Reviewed-by: Peng Fan Signed-off-by: Dario Binacchi --- Changes in v14: - Add Reviewed-by of Peng Fan Changes in v13: - Divide spread_bp by 10 instead of 100 as requested by Peng Fan. - Rename the patch title and reword the description accordingly. - Add the Reported-by/Closes tags for Sashiko and Peng Fan. drivers/clk/clk-scmi-oem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/clk/clk-scmi-oem.c b/drivers/clk/clk-scmi-oem.c index be11d359b4ec..c1ebbdc6bbc5 100644 --- a/drivers/clk/clk-scmi-oem.c +++ b/drivers/clk/clk-scmi-oem.c @@ -39,12 +39,12 @@ scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw, u32 val; /* - * extConfigValue[7:0] - spread percentage (%) + * extConfigValue[7:0] - spread percentage in tenths of a percent * extConfigValue[23:8] - Modulation Frequency * extConfigValue[24] - Enable/Disable * extConfigValue[31:25] - Reserved */ - val = FIELD_PREP(SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK, ss_conf->spread_bp / 10000); + val = FIELD_PREP(SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK, ss_conf->spread_bp / 10); val |= FIELD_PREP(SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK, ss_conf->modfreq_hz); if (ss_conf->method != CLK_SPREAD_NO) val |= SCMI_CLOCK_IMX_SS_ENABLE_MASK; From patchwork Fri Sep 4 10:06:31 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4842 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 7554E3F182 for ; Fri, 4 Sep 2026 12:13:37 +0200 (CEST) Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-499c41f0c46sf677675e9.2 for ; Fri, 04 Sep 2026 03:13:37 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788516817; cv=pass; d=google.com; s=arc-20260327; b=BKORN4awCU8ct8M91sX5hyVNyh1QdVGKOQj1NUxIk0d5VYfWBduUeCvoFt2G+EvPYN /XND3t6Pj5aAe9KALJUxOQugYMV3qDhSiccorxWGkFO+Sir2XBR4BzfvlgzgeASyYns7 gDPr1PpmkpD0IlVfJYnM1QmwxhKL+kKqDq2l9MLNV3Pdw/CowHX+ejtoGKeUk2vnawBi ViudzxvS8fWlY4e7izRoCQ+BqmwLsh983EzFPJGU8RbwlhBIIybHGjUpKg0I5F2nvjMi W8LWdsg0dWyE9zL4RtowewAIgTukQtDcvju1VE7Hfq3BRdea0szaJ1YeBQ43tNt5Y9HN Ut2A== 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=jhLYFQ4PlNM5lJPwkt4rwFcyOULsa5vSfE0luCF6vZA=; fh=9ARZeyOixJjfWClEZ/9X4SBMVAxHR0A/JDBmNldQjoM=; b=YKM2IZcIq3LT2HROFPn3MPpCav/eLoApQbWLbiRuG26DnEc0Hp4FATMRTjAu4atW8S XboWErWHj7Ostc7drSEp9KHETX8lN18170CLrtp1ZbLz1y5xw9yuQZUuC1BmEG9a2uR/ izESURwvuBqqDJXlTQXO4QduHEeXI9m18Ez/E80jSVZZw/CchYSJLFI6bMQAf2MLgWen X+N9l9mYRwaJQOLm1CWVBlykaG9QugC4+Vp5f7plZPXwUHyZuB0VLEB8mwbANbwfGNJv 8n14VuKZAjx0tIbPffOHpSgEOVNEeXUXJ4wU3VvohMjAgPZdCNDxOYksNK7jLcvwsrJw qa+g==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=iOwbx40x; 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=1788516817; x=1789121617; 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=jhLYFQ4PlNM5lJPwkt4rwFcyOULsa5vSfE0luCF6vZA=; b=AqilhTYxq7x/KY8l9bHqhuSTpIHslqXwXC03Ir8EvcQi5Piy1LLbaIzjGeJvXrzoNK qLp4xYjYHYL1gNUFNLClKuNmStorXCUy8RfMYUfNlJVnd31ZP7/iHR4FS3toueID1NKz nzKg44Jmdl+7fZ1k8eGp7gCHJQdQRBzVIkS7Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788516817; x=1789121617; 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=jhLYFQ4PlNM5lJPwkt4rwFcyOULsa5vSfE0luCF6vZA=; b=AEgiJ7fG5ZtysPUZySzuvY9non7k2w+smQ1sMvnY9FD0/zvJN3JaN6SWW/5MufRodp dkTHvNiEwNuV4kXRZTscesb1dShLH0rw0PXreKqDCfUC+ki2WTD1mRPmgroKNDCClku1 c+sPNMK5BVnzKd20A88CNOvZ0apNbnQhLekj0A3N1i+uUB5673/ZsshZpYoA5LgcTDoI SkGskyqVC+gEMDkXCQlVC9EP1ftYOGjoYQfECxPWeFZo+qGrHvY3JmO0DiZuX98EDsdq lk1TczGoGPbf6d/tPb4NEl+qktaIsrSULHOXVTnpl5tPtplEOYRwwD67RWV4B+w4mtXa ZWPQ== X-Forwarded-Encrypted: i=2; AKwUvBxACswJH+V5fLlhzpBzZQuqrx/h5k/wHXrUKWZZn1p0XjRWDEPmOUvgd3qnw7ffUUI5q1mj5971otPFyZO9@patchwork.amarulasolutions.com X-Gm-Message-State: AFuF++kbWxoHhVIbhu92xyBuVTEoP7hFZhFTNqWyNMNZEkD4PRJckXkV sDUQSXMX+TSwyjQXXYjYERpJO0/3lRCCiW7NlE/NbBlQfQeWzvmcV6Hgf4UJoEtVUqMfZg== X-Received: by 2002:a05:6000:240f:b0:485:82bf:8721 with SMTP id ffacd0b85a97d-485891c0dcdmr4076599f8f.0.1788516817068; Fri, 04 Sep 2026 03:13:37 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="ATskLdciB3EUdcJkk3y5q+WItdLjtUrg84nfuGSL6GP5GSlaCw==" Received: by 2002:a05:6000:4817:b0:482:dd19:9b01 with SMTP id ffacd0b85a97d-485864dec35ls913886f8f.1.-pod-prod-05-eu; Fri, 04 Sep 2026 03:13:35 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBxbiNfFdwJXnsKl3892G5VG+MprWfFGHPtbIUC7KjIQX4EvQAI0VDYZw/oBOcAbFAJxVdwrDVtoc2zSh9B8@amarulasolutions.com X-Received: by 2002:a05:6000:26d0:b0:485:8a46:7056 with SMTP id ffacd0b85a97d-4858a4671a9mr3277228f8f.40.1788516814861; Fri, 04 Sep 2026 03:13:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788516814; cv=none; d=google.com; s=arc-20260327; b=iz3qOHVzOS79M9R5Xo38wwHz+CEXmztNllnpH0qz1tYx9yjagjUPsaICj9pQ2iT56k nB9aLl2dgnnW6qUO5SdTF0FCdY4y5jAFrrkfmdMyxCjntZpFoCyGTY8msTwYCrZY9CcB oFLhM1AolAsySp+Vdms75jlWgp3Of0g+UYojChpwO/oE93+X18XyxzJk2O93Mhy3pN1R TZiIP6B6g4GjZmEtxT0l/T1DD8/Ug89M5HlenUSME2IlMWm6RHGgEdfsgVL7qSbfTlxL 8OtZ/fEnVZLdLGPPxQ+rzNCXbmE/KluAlT1FBvTRknOf5bLKPqGUZIsbpFc8KLXGg4Am BBMA== 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=U/iBVA9/Ii7qFgco17f5RCUwPjhgNhGPbu+zTwjLGmA=; fh=egCduNXO1WSG6T//k1DToPOmPIFh9y212HV8JmQm7A8=; b=Eb9aRv1wZBoIPdpHOw/pHemFnGiOSuStqSBaOfHaobkFnJkOp21UqeKj1jDphOMTMA lGu17XTHPS0Zs/lk5l4hpd41xGkS0Q4Mk9aIEwZQUNfwXOS/m4hRMpMwLjjP4gTOxUoj ZjQXrggAnovheNpZ6u7ZkgiAXmZSbQjt2jifv87mWc2jc5A4PTqfLuXnj0DYwEU+4Tp1 kmiQjQbMJHd4Kj5UJi0jhDjWb4x5lfIq2siKYeg3Ury/rJBA2YER3RW5KfAstWqxmfhZ J/DjzA+oASY/UmG4QHVQkeVWwJd3sIPOr/8HQP5TQJ0LdHdAjKoDkNEFgbttKSolv7UU XNzQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=iOwbx40x; 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-485885c9653sor415840f8f.20.2026.09.04.03.13.34 for (Google Transport Security); Fri, 04 Sep 2026 03:13:34 -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-Forwarded-Encrypted: i=1; AKwUvByDp8aPRJqNFzadKjVhqm3a2+/VKK9DjloiOCBkiHkdem4m6YvdZgmrv7q8jXBdiot7mXI+FU682FLO3cW0@amarulasolutions.com X-Gm-Gg: AYBFou3YpsfQ/w7Rtz25ZyIAlSZnYB/zE8fN/teIVM3pUnpguRMZtSBppau24yrBK1y BHDoGztow4hPR5k/CAo9nA8seZpXprZuKv/C/TK5CXmIg1NOjmgpld4OQt2kS5QvtkbXZQbbl39 GdtVxvJoMJzwufb4fbAB+TkehY5s0/frDMdvxXS24bStKGtpUh/xonQyAW5IRCUXLUKDYQ+wb9F WpN6EEfcVe1vo5CuvnL69egVsztuRqMwKP9K4cc3k36x4L8fggvSf2LbWuXdZ3IzRlt0F+2GVD7 WSrefzC3pav/SkSDw+AzKyCWv1LhTTmhQ4H2bhSYSQfDs9c9w1lfQod/6rt/6bIKE9UQpxChlUv y80lCFSNYqQ/jDBimUc5QuYtu4B6UKFrlf5bxkEzDEVhbsWW9BShfjf/aRrPMXATOri2P7nfsel l3P4Xc3/HXbJwRp8fDuc4DP4DeY+PoCYWMfLyhOtMCtigGimA8c6wVhy0e+avW/WsavM0U/NMpW 1+rLC2ejNVNpOEUmsWblsIj5LqwFGgWu67wVoUuUZUxuUxPLm01BizmK2/YCjGwHXeT9LXaAYOw bXUe0HBMGTGzs+xiWzt4vi/XCPhzrvbpAsJhxO1brV+rVw0HmWIQCBE= X-Received: by 2002:a05:6000:40c7:b0:484:3310:f394 with SMTP id ffacd0b85a97d-485872d2de3mr5945970f8f.23.1788516773023; Fri, 04 Sep 2026 03:12:53 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com (host-95-245-93-90.retail.telecomitalia.it. [95.245.93.90]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48588390e30sm5317990f8f.7.2026.09.04.03.12.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 03:12:52 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, linux-amarula@amarulasolutions.com, Dario Binacchi , Sashiko , Peng Fan , Brian Masney , Jerome Brunet , Sebin Francis , Stephen Boyd , linux-clk@vger.kernel.org Subject: [PATCH v14 2/4] clk: validate spread spectrum configuration Date: Fri, 4 Sep 2026 12:06:31 +0200 Message-ID: <20260904101243.412006-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904101243.412006-1-dario.binacchi@amarulasolutions.com> References: <20260904101243.412006-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=iOwbx40x; 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. The KUnit test data for assigned-clock-sscs uses spread values of 30000 and 40000 permyriad (300% and 400%), which the new check rejects, as reported by Sashiko, so fix them to 300 and 400 (3% and 4%). Also use a realistic 6% value for the initial settings of the skip tests, for consistency. Fixes: c86814e70390 ("clk: Introduce clk_hw_set_spread_spectrum") Reported-by: Sashiko Closes: https://lore.kernel.org/r/20260901155657.6A5981F00A3A@smtp.kernel.org Reviewed-by: Peng Fan Signed-off-by: Dario Binacchi --- Changes in v14: - Add Reviewed-by of Peng Fan Changes in v13: - Fix the KUnit test data to realistic spread values. - Add the Reported-by/Closes tag for Sashiko. drivers/clk/clk.c | 14 ++++++++++++++ drivers/clk/clk_test.c | 12 ++++++------ drivers/clk/kunit_clk_assigned_rates.h | 4 ++-- 3 files changed, 22 insertions(+), 8 deletions(-) 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(); diff --git a/drivers/clk/clk_test.c b/drivers/clk/clk_test.c index 1c5c8b7c1f3c..21e62d68f87f 100644 --- a/drivers/clk/clk_test.c +++ b/drivers/clk/clk_test.c @@ -3526,7 +3526,7 @@ static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_test_p */ .desc = "provider missing assigned-clocks", TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without), - .sscs = {50000, 60000, 3}, + .sscs = {50000, 600, 3}, }, { /* @@ -3535,7 +3535,7 @@ static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_test_p */ .desc = "consumer missing assigned-clocks", TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without_consumer), - .sscs = {50000, 60000, 3}, + .sscs = {50000, 600, 3}, .consumer_test = true, }, { @@ -3545,7 +3545,7 @@ static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_test_p */ .desc = "provider assigned-clock-sscs of zero", TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero), - .sscs = {50000, 60000, 3}, + .sscs = {50000, 600, 3}, }, { /* @@ -3554,7 +3554,7 @@ static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_test_p */ .desc = "consumer assigned-clock-sscs of zero", TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero_consumer), - .sscs = {50000, 60000, 3}, + .sscs = {50000, 600, 3}, .consumer_test = true, }, { @@ -3564,7 +3564,7 @@ static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_test_p */ .desc = "provider assigned-clocks null phandle", TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null), - .sscs = {50000, 60000, 3}, + .sscs = {50000, 600, 3}, }, { /* @@ -3573,7 +3573,7 @@ static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_test_p */ .desc = "consumer assigned-clocks null phandle", TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null_consumer), - .sscs = {50000, 60000, 3}, + .sscs = {50000, 600, 3}, .consumer_test = true, }, }; diff --git a/drivers/clk/kunit_clk_assigned_rates.h b/drivers/clk/kunit_clk_assigned_rates.h index d7ae5ec2d25b..c5d9f004ee81 100644 --- a/drivers/clk/kunit_clk_assigned_rates.h +++ b/drivers/clk/kunit_clk_assigned_rates.h @@ -9,10 +9,10 @@ #define ASSIGNED_RATES_1_RATE 9700000 #define ASSIGNED_SSCS_0_MODFREQ 10000 -#define ASSIGNED_SSCS_0_SPREAD 30000 +#define ASSIGNED_SSCS_0_SPREAD 300 #define ASSIGNED_SSCS_0_METHOD CLK_SSC_CENTER_SPREAD #define ASSIGNED_SSCS_1_MODFREQ 20000 -#define ASSIGNED_SSCS_1_SPREAD 40000 +#define ASSIGNED_SSCS_1_SPREAD 400 #define ASSIGNED_SSCS_1_METHOD CLK_SSC_UP_SPREAD #endif From patchwork Fri Sep 4 10:06:32 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4840 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 AF7093F182 for ; Fri, 4 Sep 2026 12:12:57 +0200 (CEST) Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49cc954a3edsf6238675e9.2 for ; Fri, 04 Sep 2026 03:12:57 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788516777; cv=pass; d=google.com; s=arc-20260327; b=BPlU+jY9oDlyWuXQT7cVQPQZE2jnHKsp2xLpbLdd3OMcaIFq9O0Q9Ejn2eBbmLBi6P GCUOYsRsps6c6nDTBQI+o8Y6512SmkoRfXbDCzds1Ib/Po+GBujj/Pp/b56+OXO4B9Ik 9YSklNTqwVHjFyMT5RSNSR+uyuPcB19/846sK22jU9qqYZhVVTAmPBSd5xe+hyPclnTH yX8lzzhRcT6SarwkOWX5sSJy6glxFin85ZFjAoHx871r32eEzb3rIEtdoaI4cKcui/yu OqQoi7Si343F7FBH/65+nl3hMrk4HMb/nPLkpcuUEYTpxcEIvVfqUm/G0JgpaMzS1tEI a0kw== 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=AHxupVROvdGzYTvCkQ/5g19jYGLAsD/M8OByqZUzjFk=; fh=AkK7pZbl3lRc11/r2TpDzBzzeyr7rFpOoEUXniGHgYU=; b=UART1TpdspOB99xs/5osCb/7rsl8gGq+63oqnTGISewLXAartrzI0UgfC/0hkKr+UT rUst7P8d6tHca4biEx4xU+mHYfcdblTx+YRlk9ph+uB7I289n6yaERQKqRBtyswKHwj/ Ogx7Lz1ZymhrqDpAHuVmy0/PsuabSSNmOjm0g9Af5paALmILNeeZcibkd9V+S2cD8M8r 7cbXSzjE+tjAruQ+5/Pa86cl7JRW1xv4OLbYE2bM+rOzAt9I7Y1buJcUNjMlHXBHAgPo h0II7QonmTSdA0Tpf/egbdUcTYbccqDAasKjO+7hkdVgyN9X57ur277UTxdlHdI5b6c0 6euA==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=RbOMx1n3; 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=1788516777; x=1789121577; 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=AHxupVROvdGzYTvCkQ/5g19jYGLAsD/M8OByqZUzjFk=; b=IkbzNQ5PF2f5FB1YaX817f1vGOGgo6fcTFZYEKOuoHLPKgz+tpuUm4xXYqZlqEmH23 UEEW6fJkO3r8DlYg2SBiGP6eUwe/BE26IyEq1XqpS28sTAUetHnezo3zHHCGN+4f9CxJ fc7PlXa1q5UhYpNBz3oRJKR9joYe+6laBuV58= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788516777; x=1789121577; 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=AHxupVROvdGzYTvCkQ/5g19jYGLAsD/M8OByqZUzjFk=; b=Y1k9b80R5SxyyD1FSP1CWnCzk4URFekSkWeMvYqv/oEMQopP3UMRerMWOzQ2OAi7nf NCwvKyNff3sS65SLHgiNDG01iqAUfqa0AiDBZ/MtKYPReyvtFAPTYKdQk54HukaYG2nO OGSz6TLp6y8I6+TL3HRDRMEbCziM/cyOKggYRakW34480PrHAjCmbCxy07z+LB63OXWP L1WmRSfr0fx9npyPtFDd359Ybr/kfRW1z5Be06XO14ucX50xGulvxKWPryoyP2qW2Ydq Uh5hWQni+yjI07dtlfuu8kt/eSfYGgcRn89od70nBqdDWBjqSRbtPheNo6SLlNl2IGic RYlg== X-Forwarded-Encrypted: i=2; AKwUvByh3WopbzfoSf579dsd1nMOwb7Y0Tl0lOJiTksNoIGCipHR8UYRxPioVGw7j+ac/o9o0heCtclVlRtaUbrx@patchwork.amarulasolutions.com X-Gm-Message-State: AFuF++kTrlDHYG71oAkgxXN+ABN50lWECQOOfFrSoNoTOM4HmyWrvxQ9 70w+q+6jyopGdEq0MZrgIjH8q+641r6i5xZI4l7RXxTy+9AUXLRdEYvf9/NvP5L9y5iAIA== X-Received: by 2002:a05:600c:64c6:b0:49c:fa20:cc02 with SMTP id 5b1f17b1804b1-49cfa20ccaemr27063445e9.25.1788516777231; Fri, 04 Sep 2026 03:12:57 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="ATskLdd11yJq0PWOeQWKHMIr1hSEK+Z9YVNPpciP84FcCHcuRQ==" Received: by 2002:adf:e009:0:20b0:461:9ef2:cae6 with SMTP id ffacd0b85a97d-485864dd386ls460652f8f.1.-pod-prod-04-eu; Fri, 04 Sep 2026 03:12:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBx3BFy0ui/RyxPU7TGp/HdpjtyY2iYH1ERyrduFs3aCkt7s2Bn/5Y9RtHG31krf5pZlJXWWbRHyS5raay6j@amarulasolutions.com X-Received: by 2002:a05:6000:2084:b0:485:8a46:b3d0 with SMTP id ffacd0b85a97d-4858a46b5a1mr3531370f8f.56.1788516775232; Fri, 04 Sep 2026 03:12:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788516775; cv=none; d=google.com; s=arc-20260327; b=swfTdDP+4nD+o3UvAC38RId6vsmlk8P3Pt2mN3+wWIGdJgu1GakHWVe02xMB2+pom/ pM5HhynVVHCFCEf1lYTH80aI5j/rGqo6x7nMfjH8aNnmB6kAP43gcq3K6tMOVQaDrpJn ACu1FkKQ8UwtfLtdyoVfoewylDojSbYJ8+4zxeEKfvHe6ggACaj9a1tO1jRwc/3HZCWm 1YVMd4+XqhrxWIp3qG7YxlwILl4SjzLj8VrilRbiMkWli7YkZfB//mj0NidZLvbh7W+H 2vZumM+PNudddCMcbArbgJmLQg98vaHYE9BpHlwJEBtDd5ETuVgq/zWLrV8I+QdkEAQx GBNA== 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=fjBHI89nbApApOn8aT/Os8kMb1n8Jfct1CD1+zTK8UU=; fh=2j39MjyE4kkhkLlxm00RRh0IjGtIFMkQLqS5+CKIsVg=; b=NzeGZtDsoGK0kfK8w/cSqae4CBnMa+t93cXNOPCa+FwJ9KTJZ0p40mH7hLuLPCRGOh a+V4Mra7rAxbegrRrC7N2lio2uMKImuAjZ1ePVNiHzhb1PTCw2EP4sNmFvnHwF9UwBtt OBYVZE8B/XKrW8HWmKUjTuM535rRhQJYufiWiIQ/vPY0ojqoC5R24YtC6zEPmwZegsLs a7MRoAVu0GAlhkHUUcnT/LsGF3I1Xl1SRSznQe0YHIOMvSMqwq+GSsaTdhH5K+p7Vqej cMDxrXGnyl0lnSMiZDhAHtNTLHk+PuGdck63h0Hh9OFzBidMAJubzYC0zwNQiTS5GbEE 1mMQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=RbOMx1n3; 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-485885b566fsor219770f8f.15.2026.09.04.03.12.55 for (Google Transport Security); Fri, 04 Sep 2026 03:12:55 -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-Forwarded-Encrypted: i=1; AKwUvBwBkBxk7d4Z8ydT+c6hdM6Qxj2M9ozsIvEUEFNHrerM+4kZYYf79eRhE2mCZghXrrYUBe/2Rrh1rpwIwqRd@amarulasolutions.com X-Gm-Gg: AYBFou0ISRmzufJlezl4FWfSu/2QzrqLdvl7e8CGEUyQyGxQ7AVhdi50mMgwSn+zQjP iVhh1SXMsU2ovIk0ZnC8V859hLkwVZZR2ITlkc8nq+A/Enm6X9+9YVYJnoKThvpsC5+QYYR37zg 80r9soQTvQYg8Rysd2XLCMXqrRh4JeTfnXe9sE4oNJQIHQ9ouXQBCyCM2KdvtbhOW8mdtQXD8LE snf1t9r0GmRUBycaXSgx0WYPOKwyQ7hoE82X0zvMRsDtGXE5KZjKlpAvG2hLOrrfzbFTYX7/pd6 HQhZLkut+vKzfA+9T9ovlpam/aTY4YuOLQWsDYHzXh72L1RMu5MIXUST1xcgX1fgMrIkSaH8YNh cUOO5mptVlUIo/o9bfhfxn8S7tlaSqHWUFbr+BUFS/TEIVbkJme3bHDYjbtuBjjCK9PVsI9yCYX FflE+BqcDW3m78/EfR5gDsD55kRt0oQ9k42uMa4mZFdnJtJETlTjqXY2nAWSVRbhkW0THXf5/w4 qjche4xUw5QPq0V5ibsMkAd940LSP6gZwdm8xp3yF+3jk4Tpl4XuU0xC6t/SYQ9ScVACd8DATjl ShDKzSyMaI7KWG/qv4FJCx4z5+YVo1WjzPc99RxHFAzaDmMbM6WYUkw= X-Received: by 2002:a05:6000:26d3:b0:482:f5f6:d253 with SMTP id ffacd0b85a97d-4858728a2ddmr6662967f8f.12.1788516774774; Fri, 04 Sep 2026 03:12:54 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com (host-95-245-93-90.retail.telecomitalia.it. [95.245.93.90]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48588390e30sm5317990f8f.7.2026.09.04.03.12.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 03:12:53 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, linux-amarula@amarulasolutions.com, Dario Binacchi , Brian Masney , Jerome Brunet , Stephen Boyd , linux-clk@vger.kernel.org Subject: [PATCH v14 3/4] clk: scmi: reject SSC configuration out of the OEM field range Date: Fri, 4 Sep 2026 12:06:32 +0200 Message-ID: <20260904101243.412006-4-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904101243.412006-1-dario.binacchi@amarulasolutions.com> References: <20260904101243.412006-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=RbOMx1n3; 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 i.MX SCMI OEM extension stores the spread in an 8-bit field, in tenths of a percent, and the modulation frequency in a 16-bit field. FIELD_PREP() silently truncates values that do not fit in the target field. Moreover, the conversion from permyriad to tenths of a percent turns values below 10 permyriad into zero, which is then passed to the firmware as no spread at all. Reject these cases with a warning instead of silently programming a configuration different from the requested one. A request with no spread method disables SSC, so send a zeroed configuration to the firmware in that case, without checking the spread and the modulation frequency, which are meaningless then. Signed-off-by: Dario Binacchi --- Changes in v14: - Send a zeroed configuration when no spread method is requested, instead of rejecting it, so that SSC can still be disabled. Changes in v13: - New patch drivers/clk/clk-scmi-oem.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/clk/clk-scmi-oem.c b/drivers/clk/clk-scmi-oem.c index c1ebbdc6bbc5..29acd2923fd6 100644 --- a/drivers/clk/clk-scmi-oem.c +++ b/drivers/clk/clk-scmi-oem.c @@ -35,19 +35,38 @@ scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw, const struct clk_spread_spectrum *ss_conf) { struct scmi_clk *clk = to_scmi_clk(hw); + u32 spread_pm = ss_conf->spread_bp / 10; int ret; u32 val; + if (ss_conf->method == CLK_SPREAD_NO) { + val = 0; + goto oem_set; + } + /* * extConfigValue[7:0] - spread percentage in tenths of a percent * extConfigValue[23:8] - Modulation Frequency * extConfigValue[24] - Enable/Disable * extConfigValue[31:25] - Reserved */ - val = FIELD_PREP(SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK, ss_conf->spread_bp / 10); + if (!spread_pm || spread_pm > FIELD_MAX(SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK)) { + dev_warn(clk->dev, "%s: spread (%u permyriad) out of range\n", + clk_hw_get_name(hw), ss_conf->spread_bp); + return -EINVAL; + } + + if (ss_conf->modfreq_hz > FIELD_MAX(SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK)) { + dev_warn(clk->dev, "%s: modulation frequency (%u Hz) out of range\n", + clk_hw_get_name(hw), ss_conf->modfreq_hz); + return -EINVAL; + } + + val = FIELD_PREP(SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK, spread_pm); val |= FIELD_PREP(SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK, ss_conf->modfreq_hz); - if (ss_conf->method != CLK_SPREAD_NO) - val |= SCMI_CLOCK_IMX_SS_ENABLE_MASK; + val |= SCMI_CLOCK_IMX_SS_ENABLE_MASK; + +oem_set: ret = scmi_proto_clk_ops->config_oem_set(clk->ph, clk->id, SCMI_CLOCK_CFG_IMX_SSC, val, false); From patchwork Fri Sep 4 10:06:33 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4841 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 117283F182 for ; Fri, 4 Sep 2026 12:12:59 +0200 (CEST) Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49cd74fc1aasf5032835e9.1 for ; Fri, 04 Sep 2026 03:12:59 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1788516778; cv=pass; d=google.com; s=arc-20260327; b=IfZCdRhc1/KJlOtiplTYCe4K0qvMVuI1ZAPhNgcJPPe6ryns6pmG9nvA7h6NIdjoxV DZG5fSAMn2zri/V3xto03CTMMY8htZQ8sKFAZFzanf9P5+oDhM7ozxyLJObdAHmL8d6Y GeJXvZ/HF3wHm/oTSxbqwlMksu/9P8+uiSupZqfEaFT5E+IV+jaKCk0sQemyvNrIe4vk Lzylx6Rqy2Bu3GIQSiCK5hE5KDfUe+rdPkZHHnJKblADBt/Zs4j3q0J/0ZArDBr5pTW3 iO1syA702oAReByzLAwn+H3V+t3F9R/0yGrO8oH6HQ6yW03b/8A3OYj+h/WdSpkcwbse CiPQ== 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=XYKA77Wr6YrhhUaTbpqrAk4+d5hhRjwQ3+/LI8Lo/Xs=; fh=mEtwXnHM0mRjpxcIVMqYKkMezT42mNNEdYBq08XU11k=; b=SjzeJKB1YcOzcZpoJYUVKOwK8M8wS1jEPhx0nfFxgVE1I1YOj48RHFEJCx64RaS55Y hkVwPhcjZS8iOwYVXJVmK7fTJ65DhFUF80pMxMBV9OncMr7nVnv9CvWUQ+W3japAaTc5 gXW3y44mI8ePb2C0+cdZIJz5vPiXW1FO4Z24raF0wiKVxG+Dfp5FhAjFGkAqeI3i0eu1 dOvKGXj+YdcqYgsYHy6V0mwiS1HuMHdZmb4nYW8t1NLCjqtcjzcJfm0epDoD0wRTDK2e CV6xFJHPmN8fQjXDKww7L2g90YDYlIvtF5YEClFHYEUL8NOIoslRNyJvt/UgIHDIbUCR 3iBQ==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=eGhhIda+; 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=1788516778; x=1789121578; 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=XYKA77Wr6YrhhUaTbpqrAk4+d5hhRjwQ3+/LI8Lo/Xs=; b=YKTmOsXzDqTkdAydYOoLLPAV7KIf1eH0fuFDsk4bZoT6lC9bzvYNjpFss0BMYBDCI2 /ngq1EwuVn1vAB9GjQ79I3qCLlA7nlAPAvCSttt07mow8/n+H7hAvNBDn6iFvKr2dkeK gyrbrfh+4zQVYz1bzq0peAQQm5ZeaOesSA2Oc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788516778; x=1789121578; 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=XYKA77Wr6YrhhUaTbpqrAk4+d5hhRjwQ3+/LI8Lo/Xs=; b=Q5TcryvjDeoY3nKz5xx9ygMbXxm7ElwTzvqyx9rO3Oy7Zf6FRSVx4m5esONK0zAMwP lt0sCDqnk05wfb6TppJix/KW4fA3uW38Z3YcwwU2TanyyVs13MKJzDfY9XRq6ZeN3T9v RqSPHlNT4O0tb0Rcy8AJdoAvwuuECt8c0aVoAZsskbhsbjaf1EE8gQCihIpGpXJPFgKk 2LDzdKz1D/NtBShxSR1lM8ziJ9eC8mJIbi9DsGQKax3OzgJqsNRSxrvnNwXZxq1kQC53 BvzzSwpWU56MKDRSaVUmMVsgvwpdnqVHn+C1XvDsk6JbIJUUDmeeR2tB3daotsC0oSoh cnfw== X-Forwarded-Encrypted: i=2; AKwUvByWxfZbESR5BhYEbdF/y3w0Tyq37oxRoOtVX4JCLTMwa1EsEIxEjO0ILo9/OJ1r0uCo07RVrNqDXLhn5Dz6@patchwork.amarulasolutions.com X-Gm-Message-State: AFuF++nR9Lpo3/s+L64ftvA94CD9uVnK/z/EV0OCsObmaHhKU8Dswdw0 mk+nzc2DrMWsgiRLpBJZJ873TYr3rJoKNYEiiDu404w+6ZGITtVCgjD5DijjTR/gp5D2ncVqUCz wxQ== X-Received: by 2002:a05:600c:4e86:b0:49c:fa20:cbfa with SMTP id 5b1f17b1804b1-49cfa20ccb9mr30515715e9.17.1788516778659; Fri, 04 Sep 2026 03:12:58 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="ATskLddNLwAOJj0ZcO/zPcG2QnSSZVdrdTZQ7whDqxwz+f222w==" Received: by 2002:a05:600c:3b8f:b0:499:8364:19be with SMTP id 5b1f17b1804b1-49cf688c9a4ls2576555e9.2.-pod-prod-04-eu; Fri, 04 Sep 2026 03:12:57 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBzWqJkw8wMwczsMqDYMalk9kEDSvXHqO5LnArg0IbOmkrc1fJjGnfm3UxW/7RWtEK3LozWeSCVtsdx1urrJ@amarulasolutions.com X-Received: by 2002:a05:600c:5247:b0:493:aa0a:45ad with SMTP id 5b1f17b1804b1-49cf81dadcamr44521625e9.2.1788516777197; Fri, 04 Sep 2026 03:12:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788516777; cv=none; d=google.com; s=arc-20260327; b=Ap8jBNEJGcEdyKo8s2M0853zqfNcQOgqIA7Ui7yLta2fZVOXDZsFPtBFivsVV/3XQ5 EW5QngS+F/jFCUGxjb1gZ9er9TbvCyXghiM4eU+XDgV4uFJLhEgsTNdhi3aT9Sryaj1M KukMW16HjGdVhBj/HfhRfrekYYt3NC9MTL7g50rz+/lfY6qbs3rKrHp4AJ99I8pTHjFf jPOoxhsKDiBYt+Z4Ojb+0DESaEJjyG05SBc6CWT+Hz6ODdYZOCfWjFllBnDHYjXqdnj6 UyqrDQgVI5fsuHVC7V6rWTXr9fjAnsAY7mldJP1aaZDH7h5ByGsXjSlfxv/fsSpC86m4 YxoQ== 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=hWVY1uMj4PCC62NWVYIfzX5Mbc8Yyn+zUzGlrLMkZwU=; fh=7H5G0N4M0q9lFjxHqpbUcnxtTeOqf3wnmEchMYdgF5U=; b=nVgzYnDtHErAkvzl8q4Zd8i8sngiikO/KwsczhE93rWrw7wQJO03afpwjw7jnqfJjs ohjnN0CJuOKW2M5IkzpgPeQOBA43ml6eZeOkTaIY9bxaNmn5FS1afcDbXxbdCA5ZZLsJ kcoiyEo2SQwULzj5Sp4Uy/yKfBigmYTUc5BWsdualIHaoStJkG618kgFGD2GlKBhcT6I a3UXl2VtP8J5tC27c5XW3sdVTxb6y/24VMDE1WGg8HQ0gE3FXYZjJA2vGSzwfCgzxW26 v2/79NzDx6do8yQPYXK041lpDviEjMsSY9sm3m584qslvyaSR1aN4q+1lILvLSKw0QFl BddQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=eGhhIda+; 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-49cf7744f55sor3124025e9.16.2026.09.04.03.12.57 for (Google Transport Security); Fri, 04 Sep 2026 03:12:57 -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-Forwarded-Encrypted: i=1; AKwUvBxmMYT811oEj2+NYwh/pxNvIkoBEeAL8j5flFn1w5+woIvmXIdYjzZNlGwTm21EJb3fyLa9AsHXc9F/Um0n@amarulasolutions.com X-Gm-Gg: AYBFou1qZIl8v3IHmwIFsR2QS1+u0HoEGpH+Pk50VWfpTiNgq/dp/U9Lynhi0zYUt+3 Fa+ED8Wcba8qJzqeN7Gtmiqw7261bU5HKsOmeeKZ9ut7FNDmzKnn9laW+voZ7IA1F+m+O43BOU2 bCerkwVMa40K7D8AKy3Pl+pLMk4ES3woDYwABMa7HTkthTui4KfCstNhNTAroLXKPl7tlLGBPC7 ++mjaafO7mbCYfZmzfgmomRSzWHh1Ejt6PUk1lYr38unr2oxFzsbpE1DxkjKLFTiyT447zCK/Le 1H+BgNe+1K2EKDOJQUTAeUN66g77hHOajdVCBx/5sroOwesnv5zIOER5L5J9Qs27AFUYxFNrARi 1PX/shzRFQifq6TAUT65zEYdJ4YcpZ+8z6uLnncERBN0Mc1pGsNhaasUCGl5mJwjTohJ5hPYjN5 OvefUgTUVGbUoNMxT4frjVKQnca886KLm+6MEMDpY5blGBvXld12Xq063CIyANg4r69u4H/8PlW KwLLJMxp6UostKTH733o4p8ZfS/90sU123OBlaiqK0UBKGaV1psUcJv/QfcLnNG58YDLe4Cg1Gs pm/5OQAX7akGs8o9pdTj8n4Esbxlyw0RPptZALG2gM9i/Q4eb2jWkHk= X-Received: by 2002:a05:600c:37c8:b0:49c:cee2:a508 with SMTP id 5b1f17b1804b1-49cf826c4e2mr44990695e9.16.1788516776720; Fri, 04 Sep 2026 03:12:56 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com (host-95-245-93-90.retail.telecomitalia.it. [95.245.93.90]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48588390e30sm5317990f8f.7.2026.09.04.03.12.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Sep 2026 03:12:56 -0700 (PDT) From: Dario Binacchi To: linux-kernel@vger.kernel.org Cc: michael@amarulasolutions.com, linux-amarula@amarulasolutions.com, Dario Binacchi , Peng Fan , Abel Vesa , Brian Masney , Fabio Estevam , Frank Li , Jerome Brunet , Pengutronix Kernel Team , Sascha Hauer , Stephen Boyd , imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org Subject: [PATCH v14 4/4] clk: imx: pll14xx: support spread spectrum clock generation Date: Fri, 4 Sep 2026 12:06:33 +0200 Message-ID: <20260904101243.412006-5-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260904101243.412006-1-dario.binacchi@amarulasolutions.com> References: <20260904101243.412006-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=eGhhIda+; 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. Reviewed-by: Peng Fan Signed-off-by: Dario Binacchi Reviewed-by: Abel Vesa --- Changes in v14: - Rate limit the warnings on out of range SSC parameters, as they are re-evaluated on every rate change. - Add a comment on why the mrr computation cannot overflow. - Add Reviewed-by of Peng Fan. Changes in v12: - Apply the SSC settings also from the set_spread_spectrum() callback to handle the case the clock framework skips set_rate() if the requested rate is unchanged. 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 | 103 ++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c index b6f1cc9f5700..84e081193f24 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,62 @@ 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 || !parent_rate || !pdiv) + goto out; + + mfr = div64_u64(parent_rate, (u64)conf->modfreq_hz * pdiv * BIT(5)); + if (!mfr || mfr > FIELD_MAX(MFREQ_CTL_MASK)) { + pr_warn_ratelimited("%s: SSC disabled, modulation frequency (%u Hz) out of range\n", + clk_hw_get_name(hw), conf->modfreq_hz); + goto out; + } + + /* + * No overflow: the core limits spread_bp to 10000 and mdiv is a 10-bit + * field, so the product is at most 10000 * 1023 * 64 < 2^32. + */ + mrr = (conf->spread_bp * mdiv * BIT(6)) / (10000 * mfr); + if (!mrr || mrr > FIELD_MAX(MRAT_CTL_MASK)) { + pr_warn_ratelimited("%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 +457,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 +481,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 +509,36 @@ 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); + struct clk_hw *parent = clk_hw_get_parent(hw); + unsigned long parent_rate = parent ? clk_hw_get_rate(parent) : 0; + unsigned long flags; + u32 div_ctl0; + + spin_lock_irqsave(&pll->lock, flags); + + pll->ss_conf = *ss_conf; + + /* + * Apply the configuration to the hardware right away, using the + * current PLL dividers: the clock framework does not call set_rate() + * if the requested rate is unchanged, so relying on it would leave + * the SSC settings unapplied when the PLL is already at the target + * rate (e.g. configured by the bootloader). + */ + div_ctl0 = readl_relaxed(pll->base + DIV_CTL0); + __clk_pll1443x_set_spread_spectrum(hw, parent_rate, + FIELD_GET(PDIV_MASK, div_ctl0), + FIELD_GET(MDIV_MASK, div_ctl0)); + + spin_unlock_irqrestore(&pll->lock, flags); + + return 0; +} + static int clk_pll14xx_prepare(struct clk_hw *hw) { struct clk_pll14xx *pll = to_clk_pll14xx(hw); @@ -509,6 +611,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,