From patchwork Wed Feb 25 16:16:58 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4488 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 135023F1C6 for ; Wed, 25 Feb 2026 17:19:10 +0100 (CET) Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4837a71903asf23744525e9.1 for ; Wed, 25 Feb 2026 08:19:10 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1772036349; cv=pass; d=google.com; s=arc-20240605; b=DNNGYIfoIXA5A7VYbRu22dpmXTmaK7TDecIVcWBNINcapvzh44IyRZSlNEpS6Ew1AU Z8ysRRBaVW4ghFRDQEZMn1zTtSGukKTNht7BuR7IS1l7sOx0hpoOaLnmeV6tqeVxSE98 rfaT4A2hmalObP/stQ7T8ThrX1idvhtrY+RALHlOkYl9HdaPw8eTZmQsoLIzhnRZsEKE lc0hhZ9NKgsiMLf+oIm3QAfBp/Z7QQJW0Dk2vSFUsbJ/PegK9mMU40+Is38NDIGnpOnd 724qFsnG3ck3+ALJDP6ppFaO0NOQ+MV8xn1pRDWnW0YhKpsoyHdsmS9+LyMuinHC9y4p i6UA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=40zCRPo/FAXv0lfJgdF+Racf1n6BgNpYPZajh3KuJe0=; fh=gfhYIlkEPIVAmZylMh6xMthGbaOj/XTg/w4KdFXT3A4=; b=KvzX+3kdolpPS98uHZwCrezZsun2VIZ7Kar7p57s5IJCI2TigFOju/jytJGbQFO/Rm b+8Rmozl4UG4O1lmkSXWFGw10VHdm0YdmIRBE0/9N8pgxwJY24EnC+ikk5iemup5nOcG C8ACUhxTzIlnqEDlSJnpqrxX7jmr4b/AiMwZrvZxusyrN1+iZAzNfdW4HyFl6E+iCjmh /6JZu8HnXIZ0Srvq+V62/PO7M+sN5UNmRFMF3Ub0PuXQeMCCl2OdDEmR7AXW1js+ybMB KBBO4PkXp8C575FZ3ZpBCJgaWKcWkrNyYx5S9vqnslbb98sHYqPL0od9dmoPe2xHzcc0 fKkA==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="n3RiM/r/"; 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=1772036349; x=1772641149; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence: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; bh=40zCRPo/FAXv0lfJgdF+Racf1n6BgNpYPZajh3KuJe0=; b=jSeliaXsK+3nrBqyYNpmvv52EjThP573SkImHrWJEhLJtcbz2nb8/lPyuY1H2m6ZXx 11xmQof2Kk8RRxJXbjphFWqnyRFf2lD6JwMqoh+B2smlVmsxyszdKk9TO53KamZrAuQF 7DWsQ0je+g2wchDf2xH+slkALhfbBCJbv2VXE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772036349; x=1772641149; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :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; bh=40zCRPo/FAXv0lfJgdF+Racf1n6BgNpYPZajh3KuJe0=; b=XMwywO0EXqnBXFLoMZJYGXM4qbE8Z5R5nnz41pYUlvpAWLH8jSEejjxxJETPjQDWZW J3SoN8QVk0UlSDYnrw5jHNYeS+QSW30+++D1hShqqN9QXu6/0+toqZnus5m4Uu/41d2p GzGx472Wux6b75QzCgH+hdEAzynDuvNh0pdZQlApRRIF7CwP3JqcEbZgLnTpohnEpF/0 cHqBc153/PBz8NXZJkLdZVDLsZVqupsHUQQzIcfmIwNpMlQBHMgPuMx+5NtKlD8puq/i mj2bps/25Vxer9SuQqxho62EFgInh//ENzwyEdvJyG85vKEwN8vVxVCDjkoIX381hxMv RIiw== X-Forwarded-Encrypted: i=2; AJvYcCWeHA0b5dALEJtT5zgaAGmE7XXf4EOoNZCZY4ei4Fff52m2yX8b9ybBUfy8Wvhb2l4XQ8gLeGUJeBo/MpC5@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0Yw3IpvmQ2nOVqe+UPsaAVKNDVjLr0aKJ3iaCXYLwUT+8cJxprVE UyQ5ufNMYQQRvEXGbeNpXaJLKbuGTQJlV9tKEh7b5v0qlYtrN6PkL7OceRLZqzb4hGUwrA== X-Received: by 2002:a05:600c:8b54:b0:482:dbd7:a1c1 with SMTP id 5b1f17b1804b1-483c21b6ab9mr17570535e9.34.1772036349626; Wed, 25 Feb 2026 08:19:09 -0800 (PST) X-BeenThere: linux-amarula@amarulasolutions.com; h="AV1CL+G11g6v6ll2FRkV6TI2W0LeL8mw9OwWe20D2ktkY/LypQ==" Received: by 2002:a05:600c:3105:b0:480:6ce4:66ee with SMTP id 5b1f17b1804b1-483bf3db703ls6093085e9.2.-pod-prod-06-eu; Wed, 25 Feb 2026 08:19:07 -0800 (PST) X-Received: by 2002:a05:600c:198f:b0:477:9b35:3e49 with SMTP id 5b1f17b1804b1-483c216be05mr15872255e9.3.1772036347297; Wed, 25 Feb 2026 08:19:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772036347; cv=none; d=google.com; s=arc-20240605; b=INJzdO8hwnzax/2H+pTobFUOUuc/k/OYGMkj6Wc9/La5Q4jF0gtTj3WCsG4aAw29zH N7oH8KfCEFrLRLP1lIS9ZU6hr0pw4GihMscwBdDl7q8W4ulx7r/4aUntcjI3Vf0+eRaG Rak1hGo5xlilnP6aWG5vwvA1hRfrUHTK0AcAVclB/iS6eHrZhguDMFRFn78H1ZqR2nAV +hsjaDRfdguce1sudW9Zumd73dKSSYQ0M+CuNzLlpFGrYFxMw+XFrYA6gL74ughnmlpT oOAcQUsNgs8mqgNn4Qi0C7qD6FIlDhT8vtwXzDtGCnvR8aKGqEe7XU9z54Ak/luw4u7r wh4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=FaPhWKiMQvyXcHp7drHPqMWTp28rxSNAljsxQHzSH14=; fh=QZoutJPT+pXy1qUk539h9r/tpUMLR61JfMC4cgv8pmc=; b=Ti7SRegSZmMZMTgvtuhyZ+38QgygMzwz33cULS0GdeB8meZYxQDIpKRMuY+OCl55yJ fAJjo2a4fkCzxjan9nfjCFOWEfMnE0axzCCl32+JC3X8SyLSz4LEPuh2xkBvWtMVxWa/ HzEj+IaiGfR8c2A8GRyHOlAWzVkWs5vGNsRoexVF2R+QsNGPdCGj9Q9cQS7LC3QxRDx0 A64GiuSMphZNrmbJiikyqoqPtwUS3Y7pC1AA2nYMpx8NDhTTch5/+rt3JQdHB1KnwYZr FJB91hd+fO+yy+gZvxZkPiXlcpIo23AYgb7xnIcFXJ2S9HnOFf20hXv408CQoKWkQVrQ 6Xkw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b="n3RiM/r/"; 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-483a9b1fd12sor17052215e9.0.2026.02.25.08.19.07 for (Google Transport Security); Wed, 25 Feb 2026 08:19:07 -0800 (PST) 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-Gm-Gg: ATEYQzxoRTBgcHrF6A7nS38bmxF7eDN6miSToxKyLSOrPqXT0+vnG2vv4kSQ9kcpD95 k17kD+xTHEJBJ4Brl3+7BQ/ccEp/Qt4M+gL0SUALM+D0g7u7Zn9J5wcEj3LhbYQTijiWmcN4N6s mgA8QktiIQw+fmlPbj4CdIZ0YOXXPgmfgVxbWDpBvLUADbx+vKUsLxkrRlc++4JeIWmWiHHIvI1 uHKjjSQiU0d8H0Icj5dvIVhciHiTq/PVEwYbdKYnt+8aUno9gZJFV6SDsgmy17ER/37406Z8diW omGIOR9fgJ+akAAhyfjeTC1mvaJ8XHB8rgPNAepfzH8M6NZgSxzjIoqAxkIyexVy3iBry0gLJun qPtH6GvQ0QkiBO+MkoI59oFcibKgD4gD+1hEjuyAZYQQ3wm3QDpX5ULSlwXiaq1DpdCXjuI8b7u zReQVZpYbRVdGn9iI7NmarEzAP59IeXVNGTrOXyvbHudlwrxiSmFF8rC0zmE7ia3LBF2dpkW5Z7 xnUEW26WU+xPCiokbVi9dWuXuYUFPWKdpNkWWuhrAKAtNfl X-Received: by 2002:a05:600c:3151:b0:45d:f81d:eae7 with SMTP id 5b1f17b1804b1-483c21aab65mr13522945e9.28.1772036346832; Wed, 25 Feb 2026 08:19:06 -0800 (PST) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com ([2.196.43.111]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483bd6f19f5sm186562265e9.1.2026.02.25.08.19.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Feb 2026 08:19:06 -0800 (PST) From: Dario Binacchi To: u-boot@lists.denx.de Cc: linux-amarula@amarulasolutions.com, Patrick Delaunay , Patrice Chotard , Dario Binacchi , Jagan Teki , Tom Rini , uboot-stm32@st-md-mailman.stormreply.com Subject: [PATCH v3 7/9] spi: stm32: add support for bits-per-word setting Date: Wed, 25 Feb 2026 17:16:58 +0100 Message-ID: <20260225161851.2475274-8-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260225161851.2475274-1-dario.binacchi@amarulasolutions.com> References: <20260225161851.2475274-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="n3RiM/r/"; 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: , Implement the set_wordlen operation to allow dynamic bus width configuration. This is required for peripherals with non-standard requirements, such as display panels that need 9-bit word transfers during the initialization and setup phase. Signed-off-by: Dario Binacchi --- Changes in v3: - Move the stm32_spi_is_enabled() implementation in the previous patch drivers/spi/stm32_spi.c | 57 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/drivers/spi/stm32_spi.c b/drivers/spi/stm32_spi.c index 70eb8735e03d..9d095b280a70 100644 --- a/drivers/spi/stm32_spi.c +++ b/drivers/spi/stm32_spi.c @@ -384,6 +384,44 @@ static int stm32_spi_set_speed(struct udevice *bus, uint hz) return 0; } +static int _stm32_spi_set_wordlen(struct udevice *bus, unsigned int wordlen) +{ + struct stm32_spi_priv *priv = dev_get_priv(bus); + struct stm32_spi_plat *plat = dev_get_plat(bus); + void __iomem *base = plat->base; + bool spi_enabled; + + if ((wordlen - 1) < SPI_CFG1_DSIZE_MIN || + (wordlen - 1) > SPI_CFG1_DSIZE) { + dev_err(bus, "Cannot set wordlen to %u [%d - %d]\n", + wordlen, SPI_CFG1_DSIZE_MIN + 1, + SPI_CFG1_DSIZE + 1); + return -EINVAL; + } + + spi_enabled = stm32_spi_is_enabled(plat->base); + if (spi_enabled) + stm32_spi_disable(plat->base); + + dev_dbg(bus, "bits_per_word=%d\n", wordlen); + + priv->cur_bpw = wordlen; + clrsetbits_le32(base + STM32_SPI_CFG1, SPI_CFG1_DSIZE, + priv->cur_bpw - 1); + + if (spi_enabled) + stm32_spi_enable(plat->base); + + return 0; +} + +static int stm32_spi_set_wordlen(struct udevice *slave, unsigned int wordlen) +{ + struct udevice *bus = dev_get_parent(slave); + + return _stm32_spi_set_wordlen(bus, wordlen); +} + static int stm32_spi_xfer(struct udevice *slave, unsigned int bitlen, const void *dout, void *din, unsigned long flags) { @@ -397,11 +435,19 @@ static int stm32_spi_xfer(struct udevice *slave, unsigned int bitlen, u32 xferlen; u32 mode; int xfer_status = 0; + int nb_words; xferlen = bitlen / 8; - if (xferlen <= SPI_CR2_TSIZE) - writel(xferlen, base + STM32_SPI_CR2); + if (priv->cur_bpw <= 8) + nb_words = xferlen; + else if (priv->cur_bpw <= 16) + nb_words = DIV_ROUND_UP(xferlen * 8, 16); + else + nb_words = DIV_ROUND_UP(xferlen * 8, 32); + + if (nb_words <= SPI_CR2_TSIZE) + writel(nb_words, base + STM32_SPI_CR2); else return -EMSGSIZE; @@ -409,6 +455,8 @@ static int stm32_spi_xfer(struct udevice *slave, unsigned int bitlen, priv->rx_buf = din; priv->tx_len = priv->tx_buf ? xferlen : 0; priv->rx_len = priv->rx_buf ? xferlen : 0; + dev_dbg(bus, "bitlen: %d, xferlen: %d, nb_words: %d\n", + bitlen, xferlen, nb_words); mode = SPI_FULL_DUPLEX; if (!priv->tx_buf) @@ -570,9 +618,7 @@ static int stm32_spi_probe(struct udevice *dev) priv->fifo_size = stm32_spi_get_fifo_size(dev); priv->cur_mode = SPI_FULL_DUPLEX; priv->cur_xferlen = 0; - priv->cur_bpw = SPI_DEFAULT_WORDLEN; - clrsetbits_le32(base + STM32_SPI_CFG1, SPI_CFG1_DSIZE, - priv->cur_bpw - 1); + _stm32_spi_set_wordlen(dev, SPI_DEFAULT_WORDLEN); for (i = 0; i < ARRAY_SIZE(plat->cs_gpios); i++) { if (!dm_gpio_is_valid(&plat->cs_gpios[i])) @@ -633,6 +679,7 @@ static const struct dm_spi_ops stm32_spi_ops = { .release_bus = stm32_spi_release_bus, .set_mode = stm32_spi_set_mode, .set_speed = stm32_spi_set_speed, + .set_wordlen = stm32_spi_set_wordlen, .xfer = stm32_spi_xfer, };