From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597685809; cv=none; d=zohomail.com; s=zohoarc; b=l/xaUEejr9TLi4ZNYZXSMMNxr7uUcbrSxFZTIbuCNuI7o4hn7JqkU8TuPLYcCmYBfFCoocG+lH1OlHLnb23IArJVHzAZMzKCGeKO6iO4IjJo0HSv+cRUVtzBYXP6eDIoMbKRWyG7wv8WBqNozKwAzI5+42Eeqy3s+P0SE6+7A1E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597685809; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gQrQ4Zm+ysqESM94lYurHAkeaDr7/WAxSOhUyFwAMeI=; b=ZUvCIkwsjpDZsPzM8TNGGzflvKKfdebVZGPB6HDJdXsjN6CnvrmBYM4rEGvIm0zfJxf5QIB6HOA2GD1PTpnOOYXlO/sg/j8CQ2fV0VnFpdTckqhIMd+GJjC+OhQGEeyJg4URbrW2ttZmn2vD0X7EYZYo71iAuI5sC/6g0BDEyI8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597685809152924.3853091931177; Mon, 17 Aug 2020 10:36:49 -0700 (PDT) Received: from localhost ([::1]:48536 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7htk-0007jO-RJ for importer@patchew.org; Mon, 17 Aug 2020 12:22:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42386) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqg-00027Y-Fa for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:02 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:53324) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqe-00052c-BY for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:01 -0400 Received: by mail-wm1-x343.google.com with SMTP id g8so13720220wmk.3 for ; Mon, 17 Aug 2020 09:18:59 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.18.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:18:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gQrQ4Zm+ysqESM94lYurHAkeaDr7/WAxSOhUyFwAMeI=; b=VDmLqWpaLHoj78QfdtHN//dAvoL1aSZrzumiprXHKAKq6ZFsJ8QKLY1C92py6vlILI Q+ftEvSdP2rczU3MhmAUu1+mYnrTTWxtvBZvItN1MdRwWUPlaDwgXIZIdRRe2S949NSq 2S41yETPZSv3jXZ8MReHNE/GBttdpXtzRd9s8hVocQC2EzuHiU84x3M5asvdILi7CCZO cboh+YcoGTbPRsyeud72n6NLoziuyl9YVEKW3BAuvxWwoeLpj+8qGiPS6edyD3LqLr6C 7rVwWbj1xppzuP18Cwq2ukvQDp4tzoLjenY+Jofd1A6ft4M/Q0kzcT4Tndnq/fiDrE78 c7gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=gQrQ4Zm+ysqESM94lYurHAkeaDr7/WAxSOhUyFwAMeI=; b=FlvQHuZGSSwzZUrMBzPGGvdeOyB3JzVgHMJxxtiXOWmONAy4dQzcu/bfhahsDQG99X f65S//fX2kESJaZGNLGEdu9353KgnysxVIYbxOecWUJsZSRvWeuuFAMUi6FUWdSsI4T0 t9FGkK8vj3QxsjpWjGnULGrvWVc6SWRZk845tVTJdvGxOstblWPWPF7drpaYxUvnf6L5 mrO/Wki6zZg0mZMOM2bBYwx7af99BgFXBCGmuExhyqbADaDFOQRtkCPuLThs9l07KeeV C2pBkX+yIfwb+EYlsF8ygR2pFxeBBm3pmsREmMJwGhNOgp3oqAgKH06GorQhPAOITDGT GMIw== X-Gm-Message-State: AOAM533AaIG3y3+Tn56dNffBCA0iQY/+iJ4cXAgARqvQYRdURWhH7W2v pYlJ+/MsLwsWylWz50g2t08hk5Ddqq4= X-Google-Smtp-Source: ABdhPJws79hKc5Ypc0XPLt8xa0uDbOZQrKsoDd5BCbjz+umdwB7+oJfkxmPBEeuyjRlA/KQ0B8O15w== X-Received: by 2002:a7b:c095:: with SMTP id r21mr16311823wmh.152.1597681138166; Mon, 17 Aug 2020 09:18:58 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 1/9] memory: Initialize MemoryRegionOps for RAM memory regions Date: Mon, 17 Aug 2020 18:18:45 +0200 Message-Id: <20200817161853.593247-2-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , P J P , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) There is an issue when using memory_region_dispatch_read() or memory_region_dispatch_write() on RAM memory regions. RAM memory regions are initialized as: memory_region_init_ram() -> memory_region_init_ram_nomigrate() -> memory_region_init_ram_shared_nomigrate() -> memory_region_init() -> object_initialize(TYPE_MEMORY_REGION) -> memory_region_initfn() -> mr->ops =3D &unassigned_mem_ops; Later when accessing the alias, the memory_region_dispatch_read() flow is: memory_region_dispatch_read() -> memory_region_dispatch_read1() -> if (mr->ops->read) { /* not taken */ } else ... -> access_with_adjusted_size -> memory_region_read_with_attrs_accessor -> memory_region_dispatch_read -> unassigned_mem_read <- MEMTX_DECODE_ERROR The caller gets a MEMTX_DECODE_ERROR while the access is OK. (Similar flow with memory_region_dispatch_write). Fix by initializing the MemoryRegionOps to ram_device_mem_ops, this way the memory accesses are properly dispatched using memory_region_ram_device_read() / memory_region_ram_device_write(). Fixes: 4a2e242bbb ("memory: Don't use memcpy for ram_device regions") Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- Since v1: Corrected description (PJP) Cc: P J P --- softmmu/memory.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/softmmu/memory.c b/softmmu/memory.c index 651705b7d1..8139da1a58 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -1517,6 +1517,8 @@ void memory_region_init_ram_shared_nomigrate(MemoryRe= gion *mr, Error *err =3D NULL; memory_region_init(mr, owner, name, size); mr->ram =3D true; + mr->ops =3D &ram_device_mem_ops; + mr->opaque =3D mr; mr->terminates =3D true; mr->destructor =3D memory_region_destructor_ram; mr->ram_block =3D qemu_ram_alloc(size, share, mr, &err); @@ -1541,6 +1543,8 @@ void memory_region_init_resizeable_ram(MemoryRegion *= mr, Error *err =3D NULL; memory_region_init(mr, owner, name, size); mr->ram =3D true; + mr->ops =3D &ram_device_mem_ops; + mr->opaque =3D mr; mr->terminates =3D true; mr->destructor =3D memory_region_destructor_ram; mr->ram_block =3D qemu_ram_alloc_resizeable(size, max_size, resized, @@ -1566,6 +1570,8 @@ void memory_region_init_ram_from_file(MemoryRegion *m= r, Error *err =3D NULL; memory_region_init(mr, owner, name, size); mr->ram =3D true; + mr->ops =3D &ram_device_mem_ops; + mr->opaque =3D mr; mr->terminates =3D true; mr->destructor =3D memory_region_destructor_ram; mr->align =3D align; @@ -1589,6 +1595,8 @@ void memory_region_init_ram_from_fd(MemoryRegion *mr, Error *err =3D NULL; memory_region_init(mr, owner, name, size); mr->ram =3D true; + mr->ops =3D &ram_device_mem_ops; + mr->opaque =3D mr; mr->terminates =3D true; mr->destructor =3D memory_region_destructor_ram; mr->ram_block =3D qemu_ram_alloc_from_fd(size, mr, @@ -1611,6 +1619,8 @@ void memory_region_init_ram_ptr(MemoryRegion *mr, { memory_region_init(mr, owner, name, size); mr->ram =3D true; + mr->ops =3D &ram_device_mem_ops; + mr->opaque =3D mr; mr->terminates =3D true; mr->destructor =3D memory_region_destructor_ram; mr->dirty_log_mask =3D tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0; --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=amsat.org ARC-Seal: i=1; a=rsa-sha256; t=1597684219; cv=none; d=zohomail.com; s=zohoarc; b=VvaBZvCR//5+w3fSmBbRb6dD/jYtD8AiuXDJh5DI7/fd700GYsd7J32TpkcEAPy7NzvWswoXoSbhV8pSViAxlmuB8JGx2AHOqjqb5QMo7eFn6Iy2TXPvEmdsHVIT3J/mSxvkqE8HynIM7Qo3NEWYpLnt9fP3QKc36F/5sIHnfLc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597684219; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Vou0MK3wF2fBtWQ3jzXUST9E3PrwDChKhOUwUYVwMds=; b=hYT0/Va1vV+P36Uj/HO+sfVAP7sqYbhR02PDfsQsmGyPnNqc9cStkpyc9tDfGeNFH0SNARVHNkcxb+IV8ta9nBBxZvdFWwf9dapImGQu/rHp5nricTgTL4y0aKgk0fwIEqSl/0n5D2dWeCiukXu/p/n7JG7ptSgPI9GjhA+Vuig= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597684219595321.5404984490143; Mon, 17 Aug 2020 10:10:19 -0700 (PDT) Received: from localhost ([::1]:40324 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7hsM-00042W-NI for importer@patchew.org; Mon, 17 Aug 2020 12:20:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42412) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqi-00028N-0U for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:04 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:36191) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqg-00052w-Dz for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:03 -0400 Received: by mail-wr1-x443.google.com with SMTP id 88so15598754wrh.3 for ; Mon, 17 Aug 2020 09:19:01 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.18.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:18:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Vou0MK3wF2fBtWQ3jzXUST9E3PrwDChKhOUwUYVwMds=; b=FIl5vYlbKsO2sMgZaK5cLjOIOjd/NhKyNG9F/cPgbtPONAzjnJ/Wqimc7Vyl5gn7hH aRK9u7we7oNZjvBL4xeqDTkNCG7i7yyRB71xLd/AXQW2vzflSxzsM4Za+8+/OTApOpFU 5ruQwzL0X5Uvj777/oGaAOyGu26NxDjdRfebkFx78UYbiGRk8F4EEVdzeDWxWl3OYTAv vPJx6XNKj7/cGCR8IgDOebEAXOiz5zZolLhK1mi/DoFaaW3DwD4lsiXS75x7Zvi7Jf2P D4CEpk6YwpWVzrq6P40UZFrs+9RGeMlOR4H2aMYZKY2aiDzbUC6meo6/wz8Z6it/Pi+J zYfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=Vou0MK3wF2fBtWQ3jzXUST9E3PrwDChKhOUwUYVwMds=; b=t1LW1TYbpC2pjDn4RccElvOLtTV/VkTzX6jdAOogVETbmo41duBhZx9p3NrGRJm8EE KnbP3Zi9AkFDiJuTKQr5sSyerVZ20zsw7FPJFKd5JYuJBfJIXWzHT1zMW5Lp57pak0/P 3MUXvZjMAxpSmvdDtLd73kfaja1nagoNpkhSIhnpB/plqTRB1ZVz5VSjLCyPVO57iPKc KI2z6W+REgbp4lG1HKGY1tumP9S7+NGGmcPLfzn2eawc607k2a4Yp+7tC0dYNrvr3V2D VN+BK10LzFJLaY03YXDlcLzbNwSwQS64QdrZ6z+xTLARhq7m2t8Q/Bz3cGFyKkZI8VjX Yjag== X-Gm-Message-State: AOAM531aCdOwGtckeaVmugl5hKIlR0+2Pbc4HV7PCLd4QBlyrDJ0zbay EPyekIocbjnQ+uOWY+iEJkJWcRdKPc0= X-Google-Smtp-Source: ABdhPJwJzd2hqVH1B/S3bou44JmYFzrrpUAEO8NpQ1f+yP671tsFeF0vxh3iAd+VP/0s5ADlnKhJsA== X-Received: by 2002:a5d:414e:: with SMTP id c14mr17461019wrq.57.1597681139651; Mon, 17 Aug 2020 09:18:59 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 2/9] qtest: Add local qtest_mem_as() getter Date: Mon, 17 Aug 2020 18:18:46 +0200 Message-Id: <20200817161853.593247-3-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::443; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Refactor the access to the default address space introducing the qtest_mem_as() getter. This will help us to use another address space in the next commit. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- softmmu/qtest.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/softmmu/qtest.c b/softmmu/qtest.c index 5672b75c35..81b5110783 100644 --- a/softmmu/qtest.c +++ b/softmmu/qtest.c @@ -273,6 +273,12 @@ static void qtest_irq_handler(void *opaque, int n, int= level) } } =20 +/* Default address space for MMIO accesses */ +static AddressSpace *qtest_mem_as(void) +{ + return first_cpu->as; +} + static void qtest_process_command(CharBackend *chr, gchar **words) { const gchar *command; @@ -434,22 +440,22 @@ static void qtest_process_command(CharBackend *chr, g= char **words) =20 if (words[0][5] =3D=3D 'b') { uint8_t data =3D value; - address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIE= D, + address_space_write(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFI= ED, &data, 1); } else if (words[0][5] =3D=3D 'w') { uint16_t data =3D value; tswap16s(&data); - address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIE= D, + address_space_write(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFI= ED, &data, 2); } else if (words[0][5] =3D=3D 'l') { uint32_t data =3D value; tswap32s(&data); - address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIE= D, + address_space_write(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFI= ED, &data, 4); } else if (words[0][5] =3D=3D 'q') { uint64_t data =3D value; tswap64s(&data); - address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIE= D, + address_space_write(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFI= ED, &data, 8); } qtest_send_prefix(chr); @@ -468,21 +474,21 @@ static void qtest_process_command(CharBackend *chr, g= char **words) =20 if (words[0][4] =3D=3D 'b') { uint8_t data; - address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, + address_space_read(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIE= D, &data, 1); value =3D data; } else if (words[0][4] =3D=3D 'w') { uint16_t data; - address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, + address_space_read(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIE= D, &data, 2); value =3D tswap16(data); } else if (words[0][4] =3D=3D 'l') { uint32_t data; - address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, + address_space_read(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIE= D, &data, 4); value =3D tswap32(data); } else if (words[0][4] =3D=3D 'q') { - address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, + address_space_read(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIE= D, &value, 8); tswap64s(&value); } @@ -503,7 +509,7 @@ static void qtest_process_command(CharBackend *chr, gch= ar **words) g_assert(len); =20 data =3D g_malloc(len); - address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, da= ta, + address_space_read(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIED, d= ata, len); =20 enc =3D g_malloc(2 * len + 1); @@ -529,7 +535,7 @@ static void qtest_process_command(CharBackend *chr, gch= ar **words) g_assert(ret =3D=3D 0); =20 data =3D g_malloc(len); - address_space_read(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, da= ta, + address_space_read(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIED, d= ata, len); b64_data =3D g_base64_encode(data, len); qtest_send_prefix(chr); @@ -564,7 +570,7 @@ static void qtest_process_command(CharBackend *chr, gch= ar **words) data[i] =3D 0; } } - address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, d= ata, + address_space_write(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIED, = data, len); g_free(data); =20 @@ -587,7 +593,7 @@ static void qtest_process_command(CharBackend *chr, gch= ar **words) if (len) { data =3D g_malloc(len); memset(data, pattern, len); - address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIE= D, + address_space_write(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFI= ED, data, len); g_free(data); } @@ -621,7 +627,7 @@ static void qtest_process_command(CharBackend *chr, gch= ar **words) out_len =3D MIN(out_len, len); } =20 - address_space_write(first_cpu->as, addr, MEMTXATTRS_UNSPECIFIED, d= ata, + address_space_write(qtest_mem_as(), addr, MEMTXATTRS_UNSPECIFIED, = data, len); =20 qtest_send_prefix(chr); --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597687118; cv=none; d=zohomail.com; s=zohoarc; b=IOVPy5JaQcNGqDjSCPaymKhhaqrmn4/Cuwwsri+en+dLErJohqxImvd9phgMnMJ4aoCpBb2HppyJuRiiTE71W0yJ960/CwkbxEESUAiVJ5hFLYtTQqoB4bITJlDb9jqB5Ag+0zr32YTITp9tkXYOylyby/gdko51eqjMR3UoTtM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597687118; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5o+8zFBOWm3p7LnG75e3VpkH6O/dHPqDS3Ofte53ZGM=; b=VGLOdDbTFXZ19eH5Xz5D7cORmFLgXSrr7Kp688nUW7NxpLjdBfgT5y6ustsCAKoRf1v7uGIndn+Cdn92Pez47jQn2B2bL4LKRMwfKAWZcLvbWo5ysQJ5doy919zkgau5zB2EHl4PauRt4bKCSx086yhssNZaafljKyHgxb6wz3w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597687118279953.9318881731558; Mon, 17 Aug 2020 10:58:38 -0700 (PDT) Received: from localhost ([::1]:49304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7htq-00083h-S5 for importer@patchew.org; Mon, 17 Aug 2020 12:22:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42446) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqj-00029D-Az for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:05 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:38499) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqh-000539-HL for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:05 -0400 Received: by mail-wm1-x344.google.com with SMTP id t14so14376058wmi.3 for ; Mon, 17 Aug 2020 09:19:02 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.18.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:19:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5o+8zFBOWm3p7LnG75e3VpkH6O/dHPqDS3Ofte53ZGM=; b=DCEfY4y/rGKcmZ/42cFavRPdYlWV26f4P28jXg9EKe5X4GNvty+sBalaztPiHlGyR/ sunTBtPsCrOC5HO8sDbjUpiIeMPM686eHW2wlUrFcFXz8K1q36imW4/0S4FvYnhk9rbS d2EAOI6QHby65JbpavxwG69Wa8byfzEXPGkBESDDpHih+iLxKAIm47yw0ZQ2q2GEoiNT xBIi6Ax2bnihvrMeXBPVyC4UffR/ScbnJW9j6vTPPSStONori8eynwE4JyZXVkr5VCef /CV7CPhcyqgMeyppfUH8e0IxJbLXnMnuDYR5yyoy/DUuORGevV93enVDisu1kgbWSSUd QRzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=5o+8zFBOWm3p7LnG75e3VpkH6O/dHPqDS3Ofte53ZGM=; b=QX/sFYCsDxfpjJqzzvE4doj2c8dId+sEy++knZ0C63TgX3NM/yEwt334sXUccuzUAm eUqpXtV6F4eNbV95M6rl5vq3CEsCmou3f45f/gVdX+wE7DXVoX3VKyaHwMQwO79TF01C W6413nYV3wU0re/JANnt5ffvC993d4SQyeW1H6xAjYSozgYtu3t1aLckQlMQ9ifc7EvT oHwrJMbuAYY8F1hL8fdkmGDKVdTFjtd+bpnGQVXNoyXXG0IS8C0wsh+x1dsLEDlxWcU2 GJxbXPu/NH+/IX4ePeZB3FHQPGYQ2Vt5xVumaOB4Xi/DjkDWIZL66NNa7iN2wZY6x/45 O+sg== X-Gm-Message-State: AOAM530kZ2JG2gBiw7LfT9NRXhuqncRrZrsQeZ5WxRZTa437ct8/DRSP jRXoWTf7N4CUU6QYpLCaALB2h+5mAho= X-Google-Smtp-Source: ABdhPJyHcxr5wezhzOujaWzLrh4Rv8l/9ijVgGmz/MujOMmh0Jj/P4w86JkwR9vfFE1RsfJIVpor2g== X-Received: by 2002:a7b:c242:: with SMTP id b2mr15933169wmj.90.1597681141078; Mon, 17 Aug 2020 09:19:01 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 3/9] qtest: Directly use global address_space_memory when no CPU available Date: Mon, 17 Aug 2020 18:18:47 +0200 Message-Id: <20200817161853.593247-4-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Currently all qtest MMIO access are dispatched via the first CPU available. This limitation doesn't allow use to use the 'none' machine to run tests. Unleash this limitation by selecting the global address_space_memory when no CPU is available. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- softmmu/qtest.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/softmmu/qtest.c b/softmmu/qtest.c index 81b5110783..7f018d2faf 100644 --- a/softmmu/qtest.c +++ b/softmmu/qtest.c @@ -19,6 +19,7 @@ #include "chardev/char-fe.h" #include "exec/ioport.h" #include "exec/memory.h" +#include "exec/address-spaces.h" #include "hw/irq.h" #include "sysemu/accel.h" #include "sysemu/cpus.h" @@ -276,6 +277,13 @@ static void qtest_irq_handler(void *opaque, int n, int= level) /* Default address space for MMIO accesses */ static AddressSpace *qtest_mem_as(void) { + if (!first_cpu) { + /* + * The 'none' machine doesn't have any CPU, + * directly access the main address space. + */ + return &address_space_memory; + } return first_cpu->as; } =20 --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597684044; cv=none; d=zohomail.com; s=zohoarc; b=Dv3LzmAj4mb85pYhogS344OQ5GtwJH3racaHyviMEOCkGCR/wTTs0zr8LI+663BXf1LL3oMkt1JSt63kN8kTxcXqHfw7i68e6IuCZceqUVHFWpiJ7/Hpo4W7ogdyrN/wY4IUGpAC/MJJbI9hlF9yTzue/biAstlvYD4dfIBsefA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597684044; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1//Tp8Y+FSKXFzMM84j0WYQQgWr3vCj2ITEnknuNnJU=; b=CjVkMV7EpaDEbKv5A13djMCgncgQyPAuvkQXTLxnjnRz7DQhcqvmg2ccRK2Je0DliPw8vNrzBjn6b88cBK3uXQiDZqf1HWUECY4O47PbxJ0GXnxJbByBdEeIxuG9P5jiqHbu5WhiBLrbfhbs8uRhm1x9OSRNHWKIdLKFh6EjqNE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597684044839764.6877550077149; Mon, 17 Aug 2020 10:07:24 -0700 (PDT) Received: from localhost ([::1]:42396 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7hxv-00005I-L6 for importer@patchew.org; Mon, 17 Aug 2020 12:26:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42476) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hql-0002A6-2Y for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:10 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:34820) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqj-00053Q-2u for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:06 -0400 Received: by mail-wm1-x344.google.com with SMTP id 184so14399793wmb.0 for ; Mon, 17 Aug 2020 09:19:04 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.19.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:19:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1//Tp8Y+FSKXFzMM84j0WYQQgWr3vCj2ITEnknuNnJU=; b=ZbjIVt2K3/Jg0Mg3/ZIFzG3Enje/uuhxjhp8kj6zL+yArd3KBt1Mxa5pOoL1BNBGeW plCbworw5CIzj3kqXCYX0h/uvLlo1m34JK1tNvxHDaFIFlQair7zApSglazw+Nb66QA+ OKQqg3Ffibgl0glD6aHPxv6xwdmrXkFrpxW6zC3emmZZIVjDFR94TFZN2adrT+bkUl+E doIxiWw3uSPoC0nap4QDIXVpw9szWTa9/Weg4Pf5Z2rz9ZMn7uG3XKxfah8bKFQlJEbZ gPQkhHg0BTrRzvxlUS9yISZUsF1BZiwCuHss9t7fzjiOxWmjzI7Kz00oPoJM5x7XgNkx v53w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=1//Tp8Y+FSKXFzMM84j0WYQQgWr3vCj2ITEnknuNnJU=; b=U7qRNDptjwtT1qfMOOUCJA12qLJIsQgCHKkPGvmk4pucxBaURRL41ZI9dp2nSQM6gn VDLybBpNjByV0pgpGGrSwkbXuj7AQsZ4Xl2HYzNWel6ZrMHKHEN83QcHy2DiB58MiytG YTCclDBlfW7bJxDyh2IDS4Wy7yRHa1aKU+Wu34/NlMCAUeX/CWMo+EsCE0DhOv72VG4n Wl6DTmdattePgkVxdn7z+jTbT68AULXpFvq9BAuT9TroBhgTPc/9habl5NFoiekhHMUR 9F4454FXxaw/Awsk1zjX3KdntyKNJbzOoKV9AaEGdd365a2jfhmkQmEynu9jM+muLRTJ B/ew== X-Gm-Message-State: AOAM532z04bozRQSdxZoVDFKTdo2mUgESU2UYro/X9Tf+KLncVO3W8/O QZDwmeJAb0ceAoZS9GtnxZgDaQ9d28c= X-Google-Smtp-Source: ABdhPJyKW8SGLXprNshLz2qI4S/+0lnCyY7LP8qfdWH3jP4BxZL+LDlxQ7o5CxoO/gFvvCND2e+VgA== X-Received: by 2002:a1c:1d84:: with SMTP id d126mr15713545wmd.147.1597681142587; Mon, 17 Aug 2020 09:19:02 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 4/9] hw/misc: Add interleaver device to make interleaved memory accesses Date: Mon, 17 Aug 2020 18:18:48 +0200 Message-Id: <20200817161853.593247-5-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Some slow devices might be arranged in an interleaved setup to reduce waiting for memory banks and improve memory throughput. Classical examples are NOR flashes. Add an 'interleaver' device to allow making such interleaved memory accesses. This device support using the 16x8, 32x8, 32x16, 64x8, 64x16 and 64x32 configurations. Example of 32x16 interleaver accesses (32-bit bus, 2x 16-bit banks): Each interleaved 32-bit access on the bus results in contiguous 16-bit access on each banked device: ____________________________________________________ Bus accesses | 1st 32-bit | 2nd 32-bit | ----------------------------------------------------- | | | | v | v | ______________ | ______________ | 1st bank accesses | 1st 16-bit | | | 2nd 16-bit | | -------------- | -------------- | v v ______________ ______________ 2nd bank accesses | 1st 16-bit | | 2nd 16-bit | -------------- -------------- Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- How to simplify idx/addr initialization in the read/write handlers? --- include/hw/misc/interleaver.h | 40 ++++++ hw/misc/interleaver.c | 254 ++++++++++++++++++++++++++++++++++ MAINTAINERS | 6 + hw/misc/Kconfig | 4 + hw/misc/Makefile.objs | 1 + hw/misc/trace-events | 6 + 6 files changed, 311 insertions(+) create mode 100644 include/hw/misc/interleaver.h create mode 100644 hw/misc/interleaver.c diff --git a/include/hw/misc/interleaver.h b/include/hw/misc/interleaver.h new file mode 100644 index 0000000000..953d987556 --- /dev/null +++ b/include/hw/misc/interleaver.h @@ -0,0 +1,40 @@ +/* + * QEMU Interleaver device + * + * Copyright (C) 2020 Philippe Mathieu-Daud=C3=A9 + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_MISC_INTERLEAVER_H +#define HW_MISC_INTERLEAVER_H + +/* + * Example of 32x16 interleaver accesses (32-bit bus, 2x 16-bit banks): + * + * Each interleaved 32-bit access on the bus results in contiguous 16-bit + * access on each banked device: + * + * __________________________________________________= __ + * Bus accesses | 1st 32-bit | 2nd 32-bit = | + * --------------------------------------------------= --- + * | | | | + * v | v | + * ______________ | ______________ | + * 1st bank accesses | 1st 16-bit | | | 2nd 16-bit | | + * -------------- | -------------- | + * v v + * ______________ ___________= ___ + * 2nd bank accesses | 1st 16-bit | | 2nd 16-bi= t | + * -------------- -----------= --- + */ + +#define TYPE_INTERLEAVER_16X8_DEVICE "interleaver-16x8-device" +#define TYPE_INTERLEAVER_32X8_DEVICE "interleaver-32x8-device" +#define TYPE_INTERLEAVER_32X16_DEVICE "interleaver-32x16-device" +#define TYPE_INTERLEAVER_64X8_DEVICE "interleaver-64x8-device" +#define TYPE_INTERLEAVER_64X16_DEVICE "interleaver-64x16-device" +#define TYPE_INTERLEAVER_64X32_DEVICE "interleaver-64x32-device" + +#endif + diff --git a/hw/misc/interleaver.c b/hw/misc/interleaver.c new file mode 100644 index 0000000000..46099e9e11 --- /dev/null +++ b/hw/misc/interleaver.c @@ -0,0 +1,254 @@ +/* + * QEMU Interleaver device + * + * The interleaver device to allow making interleaved memory accesses. + * + * This device support using the following configurations (INPUT x OUTPUT): + * 16x8, 32x8, 32x16, 64x8, 64x16 and 64x32. + * + * Copyright (C) 2020 Philippe Mathieu-Daud=C3=A9 + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qapi/error.h" +#include "hw/sysbus.h" +#include "hw/qdev-properties.h" +#include "hw/misc/interleaver.h" +#include "trace.h" + +#define TYPE_INTERLEAVER_DEVICE "interleaver-device" + +typedef struct InterleaverDeviceClass { + /*< private >*/ + SysBusDeviceClass parent_class; + /*< public >*/ + MemoryRegionOps ops; + unsigned input_access_size; + unsigned output_access_size; + MemOp output_memop; + unsigned mr_count; + char *name; +} InterleaverDeviceClass; + +#define INTERLEAVER_DEVICE_CLASS(klass) \ + OBJECT_CLASS_CHECK(InterleaverDeviceClass, (klass), TYPE_INTERLEAVER_D= EVICE) +#define INTERLEAVER_DEVICE_GET_CLASS(obj) \ + OBJECT_GET_CLASS(InterleaverDeviceClass, (obj), TYPE_INTERLEAVER_DEVIC= E) + +#define INTERLEAVER_REGIONS_MAX 8 /* 64x8 */ + +typedef struct { + /*< private >*/ + SysBusDevice parent_obj; + /*< public >*/ + MemoryRegion iomem; + uint64_t size; + MemoryRegion *mr[INTERLEAVER_REGIONS_MAX]; +} InterleaverDeviceState; + +#define INTERLEAVER_DEVICE(obj) \ + OBJECT_CHECK(InterleaverDeviceState, (obj), TYPE_INTERLEAVER_DEVICE) + +static const char *memresult_str[] =3D {"OK", "ERROR", "DECODE_ERROR"}; + +static const char *emtpy_mr_name =3D "EMPTY"; + +static MemTxResult interleaver_read(void *opaque, + hwaddr offset, uint64_t *data, + unsigned size, MemTxAttrs attrs) +{ + InterleaverDeviceState *s =3D INTERLEAVER_DEVICE(opaque); + InterleaverDeviceClass *idc =3D INTERLEAVER_DEVICE_GET_CLASS(s); + unsigned idx =3D (offset / idc->output_access_size) & (idc->mr_count -= 1); + hwaddr addr =3D (offset & ~(idc->input_access_size - 1)) / idc->mr_cou= nt; + MemTxResult r =3D MEMTX_ERROR; + + trace_interleaver_read_enter(idc->input_access_size, + idc->output_access_size, size, + idc->mr_count, idx, + s->mr[idx] ? memory_region_name(s->mr[idx= ]) + : emtpy_mr_name, + offset, addr); + if (s->mr[idx]) { + r =3D memory_region_dispatch_read(s->mr[idx], + addr, + data, + idc->output_memop, + attrs); + } + trace_interleaver_read_exit(size, *data, memresult_str[r]); + + return r; +} + +static MemTxResult interleaver_write(void *opaque, + hwaddr offset, uint64_t data, + unsigned size, MemTxAttrs attrs) +{ + InterleaverDeviceState *s =3D INTERLEAVER_DEVICE(opaque); + InterleaverDeviceClass *idc =3D INTERLEAVER_DEVICE_GET_CLASS(s); + unsigned idx =3D (offset / idc->output_access_size) & (idc->mr_count -= 1); + hwaddr addr =3D (offset & ~(idc->input_access_size - 1)) / idc->mr_cou= nt; + MemTxResult r =3D MEMTX_ERROR; + + trace_interleaver_write_enter(idc->input_access_size, + idc->output_access_size, size, + idc->mr_count, idx, + s->mr[idx] ? memory_region_name(s->mr[id= x]) + : emtpy_mr_name, + offset, addr); + if (s->mr[idx]) { + r =3D memory_region_dispatch_write(s->mr[idx], + addr, + data, + idc->output_memop, + attrs); + } + trace_interleaver_write_exit(size, data, memresult_str[r]); + + return r; +} + +static void interleaver_realize(DeviceState *dev, Error **errp) +{ + InterleaverDeviceState *s =3D INTERLEAVER_DEVICE(dev); + InterleaverDeviceClass *idc =3D INTERLEAVER_DEVICE_GET_CLASS(dev); + uint64_t expected_mr_size; + + if (s->size =3D=3D 0) { + error_setg(errp, "property 'size' not specified or zero"); + return; + } + if (!QEMU_IS_ALIGNED(s->size, idc->input_access_size)) { + error_setg(errp, "property 'size' must be multiple of %u", + idc->input_access_size); + return; + } + + expected_mr_size =3D s->size / idc->mr_count; + for (unsigned i =3D 0; i < idc->mr_count; i++) { + if (s->mr[i] && memory_region_size(s->mr[i]) !=3D expected_mr_size= ) { + error_setg(errp, + "memory region #%u (%s) size mismatches interleaver= ", + i, memory_region_name(s->mr[i])); + return; + } + } + memory_region_init_io(&s->iomem, OBJECT(s), &idc->ops, s, + idc->name, s->size); + sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->iomem); +} + +static Property interleaver_properties[] =3D { + DEFINE_PROP_UINT64("size", InterleaverDeviceState, size, 0), + DEFINE_PROP_END_OF_LIST(), +}; + +static void interleaver_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + dc->realize =3D interleaver_realize; + device_class_set_props(dc, interleaver_properties); + set_bit(DEVICE_CATEGORY_MISC, dc->categories); +} + +static void interleaver_class_add_properties(ObjectClass *oc, + unsigned input_bits, + unsigned output_bits) +{ + InterleaverDeviceClass *idc =3D INTERLEAVER_DEVICE_CLASS(oc); + + idc->name =3D g_strdup_printf("interleaver-%ux%u", input_bits, output_= bits); + idc->input_access_size =3D input_bits >> 3; + idc->output_access_size =3D output_bits >> 3; + idc->output_memop =3D size_memop(idc->output_access_size); + idc->mr_count =3D input_bits / output_bits; + idc->ops =3D (MemoryRegionOps){ + .read_with_attrs =3D interleaver_read, + .write_with_attrs =3D interleaver_write, + .valid.min_access_size =3D 1, + .valid.max_access_size =3D idc->input_access_size, + .impl.min_access_size =3D idc->output_access_size, + .impl.max_access_size =3D idc->output_access_size, + .endianness =3D DEVICE_NATIVE_ENDIAN, + }; + + for (unsigned i =3D 0; i < idc->mr_count; i++) { + g_autofree char *name =3D g_strdup_printf("mr%u", i); + object_class_property_add_link(oc, name, TYPE_MEMORY_REGION, + offsetof(InterleaverDeviceState, mr= [i]), + qdev_prop_allow_set_link_before_rea= lize, + OBJ_PROP_LINK_STRONG); + } +} + +static void interleaver_16x8_class_init(ObjectClass *oc, void *data) +{ + interleaver_class_add_properties(oc, 16, 8); +}; + +static void interleaver_32x8_class_init(ObjectClass *oc, void *data) +{ + interleaver_class_add_properties(oc, 32, 8); +}; + +static void interleaver_32x16_class_init(ObjectClass *oc, void *data) +{ + interleaver_class_add_properties(oc, 32, 16); +}; + +static void interleaver_64x8_class_init(ObjectClass *oc, void *data) +{ + interleaver_class_add_properties(oc, 64, 8); +}; + +static void interleaver_64x16_class_init(ObjectClass *oc, void *data) +{ + interleaver_class_add_properties(oc, 64, 16); +}; + +static void interleaver_64x32_class_init(ObjectClass *oc, void *data) +{ + interleaver_class_add_properties(oc, 64, 32); +}; + +static const TypeInfo interleaver_device_types[] =3D { + { + .name =3D TYPE_INTERLEAVER_16X8_DEVICE, + .parent =3D TYPE_INTERLEAVER_DEVICE, + .class_init =3D interleaver_16x8_class_init, + }, { + .name =3D TYPE_INTERLEAVER_32X8_DEVICE, + .parent =3D TYPE_INTERLEAVER_DEVICE, + .class_init =3D interleaver_32x8_class_init, + }, { + .name =3D TYPE_INTERLEAVER_32X16_DEVICE, + .parent =3D TYPE_INTERLEAVER_DEVICE, + .class_init =3D interleaver_32x16_class_init, + }, { + .name =3D TYPE_INTERLEAVER_64X8_DEVICE, + .parent =3D TYPE_INTERLEAVER_DEVICE, + .class_init =3D interleaver_64x8_class_init, + }, { + .name =3D TYPE_INTERLEAVER_64X16_DEVICE, + .parent =3D TYPE_INTERLEAVER_DEVICE, + .class_init =3D interleaver_64x16_class_init, + }, { + .name =3D TYPE_INTERLEAVER_64X32_DEVICE, + .parent =3D TYPE_INTERLEAVER_DEVICE, + .class_init =3D interleaver_64x32_class_init, + }, { + .name =3D TYPE_INTERLEAVER_DEVICE, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(InterleaverDeviceState), + .class_size =3D sizeof(InterleaverDeviceClass), + .class_init =3D interleaver_class_init, + .abstract =3D true, + } +}; + +DEFINE_TYPES(interleaver_device_types) diff --git a/MAINTAINERS b/MAINTAINERS index 0886eb3d2b..1efce3dd27 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1961,6 +1961,12 @@ S: Maintained F: include/hw/misc/empty_slot.h F: hw/misc/empty_slot.c =20 +Interleaver device +M: Philippe Mathieu-Daud=C3=A9 +S: Maintained +F: include/hw/misc/interleaver.h +F: hw/misc/interleaver.c + Standard VGA M: Gerd Hoffmann S: Maintained diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 92c397ca07..7ed0f4ccc7 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -21,6 +21,10 @@ config SGA bool depends on ISA_BUS =20 +config INTERLEAVER + bool + default y + config ISA_TESTDEV bool default y if TEST_DEVICES diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs index 6be3d255ab..aa753a847f 100644 --- a/hw/misc/Makefile.objs +++ b/hw/misc/Makefile.objs @@ -12,6 +12,7 @@ common-obj-$(CONFIG_PCA9552) +=3D pca9552.o common-obj-$(CONFIG_UNIMP) +=3D unimp.o common-obj-$(CONFIG_EMPTY_SLOT) +=3D empty_slot.o common-obj-$(CONFIG_FW_CFG_DMA) +=3D vmcoreinfo.o +common-obj-$(CONFIG_INTERLEAVER) +=3D interleaver.o =20 # ARM devices common-obj-$(CONFIG_PL310) +=3D arm_l2x0.o diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 066752aa90..1b0db146b4 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -217,3 +217,9 @@ grlib_apb_pnp_read(uint64_t addr, uint32_t value) "APB = PnP read addr:0x%03"PRIx6 # pca9552.c pca955x_gpio_status(const char *description, const char *buf) "%s GPIOs 0-= 15 [%s]" pca955x_gpio_change(const char *description, unsigned id, unsigned prev_st= ate, unsigned current_state) "%s GPIO id:%u status: %u -> %u" + +# interleaver.c +interleaver_read_enter(unsigned input_access_size, unsigned output_access_= size, unsigned size, unsigned mr_count, unsigned index, const char *mr_name= , uint64_t in_addr, uint64_t out_addr) "rd ixs:%u oxs:%u sz:%u mr_cnt:%u mr= _idx:%u mr_name:'%s' iadr:0x%"PRIx64" oadr:0x%"PRIx64 +interleaver_read_exit(unsigned size, uint64_t value, const char *result) "= rd size:%u value:0x%08"PRIx64" result: %s" +interleaver_write_enter(unsigned input_access_size, unsigned output_access= _size, unsigned size, unsigned mr_count, unsigned index, const char *mr_nam= e, uint64_t in_addr, uint64_t out_addr) "wr ixs:%u oxs:%u sz:%u mr_cnt:%u m= r_idx:%u mr_name:'%s' iadr:0x%"PRIx64" oadr:0x%"PRIx64 +interleaver_write_exit(unsigned size, uint64_t value, const char *result) = "wr size:%u value:0x%08"PRIx64" result: %s" --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597684335; cv=none; d=zohomail.com; s=zohoarc; b=cGtoLdhNXIOqKIEmvwH8mhH4EWFIz+NzcniauHMQMCweOLvXj5MA9A/J9dmqBc2q2t2/7D821FheEGMvdq84RjcmoSqFn0sNbQaulurmFUbV5fROJAcNWOxNP87nIF+OPJv+q03IrWHkXlarNfbhIzJiW4if6LrorkX7ebCRaJQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597684335; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nze7jC5IQ7XtWKm+MoCag4YtUZHhhwLInYZxRLq04cU=; b=dyHx/DvqE+N9OsIVyBsjzPQSynoF77VCiMl1S9uSDvb5g/GqJWL1ZixrwUj+GWocSV9KzKap8sQybwCy05iPHErmTtoZiBaZT3fv4q18zdT1j2nWEd1zQXftjVXPv7tMnvYoFuWgzRIEsZLHvxP0AxJHN4EfrwIZMEexxoK0ywg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597684335279844.3047143112025; Mon, 17 Aug 2020 10:12:15 -0700 (PDT) Received: from localhost ([::1]:50984 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7huB-0000Je-IZ for importer@patchew.org; Mon, 17 Aug 2020 12:22:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqp-0002AT-3p for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:13 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:37961) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqj-00053p-TA for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:07 -0400 Received: by mail-wr1-x443.google.com with SMTP id a14so15590994wra.5 for ; Mon, 17 Aug 2020 09:19:05 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.19.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:19:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nze7jC5IQ7XtWKm+MoCag4YtUZHhhwLInYZxRLq04cU=; b=njsTThucngzHh2Tk7Ax39O7kyKvHY1wSwos0lAUWHjgIhISdzUYsSqsyLD/k43KwCZ UqFkvSARUi+tcp5VvIfEmEG0A0ItdYB7oMg+jjq/9zy1/j+M+hyFwZYp1gInWxUNYPn9 FUg+iIF1VvRWt8trjUIK1TrJNRH7DG7y7WpLNIdfzT7E2u60X2JjsTebHbMfOalJzu2q UN+QGsnqa+RgSk7jGAW0w1Q87+Zbguu8GY7Yt/6tS90hQ6hfJWsJGzjhHOs4+9nSVVsu fKjbzzN319knRW+8GcNPVRWC/PdeVJAix9NGzR+sV35kGB1VbfLBvjNtirPtdQPhhgRM Ldog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=nze7jC5IQ7XtWKm+MoCag4YtUZHhhwLInYZxRLq04cU=; b=tMhycbcN66il40mMJJ5CkbYJmxZwqYk2SYVNUtTcQS8WOkixZhSudZroaEKIN23HlD bMc+POSwxwVcPwR/yzCwwgPzOIlvySUQoPR/4Cz1l2yRlnDqXD3EY2HzdeYsyrL7A4nw Qk+Qm+30gAonDIHwlKVUtzYvX63e8svclQ6Kuy8kK/ONH/DsGgShrqLyJZpG5msM58NU xZViyrG5t5O6kMy1yj4EVIvv6bXAMhMkQ6HLjtX97BGw6B2N3Zoj+pctPPg6DW/j8Abs JLAJbfeflXAJKuF8mRABmjag6zWow/VzVrPqyZEk6PECFj39H48cqPwhtxMmnLqyw8aD bQwA== X-Gm-Message-State: AOAM531Z3RrnkA/9v1JeZNzUXD5U48SphmpYnoGlJ5nK23mezq/9JaR2 w0G3LxMX6LSN+i84WIkyd60IGjaCO1E= X-Google-Smtp-Source: ABdhPJzBfWzVkTijcjrSAnSjtyrnoRhC3aWNnHw8VMDLaSSSXAtNIY9fQddXC9jVAs1pK4ziN79eOw== X-Received: by 2002:adf:f8d0:: with SMTP id f16mr17220377wrq.66.1597681144195; Mon, 17 Aug 2020 09:19:04 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 5/9] hw/misc: Add MMIO test device Date: Mon, 17 Aug 2020 18:18:49 +0200 Message-Id: <20200817161853.593247-6-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::443; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Add a MMIO test device handy to test QEMU internal devices via MMIO accesses. This device is meant to be run by the 'none' machine, thus no CPU is required. So far it is only useful to test the interleaver device. A SRAM region is split into 256B subregions, and these subregions are mapped at different addresses in an interleaved setup. All the following (INPUT x OUTPUT) configurations can be tested: 16x8, 32x8, 32x16, 64x8, 64x16 and 64x32. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/misc/testdev.h | 15 ++++ hw/misc/mmio-testdev.c | 146 ++++++++++++++++++++++++++++++++++++++ MAINTAINERS | 2 + hw/misc/Kconfig | 5 ++ hw/misc/Makefile.objs | 1 + 5 files changed, 169 insertions(+) create mode 100644 include/hw/misc/testdev.h create mode 100644 hw/misc/mmio-testdev.c diff --git a/include/hw/misc/testdev.h b/include/hw/misc/testdev.h new file mode 100644 index 0000000000..2ff47d2766 --- /dev/null +++ b/include/hw/misc/testdev.h @@ -0,0 +1,15 @@ +/* + * QEMU MMIO test device + * + * Copyright (C) 2020 Philippe Mathieu-Daud=C3=A9 + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_MISC_TESTDEV_H +#define HW_MISC_TESTDEV_H + +#define TYPE_MMIO_TESTDEV "mmio-testdev" + +#endif + diff --git a/hw/misc/mmio-testdev.c b/hw/misc/mmio-testdev.c new file mode 100644 index 0000000000..3b7a8057b2 --- /dev/null +++ b/hw/misc/mmio-testdev.c @@ -0,0 +1,146 @@ +/* + * QEMU MMIO test device + * + * Copyright (C) 2020 Philippe Mathieu-Daud=C3=A9 + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +/* + * This device is mostly used to test QEMU internal MMIO devices. + * Accesses using CPU core are not allowed. + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qapi/error.h" +#include "hw/qdev-properties.h" +#include "hw/sysbus.h" +#include "exec/address-spaces.h" +#include "hw/misc/testdev.h" +#include "hw/misc/interleaver.h" + +/* + * Device Memory Map: + * + * offset size description + * ---------- ---------- -------------------- + * 0x00000000 [ 2 KiB] SRAM (8 banks of 256B) + * 0x10000000 [ 128 MiB] interleaved-container + * 0x11608000 [ 4 KiB] interleaved-16x8 (each device interleaves the = sram) + * 0x13208000 [ 8 KiB] interleaved-32x8 " + * 0x13216000 [ 4 KiB] interleaved-32x16 " + * 0x16408000 [ 16 KiB] interleaved-64x8 " + * 0x16416000 [ 8 KiB] interleaved-64x16 " + * 0x16432000 [ 4 KiB] interleaved-64x32 " + * 0x20000000 [ 256 MiB] container + * + * All gap regions are reserved. + */ + +typedef struct MmioTestDevice { + /*< private >*/ + SysBusDevice parent_obj; + /*< public >*/ + + MemoryRegion container; + MemoryRegion sram; + MemoryRegion sram_alias[8]; + MemoryRegion interleaver_container; + MemoryRegion iomem; + + uint64_t base; +} MmioTestDevice; + +#define TESTDEV(obj) \ + OBJECT_CHECK(MmioTestDevice, (obj), TYPE_MMIO_TESTDEV) + +static void mmio_testdev_realize(DeviceState *dev, Error **errp) +{ + static const unsigned bhexs[] =3D { + [8] =3D 0x8, [16] =3D 0x16, [32] =3D 0x32, [64] =3D 0x64, + }; + static const struct { + unsigned in, out; + const char *typename; + } cfg[] =3D { + {16, 8, TYPE_INTERLEAVER_16X8_DEVICE}, + {32, 8, TYPE_INTERLEAVER_32X8_DEVICE}, + {32, 16, TYPE_INTERLEAVER_32X16_DEVICE}, + {64, 8, TYPE_INTERLEAVER_64X8_DEVICE}, + {64, 16, TYPE_INTERLEAVER_64X16_DEVICE}, + {64, 32, TYPE_INTERLEAVER_64X32_DEVICE}, + }; + MmioTestDevice *s =3D TESTDEV(dev); + DeviceState *interleaver; + + if (s->base =3D=3D UINT64_MAX) { + error_setg(errp, "property 'address' not specified or zero"); + return; + } + + memory_region_init(&s->container, OBJECT(s), "testdev", 0x20000000); + + memory_region_init_ram(&s->sram, OBJECT(s), "testdev-sram", + 0x800, &error_fatal); + memory_region_add_subregion(&s->container, 0x000000, &s->sram); + + /* interleaved memory */ + memory_region_init(&s->interleaver_container, OBJECT(s), + "interleaver-container", 0x8000000); + memory_region_add_subregion(&s->container, 0x10000000, + &s->interleaver_container); + for (unsigned i =3D 0; i < 8; i++) { + g_autofree char *name =3D g_strdup_printf("sram-p%u", i); + /* Each alias access a 256B region of the SRAM */ + memory_region_init_alias(&s->sram_alias[i], OBJECT(s), name, + &s->sram, i * 0x100, 0x100); + } + for (size_t i =3D 0; i < ARRAY_SIZE(cfg); i++) { + unsigned count =3D cfg[i].in / cfg[i].out; + + interleaver =3D qdev_new(cfg[i].typename); + qdev_prop_set_uint64(interleaver, "size", count * 0x100); + /* Map 256B SRAM regions on interleaver banks */ + for (unsigned c =3D 0; c < count; c++) { + g_autofree char *prop_name =3D g_strdup_printf("mr%u", c); + object_property_set_link(OBJECT(interleaver), prop_name, + OBJECT(&s->sram_alias[c]), &error_abo= rt); + } + sysbus_realize_and_unref(SYS_BUS_DEVICE(interleaver), &error_fatal= ); + memory_region_add_subregion(&s->interleaver_container, + (bhexs[cfg[i].in] << 20) | (bhexs[cfg[i].out] << 12), + sysbus_mmio_get_region(SYS_BUS_DEVICE(interleaver), 0)); + } + + memory_region_add_subregion(get_system_memory(), s->base, &s->containe= r); +} + +static Property mmio_testdev_properties[] =3D { + DEFINE_PROP_UINT64("address", MmioTestDevice, base, UINT64_MAX), + DEFINE_PROP_END_OF_LIST(), +}; + +static void mmio_testdev_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D mmio_testdev_realize; + dc->user_creatable =3D true; + device_class_set_props(dc, mmio_testdev_properties); + set_bit(DEVICE_CATEGORY_MISC, dc->categories); +} + +static const TypeInfo mmio_testdev_info =3D { + .name =3D TYPE_MMIO_TESTDEV, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(MmioTestDevice), + .class_init =3D mmio_testdev_class_init, +}; + +static void mmio_testdev_register_types(void) +{ + type_register_static(&mmio_testdev_info); +} + +type_init(mmio_testdev_register_types) diff --git a/MAINTAINERS b/MAINTAINERS index 1efce3dd27..f75b8c984a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1966,6 +1966,8 @@ M: Philippe Mathieu-Daud=C3=A9 S: Maintained F: include/hw/misc/interleaver.h F: hw/misc/interleaver.c +F: hw/misc/mmio-testdev.c +F: include/hw/misc/testdev.h =20 Standard VGA M: Gerd Hoffmann diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 7ed0f4ccc7..5b101abeea 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -30,6 +30,11 @@ config ISA_TESTDEV default y if TEST_DEVICES depends on ISA_BUS =20 +config MMIO_TESTDEV + bool + default y if TEST_DEVICES + depends on INTERLEAVER + config PCI_TESTDEV bool default y if TEST_DEVICES diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs index aa753a847f..b3e7da7177 100644 --- a/hw/misc/Makefile.objs +++ b/hw/misc/Makefile.objs @@ -5,6 +5,7 @@ common-obj-$(CONFIG_TMP421) +=3D tmp421.o common-obj-$(CONFIG_ISA_DEBUG) +=3D debugexit.o common-obj-$(CONFIG_SGA) +=3D sga.o common-obj-$(CONFIG_ISA_TESTDEV) +=3D pc-testdev.o +common-obj-$(CONFIG_MMIO_TESTDEV) +=3D mmio-testdev.o common-obj-$(CONFIG_PCI_TESTDEV) +=3D pci-testdev.o common-obj-$(CONFIG_EDU) +=3D edu.o common-obj-$(CONFIG_PCA9552) +=3D pca9552.o --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597682874; cv=none; d=zohomail.com; s=zohoarc; b=jPn3DvRK7CQ92IIu/LLtleSAAOh54AaZUl64Yp7owx0w246Qp5RnpVTCrIi+mWxmfUeMSPR1m2fWHn/ZVqFyyxk8FfYB9HR9rut+UjUmXrY2Ps+deTSZLFY3IQvdlnK3KSirpkqW7trOsUNSPebXp4Z55Md4NF9tPC1prKIVrjw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597682874; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QI5AKzPXefPD6C1P2HIGbpvr66qRwSQ3EEuHj7Lej/I=; b=OVz+MPPR0bJpZ95Nu59wFJyPq3LW8D/6O0/fJhHzPDHeHYnl7s2pUEmjqN5jL3xxBmfoQdQ65IsuUi6uVgnq8J9BYu12wbyEzHw9jm9/dlLUFVsxwPCoC3yzo2Ei/LIZiP6GcKu84FNhZqNX45r72NH44QAw4UedZgOqcwyCnas= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597682874888334.66779655392145; Mon, 17 Aug 2020 09:47:54 -0700 (PDT) Received: from localhost ([::1]:57876 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7hvF-0003DH-RF for importer@patchew.org; Mon, 17 Aug 2020 12:23:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42544) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqs-0002BI-AM for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:14 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:40824) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqo-00053z-RF for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:12 -0400 Received: by mail-wm1-x342.google.com with SMTP id k20so14379679wmi.5 for ; Mon, 17 Aug 2020 09:19:06 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.19.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:19:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QI5AKzPXefPD6C1P2HIGbpvr66qRwSQ3EEuHj7Lej/I=; b=D8zLcOP8SgEDDsfeLWeOgI0+kBHIkY0pD/vY8p1onfYQBK/ecqKCIDdsDE7uYEoe/h NkuFtR6KirTap4cebT00wPZqu6YphiuxouMRxrx08lAree28CzlWqBlidQN/CqZrHV4q f9mqDZqi0xNjKaKTuiBHxwLTQyi0a0UhevXhLPuR1VnjnEyVdoz/DzNN0W1GnlY9zf/v ot90y6AYIK4R3pmx7tKJbPd27D0E1v9N3XUILbuKbhkTkOVY/NpfkZUp86xcoIJ/OsvX OhCsdNsTY7KXs8+d77B7/hKOOAiEgPlx/OFS0FYuDulrhH5mbXLhBo9LSWyZLsiwQIDq zysg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=QI5AKzPXefPD6C1P2HIGbpvr66qRwSQ3EEuHj7Lej/I=; b=AF18qFbNdb6mnP9jc+uDlZDr5Gdpht/IawxMxssu+/jtE+AsaYH/IlImY3XZ/iRNc9 YeCk2jVFQZZfoS3nhwEaA54YyGil0i3SRwhjCM5+qba30XYCHla5AFoey8HWyUZrPwCK EeHbR10//dqkqQ8zE0gfeHydgjMLn4+NrmVUznICKisnZwNYyihGMs4w0QQy4HehvWlw GNa7GB/6fuLnTEvQCXP54kUDLJu6SR4znAC4QOJLd0mE5nXn6HzLPYGGtE+69rbko+up HsRPn8o8j6jKYQuyruanxjQca+2HBHGofulZXvuG8DKuyEoilTKDROxdQMI+EyeGMqcJ VkWA== X-Gm-Message-State: AOAM532hyjxafQkiV2ybpq48nOJNTP9ckvrj7z0KblmTGDNm9R6i4/+x ze4x5o+HsFS/WhD0z3sm5eCYR+R/7/w= X-Google-Smtp-Source: ABdhPJyznKOlxofdVg2m2sx9zQ/89hMh6/9LHRoTQzrE/frRBIItaLGD4zoMegJhes1fXUKYmc43gw== X-Received: by 2002:a1c:4d16:: with SMTP id o22mr263754wmh.131.1597681145612; Mon, 17 Aug 2020 09:19:05 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 6/9] hw/core/null-machine: Allow to use the MMIO 'test' device Date: Mon, 17 Aug 2020 18:18:50 +0200 Message-Id: <20200817161853.593247-7-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::342; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) The MMIO 'test' device (TYPE_MMIO_TESTDEV) can be mapped almost anywhere on the sysbus memory. Allow the 'none' machine to instantiate it from the command line, such: $ qemu-system-sh4 -M none -monitor stdio \ -device mmio-testdev,address=3D0x00000000 -monitor stdio (qemu) info mtree address-space: memory 0000000000000000-ffffffffffffffff (prio 0, i/o): system 0000000000000000-000000001fffffff (prio 0, i/o): testdev 0000000000000000-00000000000007ff (prio 0, ram): testdev-sram 0000000010000000-0000000017ffffff (prio 0, i/o): interleaver-contai= ner 0000000011608000-00000000116081ff (prio 0, i/o): interleaver-16x8 0000000013208000-00000000132083ff (prio 0, i/o): interleaver-32x8 0000000013216000-00000000132161ff (prio 0, i/o): interleaver-32x16 0000000016408000-00000000164087ff (prio 0, i/o): interleaver-64x8 0000000016416000-00000000164163ff (prio 0, i/o): interleaver-64x16 0000000016432000-00000000164321ff (prio 0, i/o): interleaver-64x32 Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/core/null-machine.c | 2 ++ hw/misc/mmio-testdev.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c index 7e693523d7..d8be17092f 100644 --- a/hw/core/null-machine.c +++ b/hw/core/null-machine.c @@ -17,6 +17,7 @@ #include "sysemu/sysemu.h" #include "exec/address-spaces.h" #include "hw/core/cpu.h" +#include "hw/misc/testdev.h" =20 static void machine_none_init(MachineState *mch) { @@ -55,6 +56,7 @@ static void machine_none_machine_init(MachineClass *mc) mc->no_floppy =3D 1; mc->no_cdrom =3D 1; mc->no_sdcard =3D 1; + machine_class_allow_dynamic_sysbus_dev(mc, TYPE_MMIO_TESTDEV); } =20 DEFINE_MACHINE("none", machine_none_machine_init) diff --git a/hw/misc/mmio-testdev.c b/hw/misc/mmio-testdev.c index 3b7a8057b2..42eed16f2d 100644 --- a/hw/misc/mmio-testdev.c +++ b/hw/misc/mmio-testdev.c @@ -9,6 +9,10 @@ /* * This device is mostly used to test QEMU internal MMIO devices. * Accesses using CPU core are not allowed. + * + * This device is meant to be used for testing, like: + * + * qemu-system-sh4 -M none -device mmio-testdev,address=3D0x10000000 */ =20 #include "qemu/osdep.h" --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597684119; cv=none; d=zohomail.com; s=zohoarc; b=S3R65XWg1DAzTgb6v5K5hCddKlwNRSA46ovLByIKJs/fToJsxU/7FSW1trIxk1wZwK1AssPtAQHhHftvMaADgeCsQF5EinRNPZjbjNw28fD6+pnXefyzm52aQXR5U5cgh966QNEObgSUMYUJ2QGpVULwuUUaYKXymsACcZ08AxQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597684119; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ObJNJE/1Ce4anWxkpsO1TM66WWuyMS9eIMcj33K+RL0=; b=T4A39eXUTYTjLiCkyATtYgdZjo31sWsqquozKvrM4qb01EJQUJnkltswpzrKDN5cU622E5EnAb1TijtmhDnszoSUEwSJRf6JKkAc9M+4XwndnyR3LCgrIhHCdfJu5XJLf4OGkI4ZRKd4VD2Zh/sg0Lq4VIYVpbLQsYhO2RFcFzQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597684119185167.85098326954937; Mon, 17 Aug 2020 10:08:39 -0700 (PDT) Received: from localhost ([::1]:59676 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7hva-0003w4-Nr for importer@patchew.org; Mon, 17 Aug 2020 12:24:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqs-0002BN-Bi for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:14 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:46808) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqo-00054M-RT for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:12 -0400 Received: by mail-wr1-x441.google.com with SMTP id r15so5658937wrp.13 for ; Mon, 17 Aug 2020 09:19:08 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.19.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:19:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ObJNJE/1Ce4anWxkpsO1TM66WWuyMS9eIMcj33K+RL0=; b=NZz8f4n2WNcCIEUeLAFpFJ2qj5veUi76cE+hvQl3c1EQkiuEfdwM2EQDY3UAenbTzs DJY90Bhktu66WxdQ0Nwlmg+EaZUqT5Qdnqmz3WJ1ovVsgs222d4RCNGU7u3jiX6qNuKq T91LAjskDMo1/3ysP7Tad8NR1fiHOL0OAYbgF7WU6Zee6xH1hUgOXkcR9agsq+yRuvrh pwQ7j0ricqAPs/2BV2oBaDeS2i17LqYl8ybnwo764jjhRVXnvH5NOzoRbGhLmQ/FzWMD 0KxAj3diF/U1maOCYZ09i2nTMB7vupXOYWu4ZrowuNPfgjfwk1dTvsoKzCw4LwQsbd/l ThuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ObJNJE/1Ce4anWxkpsO1TM66WWuyMS9eIMcj33K+RL0=; b=Q3LdzknU2Hie5xb3rHbkfoDeP4VvTIsH2ZcKJv2VYeoTTo5Xug6mGkgyBKFitfqde5 pJjIKErQ5CH+FoiQocEYO0L51A/E1Xxytus/CcJ/5JaZiOtZn/rXNdhc9QzjeLnJzTcs Dj/x63BXUYCqLy0tTuU1gqXHZZgDdSVcP/LXRpSLRomHJm7cRCJLJFwKWv3vzB9e7yXb VXSdsMpGJnlB+dNomG6r67F8iRVbWehL5GwtxHZ09WQV9GcB3XjJ4zOjkd7Mq7VWch1N yPpLFbkVlWfhjl1Xg1jhZ6Zd43qmL9I9sUmSW37DGaysh3frhpEDeLiT9TJSEVX/YD+8 PpBA== X-Gm-Message-State: AOAM530nKe9sLl/Oip24o68dvimS51/AezWkq/+J4Lff0F0qzzuUiu+y KnLe5qIcOjehd6M45ClpqCl9N+46A6g= X-Google-Smtp-Source: ABdhPJzNyhSHNxrR9lz1MYElSPqQzbnxH71HC1fzxDgPou8xJCzbjOF24ed4HJh46hOvK7xdr7m+kw== X-Received: by 2002:adf:e9cd:: with SMTP id l13mr17692877wrn.340.1597681147041; Mon, 17 Aug 2020 09:19:07 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 7/9] tests/qtest: Add generic MMIO tests Date: Mon, 17 Aug 2020 18:18:51 +0200 Message-Id: <20200817161853.593247-8-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::441; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Add generic MMIO tests (which don't need any particular knowledge about the architecture) and can be run without any CPU (using the 'none' machine). Start testing the interleaved memory accesses. Cross-endianess is not tested (host and target must have the same endianess). Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- tests/qtest/mmio-test.c | 146 +++++++++++++++++++++++++++++++++++ MAINTAINERS | 1 + tests/qtest/Makefile.include | 1 + 3 files changed, 148 insertions(+) create mode 100644 tests/qtest/mmio-test.c diff --git a/tests/qtest/mmio-test.c b/tests/qtest/mmio-test.c new file mode 100644 index 0000000000..7a31eb8e9d --- /dev/null +++ b/tests/qtest/mmio-test.c @@ -0,0 +1,146 @@ +/* + * QTest testcases for generic MMIO accesses + * + * Copyright (C) 2020 Philippe Mathieu-Daud=C3=A9 + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" + +#include "libqtest.h" +#include "qemu/bswap.h" + +/* Must fit in arch address space */ +static const uint64_t base =3D 0x20000000ul; + +static bool is_cross_endian(QTestState *qts) +{ + bool te =3D qtest_big_endian(qts); +#ifdef HOST_WORDS_BIGENDIAN + te =3D !te; +#endif + return te; +} + +static QTestState *create_interleaver_qtest(void) +{ + QTestState *qts; + + qts =3D qtest_initf("-M none -device mmio-testdev,address=3D0x%" PRIx6= 4, base); + if (is_cross_endian(qts)) { + g_test_skip("Skipping on cross-endian targets"); + qtest_quit(qts); + return NULL; + } + return qts; +} + +static void test_interleaver_rd32x8a(void) +{ + QTestState *qts =3D create_interleaver_qtest(); + + if (!qts) { + return; + } + + /* write sram directly */ + qtest_writeb(qts, base + 0x000, 0x10); + qtest_writeb(qts, base + 0x100, 0x32); + qtest_writeb(qts, base + 0x200, 0x54); + qtest_writeb(qts, base + 0x300, 0x76); + /* read via interleaver */ + g_assert_cmphex(qtest_readl(qts, base + 0x13208000 + 0x00), =3D=3D, 0x= 76543210); + qtest_quit(qts); +} + +static void test_interleaver_rd32x8b(void) +{ + QTestState *qts =3D create_interleaver_qtest(); + + if (!qts) { + return; + } + + /* write sram directly */ + qtest_writeb(qts, base + 0x003, 0x10); + qtest_writeb(qts, base + 0x103, 0x32); + qtest_writeb(qts, base + 0x203, 0x54); + qtest_writeb(qts, base + 0x303, 0x76); + /* read via interleaver */ + g_assert_cmphex(qtest_readl(qts, base + 0x13208000 + 0x0c), =3D=3D, 0x= 76543210); + qtest_quit(qts); +} + +static void test_interleaver_rd32x16(void) +{ + QTestState *qts =3D create_interleaver_qtest(); + + if (!qts) { + return; + } + + /* write sram directly */ + qtest_writew(qts, base + 0x002, 0x3210); + qtest_writew(qts, base + 0x102, 0x7654); + /* read via interleaver */ + g_assert_cmphex(qtest_readl(qts, base + 0x13216000 + 0x04), =3D=3D, 0x= 76543210); + qtest_quit(qts); +} + +static void test_interleaver_wr32x16(void) +{ + QTestState *qts =3D create_interleaver_qtest(); + + if (!qts) { + return; + } + + /* write via interleaver */ + qtest_writel(qts, base + 0x13216000 + 0x04, 0x76543210); + /* read sram directly */ + g_assert_cmphex(qtest_readw(qts, base + 0x002), =3D=3D, 0x3210); + g_assert_cmphex(qtest_readw(qts, base + 0x102), =3D=3D, 0x7654); + qtest_quit(qts); +} + +static void test_interleaver_wr64x8(void) +{ + QTestState *qts =3D create_interleaver_qtest(); + + if (!qts) { + return; + } + + /* write via interleaver */ + qtest_writeq(qts, base + 0x16408000 + 0x08, 0x9876543210); + /* read sram directly */ + g_assert_cmphex(qtest_readb(qts, base + 0x001), =3D=3D, 0x10); + g_assert_cmphex(qtest_readb(qts, base + 0x101), =3D=3D, 0x32); + g_assert_cmphex(qtest_readb(qts, base + 0x401), =3D=3D, 0x98); + qtest_quit(qts); +} + +static struct { + const char *name; + void (*test)(void); +} tests[] =3D { + {"interleaver/rd32x8a", test_interleaver_rd32x8a}, + {"interleaver/rd32x8b", test_interleaver_rd32x8b}, + {"interleaver/rd32x16", test_interleaver_rd32x16}, + {"interleaver/wr32x16", test_interleaver_wr32x16}, + {"interleaver/wr64x8", test_interleaver_wr64x8}, +}; + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + for (size_t i =3D 0; i < ARRAY_SIZE(tests); i++) { + g_autofree gchar *path =3D g_strdup_printf("mmio/%s", + tests[i].name); + qtest_add_func(path, tests[i].test); + } + + return g_test_run(); +} diff --git a/MAINTAINERS b/MAINTAINERS index f75b8c984a..93efef1b87 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1968,6 +1968,7 @@ F: include/hw/misc/interleaver.h F: hw/misc/interleaver.c F: hw/misc/mmio-testdev.c F: include/hw/misc/testdev.h +F: tests/qtest/mmio-test.c =20 Standard VGA M: Gerd Hoffmann diff --git a/tests/qtest/Makefile.include b/tests/qtest/Makefile.include index b0204e44f2..29dbeb5d05 100644 --- a/tests/qtest/Makefile.include +++ b/tests/qtest/Makefile.include @@ -9,6 +9,7 @@ check-qtest-generic-y +=3D qmp-cmd-test check-qtest-generic-y +=3D qom-test check-qtest-generic-$(CONFIG_MODULES) +=3D modules-test check-qtest-generic-y +=3D test-hmp +check-qtest-generic-$(CONFIG_MMIO_TESTDEV) +=3D mmio-test =20 check-qtest-pci-$(CONFIG_RTL8139_PCI) +=3D rtl8139-test check-qtest-pci-$(CONFIG_VGA) +=3D display-vga-test --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597684932; cv=none; d=zohomail.com; s=zohoarc; b=SlV9JGtMBef2fThZ0y7yC/I5zxrxy6topc0sNGZMHeI0rzAd/tl22LZe3u11UHjqwIjMLkW+pn+f6QmqmJ3E4lr3K6hilkiuKHE4RIyRvRhPpAmCyXldK8rHtEZ3cYNX21y89RWXqJKRxW+XTiTG7aZTFgTgIIUKSYSPEPQBbdo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597684932; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=plE1VE6Cmptms9y5uKWN77PnVRXUiPTsg+WX4/otZwM=; b=SxV2ZgqM9UH3TstaTLWAsF6TWqoRe/fa9PE5QTQY8V20tmq5dpDzwIHKdwEaMQs3OmOwD+4ynYIZVlRQ37ryFW5uXTqb9JYc3WpeeHzttJgfgZ72f7QNE/XG7PsrL5D0wj7cTdLXJWr5iIf5zG78Dg5cCaE0XbeHoasp9MUY20I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597684932691245.02009179485628; Mon, 17 Aug 2020 10:22:12 -0700 (PDT) Received: from localhost ([::1]:38146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7hwr-0006gJ-FK for importer@patchew.org; Mon, 17 Aug 2020 12:25:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42548) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqs-0002BO-CE for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:14 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:52332) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqo-00054S-Sn for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:13 -0400 Received: by mail-wm1-x344.google.com with SMTP id x5so13719280wmi.2 for ; Mon, 17 Aug 2020 09:19:09 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.19.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:19:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=plE1VE6Cmptms9y5uKWN77PnVRXUiPTsg+WX4/otZwM=; b=S/fUm4niNwm42hXAIu/ctYgC2siXAP0ERNysPpmmTHq/uN5pRKo0HHzHlj1Sb/9UyS UyALFrPMtpKiRZQSOLytUnlYPeImxbhhVlKvmT5ATNBIDA79TJAK+x2Ggdg083nvIizO b/FLIY1jrmFJ/eXhfBVbcnu2zB4yPhy6d87nPPOH5qqKlcb5g7g7tjJHUL8LBok6Pxoq zIjVpuaR5ThCk73EkwYGmnjwHLrGJTkCidYkDyVcCF/V1i38gENV1+CYmxGtoNjaqzSc sq2cFRp9VBlnVOnvffWIj36TpWKzWEQAvX6fevfZ/iGToFsev7tpyBJdpTVc7OKcX+SD OlvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=plE1VE6Cmptms9y5uKWN77PnVRXUiPTsg+WX4/otZwM=; b=hRdvGMdibBkpG8DF0DwA83dDBr3mCYo29g0DuFXyf6JoTq43+SGfREsqSkN+/CssN5 J0j5/bd/r6asFxW3MgojwT19+9wKQD+COX+3p8vlag5rrdpDutA7ukaPUe4j3gfm/2VB XEYYMvcIPWdDrfbDh+oNHfW21soN9QMTYJ71gYIt2snZMdoxVxSu++2UOzTWCMVydQqF YiUyDe7bsV//VFi8QciFASg2T2zmHh8mQR15yc27nrzU55ANR9x7D6sldWlKjIvR4CTv CT5fbMKXn+SpkSQpEqdKc9BifjFWmdAII3ZBOgvP+dZNWnaLU2UeGzs4/+B5JEPwtVWV mWtA== X-Gm-Message-State: AOAM531dVzuYNKLAj9vQ8ayqa7lVgqZbSHYAUhVtvg9jd8PhlSc3snHA r6OEUpvWSs4BB8LDhz71SdxApUhpotc= X-Google-Smtp-Source: ABdhPJy8CIGcObH5pKqTSR0lD00fA/l8Gwv/eJT9H+1kH0XYOtDGB9KdhS6n9elwCSgoZoRK7FvO/A== X-Received: by 2002:a1c:7705:: with SMTP id t5mr15878280wmi.112.1597681148617; Mon, 17 Aug 2020 09:19:08 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 8/9] memory: Allow memory region to display its subregions own descriptions Date: Mon, 17 Aug 2020 18:18:52 +0200 Message-Id: <20200817161853.593247-9-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) If a MemoryRegion has subregion linked (but NOT mapped), these subregions won't be displayed in the 'info mtree' HMP command. Add the possibility to display such subregion descriptions. It will result useful for the Interleaver memory device. Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- Any clever idea? --- include/exec/memory.h | 6 ++++++ softmmu/memory.c | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index 307e527835..8bcacfc79e 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -404,6 +404,12 @@ struct MemoryRegion { const char *name; unsigned ioeventfd_nb; MemoryRegionIoeventfd *ioeventfds; + /* + * If a memory region has subregions linked, it can use this + * handler to return an array of string, each string holding + * the subregion description. + */ + GStrv (*subregions_description)(const MemoryRegion *mr); }; =20 struct IOMMUMemoryRegion { diff --git a/softmmu/memory.c b/softmmu/memory.c index 8139da1a58..f8e27edbe2 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -2967,6 +2967,28 @@ static void mtree_print_mr(const MemoryRegion *mr, u= nsigned int level, mtree_print_mr_owner(mr); } qemu_printf("\n"); + + if (mr->subregions_description) { + GStrv s =3D mr->subregions_description(mr); + for (int j =3D 0; s[j]; j++) { + for (i =3D 0; i < level; i++) { + qemu_printf(MTREE_INDENT); + } + qemu_printf(TARGET_FMT_plx "-" TARGET_FMT_plx + " (prio %d, %s%s): %s%s", + cur_start, cur_end, + mr->priority, + mr->nonvolatile ? "nv-" : "", + memory_region_type((MemoryRegion *)mr), + s[j], + mr->enabled ? "" : " [disabled]"); + if (owner) { + mtree_print_mr_owner(mr); + } + qemu_printf("\n"); + } + g_strfreev(s); + } } } =20 --=20 2.26.2 From nobody Sun May 12 05:57:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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 ARC-Seal: i=1; a=rsa-sha256; t=1597686469; cv=none; d=zohomail.com; s=zohoarc; b=EZCrFJldWKVGFZW3cDbu6heI17yV9PdDYO2cqEzVkKFGfFWc/WXNP88BWk79is2yO5EeZp6wOkfweWsyP1/mTxphetxXbv9JY3gz0X0b8vGHywYtXFOuRxHQBxAuzR4MZrI9xRzk7/s6t8dVLezArLWAspTw7UsMHaPqpKjG2Xo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597686469; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+1f1xYxQv9iAMf0ZcH5rNUu+lZAXATbXmvjHTkMEv7U=; b=l6PJfhwFHUUJtoyGOaGuW1jXFv4EFhEr9N7Hr3YojA0wlBCEcPqevPvw3ooJsWZA1xxFABEN4+270riwKTQBWJM0DWtb6Y/YtJ5NJSeKLraHsFEE170VYbrd2jJe1WTp42GkhxjPHPqp1S2KKUtumCt7KJIu0w+tU1ku7tab8RU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597686469783877.9475618691115; Mon, 17 Aug 2020 10:47:49 -0700 (PDT) Received: from localhost ([::1]:60586 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7hvp-0004I8-JE for importer@patchew.org; Mon, 17 Aug 2020 12:24:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42542) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7hqs-0002BG-Bs for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:14 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:33946) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7hqp-00054W-LU for qemu-devel@nongnu.org; Mon, 17 Aug 2020 12:19:13 -0400 Received: by mail-wr1-x441.google.com with SMTP id f7so15593441wrw.1 for ; Mon, 17 Aug 2020 09:19:11 -0700 (PDT) Received: from localhost.localdomain (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id r3sm29535472wro.1.2020.08.17.09.19.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2020 09:19:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+1f1xYxQv9iAMf0ZcH5rNUu+lZAXATbXmvjHTkMEv7U=; b=dlTVE+NTmghw64Lm+wnYk7TGn1R4Vp8z1aApw6/X43aXHgpmkZ1oVzYc5QaXBBpjDr ihLmeb87Qr7vOU92Fp7c5YGzgEe5VqZ5ZatXJo62BadiymvmOFJ5q1Xvx9yPuqWa5cFd MEi2EMV7lg6nrWX/VrW+4gEqFTBRQuMHmsyh3BmqVWdtKxOORfXL3/WlWNfB6MGqItQr YCagRSzKNoH0WAm86s2VLDEfpOitB7DVs0H1108shX4nl5mVcCKTGi3sEKbAAT3+j+3f dk1J7nKCPMhO+ot7+Ti1nvNXKeWy+BmPKNs3fkoHcJF+YAVgVxhj1ZWP+tKgoTZSBHxE u5iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=+1f1xYxQv9iAMf0ZcH5rNUu+lZAXATbXmvjHTkMEv7U=; b=rk4/W7V8NOBaHVVpF5C7HWiSLVVX5KlqU7LiO+q3xKlQ3vtnjJcvNQhf5kHenDuFHN W1LtxpUsdKI4Gy745CMKdUIqgkBNRTiEb5mQfP+zqGWKhNrI3/iR/FT7TeHGKi7bb4f6 z+0dj+CfC2dXQ3GjiTw+XFRYgVIwgYkdxPJaPz+8dNt8SqvUUhIcEsVWvq+quGSIQtI3 L99GTPkw8dVeKOPfmOAjVUgGtIlFf+VWo4Ns9lAOCCW/E+p9s2+mY1UZTcIoH8V7ebOY RhigbEPAI9p7TXFE7tvEsTzJ+lH/eEgYKwnMHB/kUqw5wLOy53Ruc4gEJdqm3NhRT6RF qnJg== X-Gm-Message-State: AOAM530gupWXJYFdctpVpn3Fs3LuRZiGKuz1TdbKIXcJrOcT6WBjSkSl rYav1a8sRXiRo1pmBZ6tQg1CW0hElTk= X-Google-Smtp-Source: ABdhPJzxt76j2R+ep+UDuNQLpMDcMPvtFOCnNPo19YCT/sZBR2a2iWQGumzWTC2vE49T7iAghUcYmw== X-Received: by 2002:adf:e90f:: with SMTP id f15mr16467437wrm.18.1597681150116; Mon, 17 Aug 2020 09:19:10 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org, Stephen Checkoway , Peter Maydell Subject: [RFC PATCH 9/9] hw/misc/interleaver: Display subregions in 'info mtree' Date: Mon, 17 Aug 2020 18:18:53 +0200 Message-Id: <20200817161853.593247-10-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200817161853.593247-1-f4bug@amsat.org> References: <20200817161853.593247-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Type: text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::441; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FORGED_FROMDOMAIN=1, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mark Cave-Ayland , Markus Armbruster , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , "Edgar E . Iglesias" , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Artyom Tarasenko , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Implement the MemoryRegion::subregions_description() handler to be able to display the inverleaved memory regions: $ qemu-system-sh4 -M none -monitor stdio \ -device mmio-testdev,address=3D0x00000000 -monitor stdio address-space: memory 0000000000000000-ffffffffffffffff (prio 0, i/o): system 0000000000000000-000000001fffffff (prio 0, i/o): testdev 0000000000000000-00000000000007ff (prio 0, ram): testdev-sram 0000000010000000-0000000017ffffff (prio 0, i/o): interleaver-contai= ner 0000000011608000-00000000116081ff (prio 0, i/o): interleaver-16x8 0000000011608000-00000000116081ff (prio 0, i/o): 8-bit access o= n 'sram-p0' 0000000011608000-00000000116081ff (prio 0, i/o): 8-bit access o= n 'sram-p1' (8-bit shifted) 0000000013208000-00000000132083ff (prio 0, i/o): interleaver-32x8 0000000013208000-00000000132083ff (prio 0, i/o): 8-bit access o= n 'sram-p0' 0000000013208000-00000000132083ff (prio 0, i/o): 8-bit access o= n 'sram-p1' (8-bit shifted) 0000000013208000-00000000132083ff (prio 0, i/o): 8-bit access o= n 'sram-p2' (16-bit shifted) 0000000013208000-00000000132083ff (prio 0, i/o): 8-bit access o= n 'sram-p3' (24-bit shifted) 0000000013216000-00000000132161ff (prio 0, i/o): interleaver-32x16 0000000013216000-00000000132161ff (prio 0, i/o): 16-bit access = on 'sram-p0' 0000000013216000-00000000132161ff (prio 0, i/o): 16-bit access = on 'sram-p1' (16-bit shifted) 0000000016408000-00000000164087ff (prio 0, i/o): interleaver-64x8 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p0' 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p1' (8-bit shifted) 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p2' (16-bit shifted) 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p3' (24-bit shifted) 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p4' (32-bit shifted) 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p5' (40-bit shifted) 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p6' (48-bit shifted) 0000000016408000-00000000164087ff (prio 0, i/o): 8-bit access o= n 'sram-p7' (56-bit shifted) 0000000016416000-00000000164163ff (prio 0, i/o): interleaver-64x16 0000000016416000-00000000164163ff (prio 0, i/o): 16-bit access = on 'sram-p0' 0000000016416000-00000000164163ff (prio 0, i/o): 16-bit access = on 'sram-p1' (16-bit shifted) 0000000016416000-00000000164163ff (prio 0, i/o): 16-bit access = on 'sram-p2' (32-bit shifted) 0000000016416000-00000000164163ff (prio 0, i/o): 16-bit access = on 'sram-p3' (48-bit shifted) 0000000016432000-00000000164321ff (prio 0, i/o): interleaver-64x32 0000000016432000-00000000164321ff (prio 0, i/o): 32-bit access = on 'sram-p0' 0000000016432000-00000000164321ff (prio 0, i/o): 32-bit access = on 'sram-p1' (32-bit shifted) Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/misc/interleaver.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/hw/misc/interleaver.c b/hw/misc/interleaver.c index 46099e9e11..5cedcb3541 100644 --- a/hw/misc/interleaver.c +++ b/hw/misc/interleaver.c @@ -112,6 +112,34 @@ static MemTxResult interleaver_write(void *opaque, return r; } =20 +static GStrv interleaver_subregions_description(const MemoryRegion *mr) +{ + InterleaverDeviceState *s =3D container_of(mr, InterleaverDeviceState,= iomem); + InterleaverDeviceClass *idc =3D INTERLEAVER_DEVICE_GET_CLASS(s); + gchar **descs =3D g_new(gchar *, idc->mr_count + 1); + unsigned output_access_bits =3D idc->output_access_size << 3; + size_t i; + + for (i =3D 0; i < idc->mr_count; i++) { + if (i) { + descs[i] =3D g_strdup_printf(" %u-bit access on '%s'" + " (%zu-bit shifted)", + output_access_bits, + s->mr[i] ? memory_region_name(s->mr= [i]) + : emtpy_mr_name, + i * output_access_bits); + } else { + descs[i] =3D g_strdup_printf(" %u-bit access on '%s'", + output_access_bits, + s->mr[i] ? memory_region_name(s->mr= [i]) + : emtpy_mr_name); + } + } + descs[i] =3D NULL; + + return descs; +} + static void interleaver_realize(DeviceState *dev, Error **errp) { InterleaverDeviceState *s =3D INTERLEAVER_DEVICE(dev); @@ -139,6 +167,7 @@ static void interleaver_realize(DeviceState *dev, Error= **errp) } memory_region_init_io(&s->iomem, OBJECT(s), &idc->ops, s, idc->name, s->size); + s->iomem.subregions_description =3D interleaver_subregions_description; sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->iomem); } =20 --=20 2.26.2