All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jamin Lin via <qemu-devel@nongnu.org>
To: "Cédric Le Goater" <clg@kaod.org>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Steven Lee" <steven_lee@aspeedtech.com>,
	"Troy Lee" <leetroy@gmail.com>,
	"Andrew Jeffery" <andrew@codeconstruct.com.au>,
	"Joel Stanley" <joel@jms.id.au>,
	"Alistair Francis" <alistair@alistair23.me>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Laurent Vivier" <lvivier@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"open list:ASPEED BMCs" <qemu-arm@nongnu.org>,
	"open list:All patches CC here" <qemu-devel@nongnu.org>,
	"open list:Block layer core" <qemu-block@nongnu.org>
Cc: <jamin_lin@aspeedtech.com>, <troy_lee@aspeedtech.com>,
	<yunlin.tang@aspeedtech.com>
Subject: [PATCH v1 15/16] test/qtest/aspeed_smc-test: Support write page command with QPI mode
Date: Fri, 18 Oct 2024 13:31:11 +0800	[thread overview]
Message-ID: <20241018053112.1886173-16-jamin_lin@aspeedtech.com> (raw)
In-Reply-To: <20241018053112.1886173-1-jamin_lin@aspeedtech.com>

Add a new testcase for write page command with QPI mode testing.
Currently, only run this testcase for AST2500, AST2600 and AST1030.

Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
---
 tests/qtest/aspeed_smc-test.c | 74 +++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/tests/qtest/aspeed_smc-test.c b/tests/qtest/aspeed_smc-test.c
index c5c38e23c5..59f3876cdc 100644
--- a/tests/qtest/aspeed_smc-test.c
+++ b/tests/qtest/aspeed_smc-test.c
@@ -36,6 +36,7 @@
 #define R_CE_CTRL           0x04
 #define   CRTL_EXTENDED0       0  /* 32 bit addressing for SPI */
 #define R_CTRL0             0x10
+#define   CTRL_IO_QUAD_IO      BIT(31)
 #define   CTRL_CE_STOP_ACTIVE  BIT(2)
 #define   CTRL_READMODE        0x0
 #define   CTRL_FREADMODE       0x1
@@ -62,6 +63,7 @@ enum {
     ERASE_SECTOR = 0xd8,
 };
 
+#define CTRL_IO_MODE_MASK  (BIT(31) | BIT(30) | BIT(29) | BIT(28))
 #define FLASH_PAGE_SIZE           256
 
 typedef struct TestData {
@@ -171,6 +173,18 @@ static void spi_ctrl_stop_user(const TestData *data)
     spi_writel(data, ctrl_reg, ctrl);
 }
 
+static void spi_ctrl_set_io_mode(const TestData *data, uint32_t value)
+{
+    uint32_t ctrl_reg = R_CTRL0 + data->cs * 4;
+    uint32_t ctrl = spi_readl(data, ctrl_reg);
+    uint32_t mode;
+
+    mode = value & CTRL_IO_MODE_MASK;
+    ctrl &= ~CTRL_IO_MODE_MASK;
+    ctrl |= mode;
+    spi_writel(data, ctrl_reg, ctrl);
+}
+
 static void flash_reset(const TestData *data)
 {
     spi_conf(data, 1 << (CONF_ENABLE_W0 + data->cs));
@@ -659,6 +673,60 @@ static void test_write_block_protect_bottom_bit(const void *data)
     flash_reset(test_data);
 }
 
