From nobody Tue Feb 10 08:40:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1530840287676724.5150397604763; Thu, 5 Jul 2018 18:24:47 -0700 (PDT) Received: from localhost ([::1]:55380 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fbFUE-0004Oa-9h for importer@patchew.org; Thu, 05 Jul 2018 21:24:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36321) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fbFSF-0003CI-K1 for qemu-devel@nongnu.org; Thu, 05 Jul 2018 21:22:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fbFSC-0007bc-O4 for qemu-devel@nongnu.org; Thu, 05 Jul 2018 21:22:35 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:17069) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1fbFSC-0007YF-FB for qemu-devel@nongnu.org; Thu, 05 Jul 2018 21:22:32 -0400 Received: from mail-dm3nam03lp0019.outbound.protection.outlook.com (HELO NAM03-DM3-obe.outbound.protection.outlook.com) ([207.46.163.19]) by ob1.hgst.iphmx.com with ESMTP; 06 Jul 2018 09:22:30 +0800 Received: from risc6-mainframe.int.fusionio.com (199.255.44.171) by CY4PR04MB0393.namprd04.prod.outlook.com (2603:10b6:903:b1::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.930.19; Fri, 6 Jul 2018 01:22:27 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1530840153; x=1562376153; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=UsL1R6nSk9FCGDgbxZ6vZCfnhhAQE1GCwXF3PmZa0KI=; b=I3mBp8K6IXOXN8NQ86DwsR9NYCOLL0DFraEa9sca5TwChPteb4m+mPnp f8jZ1C7S2tBnQgzfYBl2TKZrqwk/ZonqT5Q3E9Me6cVw4qtQChL6TRCZ/ TJ58Y1YdjIPEJenfcGUev85TSennaiMyLY2hoPVRSZmWB9vVH/isT4K+x y9ESGAElTvMzkL3E0P0lxpx3EyBLK5e6t9+N+F3smh3f2Nuz5/iRr/0WH tKChljX+IpACgg2WKBCTkoSdya17fylpgxt8YHJMvMp6GEqwe4tzs1Jmm NaZ6LpFvv7W014FVxV3RJDPCQV07TFDeqU59DphyJEUBr16aYJFTw2+FF g==; X-IronPort-AV: E=Sophos;i="5.51,314,1526313600"; d="scan'208";a="84619620" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector1-wdc-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zdTRgHk6FaJF9RUEd7X5gPInSKwZr+GZNuE0/EV31Oc=; b=S2AY7nC/oJwVe3d8c63g/FFy733KePCObivfPtjVEpwNYO1YzJRfys0sjv/JunmK3ONZwJvloecQ3fqQoe4vzWU4gvJO7NaO0JL3mFK9+uEZbjV1zRdg7LBUUR/o63x+p9+VWyyvNWwqGyJ+ut7ERd5pEdheSRkxPpxrM/VUzVA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alistair.Francis@wdc.com; From: Alistair Francis To: qemu-devel@nongnu.org, peter.maydell@linaro.org, mjc@sifive.com Date: Thu, 5 Jul 2018 18:22:10 -0700 Message-Id: <20180706012215.21714-3-alistair.francis@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180706012215.21714-1-alistair.francis@wdc.com> References: <20180706012215.21714-1-alistair.francis@wdc.com> MIME-Version: 1.0 X-Originating-IP: [199.255.44.171] X-ClientProxiedBy: CO1PR15CA0105.namprd15.prod.outlook.com (2603:10b6:101:21::25) To CY4PR04MB0393.namprd04.prod.outlook.com (2603:10b6:903:b1::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 739b402c-d8bd-4778-0780-08d5e2def006 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600053)(711020)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020); SRVR:CY4PR04MB0393; X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 3:SOGjeoQYeFIiCCDncjTpU9Iuh2tuE3OmN0KE0c01wW/kAqcIV4Dg0VgBuYVzw/guyQPThJH+fXjWTJgCEpJvjbSE5/c9fKudXQZWVT6mE0fnW7xPiqK2nRKd2VfpXkHC8kGh0fL+H634hQZypeEKGTbQ93svCpWXH2vc137m0CDjAF47mj1ulqL+cNUdrJRMhbUaDQF44LTL/bOjbH3oCMDRUV9rF1HkVxVPqs4NVQ18CftnYRuawaBoavjIClLk; 25:/f/OqPg4CNBBYa9gdGpvrJJ7OFuCyEwAwxQMuk9phAMOaTCchq6rhILMAEIX65qaxM2IWk9QYfPo0VS7rT5QiiIj0upFoIs2hYiWqUlElHKvRv2/lpQxUNM0uylPBfIm4fAqSe4YT5dmiJs+euGx7KCYyBdHXvDffIhl+5P+7j638XT9r6w/YdICPNbESFquS/lU3Z5Jhdu+ox0rN8HcJ1AitUfjYr8Zqag6yk7610kzgoLAwgEG6meiAyMxlvbW3SY25JHUHse3gVYmZ/jhT/NL14JUNTPbZrwHQfczUwtC5x/AJdTu+NdGTrEnIYT2Gl/4VyI/LA556/7A1th1Og==; 31:LYOzXddU7O14dyI7PIlduBhBaYg6Ano36DDyDzfv1MBUR+83DvnlUiXCxIHA/LaGIZwHP3YfedDO4gQicyHP/abptFXpGt86KHdaa1pP8cKW1eqfh2kxVqB+OJyYJTR5lH+PWjT2RBbopagfMwSjmr2LsCRD4EhvBhbk1tNjVh0EavMPxmfxMgC5r5WXVQUPUpm2jCGjf+YAL8Mhq4W0HUPu5gPcurkKwLgTpZ5A59g= X-MS-TrafficTypeDiagnostic: CY4PR04MB0393: WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 20:odYe7aiwKS2voWFUoo7KpTLfDguVpbV5Yn/szrkntdffCbNdkKKa6p3H2jbjzeIYrmHgx/HpPR9kH446rqCDTINrbqOmn7RRP0aLkpZK2NG43u9mrcIu/+dIBWHQy3j+6JF3EgyzC1jlM+9ndTNhpapgmFE/oNjeFWfW/aWmLgBbtZV4sQ0aMbl4efNr7fxBVuweyea3LuETvO2SXaKdVGNVTAlVnZDSjhlMqAcwbggyDmhiwTUhFahGKHTNrqgrHVaURObVa9UYLcbH+qPI99RpyVvONuLCy5Y3awMeqRawtIzjvItce/ZUcrgKpH6IWUC3tfukQ2uZiAk3DpsEA/A7HdnEIfOyW/buT9h87CTsI96/gfYmrXwTqMfSnBlXNcqdjBGlJRK0O9Hgcy4eV+/aLFKggsxDh6OfKMNZGwM37rB0pYQoDWJh5niRRDjYKWet7tnyv5y9DOBJcHhDJm9tYqA/KO3uK/UPXpeupjc89a+2GzqaR3trxuoNPZ9K; 4:/MKqNZOzDGfbAUm+3dslfMlu6CVcYe7zBmZzjxh3oBeq50TY33BuJXUuVM0Gt780qV4TstICaeXavv5vAqCXAArnIczK8aG6Fu8UyEbvX9WToeqflGJyPOpV0pKf/YuMpVO9RTURtRYfS8mVOmuAjkL58UgQzrPirQzS+ZZldLbK/J7HE/VitYiJGXRmThbGup85Sq1Qqt6l/xtoRR024G4ZPsTDK9blnPMbcZJdxE2dgO0lh70Gi1lWcRzYjewRwYZKxT+9XruB6SadzqFHqA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3231254)(944501410)(52105095)(93006095)(93001095)(3002001)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:CY4PR04MB0393; BCL:0; PCL:0; RULEID:; SRVR:CY4PR04MB0393; X-Forefront-PRVS: 0725D9E8D0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6029001)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(53936002)(68736007)(50466002)(48376002)(97736004)(81156014)(81166006)(8676002)(8936002)(3846002)(6116002)(44832011)(106356001)(26005)(186003)(76176011)(386003)(16586007)(316002)(16526019)(2906002)(51416003)(2616005)(52116002)(11346002)(476003)(6506007)(956004)(446003)(7736002)(6486002)(1076002)(25786009)(72206003)(50226002)(39060400002)(105586002)(36756003)(6512007)(478600001)(6666003)(47776003)(5660300001)(14444005)(4326008)(305945005)(486006)(66066001)(86362001); DIR:OUT; SFP:1102; SCL:1; SRVR:CY4PR04MB0393; H:risc6-mainframe.int.fusionio.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR04MB0393; 23:JDix8P/FM3kB3CcixMtqpspTHZuvYKoU4SJK+xHTf?= =?us-ascii?Q?+9ljFx2flhdlaB9YjvvCKhg+R/9F/BLR/QJv01j+a4emizQzcirg3vzx7ToS?= =?us-ascii?Q?EPiwJiCevbkalQcY1zoacLtkNvM0hjvkt/4CGK0K5KOrur4MteX9ZKoK0MMT?= =?us-ascii?Q?a5z0sP06ilD1zUiFoZ9iPhsTNYxBrk4NjG3uXaF9tR5ebasfe37azN6kGtoR?= =?us-ascii?Q?w50oPeTcA+S69vPgYcy33xi51rpzixwaRJBpdWaH195KWYgUF+jzpZ0Wn2fE?= =?us-ascii?Q?0FNaF3WYwPdK6PaqiLlVpahp2RrC/0wJfQv/exG2lY/nanKA3gGHAf16xuJx?= =?us-ascii?Q?9Y81m5NN/G5dPV14g8Vz6JeniX7zQ5cCPpr+tCqElh2TsV/nXPwcSGdExAoc?= =?us-ascii?Q?ojzOur04WEhbSojOM/DmApc5Syd23uFiWbSpweX8vfvP5pXohJ1isv+DlAX6?= =?us-ascii?Q?QFYk81Vr+s9ip+ih+StRt38iZCZP4Ymiua4z3c2vmaIq9ED6fI5xRhFqFnVN?= =?us-ascii?Q?Njjr16EwV9lDCXYtrARe4br+oSFY3VUyfg9Y0u4BhkOHblXG1FzcWji4HlIG?= =?us-ascii?Q?IIMlgWXLSmzfNEpXNydOowPccRiYIDSn7v9ryTq028//XGk/opDQG7lZxJds?= =?us-ascii?Q?9m4fusONF07ghMJGnxZfuTEfJXTOFfLBrcDfLub+r1Ngrya3+yZFx4RHkHn0?= =?us-ascii?Q?beIOdtmxpAdQ5q1svHHGFbxnqPQznqroIVYEmRqCqstgjb8Bj9Lp9cUWEp1M?= =?us-ascii?Q?oVFxE05+qu+MdKuQIfG+1Gcga4IW1JJpjBSuh7d/X4jL//TzR49nr43/O7og?= =?us-ascii?Q?dPaKXk7cLFtWqGPBkKIdTHvuydOLzDukjJuiAbon2uIOrAs0tIelMvnPL3Ul?= =?us-ascii?Q?ekJZvcS0jVCzbEY3KeMvnh9/IY+TBMK2Yj0cNhHQMEx17i0OFHcnyKMddms2?= =?us-ascii?Q?R1mLDP+efUz78q2OO6GOF0MPqSklFW8TW7an/2ETt786u1Y4d6f1HDO/N4TE?= =?us-ascii?Q?UKKPPAt1rOzgxXFpQE+OsCzHeQ/q5Vf64abpnX1Nh7jhtdDWD50pBAHt3Sb3?= =?us-ascii?Q?CCtnEC3lPRYjKWG38e9tKdDKPKNxecAZq2G+EbLLsXoGuzyZLVzmDjFESY03?= =?us-ascii?Q?cw3uX9CrgME3B9XEIbgICm4kB3h7bSjrMV22RGFXBuqs+JcHDfmgw15IA2C9?= =?us-ascii?Q?FLwNNTkn0idYK9oQkBAsePfLTI09J/gjTRkNy5fSshHkcOS2i96a3seUYXrM?= =?us-ascii?Q?ZbxClsuIE7OXaXG7C+5ZE72PFUBO1N7JuinzTQA?= X-Microsoft-Antispam-Message-Info: WFEU+A4AT3oW9IEmLcIagrNbwFUrmInhD0dWSiZkvArlYlp8HL3oMESWK5uE6K4YNRVnF2WewqbG6OyJva4JF4sEK0Tbbvo5keYwuIrCdZGI4ViaM0L0wE7ZgO/NnWS0PBM6oM+MvT5bLiwTC1hjJo21z8tx67Ak3owqz3ZltsoblclRs1+HacjAqZ4d/nQA05zB1ScS3VyqvxkJwYJOy1/nAMoYiHMqOKnO6ND2fMdqEx66a6SevTJ5ETUOur+VHLkhYFbmU0a+Z2+Frd/P+L1hVDxpbOfUZ0WMi17tcixH1Cxti03IU4xBkM3XpwXBSw8RzLStJtFb4T4rl2coO4MAKQcrojrMuCuKsOldk5U= X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 6:yZboTuYc7zetRDm30M6d7M8zx/D+VoI/mYDPuEolrSoTAGNMM2fe0a64OPKdMS+hAGi8Qpr7vRVkBU/rkYhVXJGLn862P0wAINt1CGHTAe5oUQNChZztkA845EThai1iMgIqNPxxqUc6KYkUQI4+etBOr6vQqE3OPZZKv1ungpizghYh8DlykLsMXGxGE1eWpXL1QjvM4evEtikbOW9Sr0KdBk6Zt5IAnFq0subQ0wXxjIf2kbE+N90HJ0LZbjsi5zZhDmfB8L9cVr7u+s5+RPgTOLm2o01bl6x0Xw2SJg0EeHIdnKfCaXZF+8a5JZtsy4nqzSWO3WEae/+KUYH1yS1sY3EJF0dGkA8/1/lvOTcWLIo/1sDzNy1HfO6Ic/quv/XUmEgYYjpxhc6aGo3h3Xfe3vOo/4K/aivEmBnTrhZav4riKhAOjHTGKghWUTHFB5eEXb/Ji7ngK4jhHqXrqg==; 5:D5TbofR4LKd9Gd0Y04kEygPLYnJOMKK9rAiO5N4CdKK3qEMhhX8MHC22h75087cDcEy+K22iVEC1/YxKPn1O6LgQqjp/1CX/1PIFopdPmE35D141XzZc/ZzAzx+IQ+KkEmyuBCVA+Lg20cIKXAZBoGQR+88KKDy7YFykwF31Qfo=; 24:LtBQldJLj+WSsQbLvNkzTaIJvz/RSCiCsceTy4A1LLk2FPCLGA//4wQPVIvoKBSYjRuAF9TkucxlLErisJJv9A7YEdt784Qqf8eaNsj8giU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR04MB0393; 7:n0qGPZeg5IdkM/NkBo8gNOIH1Mux3yooLIMltDQyJhCa6xDfvYwUemFHzaF9TI8GF430Hvq4dlzQO91Cc348eYElK4OKDAR3ecvJA4xvkFHhMhyxfgYvF57Q8A9H9iwMms1PkcWID77BhkP7BbwnXusMSFiXFQV+nCpXyj7MQmgMjlIQsf25HplI/LlXHo74k/eu2f1tEYk1KUbP13gIL9LWnKTd2VqhWWY27M7sxUsrZv1v9zRW0/Tl6xn46tMP; 20:TJ/iyK58TpLzrZWYrOpKGq0SnDabm2bgTZ5KV3YUIhOrEFG71RZ/5Cf6KIYqMD1FL8wtbeQozBhATG7j6ApGGo+edGRHHvZz6IIhwGV4SUpqu0LDmzywyddVKb8uVwHizpWhHfF8jTTqvPHf5B1iWJxanmTAamXQbzxNQmEwSoI= X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2018 01:22:27.6494 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 739b402c-d8bd-4778-0780-08d5e2def006 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR04MB0393 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PULL v4 2/7] hw/riscv/sifive_e: Create a SiFive E SoC object X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alistair23@gmail.com, Alistair Francis , f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (found 2 invalid signatures) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Alistair Francis Reviewed-by: Michael Clark --- hw/riscv/sifive_e.c | 94 +++++++++++++++++++++++++++---------- include/hw/riscv/sifive_e.h | 16 ++++++- 2 files changed, 83 insertions(+), 27 deletions(-) diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index e4ecb7aa4b..cb1b6948bf 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -102,18 +102,12 @@ static void riscv_sifive_e_init(MachineState *machine) SiFiveEState *s =3D g_new0(SiFiveEState, 1); MemoryRegion *sys_mem =3D get_system_memory(); MemoryRegion *main_mem =3D g_new(MemoryRegion, 1); - MemoryRegion *mask_rom =3D g_new(MemoryRegion, 1); - MemoryRegion *xip_mem =3D g_new(MemoryRegion, 1); int i; =20 - /* Initialize SOC */ - object_initialize(&s->soc, sizeof(s->soc), TYPE_RISCV_HART_ARRAY); + /* Initialize SoC */ + object_initialize(&s->soc, sizeof(s->soc), TYPE_RISCV_E_SOC); object_property_add_child(OBJECT(machine), "soc", OBJECT(&s->soc), &error_abort); - object_property_set_str(OBJECT(&s->soc), SIFIVE_E_CPU, "cpu-type", - &error_abort); - object_property_set_int(OBJECT(&s->soc), smp_cpus, "num-harts", - &error_abort); object_property_set_bool(OBJECT(&s->soc), true, "realized", &error_abort); =20 @@ -123,6 +117,49 @@ static void riscv_sifive_e_init(MachineState *machine) memory_region_add_subregion(sys_mem, memmap[SIFIVE_E_DTIM].base, main_mem); =20 + /* Mask ROM reset vector */ + uint32_t reset_vec[2] =3D { + 0x204002b7, /* 0x1000: lui t0,0x20400 */ + 0x00028067, /* 0x1004: jr t0 */ + }; + + /* copy in the reset vector in little_endian byte order */ + for (i =3D 0; i < sizeof(reset_vec) >> 2; i++) { + reset_vec[i] =3D cpu_to_le32(reset_vec[i]); + } + rom_add_blob_fixed_as("mrom.reset", reset_vec, sizeof(reset_vec), + memmap[SIFIVE_E_MROM].base, &address_space_memor= y); + + if (machine->kernel_filename) { + load_kernel(machine->kernel_filename); + } +} + +static void riscv_sifive_e_soc_init(Object *obj) +{ + SiFiveESoCState *s =3D RISCV_E_SOC(obj); + + object_initialize(&s->cpus, sizeof(s->cpus), TYPE_RISCV_HART_ARRAY); + object_property_add_child(obj, "cpus", OBJECT(&s->cpus), + &error_abort); + object_property_set_str(OBJECT(&s->cpus), SIFIVE_E_CPU, "cpu-type", + &error_abort); + object_property_set_int(OBJECT(&s->cpus), smp_cpus, "num-harts", + &error_abort); +} + +static void riscv_sifive_e_soc_realize(DeviceState *dev, Error **errp) +{ + const struct MemmapEntry *memmap =3D sifive_e_memmap; + + SiFiveESoCState *s =3D RISCV_E_SOC(dev); + MemoryRegion *sys_mem =3D get_system_memory(); + MemoryRegion *xip_mem =3D g_new(MemoryRegion, 1); + MemoryRegion *mask_rom =3D g_new(MemoryRegion, 1); + + object_property_set_bool(OBJECT(&s->cpus), true, "realized", + &error_abort); + /* Mask ROM */ memory_region_init_rom(mask_rom, NULL, "riscv.sifive.e.mrom", memmap[SIFIVE_E_MROM].size, &error_fatal); @@ -171,23 +208,6 @@ static void riscv_sifive_e_init(MachineState *machine) memmap[SIFIVE_E_XIP].size, &error_fatal); memory_region_set_readonly(xip_mem, true); memory_region_add_subregion(sys_mem, memmap[SIFIVE_E_XIP].base, xip_me= m); - - /* Mask ROM reset vector */ - uint32_t reset_vec[2] =3D { - 0x204002b7, /* 0x1000: lui t0,0x20400 */ - 0x00028067, /* 0x1004: jr t0 */ - }; - - /* copy in the reset vector in little_endian byte order */ - for (i =3D 0; i < sizeof(reset_vec) >> 2; i++) { - reset_vec[i] =3D cpu_to_le32(reset_vec[i]); - } - rom_add_blob_fixed_as("mrom.reset", reset_vec, sizeof(reset_vec), - memmap[SIFIVE_E_MROM].base, &address_space_memor= y); - - if (machine->kernel_filename) { - load_kernel(machine->kernel_filename); - } } =20 static void riscv_sifive_e_machine_init(MachineClass *mc) @@ -198,3 +218,27 @@ static void riscv_sifive_e_machine_init(MachineClass *= mc) } =20 DEFINE_MACHINE("sifive_e", riscv_sifive_e_machine_init) + +static void riscv_sifive_e_soc_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + dc->realize =3D riscv_sifive_e_soc_realize; + /* Reason: Uses serial_hds in realize function, thus can't be used twi= ce */ + dc->user_creatable =3D false; +} + +static const TypeInfo riscv_sifive_e_soc_type_info =3D { + .name =3D TYPE_RISCV_E_SOC, + .parent =3D TYPE_DEVICE, + .instance_size =3D sizeof(SiFiveESoCState), + .instance_init =3D riscv_sifive_e_soc_init, + .class_init =3D riscv_sifive_e_soc_class_init, +}; + +static void riscv_sifive_e_soc_register_types(void) +{ + type_register_static(&riscv_sifive_e_soc_type_info); +} + +type_init(riscv_sifive_e_soc_register_types) diff --git a/include/hw/riscv/sifive_e.h b/include/hw/riscv/sifive_e.h index 12ad6d2ebb..7b6d8aed96 100644 --- a/include/hw/riscv/sifive_e.h +++ b/include/hw/riscv/sifive_e.h @@ -19,13 +19,25 @@ #ifndef HW_SIFIVE_E_H #define HW_SIFIVE_E_H =20 -typedef struct SiFiveEState { +#define TYPE_RISCV_E_SOC "riscv.sifive.e.soc" +#define RISCV_E_SOC(obj) \ + OBJECT_CHECK(SiFiveESoCState, (obj), TYPE_RISCV_E_SOC) + +typedef struct SiFiveESoCState { /*< private >*/ SysBusDevice parent_obj; =20 /*< public >*/ - RISCVHartArrayState soc; + RISCVHartArrayState cpus; DeviceState *plic; +} SiFiveESoCState; + +typedef struct SiFiveEState { + /*< private >*/ + SysBusDevice parent_obj; + + /*< public >*/ + SiFiveESoCState soc; } SiFiveEState; =20 enum { --=20 2.17.1