Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp1753981rdb; Mon, 2 Oct 2023 22:51:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGYpSXKfw9lz96WmnI2in0bRma5e9HSx5ATjRENOAEcgV8jG0z6XVGgAkcXDrGegGiU3hIT X-Received: by 2002:a05:6e02:2189:b0:345:79eb:e001 with SMTP id j9-20020a056e02218900b0034579ebe001mr18077839ila.19.1696312266780; Mon, 02 Oct 2023 22:51:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696312266; cv=none; d=google.com; s=arc-20160816; b=ch9EQj98KWUrxwSmv0nlQyAkH/u5llc4iV1Vpf3yk1kTifDPuDXiNX8U11LEDcZqsc spE0jW3TkifGbUvPVKNnt+JOBt3ZekrrlX8cY9+4lUc0qsTwZwnKYCy+4SJe1ls7S56d VbkF6sbc5Chnr6APPJ47Esll9fI3o5p/Uuciqh13Qh6/PVYXfMTWZ/lf1TfB75pUW7st 07SUxm1ewnSUyKWwtrnYY0cm1r72R8G54Tfdi4W1Kc8IASmbLt7AyUabelHV25NiCdgm WLt9zdz9y8rkup7MeOKZeAW/23Zguc9mLP53skVBXSJ2+pZS4FSqoY0t7BwlWmj4BA26 z/HA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature; bh=7sWvUIyND0HCDU8OZGMQLwzLFIpQw7QMWwwvBYPky4c=; fh=oHsVo043MgSTnXVs4OwZyVfiuh+wMLZPsTGVO7dkogw=; b=dXRZk/WtZHuZ4kBgGrdaIhLcz/p/VCKUfSjkIFCd+HeKYbbBXMMId61YRZ9QLZQQYz +Umk+AJj/SYr7bFNy/3CoIJFuqpC+RBqDKL2h6Rw2dXey6uqZhXb6o+Pq7JugpgrXIi3 K5/3dCyGb53AMwKWFumwn5Hz0jdpyJ+0WYbaVg+DiJzIVFAUvPLPhqtDKcDF4OIjo+Z8 UyOQ6t3jJH0kcDySWrF4BwDhuR5feEuqs7q4Uiz2Vqvgf5i//+V/LIF8Jo+n/7Bd/x1H 8kQfmuXHMsfMIc8hvgG//QhP11JKl3zRKNywBOma4yjZq7u+H0p/E9xViFNy48AgUAQA BS8g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=kyRW2dBv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id h63-20020a638342000000b005775e13a6b9si654832pge.363.2023.10.02.22.51.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Oct 2023 22:51:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=kyRW2dBv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 23070801C92A; Mon, 2 Oct 2023 22:51:03 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230149AbjJCFu5 (ORCPT + 99 others); Tue, 3 Oct 2023 01:50:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55232 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229920AbjJCFu4 (ORCPT ); Tue, 3 Oct 2023 01:50:56 -0400 Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E609B8 for ; Mon, 2 Oct 2023 22:50:53 -0700 (PDT) Received: by mail-ej1-x630.google.com with SMTP id a640c23a62f3a-99bf3f59905so80744466b.3 for ; Mon, 02 Oct 2023 22:50:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696312252; x=1696917052; darn=vger.kernel.org; h=message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7sWvUIyND0HCDU8OZGMQLwzLFIpQw7QMWwwvBYPky4c=; b=kyRW2dBv5Dk8hsOphlGDKwhsLOKGHfYBETgvTG7ZdLzZ8X9eCRfch9zLc6gb8qyRLI ZZaqMi7eItSWCpzzt75eU7u71RtYBYf5xvWOOY+IBfNywAqtzVV7FS7ldrODwsbFldBN GvA31RmwooXYCtTjGyt4UyXN4NmhwITDlN3+z9B5IZiP2E23MPCQW5ExebTIq0IPObg4 ipetdvRlNMSHK35ZdwyUPgca/R3Qo2Gr8jSspl+5lJGp1N6t5fOhvx/T+mTeFG173xrD s2/hTo6IYFFJqP21aITiwW5LaOVfft8UHl9NS4nOv+4Bnu03mRyknv7ehjWZdeVNdHH/ PYaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696312252; x=1696917052; h=message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7sWvUIyND0HCDU8OZGMQLwzLFIpQw7QMWwwvBYPky4c=; b=TDC9ytZJEJXdE9x7J/3u/nNSSHwK6O8yybHklyvsiYWTrnguGt1XqeefdSrO1n2G0q yhd9X61t8BUg7Dn13r2sphqZROCciVJ8Q0dRYvuRUvbe1Os4NWNY0jfposYQwoFZWn1a +5dtBq6yHP5hvLRn4dl2YNjDjh1btkBANTyY35sFK/w5qB4K0X/RtBuyqwp42Daz7ISB OdMdCwmwmO6gaAlMx6FqPv2qO8Z2gWREL7S8xf1GqG4EiWOkB7oYx7i6s3R5loiJ9+wN lwr4wnoqtP48TuWbz8QY7CSYGmy9gsC3tbsPHZxuPHnWEqWa4WLb7D2vKTkDYgLM+jRe m+pA== X-Gm-Message-State: AOJu0YyBbxgGOlj0nkvEKTcbRJOYRvsJXQcMABeJ3NX7ewH+W9odInWT QBZ/QscQd6CJAmkaC8LRfPA= X-Received: by 2002:a17:907:1dcc:b0:9ae:406c:3425 with SMTP id og12-20020a1709071dcc00b009ae406c3425mr13112083ejc.0.1696312251468; Mon, 02 Oct 2023 22:50:51 -0700 (PDT) Received: from localhost.localdomain ([95.43.220.235]) by smtp.gmail.com with ESMTPSA id kj6-20020a170907764600b009ad88839665sm441309ejc.70.2023.10.02.22.50.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Oct 2023 22:50:51 -0700 (PDT) From: Ivaylo Dimitrov To: daniel.lezcano@linaro.org, tglx@linutronix.de, linux-kernel@vger.kernel.org Cc: tony@atomide.com, sean@mess.org, Ivaylo Dimitrov Subject: [PATCH] drivers/clocksource/timer-ti-dm: Don't call clk_get_rate() in stop function Date: Tue, 3 Oct 2023 08:50:20 +0300 Message-Id: <1696312220-11550-1-git-send-email-ivo.g.dimitrov.75@gmail.com> X-Mailer: git-send-email 1.9.1 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 02 Oct 2023 22:51:03 -0700 (PDT) clk_get_rate() might sleep, and that prevents dm-timer based PWM from being used from atomic context. Fix that by getting fclk rate in probe() and using a notifier in case rate changes. Fixes: af04aa856e93 ("ARM: OMAP: Move dmtimer driver out of plat-omap to drivers under clocksource") Signed-off-by: Ivaylo Dimitrov --- drivers/clocksource/timer-ti-dm.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/drivers/clocksource/timer-ti-dm.c b/drivers/clocksource/timer-ti-dm.c index 09ab29c..5f60f6b 100644 --- a/drivers/clocksource/timer-ti-dm.c +++ b/drivers/clocksource/timer-ti-dm.c @@ -140,6 +140,8 @@ struct dmtimer { struct platform_device *pdev; struct list_head node; struct notifier_block nb; + struct notifier_block fclk_nb; + unsigned long fclk_rate; }; static u32 omap_reserved_systimers; @@ -253,8 +255,7 @@ static inline void __omap_dm_timer_enable_posted(struct dmtimer *timer) timer->posted = OMAP_TIMER_POSTED; } -static inline void __omap_dm_timer_stop(struct dmtimer *timer, - unsigned long rate) +static inline void __omap_dm_timer_stop(struct dmtimer *timer) { u32 l; @@ -269,7 +270,7 @@ static inline void __omap_dm_timer_stop(struct dmtimer *timer, * Wait for functional clock period x 3.5 to make sure that * timer is stopped */ - udelay(3500000 / rate + 1); + udelay(3500000 / timer->fclk_rate + 1); #endif } @@ -348,6 +349,21 @@ static int omap_timer_context_notifier(struct notifier_block *nb, return NOTIFY_OK; } +static int omap_timer_fclk_notifier(struct notifier_block *nb, + unsigned long event, void *data) +{ + struct clk_notifier_data *clk_data = data; + struct dmtimer *timer = container_of(nb, struct dmtimer, fclk_nb); + + switch (event) { + case POST_RATE_CHANGE: + timer->fclk_rate = clk_data->new_rate; + return NOTIFY_OK; + default: + return NOTIFY_DONE; + } +} + static int omap_dm_timer_reset(struct dmtimer *timer) { u32 l, timeout = 100000; @@ -754,7 +770,6 @@ static int omap_dm_timer_stop(struct omap_dm_timer *cookie) { struct dmtimer *timer; struct device *dev; - unsigned long rate = 0; timer = to_dmtimer(cookie); if (unlikely(!timer)) @@ -762,10 +777,7 @@ static int omap_dm_timer_stop(struct omap_dm_timer *cookie) dev = &timer->pdev->dev; - if (!timer->omap1) - rate = clk_get_rate(timer->fclk); - - __omap_dm_timer_stop(timer, rate); + __omap_dm_timer_stop(timer); pm_runtime_put_sync(dev); @@ -1124,6 +1136,14 @@ static int omap_dm_timer_probe(struct platform_device *pdev) timer->fclk = devm_clk_get(dev, "fck"); if (IS_ERR(timer->fclk)) return PTR_ERR(timer->fclk); + + timer->fclk_nb.notifier_call = omap_timer_fclk_notifier; + ret = devm_clk_notifier_register(dev, timer->fclk, + &timer->fclk_nb); + if (ret) + return ret; + + timer->fclk_rate = clk_get_rate(timer->fclk); } else { timer->fclk = ERR_PTR(-ENODEV); } -- 1.9.1