+static void test_write_page_qpi(const void *data)
+{
+    const TestData *test_data = (const TestData *)data;
+    uint32_t my_page_addr = test_data->page_addr;
+    uint32_t some_page_addr = my_page_addr + FLASH_PAGE_SIZE;
+    uint32_t page[FLASH_PAGE_SIZE / 4];
+    uint32_t page_pattern[] = {
+        0xebd8c134, 0x5da196bc, 0xae15e729, 0x5085ccdf
+    };
+    int i;
+
+    spi_conf(test_data, 1 << (CONF_ENABLE_W0 + test_data->cs));
+
+    spi_ctrl_start_user(test_data);
+    flash_writeb(test_data, 0, EN_4BYTE_ADDR);
+    flash_writeb(test_data, 0, WREN);
+    flash_writeb(test_data, 0, PP);
+    flash_writel(test_data, 0, make_be32(my_page_addr));
+
+    /* Set QPI mode */
+    spi_ctrl_set_io_mode(test_data, CTRL_IO_QUAD_IO);
+
+    /* Fill the page pattern */
+    for (i = 0; i < ARRAY_SIZE(page_pattern); i++) {
+        flash_writel(test_data, 0, make_be32(page_pattern[i]));
+    }
+
+    /* Fill the page with its own addresses */
+    for (; i < FLASH_PAGE_SIZE / 4; i++) {
+        flash_writel(test_data, 0, make_be32(my_page_addr + i * 4));
+    }
+
+    /* Restore io mode */
+    spi_ctrl_set_io_mode(test_data, 0);
+    spi_ctrl_stop_user(test_data);
+
+    /* Check what was written */
+    read_page(test_data, my_page_addr, page);
+    for (i = 0; i < ARRAY_SIZE(page_pattern); i++) {
+        g_assert_cmphex(page[i], ==, page_pattern[i]);
+    }
+    for (; i < FLASH_PAGE_SIZE / 4; i++) {
+        g_assert_cmphex(page[i], ==, my_page_addr + i * 4);
+    }
+
+    /* Check some other page. It should be full of 0xff */
+    read_page(test_data, some_page_addr, page);
+    for (i = 0; i < FLASH_PAGE_SIZE / 4; i++) {
+        g_assert_cmphex(page[i], ==, 0xffffffff);
+    }
+
+    flash_reset(test_data);
+}
+
 static void test_palmetto_bmc(TestData *data)
 {
     int ret;
@@ -736,6 +804,8 @@ static void test_ast2500_evb(TestData *data)
                         data, test_write_page_mem);
     qtest_add_data_func("/ast2500/smc/read_status_reg",
                         data, test_read_status_reg);
+    qtest_add_data_func("/ast2500/smc/write_page_qpi",
+                        data, test_write_page_qpi);
 }
 
 static void test_ast2600_evb(TestData *data)
@@ -773,6 +843,8 @@ static void test_ast2600_evb(TestData *data)
                         data, test_write_page_mem);
     qtest_add_data_func("/ast2600/smc/read_status_reg",
                         data, test_read_status_reg);
+    qtest_add_data_func("/ast2600/smc/write_page_qpi",
+                        data, test_write_page_qpi);
 }
 
 static void test_ast1030_evb(TestData *data)
@@ -810,6 +882,8 @@ static void test_ast1030_evb(TestData *data)
                         data, test_write_page_mem);
     qtest_add_data_func("/ast1030/smc/read_status_reg",
                         data, test_read_status_reg);
+    qtest_add_data_func("/ast1030/smc/write_page_qpi",
+                        data, test_write_page_qpi);
 }
 
 int main(int argc, char **argv)
