From patchwork Mon Jan 13 09:23:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgUMOpcm9u?= X-Patchwork-Id: 1222023 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Y5wOa+B0; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 47x7Ry6Vrdz9sNx for ; Mon, 13 Jan 2020 20:23:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725992AbgAMJX0 (ORCPT ); Mon, 13 Jan 2020 04:23:26 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:44241 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725978AbgAMJXZ (ORCPT ); Mon, 13 Jan 2020 04:23:25 -0500 Received: by mail-wr1-f67.google.com with SMTP id q10so7718127wrm.11 for ; Mon, 13 Jan 2020 01:23:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=CSFpFoFsjn6jAy+TG53ImMMGFOcZFIAFPo+oRWA0h9k=; b=Y5wOa+B0jyEoz6U1WZodUBGbXQqMQa2YqaIfzm972UifoEOJggbkfkCjtd7AQDiFNB 6K6dxLDAMzQXqhWnmwer7Y9EfOd2GFINKgaeQcYRCeJnOoh1IGIK20BsQOLRfXLUgGhn UaEj2ebcEU2wRuLKz/Ko6sPp/qK91G/voTiGWMUwN5oVOXC8gH6362WpUJPk7Z+LzjyH JbrvUaP8cBziF85X+TKhL/xKeQdnSSI8Vz+k+6x4HlY+939Z/NIHe0W+Dvda6IVEz2Zq sROWCixh5yCFPtYjUtK+vJuZVEOrijOWdEQd1YDls2WZ3WF4uTdtkuaqUMXgas9VMvtg 3Xmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=CSFpFoFsjn6jAy+TG53ImMMGFOcZFIAFPo+oRWA0h9k=; b=G9mU2wDBHUx+gY+I67F8rxzT95T2XNr1cHbukZgfjSKSX1Z0W+puLi40VDztvENBHi KW1H4MiDlyE2olc9qbiXc6F9epXtUV/QzkdJ4RJvbSwn6QnH5InGbB33eqfaOrlVr+vw FDsW8ZFUrVl59FmLKoI7RjG7wi8udaEHVLXrA0G0Fl9zjFUHJr1O5rKUdKjyCK8JEUrh 5GpePrZBAkwzQ0fAaDaXCSUVA96U4y8Ezay6hUdlmxStyUZjCxnKxXrNjJYX/NWGLomc ybfWVE0Gsd+u5n3c0hFhzxE3wk/FSis/9mr/rTFQ3+jsYe7zLGwS2A8NQGN+YMl/tfd2 Yeng== X-Gm-Message-State: APjAAAW4zUP3qJlnhaIzWnAyZNWfhHDc1LxrjUUMhSroTH2spTuuh90D ijhIDbLx/uQFvLNlPzFm0KM= X-Google-Smtp-Source: APXvYqxRn+sRQafI02NF+bw/rFd9vEpLEBqvNZGoqkfz9ox3Xda2xz1Xoy4JcXW25lad3I8fAUWxhQ== X-Received: by 2002:adf:fd84:: with SMTP id d4mr17281818wrr.211.1578907403581; Mon, 13 Jan 2020 01:23:23 -0800 (PST) Received: from clement-Latitude-7490.outsight.local (lputeaux-656-1-11-33.w82-127.abo.wanadoo.fr. [82.127.142.33]) by smtp.gmail.com with ESMTPSA id p26sm13164466wmc.24.2020.01.13.01.23.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Jan 2020 01:23:23 -0800 (PST) From: =?utf-8?b?Q2zDqW1lbnQgUMOpcm9u?= To: Thierry Reding , =?utf-8?q?Uwe_Kleine-K?= =?utf-8?b?w7ZuaWc=?= Cc: linux-pwm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?utf-8?b?Q2zDqW1lbnQgUMOpcm9u?= , Alexander Finger , Vasily Khoruzhick Subject: [PATCH v2] pwm: sun4i: Move pwm_calculate() out of spin_lock() Date: Mon, 13 Jan 2020 10:23:13 +0100 Message-Id: <20200113092313.30382-1-peron.clem@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org pwm_calculate() calls clk_get_rate() while holding a spin_lock(). This create an issue as clk_get_rate() may sleep. Move pwm_calculate() out of this spin_lock(). Fixes: c32c5c50d4fe ("pwm: sun4i: Switch to atomic PWM") Reported-by: Alexander Finger Sugested-by: Vasily Khoruzhick Tested-by: Alexander Finger Reviewed-by: Uwe Kleine-König Signed-off-by: Clément Péron --- Changes since v1: - Fix Alexander in Reported-by tag - Add Uwe reviewed tag and Alex Tested-by tag drivers/pwm/pwm-sun4i.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c index 1afd41ebd3fd..6b230029dc49 100644 --- a/drivers/pwm/pwm-sun4i.c +++ b/drivers/pwm/pwm-sun4i.c @@ -248,19 +248,18 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, } } - spin_lock(&sun4i_pwm->ctrl_lock); - ctrl = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG); - ret = sun4i_pwm_calculate(sun4i_pwm, state, &duty, &period, &prescaler, &bypass); if (ret) { dev_err(chip->dev, "period exceeds the maximum value\n"); - spin_unlock(&sun4i_pwm->ctrl_lock); if (!cstate.enabled) clk_disable_unprepare(sun4i_pwm->clk); return ret; } + spin_lock(&sun4i_pwm->ctrl_lock); + ctrl = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG); + if (sun4i_pwm->data->has_direct_mod_clk_output) { if (bypass) { ctrl |= BIT_CH(PWM_BYPASS, pwm->hwpwm);