From nobody Wed Nov 27 06:48:13 2024 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 B93AB610D; Sat, 12 Oct 2024 09:54:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726866; cv=none; b=WkOds66HvzY6qaTNPTtskmSezSBZhx7JmFo4dZkqsqXyrjk+XpIQHY/mbPBX3C9W81x9ZrYZ3VjOUnHJYt4y5wsVsVcJgAZz6vCYCZ9hI3C7QEIDXt3FYKYZTM45dM4X7XJkWPhPWsqd7jeWdGinm7We9d7B2VQM74dPen1+9mI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726866; c=relaxed/simple; bh=TfawiNnYj5zNLv+jVcmBc+6b6S3nRECwPwGfhLaSrzg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qd830aEkz2BoTQ4PVwZ9CJSmkJAIv+mMO7WupxUz7Mzb8R3lrbcnsKddv7GsPQWiZDk7iYEUyisTVskv1kiWLR59u1qZszzZfwCiza0Cs9fsr7jTB+WJ4Y3dp6uzAUiJ5yM+aNaag67tz8YIVc6Gvfqt6IAej+OO8AguZsh/FlM= 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=Qrrth7nF; arc=none smtp.client-ip=209.85.218.45 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="Qrrth7nF" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a99f646ff1bso12117666b.2; Sat, 12 Oct 2024 02:54:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728726863; x=1729331663; 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=U8ZC9ITCPhenAYf/vv6uhGh5WumL2pziZ+L10pLWJTM=; b=Qrrth7nFem0y6gHUgoyr4KXK9gW1tE8HPTEJrR+PJGpfGypoBo32/1SRQvV1R3QAsS Y4W9VoMMwO1Rrtl/zLIe+pcgxGT5lGbIKQ16UJNq6z89ZtDl9wfBJv8aFrbkxinbfSXk 92PPTqJ81zgHa4MqI7NX+EGLgkT8fqv83VCLuJLrigtBhkPGh90iP5Yv96435VVShPXZ L+Lo/HJlAC/uW74pfng0TXP/N1pLCw5sjYoLmeJ75O9zUN9a2JQ9QdF1P49YNsRQYsM4 tD6oq8joFr9lkhFrTj7VRewhwM3BRRp1mr4qvwxEiQr2httWWPWqwLrQeLbQ34dwdzWS I4dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728726863; x=1729331663; 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=U8ZC9ITCPhenAYf/vv6uhGh5WumL2pziZ+L10pLWJTM=; b=bKqJMolylAbcyNW+WIrGiGvzzEN+01mwWMpiMWBf6CHiMRSsUfd35kB01dKN9LQvSb XhFM9eVWrgjRuEYZ62tdZ+lBxMwZyocZremaRntDnJrmlcUoQ+c2Gh881SYJ62LDD7uh XXR+NRnZvFbWKEeE/Ml8Qzz0E83JNzASUpgOIGX19n3vB1SUkAAiVREn9Z9kgjp0I65H AavfMoLnOFhGDJfGYpVPcI/dHs9F7qCtPl55VRTm4/3Zm2nbg4VTCPeAtkBwO5KIRTn7 ObcfSsD4c095sO1nRUF81iOMeKwVjmJDCmv9kK7xibmNQuxtWd7ZbIYf6z7RMb4Yu7+t vzTg== X-Forwarded-Encrypted: i=1; AJvYcCV4P9kkIBe9pEIQiOtLbDol/79glWvYmSGAueJmfeKN15Nk06/M2Mej32RBAMkhVHIE/GQHXJzzxn7HKOw=@vger.kernel.org X-Gm-Message-State: AOJu0YwYSTPoUi5CjKv/AKZJd755BkqMomEjGY6U6g1vGso96L5GCUEu bb++fESAJfzlmzTmfABaeaSL6wiJzsJHIJ/ixG9NiEBMbVBNsztvBHPsQpZ8v80= X-Google-Smtp-Source: AGHT+IEhaqnA7LkNOsegegkcVESQ2FBN7VOw9DUl/+LSCE2rE4OAG0X1A4zwpgwynNerFXfpeqoRFA== X-Received: by 2002:a17:907:2cc3:b0:a8d:3338:a497 with SMTP id a640c23a62f3a-a99b93239f6mr488486566b.4.1728726862748; Sat, 12 Oct 2024 02:54:22 -0700 (PDT) Received: from localhost (dslb-002-200-173-220.002.200.pools.vodafone-ip.de. [2.200.173.220]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a99a80efe57sm308258366b.188.2024.10.12.02.54.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Oct 2024 02:54:22 -0700 (PDT) From: Jonas Gorski Date: Sat, 12 Oct 2024 11:53:35 +0200 Subject: [PATCH 1/6] spi: fix return code when spi device has too many chipselects Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241012-spi_multi_cs_cleanup-v1-1-dc491113880d@gmail.com> References: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> In-Reply-To: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> To: Mark Brown , Amit Kumar Mahapatra Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 Don't return a positive value when there are too many chipselects. Fixes: 4d8ff6b0991d ("spi: Add multi-cs memories support in SPI core") Signed-off-by: Jonas Gorski --- drivers/spi/spi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 7c5e76b154212585af1c3893005cb353a0eaeafc..ab38978e9c58517bb671d7bda01= 7c8550cc82d58 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -2452,7 +2452,7 @@ static int of_spi_parse_dt(struct spi_controller *ctl= r, struct spi_device *spi, if (rc > ctlr->num_chipselect) { dev_err(&ctlr->dev, "%pOF has number of CS > ctlr->num_chipselect (%d)\n= ", nc, rc); - return rc; + return -EINVAL; } if ((of_property_read_bool(nc, "parallel-memories")) && (!(ctlr->flags & SPI_CONTROLLER_MULTI_CS))) { --=20 2.43.0 From nobody Wed Nov 27 06:48:13 2024 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 8F5F614F9CF; Sat, 12 Oct 2024 09:54:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726867; cv=none; b=EFm452PAvxzSwxBstIIPwGjnthDPxYRczda//8QgPWkEHa4ojkcFXfVlZOa3tFcTV4vXTqqsTlKW+bKeo7U4xqA1spz+uVO16dbbgKtIdiaRGCkTR8D5UYlm6obfPsS09aDQLGkQ0RVj5G1VnZnUPhwWtiTuXv3YYjM10q+FTys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726867; c=relaxed/simple; bh=fctVUFgjURSsjGlyDkemHSFEutnocSZ1gDP17Fsw6Yo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fNEh5bHU/s0XCrd8vww02XcXmtTSIyBmdoTj4bSnZSszPDG0HPT+H/eelZC7vNC8y3I04C80fIJTu3BjK1pBEVS5p4qbiL3XI7/SG3YVAzk/ql7LGmIkuPacbR1WJIyaQyUvL7OqWcE8PHs7hrWxP0Cx3ZfoDS8xUPz7nrbr9cE= 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=gXu2z9sG; arc=none smtp.client-ip=209.85.218.47 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="gXu2z9sG" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-a99f3a5a44cso20498066b.3; Sat, 12 Oct 2024 02:54:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728726864; x=1729331664; 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=PIqunMSrCwkf+DyWUK239/3d0MJnoZNJjh6FmyYnDTM=; b=gXu2z9sG5yoTPuK3/Sq0kvOnpdgf89pkCSTVl6M+8YDufYf7PDrUFFHkXDhicq3uB1 4yJbpabbYMrkKlR0cSx2Yq9R6lUgRJqnlzLaEjmgguWBqgNHSgbdxdT5VFce6cwV+Ywy sqq4N0nJz84fdj3rhEdkwvH6KlYGmWNsfn75OUWNl/+XGDeh28P2FSlW6Zj05q9QB+F7 UKMOLk/x0ELLRh8/BbT01Bh4jpzNWA7tWSsZ4Gj0KQS8PBLo7g99clqwHAACUOyIbrhP 8MwR1CM6pTjMy7hlmesJ02qGbNiZfVRsT6GyvUesxQrydkllWZmNWVAYeVZIyJjFrODp 0C2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728726864; x=1729331664; 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=PIqunMSrCwkf+DyWUK239/3d0MJnoZNJjh6FmyYnDTM=; b=XQQqW1ghTYyoXC2FdjpIJixY+Ek4oCWe3ChqSzsSM+Pk2q79NRFk9D2hGegQG86wkv 5G8UoFMY/Ylxe6cwjTY7uTRW5i5/6h+pJtOPeilYsCJUW//VK1VuGh7u1xhJJfXR7evo IqCRlcVxrJbjIytoVIiTsjYL+/tIjzd744P3OAGpeelTkR9SCPQMMLIN4RJNr5iEy9TE AdjWidrhA2GY+Ar3UTLI0iqmLIa1qK9ZLfBKTYDox7VGMH1oc5Am9Hub3mlR8J9UWEnX Eykc2d01WNI/m3pkBGBOVlpqvL9Juiy3ZBb+XEhIB3Ow7+rnYv44NW2RotqjSj6VeLje SPMg== X-Forwarded-Encrypted: i=1; AJvYcCWGnpgZ+hy4TxGW3O8I/XKzdXnlz/bmvnqso/1TqumxZnRDKV3R/W7KCmC8A9+xdp5GzY8yS80VWr43qtA=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9Zh9xpwF1DQlj1yo7XkVKP5WyoKU6Z28RhpQ1M/VuZP77voe6 juCQ3M467KulvTchoqM+BsNtr3yFe6Az5NDSnWmQ1FleLoG04sx/QvMi62XA2Gg= X-Google-Smtp-Source: AGHT+IHllUVcysEuC9LWDHgZzH7JRql+CETS/pVf3Ld/eGK6TRuDveJ53z+sNFDAHwksiBIKE3oDDA== X-Received: by 2002:a17:907:1b24:b0:a99:c9a4:a4d5 with SMTP id a640c23a62f3a-a99c9a4b7b6mr385576766b.29.1728726863775; Sat, 12 Oct 2024 02:54:23 -0700 (PDT) Received: from localhost (dslb-002-200-173-220.002.200.pools.vodafone-ip.de. [2.200.173.220]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a99a80bfc5esm309314766b.142.2024.10.12.02.54.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Oct 2024 02:54:23 -0700 (PDT) From: Jonas Gorski Date: Sat, 12 Oct 2024 11:53:36 +0200 Subject: [PATCH 2/6] spi: keep track of number of chipselects in spi_device Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241012-spi_multi_cs_cleanup-v1-2-dc491113880d@gmail.com> References: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> In-Reply-To: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> To: Mark Brown , Amit Kumar Mahapatra Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 There are several places where we need to iterate over a device's chipselect. To be able to do it efficiently, store the number of chipselects in spi_device, like we do for controllers. Since we now use a device supplied value, add a check to make sure it isn't more than we can support. Signed-off-by: Jonas Gorski --- drivers/spi/spi.c | 29 +++++++++++++++++++++-------- include/linux/spi/spi.h | 4 +++- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index ab38978e9c58517bb671d7bda017c8550cc82d58..15b2f4e02a685b2c778b2747328= 9197ab08987d8 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -587,6 +587,7 @@ struct spi_device *spi_alloc_device(struct spi_controll= er *ctlr) spi->dev.bus =3D &spi_bus_type; spi->dev.release =3D spidev_release; spi->mode =3D ctlr->buswidth_override_bits; + spi->num_chipselect =3D 1; =20 device_initialize(&spi->dev); return spi; @@ -636,7 +637,7 @@ static inline int spi_dev_check_cs(struct device *dev, u8 idx_new; =20 cs =3D spi_get_chipselect(spi, idx); - for (idx_new =3D new_idx; idx_new < SPI_CS_CNT_MAX; idx_new++) { + for (idx_new =3D new_idx; idx_new < new_spi->num_chipselect; idx_new++) { cs_new =3D spi_get_chipselect(new_spi, idx_new); if (is_valid_cs(cs) && is_valid_cs(cs_new) && cs =3D=3D cs_new) { dev_err(dev, "chipselect %u already in use\n", cs_new); @@ -653,7 +654,7 @@ static int spi_dev_check(struct device *dev, void *data) int status, idx; =20 if (spi->controller =3D=3D new_spi->controller) { - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) { + for (idx =3D 0; idx < spi->num_chipselect; idx++) { status =3D spi_dev_check_cs(dev, spi, idx, new_spi, 0); if (status) return status; @@ -675,7 +676,13 @@ static int __spi_add_device(struct spi_device *spi) int status, idx; u8 cs; =20 - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) { + if (spi->num_chipselect > SPI_CS_CNT_MAX) { + dev_err(dev, "num_cs %d > max %d\n", spi->num_chipselect, + SPI_CS_CNT_MAX); + return -EOVERFLOW; + } + + for (idx =3D 0; idx < spi->num_chipselect; idx++) { /* Chipselects are numbered 0..max; validate. */ cs =3D spi_get_chipselect(spi, idx); if (is_valid_cs(cs) && cs >=3D ctlr->num_chipselect) { @@ -690,7 +697,7 @@ static int __spi_add_device(struct spi_device *spi) * For example, spi->chip_select[0] !=3D spi->chip_select[1] and so on. */ if (!spi_controller_is_target(ctlr)) { - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) { + for (idx =3D 0; idx < spi->num_chipselect; idx++) { status =3D spi_dev_check_cs(dev, spi, idx, spi, idx + 1); if (status) return status; @@ -718,7 +725,7 @@ static int __spi_add_device(struct spi_device *spi) if (ctlr->cs_gpiods) { u8 cs; =20 - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) { + for (idx =3D 0; idx < spi->num_chipselect; idx++) { cs =3D spi_get_chipselect(spi, idx); if (is_valid_cs(cs)) spi_set_csgpiod(spi, idx, ctlr->cs_gpiods[cs]); @@ -1025,7 +1032,7 @@ static void spi_res_release(struct spi_controller *ct= lr, struct spi_message *mes =20 /*------------------------------------------------------------------------= -*/ #define spi_for_each_valid_cs(spi, idx) \ - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) \ + for (idx =3D 0; idx < spi->num_chipselect; idx++) \ if (!(spi->cs_index_mask & BIT(idx))) {} else =20 static inline bool spi_is_last_cs(struct spi_device *spi) @@ -1083,8 +1090,12 @@ static void spi_set_cs(struct spi_device *spi, bool = enable, bool force) trace_spi_set_cs(spi, activate); =20 spi->controller->last_cs_index_mask =3D spi->cs_index_mask; - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) - spi->controller->last_cs[idx] =3D enable ? spi_get_chipselect(spi, 0) : = SPI_INVALID_CS; + for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) { + if (enable && idx < spi->num_chipselect) + spi->controller->last_cs[idx] =3D spi_get_chipselect(spi, 0); + else + spi->controller->last_cs[idx] =3D SPI_INVALID_CS; + } spi->controller->last_cs_mode_high =3D spi->mode & SPI_CS_HIGH; =20 if (spi->mode & SPI_CS_HIGH) @@ -2459,6 +2470,8 @@ static int of_spi_parse_dt(struct spi_controller *ctl= r, struct spi_device *spi, dev_err(&ctlr->dev, "SPI controller doesn't support multi CS\n"); return -EINVAL; } + + spi->num_chipselect =3D rc; for (idx =3D 0; idx < rc; idx++) spi_set_chipselect(spi, idx, cs[idx]); =20 diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 8497f4747e24d4ecd85b74f49609ac1c82c73535..77511c7d40df7085644cecaae32= 5c982fb306afa 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -136,6 +136,7 @@ extern void spi_transfer_cs_change_delay_exec(struct sp= i_message *msg, * The spi_transfer.speed_hz can override this for each transfer. * @chip_select: Array of physical chipselect, spi->chipselect[i] gives * the corresponding physical CS for logical CS i. + * @num_chipselect: Number of physical chipselects used. * @mode: The spi mode defines how data is clocked out and in. * This may be changed by the device's driver. * The "active low" default for chipselect mode can be overridden @@ -186,6 +187,7 @@ struct spi_device { struct spi_controller *controller; u32 max_speed_hz; u8 chip_select[SPI_CS_CNT_MAX]; + u8 num_chipselect; u8 bits_per_word; bool rt; #define SPI_NO_TX BIT(31) /* No transmit wire */ @@ -311,7 +313,7 @@ static inline bool spi_is_csgpiod(struct spi_device *sp= i) { u8 idx; =20 - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) { + for (idx =3D 0; idx < spi->num_chipselect; idx++) { if (spi_get_csgpiod(spi, idx)) return true; } --=20 2.43.0 From nobody Wed Nov 27 06:48:13 2024 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (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 3DEFB1547E7; Sat, 12 Oct 2024 09:54:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726869; cv=none; b=eiou0dEo/efmOROcPWmGWxlJDfEPqmafD7QFDK/a+AlN+G4x+wU97cW7KhOdb3J3oudMp6fJozR2LPoj8K1YC+Y0sQlkWRJTub53CotBOva1uHh28gSKgDt0f1H45v7uBWeY+w57065gK4I0+DUQgEF3if2er9QRc97IPc2odU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726869; c=relaxed/simple; bh=YcKm+sOPug8u9u63+P+tGGXBa1Xo8VYubGbrOh8hcGU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jLU0uHOEZD7m+j35EeCRtrqQPcc0/5suAdM5ieSw+nWTTH303n3Yc2j6a01tlVpDpg2IKV9Sgu0+x0N3B6gMzDOkO0ZiNAubbWpLdfBX/KPvcyABVfB6P98LXQoZfJN7p5/7nq9sDk6W62Si082GxN/KSCkPBJNsdUMMhuzRYv0= 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=lOX3/CAk; arc=none smtp.client-ip=209.85.208.52 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="lOX3/CAk" Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-5c40aea5c40so5324292a12.0; Sat, 12 Oct 2024 02:54:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728726866; x=1729331666; 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=Rn+arkCODA8DGO4i9/YKd4mdYzdhdyNcf7NV++kFN6w=; b=lOX3/CAkJlnRq7zhbaTOU6Gl3D1nmaQ+OW0lbA7nJm8nZzI6jixTmzdNmhEk049LYi y1WovBhHPqqye2qgrqoASdXS+1atNN0lkfVJst64NLglXyWU/RRaDk3SasPUF3RTglI5 MYw8IveOMBn8wounQX/fvKKCgsx+v8VZMaWuyIEDtmTi9Yo9C10QHQAJ0N/HdREdWEUD MJRSo2G3W9zvN6zhu36CY0/WjoqT66Z6Mmfrx/ZqJd02JzViZn9l4DIDxfclQWv7U3eW t8ZJdTFCBUHnen8mS6mCqnwQBwi+wxLxiJX2T102sVLFfFCuaUM12j5ItHIi3DrwZMui psVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728726866; x=1729331666; 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=Rn+arkCODA8DGO4i9/YKd4mdYzdhdyNcf7NV++kFN6w=; b=UiM5VkDZs5rRotu8ZDwk55K++ifToJsEC95kVtVPchtOnZ9sMKBPXFoeIOrOHPbAvG Ka2oreujSCnoFWILwhKEwCfdU4wED3cjiAiA8/H8QBgTGcsP+B6iYjhJAnpAVMIyY7gm KQjRT2DtWda7QgvLMRcPrQIaVAYFLpUjhEv6GQglKAkIR0EaaI0Ziyo18Ex2A5F/zbOV TTzCxhGrFleGx7Ih9lixX7CpPhzKcXurTPU9aMEeCUXSmdHBhB02xpcHsEr2zwFMWa54 rY6C6ON9vaPqcPR+QrbUfc4hbgfBJu7RQ0pfmHoU+vle/8e5X/eD/4gNZpSnLUIt0JpF zcVA== X-Forwarded-Encrypted: i=1; AJvYcCU45F8yf0cOydopdnYGCTO1q531RZneOFKJH66q7DUtOQM5JJ340sOVHR5fRvOLVMjC2mti+43u5qwiqxs=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7lsE5rGgjasPJxSgXBjwULONKoo+IlQYQpFU3HTGpamaWO5V5 1joISXf0H3TwhajYMkVuFotlPLZRzCSj6RlAzgyQppfOJrHmx5OD9B2k9ccpFV8= X-Google-Smtp-Source: AGHT+IEEIZy962sS0NqhiAH+/P2/pIf6YHJDUZ/5UnHVdtEXH3Fq9ewNxPFXkoswpQkUFlUKGQc8Ww== X-Received: by 2002:a05:6402:50d0:b0:5c8:a2b8:cab3 with SMTP id 4fb4d7f45d1cf-5c947417730mr4682541a12.4.1728726866227; Sat, 12 Oct 2024 02:54:26 -0700 (PDT) Received: from localhost (dslb-002-200-173-220.002.200.pools.vodafone-ip.de. [2.200.173.220]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5c9370d2251sm2733449a12.12.2024.10.12.02.54.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Oct 2024 02:54:25 -0700 (PDT) From: Jonas Gorski Date: Sat, 12 Oct 2024 11:53:37 +0200 Subject: [PATCH 3/6] spi: do not initialize device chipselects to SPI_INVALID_CS Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241012-spi_multi_cs_cleanup-v1-3-dc491113880d@gmail.com> References: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> In-Reply-To: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> To: Mark Brown , Amit Kumar Mahapatra Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 Now that we know the number of valid chipselects, we don't need to initialize them to SPI_INVALID_CS to be able to know if they are valid, so we can drop both the initialization to SPI_INVALID_CS, as well as the check for it. We cannot drop the define itself though, since it is still used for spi_controller::last_cs[]'s state. Signed-off-by: Jonas Gorski --- drivers/spi/spi.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 15b2f4e02a685b2c778b27473289197ab08987d8..495b391710d69a46beaa56c1a43= 32eb6677d2f45 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -624,11 +624,6 @@ static void spi_dev_set_name(struct spi_device *spi) */ #define SPI_INVALID_CS ((s8)-1) =20 -static inline bool is_valid_cs(s8 chip_select) -{ - return chip_select !=3D SPI_INVALID_CS; -} - static inline int spi_dev_check_cs(struct device *dev, struct spi_device *spi, u8 idx, struct spi_device *new_spi, u8 new_idx) @@ -639,7 +634,7 @@ static inline int spi_dev_check_cs(struct device *dev, cs =3D spi_get_chipselect(spi, idx); for (idx_new =3D new_idx; idx_new < new_spi->num_chipselect; idx_new++) { cs_new =3D spi_get_chipselect(new_spi, idx_new); - if (is_valid_cs(cs) && is_valid_cs(cs_new) && cs =3D=3D cs_new) { + if (cs =3D=3D cs_new) { dev_err(dev, "chipselect %u already in use\n", cs_new); return -EBUSY; } @@ -685,7 +680,7 @@ static int __spi_add_device(struct spi_device *spi) for (idx =3D 0; idx < spi->num_chipselect; idx++) { /* Chipselects are numbered 0..max; validate. */ cs =3D spi_get_chipselect(spi, idx); - if (is_valid_cs(cs) && cs >=3D ctlr->num_chipselect) { + if (cs >=3D ctlr->num_chipselect) { dev_err(dev, "cs%d >=3D max %d\n", spi_get_chipselect(spi, idx), ctlr->num_chipselect); return -EINVAL; @@ -727,8 +722,7 @@ static int __spi_add_device(struct spi_device *spi) =20 for (idx =3D 0; idx < spi->num_chipselect; idx++) { cs =3D spi_get_chipselect(spi, idx); - if (is_valid_cs(cs)) - spi_set_csgpiod(spi, idx, ctlr->cs_gpiods[cs]); + spi_set_csgpiod(spi, idx, ctlr->cs_gpiods[cs]); } } =20 @@ -781,14 +775,6 @@ int spi_add_device(struct spi_device *spi) } EXPORT_SYMBOL_GPL(spi_add_device); =20 -static void spi_set_all_cs_unused(struct spi_device *spi) -{ - u8 idx; - - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) - spi_set_chipselect(spi, idx, SPI_INVALID_CS); -} - /** * spi_new_device - instantiate one new SPI device * @ctlr: Controller to which device is connected @@ -824,7 +810,6 @@ struct spi_device *spi_new_device(struct spi_controller= *ctlr, WARN_ON(strlen(chip->modalias) >=3D sizeof(proxy->modalias)); =20 /* Use provided chip-select for proxy device */ - spi_set_all_cs_unused(proxy); spi_set_chipselect(proxy, 0, chip->chip_select); =20 proxy->max_speed_hz =3D chip->max_speed_hz; @@ -2450,8 +2435,6 @@ static int of_spi_parse_dt(struct spi_controller *ctl= r, struct spi_device *spi, return -EINVAL; } =20 - spi_set_all_cs_unused(spi); - /* Device address */ rc =3D of_property_read_variable_u32_array(nc, "reg", &cs[0], 1, SPI_CS_CNT_MAX); @@ -2596,7 +2579,6 @@ struct spi_device *spi_new_ancillary_device(struct sp= i_device *spi, strscpy(ancillary->modalias, "dummy", sizeof(ancillary->modalias)); =20 /* Use provided chip-select for ancillary device */ - spi_set_all_cs_unused(ancillary); spi_set_chipselect(ancillary, 0, chip_select); =20 /* Take over SPI mode/speed from SPI main device */ @@ -2844,7 +2826,6 @@ struct spi_device *acpi_spi_device_alloc(struct spi_c= ontroller *ctlr, return ERR_PTR(-ENOMEM); } =20 - spi_set_all_cs_unused(spi); spi_set_chipselect(spi, 0, lookup.chip_select); =20 ACPI_COMPANION_SET(&spi->dev, adev); --=20 2.43.0 From nobody Wed Nov 27 06:48:13 2024 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 26E29154C17; Sat, 12 Oct 2024 09:54:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726870; cv=none; b=A6TlqZkJoIhzw4H62N0SWLhBFvPW2Febb5t5NRQOmVVfu/lXGx99q8ahOqwTsGnVO05XwpxK/scDEBBLtStGgpk/aXrybV9RB7Mk9lrJdiMSrwZb26JHEE7pZLFVNh4qrCW0k7xhGctuUTDe0+1vdHe8gfUL0TT21HX858hzTLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726870; c=relaxed/simple; bh=8F4EAhMS7+CFB9fbxDKkef+lgknglgfHRwZSTghHyac=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kuU8TvmOT1VknoJls8atGxU2TEy5wj8hbKsJbYgMc4yf1oUGuWfaKjvSR9Gx5pf0m0oXkF0kyqss6DdhehBPJ9YnkYXd/yHdFNfU0VLoUpqeUhO3HxszbIiNGL1V3ZToEHGzHZj2NxsYIpOPg/mNDpklilELrZSucW5ClnWV3sc= 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=Pc/abuOC; arc=none smtp.client-ip=209.85.218.45 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="Pc/abuOC" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a99422c796eso455891766b.3; Sat, 12 Oct 2024 02:54:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728726867; x=1729331667; 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=k0+JljHLnekSSywTewBZ577k02mbpsj8v/vK0Vy1JgI=; b=Pc/abuOCGrOOmCSnDcBvhlEm6L9VsWQVcH3Yn0pHalXKVDCAiHILSulyTB0aGp6gCr LRKds09b7L8yK61uyJaKCrOZGjf7vowbSDdUnJo6+ehU3ye7p70Y3iDDONRZeHS4OnzF LkR3cTWp6AmOHE2xsNrYGQPcJDwKMNIGKISE4v5eHRKrVFhKXCSrn26GTI90DF/y0UmO ZLmJV9YroRFr0cj0Fw/1br9kJhyRnbX67eTMQTjBtDiv9o+f7OYUkTVf0CCgqfMLZXYI ydMMn5RVDpGop88uI8qu2e3aIwliDrqY505b3tCxWo4/HuFVnFKB7zKclzHu8+0QMLEZ wrNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728726867; x=1729331667; 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=k0+JljHLnekSSywTewBZ577k02mbpsj8v/vK0Vy1JgI=; b=qcR9xlxEauSPZrytxMdi58a/tFOhYhUgjg/dS1799YYIY0zyKDno+XxaJF9LNwVAix 4hps4ekclwmSd9pAcaqqd3lV+6iP23fDQXel+T2J1x7X/NcClioafwp5HaVeqFhZx9NG 81NaT+N/zOwjkBxg5kJp6XIRjA+ej6r6QCS2x8XkGrh4SqibEZ19lptmU09HWcOz2kF4 2Swm9K8NPfePwgy5MRcD3/KfjDKrqBLI7pSQMuriLAc0wNcFsbxf3bUzeau+O4TOK6XN MU0tzkbmMC+Lje5k5lTvGCZ8ZOGBmtF81wiiWt1sQH4eXpLip8nDgRekEhhtTTB5dbp4 72Xw== X-Forwarded-Encrypted: i=1; AJvYcCX9zj0GRKMV+86wc0C5CHr5e3Mh+K0GE2nZoXI3UsYIc6wnkYay6hzbnHX/Df44GNxIMz2miEUqlPXfwvQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxFJ7uE66KAKC2QvC8+Aq1HjGPAnKNTlRwnLnY+CwFwvxaDd3/C vBHXd72YQjKFDuZNr6Aalx6jbAfSchqbD58h77ij2aYHqyUnPQsqlCRflGZFmsM= X-Google-Smtp-Source: AGHT+IEK1IX3mMJ8J6tExuY2o4k7qTsPV8XSQbjjlQxUqeuwlfqZ1KIIBiCh3GfFPh+WpiWZTVN4vw== X-Received: by 2002:a17:907:940c:b0:a8d:29b7:ecf3 with SMTP id a640c23a62f3a-a99b930e9d1mr438252566b.13.1728726867324; Sat, 12 Oct 2024 02:54:27 -0700 (PDT) Received: from localhost (dslb-002-200-173-220.002.200.pools.vodafone-ip.de. [2.200.173.220]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a99a80cb013sm304462866b.131.2024.10.12.02.54.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Oct 2024 02:54:26 -0700 (PDT) From: Jonas Gorski Date: Sat, 12 Oct 2024 11:53:38 +0200 Subject: [PATCH 4/6] spi: don't check spi_controller::num_chipselect when parsing a dt device Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241012-spi_multi_cs_cleanup-v1-4-dc491113880d@gmail.com> References: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> In-Reply-To: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> To: Mark Brown , Amit Kumar Mahapatra Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 Do not validate spi_controller::num_chipselect against SPI_CS_CNT_MAX when parsing an spi device firmware node. Firstly this is the wrong place, and this should be done while registering/validating the controller. Secondly, there is no reason for that check, as SPI_CS_CNT_MAX controls the amount of chipselects a device may have, not a controller may have. So drop that check as it needlessly limits controllers to SPI_CS_CNT_MAX number of chipselects. Likewise, drop the check for number of device chipselects larger than controller's number of chipselects, as __spi_add_device() will already catch that as either one of the chip selects will be out of range, or there is a duplicate one. Signed-off-by: Jonas Gorski --- drivers/spi/spi.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 495b391710d69a46beaa56c1a4332eb6677d2f45..ebf8bc9c2276a6f50ba6e9fded4= 8c870c4bd5ff0 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -2430,11 +2430,6 @@ static int of_spi_parse_dt(struct spi_controller *ct= lr, struct spi_device *spi, return 0; } =20 - if (ctlr->num_chipselect > SPI_CS_CNT_MAX) { - dev_err(&ctlr->dev, "No. of CS is more than max. no. of supported CS\n"); - return -EINVAL; - } - /* Device address */ rc =3D of_property_read_variable_u32_array(nc, "reg", &cs[0], 1, SPI_CS_CNT_MAX); @@ -2443,11 +2438,7 @@ static int of_spi_parse_dt(struct spi_controller *ct= lr, struct spi_device *spi, nc, rc); return rc; } - if (rc > ctlr->num_chipselect) { - dev_err(&ctlr->dev, "%pOF has number of CS > ctlr->num_chipselect (%d)\n= ", - nc, rc); - return -EINVAL; - } + if ((of_property_read_bool(nc, "parallel-memories")) && (!(ctlr->flags & SPI_CONTROLLER_MULTI_CS))) { dev_err(&ctlr->dev, "SPI controller doesn't support multi CS\n"); --=20 2.43.0 From nobody Wed Nov 27 06:48:13 2024 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 6840C155321; Sat, 12 Oct 2024 09:54:30 +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=1728726872; cv=none; b=MmHDn3CecY8ewfZuamhb01VkCd+rKaNsijPD0NNdX8/U8yZFOt0AiPDqi9Xrcir6WysxVmgiCB71nyWHDxQtQeXkwkHWfKcDtejgoocRTgM0AcTkoBSN8Jf4lzAm55YbX+HV25r0oz6sK5s5Oot27UT4+WWnDZOXjoNrjYkrW9M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726872; c=relaxed/simple; bh=tT90fDfKY662Oo3574ntryYhNPrGX12nSuc69yzLIig=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eFOIhVAk9/HtwZYqYo9XAEh21MP7RreAc7bCXnHA1XvUlZ0/L57zh0sTxIA3WxC4XVOb5aUpbHctFq5omVE+POnV1+vjA87u8kuD7nfxPnyGWo7vpgicYpYAZL0pIDPSeebMwz9uzbHlWuP/3Vzbr4i3bEcMIyYGXSBVQyIcfpA= 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=O+9JsbE/; 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="O+9JsbE/" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-a99ebb390a5so69441366b.1; Sat, 12 Oct 2024 02:54:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728726869; x=1729331669; 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=uRAJK2lijZlZ7uqxAhRv6bavE6DAc/XMDZFicjzd2Mw=; b=O+9JsbE/OGT3Lo+fB5ktgV27knhSJs0Lwb7Rn7Ufn0RTkLOZHb9Op5zx90qjUNIRhe XKxpgC9OdUCUi9naDZXreyBwmGv8WeniaMX4oQrx/MAIMJ/KMKIx3bJg17AIPppHtS9k crlGdPolVYtgMJ6q1/EjvUiBWsIW79xiCN12O/B7cAGCQPsSJREU5sDVwkyBoyy0Fojk 7+EISEQkyCk5zoFrayfSFFu9Fhf/aSN1frNpjaWXGTXq+sLal/axsAsF8DevFVtsPdsk xGcAu60RHbeF/R2LMRnj62YyU8Tj4cAeTW1FLy/YbrD3C/8yAEah8Oc8uZLBlsunOvEf eswA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728726869; x=1729331669; 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=uRAJK2lijZlZ7uqxAhRv6bavE6DAc/XMDZFicjzd2Mw=; b=tqjWM7qPU0tjVlYGXJadvszLtEVoN8uq99cdbG2R4UtOhmige+j5iCIm/w8GV4jF5+ OE9pMMJ3upoG6OlTqukmqLrdGOJh8Mae74yXOKs08WBPVmFD8h8PF2tmEpXqJ4iZFoT9 IV+wSJK5CsVVJBUifdLbFnQ9YvoIPjboj2VB6RpW3ZzoaAoO+LqGVzilSOzcWBLWz8Ya 0Y2Ew3jzkOxjNSJV5uTzUSSa1ooAvvsYlv+bsNi91zNpONIreEfgDlo5d2rhaDVWUlMG ZpkZ6VmPBUIympdv3uDdeleIVxwxHQJD8w1U+zYfZaoI9Jcx0aSBibRS6wl3rtfdV5Av cS0g== X-Forwarded-Encrypted: i=1; AJvYcCV0Rom4199rknubye8K1DurvITc84H1GkBNEqJPbNcRB11F2m/LJfUs9RNbfDjbg3pqqE2d6RgEOywTaR0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9UnQtPkPHG+J03D1dL1A6+iezBRyawBtrpMAtyv5sVpaNEyCZ ngFtLQrbPvPe56gmzLLUTsO5kxv5acdvwdr7L8UmLbJ8W6EPa9Vpaxn29M1ba4w= X-Google-Smtp-Source: AGHT+IHWzyYyIAL16jaxtcVte9iq4246C5sBQphF02aft7y1/jpOQGJdIeLeIKYwtpignkTd3q54UQ== X-Received: by 2002:a17:907:a0c9:b0:a99:ee23:dfb8 with SMTP id a640c23a62f3a-a99ee23e019mr106568766b.20.1728726868333; Sat, 12 Oct 2024 02:54:28 -0700 (PDT) Received: from localhost (dslb-002-200-173-220.002.200.pools.vodafone-ip.de. [2.200.173.220]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a99f5ff0cf7sm14740766b.155.2024.10.12.02.54.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Oct 2024 02:54:27 -0700 (PDT) From: Jonas Gorski Date: Sat, 12 Oct 2024 11:53:39 +0200 Subject: [PATCH 5/6] Revert "spi: Raise limit on number of chip selects" Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241012-spi_multi_cs_cleanup-v1-5-dc491113880d@gmail.com> References: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> In-Reply-To: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> To: Mark Brown , Amit Kumar Mahapatra Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 Now that we removed the limit of chip selects for the controller, we can reduce the amount of chip selects per device again to its original value. This reverts commit 2f8c7c3715f2c6fb51a4ecc0905c04dd78a3da29. Signed-off-by: Jonas Gorski --- include/linux/spi/spi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 77511c7d40df7085644cecaae325c982fb306afa..fe99f46c7d926eeb75398f4dddc= 5ef64d8f7736e 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -21,7 +21,7 @@ #include =20 /* Max no. of CS supported per spi device */ -#define SPI_CS_CNT_MAX 16 +#define SPI_CS_CNT_MAX 4 =20 struct dma_chan; struct software_node; --=20 2.43.0 From nobody Wed Nov 27 06:48:13 2024 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 7DC7215624C; Sat, 12 Oct 2024 09:54:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726873; cv=none; b=kaFPB3D5eBobgUAcYomE3ZO153UQUvd/CxH6fLPaxfP+m+dy4wbHkB1Bz1X6NLEeaj37qU7pFua948fXptSCWydOg+1Uemq/ZZzhyQpCGI5rpx6Y26lmrgtjMyXgpsAcI6+t+4m85VVfqfndxBYKQtmBqe3eCBj1yUES9RVUtvU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728726873; c=relaxed/simple; bh=ys5JI1ngpU3G1uGclEajO7jpE8cm1XVyWQVve05jHZg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F1dgUHgS4LQvokH3CFM8OZaf9eVbujAh2mpsiJa4dAsvujMJ7P3sRt31/p9DE+5b6Abt5sCbwiwzRy6ZalZxEDMEAx7p1WxTo7yKx28o/a30cYmMGLIinhjvim853gQT4KCj/nhGptfyAeANioff8F1D175HRm5qL1wR4/cGBhM= 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=CAXPbN+R; arc=none smtp.client-ip=209.85.218.54 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="CAXPbN+R" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-a99f646ff1bso12125066b.2; Sat, 12 Oct 2024 02:54:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728726870; x=1729331670; 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=n1Thee1kAUeC9PampdCJ2+s3t8t439kgGHTpMFquxb8=; b=CAXPbN+RE92zD4V2Nf+PKTPIBR5C3OTx6gNAMSXaSwuVnJoakX9fnzPdXajhRbApDu KEXZytBkwhGB1MWhKmoA2Xb+6Wur3HZQ2Uwly9AA4sckcVTmVDVQjJoJJyUJAYwq9oey QdvqvLNIHPvDvM53ukO/+GqOELS0nXpxoCOgKbsXwIf6pZ/FUIj1ydqUmeguHfuDU9qM a7PVpRFAVUwPVMhkgFtDlEu8qGdojra0LZvrsLwOfh0+V9JUtA/BPfOyuE4nA+UPUDY+ fMSJH/sxzPJxmsAlRg5GQkO6c3gY9c+6UXJZLbQ0/+gSw78CdVzKteFjvfJOA1O6ARBh UPXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728726870; x=1729331670; 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=n1Thee1kAUeC9PampdCJ2+s3t8t439kgGHTpMFquxb8=; b=mU+ae8jc6pUtzX/pyTgRPW/5rIpbln3nF54IMv8vS84zWZDiz05TRZee+2guIpGpQa MyIF9OWBp1FKjezhC5loScpNYBdqld6xzUzt8up03aIZryeHwuaOpJpjhiT0+2Py2ZoG 2RUtXY/iGwTcmSxHpvMhfYwOgdpnRxTwOlwzokyRjI7WlZsSsImBx+CqThvBmE/misrc NYQk02WyB2f/rR/A95diW3/SeJN17fIXeAaIbX8JnVpRmh7UG2RcidSJ2Z4W1yAB3LoP dxah51ssLEPjzNc3hBO1ozuXTGa5uymMmaXrZfmks+hqSYWfPHI5YhPk1Ps47lG0mP7s TVlA== X-Forwarded-Encrypted: i=1; AJvYcCWrwoSmHBDcBTB/dDjQiw3lGht62UF3HWEhTR2860ilwnmIijfNDe7G3+Uo0ctb6OCA0Cuitvc8vLhFv5A=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0iV/fg1OCy6YO21eCgAbmKVQI+OUJq7aeUJrmPOB7I9mc2IuJ UkMe63CsoE3Sr1EXddVO4Wwo1ssx8ZomsGI9g5j9ZnbzTnM4SwovqMhDltdXviM= X-Google-Smtp-Source: AGHT+IF23x4Q8xt+C2xkJXHCIx5ufh0hlAp9EyjODTlu5mgcNg9wjq0+L2LUiez9T+63Op9Z/58wXw== X-Received: by 2002:a17:907:940c:b0:a8d:29b7:ecf3 with SMTP id a640c23a62f3a-a99b930e9d1mr438259866b.13.1728726869491; Sat, 12 Oct 2024 02:54:29 -0700 (PDT) Received: from localhost (dslb-002-200-173-220.002.200.pools.vodafone-ip.de. [2.200.173.220]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a99a80c0217sm304936466b.110.2024.10.12.02.54.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Oct 2024 02:54:29 -0700 (PDT) From: Jonas Gorski Date: Sat, 12 Oct 2024 11:53:40 +0200 Subject: [PATCH 6/6] spi: rename SPI_CS_CNT_MAX => SPI_DEVICE_CS_CNT_MAX Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20241012-spi_multi_cs_cleanup-v1-6-dc491113880d@gmail.com> References: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> In-Reply-To: <20241012-spi_multi_cs_cleanup-v1-0-dc491113880d@gmail.com> To: Mark Brown , Amit Kumar Mahapatra Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 Rename SPI_CS_CNT_MAX to SPI_DEVICE_CS_CNT_MAX to make it more obvious that this is the max number of CS per device supported, not per controller. Signed-off-by: Jonas Gorski --- drivers/spi/spi-cadence-quadspi.c | 2 +- drivers/spi/spi.c | 12 ++++++------ include/linux/spi/spi.h | 13 +++++++------ 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-qu= adspi.c index 0b45b7b2b3ab30951d94ea2ce57dcba3a2600847..3b5776c80c6adfdb4ff67f03b06= 5f0bb81fb735b 100644 --- a/drivers/spi/spi-cadence-quadspi.c +++ b/drivers/spi/spi-cadence-quadspi.c @@ -33,7 +33,7 @@ #define CQSPI_NAME "cadence-qspi" #define CQSPI_MAX_CHIPSELECT 4 =20 -static_assert(CQSPI_MAX_CHIPSELECT <=3D SPI_CS_CNT_MAX); +static_assert(CQSPI_MAX_CHIPSELECT <=3D SPI_DEVICE_CS_CNT_MAX); =20 /* Quirks */ #define CQSPI_NEEDS_WR_DELAY BIT(0) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index ebf8bc9c2276a6f50ba6e9fded48c870c4bd5ff0..a147975cec452bc857f836ce974= 2da0b6ddfcff2 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -671,9 +671,9 @@ static int __spi_add_device(struct spi_device *spi) int status, idx; u8 cs; =20 - if (spi->num_chipselect > SPI_CS_CNT_MAX) { + if (spi->num_chipselect > SPI_DEVICE_CS_CNT_MAX) { dev_err(dev, "num_cs %d > max %d\n", spi->num_chipselect, - SPI_CS_CNT_MAX); + SPI_DEVICE_CS_CNT_MAX); return -EOVERFLOW; } =20 @@ -1075,7 +1075,7 @@ static void spi_set_cs(struct spi_device *spi, bool e= nable, bool force) trace_spi_set_cs(spi, activate); =20 spi->controller->last_cs_index_mask =3D spi->cs_index_mask; - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) { + for (idx =3D 0; idx < SPI_DEVICE_CS_CNT_MAX; idx++) { if (enable && idx < spi->num_chipselect) spi->controller->last_cs[idx] =3D spi_get_chipselect(spi, 0); else @@ -2357,7 +2357,7 @@ static void of_spi_parse_dt_cs_delay(struct device_no= de *nc, static int of_spi_parse_dt(struct spi_controller *ctlr, struct spi_device = *spi, struct device_node *nc) { - u32 value, cs[SPI_CS_CNT_MAX]; + u32 value, cs[SPI_DEVICE_CS_CNT_MAX]; int rc, idx; =20 /* Mode (clock phase/polarity/etc.) */ @@ -2432,7 +2432,7 @@ static int of_spi_parse_dt(struct spi_controller *ctl= r, struct spi_device *spi, =20 /* Device address */ rc =3D of_property_read_variable_u32_array(nc, "reg", &cs[0], 1, - SPI_CS_CNT_MAX); + SPI_DEVICE_CS_CNT_MAX); if (rc < 0) { dev_err(&ctlr->dev, "%pOF has no valid 'reg' property (%d)\n", nc, rc); @@ -3316,7 +3316,7 @@ int spi_register_controller(struct spi_controller *ct= lr) } =20 /* Setting last_cs to SPI_INVALID_CS means no chip selected */ - for (idx =3D 0; idx < SPI_CS_CNT_MAX; idx++) + for (idx =3D 0; idx < SPI_DEVICE_CS_CNT_MAX; idx++) ctlr->last_cs[idx] =3D SPI_INVALID_CS; =20 status =3D device_add(&ctlr->dev); diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index fe99f46c7d926eeb75398f4dddc5ef64d8f7736e..cdf8e4338f3850075123eec76db= 75a94033ccaaa 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -21,7 +21,7 @@ #include =20 /* Max no. of CS supported per spi device */ -#define SPI_CS_CNT_MAX 4 +#define SPI_DEVICE_CS_CNT_MAX 4 =20 struct dma_chan; struct software_node; @@ -186,7 +186,7 @@ struct spi_device { struct device dev; struct spi_controller *controller; u32 max_speed_hz; - u8 chip_select[SPI_CS_CNT_MAX]; + u8 chip_select[SPI_DEVICE_CS_CNT_MAX]; u8 num_chipselect; u8 bits_per_word; bool rt; @@ -218,7 +218,8 @@ struct spi_device { void *controller_data; char modalias[SPI_NAME_SIZE]; const char *driver_override; - struct gpio_desc *cs_gpiod[SPI_CS_CNT_MAX]; /* Chip select gpio desc */ + /* Chip select gpio desc */ + struct gpio_desc *cs_gpiod[SPI_DEVICE_CS_CNT_MAX]; struct spi_delay word_delay; /* Inter-word delay */ /* CS delays */ struct spi_delay cs_setup; @@ -233,7 +234,7 @@ struct spi_device { * multiple chip selects & memories are connected in parallel * then more than one bit need to be set in cs_index_mask. */ - u32 cs_index_mask : SPI_CS_CNT_MAX; + u32 cs_index_mask : SPI_DEVICE_CS_CNT_MAX; =20 /* * Likely need more hooks for more protocol options affecting how @@ -711,8 +712,8 @@ struct spi_controller { bool auto_runtime_pm; bool fallback; bool last_cs_mode_high; - s8 last_cs[SPI_CS_CNT_MAX]; - u32 last_cs_index_mask : SPI_CS_CNT_MAX; + s8 last_cs[SPI_DEVICE_CS_CNT_MAX]; + u32 last_cs_index_mask : SPI_DEVICE_CS_CNT_MAX; struct completion xfer_completion; size_t max_dma_len; =20 --=20 2.43.0