-- 
2.34.1


  parent reply	other threads:[~2024-10-18  5:33 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-18  5:30 [PATCH v1 00/16] Fix write incorrect data into flash in user mode Jamin Lin via
2024-10-18  5:30 ` Jamin Lin via
2024-10-18  5:30 ` [PATCH v1 01/16] aspeed/smc: " Jamin Lin via
2024-10-18  5:30   ` Jamin Lin via
2024-10-22  5:51   ` [SPAM] " Cédric Le Goater
2024-10-22  9:29     ` Jamin Lin
2024-10-18  5:30 ` [PATCH v1 02/16] hw/block:m25p80: Fix coding style Jamin Lin via
2024-10-18  5:30   ` Jamin Lin via
2024-10-18 13:31   ` [SPAM] " Cédric Le Goater
2024-10-18  5:30 ` [PATCH v1 03/16] hw/block:m25p80: Support write status register 2 command (0x31) for w25q01jvq Jamin Lin via
2024-10-18  5:30   ` Jamin Lin via
2024-10-21  8:53   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 04/16] hw/block/m25p80: Add SFDP table for w25q80bl flash Jamin Lin via
2024-10-21  9:05   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 05/16] hw/arm/aspeed: Correct spi_model w25q256 for ast1030-a1 EVB Jamin Lin via
2024-10-18  5:31   ` Jamin Lin via
2024-10-21  9:06   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 06/16] hw/arm/aspeed: Correct fmc_model w25q80bl " Jamin Lin via
2024-10-18  5:31   ` Jamin Lin via
2024-10-21  9:07   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 07/16] test/qtest/aspeed_smc-test: Fix coding style Jamin Lin via
2024-10-18  8:25   ` Thomas Huth
2024-10-21 12:02   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 08/16] test/qtest/aspeed_smc-test: Move testcases to test_palmetto_bmc function Jamin Lin via
2024-10-21 12:02   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 09/16] test/qtest/aspeed_smc-test: Introduce a new TestData to test different BMC SOCs Jamin Lin via
2024-10-21 12:13   ` [SPAM] " Cédric Le Goater
2024-10-22  1:38     ` Jamin Lin
2024-10-22  5:54       ` Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 10/16] test/qtest/aspeed_smc-test: Support to test all CE pins Jamin Lin via
2024-10-18  5:31   ` Jamin Lin via
2024-10-21 12:33   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 11/16] test/qtest/aspeed_smc-test: Support to test all flash models Jamin Lin via
2024-10-21 12:39   ` [SPAM] " Cédric Le Goater
2024-10-21 23:34     ` Andrew Jeffery
2024-10-22  1:45       ` Jamin Lin
2024-10-22  1:40     ` Jamin Lin
2024-10-18  5:31 ` [PATCH v1 12/16] test/qtest/aspeed_smc-test: Support to test AST2500 Jamin Lin via
2024-10-21 12:47   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 13/16] test/qtest/aspeed_smc-test: Support to test AST2600 Jamin Lin via
2024-10-18  5:31   ` Jamin Lin via
2024-10-21 12:47   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 14/16] test/qtest/aspeed_smc-test: Support to test AST1030 Jamin Lin via
2024-10-18  5:31   ` Jamin Lin via
2024-10-21 12:47   ` [SPAM] " Cédric Le Goater
2024-10-18  5:31 ` Jamin Lin via [this message]
2024-10-21 12:53   ` [SPAM] [PATCH v1 15/16] test/qtest/aspeed_smc-test: Support write page command with QPI mode Cédric Le Goater
2024-10-18  5:31 ` [PATCH v1 16/16] test/qtest/ast2700-smc-test: Support to test AST2700 Jamin Lin via
2024-10-18  5:31   ` Jamin Lin via
2024-10-21 12:58   ` [SPAM] " Cédric Le Goater
2024-10-22  1:53     ` Jamin Lin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241018053112.1886173-16-jamin_lin@aspeedtech.com \
    --to=qemu-devel@nongnu.org \
    --cc=alistair@alistair23.me \
    --cc=andrew@codeconstruct.com.au \
    --cc=clg@kaod.org \
    --cc=hreitz@redhat.com \
    --cc=jamin_lin@aspeedtech.com \
    --cc=joel@jms.id.au \
    --cc=kwolf@redhat.com \
    --cc=leetroy@gmail.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-block@nongnu.org \
    --cc=steven_lee@aspeedtech.com \
    --cc=thuth@redhat.com \
    --cc=troy_lee@aspeedtech.com \
    --cc=yunlin.tang@aspeedtech.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.