From nobody Mon Sep 28 00:51:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787630786; cv=none; d=zohomail.com; s=zohoarc; b=PlX9y0fXHUh+2HMoxIqktPgxTf6s5joJvXyRKxxQDJ2GDV0LTdyN9yRNRl6vUnotU90buCEZ/IdCYDvo1fXkQ/5x9R4BV2gu2/Eo6sna+Ef5UVjQQ+WP6DYQXtXvoqxUCBH0AymXJco+QNkRDrLyexr/sGLGgvLlQzgsIPg6iRM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787630786; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bpZgNI6U09zLAIr/sXU7CBTSkl69mPWcZLi9Ua5xvg4=; b=Ujh+5cYKb0IVfhkO8YiDOmo/FGWKM4HzyECxBR6k8aOS50BRxjAyQLGy7Kac9h4+BhkAIfFSB+ENw9q/KIikIlXU3cJez+8p3JDGcTgL7h78Brr2t9CdHSZcSYnp43G/0Bjjv0xCmX90FLIoMoFfeXLXQKmcNBmws/Ce1tshQnM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787630786837248.7773704608951; Mon, 24 Aug 2026 21:06:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyiPZ-0006Gd-Ou; Tue, 25 Aug 2026 00:05:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyiPX-0006FX-GF for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:19 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyiPU-0007cH-24 for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:19 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 41be03b00d2f7-cc147d86bebso375719a12.0 for ; Mon, 24 Aug 2026 21:05:15 -0700 (PDT) Received: from lima-default.tail89d63.ts.net ([159.196.41.205]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327f909adc8sm34104212eec.2.2026.08.24.21.05.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2026 21:05:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787630714; x=1788235514; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=bpZgNI6U09zLAIr/sXU7CBTSkl69mPWcZLi9Ua5xvg4=; b=WtWctR2nk/qxBUMMQ1U3JLfLbXtCNzqVKhZq573geYiKl8J/9pVtPOORf8cz2FHT2e f0KG0CSAXqdXkCG9NlMpsfjRm22c+cBzF6c4RN3GGYDFcOEBFEDDlumBqJyX5xcdh3RV eNOMD1k9tdMQ8VVTnnXxwVZU/3r8PooNWQ6yYrk+OO/LribtrnLm5PuMYhu18LirGeWG cUrT7WMaBB8EongEUn26kQ9z9IwhNzX/17cDgqU2xbkbzQC0ItXiAbOsttEMaLVR99mi XthQc8gzRi51LhnTZcHcGkxvD7VAmW1sdNrXCQZgrVuzml6xd5UogNvkpDzS/J7qoz3b cu9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787630714; x=1788235514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=bpZgNI6U09zLAIr/sXU7CBTSkl69mPWcZLi9Ua5xvg4=; b=rtOvADVttOqE7bJXadD6eLgZ9L6X12dRTXgPi3aIOnWwi9gTzEhr/pBcpNBSwoc3Xk f7zxf5EnLGgm2GSXn67Mzn0Elzut/Lrv2NZTdvOYb1/r6/A9L+Da0juv47HJi9h3bHRN Gy14Z5aYdo9e1uGcSynF/v/c18/961KFUe5adAJXtC/3mypFx3GpnzoQAgp5A1lgGVli GJf4INJmWgVjY6Ewppw2CQo0o+0AEd6rXaYzu1oG9HOWVLyMvz5hqHI+CeWzWXFXSYot 325Y9dn5bgvrIqqp3ScOerHOJEQRXp75qLrKWp/IFcP12E4RkKwjOdDaTqJq9ZbYj6aV pCQg== X-Gm-Message-State: AFuF++m3TxLFD5I/PE78F5bkTLWbJDvdByR8PNAhqWbUuiutOnz3EL6G L3BMkovtJieZXLGsuVFNOkVGVLfGGMsdTKY6QusGnsxHVZpm7Ue9MQPiBT9CHn9Q X-Gm-Gg: AR+sD10YMMBybHVqSBq9hARMNCPYPnNGBYtHdg+4DLpCWIfyJpN4UESNg+fESJw0TOy UFsPxWVJC3BAGEeETkupskNjYa/doa84x9LgaDb/fQ4Diw9rb7mxhxtAsVHReT6983llWooRsBN 0dUelqrDkUwUQ4JFyzXC83d5QH1HX9UH1p1hmWHtvJqGgfDjTHCSF9Gcd4lTY2YpLpHfnOK/X3h vsEUyMXmII/9xFEdQWxxXBnA1sKpSz1V+WUUKu2P5PpDrs4orm6rP3H7KUERFghczTvRGIWGcPB 9lQ0HgGOqw147LbmmLSnn1lPvD1z1NZlQsHJhlEv5SQtdEqz47WFeMlHwHwax3ExzUm7e05SakY yD7mPFhkBQ2ca6++DhSmGjzyp0Y5mgzy46quv9ihas+jWH6PFq3kmTYrJz31LzZgTArmV6ywqCt 2l7keBZs3W4KmGGA/oGvpHwkfIiw4RE4tKVaCbaLJYGc/wx3RtRQrRvnImJe1lfiLY/pnx9leaO Uy1ERgU2JQKrzW/pGp2mbyzH0YJAq9uhA== X-Received: by 2002:a17:90b:2b88:b0:38f:cab0:9aa9 with SMTP id 98e67ed59e1d1-39645a57193mr5547960a91.13.1787630714066; Mon, 24 Aug 2026 21:05:14 -0700 (PDT) From: stephensportia@gmail.com To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Peter Maydell , Jamin Lin , qemu-ppc@nongnu.org, =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Steven Lee , Andrew Jeffery , Harsh Prateek Bora , Subbaraya Sundeep , Troy Lee , "Edgar E. Iglesias" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alistair Francis , Strahinja Jankovic , qemu-arm@nongnu.org, Tyrone Ting , Nicholas Piggin , Aditya Gupta , Kane Chen , Francisco Iglesias , Joel Stanley , Hao Wu , Glenn Miles , qemu-riscv@nongnu.org, Jean-Christophe Dubois , Portia Stephens Subject: [PATCH 1/4] hw/ssi: Rename ssi_transfer to ssi_transfer8 Date: Tue, 25 Aug 2026 14:04:49 +1000 Message-ID: <20260825040452.1322251-2-stephensportia@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825040452.1322251-1-stephensportia@gmail.com> References: <20260825040452.1322251-1-stephensportia@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=stephensportia@gmail.com; helo=mail-pg1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1787630789319158500 Content-Type: text/plain; charset="utf-8" From: Portia Stephens The ssi_transfer function comments say that it takes a word varying between 8-bits and 32-bits. ssi_transfer takes a 32-bit arg to transfer but there is no means to indicate the number of bits that should actually be transferred. All child classes of SSI_PERIPHERAL class have transfer functions that, despite accepting a 32-bit tx, only transfer a single byte; m25p80_transfer8(), ssi_sd_transfer(), ssd0323_transfer(). The current implementation depends on the SSI model to know what peripheral model will be attached and what transfer size it expects which is error prone. If a SSI_PERIPHERAL model was written that accepted 32-bit transfers, it could not attach to any existing SSI models. This change updates the naming of ssi_transfer to ssi_transfer8, as well as changes the return value and transmit argument to be 8-bit. Signed-off-by: Portia Stephens Reviewed-by: Alistair Francis --- hw/arm/strongarm.c | 2 +- hw/ssi/allwinner-a10-spi.c | 2 +- hw/ssi/aspeed_smc.c | 14 ++++++------- hw/ssi/bcm2835_spi.c | 2 +- hw/ssi/ibex_spi_host.c | 5 +++-- hw/ssi/imx_spi.c | 2 +- hw/ssi/mss-spi.c | 2 +- hw/ssi/npcm7xx_fiu.c | 42 +++++++++++++++++++------------------- hw/ssi/npcm_pspi.c | 4 ++-- hw/ssi/pl022.c | 2 +- hw/ssi/pnv_spi.c | 2 +- hw/ssi/sifive_spi.c | 2 +- hw/ssi/ssi.c | 4 ++-- hw/ssi/stm32f2xx_spi.c | 2 +- hw/ssi/xilinx_spi.c | 10 ++++----- hw/ssi/xilinx_spips.c | 4 ++-- hw/ssi/xlnx-versal-ospi.c | 4 ++-- include/hw/ssi/ssi.h | 17 ++++++++------- 18 files changed, 61 insertions(+), 61 deletions(-) diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index 5a3242195a..e400f0a185 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -1516,7 +1516,7 @@ static void strongarm_ssp_write(void *opaque, hwaddr = addr, if (s->sscr[1] & SSCR1_LBM) { readval =3D value; } else { - readval =3D ssi_transfer(s->bus, value); + readval =3D ssi_transfer8(s->bus, value); } =20 if (s->rx_level < 0x08) { diff --git a/hw/ssi/allwinner-a10-spi.c b/hw/ssi/allwinner-a10-spi.c index 69920b935a..5758e81c10 100644 --- a/hw/ssi/allwinner-a10-spi.c +++ b/hw/ssi/allwinner-a10-spi.c @@ -300,7 +300,7 @@ static void allwinner_a10_spi_flush_txfifo(AWA10SPIStat= e *s) trace_allwinner_a10_spi_tx(tx); =20 /* Write one byte at a time */ - rx =3D ssi_transfer(s->bus, tx); + rx =3D ssi_transfer8(s->bus, tx); =20 trace_allwinner_a10_spi_rx(rx); =20 diff --git a/hw/ssi/aspeed_smc.c b/hw/ssi/aspeed_smc.c index bf596f7b2d..f6e8dd9457 100644 --- a/hw/ssi/aspeed_smc.c +++ b/hw/ssi/aspeed_smc.c @@ -488,10 +488,10 @@ static void aspeed_smc_flash_setup(AspeedSMCFlash *fl= , uint32_t addr) /* Flash access can not exceed CS segment */ addr =3D aspeed_smc_check_segment_addr(fl, addr); =20 - ssi_transfer(s->spi, cmd); + ssi_transfer8(s->spi, cmd); while (i--) { if (aspeed_smc_addr_byte_enabled(s, i)) { - ssi_transfer(s->spi, (addr >> (i * 8)) & 0xff); + ssi_transfer8(s->spi, (addr >> (i * 8)) & 0xff); } } =20 @@ -503,7 +503,7 @@ static void aspeed_smc_flash_setup(AspeedSMCFlash *fl, = uint32_t addr) */ if (aspeed_smc_flash_mode(fl) =3D=3D CTRL_FREADMODE) { for (i =3D 0; i < aspeed_smc_flash_dummy_bytes(fl); i++) { - ssi_transfer(fl->controller->spi, s->regs[R_DUMMY_DATA] & 0xff= ); + ssi_transfer8(fl->controller->spi, s->regs[R_DUMMY_DATA] & 0xf= f); } } } @@ -519,7 +519,7 @@ static MemTxResult aspeed_smc_flash_read(void *opaque, = hwaddr addr, switch (aspeed_smc_flash_mode(fl)) { case CTRL_USERMODE: for (i =3D 0; i < size; i++) { - *data |=3D (uint64_t) ssi_transfer(s->spi, 0x0) << (8 * i); + *data |=3D (uint64_t) ssi_transfer8(s->spi, 0x0) << (8 * i); } break; case CTRL_READMODE: @@ -528,7 +528,7 @@ static MemTxResult aspeed_smc_flash_read(void *opaque, = hwaddr addr, aspeed_smc_flash_setup(fl, addr); =20 for (i =3D 0; i < size; i++) { - *data |=3D (uint64_t) ssi_transfer(s->spi, 0x0) << (8 * i); + *data |=3D (uint64_t) ssi_transfer8(s->spi, 0x0) << (8 * i); } =20 aspeed_smc_flash_unselect(fl); @@ -561,7 +561,7 @@ static MemTxResult aspeed_smc_flash_write(void *opaque,= hwaddr addr, switch (aspeed_smc_flash_mode(fl)) { case CTRL_USERMODE: for (i =3D 0; i < size; i++) { - ssi_transfer(s->spi, (data >> (8 * i)) & 0xff); + ssi_transfer8(s->spi, (data >> (8 * i)) & 0xff); } break; case CTRL_WRITEMODE: @@ -569,7 +569,7 @@ static MemTxResult aspeed_smc_flash_write(void *opaque,= hwaddr addr, aspeed_smc_flash_setup(fl, addr); =20 for (i =3D 0; i < size; i++) { - ssi_transfer(s->spi, (data >> (8 * i)) & 0xff); + ssi_transfer8(s->spi, (data >> (8 * i)) & 0xff); } =20 aspeed_smc_flash_unselect(fl); diff --git a/hw/ssi/bcm2835_spi.c b/hw/ssi/bcm2835_spi.c index 01763c458c..7a0a8fa392 100644 --- a/hw/ssi/bcm2835_spi.c +++ b/hw/ssi/bcm2835_spi.c @@ -91,7 +91,7 @@ static void bcm2835_spi_flush_tx_fifo(BCM2835SPIState *s) =20 while (!fifo8_is_empty(&s->tx_fifo) && !fifo8_is_full(&s->rx_fifo)) { tx_byte =3D fifo8_pop(&s->tx_fifo); - rx_byte =3D ssi_transfer(s->bus, tx_byte); + rx_byte =3D ssi_transfer8(s->bus, tx_byte); fifo8_push(&s->rx_fifo, rx_byte); } =20 diff --git a/hw/ssi/ibex_spi_host.c b/hw/ssi/ibex_spi_host.c index 1e574c3fcb..b5e556eedc 100644 --- a/hw/ssi/ibex_spi_host.c +++ b/hw/ssi/ibex_spi_host.c @@ -236,7 +236,8 @@ static void ibex_spi_host_irq(IbexSPIHostState *s) =20 static void ibex_spi_host_transfer(IbexSPIHostState *s) { - uint32_t rx, tx, data; + uint32_t data; + uint8_t rx, tx; /* Get num of one byte transfers */ uint8_t segment_len =3D FIELD_EX32(s->regs[IBEX_SPI_HOST_COMMAND], COMMAND, LEN); @@ -254,7 +255,7 @@ static void ibex_spi_host_transfer(IbexSPIHostState *s) tx =3D fifo8_pop(&s->tx_fifo); } =20 - rx =3D ssi_transfer(s->ssi, tx); + rx =3D ssi_transfer8(s->ssi, tx); =20 trace_ibex_spi_host_transfer(tx, rx); =20 diff --git a/hw/ssi/imx_spi.c b/hw/ssi/imx_spi.c index 8e014b7a7b..b25cf6c559 100644 --- a/hw/ssi/imx_spi.c +++ b/hw/ssi/imx_spi.c @@ -194,7 +194,7 @@ static void imx_spi_flush_txfifo(IMXSPIState *s) DPRINTF("writing 0x%02x\n", (uint32_t)byte); =20 /* We need to write one byte at a time */ - byte =3D ssi_transfer(s->bus, byte); + byte =3D ssi_transfer8(s->bus, byte); =20 DPRINTF("0x%02x read\n", (uint32_t)byte); =20 diff --git a/hw/ssi/mss-spi.c b/hw/ssi/mss-spi.c index 3c118fc0f8..8a7af68a8a 100644 --- a/hw/ssi/mss-spi.c +++ b/hw/ssi/mss-spi.c @@ -234,7 +234,7 @@ static void spi_flush_txfifo(MSSSpiState *s) =20 tx =3D fifo32_pop(&s->tx_fifo); DB_PRINT("data tx:0x%" PRIx32, tx); - rx =3D ssi_transfer(s->spi, tx); + rx =3D ssi_transfer8(s->spi, tx); DB_PRINT("data rx:0x%" PRIx32, rx); =20 if (fifo32_num_used(&s->rx_fifo) =3D=3D s->fifo_depth) { diff --git a/hw/ssi/npcm7xx_fiu.c b/hw/ssi/npcm7xx_fiu.c index d41d877cfb..b0be46aa18 100644 --- a/hw/ssi/npcm7xx_fiu.c +++ b/hw/ssi/npcm7xx_fiu.c @@ -162,16 +162,16 @@ static uint64_t npcm7xx_fiu_flash_read(void *opaque, = hwaddr addr, npcm7xx_fiu_select(fiu, npcm7xx_fiu_cs_index(fiu, f)); =20 drd_cfg =3D fiu->regs[NPCM7XX_FIU_DRD_CFG]; - ssi_transfer(fiu->spi, FIU_DRD_CFG_RDCMD(drd_cfg)); + ssi_transfer8(fiu->spi, FIU_DRD_CFG_RDCMD(drd_cfg)); =20 switch (FIU_DRD_CFG_ADDSIZ(drd_cfg)) { case FIU_ADDSIZ_4BYTES: - ssi_transfer(fiu->spi, extract32(addr, 24, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 24, 8)); /* fall through */ case FIU_ADDSIZ_3BYTES: - ssi_transfer(fiu->spi, extract32(addr, 16, 8)); - ssi_transfer(fiu->spi, extract32(addr, 8, 8)); - ssi_transfer(fiu->spi, extract32(addr, 0, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 16, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 8, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 0, 8)); break; =20 default: @@ -182,11 +182,11 @@ static uint64_t npcm7xx_fiu_flash_read(void *opaque, = hwaddr addr, =20 dummy_bytes =3D FIU_DRD_CFG_DBW(drd_cfg); for (i =3D 0; i < dummy_bytes; i++) { - ssi_transfer(fiu->spi, 0); + ssi_transfer8(fiu->spi, 0); } =20 for (i =3D 0; i < size; i++) { - value =3D deposit64(value, 8 * i, 8, ssi_transfer(fiu->spi, 0)); + value =3D deposit64(value, 8 * i, 8, ssi_transfer8(fiu->spi, 0)); } =20 trace_npcm7xx_fiu_flash_read(DEVICE(fiu)->canonical_path, fiu->active_= cs, @@ -219,16 +219,16 @@ static void npcm7xx_fiu_flash_write(void *opaque, hwa= ddr addr, uint64_t v, npcm7xx_fiu_select(fiu, cs_id); =20 dwr_cfg =3D fiu->regs[NPCM7XX_FIU_DWR_CFG]; - ssi_transfer(fiu->spi, FIU_DWR_CFG_WRCMD(dwr_cfg)); + ssi_transfer8(fiu->spi, FIU_DWR_CFG_WRCMD(dwr_cfg)); =20 switch (FIU_DWR_CFG_ADDSIZ(dwr_cfg)) { case FIU_ADDSIZ_4BYTES: - ssi_transfer(fiu->spi, extract32(addr, 24, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 24, 8)); /* fall through */ case FIU_ADDSIZ_3BYTES: - ssi_transfer(fiu->spi, extract32(addr, 16, 8)); - ssi_transfer(fiu->spi, extract32(addr, 8, 8)); - ssi_transfer(fiu->spi, extract32(addr, 0, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 16, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 8, 8)); + ssi_transfer8(fiu->spi, extract32(addr, 0, 8)); break; =20 default: @@ -238,7 +238,7 @@ static void npcm7xx_fiu_flash_write(void *opaque, hwadd= r addr, uint64_t v, } =20 for (i =3D 0; i < size; i++) { - ssi_transfer(fiu->spi, extract64(v, i * 8, 8)); + ssi_transfer8(fiu->spi, extract64(v, i * 8, 8)); } =20 npcm7xx_fiu_deselect(fiu); @@ -287,16 +287,16 @@ static void send_address(SSIBus *spi, unsigned int ad= dsiz, uint32_t addr) { switch (addsiz) { case 4: - ssi_transfer(spi, extract32(addr, 24, 8)); + ssi_transfer8(spi, extract32(addr, 24, 8)); /* fall through */ case 3: - ssi_transfer(spi, extract32(addr, 16, 8)); + ssi_transfer8(spi, extract32(addr, 16, 8)); /* fall through */ case 2: - ssi_transfer(spi, extract32(addr, 8, 8)); + ssi_transfer8(spi, extract32(addr, 8, 8)); /* fall through */ case 1: - ssi_transfer(spi, extract32(addr, 0, 8)); + ssi_transfer8(spi, extract32(addr, 0, 8)); /* fall through */ case 0: break; @@ -309,7 +309,7 @@ static void send_dummy_bytes(SSIBus *spi, uint32_t uma_= cfg) unsigned int i; =20 for (i =3D 0; i < FIU_UMA_CFG_DBSIZ(uma_cfg); i++) { - ssi_transfer(spi, 0); + ssi_transfer8(spi, 0); } } =20 @@ -329,7 +329,7 @@ static void npcm7xx_fiu_uma_transaction(NPCM7xxFIUState= *s) /* Send command, if present. */ uma_cfg =3D s->regs[NPCM7XX_FIU_UMA_CFG]; if (FIU_UMA_CFG_CMDSIZ(uma_cfg) > 0) { - ssi_transfer(s->spi, extract32(s->regs[NPCM7XX_FIU_UMA_CMD], 0, 8)= ); + ssi_transfer8(s->spi, extract32(s->regs[NPCM7XX_FIU_UMA_CMD], 0, 8= )); } =20 /* Send address, if present. */ @@ -342,7 +342,7 @@ static void npcm7xx_fiu_uma_transaction(NPCM7xxFIUState= *s) (i < 16) ? (NPCM7XX_FIU_UMA_DW0 + i / 4) : NPCM7XX_FIU_UMA_DW3; unsigned int field =3D (i % 4) * 8; =20 - ssi_transfer(s->spi, extract32(s->regs[reg], field, 8)); + ssi_transfer8(s->spi, extract32(s->regs[reg], field, 8)); } =20 /* Send dummy bytes, if present */ @@ -354,7 +354,7 @@ static void npcm7xx_fiu_uma_transaction(NPCM7xxFIUState= *s) unsigned int field =3D (i % 4) * 8; uint8_t c; =20 - c =3D ssi_transfer(s->spi, 0); + c =3D ssi_transfer8(s->spi, 0); if (reg <=3D NPCM7XX_FIU_UMA_DR3) { s->regs[reg] =3D deposit32(s->regs[reg], field, 8, c); } diff --git a/hw/ssi/npcm_pspi.c b/hw/ssi/npcm_pspi.c index 2e05d5dacb..38ae6e0972 100644 --- a/hw/ssi/npcm_pspi.c +++ b/hw/ssi/npcm_pspi.c @@ -77,9 +77,9 @@ static void npcm_pspi_write_data(NPCMPSPIState *s, uint16= _t data) uint16_t value =3D 0; =20 if (FIELD_EX16(s->regs[R_PSPI_CTL1], PSPI_CTL1, MOD)) { - value =3D ssi_transfer(s->spi, extract16(data, 8, 8)) << 8; + value =3D ssi_transfer8(s->spi, extract16(data, 8, 8)) << 8; } - value |=3D ssi_transfer(s->spi, extract16(data, 0, 8)); + value |=3D ssi_transfer8(s->spi, extract16(data, 0, 8)); s->regs[R_PSPI_DATA] =3D value; =20 /* Mark data as available */ diff --git a/hw/ssi/pl022.c b/hw/ssi/pl022.c index 715a2d21f4..eaac664ec5 100644 --- a/hw/ssi/pl022.c +++ b/hw/ssi/pl022.c @@ -103,7 +103,7 @@ static void pl022_xfer(PL022State *s) if (s->cr1 & PL022_CR1_LBM) { /* Loopback mode. */ } else { - val =3D ssi_transfer(s->ssi, val); + val =3D ssi_transfer8(s->ssi, val); } s->rx_fifo[o] =3D val & s->bitmask; i =3D (i + 1) & 7; diff --git a/hw/ssi/pnv_spi.c b/hw/ssi/pnv_spi.c index f3add8cab9..e2a8a710da 100644 --- a/hw/ssi/pnv_spi.c +++ b/hw/ssi/pnv_spi.c @@ -209,7 +209,7 @@ static void transfer(PnvSpi *s) qemu_log_mask(LOG_GUEST_ERROR, "pnv_spi: TX_FIFO underflow= \n"); } } - rx =3D ssi_transfer(s->ssi_bus, tx); + rx =3D ssi_transfer8(s->ssi_bus, tx); for (int i =3D 0; i < s->transfer_len; i++) { if ((offset + i) >=3D payload_len) { break; diff --git a/hw/ssi/sifive_spi.c b/hw/ssi/sifive_spi.c index 2ece78053b..1a2aac2daa 100644 --- a/hw/ssi/sifive_spi.c +++ b/hw/ssi/sifive_spi.c @@ -134,7 +134,7 @@ static void sifive_spi_flush_txfifo(SiFiveSPIState *s) =20 while (!fifo8_is_empty(&s->tx_fifo)) { tx =3D fifo8_pop(&s->tx_fifo); - rx =3D ssi_transfer(s->spi, tx); + rx =3D ssi_transfer8(s->spi, tx); =20 if (!fifo8_is_full(&s->rx_fifo)) { if (!(s->regs[R_FMT] & FMT_DIR)) { diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c index 3a4fade2d5..ce2325bbd4 100644 --- a/hw/ssi/ssi.c +++ b/hw/ssi/ssi.c @@ -153,11 +153,11 @@ SSIBus *ssi_create_bus(DeviceState *parent, const cha= r *name) return SSI_BUS(bus); } =20 -uint32_t ssi_transfer(SSIBus *bus, uint32_t val) +uint8_t ssi_transfer8(SSIBus *bus, uint8_t val) { BusState *b =3D BUS(bus); BusChild *kid; - uint32_t r =3D 0; + uint8_t r =3D 0; =20 QTAILQ_FOREACH(kid, &b->children, sibling) { SSIPeripheral *p =3D SSI_PERIPHERAL(kid->child); diff --git a/hw/ssi/stm32f2xx_spi.c b/hw/ssi/stm32f2xx_spi.c index 871d57324d..eca0b93f3f 100644 --- a/hw/ssi/stm32f2xx_spi.c +++ b/hw/ssi/stm32f2xx_spi.c @@ -59,7 +59,7 @@ static void stm32f2xx_spi_transfer(STM32F2XXSPIState *s) { DB_PRINT("Data to send: 0x%x\n", s->spi_dr); =20 - s->spi_dr =3D ssi_transfer(s->ssi, s->spi_dr); + s->spi_dr =3D ssi_transfer8(s->ssi, s->spi_dr); s->spi_sr |=3D STM_SPI_SR_RXNE; =20 DB_PRINT("Data received: 0x%x\n", s->spi_dr); diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c index 79f3e8bfae..45e9459396 100644 --- a/hw/ssi/xilinx_spi.c +++ b/hw/ssi/xilinx_spi.c @@ -176,18 +176,18 @@ static inline int spi_master_enabled(XilinxSPI *s) =20 static void spi_flush_txfifo(XilinxSPI *s) { - uint32_t tx; - uint32_t rx; + uint8_t tx; + uint8_t rx; =20 while (!fifo8_is_empty(&s->tx_fifo)) { - tx =3D (uint32_t)fifo8_pop(&s->tx_fifo); + tx =3D fifo8_pop(&s->tx_fifo); DB_PRINT("data tx:%x\n", tx); - rx =3D ssi_transfer(s->spi, tx); + rx =3D ssi_transfer8(s->spi, tx); DB_PRINT("data rx:%x\n", rx); if (fifo8_is_full(&s->rx_fifo)) { s->regs[R_IPISR] |=3D IRQ_DRR_OVERRUN; } else { - fifo8_push(&s->rx_fifo, (uint8_t)rx); + fifo8_push(&s->rx_fifo, rx); if (fifo8_is_full(&s->rx_fifo)) { s->regs[R_SPISR] |=3D SR_RX_FULL; s->regs[R_IPISR] |=3D IRQ_DRR_FULL; diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c index e4fce2c195..b915000770 100644 --- a/hw/ssi/xilinx_spips.c +++ b/hw/ssi/xilinx_spips.c @@ -576,7 +576,7 @@ static void xlnx_zynqmp_qspips_flush_fifo_g(XlnxZynqMPQ= SPIPS *s) busses =3D ARRAY_FIELD_EX32(s->regs, GQSPI_GF_SNAPSHOT, DATA_BUS_S= ELECT); for (i =3D 0; i < 2; ++i) { DB_PRINT_L(1, "bus %d tx =3D %02x\n", i, tx_rx[i]); - tx_rx[i] =3D ssi_transfer(XILINX_SPIPS(s)->spi[i], tx_rx[i]); + tx_rx[i] =3D ssi_transfer8(XILINX_SPIPS(s)->spi[i], tx_rx[i]); DB_PRINT_L(1, "bus %d rx =3D %02x\n", i, tx_rx[i]); } if (s->regs[R_GQSPI_DATA_STS] > 1 && @@ -696,7 +696,7 @@ static void xilinx_spips_flush_txfifo(XilinxSPIPS *s) int bus =3D num_effective_busses(s) - 1 - i; =20 DB_PRINT_L(debug_level, "tx =3D %02x\n", tx_rx[i]); - tx_rx[i] =3D ssi_transfer(s->spi[bus], (uint32_t)tx_rx[i]); + tx_rx[i] =3D ssi_transfer8(s->spi[bus], tx_rx[i]); DB_PRINT_L(debug_level, "rx =3D %02x\n", tx_rx[i]); } =20 diff --git a/hw/ssi/xlnx-versal-ospi.c b/hw/ssi/xlnx-versal-ospi.c index e25e4c26c2..8f2cb71414 100644 --- a/hw/ssi/xlnx-versal-ospi.c +++ b/hw/ssi/xlnx-versal-ospi.c @@ -631,9 +631,9 @@ static void ospi_disable_cs(XlnxVersalOspi *s) static void ospi_flush_txfifo(XlnxVersalOspi *s) { while (!fifo8_is_empty(&s->tx_fifo)) { - uint32_t tx_rx =3D fifo8_pop(&s->tx_fifo); + uint8_t tx_rx =3D fifo8_pop(&s->tx_fifo); =20 - tx_rx =3D ssi_transfer(s->spi, tx_rx); + tx_rx =3D ssi_transfer8(s->spi, tx_rx); fifo8_push(&s->rx_fifo, tx_rx); } } diff --git a/include/hw/ssi/ssi.h b/include/hw/ssi/ssi.h index 6d6d8ccb3d..e8be6c2023 100644 --- a/include/hw/ssi/ssi.h +++ b/include/hw/ssi/ssi.h @@ -38,7 +38,7 @@ struct SSIPeripheralClass { =20 /* if you have standard or no CS behaviour, just override transfer. * This is called when the device cs is active (true by default). - * See ssi_transfer(). + * See ssi_transfer8(). */ uint32_t (*transfer)(SSIPeripheral *dev, uint32_t val); /* called when the CS line changes. Optional, devices only need to imp= lement @@ -53,7 +53,7 @@ struct SSIPeripheralClass { * of the CS behaviour at the device level. transfer, set_cs, and * cs_polarity are unused if this is overwritten. Transfer_raw will * always be called for the device for every txrx access to the parent= bus - * See ssi_transfer(). + * See ssi_transfer8(). */ uint32_t (*transfer_raw)(SSIPeripheral *dev, uint32_t val); }; @@ -113,18 +113,17 @@ bool ssi_realize_and_unref(DeviceState *dev, SSIBus *= bus, Error **errp); SSIBus *ssi_create_bus(DeviceState *parent, const char *name); =20 /** - * Transfer a word on a SSI bus + * Transfer a byte on a SSI bus * @bus: SSI bus - * @val: word to transmit + * @val: byte to transmit * - * At the same time, read a word and write the @val one on the SSI bus. + * At the same time, read a byte and write the @val one on the SSI bus. * - * SSI words might vary between 8 and 32 bits. The same number of bits - * written is received. + * SSI always transfers and receives 8-bits. * - * Return: word value received + * Return: byte received */ -uint32_t ssi_transfer(SSIBus *bus, uint32_t val); +uint8_t ssi_transfer8(SSIBus *bus, uint8_t val); =20 DeviceState *ssi_get_cs(SSIBus *bus, uint8_t cs_index); =20 --=20 2.43.0 From nobody Mon Sep 28 00:51:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787630745; cv=none; d=zohomail.com; s=zohoarc; b=Ry2V/7rcQ5vu45yu/04ctpwgSACD2LftBDMNytdLTXcDsd45tjRhn6xQIlXH+A/cCLUGYt2MUFPvqtnB0NNRKg9qloKoc5bTGhMLW3fAahCkBWF0+s8DeJTcQWylZCjptIivah10zkk4BrUzHnrVNJWzKIvI8fEl6wKm7X0Wtz4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787630745; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=r9YZtJePZ3XT7IoRh5uSQAmm2CNF2ALweHO4SvoI3s4=; b=OmKB1MNkxud0Yf6tomWASyoLFJAAormndTI8DKAhpV1owhMj3j/ZkUMNWLI7VNyY0kyzdo1v68DEPMvUq8P7VqJwvLMkgOfSyGDzm7K7hbzQg350/tAE24enMW2c6NyhqJor5SRxpXQSyCevqR9ZS+WViuWz1jlUw0A3pBZmGnM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787630745710813.3896466404759; Mon, 24 Aug 2026 21:05:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyiPh-0006Iq-OD; Tue, 25 Aug 2026 00:05:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyiPf-0006HY-FX for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:27 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyiPc-0007dO-OG for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:27 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2cab973140bso54702695ad.3 for ; Mon, 24 Aug 2026 21:05:24 -0700 (PDT) Received: from lima-default.tail89d63.ts.net ([159.196.41.205]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327f909adc8sm34104212eec.2.2026.08.24.21.05.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2026 21:05:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787630723; x=1788235523; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=r9YZtJePZ3XT7IoRh5uSQAmm2CNF2ALweHO4SvoI3s4=; b=FIPwN1mCqMpPRzI7qAiRnstt843eeHXP4thBPy6SIU/pk5cmGaWzNiv6fnkJYReM32 uvEHYaWoN3MCrmX32m7S+CTF4eZ95n1vHTqmfAaw2Rtpd4PLjI63MrR/6BadJmxKOh19 2iEJlLiQ2RWUTpsw7r4Xzf92T/Uxxi0UPADXNxP+8jVrMWOWM1r8jEcBvzGWvQDpqTgo WCHY4VkxiVp+UBZlJqo4jktXvCBbGmRQ8fDy6my3uzkW4Jneyj3v5W/Q0Jw4N/GObF9n DVJYd04jHh6tzVcWMWxKObkVD1pBPS/fCqwtgMq/Kl9TCCWeqIFOmDqx8EyX4vrM9yt9 3t1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787630723; x=1788235523; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=r9YZtJePZ3XT7IoRh5uSQAmm2CNF2ALweHO4SvoI3s4=; b=Q9PyTxLVGj2uLIEP25Wme9idCD5bpqdhK/lqHNcpyFjN2INbw6BpE5TcV57fy2yaus /xq/x4p46lOnNWerUMsmYdcHJYb8zsTRsUEYyVea4VqFjCvv9G4/ehAe/Y6bdTRq+hAL ZxOgKUv96pLS5QBqFcfsRVaiFctpKNOHmI4JNLl9Ay9Oe4Nr5Bd1eAJfQjAf8lEmJ3/H uX1fXRFBzprWYr2xOF1pNmY1lSJTVuJjMMJpBH5HiKgxLOsOVy48Upw/Grdlf/i/05aO zM8MALnAicdWMyC1R3n4K/3oe65I94fooJtDp1oy9QpW4HQdrMW9xb/5yNEba7VctfYN q84A== X-Gm-Message-State: AFuF++mCRUHr/ZZR7LGe9ZQsxsarEbN+4tqNJpIRc6Up4pqS0FM9A3GZ SK0ddl2wqNTyisYTmjfwkCSd6dZxYckg9JCekQsLCOCDs3DGUlogKhsO1/OREF1B X-Gm-Gg: AR+sD13BMFwBCpIGea4Gu+jQDfxyHApk0gDMfMczsqry6hBekgp/J1rrehaiZwJ7t45 jYnpP1qj7iYeM3EJ3b/UJwOyOJjlskwZnrISl4Wm0m5VMJ4XYAHnUvPQ90HF8U7r54Kd5wPI7P4 zDMdlvqdzg9J97M61SD1ZB6Z23a9hPiJm5PF9yXpa8pmf172VbtFm4PfhNC8MSAn6sKOmwjGZ7b 3OXpS58Vd7oDpfVgIT4CsbGO0junW/boYTob2uNxr0V7qZvCD6uwvNNiTHxP1wWSaE441yGVhtZ F0Fxoh+56hSiSlMsBKYXAgS5Dgcf0+7VoDK/g6nv8X+YiGtVNmdcDDROTeDJp95e8LkNegRvYf6 PqfOKJ75tG/JGJnCHCxt8CSrFrM6MCw32APTV7bugHdbtq0lWVWp6t2HmV/eV1XkzsC1OHal32R /VKdLj/LDNTtX3N5siHona9TY88HqdxKGUQA/i3CtOAMtqVVqtMK4xk4mGN/1MgWl8jf7b57oxS Ie9mSQylrY82bHJ+Ryj2wt3rfM+dXmbcQ== X-Received: by 2002:a17:903:3888:b0:2d0:cc92:f7c2 with SMTP id d9443c01a7336-2d670b4cdc9mr431321115ad.1.1787630723312; Mon, 24 Aug 2026 21:05:23 -0700 (PDT) From: stephensportia@gmail.com To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Peter Maydell , Jamin Lin , qemu-ppc@nongnu.org, =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Steven Lee , Andrew Jeffery , Harsh Prateek Bora , Subbaraya Sundeep , Troy Lee , "Edgar E. Iglesias" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alistair Francis , Strahinja Jankovic , qemu-arm@nongnu.org, Tyrone Ting , Nicholas Piggin , Aditya Gupta , Kane Chen , Francisco Iglesias , Joel Stanley , Hao Wu , Glenn Miles , qemu-riscv@nongnu.org, Jean-Christophe Dubois , Portia Stephens Subject: [PATCH 2/4] hw/ssi/pl022: Fix dropped upper bytes of ssi transfer Date: Tue, 25 Aug 2026 14:04:50 +1000 Message-ID: <20260825040452.1322251-3-stephensportia@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825040452.1322251-1-stephensportia@gmail.com> References: <20260825040452.1322251-1-stephensportia@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=stephensportia@gmail.com; helo=mail-pl1-x633.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1787630747453158501 Content-Type: text/plain; charset="utf-8" From: Portia Stephens The pl022 model suports transferring a 8-bit or 16-bit frame width. The 16-bit transfer is broken since the upper 8-bits are being dropped by the SSI peripheral transfer function. Fix this by adding a second call to ssi_transfer8() when the frame wdith is 16-bits. Signed-off-by: Portia Stephens Reviewed-by: Alistair Francis --- hw/ssi/pl022.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/hw/ssi/pl022.c b/hw/ssi/pl022.c index eaac664ec5..f4ade45ca9 100644 --- a/hw/ssi/pl022.c +++ b/hw/ssi/pl022.c @@ -74,7 +74,6 @@ static void pl022_xfer(PL022State *s) { int i; int o; - int val; =20 if ((s->cr1 & PL022_CR1_SSE) =3D=3D 0) { pl022_update(s); @@ -99,13 +98,18 @@ static void pl022_xfer(PL022State *s) the transfer has completed. */ while (s->tx_fifo_len && s->rx_fifo_len < 8) { DPRINTF("xfer\n"); - val =3D s->tx_fifo[i]; + uint16_t tx =3D s->tx_fifo[i]; + uint16_t rx =3D 0; if (s->cr1 & PL022_CR1_LBM) { /* Loopback mode. */ + rx =3D tx; } else { - val =3D ssi_transfer8(s->ssi, val); + if (s->bitmask > 0xff) { + rx |=3D (ssi_transfer8(s->ssi, (tx >> 8) & 0xff) << 8); + } + rx |=3D ssi_transfer8(s->ssi, tx & 0xff); } - s->rx_fifo[o] =3D val & s->bitmask; + s->rx_fifo[o] =3D rx & s->bitmask; i =3D (i + 1) & 7; o =3D (o + 1) & 7; s->tx_fifo_len--; --=20 2.43.0 From nobody Mon Sep 28 00:51:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787630752; cv=none; d=zohomail.com; s=zohoarc; b=WsJLVVYKDjwaYCP4ErkQfXt+QFKowAn7cQ2qDen0Hz+BcUM+iHoCbjYcXO8/17jSNCkFvjD78MT3ODx3LIm5Tj7ZdarlhNQanOEMEpVUVHcwOKt6c7yQr1r4+jg5+H4iusQVfqycI79z0OLK2/BHAjuxp9jRiA/KIJKbfyNiRsk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787630752; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aobazBPH903Nn7eCzJVoO7AB8KnEtMzG35AgTewbhFg=; b=UKafC+Fxvuipzj00rhuTrlrhPbuqf1qmohnjP1aDFutf9+DL4ZL2yp9y0ffHNyhA+pDknXF+UtXkUMjBwsfpSPjpveNMz5TH50qx9gkAWYiEqaG8TzMWr6wJV1h6X+GzzlEGd3Az0CbERfhMRBvanVxgijSZpmSbHVuIWYjXE+o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787630752090580.039012581224; Mon, 24 Aug 2026 21:05:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyiPq-0006PF-Ub; Tue, 25 Aug 2026 00:05:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyiPo-0006LX-Qo for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:36 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyiPm-0007eB-4A for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:36 -0400 Received: by mail-pg1-x533.google.com with SMTP id 41be03b00d2f7-ca97d139d5fso3752011a12.0 for ; Mon, 24 Aug 2026 21:05:33 -0700 (PDT) Received: from lima-default.tail89d63.ts.net ([159.196.41.205]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327f909adc8sm34104212eec.2.2026.08.24.21.05.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2026 21:05:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787630732; x=1788235532; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=aobazBPH903Nn7eCzJVoO7AB8KnEtMzG35AgTewbhFg=; b=ia6OqR71sQgA+I/bhwIw9YHtXoEnl3gRBexfM9eGs9hV1cpjWeXb16RqR0D0+2aKcj w/QDz4gWwkrCMZ2QMxzTn2H1zzaicbvX6Nt+AmLWOWifniLoOOz5q2jASR0Mf82dabOb yWWFpyY2SQTQh1/997YZ4ahyLIUatb2JL+ZpdAgtl6NlNCC7rgEdD9QTuZ8zEPXNCXqB K9faUkHZTx1um35JFt2FnY1BxUpAz+drks9EsTrGeyL71/XCksAzMiL/+jzjo0oSsetc GdElLO2eiZJSty+zf8cHPgcq89B7hUrFW8suV95SI0/ZI244Zwielf0cr7KtBJDTKpZO pO4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787630732; x=1788235532; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=aobazBPH903Nn7eCzJVoO7AB8KnEtMzG35AgTewbhFg=; b=R8GLk1926HN8KGBjBaoB03jQUEwlbLhPhoWcWeiuWqTGz//5Wif+olpEiMeNJ3eb6z mQczk+v9VkEbLbt1msutB2zLgpmwhBraSdhWjy4kbKvo2MvgSKEIfcq/44ASIiO3Rxkx LFat7W7bj3vR3B45xawhQEps+WSnXBlXtWZIgAGvX1BwGjK+3BGKh4Zw0ZCUfjhrm/Il SpbFnYMR7GRBSC5zH6cuIapIflLRbUBWVTuPASc1Rv/K1k2gRp8nh+d6vvv5SYZqEgbi KT8pOM4Iwl+sZf/hIvnmmaFsf6PNAJHHtWvDilZ9SPU/LVtZHRCtg8DKDak2uT5PXszA AcLw== X-Gm-Message-State: AFuF++nPhiduznSBo41919Qt7kwNz3+pgOhHlu1jRVDsnq77PzivI43N rfP3LK0fRA8TyAyZJ6Fd+TQO9ZPjJbBtPrSMuWU3vq4dHaJJOjb590es7FMyZtub X-Gm-Gg: AR+sD13PUnsjw8fGVTI14iAfKS8Q8TGktErX2neenf8jrMKClQ1z/xPfrfbDGVxeNHB rcuewblIml7zpvTuvIprzTIMTz5RQG429g4sqsZkLcWARMm5++WQNFmWn3Lj8wr+KPa2vrBY6cP lYAalGYKmxIHWqcYEux+zjzPqbSP4RfE10kBZmMs2mPHtX6//11EW67OmnoYJOhRxxblwZPLZb6 XQL5XpIB3bDGlSy1juPEjzKBqfF5nGFE2HGNDVob20HGq4aTT73QJkoEJ00kYiMILZyWd8+aAsv /Ro7E/XUCMu0LjU+YYVkBG6pp2Fr6iIxqnDbXOYo7Q1KP4TboA8wBoPH3e/HYaUzIpOQPCvMKDQ bV/HXpXgPWyp66AXQxLm/gEGF2cYsOhoh1WFnQPKLbWr2WwhSa63IzhzGLT0TMmlgWuRC2z55xA Gb308vZ63/9Gz5L8gsZZhuzHShHPWKqM+oNsADRRKNK66lezK6Zv55qoCpohweV1MOguHZ0gdNU qcbEQcqJXvm9UrhaEbG67zEuBZV7p6DfA== X-Received: by 2002:a05:6a20:a110:b0:3c3:bbe6:95c9 with SMTP id adf61e73a8af0-3cd301795c8mr57364255637.16.1787630732578; Mon, 24 Aug 2026 21:05:32 -0700 (PDT) From: stephensportia@gmail.com To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Peter Maydell , Jamin Lin , qemu-ppc@nongnu.org, =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Steven Lee , Andrew Jeffery , Harsh Prateek Bora , Subbaraya Sundeep , Troy Lee , "Edgar E. Iglesias" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alistair Francis , Strahinja Jankovic , qemu-arm@nongnu.org, Tyrone Ting , Nicholas Piggin , Aditya Gupta , Kane Chen , Francisco Iglesias , Joel Stanley , Hao Wu , Glenn Miles , qemu-riscv@nongnu.org, Jean-Christophe Dubois , Portia Stephens Subject: [PATCH 3/4] hw/arm/strongarm: Fix dropped upper byte of ssi transfer Date: Tue, 25 Aug 2026 14:04:51 +1000 Message-ID: <20260825040452.1322251-4-stephensportia@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825040452.1322251-1-stephensportia@gmail.com> References: <20260825040452.1322251-1-stephensportia@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=stephensportia@gmail.com; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1787630753215158500 Content-Type: text/plain; charset="utf-8" From: Portia Stephens The strongarm model intends to transfer a 16-bit value over SSI. There is no machine using this model with a peripheral attached so it is impossible to know what the intended SSI peripheral is. There is no in-tree peripheral support for 16-bit transfer, update to use 8-bit transfer. Signed-off-by: Portia Stephens Reviewed-by: Alistair Francis --- hw/arm/strongarm.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index e400f0a185..2df895c75b 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -1512,11 +1512,14 @@ static void strongarm_ssp_write(void *opaque, hwadd= r addr, * there directly to the slave, no need to buffer it. */ if (s->sscr[0] & SSCR0_SSE) { - uint32_t readval; + uint32_t readval =3D 0; if (s->sscr[1] & SSCR1_LBM) { readval =3D value; } else { - readval =3D ssi_transfer8(s->bus, value); + if (SSCR0_DSS(s->sscr[0]) > 8) { + readval |=3D ssi_transfer8(s->bus, (value >> 8) & 0xff= ) << 8; + } + readval |=3D ssi_transfer8(s->bus, value & 0xff); } =20 if (s->rx_level < 0x08) { --=20 2.43.0 From nobody Mon Sep 28 00:51:54 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787630763; cv=none; d=zohomail.com; s=zohoarc; b=EWhjykLBz5DuPaHyiIMn8/+6LtoF9E9DF+UBO5O91H0pPrNsjKlrBXH366ZVJ/FMF0XWIgjgWN2U4MEDKz356dunaZu+x4fYEeagz/9Cvuy6xgmAXaWNH4ujhqfqCXs8PwWi0ZYTCKxoTdP8uPSkGNrKrKz6PKBq/J8J7kqSqsE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787630763; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xDc3uriN8ejBNB8eMT6Kj0ZXRhTp2iKJ4iNyMAkgAig=; b=I13e/uKWghKvk1mWulEwaS4PUK8AzFCyUD2BFJfZWthC6S74y9fs91XWM8sel+jYx1ZiHQtB7lGRYabF6rHsU4gVszOv8m+KIvntJDr9Z4A1GBcv1f9Vb5dryNSMGIDTkxzvaSaY0eaectC0YU4ZOlBJnz6osZteK/OhKR/XlnA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787630763783952.357735127063; Mon, 24 Aug 2026 21:06:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyiQ0-0006fU-PR; Tue, 25 Aug 2026 00:05:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyiPy-0006cO-8H for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:46 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyiPv-0007fj-Dp for qemu-devel@nongnu.org; Tue, 25 Aug 2026 00:05:45 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso5371003a91.2 for ; Mon, 24 Aug 2026 21:05:43 -0700 (PDT) Received: from lima-default.tail89d63.ts.net ([159.196.41.205]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327f909adc8sm34104212eec.2.2026.08.24.21.05.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2026 21:05:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787630742; x=1788235542; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xDc3uriN8ejBNB8eMT6Kj0ZXRhTp2iKJ4iNyMAkgAig=; b=NEd/3xak4MxMHhNM/0tcSVhHdwEFdxQXx8qNLiJrAtH0rj/5ZzfHanSC5TwUt39pgb iCOFgp1qvDVEy0TRulGUkQA0jvFF++CPxgTpqnm12OPB4dEPDTvXVyvVg6aDlqGldiyJ Blghtv5p1jgITBGFjWOQbiJJvCSMNZp4kGQBDW9y+yJzKuv+5aUWDg6frOT2URdlPexJ 6zIRPKLziUwPpHjkcudLXjk/wTndHMzQo1+u8i4mTsJK7xWQfows/3Ki615uMc4hlxt4 54YbDleq7rrkYQj6lgmR3Qi8R4CQhqQyVLjGkHZi7Idn4VPnFzg+QgNL3tMUIOxUeDbj bXvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787630742; x=1788235542; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=xDc3uriN8ejBNB8eMT6Kj0ZXRhTp2iKJ4iNyMAkgAig=; b=QsQoJ0qKqpXDLQDQjliM9ucFaDEiJ8lSmksSbJVuq/S5c3fPZBxHPJdVBDTF5uqZIa IN72LMWGV9bIRNFbPrA4MclgJ0545mGdph8ASE5tH2B5EHRSz618axxcHYUpBYKmzqwX zP9joOcp2xrtFFmjCDmz+gC83dnUHOCenfG9vD7MBLkzmgJbH+2tLMIJgb/IG0xzkBay Zmvru7kGG/tMVx1bG4HmIH0Hm5xyQ5JcCahsOGqaDxVWjgaiwQbr8J/ZM3bN+qOF+Y1c CPfqU0SCULYT3JwAXe8AfCGpKb2h5ha8cFyt09L3LfnZe4mY/bXn9dFGzdMFFw7gbdvK jwpg== X-Gm-Message-State: AFuF++koA7oy2eA7GP3zG4VeGFESGu3yQ7sSLgSMscGavu2xAKmMVwht a8VWBanQhrUF08nBzB4h9jsFzQKPWod/8nitYwr1WDVqkTI211l5JBpKaLk6o2rx X-Gm-Gg: AR+sD13gW8AFsFslsgwGYw17rkQqEdMfQleE11Je3TKIvp54p5kx0BSZLoJEEkUz54i 6YabTPaGkWbFJitwhuRqsmm4LnkoNplKoYCMr10NeH89zneoBhVRLNYQu9Oys/1jW1jPnlpRf1i C/p+/S47YJBCMtGTparrPtuiHu9S6JiuxXrWWBCzTP/5OOFy9eWLoOHpMxUGc40bw4yvY8h1xio cHGL3/2fpiZviq0umPG2mEynB1FDiZchhexDwSGxhDQJEUATdVXJwu1UFyYB+/+iQrWSNCcLQ56 ecqkqOuKo/DWHM6D6yonNyJjiW25PJ8lfUEr25x1AB1FCmuwlPZUbDdI0HL8oB/ofn+QpyEpT46 lRD/e0zjR/xEZM9uF3/I4NhAPT9A7VvR7rBfamNNq+zehgZ2cLVsVbSKYO9z9N+9UE6vDnBm8Yd bZMcA3KIzOUZ163U3Yb/iG8Eg8lQJsdUzzObCuE3hLOg4GKcA0FNN8kOUlJH0z4+FVEljZiqB17 7iwDyd6qCuEbg8liNgHRWYMVmjwZ27JgWJTswITdvOp X-Received: by 2002:a17:90b:1d50:b0:38f:dec8:f7e9 with SMTP id 98e67ed59e1d1-395df29b3c5mr47931074a91.12.1787630741938; Mon, 24 Aug 2026 21:05:41 -0700 (PDT) From: stephensportia@gmail.com To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Peter Maydell , Jamin Lin , qemu-ppc@nongnu.org, =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Steven Lee , Andrew Jeffery , Harsh Prateek Bora , Subbaraya Sundeep , Troy Lee , "Edgar E. Iglesias" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alistair Francis , Strahinja Jankovic , qemu-arm@nongnu.org, Tyrone Ting , Nicholas Piggin , Aditya Gupta , Kane Chen , Francisco Iglesias , Joel Stanley , Hao Wu , Glenn Miles , qemu-riscv@nongnu.org, Jean-Christophe Dubois , Portia Stephens Subject: [PATCH 4/4] hw/ssi/pnv_spi: Fix dropped upper bytes of ssi transfer Date: Tue, 25 Aug 2026 14:04:52 +1000 Message-ID: <20260825040452.1322251-5-stephensportia@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260825040452.1322251-1-stephensportia@gmail.com> References: <20260825040452.1322251-1-stephensportia@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=stephensportia@gmail.com; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1787630766103158500 Content-Type: text/plain; charset="utf-8" From: Portia Stephens The pnv_spi model supports transaction sizes of 4 bytes however there are no in-tree SSI peripherals that support this. Update the model to use a 8-bit transfer function. Signed-off-by: Portia Stephens Reviewed-by: Alistair Francis --- hw/ssi/pnv_spi.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/hw/ssi/pnv_spi.c b/hw/ssi/pnv_spi.c index e2a8a710da..481798b1fa 100644 --- a/hw/ssi/pnv_spi.c +++ b/hw/ssi/pnv_spi.c @@ -194,32 +194,26 @@ static void spi_response(PnvSpi *s) =20 static void transfer(PnvSpi *s) { - uint32_t tx, rx, payload_len; + uint32_t payload_len; uint8_t rx_byte; =20 payload_len =3D fifo8_num_used(&s->tx_fifo); for (int offset =3D 0; offset < payload_len; offset +=3D s->transfer_l= en) { - tx =3D 0; - for (int i =3D 0; i < s->transfer_len; i++) { - if ((offset + i) >=3D payload_len) { - tx <<=3D 8; - } else if (!fifo8_is_empty(&s->tx_fifo)) { - tx =3D (tx << 8) | fifo8_pop(&s->tx_fifo); - } else { - qemu_log_mask(LOG_GUEST_ERROR, "pnv_spi: TX_FIFO underflow= \n"); - } - } - rx =3D ssi_transfer8(s->ssi_bus, tx); for (int i =3D 0; i < s->transfer_len; i++) { if ((offset + i) >=3D payload_len) { break; } - rx_byte =3D (rx >> (8 * (s->transfer_len - 1) - i * 8)) & 0xFF; - if (!fifo8_is_full(&s->rx_fifo)) { - fifo8_push(&s->rx_fifo, rx_byte); + + if (!fifo8_is_empty(&s->tx_fifo)) { + rx_byte =3D ssi_transfer8(s->ssi_bus, fifo8_pop(&s->tx_fif= o)); + if (!fifo8_is_full(&s->rx_fifo)) { + fifo8_push(&s->rx_fifo, rx_byte); + } else { + qemu_log_mask(LOG_GUEST_ERROR, "pnv_spi: RX_FIFO is fu= ll\n"); + break; + } } else { - qemu_log_mask(LOG_GUEST_ERROR, "pnv_spi: RX_FIFO is full\n= "); - break; + qemu_log_mask(LOG_GUEST_ERROR, "pnv_spi: TX_FIFO underflow= \n"); } } } --=20 2.43.0