From patchwork Thu Feb 6 17:46:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 863416 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 C06CF16DC3C; Thu, 6 Feb 2025 17:46:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738863970; cv=none; b=dLBi9FaXPP/f6dfK99dRSjLTz7LL1+6qG6MLBxUHst10ih9yi3R3s3XrIEl8atoDKWQNkEfb+HZR5hqpxO7Fq+bmEMBCUPUVNZIIuULjfLFepVRq72Qgs+PQkcFQUp566RtcCWvA7xn7uOGRH1j/a+5wc7W2RlMAXZKgDDjEkOo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738863970; c=relaxed/simple; bh=e6z5hqNT0gQo54YOk9KBRWo9PEmYnElscPakpAmN8EY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dt+gyDl54+r+kJ9q0xxw+elDFb4fbnZvVHMNgubvY8gkvXpPKcleMGXk2aRZcxLvTum5wP4cvUtAY+s4Qq7q4VXJExAJ8Y/vlvJ395iaVsYNr8LumHjeA5HqZes3ozqD6GoiRjzsY+CVyXvs2B1KJ8xj3yLWO+ZM3TvY5QoMOu4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BLGQIIR0; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BLGQIIR0" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-aaee2c5ee6eso219985566b.1; Thu, 06 Feb 2025 09:46:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738863967; x=1739468767; 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=Nk48HT4gjguNHKE3jKZZPcvV2dSdPLlROj+zqkSuZCg=; b=BLGQIIR0FyeADBtVt2V6K97RnkWQOStkERl/2bwnR3fbicccYnWgqpO11rpl5IdIU4 9W9oa6AqlVNsqPlohNFBmY3L2BNXic21BW1Oug3YbFVsr94PL5+KUT65eB4Xj/K/rpGN XaQQmJCn7MYMTNyvh72jEwQr6GmEJVOl71OWa2IttLm2s1bAcMIi+T2iiw7L9M+E/9Xu aCD5FvWPpxHxYzUNXaAfZ1pDpfCX3d7K5xG1DFuBFJyiAzGHZQSDUkM/kUXwReKr7v5N rDI/yrfC9DLiJmXJE0kAWqYu+XCOZE+js8NhZsfXLXD5eITH/muXP6wR53PZsZWwJfUW +yJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738863967; x=1739468767; 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=Nk48HT4gjguNHKE3jKZZPcvV2dSdPLlROj+zqkSuZCg=; b=UyWgd4fGuhuAg9hrHgfYURqVgsmjnO9sO9i32amu1F5gndBdbkXX84qnalRIjBigEE p2cP46eGQ+ELzf0F6gEIMX3QgZrX1/Mn7h8s0kQ6r9wXU1DbUo6PnLlpLmZckfNNXRom mop3Mu8voRPjPikSqHHbSIBy2EO0TX6ZTDFs3QFQ/s9yKqQI9jZrS5t1Qrju7uq6jQ59 r/sKbsYzP3uGd4o3fVfFO+a27nccb0IX1C88Cc+XNlT3DiKlh8jdEo058kQKbKbsajGL KsFrERCMV5I5UmLxoAD01yy+kY2xUpSg8aGR+rdz3U/rB9SwPYTAkf0Gc98actA9Hak3 hbaA== X-Forwarded-Encrypted: i=1; AJvYcCWXvFqBED2u1Y5dFWA4A/+bRNtoyCquM6MeqnD1c7e7Hz5+nJP+g/8nQwCy0daNsL1nWcaHk+Ov2L1wawY=@vger.kernel.org X-Gm-Message-State: AOJu0YzofRoLJ43PgPpr14T0T4t6N0oj+pGleGDzNhkHRMi+h+YxveSe MUrVSel3hoxPOhZJpL4SLsf+HAir/clJFzrbSpd//2yNu1SPBonP X-Gm-Gg: ASbGncsZucq9IGdZuafsJaAIbEMRBgbRiV42+fYE3AWschajDLhGt6KymQv0qzK2r9n fLgzJml9MdaL0Q500z+UTVX1jere16iyVPtNe7uVX02pjROIueZdY9Fym4Lg43VISkrXzOOQHZq xRXEBC0arH/SA+QjF71bH/hBWh1y4p6uv3OThT/yj8U7w0X2WIHS/3TTjtIsUJN9Xo3ioihVCvY 1h7BJgjBicdPYybj/9zVwkwR82xJ/VUoUNgwWPg1pAwi9pyKRoC0fmVMOBQysKh+BXaxQf/IRTl wymXlvRa8PqN5eqgErpgdXr7ufoNX+wzqufTkrJXJ2wzREYt18OQhh0M X-Google-Smtp-Source: AGHT+IGVLStKYlR/fHINkVGDHSf5uTZ2lLK3aqbkll8ENZkS7+ox49zJIb++sxTTf0Ls6FA15d85TQ== X-Received: by 2002:a17:906:3b11:b0:ab7:6056:7a5d with SMTP id a640c23a62f3a-ab760567bb6mr674225166b.51.1738863966569; Thu, 06 Feb 2025 09:46:06 -0800 (PST) Received: from hex.my.domain (83.8.206.8.ipv4.supernova.orange.pl. [83.8.206.8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab772fdb84esm128911066b.80.2025.02.06.09.46.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 09:46:06 -0800 (PST) From: Artur Weber Date: Thu, 06 Feb 2025 18:46:00 +0100 Subject: [PATCH v2 1/3] gpio: bcm-kona: Fix GPIO lock/unlock for banks above bank 0 Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-kona-gpio-fixes-v2-1-409135eab780@gmail.com> References: <20250206-kona-gpio-fixes-v2-0-409135eab780@gmail.com> In-Reply-To: <20250206-kona-gpio-fixes-v2-0-409135eab780@gmail.com> To: Ray Jui , Broadcom internal kernel review list , Linus Walleij , Bartosz Golaszewski , Florian Fainelli , Scott Branden , Markus Mayer Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738863964; l=1942; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=e6z5hqNT0gQo54YOk9KBRWo9PEmYnElscPakpAmN8EY=; b=3KfhPg6RKL7fWUxqFtSosot5Cc73YlOOB48Qltb+kTrtUKUGnOY8WIFWSakl9k/unz4mxgEkY Tvueh+fn8bPDq9704MO+z+h9CmZ1gUElrj5zAFIImuYyv3ml7OUVNpu X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= The GPIO lock/unlock functions clear/write a bit to the relevant register for each bank. However, due to an oversight the bit that was being written was based on the total GPIO number, not the index of the GPIO within the relevant bank, causing it to fail for any GPIO above 32 (thus any GPIO for banks above bank 0). Fix lock/unlock for these banks by using the correct bit. Fixes: bdb93c03c550 ("gpio: bcm281xx: Centralize register locking") Reviewed-by: Florian Fainelli Reviewed-by: Markus Mayer Signed-off-by: Artur Weber --- drivers/gpio/gpio-bcm-kona.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c index 5321ef98f4427d004e62f71d00df6d49bb465ddd..77bd4ec93a231472d7bc40db9d5db12d20bb1611 100644 --- a/drivers/gpio/gpio-bcm-kona.c +++ b/drivers/gpio/gpio-bcm-kona.c @@ -86,11 +86,12 @@ static void bcm_kona_gpio_lock_gpio(struct bcm_kona_gpio *kona_gpio, u32 val; unsigned long flags; int bank_id = GPIO_BANK(gpio); + int bit = GPIO_BIT(gpio); raw_spin_lock_irqsave(&kona_gpio->lock, flags); val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id)); - val |= BIT(gpio); + val |= BIT(bit); bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val); raw_spin_unlock_irqrestore(&kona_gpio->lock, flags); @@ -102,11 +103,12 @@ static void bcm_kona_gpio_unlock_gpio(struct bcm_kona_gpio *kona_gpio, u32 val; unsigned long flags; int bank_id = GPIO_BANK(gpio); + int bit = GPIO_BIT(gpio); raw_spin_lock_irqsave(&kona_gpio->lock, flags); val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id)); - val &= ~BIT(gpio); + val &= ~BIT(bit); bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val); raw_spin_unlock_irqrestore(&kona_gpio->lock, flags); From patchwork Thu Feb 6 17:46:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 862727 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 BF63518CBFC; Thu, 6 Feb 2025 17:46:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738863971; cv=none; b=cLngprcwSxno0wrWIoKdG4FxLpYppF3IJbRYuTU5IbUtSwP2n4C4T94j8tjDat3hBQd5KfrTpz2NT8uktpaUSzbr+NSzTd4742JbqSd680xkCWeoJyBR5mWmzSuZ12gNN9V70gP0dxX4C5R7Apjdu6OeyukM0ZVgZja5L5txNXQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738863971; c=relaxed/simple; bh=7WR8JnS3yeYmxN508U/o38iQvc/UDrjQqXztDk+gy9U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bMupksHNi34MYTS0mACISns22rA2unaHcXoGi9IEKCUXr1vODeIlxU+7yWHhcxDZytLE+kyZC9YL/G+Dn/gRC7ZaYkFdORH4l9+nVWuwn/FcofZvXNP5VM5gu1TBriuiMinm2Ch1aLmrmLOwr5mKNTtWujdkV/efkBkV+5lZDLk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KfL+lCtM; arc=none smtp.client-ip=209.85.208.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KfL+lCtM" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5d9837f201aso4460721a12.0; Thu, 06 Feb 2025 09:46:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738863968; x=1739468768; 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=KODL0yhoUPDVNtnpy6FJ+cvDdJ+oA25cSk5g9bzvODQ=; b=KfL+lCtMPYgiNtbrOaybr3p787wJU92wPtRmgi9GP+RJ/dBk807o/zznRbCREyeVWq gM/4nxa3qHgHchuO0yoA9myfNkQoLfr6lcmwosYAZGrbYXBfCVY4O2noM8XyJB0lS4UW FX51ViQ5cSlK3Bc4l+w50DWaiB18fBtGdmrLjqBIW3zxOXvBeW46+jrFePol4DeXM7q3 i58XaEaMiY8VTzZvGyfVaK2c8PuHpujQw2eU1GsLzgLGMXpCFKfFz72bqrq45xTd8b6D Jr70nxn+ca0gRoBGeHEoJDMK676VW4kbEks54mPkdLLcRlMrrUCfPoTqcIT8LsN8RJqw Vu0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738863968; x=1739468768; 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=KODL0yhoUPDVNtnpy6FJ+cvDdJ+oA25cSk5g9bzvODQ=; b=YvVztpf02rHv3SU8m0BXUSeIDe2Qe54xtt/tngKTZVmLXmFOS6TyyGokuArHG7R3wP 9ENA/wp9i6g68dgv8spyEUyOpC/L2DqgTIasU+f8EWQ2/T9Udx/i405Tb50io/ZIvk4x ZcudXqjwcVOFy0zNSKHybwOmAOlmgLfNgEtUKJSH8VTjz37kc1zb0H3B2E//NXZLAXCw LhdiSYUJvstosZOi/G85Y9JFtCWvlGK8vuYp1h/mlSlLVv7n6E7/gnueDN5lOx/PM10g 7U1WsxqEldVborlmquim0uEM5qruRswlber2Ls+Qyg5edptd2YcU7CuvJXSYFZ7UU+Ns Dd3Q== X-Forwarded-Encrypted: i=1; AJvYcCXrcbuF49iB/D0hMlqAtQxeX8gVpRYUg56R3zDZvyeEJYp9DZpVc3hRrKBTEfxtVax28DkqaatvisMo0p0=@vger.kernel.org X-Gm-Message-State: AOJu0YyWUS+d0I0qAIAS8AxWIXSrJ6KJJ0/JOKsZwQIkDgZfp5a+eNX6 veDpLdW6XuJPb4ulW7CGcpn2nlfUU6IPIFI4Z1RmkjhwBKIKaCSQ X-Gm-Gg: ASbGncsh+oOTZ04xuFpoFLSLh5avMxa1aYtSq7dkex+GyorcwCptIhDv1oqkP3K9oao yCbxLnxpkPhOyd2aULB1lRJuWwgfSwQMET75H0cBOm2+am9Eu7dfFChnJaQFtDU+TG2+1ftSRcM +vYYG+8i/x2X9pWf/yx5P5+/MdyURrCQZo2t12fGDjkFyAywYf2cT6LDQR+qwTmok7Nc8cTlzAq UkLn7ELmFxlFoJSJ0/tdk7S1lOGy7H6YOf1Xz2pVILXQiYXga4EwzVDTc+QStAwu70J1WV0lpa2 5QGfvrdI4jZI8hDq+8sDcMT90+B8DkTfAsmwJT1wjAuHIUxOMW5aLhOn X-Google-Smtp-Source: AGHT+IHC2NvW3xsOpdvHPdtwBgbragC0+WC6cpudZ3QpFHpFEhQzZH6rXm/33wXbZ6ujmBOA/gMNxA== X-Received: by 2002:a17:907:3f15:b0:ab7:b82:899 with SMTP id a640c23a62f3a-ab76e8e8b35mr366530366b.22.1738863967581; Thu, 06 Feb 2025 09:46:07 -0800 (PST) Received: from hex.my.domain (83.8.206.8.ipv4.supernova.orange.pl. [83.8.206.8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab772fdb84esm128911066b.80.2025.02.06.09.46.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 09:46:07 -0800 (PST) From: Artur Weber Date: Thu, 06 Feb 2025 18:46:01 +0100 Subject: [PATCH v2 2/3] gpio: bcm-kona: Make sure GPIO bits are unlocked when requesting IRQ Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-kona-gpio-fixes-v2-2-409135eab780@gmail.com> References: <20250206-kona-gpio-fixes-v2-0-409135eab780@gmail.com> In-Reply-To: <20250206-kona-gpio-fixes-v2-0-409135eab780@gmail.com> To: Ray Jui , Broadcom internal kernel review list , Linus Walleij , Bartosz Golaszewski , Florian Fainelli , Scott Branden , Markus Mayer Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738863964; l=5750; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=7WR8JnS3yeYmxN508U/o38iQvc/UDrjQqXztDk+gy9U=; b=+KlU5GvBkFn9goQ4EdnwydwvGXgMKcpmnUBJNSXmMVRJFinzAsh0AQVAAj4uZjUwCQ8GGIC8/ Cjf/E3q9dbwCXVO9nQCWQvwKIdeUTohVUD6YT/8aJTljylxnEo7dB6X X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= The settings for all GPIOs are locked by default in bcm_kona_gpio_reset. The settings for a GPIO are unlocked when requesting it as a GPIO, but not when requesting it as an interrupt, causing the IRQ settings to not get applied. Fix this by making sure to unlock the right bits when an IRQ is requested. To avoid a situation where an IRQ being released causes a lock despite the same GPIO being used by a GPIO request or vice versa, add an unlock counter and only lock if it reaches 0. Fixes: 757651e3d60e ("gpio: bcm281xx: Add GPIO driver") Reviewed-by: Florian Fainelli Reviewed-by: Markus Mayer Signed-off-by: Artur Weber --- Changes in v2: - Made the unlock count code cleaner by using increment/decrement operators (-- / ++) - Added extra comment to relres function to match the one in reqres --- drivers/gpio/gpio-bcm-kona.c | 67 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c index 77bd4ec93a231472d7bc40db9d5db12d20bb1611..17f3f210fee9dbb5da3b26e1f86bf8f68089b1cd 100644 --- a/drivers/gpio/gpio-bcm-kona.c +++ b/drivers/gpio/gpio-bcm-kona.c @@ -69,6 +69,22 @@ struct bcm_kona_gpio { struct bcm_kona_gpio_bank { int id; int irq; + /* + * Used to keep track of lock/unlock operations for each GPIO in the + * bank. + * + * All GPIOs are locked by default (see bcm_kona_gpio_reset), and the + * unlock count for all GPIOs is 0 by default. Each unlock increments + * the counter, and each lock decrements the counter. + * + * The lock function only locks the GPIO once its unlock counter is + * down to 0. This is necessary because the GPIO is unlocked in two + * places in this driver: once for requested GPIOs, and once for + * requested IRQs. Since it is possible for a GPIO to be requested + * as both a GPIO and an IRQ, we need to ensure that we don't lock it + * too early. + */ + u8 gpio_unlock_count[GPIO_PER_BANK]; /* Used in the interrupt handler */ struct bcm_kona_gpio *kona_gpio; }; @@ -87,14 +103,23 @@ static void bcm_kona_gpio_lock_gpio(struct bcm_kona_gpio *kona_gpio, unsigned long flags; int bank_id = GPIO_BANK(gpio); int bit = GPIO_BIT(gpio); + struct bcm_kona_gpio_bank *bank = &kona_gpio->banks[bank_id]; - raw_spin_lock_irqsave(&kona_gpio->lock, flags); + if (bank->gpio_unlock_count[bit] == 0) { + dev_err(kona_gpio->gpio_chip.parent, + "Unbalanced locks for GPIO %u\n", gpio); + return; + } - val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id)); - val |= BIT(bit); - bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val); + if (--bank->gpio_unlock_count[bit] == 0) { + raw_spin_lock_irqsave(&kona_gpio->lock, flags); - raw_spin_unlock_irqrestore(&kona_gpio->lock, flags); + val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id)); + val |= BIT(bit); + bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val); + + raw_spin_unlock_irqrestore(&kona_gpio->lock, flags); + } } static void bcm_kona_gpio_unlock_gpio(struct bcm_kona_gpio *kona_gpio, @@ -104,14 +129,19 @@ static void bcm_kona_gpio_unlock_gpio(struct bcm_kona_gpio *kona_gpio, unsigned long flags; int bank_id = GPIO_BANK(gpio); int bit = GPIO_BIT(gpio); + struct bcm_kona_gpio_bank *bank = &kona_gpio->banks[bank_id]; - raw_spin_lock_irqsave(&kona_gpio->lock, flags); + if (bank->gpio_unlock_count[bit] == 0) { + raw_spin_lock_irqsave(&kona_gpio->lock, flags); - val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id)); - val &= ~BIT(bit); - bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val); + val = readl(kona_gpio->reg_base + GPIO_PWD_STATUS(bank_id)); + val &= ~BIT(bit); + bcm_kona_gpio_write_lock_regs(kona_gpio->reg_base, bank_id, val); - raw_spin_unlock_irqrestore(&kona_gpio->lock, flags); + raw_spin_unlock_irqrestore(&kona_gpio->lock, flags); + } + + ++bank->gpio_unlock_count[bit]; } static int bcm_kona_gpio_get_dir(struct gpio_chip *chip, unsigned gpio) @@ -362,6 +392,7 @@ static void bcm_kona_gpio_irq_mask(struct irq_data *d) kona_gpio = irq_data_get_irq_chip_data(d); reg_base = kona_gpio->reg_base; + raw_spin_lock_irqsave(&kona_gpio->lock, flags); val = readl(reg_base + GPIO_INT_MASK(bank_id)); @@ -384,6 +415,7 @@ static void bcm_kona_gpio_irq_unmask(struct irq_data *d) kona_gpio = irq_data_get_irq_chip_data(d); reg_base = kona_gpio->reg_base; + raw_spin_lock_irqsave(&kona_gpio->lock, flags); val = readl(reg_base + GPIO_INT_MSKCLR(bank_id)); @@ -479,15 +511,26 @@ static void bcm_kona_gpio_irq_handler(struct irq_desc *desc) static int bcm_kona_gpio_irq_reqres(struct irq_data *d) { struct bcm_kona_gpio *kona_gpio = irq_data_get_irq_chip_data(d); + unsigned int gpio = d->hwirq; + + /* + * We need to unlock the GPIO before any other operations are performed + * on the relevant GPIO configuration registers + */ + bcm_kona_gpio_unlock_gpio(kona_gpio, gpio); - return gpiochip_reqres_irq(&kona_gpio->gpio_chip, d->hwirq); + return gpiochip_reqres_irq(&kona_gpio->gpio_chip, gpio); } static void bcm_kona_gpio_irq_relres(struct irq_data *d) { struct bcm_kona_gpio *kona_gpio = irq_data_get_irq_chip_data(d); + unsigned int gpio = d->hwirq; + + /* Once we no longer use it, lock the GPIO again */ + bcm_kona_gpio_lock_gpio(kona_gpio, gpio); - gpiochip_relres_irq(&kona_gpio->gpio_chip, d->hwirq); + gpiochip_relres_irq(&kona_gpio->gpio_chip, gpio); } static struct irq_chip bcm_gpio_irq_chip = { From patchwork Thu Feb 6 17:46:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 863415 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 96D82199943; Thu, 6 Feb 2025 17:46:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738863973; cv=none; b=jfAHkbYIj/ps/nGRQ/+7Eme8L9TbOe8WX3GRs5V9SoTyTOin69lnoe+WO5XBr3RdBSrsU152enrbqRZbFFiUdT/w0HoNWTsiV/kIsu8/Otg4+vUcIwS0ooSRZKQAsmGJNdTisGVqEysuFMlwRtEV8QcSgaPXQcndTiZDPftAGbg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738863973; c=relaxed/simple; bh=ovJm4j6SHLuDuaHzr21rDn835rvf8QGskDc9xQum3Zw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rbA8Y7nw+I8jW0Ichc8HL64t4JPHybBHgywna3jDpml6UDFSWyw+Sn1Y+3RJoMVLayP5UjJ0qtGOER6pbRt2SoqvH8OiDBzI9D26elhpA3lcYESpR2XZazhQwEay9mxVz4J9PDeuTECwKE5+cWlQVAyCC1bcTj3GA+oypsDiB4c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TP1QehCH; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TP1QehCH" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-ab698eae2d9so216713966b.0; Thu, 06 Feb 2025 09:46:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738863969; x=1739468769; 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=OkMsDoRO08lUjZHjBj1G6MqbNfCQFz6BCCmk32m907U=; b=TP1QehCHhwfVqHEx8MeiCkME08E9hn82rmlFlHHQOvJ65KU3fF7mosfWK9T2IrTRoY HHgp3qxgQL57JPNlF8mxXrkTJtmu6Wy3ogty6hVTtbVQQRbs04R3w1AeB2vP+i4R3NjZ kHAd8TPFb0JKYv/k+pt31978aImqjrWWpo3MSa/MMbI27cI9ifa6RWqL6ueatKDh+X2u PgRdSl96/JhWzO6p8Bba+CMjy4c5hbMfAxVrUa6hKqhzjKAjL+LofkSwLu5mnf3LbobE T1pSA9SjHKWfpmkXIvnOYbawDbMqx+ecdiAgqJwq/GOyzzKBy5BBcV7Pl8QBtUJEcDBG hVNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738863969; x=1739468769; 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=OkMsDoRO08lUjZHjBj1G6MqbNfCQFz6BCCmk32m907U=; b=ue1OR+A1RI441zsO/IU9yWo7hp41CZqz6VYwM1wlu/SoUdIf0882nSzAv4uN6N1bR3 ZowO7c1rYf86RJ/2d1nLa7TA5vs9X+OKPs0gNrcR8cQM0VlFCGIeMtMUNd79ZBaTBfyz aT49rOzPvUz4W8GczxMO5BSI+GRnzxI3awwXjDyLbxHbvCPhQRj4bd7sPXGu0rB8YYXl FqTFI9v0gAQJYjq8m6gxXv2cC2TaHC5YvXyvmN8C7PNJxICGGAAlabacZpzseFA0PdVS ObwEliaH0wgu5o4hqF8a38HzxpN9VTbBWxt3QP2a9lHpcMmoegXmpbuJURmZUVoG74wP Mbdg== X-Forwarded-Encrypted: i=1; AJvYcCU28V21GqeLIZPkNyXqyvHdiBV4Bn9pr8LIawMTCqgrdFelFsoILibl+Oi6LAtcGbXW6StXDbBAvd7DN/o=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/06K/qw0VyebyFXKcMk4BHSJgMXu7z4X2X8KCkA/dRzSFWOXU VhwDAkckhFCktYvu9O1cyElB11rpSc7ujAZU81yefoTk1UxO1x9c X-Gm-Gg: ASbGncsDamm+bj0d3XnPvFKtPmGRU7VP1ZHsU7MXxn0TNTn6wYPdtS03NQpGo54fogw HgbSoEfbD/xTsOjFwzU4i4yKeEqz7f4FOIRq2OeZjI69hApGFmYbNak5dpxJ5nK1fk/rbrU+RRy O+wCXXtQydkDZ2T0BRM+SI2kBzrjAjW+WpYolmLc9GWfPlknOMpzSS1BuBMeygItubccP1Z6d2K AgjIG1jPRS7laBa70n3ARvNvYGePZku0g50iBHlJE172CRwtx5XhIonVd4Otyq1TMh1QYdvzamf J1/KN3ERMhSsWy13Eb5IeiLRHtXTg0N2uP0701CWVDz9NgTip2D6OxIG X-Google-Smtp-Source: AGHT+IGc8hmMGDzbi0G/fvW9sBRYg6q5o2L5/Tc8kx9hnWYz5seKGV+N8E995p/KXWSRf3+U3tP77Q== X-Received: by 2002:a17:906:f5a0:b0:aa6:aa8e:c89c with SMTP id a640c23a62f3a-ab75e2f2042mr921993366b.39.1738863968638; Thu, 06 Feb 2025 09:46:08 -0800 (PST) Received: from hex.my.domain (83.8.206.8.ipv4.supernova.orange.pl. [83.8.206.8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ab772fdb84esm128911066b.80.2025.02.06.09.46.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 09:46:08 -0800 (PST) From: Artur Weber Date: Thu, 06 Feb 2025 18:46:02 +0100 Subject: [PATCH v2 3/3] gpio: bcm-kona: Add missing newline to dev_err format string Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250206-kona-gpio-fixes-v2-3-409135eab780@gmail.com> References: <20250206-kona-gpio-fixes-v2-0-409135eab780@gmail.com> In-Reply-To: <20250206-kona-gpio-fixes-v2-0-409135eab780@gmail.com> To: Ray Jui , Broadcom internal kernel review list , Linus Walleij , Bartosz Golaszewski , Florian Fainelli , Scott Branden , Markus Mayer Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738863964; l=1019; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=ovJm4j6SHLuDuaHzr21rDn835rvf8QGskDc9xQum3Zw=; b=n4/yA1oXA6PpcFFUmnyLhQ/BpICotwIQ1rCL8CuSUfkLBG4rWMq3P2G+AAFJP6lhTtTcnfEQv 0b+4IhA4cYeBsp3Fsdj6uw0j5iLOKMaD8WssfRaRUA9KxDiJYib25AI X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= Add a missing newline to the format string of the "Couldn't get IRQ for bank..." error message. Fixes: 757651e3d60e ("gpio: bcm281xx: Add GPIO driver") Reviewed-by: Florian Fainelli Reviewed-by: Markus Mayer Signed-off-by: Artur Weber --- drivers/gpio/gpio-bcm-kona.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c index 17f3f210fee9dbb5da3b26e1f86bf8f68089b1cd..64908f1a5e7f9b059a20217714c91ce9aab0c640 100644 --- a/drivers/gpio/gpio-bcm-kona.c +++ b/drivers/gpio/gpio-bcm-kona.c @@ -659,7 +659,7 @@ static int bcm_kona_gpio_probe(struct platform_device *pdev) bank->irq = platform_get_irq(pdev, i); bank->kona_gpio = kona_gpio; if (bank->irq < 0) { - dev_err(dev, "Couldn't get IRQ for bank %d", i); + dev_err(dev, "Couldn't get IRQ for bank %d\n", i); ret = -ENOENT; goto err_irq_domain; }