From patchwork Fri Feb 1 16:06:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 157272 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp636435jaa; Fri, 1 Feb 2019 08:22:10 -0800 (PST) X-Google-Smtp-Source: AHgI3IaFqo/mSWs6S4e6dDOFiN0NW/v9kKdXCYlQ0zhhAhyqTyEZzBPcU5tgWqBm/l2XeFFecf2k X-Received: by 2002:a25:24ce:: with SMTP id k197mr6355477ybk.487.1549038130562; Fri, 01 Feb 2019 08:22:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549038130; cv=none; d=google.com; s=arc-20160816; b=JtM2F1d4T1oFAx9QWhX2imY97QyDpNOJuKxsjvuRX6PxLOEDbuMdWxrie5OYMPyBLJ abPXpOjA7O4O8WIqiiFaHdKokt98AoDTUOH6TE6xTKw2+O5NTtLGwnl/sJMZHIyGvh7s ioUhvE9ZcruejKZAt2S037+hwBCe2pnFjcDEg6l+TskbMRoi3mhlarPBsBcyFmh06gkH LUyrJ8XWsQoNxkxbZHOZD/LsinATptwtF8B4tjMOTuYQJNxfMIXVDqJFEzakunqAvEw0 v8tADX9OjLl0hlgHPmCynF6eH1lC9yNN2Uw+MLn8gtr9E4BmGemVmPNoKLp3CDFVhWAW Z5pA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=LD627+NuRitFCJ5kVilA6rBKR1J/ZAVe6ienvehgBm8=; b=OHjz7fIgcbe6mbIwnvW9C7lFbSqOfseUEDB1rD2trzIy2c9Cuo203b8JO7s7CrRsvw 7NO+BV5y6MV9X+FwErogHTZMIK1qqmXzHXcd743k3X9fpCZ8whzwFxjYcb1fnMZucGCs 8b1N0zbufzb22317pyqNEV2bwFx3vffT5CwJ4RVljMcrkMT7XbcEKim0TfwNjtVJ3smW orVyXognVcHus4QDOwuLFHcBWrOBxY1tw4X9MHpWHZsmfC5pnp7TWT9Nkd5Yrh+v183n QjHKQQNckVeBrV5IWh1qrG8sm/+G+4XSB4JXN2FNJ0gc/Adg7dXL/9P7BTVo+psGKIcK Ac3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=BoZlhzZ2; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id c62si4527965ybb.232.2019.02.01.08.22.10 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 01 Feb 2019 08:22:10 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=BoZlhzZ2; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:57452 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpbZy-0003dA-0L for patch@linaro.org; Fri, 01 Feb 2019 11:22:10 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59226) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gpbMJ-0008LD-RD for qemu-devel@nongnu.org; Fri, 01 Feb 2019 11:08:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gpbMD-0003mz-16 for qemu-devel@nongnu.org; Fri, 01 Feb 2019 11:08:03 -0500 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]:35408) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gpbMC-0003lp-PH for qemu-devel@nongnu.org; Fri, 01 Feb 2019 11:07:56 -0500 Received: by mail-wm1-x329.google.com with SMTP id t200so6823395wmt.0 for ; Fri, 01 Feb 2019 08:07:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=LD627+NuRitFCJ5kVilA6rBKR1J/ZAVe6ienvehgBm8=; b=BoZlhzZ2mDxWFH+RCrQXn9qAf9VU18Y1E9znEzXu5okWxpcaL/m/jH3z/8LsqUgOUh pYHTv+d68s/QFOM7VqPfIr6KQ9owW6qAN+TWu4Z5c4d5lSa1tw7QCZZQQwAseCIb6oXS mqof28ljhMD0PI6Fb5ClJKcHX1xfk7YIgQhPo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LD627+NuRitFCJ5kVilA6rBKR1J/ZAVe6ienvehgBm8=; b=ZAwtwSIjye+iKX1G54JcUKPSI9Sb1JGvIVRJ3iaEhSxTVRJyWI6IJkMFWNfK9n647C C3ZRYFvFw8DO3V1PaElO683u+Cz56IZnTJT/ZogJoSXl9oK6ROBb7RM++2aNPSRmR5Ty 6939zweCehnlrJ+zPJQsRinM+8lWjjsC69E6fIdlz74pJrXTBNjl/J90XDjn9Zr4EMXw F2m9CwsoKhG6p/y71W3dRB66GCLBICfrhBjslsA9c3Z3UzdJzKdGRa4amtu7sEXRqQNz ApV2HOKa6nI7ccKYTwmi9VOf97yWzNYhbv8f2kpuNDunXI8Fu7b1cfj4r5drjYTeGBv8 l8cg== X-Gm-Message-State: AHQUAubE9PrHYCy5Z3moKPhenRy+e1FzmvOOAJ48lr88aJocbuyT7JpE BR+pFycxChMT4Z52d1XrlNvKiXJmbn9Wtw== X-Received: by 2002:a1c:7ec4:: with SMTP id z187mr3016695wmc.43.1549037274969; Fri, 01 Feb 2019 08:07:54 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n6sm2847250wmk.9.2019.02.01.08.07.53 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 08:07:54 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Fri, 1 Feb 2019 16:06:53 +0000 Message-Id: <20190201160653.13829-48-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201160653.13829-1-peter.maydell@linaro.org> References: <20190201160653.13829-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::329 Subject: [Qemu-devel] [PULL 47/47] tests/microbit-test: Add tests for nRF51 NVMC X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Steffen Görtz Signed-off-by: Steffen Görtz Signed-off-by: Stefan Hajnoczi Acked-by: Thomas Huth Reviewed-by: Peter Maydell Message-id: 20190201023357.22596-4-stefanha@redhat.com Signed-off-by: Peter Maydell --- tests/microbit-test.c | 108 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) -- 2.20.1 diff --git a/tests/microbit-test.c b/tests/microbit-test.c index 3bad947b6cd..04e199ec33f 100644 --- a/tests/microbit-test.c +++ b/tests/microbit-test.c @@ -21,6 +21,7 @@ #include "hw/arm/nrf51.h" #include "hw/char/nrf51_uart.h" #include "hw/gpio/nrf51_gpio.h" +#include "hw/nvram/nrf51_nvm.h" #include "hw/timer/nrf51_timer.h" #include "hw/i2c/microbit_i2c.h" @@ -156,6 +157,112 @@ static void test_microbit_i2c(void) qtest_quit(qts); } +#define FLASH_SIZE (256 * NRF51_PAGE_SIZE) + +static void fill_and_erase(QTestState *qts, hwaddr base, hwaddr size, + uint32_t address_reg) +{ + hwaddr i; + + /* Erase Page */ + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x02); + qtest_writel(qts, NRF51_NVMC_BASE + address_reg, base); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + + /* Check memory */ + for (i = 0; i < size / 4; i++) { + g_assert_cmpuint(qtest_readl(qts, base + i * 4), ==, 0xFFFFFFFF); + } + + /* Fill memory */ + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x01); + for (i = 0; i < size / 4; i++) { + qtest_writel(qts, base + i * 4, i); + g_assert_cmpuint(qtest_readl(qts, base + i * 4), ==, i); + } + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); +} + +static void test_nrf51_nvmc(void) +{ + uint32_t value; + hwaddr i; + QTestState *qts = qtest_init("-M microbit"); + + /* Test always ready */ + value = qtest_readl(qts, NRF51_NVMC_BASE + NRF51_NVMC_READY); + g_assert_cmpuint(value & 0x01, ==, 0x01); + + /* Test write-read config register */ + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x03); + g_assert_cmpuint(qtest_readl(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG), + ==, 0x03); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + g_assert_cmpuint(qtest_readl(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG), + ==, 0x00); + + /* Test PCR0 */ + fill_and_erase(qts, NRF51_FLASH_BASE, NRF51_PAGE_SIZE, + NRF51_NVMC_ERASEPCR0); + fill_and_erase(qts, NRF51_FLASH_BASE + NRF51_PAGE_SIZE, + NRF51_PAGE_SIZE, NRF51_NVMC_ERASEPCR0); + + /* Test PCR1 */ + fill_and_erase(qts, NRF51_FLASH_BASE, NRF51_PAGE_SIZE, + NRF51_NVMC_ERASEPCR1); + fill_and_erase(qts, NRF51_FLASH_BASE + NRF51_PAGE_SIZE, + NRF51_PAGE_SIZE, NRF51_NVMC_ERASEPCR1); + + /* Erase all */ + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x02); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_ERASEALL, 0x01); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x01); + for (i = 0; i < FLASH_SIZE / 4; i++) { + qtest_writel(qts, NRF51_FLASH_BASE + i * 4, i); + g_assert_cmpuint(qtest_readl(qts, NRF51_FLASH_BASE + i * 4), ==, i); + } + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x02); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_ERASEALL, 0x01); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + + for (i = 0; i < FLASH_SIZE / 4; i++) { + g_assert_cmpuint(qtest_readl(qts, NRF51_FLASH_BASE + i * 4), + ==, 0xFFFFFFFF); + } + + /* Erase UICR */ + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x02); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_ERASEUICR, 0x01); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + + for (i = 0; i < NRF51_UICR_SIZE / 4; i++) { + g_assert_cmpuint(qtest_readl(qts, NRF51_UICR_BASE + i * 4), + ==, 0xFFFFFFFF); + } + + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x01); + for (i = 0; i < NRF51_UICR_SIZE / 4; i++) { + qtest_writel(qts, NRF51_UICR_BASE + i * 4, i); + g_assert_cmpuint(qtest_readl(qts, NRF51_UICR_BASE + i * 4), ==, i); + } + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x02); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_ERASEUICR, 0x01); + qtest_writel(qts, NRF51_NVMC_BASE + NRF51_NVMC_CONFIG, 0x00); + + for (i = 0; i < NRF51_UICR_SIZE / 4; i++) { + g_assert_cmpuint(qtest_readl(qts, NRF51_UICR_BASE + i * 4), + ==, 0xFFFFFFFF); + } + + qtest_quit(qts); +} + static void test_nrf51_gpio(void) { size_t i; @@ -392,6 +499,7 @@ int main(int argc, char **argv) qtest_add_func("/microbit/nrf51/uart", test_nrf51_uart); qtest_add_func("/microbit/nrf51/gpio", test_nrf51_gpio); + qtest_add_func("/microbit/nrf51/nvmc", test_nrf51_nvmc); qtest_add_func("/microbit/nrf51/timer", test_nrf51_timer); qtest_add_func("/microbit/microbit/i2c", test_microbit_i2c);