From patchwork Wed Feb 25 16:16:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4482 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id C6EDC40C8E for ; Wed, 25 Feb 2026 17:19:00 +0100 (CET) Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4836cd6dfe6sf34899555e9.2 for ; Wed, 25 Feb 2026 08:19:00 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1772036340; cv=pass; d=google.com; s=arc-20240605; b=jShG6uczAtIblMKtihYzOT66+3sCNj9UwMJyyBKKIXI43csApdJ0H9kFSlEK9i2+2n ywi7mIqnD/OVN78Np2J6lBklJQEIzNsNjxqDMg04LC2W+oezHs6sxMCNLwvZ/XizQ6G1 yRlR3b5n5nxTSCKMXwQWeh4CZMrw6ZTgl4DIyKvflM7MyvXl5IbNroy4FGx32c8r5TfX kc5tcRlKaFKgDzPbultZ/I1gineMjjg2zesyOJD3iR7n+feEHml6f2K+5aKuaxo0lO4e HbbwunG4oJar1rwYMKz7JDS/f7WqRNFbv5YNJlWVAh5lxy+7fkmgNx1qakgesgXNU8UE mXxg== 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=Y39tDF2VMKqQI79Q1cwlDEfaD50P9bmqp16y92ei6WU=; fh=iHmByMaXN94KxbG/1B3RVC9KD+0Z7Rpj1fzINg6ovho=; b=ANgO372ZkjEPNFcWlPUzHulDZHPnWwaJHd6ol/OXyN16VOY9oLDz+vUumpiNgdH+yy q92rQgr8U/A+vcPRQQ3jrBap74wbh/bnfo8OWQ2sj4K8mettxRWFSKc+at4oEFLay+/6 kZTQbDOC3oRpp/qejIX38kZFSJ2SP1NXWRxpgv3vspUVUBQX6JRwEBZ+9dySWwzNHIok 4hApb6qMZb5ztRQk1TWxukN3ppqcfTzC/uySdsZjzF8EJe++mCTkGwoEfPTlKOtEGn8S SXmCZZNjf+Qf5InJZxo52v5VHATbA55rB7cNVf5QiemJfOaiOlfTw1lD28Srmz1oTmDz qXlQ==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Ee6kw6Mv; 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=1772036340; x=1772641140; 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=Y39tDF2VMKqQI79Q1cwlDEfaD50P9bmqp16y92ei6WU=; b=eIRdCbX9gT80HNrDoNbh7K07qXIRvzACq5jsmcv6Cs6WxKvom07WV2aCiybzY9G9l1 mi7oXJzNoozrVrkdS1fjK5+BGjByfAqPOn8AI5kJ9vjjfDTfJBIUFq8Ww6+3fQG/ihVs dBvo8xgd96+f7wp4UuDCdEBef184FlkZMAtsA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772036340; x=1772641140; 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=Y39tDF2VMKqQI79Q1cwlDEfaD50P9bmqp16y92ei6WU=; b=Kks3vsOfVYqSP4uUiGekiRfJL/X6ymKntwozETSm/puHXeX6l6jbH9A676fiKqygPM BR+Vmz1UhqlLcxjSzEIK2UazuWn7DDugNmGwl154HcHWWuVpzg9ak9ofoQ9O3jzD18s/ aADXsQUby+XvqlPLGbBjXU2uEjO7ADtrxW22oXRYga82gyr2sabMKcdP6SkANbmX/yak T6c+BCln2MZ1PpzG7UxoAVMI+NOuDT/EyNnlH5hhyo9uVPruJ2fg2rLXtt9gMOjkfu2h SgYZu/Czl1cMI2wzC07gMYaLZYKIJXixuY2HH8tIuh8cRTeMGNy231VmdnBnwxSY8imc niNw== X-Forwarded-Encrypted: i=2; AJvYcCW8cxzti1Ge7NqI0raTxix5F9nyrQI9yFy5lxVV0tXYklGDQnfULjbFWQq6ubPjNsLSR1t8Ki4QkaZZ19x1@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YwIEa7O45cMaVqbNjaBB35ZJ4fVda6oGzbaKu2oNgai0FrOTSa8 iIrHF2L4OvcSgX+kJYOnfYlHPqlHQJpdV0sT6d4x2Dz4VB4uH06DmrXTT2e6AeTHbitpBw== X-Received: by 2002:a05:600c:4fd3:b0:483:7907:ea02 with SMTP id 5b1f17b1804b1-483c219ebc2mr17303555e9.16.1772036340234; Wed, 25 Feb 2026 08:19:00 -0800 (PST) X-BeenThere: linux-amarula@amarulasolutions.com; h="AV1CL+E9qir70g/k1ZdU3N+et85H4KNlSHmvGsLdHUMZ78yjmA==" Received: by 2002:a05:600c:3b84:b0:480:6d1a:97b4 with SMTP id 5b1f17b1804b1-483bf3524bfls6349605e9.0.-pod-prod-06-eu; Wed, 25 Feb 2026 08:18:58 -0800 (PST) X-Received: by 2002:a05:600c:450e:b0:477:55ce:f3c2 with SMTP id 5b1f17b1804b1-483c2176518mr18627715e9.14.1772036338113; Wed, 25 Feb 2026 08:18:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772036338; cv=none; d=google.com; s=arc-20240605; b=JY5eOmN3GS6WkMin9ASCz0MWYMIGS4NyjsczBrto/cOixuZ50DiGNHZ5wtJB+bDIv/ CFngGIqkZr934nNgQYyPt2cKRKy7843eQFckMapkmA6Bq9YjI5kTLSu/isZIRy/jlr9Z 4kNjvQlyseNg+2HEnhxIvXw1bG3H0U9EJRx6zRKYhDuxv08gOwTDbM5Any0z/Z5GCYFa vPHqbXGT95Rap+1aiWkIVtQqdl1MLBX3L0kZqn7XbGmLIozkZljXH8wUlaJ+fiwam0o/ 5UUpaGuMkbSLfC7su1t7gZtkmRHgZS+EJpaG1Y/sKlRphYkeN5XYGc2U0lycHzpvNdxm cXSw== 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=d+RdgwCIFcBUgakrQ/69px0Mb4WK7f682IsrQihAe0k=; fh=SZgqhDWKukLiFu09O4MXZadCg3JZim6evx27FfgCVhE=; b=FRAannpd5g6FnfxcEtIBBEx5yfWHA9i1j/ZNkupqDs2OTNvBEPJYtVfBKgJ9uFJ1rM DpOnXSr+xPIM3n7aYBQbtnq5gRVVTjvwsM2CMkWMPsP63xKDGitwycSNgQ2FBWdV8cpN lSI4VCPTOkyZNtwhyywZE6AD0KxtmgZibF8fhn/Gn2CzJWKngMJFS1o0S0KWhHv9s+dN C9JCbQn8EbmqtEowjwG0/91YsiSVh8oVwRNymcTLQrdAkC2xlkiQUMRKTnaVugLoWuXB YSCZ5ciyXD6IPKqBRSTZpBphjpuCGBR0kBvuRvDLIxnn/fEIzPRAlXAxCxP3pdUbNrms iPSQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=Ee6kw6Mv; 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-483a9ca9b40sor14399825e9.20.2026.02.25.08.18.58 for (Google Transport Security); Wed, 25 Feb 2026 08:18:58 -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: ATEYQzz5kZk1vH6cvCOPaCnJBLiinIJy0/NwYiWsgWSQpF/TfT5SSBmXtADlGLbbxWK cRO7SrHzYT8FQ7tSCOahP4bZq68/dN1EaDucJdyQRqS77zTXiCSV9U7ePe52i72CqxLVqTL7Byg VI3nKlKTkhGub8U5mA6n6OAia6mEgIiT7MOxvmI64OilHTjuy1VqPX8ykNjflNaOwKcL6mqVCq1 mGTi8aAwD70ol9LcmpDP57sq35LtJeGqpaCwSV8NiqUzwcC6mTH75Sr3mDb2rCKLtRGirpRqIrH cJCu8RpSER5HzHHb4ufkhTaIZOj/z6HgExrHiaQ2DDH8JPZmQeryr2QAW94c/raDVloMlPKWjgT gU1SfquvX2EU29zNxTLbsj415JgjeEnidXUVjd0dAv4kDdHBMJ991OtxsH2YQETdzWDw2pixsW4 gKQxA4/HaBy3tK/GVbiUnIADuGulRdPxaI6PNrVvilm+5cj/35zvTMt3N/bsHbdMotWO6PmtFUZ 82ls1amALKD24OLTIntJjn9JxxBVT2gR0AsivJ+/gUFdwGq X-Received: by 2002:a05:600c:6815:b0:483:7783:537b with SMTP id 5b1f17b1804b1-483c21a54d7mr18617235e9.24.1772036337675; Wed, 25 Feb 2026 08:18:57 -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.18.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Feb 2026 08:18:57 -0800 (PST) From: Dario Binacchi To: u-boot@lists.denx.de Cc: linux-amarula@amarulasolutions.com, Patrick Delaunay , Patrice Chotard , Dario Binacchi , Simon Glass , Andrew Goodbody , Christian Marangi , Jagan Teki , Tom Rini Subject: [PATCH v3 1/9] spi: add support for bits-per-word setting Date: Wed, 25 Feb 2026 17:16:52 +0100 Message-ID: <20260225161851.2475274-2-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=Ee6kw6Mv; 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: , Allow dynamic configuration of the SPI word length. This is required for controllers and slaves that need to operate with non-standard word lengths, such as 9-bit wide transfers. Signed-off-by: Dario Binacchi Reviewed-by: Simon Glass --- Changes in v3: - Add Reviewed-by tag of Simon Glass - Store the default value in struct dm_spi_slave_plat and copy it in struct spi_slave drivers/spi/spi-uclass.c | 22 +++++++++++++++++++++- include/spi.h | 14 ++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c index 49b584c648d6..f70c04994252 100644 --- a/drivers/spi/spi-uclass.c +++ b/drivers/spi/spi-uclass.c @@ -91,6 +91,20 @@ void dm_spi_release_bus(struct udevice *dev) ops->release_bus(dev); } +int dm_spi_set_wordlen(struct udevice *dev, unsigned int wordlen) +{ + struct udevice *bus = dev->parent; + struct dm_spi_ops *ops = spi_get_ops(bus); + + if (bus->uclass->uc_drv->id != UCLASS_SPI) + return -EOPNOTSUPP; + + if (!ops->set_wordlen) + return -ENOSYS; + + return ops->set_wordlen(dev, wordlen); +} + int dm_spi_xfer(struct udevice *dev, unsigned int bitlen, const void *dout, void *din, unsigned long flags) { @@ -144,6 +158,11 @@ int spi_set_speed(struct spi_slave *slave, uint hz) return ret; } +int spi_set_wordlen(struct spi_slave *slave, unsigned int wordlen) +{ + return dm_spi_set_wordlen(slave->dev, wordlen); +} + int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, void *din, unsigned long flags) { @@ -215,7 +234,7 @@ static int spi_child_pre_probe(struct udevice *dev) slave->max_hz = plat->max_hz; slave->mode = plat->mode; - slave->wordlen = SPI_DEFAULT_WORDLEN; + slave->wordlen = plat->wordlen; return 0; } @@ -582,6 +601,7 @@ int spi_slave_of_to_plat(struct udevice *dev, struct dm_spi_slave_plat *plat) } plat->mode = mode; + plat->wordlen = SPI_DEFAULT_WORDLEN; return 0; } diff --git a/include/spi.h b/include/spi.h index 2783200d663e..5a98b1cad65e 100644 --- a/include/spi.h +++ b/include/spi.h @@ -77,11 +77,13 @@ struct dm_spi_bus { * @cs: Chip select number (0..n-1) * @max_hz: Maximum bus speed that this slave can tolerate * @mode: SPI mode to use for this device (see SPI mode flags) + * @wordlen: Word length in bits to use for this device */ struct dm_spi_slave_plat { unsigned int cs[SPI_CS_CNT_MAX]; uint max_hz; uint mode; + unsigned int wordlen; }; /** @@ -729,6 +731,18 @@ int dm_spi_claim_bus(struct udevice *dev); */ void dm_spi_release_bus(struct udevice *dev); +/** + * Set the word length for SPI transactions + * + * Set the word length (number of bits per word) for SPI transactions. + * + * @slave: The SPI slave + * @wordlen: The number of bits in a word + * + * Returns: 0 on success, -1 on failure. + */ +int dm_spi_set_wordlen(struct udevice *dev, unsigned int wordlen); + /** * SPI transfer *