From nobody Sat May 30 17:44:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1778721407; cv=none; d=zohomail.com; s=zohoarc; b=aFkcXQD7lL4t2JjifsP8U9ZZ33HDErgXeKm5WnnYJ44nDz1038m3KUbg7PEUPdqs+VQAJYgBXJ3jktbeGL1McLtSPeXeIv/4CxwxR7/ysS25JrJMMSqvXOSlsEwHG34lF+39PtXYOTbp458d6VjgiFhsAlwgtDBNKU/nQ81Rd1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778721407; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0mxwCx4OeOMWpI5sBVWTxhTZlDA7w225FBpZAcqrcYk=; b=cPPQNYddwIMtStM954fnh6k9ejt+cDghNKK+XhWFiS7/bqHANl9NKXSbl0wAwdzHNasYUf4l/TmcnwQZcaFZq5W47E2r3sAYzRWzaUXRFhcwo8CHaGX/DARfpG9+6VrwZPTl7TUd7Y62srFtJr5Kx1c8dGnYjQXfU9PmiuV9a+U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778721407767832.3194237414142; Wed, 13 May 2026 18:16:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wNKgB-0006qi-BI; Wed, 13 May 2026 21:15:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wNKg8-0006qR-Lu for qemu-devel@nongnu.org; Wed, 13 May 2026 21:15:56 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wNKg4-0000qf-Jj for qemu-devel@nongnu.org; Wed, 13 May 2026 21:15:54 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2bc7b311e77so20544825ad.0 for ; Wed, 13 May 2026 18:15:51 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (54.109.81.34.bc.googleusercontent.com. [34.81.109.54]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5c0600c3sm4982575ad.29.2026.05.13.18.15.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 18:15:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778721350; x=1779326150; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0mxwCx4OeOMWpI5sBVWTxhTZlDA7w225FBpZAcqrcYk=; b=A9yXhtqrYBDxr8267D5tdIiA8OM/cKDXNbnUMh8IB7GrVEHcau5P5m0USR/uTE3F7w Ao304IHBHlK77gXtgxPK0FBY51/zJ8z3oyis5JQ1Xw0WtFIADjWtw79DaNlqdwUwHH+3 F24WVb698aybmaGjz/ODt/mzU2EuVaNvUJ0fXFtgYvVGux4gyB/j0wu6TSslOEXj0MRF zoQEtXXrhJC7frh+YEWyNCov14rnDZsM+ymTUrzwVBq08bu6unRVwYVFXh1riyOTEcDu 5STU/vwzpS74e6PPHwXwEDxRhylBsP+ajp3cJoJWp0TGpbYcVq+0oPJ+A9NNDC/Nr5VC HFpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778721350; x=1779326150; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0mxwCx4OeOMWpI5sBVWTxhTZlDA7w225FBpZAcqrcYk=; b=hFl+t3xiVXB5LoVSVOQgwtcVycyfNXlzW9gr0ZtbWHuiYz6HCc1uItY4WRZcGO86+N dGSDXvWXXnuXgKplifFi7+oy90F4Nvf/Ra5k/mwRswCrYeYGA9j1HdqXmQxj2zSvLHKB 2PPxSkvBBSUDkB/49vTM2JDwJRF3SuQwx4c9U6X00/be4zwpp2eBa87LEpmLv/SPk7xU iYheQxfl4qm21FRK+a4dnvertrU53+o/E2g4XFU/km2J7PH6/vrR2AjMvF1WA7h5KOTo 3zn2Z0dJAqe9jjIYOTDcXnWURyknj4pu5keNQp/uJ3a2DY6YzqJhybwT1X7TsthZnqKK 3PMw== X-Forwarded-Encrypted: i=1; AFNElJ8v0IQq2kjW7AxJiCJ4JEvC5ytJFcVwLYNnhk8TpXNMFH9k/MTP6pKWaN/b1WY+3EsdngNedK7vimyP@nongnu.org X-Gm-Message-State: AOJu0YyqInCE00gzasPzocc+/3+aEdeTWpx9mcSdBKKtqeaExdQuX85U Fr1r2wCeyxaaDNLYwUpU7oajIzgSnm60SpCKcFAp52Cpc80cVqve+KZk X-Gm-Gg: Acq92OG53wxC7EYzHd9R/x+1Rqdsc3ju4eYchotsJX4cV5o6QXgD+Dc5pKTczJaysIS cQysOweut4TCgtVbHJ8p8PZuvE689Oywc5tjNkrk30Dv3ybXCaEtvuyPAoo9wBOmaBtRsnZ4uK+ 3jAXrNZiNf3c+nhDRJrGMJUXzl5qpUSmm/9s6rf7NjiB+AQWIBy2WtJOwsphcyeY10DdMCoNaiC YPPuSmNVwFarWuhXYpWLG+Le2k/sJzTGn5qKYzxm8OtrXIzKlbbCGOacn4XFBAELY3cu1TAAP5N /cY4EVTkE+Qp1Vi1vFT4Zz6oMH3tL4D3IuZlrYSw/hPfhUK7BRLdDtB232pbU0wL0fgiBFNZwOo kZObo5ojjAOI4iSHrYAnQRBtGMDawBAyXNRxk8H5hzGa38L4bJ+NdXZ8f/u4ejJw/HH9d2XjXw7 ukO1sVA158zqdQQNJ/ttQ7ctXkNWepMIdIH3rSlK8ts+DaJBTcl8Qfj6MetS61Jm0ZXMLJY9v6V iHwSEFm7V5wvpGMXVRZb5QlTNH+Eh+aVflt3uVR5S3r X-Received: by 2002:a17:903:3d49:b0:2ba:5f24:caeb with SMTP id d9443c01a7336-2bd5277b9d8mr9591255ad.19.1778721349469; Wed, 13 May 2026 18:15:49 -0700 (PDT) From: Kuan-Wei Chiu To: pbonzini@redhat.com, marcandre.lureau@redhat.com, palmer@dabbelt.com, alistair.francis@wdc.com, christoph.muellner@vrull.eu, farosas@suse.de, lvivier@redhat.com Cc: liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com, chao.liu.zevorn@gmail.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, marscheng@google.com, qemu-devel@nongnu.org, qemu-riscv@nongnu.org, Kuan-Wei Chiu Subject: [PATCH v2 1/6] target/riscv: Add stubs for T-Head PMU CSRs Date: Thu, 14 May 2026 01:15:23 +0000 Message-ID: <20260514011528.1263665-2-visitorckw@gmail.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog In-Reply-To: <20260514011528.1263665-1-visitorckw@gmail.com> References: <20260514011528.1263665-1-visitorckw@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=visitorckw@gmail.com; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778721411262158500 Content-Type: text/plain; charset="utf-8" T-Head CPUs use custom CSRs for performance monitoring, specifically mcounterinten (0x7ca) and mcounterof (0x7cb). [1] Since we don't implement these custom PMU registers yet, the system crashes with an illegal instruction trap when OpenSBI like this: system_opcode_insn: Failed to access CSR 0x7ca from M-mode sbi_trap_error: hart0: trap1: illegal instruction handler failed (error -1) Add simple read/write stubs for these two CSRs. By silently ignoring writes and returning 0 on reads, we prevent the fatal exceptions and allow to continue normally. Link: https://occ-intl-prod.oss-ap-southeast-1.aliyuncs.com/resource/XuanTi= e-OpenC906-UserManual.pdf [1] Signed-off-by: Kuan-Wei Chiu --- target/riscv/th_csr.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/target/riscv/th_csr.c b/target/riscv/th_csr.c index 49eb7bbab5..b095364c31 100644 --- a/target/riscv/th_csr.c +++ b/target/riscv/th_csr.c @@ -21,12 +21,19 @@ #include "cpu_vendorid.h" =20 #define CSR_TH_SXSTATUS 0x5c0 +#define CSR_TH_MCOUNTERINTEN 0x7ca +#define CSR_TH_MCOUNTEROF 0x7cb =20 /* TH_SXSTATUS bits */ #define TH_SXSTATUS_UCME BIT(16) #define TH_SXSTATUS_MAEE BIT(21) #define TH_SXSTATUS_THEADISAEE BIT(22) =20 +static RISCVException mmode(CPURISCVState *env, int csrno) +{ + return RISCV_EXCP_NONE; +} + static RISCVException smode(CPURISCVState *env, int csrno) { if (riscv_has_ext(env, RVS)) { @@ -49,11 +56,34 @@ static RISCVException read_th_sxstatus(CPURISCVState *e= nv, int csrno, return RISCV_EXCP_NONE; } =20 +static RISCVException read_th_pmu(CPURISCVState *env, int csrno, + target_ulong *val) +{ + *val =3D 0; + return RISCV_EXCP_NONE; +} + +static RISCVException write_th_pmu(CPURISCVState *env, int csrno, + target_ulong val, uintptr_t retaddr) +{ + return RISCV_EXCP_NONE; +} + const RISCVCSR th_csr_list[] =3D { { .csrno =3D CSR_TH_SXSTATUS, .insertion_test =3D test_thead_mvendorid, .csr_ops =3D { "th.sxstatus", smode, read_th_sxstatus } }, + { + .csrno =3D CSR_TH_MCOUNTERINTEN, + .insertion_test =3D test_thead_mvendorid, + .csr_ops =3D { "th.mcounterinten", mmode, read_th_pmu, write_th_pm= u } + }, + { + .csrno =3D CSR_TH_MCOUNTEROF, + .insertion_test =3D test_thead_mvendorid, + .csr_ops =3D { "th.mcounterof", mmode, read_th_pmu, write_th_pmu } + }, { } }; --=20 2.54.0.563.g4f69b47b94-goog From nobody Sat May 30 17:44:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1778721439; cv=none; d=zohomail.com; s=zohoarc; b=Pi62nHPVScc1xZ2QXMT66a1mD/oytXcMnrmFhe0uycPJ0IJkaQIPOsDAVx+nEM2OG1KXYv1zjFW9/MZfPz6IusPeXnxe7XZl7/qk/G+D6daIvvMjy+uI16O9Wyqu1yMjSZDzfogR6jv5mJ4bc1thG1VqsApp5eQq/Kg3kzr3klk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778721439; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Z5BzUMBXjy8xyRUea0sn7GSJCN51E1yGbpBU/KilmCU=; b=TFm7B+oKJw/1tXGP33oAmoP8JnNlQs0bPeTjEj5CP06hluM6jcNPyXt37ROb+u1Sx5PoqynaA2LFsUCxQoFLRAZubnkk0HJjjF1o5rDvwCb1yBmQIIVDgooouAZlwzFBh3MxULC8lBJhl/26eYhRch9RT9FzKHopI2B8EGOQ+Vs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177872143967996.36281403655573; Wed, 13 May 2026 18:17:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wNKgF-0006ro-7D; Wed, 13 May 2026 21:16:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wNKgC-0006rI-Gm for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:00 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wNKg8-0000ry-Da for qemu-devel@nongnu.org; Wed, 13 May 2026 21:15:59 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2baef9f5ecdso46811735ad.1 for ; Wed, 13 May 2026 18:15:56 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (54.109.81.34.bc.googleusercontent.com. [34.81.109.54]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5c0600c3sm4982575ad.29.2026.05.13.18.15.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 18:15:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778721355; x=1779326155; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Z5BzUMBXjy8xyRUea0sn7GSJCN51E1yGbpBU/KilmCU=; b=stXD+/AOnFDDK1P+xsKKdgEY11x4VnDmFfxjniXnwWJbFJ6n7te0hRHLD2wzMvCYb1 ieJ5yHWvBFDeTBKiqMzBa2sBZkCLgBoqsgS+FP9CRWrRKySk6etnePNMN4qVaIWYENXr gVMhreO1YdjJcW5IlKuN1V5Qo0+1vjgoXpowwxF79pzPwQ+Kjm/9uD7MbWlJSJuZelcK hrjqkoztxIGF9EM0WANFXNJijN6/YqwreX7CtarRUFscIDfLXV2hAI7+R6I9tYIX26va 2uK5XL+FA5BvkfgODjq3KJnLUVN2nigqqf6lVeIcrhhFqhmaL8g+lg9qJ4WYdH1BQ1Ur 29zA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778721355; x=1779326155; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Z5BzUMBXjy8xyRUea0sn7GSJCN51E1yGbpBU/KilmCU=; b=KiesS8kulTWmo0MfpTCluPkqvlRsZn8xaES5PtRit+2mXnLUEkjkXx2TQwc4JEZDYE t8WHQqkgUsvh3yH+GtYFefLi4nnt2q+vVI20+MYHQ42bnwJA2YBTGvseT2MHUhmDT6AE kqM0u5TDUp1bEFSJioCOSCAYOEyUMjAQRNWn4aY/7ZcZ9/nevw3UGggCFuvLiYJTyNjk qH8ndsE8JIIMdhGyYnSMCt3DHdOa9cKawL5atyKwBePP/gAsUZw2DRkI6TTbxQbY6lvT kpvO3mN2Yz+fM1A7tJ+8dnWRcUZFSmfkqTD7oEeSwtusHAI5TAW4lxo20HjCgR4TT0zc ldsg== X-Forwarded-Encrypted: i=1; AFNElJ+UYpWyzLhWZ4k6Gg6pLw8MA8/jYiaTzBD/KaSDYpcYg0RFgvW8TT1Sc6tJGe+FHNXuv2Tk2OlZVrx6@nongnu.org X-Gm-Message-State: AOJu0YzNDj9KX5oWnAjHX2cp6AwP6DMmt87uJki7899RgIfXHTtLobVN aU4Vl8NWPGtASEIrKiiSrFEl3T27EBaxT6ixXZOWeRIFcElSTCDjZerB X-Gm-Gg: Acq92OE4puXHlfIJiFA0c/u//LuY1rTQ88izcBQ/0wtd/nB/iuEZMdHq0oqok3Z43vk Suk4Db+YiZIEgK85pb8LPLq+OWMxGmRBiWsc73Hezqg04u1gsxSfjeAP/QDg7m/egdc7GN6UBwc YBqFPTxAsccJI6rnCT+GaqRoBZKT18XuWLWRefm8KilC0A7Ha0yl5aZLuC9qcJv9Yl2uU/FdNNP Nx+0IGxTSeSI77WYx88P7PK92WPdsC/B0FpMmhD+TLbjGc8PblvvYnIaYDc+yQUQURXpmDPG1Wm 7RMu1TT2mgaa9+Aptkn1/wDpk73w4nqmY8pVrouTVTvF8plRBDb8qIpugWOOcBR9l7f4cq5m+sa covtqnUm2rV0f2c/yRpKvkD1b1GDEKYF9067NHHIU1lHW9XX0Z0Db9yEXPXjHX7+1EPPNs0q0Hp C7DWgVs1fRK6Q4Yd37Ppxx1Evc+QKVBMJp38NGoXjzqQm2fa2Idco9v1at3sdHEEbeaQl3HTOLZ xWkLG01eiKt9g1vpecEm4YkOn+0osrCyA== X-Received: by 2002:a17:902:f34d:b0:2bc:dca9:f0ef with SMTP id d9443c01a7336-2bd2772e362mr45388835ad.36.1778721354949; Wed, 13 May 2026 18:15:54 -0700 (PDT) From: Kuan-Wei Chiu To: pbonzini@redhat.com, marcandre.lureau@redhat.com, palmer@dabbelt.com, alistair.francis@wdc.com, christoph.muellner@vrull.eu, farosas@suse.de, lvivier@redhat.com Cc: liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com, chao.liu.zevorn@gmail.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, marscheng@google.com, qemu-devel@nongnu.org, qemu-riscv@nongnu.org, Kuan-Wei Chiu Subject: [PATCH v2 2/6] hw/char: Add dw8250 UART Date: Thu, 14 May 2026 01:15:24 +0000 Message-ID: <20260514011528.1263665-3-visitorckw@gmail.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog In-Reply-To: <20260514011528.1263665-1-visitorckw@gmail.com> References: <20260514011528.1263665-1-visitorckw@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=visitorckw@gmail.com; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778721440717158500 Content-Type: text/plain; charset="utf-8" Add the dw8250 uart support. This hardware is a widely used 16550A derivative that includes additional registers. Without this specific device support, the Linux 8250_dw driver fails to probe the extended registers (UCV, CPR, etc.), which are essential for correct feature detection: [ 0.293566] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled [ 0.306929] Oops - store (or AMO) access fault [#1] [ 0.307020] Modules linked in: [ 0.307192] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 7.0.0 #1 PR= EEMPTLAZY [ 0.307250] Hardware name: Milk-V Duo (DT) [ 0.307294] epc : dw8250_setup_port+0x22/0x520 [ 0.307504] ra : dw8250_probe+0x57e/0x5b8 [ 0.307518] epc : ffffffff80708dd6 ra : ffffffff8070a49e sp : ffffffc600= 00b820 [ 0.307525] gp : ffffffff81a32ba8 tp : ffffffd602180cc0 t0 : 0000000000= 000073 [ 0.307533] t1 : 000000000000006c t2 : 0000000000000000 s0 : ffffffc600= 00b830 [ 0.307539] s1 : ffffffd6028c8640 a0 : ffffffc60000b848 a1 : ffffffff81= 3162c1 [ 0.307546] a2 : ffffffff813162c0 a3 : ffffffd6028c8640 a4 : ffffffc600= 02d0b4 [ 0.307552] a5 : 0000000000000001 a6 : 0000000000000094 a7 : 0000000000= 000060 [ 0.307558] s2 : ffffffd60225d410 s3 : ffffffd60225d400 s4 : 0000000000= 000000 [ 0.307573] s5 : ffffffff80e31a48 s6 : 0000000000000008 s7 : 0000000000= 000000 [ 0.307584] s8 : 0000000000000149 s9 : 0000000000000000 s10: 0000000000= 000000 [ 0.307590] s11: 0000000000000000 t3 : ffffffd602007c00 t4 : ffffffff81= 601540 [ 0.307604] t5 : 0000000000000003 t6 : ffffffd602a42f82 ssp : 000000000= 0000000 [ 0.307611] status: 0000000200000120 badaddr: ffffffc60002d0b4 cause: 00= 00000000000007 [ 0.307652] [] dw8250_setup_port+0x22/0x520 [ 0.307695] [] dw8250_probe+0x57e/0x5b8 [ 0.307702] [] platform_probe+0x46/0x80 [ 0.307708] [] really_probe+0x84/0x22c [ 0.307715] [] __driver_probe_device+0x5c/0xd4 [ 0.307721] [] driver_probe_device+0x2e/0xf4 [ 0.307727] [] __driver_attach+0x6e/0x14c [ 0.307734] [] bus_for_each_dev+0x60/0xb0 [ 0.307740] [] driver_attach+0x1a/0x24 [ 0.307746] [] bus_add_driver+0xca/0x1d8 [ 0.307752] [] driver_register+0x3e/0xdc [ 0.307757] [] __platform_driver_register+0x1c/0x24 [ 0.307779] [] dw8250_platform_driver_init+0x1a/0x24 [ 0.307793] [] do_one_initcall+0x4e/0x2a4 [ 0.307800] [] kernel_init_freeable+0x226/0x2b0 [ 0.307807] [] kernel_init+0x1c/0x144 [ 0.307813] [] ret_from_fork_kernel+0x18/0x164 [ 0.307820] [] ret_from_fork_kernel_asm+0x16/0x18 [ 0.307914] Code: 3683 2085 0b63 32f7 000f 0140 6918 4785 0713 0b47 (c31= c) 2583 [ 0.308041] ---[ end trace 0000000000000000 ]--- [ 0.308180] Kernel panic - not syncing: Fatal exception in interrupt [ 0.315760] ---[ end Kernel panic - not syncing: Fatal exception in inte= rrupt ]--- Signed-off-by: Kuan-Wei Chiu Reviewed-by: Chao Liu --- hw/char/Kconfig | 4 ++ hw/char/dw8250.c | 118 +++++++++++++++++++++++++++++++++++++++ hw/char/meson.build | 1 + include/hw/char/dw8250.h | 27 +++++++++ 4 files changed, 150 insertions(+) create mode 100644 hw/char/dw8250.c create mode 100644 include/hw/char/dw8250.h diff --git a/hw/char/Kconfig b/hw/char/Kconfig index 020c0a84bb..418d99b757 100644 --- a/hw/char/Kconfig +++ b/hw/char/Kconfig @@ -95,3 +95,7 @@ config IP_OCTAL_232 bool default y depends on IPACK + +config DW8250 + bool + select SERIAL diff --git a/hw/char/dw8250.c b/hw/char/dw8250.c new file mode 100644 index 0000000000..4ec829ceaf --- /dev/null +++ b/hw/char/dw8250.c @@ -0,0 +1,118 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Synopsys DesignWare APB UART (DW 8250) + * + * Copyright (c) 2026 Kuan-Wei Chiu + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/char/dw8250.h" +#include "hw/core/qdev-properties.h" +#include "hw/core/qdev-properties-system.h" + +#define DW_UART_REGION_SIZE 0x100 + +#define DW_UART_RE_EN 0xB4 /* Receiver Output Enable Register */ +#define DW_UART_DLF 0xC0 /* Divisor Latch Fraction Register */ +#define DW_UART_CPR 0xF4 /* Component Parameter Register */ +#define DW_UART_UCV 0xF8 /* UART Component Version */ +#define DW_UART_CTR 0xFC /* Component Type Register */ + +#define DW_UART_UCV_VALUE 0x3332332A /* "323*" -> v3.23a */ +#define DW_UART_CTR_VALUE 0x44570110 /* "DW" */ + +static uint64_t dw8250_ext_read(void *opaque, hwaddr addr, unsigned int si= ze) +{ + switch (addr) { + case DW_UART_UCV: + return DW_UART_UCV_VALUE; + case DW_UART_CPR: + return 0x00000000; /* No advanced features (DMA, extra FIFOs) */ + case DW_UART_CTR: + return DW_UART_CTR_VALUE; + + case DW_UART_RE_EN: + case DW_UART_DLF: + /* + * Return 0 to indicate these optional features + * (RS485 and Fractional Divisor) are not implemented. + */ + return 0x00000000; + + default: + return 0; + } +} + +static void dw8250_ext_write(void *opaque, hwaddr addr, uint64_t val, unsi= gned int size) +{ +} + +static const MemoryRegionOps dw8250_ext_ops =3D { + .read =3D dw8250_ext_read, + .write =3D dw8250_ext_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static void dw8250_instance_init(Object *obj) +{ + DW8250State *s =3D DW8250(obj); + + s->serial_mm =3D qdev_new("serial-mm"); + object_property_add_child(obj, "serial-mm", OBJECT(s->serial_mm)); + object_property_add_alias(obj, "chardev", OBJECT(s->serial_mm), "chard= ev"); +} + +static void dw8250_realize(DeviceState *dev, Error **errp) +{ + DW8250State *s =3D DW8250(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + SysBusDevice *serial_sbd =3D SYS_BUS_DEVICE(s->serial_mm); + + memory_region_init(&s->container, OBJECT(dev), "dw8250-container", + DW_UART_REGION_SIZE); + sysbus_init_mmio(sbd, &s->container); + + qdev_prop_set_uint8(s->serial_mm, "regshift", s->regshift); + qdev_prop_set_uint8(s->serial_mm, "endianness", DEVICE_LITTLE_ENDIAN); + sysbus_realize(serial_sbd, errp); + + memory_region_init_io(&s->ext_iomem, OBJECT(dev), &dw8250_ext_ops, s, + "dw8250-ext", DW_UART_REGION_SIZE); + memory_region_add_subregion(&s->container, 0, &s->ext_iomem); + + memory_region_add_subregion_overlap(&s->container, 0, + sysbus_mmio_get_region(serial_sbd,= 0), 1); + + sysbus_pass_irq(sbd, serial_sbd); +} + +static const Property dw8250_properties[] =3D { + DEFINE_PROP_UINT8("regshift", DW8250State, regshift, 2), +}; + +static void dw8250_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D dw8250_realize; + device_class_set_props(dc, dw8250_properties); +} + +static const TypeInfo dw8250_info =3D { + .name =3D TYPE_DW8250, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(DW8250State), + .instance_init =3D dw8250_instance_init, + .class_init =3D dw8250_class_init, +}; + +static void dw8250_register_types(void) +{ + type_register_static(&dw8250_info); +} + +type_init(dw8250_register_types) diff --git a/hw/char/meson.build b/hw/char/meson.build index fc3d7ee506..b2250ee6ae 100644 --- a/hw/char/meson.build +++ b/hw/char/meson.build @@ -38,6 +38,7 @@ system_ss.add(when: 'CONFIG_STM32L4X5_USART', if_true: fi= les('stm32l4x5_usart.c' system_ss.add(when: 'CONFIG_MCHP_PFSOC_MMUART', if_true: files('mchp_pfsoc= _mmuart.c')) system_ss.add(when: 'CONFIG_HTIF', if_true: files('riscv_htif.c')) system_ss.add(when: 'CONFIG_GOLDFISH_TTY', if_true: files('goldfish_tty.c'= )) +system_ss.add(when: 'CONFIG_DW8250', if_true: files('dw8250.c')) =20 specific_ss.add(when: 'CONFIG_TERMINAL3270', if_true: files('terminal3270.= c')) specific_ss.add(when: 'CONFIG_PSERIES', if_true: files('spapr_vty.c')) diff --git a/include/hw/char/dw8250.h b/include/hw/char/dw8250.h new file mode 100644 index 0000000000..59396ad202 --- /dev/null +++ b/include/hw/char/dw8250.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Synopsys DesignWare APB UART (DW 8250) + * + * Copyright (c) 2026 Kuan-Wei Chiu + */ + +#ifndef HW_CHAR_DW8250_H +#define HW_CHAR_DW8250_H + +#include "hw/core/sysbus.h" +#include "qom/object.h" + +#define TYPE_DW8250 "dw8250" +OBJECT_DECLARE_SIMPLE_TYPE(DW8250State, DW8250) + +struct DW8250State { + SysBusDevice parent_obj; + + MemoryRegion container; + MemoryRegion ext_iomem; + DeviceState *serial_mm; + + uint8_t regshift; +}; + +#endif --=20 2.54.0.563.g4f69b47b94-goog From nobody Sat May 30 17:44:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1778721436; cv=none; d=zohomail.com; s=zohoarc; b=WDOy+vDxyg9+N2EETw8cCdj5wMieegLeYGidb419/OUDCv0TO2cuHI8kxyB2iSNgsFxlXDx7dPJvnAzBcGukYFgjcBmaKZuKWXNAPv05xH9/VUnFPvwW9UbfEmIeqCsu3jsmjh79VnAVqUflwRE+Z7Q2aKUqOOk8iWJZgK4mmPM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778721436; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mLC10TUX2AfE6MDdbm1gzs+WcsKVviC2Px435/4TdUU=; b=RbddNP0G8W8ROYSh1m0gOAEpTLL0EsttgzTEYgkI4AP+IOX/yyCfQINknCLnqnmHA8RFc7mHYw0pGQr0ReSW5nsz6tLKUr2cIGBL1cn/GOZa2PYSxssP8Q1gU4dJD6Rxs9AOdkARBi4qceczrhh8pV1d9zixuSULLYwqNbHt5YM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778721436553404.68832997830043; Wed, 13 May 2026 18:17:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wNKgI-0006sl-I6; Wed, 13 May 2026 21:16:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wNKgG-0006sJ-Fm for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:04 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wNKgE-0000st-Iv for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:04 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-36900945df5so806507a91.0 for ; Wed, 13 May 2026 18:16:02 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (54.109.81.34.bc.googleusercontent.com. [34.81.109.54]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5c0600c3sm4982575ad.29.2026.05.13.18.15.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 18:16:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778721361; x=1779326161; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mLC10TUX2AfE6MDdbm1gzs+WcsKVviC2Px435/4TdUU=; b=fYD9MbNpX66ODJWRQ4zEQIUbP2brwdChP4oWFpFsGUwEgDKVNmoGd5QQlGFPdzVEAc L1O4cAieTqIfcxRhZkHF4F8PUeDsXoBHd2rnDa8riASnSO/G3ixFFZ0GFaK/yf80+mYg cmnqT4TEqQbnQvwYJMmDvHJ2LNQV64E9xINTTX5NcXRzDlJBod6md/EHyFR1zsI0V+0Y 8++5MSho9Fd/QpEuTRP1XtuMOVdZK1Vbc4WZGjMMOKY68usqPFDD+sCR6t+L9gverI3V cvtlhUhwg7vmnHsubFuWYHO1eZdWFGDA5LH8/9SAjo116zaBzh1TrLeMWSqo5RZJCog7 ALpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778721361; x=1779326161; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=mLC10TUX2AfE6MDdbm1gzs+WcsKVviC2Px435/4TdUU=; b=U/v17NcsehrUUcHLqeUQqoMwXcK3WPm/Kx9ETQMVSX1piBx9Q7CAdS7tftDlVxlIDv cnqYFecUst1byZPt4qETU8rrgCNmVLCJFoR4IxHpj2u3vhN+zEeMK1CF81yCfFLhgaq1 XHvqVgNm1rB31fKssaVl7kvtpIEdps9/E8DatGrtFh/f11Q8ilhHmvvJWbKzoQsXyFDh yBdRXQSOoc8HYoz2BFD/8ihGMjsJr1Pq77RTOaVVzYcXEonJiqshORFOnN0LFxgtoJLy 5nDf1Ee5H7sY9ndNhEChfT1YW9Yiq4/igqEs9gKSaAdktXHd+vpzuSt/q1//eByHgG8C boPw== X-Forwarded-Encrypted: i=1; AFNElJ821w+FfAg7G2eA5brFkSrxbi6YpKUJpXblj1sgR58/+JnDJLutDDnjgYZSMm0CJ+X3mpw1uDYerNfL@nongnu.org X-Gm-Message-State: AOJu0Yx5iSKOCdlw9qzSdvL7h3AGi3qc22na+kdVMTSS0Mi3jgnkS8Uh wVFIjRaMyrzj6/N2TMypS7wKrn8IExmuF1vq1dLVABJOpfbM+7O0BaBo X-Gm-Gg: Acq92OFBuMML58g21XIFK2Vr3d8T90ZhOG3Ky2oS63O6RkLesW1etZi6qqluyCG9XoW W1QAHfl+3NAr96loXkSIt7MiFKbBium3aRLOenDsWdZ82qbzuoHzUVfUR+R0HN59eKUU3kpHBhb BfUWx3z53gfIzc3T7FdhtJ8lRYQYnP1rL1MYkUIpU5nPZqVqpY6+mssSw85K82cIseZqT0yS7pe 2RqT/mLVPdwlfKfx+yvK3Smu9IBCnOWFpY6NqrwCl2Ozs7Kd4yvfVDJWEoGEJ06xrB6J3T88XLc eUa3dFISEeG+GCMo0w9988pga17ocgBSyaZjYxEVHZOvDJxULn4yNQfqf28b65MFcRd1X9RtdOc Hu8Z5trKw8m5D+3a2y2kS3c/UYIcdIghuuX0bNhJQ2GG5Asc6aiS61FGirGNa1Erjakc0mEI3iF OLxyvLApciRSCh/s3S1bAhAxDgKnYxkz59HhOOeXUyGuCZDBeKwOF6sKQzH78HGxlOU3E+3r8x4 kYy36SANv5xy8Sy/iotjZYurXcpBJJQa0qQwL7hEJV4 X-Received: by 2002:a17:903:32c3:b0:2b0:c90f:449d with SMTP id d9443c01a7336-2bd2fe21b31mr51346005ad.19.1778721360644; Wed, 13 May 2026 18:16:00 -0700 (PDT) From: Kuan-Wei Chiu To: pbonzini@redhat.com, marcandre.lureau@redhat.com, palmer@dabbelt.com, alistair.francis@wdc.com, christoph.muellner@vrull.eu, farosas@suse.de, lvivier@redhat.com Cc: liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com, chao.liu.zevorn@gmail.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, marscheng@google.com, qemu-devel@nongnu.org, qemu-riscv@nongnu.org, Kuan-Wei Chiu Subject: [PATCH v2 3/6] hw/misc: Add Sophgo CV1800B clock controller Date: Thu, 14 May 2026 01:15:25 +0000 Message-ID: <20260514011528.1263665-4-visitorckw@gmail.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog In-Reply-To: <20260514011528.1263665-1-visitorckw@gmail.com> References: <20260514011528.1263665-1-visitorckw@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=visitorckw@gmail.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778721439080158500 Content-Type: text/plain; charset="utf-8" Add a stub for the CV1800B clock controller. This is specifically required for the SDHCI controller to function correctly under Linux. The Linux 'sophgo,cv1800-clk' driver probes this device to determine the clock tree configuration. This implementation sets the bypass registers (CLK_BYP_0 and CLK_BYP_1) to 0xFFFFFFFF during reset, matching the POR default state. This bypasses the PLLs and allows the SDHCI and other peripherals to operate using the 25MHz reference clock. Without this device, the SD card driver fails to initialize, preventing the system from mounting the root filesystem from the SD card: [ 0.888739] Waiting for root device /dev/mmcblk0... [ 10.727739] mmc0: Timeout waiting for hardware cmd interrupt. [ 10.728042] mmc0: sdhci: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D SDHCI REGI= STER DUMP =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D [ 10.728356] mmc0: sdhci: Sys addr: 0x00000002 | Version: 0x00002402 [ 10.728618] mmc0: sdhci: Blk size: 0x00000000 | Blk cnt: 0x00000000 [ 10.728919] mmc0: sdhci: Argument: 0x00000000 | Trn mode: 0x00000000 [ 10.729271] mmc0: sdhci: Present: 0x01ff0000 | Host ctl: 0x00000001 [ 10.729591] mmc0: sdhci: Power: 0x0000000f | Blk gap: 0x00000000 [ 10.729903] mmc0: sdhci: Wake-up: 0x00000000 | Clock: 0x00000000 [ 10.730223] mmc0: sdhci: Timeout: 0x00000000 | Int stat: 0x00000000 [ 10.730537] mmc0: sdhci: Int enab: 0x00ff0083 | Sig enab: 0x00ff0083 [ 10.730795] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000 [ 10.731005] mmc0: sdhci: Caps: 0x056900b9 | Caps_1: 0x00000000 [ 10.731211] mmc0: sdhci: Cmd: 0x00000000 | Max curr: 0x00000000 [ 10.731415] mmc0: sdhci: Resp[0]: 0x00000000 | Resp[1]: 0x00000000 [ 10.731636] mmc0: sdhci: Resp[2]: 0x00000000 | Resp[3]: 0x00000000 [ 10.731851] mmc0: sdhci: Host ctl2: 0x00000000 [ 10.732018] mmc0: sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x00000000 [ 10.732229] mmc0: sdhci: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D Signed-off-by: Kuan-Wei Chiu --- hw/misc/Kconfig | 3 ++ hw/misc/cv1800b_clk.c | 89 +++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + include/hw/misc/cv1800b_clk.h | 24 ++++++++++ 4 files changed, 117 insertions(+) create mode 100644 hw/misc/cv1800b_clk.c create mode 100644 include/hw/misc/cv1800b_clk.h diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 99bdf09219..42cdf771a4 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -254,4 +254,7 @@ config IOSB config XLNX_VERSAL_TRNG bool =20 +config SOPHGO_CV1800B_CLK + bool + source macio/Kconfig diff --git a/hw/misc/cv1800b_clk.c b/hw/misc/cv1800b_clk.c new file mode 100644 index 0000000000..738f0910db --- /dev/null +++ b/hw/misc/cv1800b_clk.c @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Sophgo CV1800B Clock Controller + * + * Copyright (c) 2026 Kuan-Wei Chiu + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "hw/misc/cv1800b_clk.h" + +#define REG_CLK_BYP_0 (0x030 / 4) +#define REG_CLK_BYP_1 (0x034 / 4) + +static uint64_t cv1800b_clk_read(void *opaque, hwaddr addr, unsigned int s= ize) +{ + CV1800BClkState *s =3D opaque; + uint32_t val =3D 0; + + if ((addr / 4) < ARRAY_SIZE(s->regs)) { + val =3D s->regs[addr / 4]; + } + + return val; +} + +static void cv1800b_clk_write(void *opaque, hwaddr addr, uint64_t val, uns= igned int size) +{ + CV1800BClkState *s =3D opaque; + + if ((addr / 4) < ARRAY_SIZE(s->regs)) { + s->regs[addr / 4] =3D val; + } +} + +static const MemoryRegionOps cv1800b_clk_ops =3D { + .read =3D cv1800b_clk_read, + .write =3D cv1800b_clk_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, +}; + +static void cv1800b_clk_reset_hold(Object *obj, ResetType type) +{ + CV1800BClkState *s =3D CV1800B_CLK(obj); + + memset(s->regs, 0, sizeof(s->regs)); + + /* + * TODO: Implement proper PLL state machines. + * For now, use POR default to bypass PLLs and boot via 25MHz XTAL. + */ + s->regs[REG_CLK_BYP_0] =3D 0xFFFFFFFF; + s->regs[REG_CLK_BYP_1] =3D 0xFFFFFFFF; +} + +static void cv1800b_clk_init(Object *obj) +{ + CV1800BClkState *s =3D CV1800B_CLK(obj); + + memory_region_init_io(&s->iomem, obj, &cv1800b_clk_ops, s, + TYPE_CV1800B_CLK, 0x1000); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->iomem); +} + +static void cv1800b_clk_class_init(ObjectClass *klass, const void *data) +{ + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + rc->phases.hold =3D cv1800b_clk_reset_hold; +} + +static const TypeInfo cv1800b_clk_info =3D { + .name =3D TYPE_CV1800B_CLK, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(CV1800BClkState), + .instance_init =3D cv1800b_clk_init, + .class_init =3D cv1800b_clk_class_init, +}; + +static void cv1800b_clk_register_types(void) +{ + type_register_static(&cv1800b_clk_info); +} + +type_init(cv1800b_clk_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index 245ab9b98c..a4c5f90cd8 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -35,6 +35,7 @@ system_ss.add(when: 'CONFIG_SIFIVE_E_PRCI', if_true: file= s('sifive_e_prci.c')) system_ss.add(when: 'CONFIG_SIFIVE_E_AON', if_true: files('sifive_e_aon.c'= )) system_ss.add(when: 'CONFIG_SIFIVE_U_OTP', if_true: files('sifive_u_otp.c'= )) system_ss.add(when: 'CONFIG_SIFIVE_U_PRCI', if_true: files('sifive_u_prci.= c')) +system_ss.add(when: 'CONFIG_SOPHGO_CV1800B_CLK', if_true: files('cv1800b_c= lk.c')) =20 subdir('macio') =20 diff --git a/include/hw/misc/cv1800b_clk.h b/include/hw/misc/cv1800b_clk.h new file mode 100644 index 0000000000..05c0d1ca1b --- /dev/null +++ b/include/hw/misc/cv1800b_clk.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Sophgo CV1800B Clock Controller + * + * Copyright (c) 2026 Kuan-Wei Chiu + */ + +#ifndef HW_MISC_CV1800B_CLK_H +#define HW_MISC_CV1800B_CLK_H + +#include "hw/core/sysbus.h" +#include "qom/object.h" + +#define TYPE_CV1800B_CLK "cv1800b-clk" +OBJECT_DECLARE_SIMPLE_TYPE(CV1800BClkState, CV1800B_CLK) + +struct CV1800BClkState { + SysBusDevice parent_obj; + + MemoryRegion iomem; + uint32_t regs[0x1000 / 4]; +}; + +#endif --=20 2.54.0.563.g4f69b47b94-goog From nobody Sat May 30 17:44:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1778721445; cv=none; d=zohomail.com; s=zohoarc; b=SlnoR9vUgYtMALLIim1gk7JDUqMGAzS0i7BDLb01KwJWrwmWhP7vMa4Hrxsv+1GU7srHzbMY3AXAkIGSw7rCEPUw+yO2d/IxNX0Kq+Xu4xaghdNDPS9LJGLHuke/0TlMwpZYQ5sUVXBPWBCjVlLJEX2EUydcNqRUc2sJY4TS/SA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778721445; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=glcjIMxZZysIE7r/mnimuPjUh4Szz2MUKvKWN/XEWCQ=; b=n2y85D1RyRYLdRR0l3npugqxBx2UIQGEw5nr1yvvK5jigMVnARr72feIL+HsTt+li5aN+tuSBUO3M26SuyfSZnB0HTdh/7vbOB0pItR3G1Y3SdywOefRk0yssQnQ75KpjNSfCQIh1YXRuEpeK2WgkrkM7hCvifeegueRMtro88s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778721445493238.48598984713715; Wed, 13 May 2026 18:17:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wNKgP-0006uS-2s; Wed, 13 May 2026 21:16:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wNKgN-0006tY-8D for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:11 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wNKgK-0000vr-Tj for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:10 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-365e20fe3b8so4388138a91.3 for ; Wed, 13 May 2026 18:16:08 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (54.109.81.34.bc.googleusercontent.com. [34.81.109.54]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5c0600c3sm4982575ad.29.2026.05.13.18.16.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 18:16:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778721367; x=1779326167; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=glcjIMxZZysIE7r/mnimuPjUh4Szz2MUKvKWN/XEWCQ=; b=LBqS2E0XDMwl7QVG/NIElWpfMH5iKLjwUd/BV9b6WYpMMTZiau6vU+sR4Bb5iL8o2y eBZk8PsPzZ7ORyOY9Zre9dauCUVc8EeXW0Asq0ts/ydOXaVQdC23tn3dBdzjD8EMsbJ5 QZZMKcIuh41VQhrjS1kRt7X0gtakokXYfGMPyxaqyc73E4FSijfxZ+LGRnmh/fyByOAA ummI8u5kPJQNwGrJ2v1cE43xLHSe4adVKaf05JYHV3dFKVirY1dHwufYiJhpFc7JZvqv HRisr6xqGDLum9oU+VKG/Yp4roQeFtnGVapX5bHgWGFUgz4Y2Q+vGcCeav8hWyuwHLY+ EsMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778721367; x=1779326167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=glcjIMxZZysIE7r/mnimuPjUh4Szz2MUKvKWN/XEWCQ=; b=RdBVR6mXX8FO3ffP4faWAATNxpbYgZuwb0UInhv4lTx1rKFspIaHVRPcTIRISsAmYK AhCqeqa/QoMWaUCkpJmy+awjIZpLXb6AJsULBQ1dXShSFd6YkQB9vYkadxQLxyo/vG1b EZMOjEPnpilq8bI6FNi+HnjaSjitMlrOgcwZ4+mmO5p0t7LYqZHZlkSJkw2mGgeEyBqm Ddn2IRFekbCttLEiRGcUY3khLK/as+zzaCSB8bAKkXPImq5PCnAGIjopxRX1+2Niwv8E wKufyYZcgxvpsciDqDe17WwI4MVv5RsZk20xwvF3cubaitULKsZSHh6wcT9Fiw94buOt RR/g== X-Forwarded-Encrypted: i=1; AFNElJ/6eoGGWJjv7JUEiFDkjS/51TtOL3LZI1aKQOHZlZP8ZyalIzmpLMk2FeEmyneTGehcfni1KlmAK3ST@nongnu.org X-Gm-Message-State: AOJu0YzcC/PiL80iNkgp86VG9wpoY+fDWR9pRY2FHOt3u2LeNne8sj3o D+4+XUURFo7ui5yWJ95ieelFvKn/5Ogv0NBF0cV2J3uDxva+BXf9HMkU X-Gm-Gg: Acq92OG/cqZZqoMpow+P/p1KcNDoVD72RLJsZJ7+xEQjl5m3E3pCiRbXc/djx/VY2r1 yOz8P1O3gjf2CWv2cE2+D0Klde0pC2x5cVvKY7asbeAk+xoD2oj7aG6pqTTk0cMJkpTZLNNEf4e NAGIppKENyXm5XgIMyOvuDess+mTL2Bl1Ve4tB5aELaMMZhou40/fTebPgbpmFZCb0RQlXfF5i+ QFgrcO70sKmSVzSZuNd06lcgjgDE1O3Qmd9aNvaN5OQPXtRTFA9rantLU5sTEBrFx3CJ4W5ZI7w Zrfik/CIhcui1cM29UMLExuhwZVJCBu8PRrVu5alsEqhc+Bvls4XpPPAUzl1zprvQ2jC0IwlhI2 gKTPUCKhP13NkejbBPBkG11XHEA0Gr9TwpQiZPqY6FWzY//Vb6dNneuTKw/F7UBze+VUlfUfC6v DNIYPW571dbl+jgIFmaJ3bjFwo52k5qHcjSaWfE7/4HDPj1oRAR2/HtsSYCd8VeLPA7Nzk+van8 t9fzyClXgn9DHYIeDO8YKwB6+Y7KJuvrQ== X-Received: by 2002:a17:90b:3951:b0:35f:be09:1a2b with SMTP id 98e67ed59e1d1-368f3bf7198mr5983966a91.10.1778721367051; Wed, 13 May 2026 18:16:07 -0700 (PDT) From: Kuan-Wei Chiu To: pbonzini@redhat.com, marcandre.lureau@redhat.com, palmer@dabbelt.com, alistair.francis@wdc.com, christoph.muellner@vrull.eu, farosas@suse.de, lvivier@redhat.com Cc: liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com, chao.liu.zevorn@gmail.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, marscheng@google.com, qemu-devel@nongnu.org, qemu-riscv@nongnu.org, Kuan-Wei Chiu Subject: [PATCH v2 4/6] hw/riscv: Add Sophgo CV1800B SoC support Date: Thu, 14 May 2026 01:15:26 +0000 Message-ID: <20260514011528.1263665-5-visitorckw@gmail.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog In-Reply-To: <20260514011528.1263665-1-visitorckw@gmail.com> References: <20260514011528.1263665-1-visitorckw@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=visitorckw@gmail.com; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778721446905158500 Content-Type: text/plain; charset="utf-8" Add the Sophgo CV1800B SoC, which is the heart of the Milk-V Duo board. The SoC features a T-Head C906 CPU along with integrated PLIC, CLINT, and dw8250 UART. The memory map and interrupts are configured according to the CV1800B datasheet. [1] Several peripheral blocks are included as unimplemented devices to ensure that drivers can probe successfully without causing errors during boot. Link: https://github.com/milkv-duo/duo-files/tree/main/duo/datasheet [1] Signed-off-by: Kuan-Wei Chiu --- hw/riscv/Kconfig | 8 ++ hw/riscv/cv1800b.c | 168 +++++++++++++++++++++++++++++++++++++ hw/riscv/meson.build | 2 + include/hw/riscv/cv1800b.h | 52 ++++++++++++ 4 files changed, 230 insertions(+) create mode 100644 hw/riscv/cv1800b.c create mode 100644 include/hw/riscv/cv1800b.h diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index 2518b04175..5b68991edb 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -138,3 +138,11 @@ config MIPS_BOSTON_AIA select RISCV_MIPS_CMGCR select RISCV_MIPS_CPC select RISCV_MIPS_CPS + +config SOPHGO_CV1800B + bool + depends on RISCV64 + select RISCV_ACLINT + select SIFIVE_PLIC + select SOPHGO_CV1800B_CLK + select DW8250 diff --git a/hw/riscv/cv1800b.c b/hw/riscv/cv1800b.c new file mode 100644 index 0000000000..c6749e1202 --- /dev/null +++ b/hw/riscv/cv1800b.c @@ -0,0 +1,168 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Sophgo CV1800B SoC + * + * Copyright (c) 2026 Kuan-Wei Chiu + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/riscv/cv1800b.h" +#include "hw/core/qdev-properties.h" +#include "target/riscv/cpu-qom.h" +#include "system/system.h" +#include "hw/char/serial.h" +#include "hw/intc/riscv_aclint.h" +#include "system/address-spaces.h" +#include "hw/intc/sifive_plic.h" +#include "target/riscv/cpu.h" +#include "hw/riscv/boot.h" +#include "hw/sd/sdhci.h" +#include "hw/misc/unimp.h" + +const MemMapEntry cv1800b_memmap[] =3D { + [CV1800B_DEV_TOP_MISC] =3D { 0x03000000, 0x1000 }, + [CV1800B_DEV_PINMUX] =3D { 0x03001000, 0x1000 }, + [CV1800B_DEV_CLK] =3D { 0x03002000, 0x1000 }, + [CV1800B_DEV_RST] =3D { 0x03003000, 0x1000 }, + [CV1800B_DEV_WDT] =3D { 0x03010000, 0x1000 }, + [CV1800B_DEV_GPIO] =3D { 0x03020000, 0x4000 }, + [CV1800B_DEV_UART0] =3D { 0x04140000, 0x10000 }, + [CV1800B_DEV_SD0] =3D { 0x04310000, 0x10000 }, + [CV1800B_DEV_ROM] =3D { 0x04400000, 0x10000 }, + [CV1800B_DEV_RTC_GPIO] =3D { 0x05021000, 0x1000 }, + [CV1800B_DEV_RTC_IO] =3D { 0x05027000, 0x1000 }, + [CV1800B_DEV_PLIC] =3D { 0x70000000, 0x4000000 }, + [CV1800B_DEV_CLINT] =3D { 0x74000000, 0x10000 }, + [CV1800B_DEV_DRAM] =3D { 0x80000000, 0x0 }, +}; + +static void cv1800b_soc_instance_init(Object *obj) +{ + CV1800BSoCState *s =3D CV1800B_SOC(obj); + + object_initialize_child(obj, "cpus", &s->cpus, TYPE_RISCV_HART_ARRAY); + object_initialize_child(obj, "clk", &s->clk, TYPE_CV1800B_CLK); +} + +static void cv1800b_soc_realize(DeviceState *dev, Error **errp) +{ + CV1800BSoCState *s =3D CV1800B_SOC(dev); + MachineState *ms =3D MACHINE(qdev_get_machine()); + uint32_t num_harts =3D ms->smp.cpus; + MemoryRegion *system_memory =3D get_system_memory(); + char *plic_hart_config; + DeviceState *uart, *sdhci; + + qdev_prop_set_uint32(DEVICE(&s->cpus), "num-harts", num_harts); + qdev_prop_set_uint32(DEVICE(&s->cpus), "hartid-base", 0); + qdev_prop_set_string(DEVICE(&s->cpus), "cpu-type", TYPE_RISCV_CPU_THEA= D_C906); + + qdev_prop_set_uint64(DEVICE(&s->cpus), "resetvec", + cv1800b_memmap[CV1800B_DEV_ROM].base); + + sysbus_realize(SYS_BUS_DEVICE(&s->cpus), &error_fatal); + + memory_region_init_rom(&s->rom, OBJECT(dev), "cv1800b.rom", + cv1800b_memmap[CV1800B_DEV_ROM].size, &error_fa= tal); + memory_region_add_subregion(system_memory, + cv1800b_memmap[CV1800B_DEV_ROM].base, &s->= rom); + + riscv_aclint_swi_create(cv1800b_memmap[CV1800B_DEV_CLINT].base, + 0, num_harts, false); + riscv_aclint_mtimer_create(cv1800b_memmap[CV1800B_DEV_CLINT].base + + RISCV_ACLINT_SWI_SIZE, + RISCV_ACLINT_DEFAULT_MTIMER_SIZE, + 0, num_harts, RISCV_ACLINT_DEFAULT_MTIMECMP, + RISCV_ACLINT_DEFAULT_MTIME, + RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ, true); + + plic_hart_config =3D riscv_plic_hart_config_string(num_harts); + s->plic =3D sifive_plic_create( + cv1800b_memmap[CV1800B_DEV_PLIC].base, + plic_hart_config, + num_harts, + 0, + CV1800B_PLIC_NUM_SOURCES, + CV1800B_PLIC_NUM_PRIORITIES, + 0x0, + 0x1000, + 0x2000, + 0x80, + 0x200000, + 0x1000, + cv1800b_memmap[CV1800B_DEV_PLIC].size); + + g_free(plic_hart_config); + + uart =3D qdev_new("dw8250"); + qdev_prop_set_uint8(uart, "regshift", 2); + qdev_prop_set_chr(uart, "chardev", serial_hd(0)); + sysbus_realize(SYS_BUS_DEVICE(uart), errp); + sysbus_mmio_map(SYS_BUS_DEVICE(uart), 0, cv1800b_memmap[CV1800B_DEV_UA= RT0].base); + sysbus_connect_irq(SYS_BUS_DEVICE(uart), 0, + qdev_get_gpio_in(DEVICE(s->plic), CV1800B_UART0_IRQ= )); + + sdhci =3D qdev_new(TYPE_SYSBUS_SDHCI); + qdev_prop_set_uint8(sdhci, "sd-spec-version", 3); + qdev_prop_set_uint64(sdhci, "capareg", 0x056900b9); + sysbus_realize(SYS_BUS_DEVICE(sdhci), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(sdhci), 0, cv1800b_memmap[CV1800B_DEV_S= D0].base); + sysbus_connect_irq(SYS_BUS_DEVICE(sdhci), 0, + qdev_get_gpio_in(DEVICE(s->plic), CV1800B_SD0_IRQ)); + + sysbus_realize(SYS_BUS_DEVICE(&s->clk), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->clk), 0, + cv1800b_memmap[CV1800B_DEV_CLK].base); + + create_unimplemented_device("cv1800b.top_misc", + cv1800b_memmap[CV1800B_DEV_TOP_MISC].base, + cv1800b_memmap[CV1800B_DEV_TOP_MISC].size); + + create_unimplemented_device("cv1800b.pinmux", + cv1800b_memmap[CV1800B_DEV_PINMUX].base, + cv1800b_memmap[CV1800B_DEV_PINMUX].size); + + create_unimplemented_device("cv1800b.rst", + cv1800b_memmap[CV1800B_DEV_RST].base, + cv1800b_memmap[CV1800B_DEV_RST].size); + + create_unimplemented_device("cv1800b.wdt", + cv1800b_memmap[CV1800B_DEV_WDT].base, + cv1800b_memmap[CV1800B_DEV_WDT].size); + + create_unimplemented_device("cv1800b.gpio0_3", + cv1800b_memmap[CV1800B_DEV_GPIO].base, + cv1800b_memmap[CV1800B_DEV_GPIO].size); + + create_unimplemented_device("cv1800b.rtc_gpio", + cv1800b_memmap[CV1800B_DEV_RTC_GPIO].base, + cv1800b_memmap[CV1800B_DEV_RTC_GPIO].size); + + create_unimplemented_device("cv1800b.rtc_io", + cv1800b_memmap[CV1800B_DEV_RTC_IO].base, + cv1800b_memmap[CV1800B_DEV_RTC_IO].size); +} + +static void cv1800b_soc_class_init(ObjectClass *oc, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + dc->realize =3D cv1800b_soc_realize; + dc->user_creatable =3D false; +} + +static const TypeInfo cv1800b_soc_type_info =3D { + .name =3D TYPE_CV1800B_SOC, + .parent =3D TYPE_DEVICE, + .instance_size =3D sizeof(CV1800BSoCState), + .instance_init =3D cv1800b_soc_instance_init, + .class_init =3D cv1800b_soc_class_init, +}; + +static void cv1800b_soc_register_types(void) +{ + type_register_static(&cv1800b_soc_type_info); +} + +type_init(cv1800b_soc_register_types) diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index 533472e22a..04e25eeece 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -18,4 +18,6 @@ riscv_ss.add(when: 'CONFIG_XIANGSHAN_KUNMINGHU', if_true:= files('xiangshan_kmh.c riscv_ss.add(when: 'CONFIG_RISCV_MIPS_CPS', if_true: files('cps.c')) riscv_ss.add(when: 'CONFIG_MIPS_BOSTON_AIA', if_true: files('boston-aia.c'= )) =20 +riscv_ss.add(when: 'CONFIG_SOPHGO_CV1800B', if_true: files('cv1800b.c')) + hw_arch +=3D {'riscv': riscv_ss} diff --git a/include/hw/riscv/cv1800b.h b/include/hw/riscv/cv1800b.h new file mode 100644 index 0000000000..a214f7a9f6 --- /dev/null +++ b/include/hw/riscv/cv1800b.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Sophgo CV1800B SoC + * + * Copyright (c) 2026 Kuan-Wei Chiu + */ + +#ifndef HW_RISCV_CV1800B_H +#define HW_RISCV_CV1800B_H + +#include "hw/core/boards.h" +#include "hw/riscv/riscv_hart.h" +#include "hw/misc/cv1800b_clk.h" + +#define TYPE_CV1800B_SOC "cv1800b-soc" +OBJECT_DECLARE_SIMPLE_TYPE(CV1800BSoCState, CV1800B_SOC) + +struct CV1800BSoCState { + DeviceState parent_obj; + + RISCVHartArrayState cpus; + MemoryRegion rom; + DeviceState *plic; + CV1800BClkState clk; +}; + +#define CV1800B_PLIC_NUM_SOURCES 136 +#define CV1800B_PLIC_NUM_PRIORITIES 31 + +#define CV1800B_UART0_IRQ 44 +#define CV1800B_SD0_IRQ 36 + +enum { + CV1800B_DEV_TOP_MISC, + CV1800B_DEV_PINMUX, + CV1800B_DEV_CLK, + CV1800B_DEV_RST, + CV1800B_DEV_WDT, + CV1800B_DEV_GPIO, + CV1800B_DEV_UART0, + CV1800B_DEV_SD0, + CV1800B_DEV_ROM, + CV1800B_DEV_RTC_GPIO, + CV1800B_DEV_RTC_IO, + CV1800B_DEV_PLIC, + CV1800B_DEV_CLINT, + CV1800B_DEV_DRAM, +}; + +extern const MemMapEntry cv1800b_memmap[]; + +#endif --=20 2.54.0.563.g4f69b47b94-goog From nobody Sat May 30 17:44:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1778721449; cv=none; d=zohomail.com; s=zohoarc; b=gz8MyjSc7okU2HCJ8Td0qkmYuq8GYKe73QPg34n4YLMgQqBHDGGvmZhrQ+WKopcODvL6AVpxXqwS47+p9cM10hm1TZ06oiTq4YA9axuvqdULGdrZcw0GOkVWmEbVRsXRCz01lGB5NLasDn8cn/oh9/9KJTpMiZhA2Hu1jCsOcXk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778721449; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=btACu44F7m2XyBw22Y9nh48m6qUD/VAzMvqfoWZCSYo=; b=JXVA7kklQP2QW7ck826S01YR5gxJp4W163EBH1vAXWHpbphYCNkKodzLyJOBkmQvBDmvtCuyHcW96ITV4xJ5fZHC2g6yTamQAvTCwoKR2Yaq697yMyFB0WyAlshwCfz+P1J1QnXPrBHOfqRCSKTcC+MwXCdiNQnt03IPLjK5cmM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778721449097152.45235416077287; Wed, 13 May 2026 18:17:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wNKgU-0006vf-6f; Wed, 13 May 2026 21:16:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wNKgS-0006vJ-6n for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:16 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wNKgQ-0000zY-By for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:15 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-3665b67ed66so3834314a91.1 for ; Wed, 13 May 2026 18:16:14 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (54.109.81.34.bc.googleusercontent.com. [34.81.109.54]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5c0600c3sm4982575ad.29.2026.05.13.18.16.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 18:16:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778721373; x=1779326173; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=btACu44F7m2XyBw22Y9nh48m6qUD/VAzMvqfoWZCSYo=; b=UMXqU1cV5yJn+ySNFzcLkv/EFGzSg+h4th4IZWGoFiDa4qd0Mdo7NkQwAbdTh1brwg AaLMzCxZ+L7A8i8YjlZhIFJi+k0xcA6xY6j21Mmyf/ftFlwonVYstkLRvEFf5jwSJ3eX CisGyCKqTnoxb83FTaMUJ725Dy2umKEZkAN88X7TNrTeaHYNGofu0CS7v1OC44z6vpMX wgdtgAj3nF9/oMUd9+iRD9f+Fl0iBE3U3oQW+1J3/Vqj9DO5EIP+Miw5M6PVacAGDzpu D03+qOIKdFhbQCN734S2Q1a8ec5Y7NnJkW7pLcsXuD97ZNjL5sqlvYMzqYAHcb/f2UP/ G7Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778721373; x=1779326173; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=btACu44F7m2XyBw22Y9nh48m6qUD/VAzMvqfoWZCSYo=; b=af66XhwRTeo5wQcuTuYoNX8wTwGh77cu+RToE+jGdhDVUxrylDbQDF0c7C3XM9M7Rz qEWp1sIGUX2tBKmMaMbB6aw24FcaJYrGibsk3FIoPK+twxU18au36SQ9tvCZltaq2vP9 QjXuyCPM/ej8EI1bYctlZCOqtf93gaNFyaLIRwW/J8FVeFoai0GXmvjiv2lT5qvqnKgt 45JmRq3Z8KUQDqN7wUMctw1kmsfygawFK8yjvSaq9opgI1MlAo13a8465Mymfw0xoWmB vFwYHRf7zSoQovaY7PVLerpDKFNmIvHr6+rQx9ftec+Gp+HEs9lcwAiTy/sFbYTOpTtC E3dw== X-Forwarded-Encrypted: i=1; AFNElJ8vM8l9LHaeJ5D5/X2CSMQtmLge0JWTj/UOepwwpw4qrXSiHZLOmXz0cjojlrj/at43abXR7vu/IjnY@nongnu.org X-Gm-Message-State: AOJu0YyzTnES/hXCWkzrjNTxyH4goOHbaaGNASAQjhYe46AHXxdoSJdg BR0f6K7sX0O59qX3TZKZC/eMPydK3UaXpGYSSBtRmh1DH5SqlMsneWOC X-Gm-Gg: Acq92OGl8pBx4qFH8yyLPOyFNuz6LqNYQEw4T8+XnuFJ4sEgRE5IQUfYA4od2W3peBy KPim8hqeCyJ2rDbXmA+l18MQg/HlT1+YQVKWLvjKPscqhHRu03gzkfZ0gva7N5Lzcz0I8NltTcR kEahK2kecltrzdoG08IG0oPwos/gOcbAzHH4wM0QJmpLQERlMldbCb9JazA5mTL5w+e631ZifmA DdFmAT5HvdXLMfwNLPLr27AX8+9yboxRFLaC6ioyOd0x9LfE+Sv5YK4eJoI52MibP1Xf1IjoCah rwzudJr0Z0VxzEVXOblrblRQ+pa+srH4as/44TL4Ks/XGyPUkByRFpI0dcx96TydwJcFg61zhv/ 2+dUAptSTrfYOg7YVzXmvNppY2amhECfPwV1Wu4gOQizh+S0Wgs8pDXsuB1fKnkEVeWK/wGW1tp LRyTj5lOwoRsOw2uJy2O7jexq28FeEzZXTk87u6fo5SCg4k+yFN5LTbO9whhgJ1dWylbd3fVvHN X4xRF982ijTIIPGgWGtYWdVo8JT7rS1eA== X-Received: by 2002:a17:902:a581:b0:2b9:f8e9:70e2 with SMTP id d9443c01a7336-2bd271455ffmr37928125ad.8.1778721372654; Wed, 13 May 2026 18:16:12 -0700 (PDT) From: Kuan-Wei Chiu To: pbonzini@redhat.com, marcandre.lureau@redhat.com, palmer@dabbelt.com, alistair.francis@wdc.com, christoph.muellner@vrull.eu, farosas@suse.de, lvivier@redhat.com Cc: liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com, chao.liu.zevorn@gmail.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, marscheng@google.com, qemu-devel@nongnu.org, qemu-riscv@nongnu.org, Kuan-Wei Chiu Subject: [PATCH v2 5/6] hw/riscv: Add Milk-V Duo board support Date: Thu, 14 May 2026 01:15:27 +0000 Message-ID: <20260514011528.1263665-6-visitorckw@gmail.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog In-Reply-To: <20260514011528.1263665-1-visitorckw@gmail.com> References: <20260514011528.1263665-1-visitorckw@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=visitorckw@gmail.com; helo=mail-pj1-x1035.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778721451797158500 Content-Type: text/plain; charset="utf-8" Add support for the Milk-V Duo development board, which is powered by the Sophgo CV1800B SoC. The implementation includes: - Board-level machine initialization with 64mb of default ram. - Integration of the CV1800B SoC. - Support for loading external FDT, kernel, and initrd images. - Proper setup of the reset vector to match the CV1800B's boot flow. Signed-off-by: Kuan-Wei Chiu --- MAINTAINERS | 11 ++ configs/devices/riscv64-softmmu/default.mak | 1 + hw/riscv/Kconfig | 6 + hw/riscv/meson.build | 1 + hw/riscv/milkv_duo.c | 122 ++++++++++++++++++++ 5 files changed, 141 insertions(+) create mode 100644 hw/riscv/milkv_duo.c diff --git a/MAINTAINERS b/MAINTAINERS index afa178c5cc..a5649fd31f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1780,6 +1780,17 @@ F: docs/system/riscv/xiangshan-kunminghu.rst F: hw/riscv/xiangshan_kmh.c F: include/hw/riscv/xiangshan_kmh.h =20 +Milk-V Duo +M: Kuan-Wei Chiu +S: Maintained +F: hw/char/dw8250.c +F: hw/misc/cv1800b_clk.c +F: hw/riscv/cv1800b.c +F: hw/riscv/milkv_duo.c +F: include/hw/char/dw8250.h +F: include/hw/misc/cv1800b_clk.h +F: include/hw/riscv/cv1800b.h + RX Machines ----------- rx-gdbsim diff --git a/configs/devices/riscv64-softmmu/default.mak b/configs/devices/= riscv64-softmmu/default.mak index a8e4d0ab33..2ba91b14d4 100644 --- a/configs/devices/riscv64-softmmu/default.mak +++ b/configs/devices/riscv64-softmmu/default.mak @@ -13,3 +13,4 @@ # CONFIG_SHAKTI_C=3Dn # CONFIG_XIANGSHAN_KUNMINGHU=3Dn # CONFIG_MIPS_BOSTON_AIA=3Dn +# CONFIG_MILKV_DUO=3Dn diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index 5b68991edb..8615b1cc3e 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -146,3 +146,9 @@ config SOPHGO_CV1800B select SIFIVE_PLIC select SOPHGO_CV1800B_CLK select DW8250 + +config MILKV_DUO + bool + depends on RISCV64 + default y + select SOPHGO_CV1800B diff --git a/hw/riscv/meson.build b/hw/riscv/meson.build index 04e25eeece..19a0bf8e5b 100644 --- a/hw/riscv/meson.build +++ b/hw/riscv/meson.build @@ -19,5 +19,6 @@ riscv_ss.add(when: 'CONFIG_RISCV_MIPS_CPS', if_true: file= s('cps.c')) riscv_ss.add(when: 'CONFIG_MIPS_BOSTON_AIA', if_true: files('boston-aia.c'= )) =20 riscv_ss.add(when: 'CONFIG_SOPHGO_CV1800B', if_true: files('cv1800b.c')) +riscv_ss.add(when: 'CONFIG_MILKV_DUO', if_true: files('milkv_duo.c')) =20 hw_arch +=3D {'riscv': riscv_ss} diff --git a/hw/riscv/milkv_duo.c b/hw/riscv/milkv_duo.c new file mode 100644 index 0000000000..5e8d5ea009 --- /dev/null +++ b/hw/riscv/milkv_duo.c @@ -0,0 +1,122 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Milk-V Duo board + * + * Copyright (c) 2026 Kuan-Wei Chiu + */ + +#include "qemu/osdep.h" +#include "qemu/units.h" +#include "qapi/error.h" +#include "hw/core/boards.h" +#include "hw/riscv/cv1800b.h" +#include "hw/riscv/boot.h" +#include "target/riscv/cpu-qom.h" +#include "system/system.h" +#include "system/device_tree.h" +#include "qemu/error-report.h" +#include "hw/core/loader.h" +#include + +struct MilkVDuoState { + MachineState parent_obj; + CV1800BSoCState soc; +}; + +#define TYPE_MILK_V_DUO MACHINE_TYPE_NAME("milkv-duo") +OBJECT_DECLARE_SIMPLE_TYPE(MilkVDuoState, MILK_V_DUO) + +static void milkv_duo_init(MachineState *machine) +{ + MilkVDuoState *s =3D MILK_V_DUO(machine); + MemoryRegion *system_memory =3D get_system_memory(); + RISCVBootInfo boot_info; + hwaddr firmware_load_addr, firmware_end_addr; + hwaddr fdt_load_addr =3D 0; + int fdt_size =3D 0; + uint64_t kernel_entry =3D 0; + + object_initialize_child(OBJECT(machine), "soc", &s->soc, TYPE_CV1800B_= SOC); + qdev_realize(DEVICE(&s->soc), NULL, &error_fatal); + + memory_region_add_subregion(system_memory, + cv1800b_memmap[CV1800B_DEV_DRAM].base, + machine->ram); + + riscv_boot_info_init(&boot_info, &s->soc.cpus); + + firmware_load_addr =3D cv1800b_memmap[CV1800B_DEV_DRAM].base; + firmware_end_addr =3D firmware_load_addr; + if (machine->firmware) { + firmware_end_addr =3D riscv_find_and_load_firmware(machine, machin= e->firmware, + &firmware_load_ad= dr, NULL); + } + + if (machine->dtb) { + machine->fdt =3D load_device_tree(machine->dtb, &fdt_size); + if (!machine->fdt) { + error_report("Failed to load device tree"); + exit(1); + } + + if (machine->kernel_cmdline && *machine->kernel_cmdline) { + if (fdt_path_offset(machine->fdt, "/chosen") < 0) { + qemu_fdt_add_subnode(machine->fdt, "/chosen"); + } + qemu_fdt_setprop_string(machine->fdt, "/chosen", "bootargs", + machine->kernel_cmdline); + } + } + + if (machine->kernel_filename) { + hwaddr kernel_start_addr =3D riscv_calc_kernel_start_addr(&boot_in= fo, + firmware_e= nd_addr); + riscv_load_kernel(machine, &boot_info, kernel_start_addr, true, NU= LL); + kernel_entry =3D boot_info.image_low_addr; + } + + if (machine->dtb) { + fdt_load_addr =3D riscv_compute_fdt_addr(cv1800b_memmap[CV1800B_DE= V_DRAM].base, + machine->ram_size, machine,= &boot_info); + rom_add_blob_fixed_as("fdt", machine->fdt, fdt_size, fdt_load_addr, + &address_space_memory); + } + + riscv_setup_rom_reset_vec(machine, &s->soc.cpus, + firmware_load_addr, + cv1800b_memmap[CV1800B_DEV_ROM].base, + cv1800b_memmap[CV1800B_DEV_ROM].size, + kernel_entry, + fdt_load_addr); +} + +static void milkv_duo_machine_class_init(ObjectClass *oc, const void *data) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + static const char *const valid_cpu_types[] =3D { + TYPE_RISCV_CPU_THEAD_C906, + NULL + }; + + mc->desc =3D "Milk-V Duo Board (CV1800B)"; + mc->init =3D milkv_duo_init; + mc->max_cpus =3D 2; + mc->default_cpu_type =3D TYPE_RISCV_CPU_THEAD_C906; + mc->valid_cpu_types =3D valid_cpu_types; + mc->default_ram_size =3D 64 * MiB; + mc->default_ram_id =3D "riscv.milkv_duo.ram"; +} + +static const TypeInfo milkv_duo_machine_type_info =3D { + .name =3D TYPE_MILK_V_DUO, + .parent =3D TYPE_MACHINE, + .instance_size =3D sizeof(MilkVDuoState), + .class_init =3D milkv_duo_machine_class_init, +}; + +static void milkv_duo_machine_register_types(void) +{ + type_register_static(&milkv_duo_machine_type_info); +} + +type_init(milkv_duo_machine_register_types) --=20 2.54.0.563.g4f69b47b94-goog From nobody Sat May 30 17:44:07 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1778721408; cv=none; d=zohomail.com; s=zohoarc; b=OdDexXi+BgZuuhVnTu+eV9gB45rxpgoDuKCAnNNQVOvqlWp9gVo4XUkq38UEfxxBhLrsm0H3rNPHjZGnXbxkbD9psLSaK1MfEE5ptTgeneJXRD+mE1oDRydO/Dn6t6O+iSOPwIFy5P5KkyPLWy2AByNmntT1FQXpmnQi6JZsw48= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1778721408; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=48f8zhjwiic2pmGqpnVLoLU8gNIYYQJefLG12/r1uMo=; b=Idp6TfvjpqRPCTK4l2ECHFuun2fH8UfzVF9LHc7d8JUNLkWvv/Owd8demV+eZQ5QQMYVyE7Dxgs78sfImxqwghhJ/E+SWvnnbKaP+9GLCRV+ohQDksSss3f2d2/JF4y0ENwfMgggdN76YTGK8H0TwgjgPAQlZsK5uNYaCKEopFk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1778721408303466.5503544116759; Wed, 13 May 2026 18:16:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wNKgY-0006x8-Ry; Wed, 13 May 2026 21:16:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wNKgX-0006wM-8t for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:21 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wNKgV-000113-OD for qemu-devel@nongnu.org; Wed, 13 May 2026 21:16:21 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2bd2051167eso11215985ad.1 for ; Wed, 13 May 2026 18:16:19 -0700 (PDT) Received: from visitorckw-work01.c.googlers.com.com (54.109.81.34.bc.googleusercontent.com. [34.81.109.54]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2bd5c0600c3sm4982575ad.29.2026.05.13.18.16.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 18:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778721378; x=1779326178; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=48f8zhjwiic2pmGqpnVLoLU8gNIYYQJefLG12/r1uMo=; b=PsDlqjPAkmuuH7oC6MgzINIdbyBohzVUOyMdf0AR4mSqX6IJfiXIFOZCA1zTpnomg5 r0xz59d7vXzNG+J9y73Kl7Mz8Ib1IJJFA6uObSqM05509NcPXx8S0JbygoCKF6EOuLQm VF2x3YNLiHefouJBF469pJnW4W51ajwv0Wz3HzfXZvR3051rnoK3IgjkPk8bbOi6neTM 9pGF8ZCoCaFr1bD5aDUEVQ11nYqMJ6Bh6Ci5b7KXiBJPmw8+pFVfFRoWRhcGcZXxF1+6 dOK4mvqsKUQj577ia74nzEZBj/xPteh1rev9H4Lfd1tZCSIs1AoymTXP0AXJKZWiwrqc 8Vwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778721378; x=1779326178; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=48f8zhjwiic2pmGqpnVLoLU8gNIYYQJefLG12/r1uMo=; b=IT/p3S3akeW+ss/ewvyKrQH6XLfcMyp8VWZ+bJwPd8ZdcXigiZrBrGwtFURCBGWEYo 1LafqtWQDGFuzqFqzi3YykUvAYz4eFLydmzmrij4+LlTKZdlFBiaT4uaUFbD+kiqHgmv to3j4Kl4r+R2YPneerN6/QcpLcqueqoMAkjIymZ1oyreBBCtUNQVWx6N5XUOWscURvFt dirThi/Oyn98LIyb23BOn0gSgTrO+ssZ918fCp+1cxSe1Qxcl7piqOQi9JhmSmJgQ0ap DWRzyi9S28/+LGC+POh63wlY6BtWM2kK9jMYP8vqtnLKM3/AOJVd6SbjnXzLPS1G9zVl EQyg== X-Forwarded-Encrypted: i=1; AFNElJ/Cu2II57J6bDyR0V+hiY9zBQBFnp/hBMzFA7bMKXChYg97AyOOvvIHxGWc1nmi4xH9rBHj+8Vu+5Oo@nongnu.org X-Gm-Message-State: AOJu0Yyt53wkBwAxOlLspwr+Z5xj6QNjbSKHZIT0QsRamYPeFmLg7JOR DwVzTJbrU2B4xwbpqJ7Xnv8eYjJnCfu0VRcoH65uDUrKY98WExBqcBKf X-Gm-Gg: Acq92OEdlXjf2772UVRTeiCLLT9HzEmvWWn6Nqx4EmlVNE4g4IIZakUYC7wIVgvBWww BpwprM0Purvhlcg1ItJ5auKwdpryKvYJKhNvNhEqmv0+Oo3LKl37LzWAOpqDAafU+yBEo0XGE6z MTYaXPmxZR3FKzya+98yXvCbuUsmWLm6TGo4CaqBRiXGoV8o4Sta9grC4XbJFChSOt011jaSRof PQJ+diJPVbHpcFTRP5Vl/PVNh2eX8hnw9kkdHkJRVx0AN3OOrxiSwHs/Dr8VzhATvzmeia1XUk2 54VpgiVDAUWUqfSSRg/gF7SSIku11pB0V8ic53MIYzcnAbJynuEJsJ7IJsgmmGo9Dn/AMY9ngwG BO9Ebaup9xXzbQ4uqEP2T3D9wuK8axoUdatx8AeVA8hL/f6/rW8XKydIZJSU2jo24s0NrToJA/z 1v1idKYvRujZ3Td8soH0gX+t6YvCmf4zJmG1Nv/TTfvqQjJ/2PsRiWtr02wNIE+fsZ9HoXGa1o9 Mh5aam8v5uHB85arvS7sLUOIygrevbpleYVK2F70DdU X-Received: by 2002:a17:902:e752:b0:2b9:cd2d:6f11 with SMTP id d9443c01a7336-2bd2f704a2cmr56455425ad.18.1778721378014; Wed, 13 May 2026 18:16:18 -0700 (PDT) From: Kuan-Wei Chiu To: pbonzini@redhat.com, marcandre.lureau@redhat.com, palmer@dabbelt.com, alistair.francis@wdc.com, christoph.muellner@vrull.eu, farosas@suse.de, lvivier@redhat.com Cc: liwei1518@gmail.com, daniel.barboza@oss.qualcomm.com, zhiwei_liu@linux.alibaba.com, chao.liu.zevorn@gmail.com, jserv@ccns.ncku.edu.tw, eleanor15x@gmail.com, marscheng@google.com, qemu-devel@nongnu.org, qemu-riscv@nongnu.org, Kuan-Wei Chiu Subject: [PATCH v2 6/6] tests/qtest: Add qtest for Milk-V Duo board Date: Thu, 14 May 2026 01:15:28 +0000 Message-ID: <20260514011528.1263665-7-visitorckw@gmail.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog In-Reply-To: <20260514011528.1263665-1-visitorckw@gmail.com> References: <20260514011528.1263665-1-visitorckw@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=visitorckw@gmail.com; helo=mail-pl1-x630.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1778721411312158500 Content-Type: text/plain; charset="utf-8" Add minimal qtest coverage for the Milk-V Duo machine to validate basic MMIO mapping and register access. Currently tested: - Verify DW8250 UART component version and type signatures. - Test read/write access to CV1800B clock bypass register. Tested with: $ meson test -C build -v qemu:qtest-riscv64/milkv-duo-test [...] Ok: 1 Fail: 0 Signed-off-by: Kuan-Wei Chiu --- MAINTAINERS | 1 + tests/qtest/meson.build | 3 +- tests/qtest/milkv-duo-test.c | 70 ++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 tests/qtest/milkv-duo-test.c diff --git a/MAINTAINERS b/MAINTAINERS index a5649fd31f..8e62809728 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1790,6 +1790,7 @@ F: hw/riscv/milkv_duo.c F: include/hw/char/dw8250.h F: include/hw/misc/cv1800b_clk.h F: include/hw/riscv/cv1800b.h +F: tests/qtest/milkv-duo-test.c =20 RX Machines ----------- diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 43f83ffd3a..524340276e 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -290,7 +290,8 @@ qtests_riscv64 =3D ['riscv-csr-test'] + \ (unpack_edk2_blobs ? ['bios-tables-test'] : []) + \ (config_all_devices.has_key('CONFIG_IOMMU_TESTDEV') and config_all_devices.has_key('CONFIG_RISCV_IOMMU') ? - ['iommu-riscv-test'] : []) + ['iommu-riscv-test'] : []) + \ + ['milkv-duo-test'] =20 qos_test_ss =3D ss.source_set() qos_test_ss.add( diff --git a/tests/qtest/milkv-duo-test.c b/tests/qtest/milkv-duo-test.c new file mode 100644 index 0000000000..06064b8733 --- /dev/null +++ b/tests/qtest/milkv-duo-test.c @@ -0,0 +1,70 @@ +/* + * QTest for Milk-V Duo Board + * + * Copyright (c) 2026 Kuan-Wei Chiu + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "libqtest.h" + +#define CV1800B_CLK_BASE 0x03002000 +#define CV1800B_CLK_BYPASS 0x030 +#define CV1800B_CLK_BYPASS_RESET 0xFFFFFFFF +#define TEST_PATTERN_5A 0x5A5A5A5A +#define TEST_PATTERN_A5 0xA5A5A5A5 + +#define CV1800B_UART0_BASE 0x04140000 +#define DW_UART_UCV 0xF8 +#define DW_UART_CTR 0xFC +#define DW_UART_VERSION_3_23A 0x3332332A +#define DW_UART_TYPE_SIGNATURE 0x44570110 + +static void test_milkv_duo_uart(void) +{ + QTestState *qts; + uint32_t component_version; + uint32_t component_type; + + qts =3D qtest_init("-M milkv-duo"); + + component_version =3D qtest_readl(qts, CV1800B_UART0_BASE + DW_UART_UC= V); + g_assert_cmphex(component_version, =3D=3D, DW_UART_VERSION_3_23A); + + component_type =3D qtest_readl(qts, CV1800B_UART0_BASE + DW_UART_CTR); + g_assert_cmphex(component_type, =3D=3D, DW_UART_TYPE_SIGNATURE); + + qtest_quit(qts); +} + +static void test_milkv_duo_clk(void) +{ + QTestState *qts; + uint32_t clk_bypass_val; + + qts =3D qtest_init("-M milkv-duo"); + + clk_bypass_val =3D qtest_readl(qts, CV1800B_CLK_BASE + CV1800B_CLK_BYP= ASS); + g_assert_cmphex(clk_bypass_val, =3D=3D, CV1800B_CLK_BYPASS_RESET); + + qtest_writel(qts, CV1800B_CLK_BASE + CV1800B_CLK_BYPASS, TEST_PATTERN_= 5A); + clk_bypass_val =3D qtest_readl(qts, CV1800B_CLK_BASE + CV1800B_CLK_BYP= ASS); + g_assert_cmphex(clk_bypass_val, =3D=3D, TEST_PATTERN_5A); + + qtest_writel(qts, CV1800B_CLK_BASE + CV1800B_CLK_BYPASS, TEST_PATTERN_= A5); + clk_bypass_val =3D qtest_readl(qts, CV1800B_CLK_BASE + CV1800B_CLK_BYP= ASS); + g_assert_cmphex(clk_bypass_val, =3D=3D, TEST_PATTERN_A5); + + qtest_quit(qts); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + qtest_add_func("/riscv/milkv-duo/uart", test_milkv_duo_uart); + qtest_add_func("/riscv/milkv-duo/clk", test_milkv_duo_clk); + + return g_test_run(); +} --=20 2.54.0.563.g4f69b47b94-goog