From nobody Mon Feb 9 02:02:25 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=1751668496; cv=none; d=zohomail.com; s=zohoarc; b=FwCSfAkWhxlI7HQBc/gR1MtYtnO9n1dRWJFyncVVXQK8yVpVjdMvUNPo536pbhicS5DYO4y3/+cgBSsRJEp7zpbYFSPLnJVcEnrkprRBv9ucyBH2VvKoMSgKByYWtnPxm0fBfi94iIavNzCHgcPL3I+tyAIqJ04EbkvMozLnOWs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668496; 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=nx+xC+J/lP71Qi4WUZDurONxg6YN8jBhmpt2oNrZWbI=; b=BnDB4KDnHXb3RU51KhUQmOJ1dD3nPHpwdurJhz7dXkTbW6W2Ima0RIcOziQGHg2ef7ZjjlREoi+w5RSNUZENKFwdU3y5aiUp41EdrxydDVZ6erfwNxLahh9XnDoJ15BFYs/8hh9Us7GwmOmiJC2wUyuvFHWmasSlzzW8hToeHYg= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668496787598.201917301281; Fri, 4 Jul 2025 15:34:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxz-0001lX-8E; Fri, 04 Jul 2025 18:33:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxd-0001fM-FM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxX-00077p-Ps for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:47 -0400 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-4a77ea7ed49so32703971cf.0 for ; Fri, 04 Jul 2025 15:32:42 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668362; x=1752273162; 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=nx+xC+J/lP71Qi4WUZDurONxg6YN8jBhmpt2oNrZWbI=; b=ke9tpbg8CYnk/Qj/9NcqTo0Sjo38von18BMNGSlkLWFkkkeh5mysWkBqtzQtWN19ei T539DZncRajSSI2UZZD3M9YS05u/1YFICj3B13u0wbUJwlW8kXkhURLlLhPePcpEkthM HB74ImD0udtGWw+/lIlvxMMI/YS9d/vt27pRPMQlxpjuHaYN3C43Cssi1mg/Zd5j72/m e+VvaKA78rlpa7A2oKfpcKmFihowWBM6A+umLTBHI+kNjjQOaE4TIL+08LCmOwNq3dRQ J3Otar1F9mSKoD+E/qcabmkldWLcJiy+LoV/8mfoR8eWsBj9MHjezbtHD6C5o0CCv58w WIEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668362; x=1752273162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nx+xC+J/lP71Qi4WUZDurONxg6YN8jBhmpt2oNrZWbI=; b=GUOkizL6YGEqBYNAd6e0KYDomwabpwhtQLULx+kLKDcwoU5NNBxo4w04LfiC0qk1Cr JkoyVsDf9IqM9BEhDINi6EetttKdstZqIUNQ7VJl0/lvYcSn5itd0FkGOJj5rM2q9LBh gRyNL3DoKwng1pnAlfNouGRJM9AAugDBxXb4Fe4zgTTkBe5aX8rgSnkAi1pOqquvnLFj NV8gw3wZ3Z53veMY7U5JDumVpyCQFnQKE+JgyUPcPS/V1rQ7y3TVWwRO+WER89FMC3MH 5nK8kkvNVzfqydBaZn4u+8ov1UtwNuG427i4f1WfihB6JY0TpM/d/gIanbsSbHBkSyGe 8kJg== X-Gm-Message-State: AOJu0YxQuT6LfzOjAYhXxC7xN9J8Sv2moT43pxGzDddlAdk9+v+Fx9RB tuVrIeQfdUwtVVk8ifdURdDh9I10daXaesmZhhgx0CcTwCGZf55nytO0x52SuQ== X-Gm-Gg: ASbGncsHxwYh4lQf2XLqRsfT3ojAl8opVu0dnpccv90FaMJAVjZDtnUfA/6/ZAnG1s4 /pOSwqIzwrrKhvh/6OCDPdj4L0Qx4NfVTFNFkdodOXsC/tbS6hAJdef5otxdURv51Ym46UqwxIn KlASjvZXUkRJIip9zS68tKQajUVQ9XgAlJziAGfSOl5PixOoSPnVMqQlJF2xQAYGAv1DU48uE8U ai5u6kctdmx93VP9L1f3F6gcybsNgyjDUKZ5s7H8+jluVCdLEFrQ1lxP3jsg+deCwONrLmk3f2Q BIbbfIMbiHyxXfvNgGwdPwCjYOkD+Eux8XJjRzHiplhB8/V8B0HTqOSIERuFT7AMAzpbRSBmZ5z +A+TI4Rh7XmM77+o2 X-Google-Smtp-Source: AGHT+IHjzLCvSMgJehRsY6Q+l+veoyifLgWrtg5Vdc6xHyqwj5DShTykX9hTMl4dPuLn2RDwLhLN2w== X-Received: by 2002:ac8:58d0:0:b0:4a9:91fa:7fe9 with SMTP id d75a77b69052e-4a9957d86dbmr71667311cf.22.1751668361656; Fri, 04 Jul 2025 15:32:41 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 01/11] MAX78000: Add MAX78000FTHR Machine Date: Fri, 4 Jul 2025 18:32:29 -0400 Message-Id: <20250704223239.248781-2-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::82e; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x82e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668498749116600 Content-Type: text/plain; charset="utf-8" This patch adds support for the MAX78000FTHR machine. The MAX78000FTHR contains a MAX78000 and a RISC-V core. This patch implements only the MAX78000, which is Cortex-M4 based. Details can be found at: https://www.analog.com/media/en/technical-documentation/user-guides/max7800= 0-user-guide.pdf Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/Kconfig | 10 ++ hw/arm/max78000_soc.c | 172 ++++++++++++++++++++++++++++++++++ hw/arm/max78000fthr.c | 50 ++++++++++ hw/arm/meson.build | 2 + include/hw/arm/max78000_soc.h | 35 +++++++ 5 files changed, 269 insertions(+) create mode 100644 hw/arm/max78000_soc.c create mode 100644 hw/arm/max78000fthr.c create mode 100644 include/hw/arm/max78000_soc.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index f543d944c3..ddaafa8faa 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -95,6 +95,12 @@ config INTEGRATOR select PL181 # display select SMC91C111 =20 +config MAX78000FTHR + bool + default y + depends on TCG && ARM + select MAX78000_SOC + config MPS3R bool default y @@ -357,6 +363,10 @@ config ALLWINNER_R40 select USB_EHCI_SYSBUS select SD =20 +config MAX78000_SOC + bool + select ARM_V7M + config RASPI bool default y diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c new file mode 100644 index 0000000000..9676ada6a2 --- /dev/null +++ b/hw/arm/max78000_soc.c @@ -0,0 +1,172 @@ +/* + * MAX78000 SOC + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Implementation based on stm32f205 and Max78000 user guide at + * https://www.analog.com/media/en/technical-documentation/user-guides/max= 78000-user-guide.pdf + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "system/address-spaces.h" +#include "system/system.h" +#include "hw/arm/max78000_soc.h" +#include "hw/qdev-clock.h" +#include "hw/misc/unimp.h" + +static void max78000_soc_initfn(Object *obj) +{ + MAX78000State *s =3D MAX78000_SOC(obj); + + object_initialize_child(obj, "armv7m", &s->armv7m, TYPE_ARMV7M); + + s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); +} + +static void max78000_soc_realize(DeviceState *dev_soc, Error **errp) +{ + MAX78000State *s =3D MAX78000_SOC(dev_soc); + MemoryRegion *system_memory =3D get_system_memory(); + DeviceState *armv7m; + Error *err =3D NULL; + + if (!clock_has_source(s->sysclk)) { + error_setg(errp, "sysclk clock must be wired up by the board code"= ); + return; + } + + memory_region_init_rom(&s->flash, OBJECT(dev_soc), "MAX78000.flash", + FLASH_SIZE, &err); + if (err !=3D NULL) { + error_propagate(errp, err); + return; + } + + memory_region_add_subregion(system_memory, FLASH_BASE_ADDRESS, &s->fla= sh); + + memory_region_init_ram(&s->sram, NULL, "MAX78000.sram", SRAM_SIZE, + &err); + if (err !=3D NULL) { + error_propagate(errp, err); + return; + } + memory_region_add_subregion(system_memory, SRAM_BASE_ADDRESS, &s->sram= ); + + armv7m =3D DEVICE(&s->armv7m); + + /* + * The MAX78000 user guide's Interrupt Vector Table section + * suggests that there are 120 IRQs in the text, while only listing + * 104 in table 5-1. Implement the more generous of the two. + * This has not been tested in hardware. + */ + qdev_prop_set_uint32(armv7m, "num-irq", 120); + qdev_prop_set_uint8(armv7m, "num-prio-bits", 3); + qdev_prop_set_string(armv7m, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m4"= )); + qdev_prop_set_bit(armv7m, "enable-bitband", true); + qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk); + object_property_set_link(OBJECT(&s->armv7m), "memory", + OBJECT(system_memory), &error_abort); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->armv7m), errp)) { + return; + } + + create_unimplemented_device("globalControl", 0x40000000, 0x400); + create_unimplemented_device("systemInterface", 0x40000400, 0x400); + create_unimplemented_device("functionControl", 0x40000800, 0x400); + create_unimplemented_device("watchdogTimer0", 0x40003000, 0x400); + create_unimplemented_device("dynamicVoltScale", 0x40003c00, 0x40); + create_unimplemented_device("SIMO", 0x40004400, 0x400); + create_unimplemented_device("trimSystemInit", 0x40005400, 0x400); + create_unimplemented_device("generalCtrlFunc", 0x40005800, 0x400); + create_unimplemented_device("wakeupTimer", 0x40006400, 0x400); + create_unimplemented_device("powerSequencer", 0x40006800, 0x400); + create_unimplemented_device("miscControl", 0x40006c00, 0x400); + + create_unimplemented_device("aes", 0x40007400, 0x400); + create_unimplemented_device("aesKey", 0x40007800, 0x400); + + create_unimplemented_device("gpio0", 0x40008000, 0x1000= ); + create_unimplemented_device("gpio1", 0x40009000, 0x1000= ); + + create_unimplemented_device("parallelCamInterface", 0x4000e000, 0x1000= ); + create_unimplemented_device("CRC", 0x4000f000, 0x1000= ); + + create_unimplemented_device("timer0", 0x40010000, 0x1000= ); + create_unimplemented_device("timer1", 0x40011000, 0x1000= ); + create_unimplemented_device("timer2", 0x40012000, 0x1000= ); + create_unimplemented_device("timer3", 0x40013000, 0x1000= ); + + create_unimplemented_device("i2c0", 0x4001d000, 0x1000= ); + create_unimplemented_device("i2c1", 0x4001e000, 0x1000= ); + create_unimplemented_device("i2c2", 0x4001f000, 0x1000= ); + + create_unimplemented_device("standardDMA", 0x40028000, 0x1000= ); + create_unimplemented_device("flashController0", 0x40029000, 0x400); + + create_unimplemented_device("icc0", 0x4002a000, 0x800); + create_unimplemented_device("icc1", 0x4002a800, 0x800); + + create_unimplemented_device("adc", 0x40034000, 0x1000= ); + create_unimplemented_device("pulseTrainEngine", 0x4003c000, 0xa0); + create_unimplemented_device("oneWireMaster", 0x4003d000, 0x1000= ); + create_unimplemented_device("semaphore", 0x4003e000, 0x1000= ); + + create_unimplemented_device("uart0", 0x40042000, 0x1000= ); + create_unimplemented_device("uart1", 0x40043000, 0x1000= ); + create_unimplemented_device("uart2", 0x40044000, 0x1000= ); + + create_unimplemented_device("spi1", 0x40046000, 0x2000= ); + create_unimplemented_device("trng", 0x4004d000, 0x1000= ); + create_unimplemented_device("i2s", 0x40060000, 0x1000= ); + create_unimplemented_device("lowPowerControl", 0x40080000, 0x400); + create_unimplemented_device("gpio2", 0x40080400, 0x200); + create_unimplemented_device("lowPowerWatchdogTimer", 0x40080800, 0x= 400); + create_unimplemented_device("lowPowerTimer4", 0x40080c00, 0x400); + + create_unimplemented_device("lowPowerTimer5", 0x40081000, 0x400); + create_unimplemented_device("lowPowerUART0", 0x40081400, 0x400); + create_unimplemented_device("lowPowerComparator", 0x40088000, 0x400); + + create_unimplemented_device("spi0", 0x400be000, 0x400); + + /* + * The MAX78000 user guide's base address map lists the CNN TX FIFO as + * beginning at 0x400c0400 and ending at 0x400c0400. Given that CNN_FI= FO + * is listed as having data accessible up to offset 0x1000, the user + * guide is likely incorrect. + */ + create_unimplemented_device("cnnTxFIFO", 0x400c0400, 0x2000= ); + + create_unimplemented_device("cnnGlobalControl", 0x50000000, 0x1000= 0); + create_unimplemented_device("cnnx16quad0", 0x50100000, 0x4000= 0); + create_unimplemented_device("cnnx16quad1", 0x50500000, 0x4000= 0); + create_unimplemented_device("cnnx16quad2", 0x50900000, 0x4000= 0); + create_unimplemented_device("cnnx16quad3", 0x50d00000, 0x4000= 0); + +} + +static void max78000_soc_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D max78000_soc_realize; +} + +static const TypeInfo max78000_soc_info =3D { + .name =3D TYPE_MAX78000_SOC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(MAX78000State), + .instance_init =3D max78000_soc_initfn, + .class_init =3D max78000_soc_class_init, +}; + +static void max78000_soc_types(void) +{ + type_register_static(&max78000_soc_info); +} + +type_init(max78000_soc_types) diff --git a/hw/arm/max78000fthr.c b/hw/arm/max78000fthr.c new file mode 100644 index 0000000000..c4f6b5b1b0 --- /dev/null +++ b/hw/arm/max78000fthr.c @@ -0,0 +1,50 @@ +/* + * MAX78000FTHR Evaluation Board + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/boards.h" +#include "hw/qdev-properties.h" +#include "hw/qdev-clock.h" +#include "qemu/error-report.h" +#include "hw/arm/max78000_soc.h" +#include "hw/arm/boot.h" + +/* 60MHz is the default, but other clocks can be selected. */ +#define SYSCLK_FRQ 60000000ULL +static void max78000_init(MachineState *machine) +{ + DeviceState *dev; + Clock *sysclk; + + sysclk =3D clock_new(OBJECT(machine), "SYSCLK"); + clock_set_hz(sysclk, SYSCLK_FRQ); + + dev =3D qdev_new(TYPE_MAX78000_SOC); + object_property_add_child(OBJECT(machine), "soc", OBJECT(dev)); + qdev_connect_clock_in(dev, "sysclk", sysclk); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + + armv7m_load_kernel(ARM_CPU(first_cpu), + machine->kernel_filename, + 0x00000000, FLASH_SIZE); +} + +static void max78000_machine_init(MachineClass *mc) +{ + static const char * const valid_cpu_types[] =3D { + ARM_CPU_TYPE_NAME("cortex-m4"), + NULL + }; + + mc->desc =3D "MAX78000FTHR Board (Cortex-M4 / (Unimplemented) RISC-V)"; + mc->init =3D max78000_init; + mc->valid_cpu_types =3D valid_cpu_types; +} + +DEFINE_MACHINE("max78000fthr", max78000_machine_init) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index d90be8f4c9..dc68391305 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -27,6 +27,7 @@ arm_common_ss.add(when: 'CONFIG_OMAP', if_true: files('om= ap1.c')) arm_common_ss.add(when: 'CONFIG_ALLWINNER_A10', if_true: files('allwinner-= a10.c', 'cubieboard.c')) arm_common_ss.add(when: 'CONFIG_ALLWINNER_H3', if_true: files('allwinner-h= 3.c', 'orangepi.c')) arm_common_ss.add(when: 'CONFIG_ALLWINNER_R40', if_true: files('allwinner-= r40.c', 'bananapi_m2u.c')) +arm_common_ss.add(when: 'CONFIG_MAX78000_SOC', if_true: files('max78000_so= c.c')) arm_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2836.c', 'raspi.c')) arm_common_ss.add(when: ['CONFIG_RASPI', 'TARGET_AARCH64'], if_true: files= ('bcm2838.c', 'raspi4b.c')) arm_common_ss.add(when: 'CONFIG_STM32F100_SOC', if_true: files('stm32f100_= soc.c')) @@ -71,6 +72,7 @@ arm_ss.add(when: 'CONFIG_XEN', if_true: files( arm_common_ss.add(when: 'CONFIG_ARM_SMMUV3', if_true: files('smmu-common.c= ')) arm_common_ss.add(when: 'CONFIG_COLLIE', if_true: files('collie.c')) arm_common_ss.add(when: 'CONFIG_EXYNOS4', if_true: files('exynos4_boards.c= ')) +arm_common_ss.add(when: 'CONFIG_MAX78000FTHR', if_true: files('max78000fth= r.c')) arm_common_ss.add(when: 'CONFIG_NETDUINO2', if_true: files('netduino2.c')) arm_common_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_peripheral= s.c')) arm_common_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2838_peripheral= s.c')) diff --git a/include/hw/arm/max78000_soc.h b/include/hw/arm/max78000_soc.h new file mode 100644 index 0000000000..97bf4099c9 --- /dev/null +++ b/include/hw/arm/max78000_soc.h @@ -0,0 +1,35 @@ +/* + * MAX78000 SOC + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_ARM_MAX78000_SOC_H +#define HW_ARM_MAX78000_SOC_H + +#include "hw/or-irq.h" +#include "hw/arm/armv7m.h" +#include "qom/object.h" + +#define TYPE_MAX78000_SOC "max78000-soc" +OBJECT_DECLARE_SIMPLE_TYPE(MAX78000State, MAX78000_SOC) + +#define FLASH_BASE_ADDRESS 0x10000000 +#define FLASH_SIZE (512 * 1024) +#define SRAM_BASE_ADDRESS 0x20000000 +#define SRAM_SIZE (128 * 1024) + +struct MAX78000State { + SysBusDevice parent_obj; + + ARMv7MState armv7m; + + MemoryRegion sram; + MemoryRegion flash; + + Clock *sysclk; +}; + +#endif --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668477; cv=none; d=zohomail.com; s=zohoarc; b=bfTxXN9ojUGdNfxQe46RFg4JlQI/zyDkwIj0SCRyo68+ijv6BTFc7KsAZVV+NnWgLEQDOJ9aGNrfqTEhD/PnyIvRi0Ux6FerLR39kh0dZQB1Y6vJI9YYS2OESqsnkF18C6gaYZDXDL4O1RrvMjF6KkrWwmslZBJYXrNX2IxsiNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668477; 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=Yd7LTn2YUlDT9S5rPLAcwZ///WOqOGbERBjMl7uiB8Y=; b=SLvzgqMaZT14+1ZOIFLuVDvyzYxIf6z3QisCp+4/af8Q9C9HdPI8YzOtC9HkkKa1n5klTFeTZfjSV9nUEGx0XF60M891nBMuH/l9fSXTXW1AUXRFiTOWO1z1OxtN8UQjZOjlr3RTNMtDU/I3K6GJIdgMfd3tzkygVJj0OYsaW60= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668477767383.4313445053915; Fri, 4 Jul 2025 15:34:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxz-0001m7-Tc; Fri, 04 Jul 2025 18:33:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxd-0001fL-Ex for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x836.google.com ([2607:f8b0:4864:20::836]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxY-00078H-3P for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:47 -0400 Received: by mail-qt1-x836.google.com with SMTP id d75a77b69052e-4a7f61ea32aso26219241cf.3 for ; Fri, 04 Jul 2025 15:32:43 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668362; x=1752273162; 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=Yd7LTn2YUlDT9S5rPLAcwZ///WOqOGbERBjMl7uiB8Y=; b=L+juQVf6WIPdtqxhY+fE2/94el917Cltb5GI+cuEM2silhCd8Es5Dn3kuUjuXpdx8P T0P3AaJdTEQinb2Bec1qggJMSWO1ulwVgv7JxEen9NdJy0lPQACBxl6i1lKj5jVzIBbi 5OHtuZ0w7jdOutyYAUWLMCocYrt4DEwxe6w9xGMXD04kQxhcZ4PnaLAuhRYaCsh9ozSB Ojlt7bIp6IFfsktu5QA9pUb9Y2uU7d5EqzXFDiKNXuk9lQimscOqCcZ/mJ32kz6zLu3T YiEcxb3y33DSVHvZbV60vCO5ZvhcITwhIM2Fm2NCjxvLWXa6ntXAiOAjZkS8z+helhga GEpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668362; x=1752273162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Yd7LTn2YUlDT9S5rPLAcwZ///WOqOGbERBjMl7uiB8Y=; b=XHi2DnycFVCUsu+t2vTxas6LQ/4dSuDPdfW3mbH/alFPEk7DK1W3zPDNJnXOtAquC3 KAVh5/lZZYVvPvNwSVcQk5qLSbwr5Fsm3V8Kk4DoanI5Uy+2mWtqNwQyAmMuL4TVoIb+ DoN0jB7IzH3VFvMquRAAQMCutwkFV9Xa8pgoG5+la5I1o0hNx4T8pz1N/Eg4f3+nW8b7 yRE9B08KV/gMMm4nQxan5jXEiABT+gCV9gosY5BKPEouay03DF8tEHFLLsAw/SYY7LeA mvCRCtcyPncpBiNflAqlxLt9gDXefTWIMF9yNlWFoF/hd6VUVUqYlBOnWzGnRn8MQ+bu HHtg== X-Gm-Message-State: AOJu0YxUwW3iSmPCTXUFFfAZK6DjB+V0LmehfE1WV2OOKLho9RxSxWGS Fd2gvFbmsB3wJ8RmPVC4hx3ULiMXEMDAWS8xSoHHUqJhVULSgvofSxSwjjWm+A== X-Gm-Gg: ASbGnctzQbRE5NQ7i1w8sN7KF5JR4F6EDdBzSgp1/ZKNOo02jZEYXP/z+zCt6qoxYgF liZB/h2nACbSNNitIX4vC2zP+Ai3/x0no5awSXSfHT4jl9BP7FM51Af+wDkSaGfCdMEvFiGYcRJ 2RveMFv5W9fORswkqzHlVAlr3HzJtTQqYynj+KltDWkhnIV0mI13voWjr9wPi4C5ob820/K6C8w xbZhnw0CRiAHsx+e0KMAnU06Cb0V+RG/oN3m4XCItczV9NbXmcCaXmZyQIe3alfYOcHuUQjwqen qCmiS/wLP66UFzcBCQR6ueQwdVCChM73HblFqzv38Tn2GYhpyCsrswKzEqTH+YaUD8+q2dLgMvb qjW9qww== X-Google-Smtp-Source: AGHT+IEaDBoCiLk8uHvOeJJ2XulzUFJl+vQsOMXyRnlgQzpTAfJTm3iB+bijRx1qXpMg31yMRNCeaA== X-Received: by 2002:a05:622a:3d0:b0:4a4:413c:ffb5 with SMTP id d75a77b69052e-4a9a68c13abmr7530801cf.2.1751668362362; Fri, 04 Jul 2025 15:32:42 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 02/11] MAX78000: ICC Implementation Date: Fri, 4 Jul 2025 18:32:30 -0400 Message-Id: <20250704223239.248781-3-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::836; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x836.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668478736116600 Content-Type: text/plain; charset="utf-8" This commit implements the Instruction Cache Controller for the MAX78000 Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/Kconfig | 1 + hw/misc/Kconfig | 3 + hw/misc/max78000_icc.c | 120 +++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + include/hw/misc/max78000_icc.h | 33 +++++++++ 5 files changed, 158 insertions(+) create mode 100644 hw/misc/max78000_icc.c create mode 100644 include/hw/misc/max78000_icc.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index ddaafa8faa..e3b419b468 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -366,6 +366,7 @@ config ALLWINNER_R40 config MAX78000_SOC bool select ARM_V7M + select MAX78000_ICC =20 config RASPI bool diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index ec0fa5aa9f..781bcf74cc 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -47,6 +47,9 @@ config A9SCU config ARM11SCU bool =20 +config MAX78000_ICC + bool + config MOS6522 bool =20 diff --git a/hw/misc/max78000_icc.c b/hw/misc/max78000_icc.c new file mode 100644 index 0000000000..6f7d2b20bf --- /dev/null +++ b/hw/misc/max78000_icc.c @@ -0,0 +1,120 @@ +/* + * MAX78000 Instruction Cache + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "trace.h" +#include "hw/irq.h" +#include "migration/vmstate.h" +#include "hw/misc/max78000_icc.h" + + +static uint64_t max78000_icc_read(void *opaque, hwaddr addr, + unsigned int size) +{ + Max78000IccState *s =3D opaque; + switch (addr) { + case ICC_INFO: + return s->info; + + case ICC_SZ: + return s->sz; + + case ICC_CTRL: + return s->ctrl; + + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Bad offset 0x%" HWADDR_PRIx "\n", + __func__, addr); + return 0; + + } +} + +static void max78000_icc_write(void *opaque, hwaddr addr, + uint64_t val64, unsigned int size) +{ + Max78000IccState *s =3D opaque; + + switch (addr) { + case ICC_CTRL: + s->ctrl =3D 0x10000 | (val64 & 1); + break; + + case ICC_INVALIDATE: + break; + + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Bad offset 0x%" HWADDR_PRIx "\n", + __func__, addr); + break; + } +} + +static const MemoryRegionOps max78000_icc_ops =3D { + .read =3D max78000_icc_read, + .write =3D max78000_icc_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static const VMStateDescription max78000_icc_vmstate =3D { + .name =3D TYPE_MAX78000_ICC, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(info, Max78000IccState), + VMSTATE_UINT32(sz, Max78000IccState), + VMSTATE_UINT32(ctrl, Max78000IccState), + VMSTATE_END_OF_LIST() + } +}; + +static void max78000_icc_reset_hold(Object *obj, ResetType type) +{ + Max78000IccState *s =3D MAX78000_ICC(obj); + s->info =3D 0; + s->sz =3D 0x10000010; + s->ctrl =3D 0x10000; +} + +static void max78000_icc_init(Object *obj) +{ + Max78000IccState *s =3D MAX78000_ICC(obj); + + memory_region_init_io(&s->mmio, obj, &max78000_icc_ops, s, + TYPE_MAX78000_ICC, 0x800); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); +} + +static void max78000_icc_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + rc->phases.hold =3D max78000_icc_reset_hold; + dc->vmsd =3D &max78000_icc_vmstate; +} + +static const TypeInfo max78000_icc_info =3D { + .name =3D TYPE_MAX78000_ICC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(Max78000IccState), + .instance_init =3D max78000_icc_init, + .class_init =3D max78000_icc_class_init, +}; + +static void max78000_icc_register_types(void) +{ + type_register_static(&max78000_icc_info); +} + +type_init(max78000_icc_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index 6d47de482c..a21a994ff8 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -70,6 +70,7 @@ system_ss.add(when: 'CONFIG_IMX', if_true: files( 'imx_ccm.c', 'imx_rngc.c', )) +system_ss.add(when: 'CONFIG_MAX78000_ICC', if_true: files('max78000_icc.c'= )) system_ss.add(when: 'CONFIG_NPCM7XX', if_true: files( 'npcm_clk.c', 'npcm_gcr.c', diff --git a/include/hw/misc/max78000_icc.h b/include/hw/misc/max78000_icc.h new file mode 100644 index 0000000000..6fe2bb7a15 --- /dev/null +++ b/include/hw/misc/max78000_icc.h @@ -0,0 +1,33 @@ +/* + * MAX78000 Instruction Cache + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_MAX78000_ICC_H +#define HW_MAX78000_ICC_H + +#include "hw/sysbus.h" +#include "qom/object.h" + +#define TYPE_MAX78000_ICC "max78000-icc" +OBJECT_DECLARE_SIMPLE_TYPE(Max78000IccState, MAX78000_ICC) + +#define ICC_INFO 0x0 +#define ICC_SZ 0x4 +#define ICC_CTRL 0x100 +#define ICC_INVALIDATE 0x700 + +struct Max78000IccState { + SysBusDevice parent_obj; + + MemoryRegion mmio; + + uint32_t info; + uint32_t sz; + uint32_t ctrl; +}; + +#endif --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668468; cv=none; d=zohomail.com; s=zohoarc; b=E/8GYexx9RWwc64C9FoA9s11G/4uwPxKSl1gdxo3cBOYHrYnjUWk9IY155v/1WpkxAV8PSQxoijhV/nhpM0xeRRShGjR59lHioxjcEXcCPhN9UzvFQ9uI41FUQLXuMfdZelGxKIEX9Wyj7wWErMJCBAWBVCesXwQzkQK9Gsz4aA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668468; 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=1y6CZ81l1nwOGYh0zdjwyLoHLYvfJVoT2Wfc1f9lod0=; b=VwiOdfQhuGN/8hImT79aHpELE+lzHyujxfpXOdRgQDhzOf+PZO8I+AUCy3eJR6y90DVorW1UWINuns4dOVkBdzAXS7OSTEEvSNcb79S8/N2g9Mqj6yvUN1NWn5BkPdb6S10bXBjz9/+FXr0HXMhUP5hz3aiWXm9P+Ois7GKrKOQ= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175166846879317.1488703433223; Fri, 4 Jul 2025 15:34:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoy2-0001mu-SP; Fri, 04 Jul 2025 18:33:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxi-0001gJ-Mn for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qk1-x72b.google.com ([2607:f8b0:4864:20::72b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxa-00078c-PH for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:51 -0400 Received: by mail-qk1-x72b.google.com with SMTP id af79cd13be357-7d44c6774e7so81436485a.3 for ; Fri, 04 Jul 2025 15:32:44 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668363; x=1752273163; 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=1y6CZ81l1nwOGYh0zdjwyLoHLYvfJVoT2Wfc1f9lod0=; b=eShQutOUIrAQqD6FNmUTlYD1FQjFHC7nvvnBoA8AiC2OUtP+Pdb787zV1AFSiIZbUV OU/Gs19HI8DpvG1acrwKaIX70l3YRLvCHTlwdIPvuFDvqTZ4ur5Y5e5Ks9ii1t9xVK7f 5KCWP6sMEW0XIVuYEVaQ2q9+K0NMd+cB8U8sJyBJej3Kmhz6ZpqKRyr3EVuEQY7U0OPl v7Za8iJFUE1MRX2C+rk4wClm+ENzFV6PK8gugZss9KdQR0j9AaHGTz3T/UnaL3qf3olN WBplZzCBQzIL6hP5ikz5zUsX/PExVh8UacqE9jYXnNCTzTk89OngfHDAd0GH+ZY6QPdS SZlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668363; x=1752273163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1y6CZ81l1nwOGYh0zdjwyLoHLYvfJVoT2Wfc1f9lod0=; b=UmStRIhR/+ghMv1yaJ7LL7AnRV7wNhKWKuVZqIMDfjR/0X6pwP418hOAmJcFABF+th nfBlkrlNqpSrATkRrZQ5nRG/r5rpP93Wep+N1FNcGK5np6UA/h7IlkRmqkdPeNdpkHQK 0da8GTzXmn/UxRbvctf6zxWunmXKMf+qHL3/L7RvK3keTIPhfGpXReZ1BQFSBmN4HWol sgxr+qYx8woRnZGWry2UN66R3zauP22qjCUhXxCrx+Y8GYmxViOTH73Sl/WybQ/RP/Py FZlw2KfvIKl+6e0wrISxRr0lMWoXV28wYrihMqr5MKRsDJsqsMFvgWtHy30j1hprSLXj FJig== X-Gm-Message-State: AOJu0Yz6KIvvQBVjFXTjtwEe45YXSMUdqNM9MMRyZxPX1RRX71PgP2d5 i7TC+QZIbiEZqsTUYTu93ddrQUQrafUb5p782LrZT1FvzMJExAtKms2Gz0gPCg== X-Gm-Gg: ASbGncs1kVIFR3o2O1DRlbyjru/pblyPYlULUNC2SE8nVwA6Kkts306qBkilvKtrbvQ JLArh3YQih4IZBBfiGkkkvUlq8ujtVLTVubCN+IggQ20oD1Vn7DUHNBlSytQOSuRelpeaBV90bb WLNYKddc+uDMSTNmMQJdwA8Gbienpik9x91EGm/6SKcd6Xd/s9aRhKo+R4rAurR6ewW4w8Q+oNJ grGFEhNqHpeZ4dxrjcjCL1xvN98opP2+ZOkCLbXMsZt668XD51VJuP+BIwA6t0NIPXaVrgqm3lO J3TDuBFwkJ8gHbs6ftOJC7wNGG5uyLVOOGv+7A8wgbxO6ElZbIDqEazyJ1T++6Z38eJMUmVKi2B f/XUcdA== X-Google-Smtp-Source: AGHT+IHpxdb/IW38MlTr7UMizk/BxFiKP0rILCl8tSJ9LSH95qpHJwxtiCf8VHYjhzl+SrRRDA8M1A== X-Received: by 2002:a05:620a:5bc6:b0:7d4:6648:cc with SMTP id af79cd13be357-7d5df194af4mr450276285a.57.1751668362991; Fri, 04 Jul 2025 15:32:42 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Peter Maydell Subject: [PATCH v4 03/11] MAX78000: Add ICC to SOC Date: Fri, 4 Jul 2025 18:32:31 -0400 Message-Id: <20250704223239.248781-4-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::72b; envelope-from=jackson88044@gmail.com; helo=mail-qk1-x72b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668470619116600 Content-Type: text/plain; charset="utf-8" This commit adds the instruction cache controller to max78000_soc Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/max78000_soc.c | 20 ++++++++++++++++---- include/hw/arm/max78000_soc.h | 6 ++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c index 9676ada6a2..0c83b08eca 100644 --- a/hw/arm/max78000_soc.c +++ b/hw/arm/max78000_soc.c @@ -17,12 +17,20 @@ #include "hw/qdev-clock.h" #include "hw/misc/unimp.h" =20 +static const uint32_t max78000_icc_addr[] =3D {0x4002a000, 0x4002a800}; + static void max78000_soc_initfn(Object *obj) { MAX78000State *s =3D MAX78000_SOC(obj); + int i; =20 object_initialize_child(obj, "armv7m", &s->armv7m, TYPE_ARMV7M); =20 + for (i =3D 0; i < MAX78000_NUM_ICC; i++) { + g_autofree char *name =3D g_strdup_printf("icc%d", i); + object_initialize_child(obj, name, &s->icc[i], TYPE_MAX78000_ICC); + } + s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); } =20 @@ -30,8 +38,9 @@ static void max78000_soc_realize(DeviceState *dev_soc, Er= ror **errp) { MAX78000State *s =3D MAX78000_SOC(dev_soc); MemoryRegion *system_memory =3D get_system_memory(); - DeviceState *armv7m; + DeviceState *dev, *armv7m; Error *err =3D NULL; + int i; =20 if (!clock_has_source(s->sysclk)) { error_setg(errp, "sysclk clock must be wired up by the board code"= ); @@ -74,6 +83,12 @@ static void max78000_soc_realize(DeviceState *dev_soc, E= rror **errp) return; } =20 + for (i =3D 0; i < MAX78000_NUM_ICC; i++) { + dev =3D DEVICE(&(s->icc[i])); + sysbus_realize(SYS_BUS_DEVICE(dev), errp); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, max78000_icc_addr[i]); + } + create_unimplemented_device("globalControl", 0x40000000, 0x400); create_unimplemented_device("systemInterface", 0x40000400, 0x400); create_unimplemented_device("functionControl", 0x40000800, 0x400); @@ -107,9 +122,6 @@ static void max78000_soc_realize(DeviceState *dev_soc, = Error **errp) create_unimplemented_device("standardDMA", 0x40028000, 0x1000= ); create_unimplemented_device("flashController0", 0x40029000, 0x400); =20 - create_unimplemented_device("icc0", 0x4002a000, 0x800); - create_unimplemented_device("icc1", 0x4002a800, 0x800); - create_unimplemented_device("adc", 0x40034000, 0x1000= ); create_unimplemented_device("pulseTrainEngine", 0x4003c000, 0xa0); create_unimplemented_device("oneWireMaster", 0x4003d000, 0x1000= ); diff --git a/include/hw/arm/max78000_soc.h b/include/hw/arm/max78000_soc.h index 97bf4099c9..27b506d6ee 100644 --- a/include/hw/arm/max78000_soc.h +++ b/include/hw/arm/max78000_soc.h @@ -11,6 +11,7 @@ =20 #include "hw/or-irq.h" #include "hw/arm/armv7m.h" +#include "hw/misc/max78000_icc.h" #include "qom/object.h" =20 #define TYPE_MAX78000_SOC "max78000-soc" @@ -21,6 +22,9 @@ OBJECT_DECLARE_SIMPLE_TYPE(MAX78000State, MAX78000_SOC) #define SRAM_BASE_ADDRESS 0x20000000 #define SRAM_SIZE (128 * 1024) =20 +/* The MAX78k has 2 instruction caches; only icc0 matters, icc1 is for RIS= C */ +#define MAX78000_NUM_ICC 2 + struct MAX78000State { SysBusDevice parent_obj; =20 @@ -29,6 +33,8 @@ struct MAX78000State { MemoryRegion sram; MemoryRegion flash; =20 + Max78000IccState icc[MAX78000_NUM_ICC]; + Clock *sysclk; }; =20 --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668472; cv=none; d=zohomail.com; s=zohoarc; b=j+foV2A61I8mg5Pk3R9wEDSEChyTdS84groz9YcVVJKmmrsoFk5Fo8iB5de6aBr98XpdmUplJBYCfrZO0Q4LUuEGEjqzOGzibx3XSVPKldNrmyws1JGAMuqAZMOTpjqzRlX8Har6yX7Py2qp8pVy1dPr6rUuKltqPMhJzWDkAnw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668472; 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=AWnu/oAAzVkXqcGwl/ibho3UTNb/WrEZ456/ajF/M5o=; b=oGDb7V5Jw5he5G8pf8Jor4kdgrw4q50EGJ8fAn4ppS78kcbt/sB0l00PCAJ5Fot0JBLTsH8ZtCS/RiydeRtcNg//XiEBO14r8odSJR5EF+QdBzAXboAwGtu8jEfzMwYJENBc8bu00+0gAqf1lztZs8y3FFdxZjhOAGdwK01Qt5s= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668472285572.4906397334951; Fri, 4 Jul 2025 15:34:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxs-0001jl-Gb; Fri, 04 Jul 2025 18:33:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxi-0001gF-L7 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxa-00078p-Pn for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:51 -0400 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-4a44b9b2af8so7934121cf.3 for ; Fri, 04 Jul 2025 15:32:44 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668364; x=1752273164; 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=AWnu/oAAzVkXqcGwl/ibho3UTNb/WrEZ456/ajF/M5o=; b=M9xg0rzvTKSAymOVudNRHazTXb85a22G+bIRUFROno77YGOiyhBr6lg9wp6+wmO2+S 1awcnPTjdNuqJPcHqppqv/P7Va3g518RUIWBs9EQxQKxz3tUkrkiIWxwh6Nx4xbH92BM zCBcEC7/cjsDodM2icG6Gunx24AYXGDD5NsDAWY8FnbZAyf2c/AuV5xnMgjV9BkfXWQK xPdHVUc9k3SQPjDCppBaZEMv9HlURDjXoDRBkXAcsiQx8EcChd5aAC9IWE94ukpGhMyS cnsmleNPHqHk+991n6OLbBLavXCBwo7xFwjFVwN8yOYCKp9BavbfnQRfAqDqr3YwOEZZ lOEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668364; x=1752273164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AWnu/oAAzVkXqcGwl/ibho3UTNb/WrEZ456/ajF/M5o=; b=iBmFLbOPH6/LMNBUjPUYD+0iTdazv+l6nB3P7nuoB0Cd3CInHx5m42ZFRbQKCeMKOz EgQauPtRpF4juDhFWFvcY2BDgF656Jr4p/AB3d7yO2mH+ICrmoWu6L6WrGargpk789ch XEJEJMyd6R/mMyQhgaZW6SbzdSoRjSR5JT0Uc7FUPgfizjEy4VLOVsrWd4KESBBnsw4X 6rsCWdZ7v7DBwmPWTEIDsVURqiZwqQ1qggk2U4lSoBx2iMJt1dhD8M1Q6ajUy68Y4REi 9L+FRKo9alQHuoFcki/1qOWGn0XqUVW3no+MGxr8be8mHc1rSp/O0am34S/jVEkOaNPq TvlA== X-Gm-Message-State: AOJu0Yzvn4YhGotjedytTDTkdrWxIxLPH22QJ/MBd4zzezS/+jzvsKOh lQ94H47i6x5W/YSoP5QovrA/LWftLj3vuD8BS4zCVu60jKsVPYiT3UzqF3B82g== X-Gm-Gg: ASbGncuZoR5GMNOp9F6+mwfYMqmju2Tz3hPgqASt+51lcJAGnQVcRcNbewH5cTqPSIi MB+6CRSZ+JjFRSYKEoQ1/Pr+DxLH481NgRaHjeJ7ER/1c2eeJglMq67tJ7TjCfj74nR8u8I2zjP 6u1SUH2HCfEKvGTGTMF8upuzCtLIuostXUNHU/PI+Z8svAp58rcNR4HORyNcuKw/BcTPYuc0YU4 bjgmPjxrK1zN4Ep/7iGxVM3MUG0e/voymVS0rnGcgXOK6XxpuQM/68RS3FJNmR+vy1sUbGMeUry fa6bTjeOswBLN1WXzzLUXhLwwqNq/v4qdaxu0fg3lL24eq7L5QGOo+kIYLUJ8ZdYjlbOXdlnIqP uafBvJQ== X-Google-Smtp-Source: AGHT+IFpxRXVrj6mKmIHO398+rG+eMrQ9kfMtugrCZZ85c/QXH0MS+hzwYm4GE4cWE5NGgwMxZaNiA== X-Received: by 2002:a05:622a:a6c9:b0:4a9:a3ff:28bb with SMTP id d75a77b69052e-4a9a3ff3079mr19196581cf.25.1751668363652; Fri, 04 Jul 2025 15:32:43 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 04/11] MAX78000: UART Implementation Date: Fri, 4 Jul 2025 18:32:32 -0400 Message-Id: <20250704223239.248781-5-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::82e; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x82e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668472700116600 Content-Type: text/plain; charset="utf-8" This commit implements UART support for the MAX78000 Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/Kconfig | 1 + hw/char/Kconfig | 3 + hw/char/max78000_uart.c | 285 ++++++++++++++++++++++++++++++++ hw/char/meson.build | 1 + include/hw/char/max78000_uart.h | 78 +++++++++ 5 files changed, 368 insertions(+) create mode 100644 hw/char/max78000_uart.c create mode 100644 include/hw/char/max78000_uart.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index e3b419b468..031e0bf59e 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -367,6 +367,7 @@ config MAX78000_SOC bool select ARM_V7M select MAX78000_ICC + select MAX78000_UART =20 config RASPI bool diff --git a/hw/char/Kconfig b/hw/char/Kconfig index 9d517f3e28..020c0a84bb 100644 --- a/hw/char/Kconfig +++ b/hw/char/Kconfig @@ -48,6 +48,9 @@ config VIRTIO_SERIAL default y depends on VIRTIO =20 +config MAX78000_UART + bool + config STM32F2XX_USART bool =20 diff --git a/hw/char/max78000_uart.c b/hw/char/max78000_uart.c new file mode 100644 index 0000000000..19506d52ef --- /dev/null +++ b/hw/char/max78000_uart.c @@ -0,0 +1,285 @@ +/* + * MAX78000 UART + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/char/max78000_uart.h" +#include "hw/irq.h" +#include "hw/qdev-properties.h" +#include "hw/qdev-properties-system.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "migration/vmstate.h" +#include "trace.h" + + +static int max78000_uart_can_receive(void *opaque) +{ + Max78000UartState *s =3D opaque; + if (!(s->ctrl & UART_BCLKEN)) { + return 0; + } + return fifo8_num_free(&s->rx_fifo); +} + +static void max78000_update_irq(Max78000UartState *s) +{ + int interrupt_level; + + interrupt_level =3D s->int_fl & s->int_en; + qemu_set_irq(s->irq, interrupt_level); +} + +static void max78000_uart_receive(void *opaque, const uint8_t *buf, int si= ze) +{ + Max78000UartState *s =3D opaque; + + assert(size <=3D fifo8_num_free(&s->rx_fifo)); + + fifo8_push_all(&s->rx_fifo, buf, size); + + uint32_t rx_threshold =3D s->ctrl & 0xf; + + if (fifo8_num_used(&s->rx_fifo) >=3D rx_threshold) { + s->int_fl |=3D UART_RX_THD; + } + + max78000_update_irq(s); +} + +static void max78000_uart_reset_hold(Object *obj, ResetType type) +{ + Max78000UartState *s =3D MAX78000_UART(obj); + + s->ctrl =3D 0; + s->status =3D UART_TX_EM | UART_RX_EM; + s->int_en =3D 0; + s->int_fl =3D 0; + s->osr =3D 0; + s->txpeek =3D 0; + s->pnr =3D UART_RTS; + s->fifo =3D 0; + s->dma =3D 0; + s->wken =3D 0; + s->wkfl =3D 0; + fifo8_reset(&s->rx_fifo); +} + +static uint64_t max78000_uart_read(void *opaque, hwaddr addr, + unsigned int size) +{ + Max78000UartState *s =3D opaque; + uint64_t retvalue =3D 0; + switch (addr) { + case UART_CTRL: + retvalue =3D s->ctrl; + break; + case UART_STATUS: + retvalue =3D (fifo8_num_used(&s->rx_fifo) << UART_RX_LVL) | + UART_TX_EM | + (fifo8_is_empty(&s->rx_fifo) ? UART_RX_EM : 0); + break; + case UART_INT_EN: + retvalue =3D s->int_en; + break; + case UART_INT_FL: + retvalue =3D s->int_fl; + break; + case UART_CLKDIV: + retvalue =3D s->clkdiv; + break; + case UART_OSR: + retvalue =3D s->osr; + break; + case UART_TXPEEK: + if (!fifo8_is_empty(&s->rx_fifo)) { + retvalue =3D fifo8_peek(&s->rx_fifo); + } + break; + case UART_PNR: + retvalue =3D s->pnr; + break; + case UART_FIFO: + if (!fifo8_is_empty(&s->rx_fifo)) { + retvalue =3D fifo8_pop(&s->rx_fifo); + max78000_update_irq(s); + } + break; + case UART_DMA: + /* DMA not implemented */ + retvalue =3D s->dma; + break; + case UART_WKEN: + retvalue =3D s->wken; + break; + case UART_WKFL: + retvalue =3D s->wkfl; + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Bad offset 0x%"HWADDR_PRIx"\n", __func__, addr); + break; + } + + return retvalue; +} + +static void max78000_uart_write(void *opaque, hwaddr addr, + uint64_t val64, unsigned int size) +{ + Max78000UartState *s =3D opaque; + + uint32_t value =3D val64; + uint8_t data; + + switch (addr) { + case UART_CTRL: + if (value & UART_FLUSH_RX) { + fifo8_reset(&s->rx_fifo); + } + if (value & UART_BCLKEN) { + value =3D value | UART_BCLKRDY; + } + s->ctrl =3D value & ~(UART_FLUSH_RX | UART_FLUSH_TX); + + /* + * Software can manage UART flow control manually by setting hfc_en + * in UART_CTRL. This would require emulating uart at a lower leve= l, + * and is currently unimplemented. + */ + + return; + case UART_STATUS: + /* UART_STATUS is read only */ + return; + case UART_INT_EN: + s->int_en =3D value; + return; + case UART_INT_FL: + s->int_fl =3D s->int_fl & ~(value); + max78000_update_irq(s); + return; + case UART_CLKDIV: + s->clkdiv =3D value; + return; + case UART_OSR: + s->osr =3D value; + return; + case UART_PNR: + s->pnr =3D value; + return; + case UART_FIFO: + data =3D value & 0xff; + /* + * XXX this blocks entire thread. Rewrite to use + * qemu_chr_fe_write and background I/O callbacks + */ + qemu_chr_fe_write_all(&s->chr, &data, 1); + + /* TX is always empty */ + s->int_fl |=3D UART_TX_HE; + max78000_update_irq(s); + + return; + case UART_DMA: + /* DMA not implemented */ + s->dma =3D value; + return; + case UART_WKEN: + s->wken =3D value; + return; + case UART_WKFL: + s->wkfl =3D value; + return; + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" + HWADDR_PRIx "\n", __func__, addr); + } +} + +static const MemoryRegionOps max78000_uart_ops =3D { + .read =3D max78000_uart_read, + .write =3D max78000_uart_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static const Property max78000_uart_properties[] =3D { + DEFINE_PROP_CHR("chardev", Max78000UartState, chr), +}; + +static const VMStateDescription max78000_uart_vmstate =3D { + .name =3D TYPE_MAX78000_UART, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32(ctrl, Max78000UartState), + VMSTATE_UINT32(status, Max78000UartState), + VMSTATE_UINT32(int_en, Max78000UartState), + VMSTATE_UINT32(int_fl, Max78000UartState), + VMSTATE_UINT32(clkdiv, Max78000UartState), + VMSTATE_UINT32(osr, Max78000UartState), + VMSTATE_UINT32(txpeek, Max78000UartState), + VMSTATE_UINT32(pnr, Max78000UartState), + VMSTATE_UINT32(fifo, Max78000UartState), + VMSTATE_UINT32(dma, Max78000UartState), + VMSTATE_UINT32(wken, Max78000UartState), + VMSTATE_UINT32(wkfl, Max78000UartState), + VMSTATE_FIFO8(rx_fifo, Max78000UartState), + VMSTATE_END_OF_LIST() + } +}; + +static void max78000_uart_init(Object *obj) +{ + Max78000UartState *s =3D MAX78000_UART(obj); + fifo8_create(&s->rx_fifo, 8); + + sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq); + + memory_region_init_io(&s->mmio, obj, &max78000_uart_ops, s, + TYPE_MAX78000_UART, 0x400); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); +} + +static void max78000_uart_realize(DeviceState *dev, Error **errp) +{ + Max78000UartState *s =3D MAX78000_UART(dev); + + qemu_chr_fe_set_handlers(&s->chr, max78000_uart_can_receive, + max78000_uart_receive, NULL, NULL, + s, NULL, true); +} + +static void max78000_uart_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + rc->phases.hold =3D max78000_uart_reset_hold; + + device_class_set_props(dc, max78000_uart_properties); + dc->realize =3D max78000_uart_realize; + + dc->vmsd =3D &max78000_uart_vmstate; +} + +static const TypeInfo max78000_uart_info =3D { + .name =3D TYPE_MAX78000_UART, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(Max78000UartState), + .instance_init =3D max78000_uart_init, + .class_init =3D max78000_uart_class_init, +}; + +static void max78000_uart_register_types(void) +{ + type_register_static(&max78000_uart_info); +} + +type_init(max78000_uart_register_types) diff --git a/hw/char/meson.build b/hw/char/meson.build index 4e439da8b9..a9e1dc26c0 100644 --- a/hw/char/meson.build +++ b/hw/char/meson.build @@ -26,6 +26,7 @@ system_ss.add(when: 'CONFIG_AVR_USART', if_true: files('a= vr_usart.c')) system_ss.add(when: 'CONFIG_COLDFIRE', if_true: files('mcf_uart.c')) system_ss.add(when: 'CONFIG_DIGIC', if_true: files('digic-uart.c')) system_ss.add(when: 'CONFIG_EXYNOS4', if_true: files('exynos4210_uart.c')) +system_ss.add(when: 'CONFIG_MAX78000_UART', if_true: files('max78000_uart.= c')) system_ss.add(when: 'CONFIG_OMAP', if_true: files('omap_uart.c')) system_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_aux.c')) system_ss.add(when: 'CONFIG_RENESAS_SCI', if_true: files('renesas_sci.c')) diff --git a/include/hw/char/max78000_uart.h b/include/hw/char/max78000_uar= t.h new file mode 100644 index 0000000000..cf90d51dbf --- /dev/null +++ b/include/hw/char/max78000_uart.h @@ -0,0 +1,78 @@ +/* + * MAX78000 UART + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_MAX78000_UART_H +#define HW_MAX78000_UART_H + +#include "hw/sysbus.h" +#include "chardev/char-fe.h" +#include "qemu/fifo8.h" +#include "qom/object.h" + +#define UART_CTRL 0x0 +#define UART_STATUS 0x4 +#define UART_INT_EN 0x8 +#define UART_INT_FL 0xc +#define UART_CLKDIV 0x10 +#define UART_OSR 0x14 +#define UART_TXPEEK 0x18 +#define UART_PNR 0x1c +#define UART_FIFO 0x20 +#define UART_DMA 0x30 +#define UART_WKEN 0x34 +#define UART_WKFL 0x38 + +/* CTRL */ +#define UART_CTF_DIS (1 << 7) +#define UART_FLUSH_TX (1 << 8) +#define UART_FLUSH_RX (1 << 9) +#define UART_BCLKEN (1 << 15) +#define UART_BCLKRDY (1 << 19) + +/* STATUS */ +#define UART_RX_LVL 8 +#define UART_TX_EM (1 << 6) +#define UART_RX_FULL (1 << 5) +#define UART_RX_EM (1 << 4) + +/* PNR (Pin Control Register) */ +#define UART_CTS 1 +#define UART_RTS (1 << 1) + +/* INT_EN / INT_FL */ +#define UART_RX_THD (1 << 4) +#define UART_TX_HE (1 << 6) + +#define UART_RXBUFLEN 0x100 +#define TYPE_MAX78000_UART "max78000-uart" +OBJECT_DECLARE_SIMPLE_TYPE(Max78000UartState, MAX78000_UART) + +struct Max78000UartState { + SysBusDevice parent_obj; + + MemoryRegion mmio; + + uint32_t ctrl; + uint32_t status; + uint32_t int_en; + uint32_t int_fl; + uint32_t clkdiv; + uint32_t osr; + uint32_t txpeek; + uint32_t pnr; + uint32_t fifo; + uint32_t dma; + uint32_t wken; + uint32_t wkfl; + + Fifo8 rx_fifo; + + CharBackend chr; + qemu_irq irq; +}; +#endif /* HW_STM32F2XX_USART_H */ --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668463; cv=none; d=zohomail.com; s=zohoarc; b=dbaGBnrnvwkZYCO78t1sSyruLEt1Kg118e0MSGSfOlUu9GVcgZTyjaliPxF5l9ZaRjdVMe92cOhzg5zvi18fxftCdh7f/v8WzCEaUiE75fFZDfJcc6djVrD2+E8pcOH+spDjcEGOOv0gJ4cEkTZlyE9xkDzSZNrtSNye/5UxPYU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668463; 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=rPqOpy/um3xbd4V0oVsFu1fuPCvLz9RIDN3YgW20xPg=; b=HRwRziE3XUXGoKX9LI1SlRNRKJMbEqZs7wyC79u65fAUSMGVHx1ipjRj27SLVbGjJH20i73Sm5jyyWbq+EfdI8LYtkYa0lcgXh9vfwE9jnAW1W/peiPrdu8NvxednNYmt8JJH7uBZW0X7MgEqY6EXSuLVk5ZV4sZFsqn6DZkfvE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175166846380734.554734796534376; Fri, 4 Jul 2025 15:34:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxw-0001ko-4o; Fri, 04 Jul 2025 18:33:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxi-0001gG-Ko for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x82d.google.com ([2607:f8b0:4864:20::82d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxa-000795-Q2 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:51 -0400 Received: by mail-qt1-x82d.google.com with SMTP id d75a77b69052e-4a58ba6c945so19389761cf.2 for ; Fri, 04 Jul 2025 15:32:45 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668364; x=1752273164; 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=rPqOpy/um3xbd4V0oVsFu1fuPCvLz9RIDN3YgW20xPg=; b=mk7wdaJMIOecJMReAnAqDeqqqYUmeR9v3xAJuQMxij8KzTxiFoKRMLv6rXKSsvDdVK DtpOekR3mzACtavRu9DEYUJxQhRg5UCaLpQS3OA+3zKZfc1ETDzhK4ZVENrrkYh875JP wjElrvVHK6XsPx2L00riVybadCExcKvfVzvtCC+/eTEEZCwiUaRpBcSM4X23L1VqnwRi V07U/25cxzmtWMLly2W0fYmSuCjfm98FKsiatYguVQo8lJRISN9P6q9dJtS0qCw6BcJ7 os+7iad4Er6qsaMSDN6Zj3VkShs95E0D7r0ZxNdepBMwto0bPgC7OnqFBDLGU/lRsK4/ hETQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668364; x=1752273164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rPqOpy/um3xbd4V0oVsFu1fuPCvLz9RIDN3YgW20xPg=; b=s+ciBZVcmbhSyTYQ8aIMZHhLFEC2Ddg/NB8MK0c2uGwQAVlCoGMv2ZiY0Ww6vMGmtt A+Nc5BgOzxEANiOAx/2djOqbXXFtpYrbl9szbPDjSjTbl5pASior8VkouQ+iRScgBrYU 2rISBc8zsOjU1VALL/52xl08jrmigt2mrCycZk8zaKQLDXFtUe7baDgo0hlPJWaf1k87 fLG2L88QvOjsypUT0jqJ+0nOmA/3zaIS/Ki3zjufQM9UbopglTCwsu3NVQhB5JVVpOuP w97Dvpo0oyi7yy7QAbB7LFG4jrKMbz7tmAR3icRY6SES3wvsWJVMs1QaLPJIXEGkJkOC VOLQ== X-Gm-Message-State: AOJu0YyP60axuxJnlN8o9gvuXG3heLPHe5jjo36Z6seYM5TFF2Q1EBeA +D/kojPsHeF2jJoPo4LAMViwwGm8431C03POj5qUugdkXIq8B2S8LoiwvuFqlQ== X-Gm-Gg: ASbGncuE3oIcKLy7LzVTacXw/zkxXSKGYDCfBlt5KR9H5LEQMtffQ14BglQLGzG7j7y jr/tlp8XlbuY3VS1PJUpT0YV3rnd+hX3rlg/x8Eg8LMam6yijc7Dok3L5hve3BJuZE8REY+9i3m 7AGF7YGoBE6yhVg7fAuX41iBvuTLVyB8tFQi7ZgPKiHZ87OHWvyY0IM3ph6j0tpsdC1T1llUxr+ PxZsgpl06yseXq6uUR6nsbRGNlFS40zmMss/Y/oGOrD7TyWIvVd9LrvAaSLwUMo0Dl6qINQddHw uOlHROZdqqX/P6GlETaOlB5oWWGTgmwrPKtG4FVf9X0uqgDdhFucOZI7q31NFJw5UWqPvurfmCb RiqxRB3Z0AbqfcZIc X-Google-Smtp-Source: AGHT+IHkXR3vXeHEt5sQJwv4vDxPe9DfFOSaxRmrOyPaXhNPtZ+62mZBTk1iscYhh6NbcQH7kDmu5Q== X-Received: by 2002:ac8:5914:0:b0:477:e2d:2ec7 with SMTP id d75a77b69052e-4a99685767bmr63583831cf.33.1751668364280; Fri, 04 Jul 2025 15:32:44 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Peter Maydell Subject: [PATCH v4 05/11] MAX78000: Add UART to SOC Date: Fri, 4 Jul 2025 18:32:33 -0400 Message-Id: <20250704223239.248781-6-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::82d; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x82d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668464668116600 Content-Type: text/plain; charset="utf-8" This commit adds UART to max78000_soc Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/max78000_soc.c | 28 ++++++++++++++++++++++++---- include/hw/arm/max78000_soc.h | 3 +++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c index 0c83b08eca..2f93ab882d 100644 --- a/hw/arm/max78000_soc.c +++ b/hw/arm/max78000_soc.c @@ -18,6 +18,10 @@ #include "hw/misc/unimp.h" =20 static const uint32_t max78000_icc_addr[] =3D {0x4002a000, 0x4002a800}; +static const uint32_t max78000_uart_addr[] =3D {0x40042000, 0x40043000, + 0x40044000}; + +static const int max78000_uart_irq[] =3D {14, 15, 34}; =20 static void max78000_soc_initfn(Object *obj) { @@ -31,6 +35,12 @@ static void max78000_soc_initfn(Object *obj) object_initialize_child(obj, name, &s->icc[i], TYPE_MAX78000_ICC); } =20 + for (i =3D 0; i < MAX78000_NUM_UART; i++) { + g_autofree char *name =3D g_strdup_printf("uart%d", i); + object_initialize_child(obj, name, &s->uart[i], + TYPE_MAX78000_UART); + } + s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); } =20 @@ -39,6 +49,7 @@ static void max78000_soc_realize(DeviceState *dev_soc, Er= ror **errp) MAX78000State *s =3D MAX78000_SOC(dev_soc); MemoryRegion *system_memory =3D get_system_memory(); DeviceState *dev, *armv7m; + SysBusDevice *busdev; Error *err =3D NULL; int i; =20 @@ -89,6 +100,19 @@ static void max78000_soc_realize(DeviceState *dev_soc, = Error **errp) sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, max78000_icc_addr[i]); } =20 + for (i =3D 0; i < MAX78000_NUM_UART; i++) { + dev =3D DEVICE(&(s->uart[i])); + qdev_prop_set_chr(dev, "chardev", serial_hd(i)); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->uart[i]), errp)) { + return; + } + + busdev =3D SYS_BUS_DEVICE(dev); + sysbus_mmio_map(busdev, 0, max78000_uart_addr[i]); + sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, + max78000_uart_irq[i= ])); + } + create_unimplemented_device("globalControl", 0x40000000, 0x400); create_unimplemented_device("systemInterface", 0x40000400, 0x400); create_unimplemented_device("functionControl", 0x40000800, 0x400); @@ -127,10 +151,6 @@ static void max78000_soc_realize(DeviceState *dev_soc,= Error **errp) create_unimplemented_device("oneWireMaster", 0x4003d000, 0x1000= ); create_unimplemented_device("semaphore", 0x4003e000, 0x1000= ); =20 - create_unimplemented_device("uart0", 0x40042000, 0x1000= ); - create_unimplemented_device("uart1", 0x40043000, 0x1000= ); - create_unimplemented_device("uart2", 0x40044000, 0x1000= ); - create_unimplemented_device("spi1", 0x40046000, 0x2000= ); create_unimplemented_device("trng", 0x4004d000, 0x1000= ); create_unimplemented_device("i2s", 0x40060000, 0x1000= ); diff --git a/include/hw/arm/max78000_soc.h b/include/hw/arm/max78000_soc.h index 27b506d6ee..57894f0035 100644 --- a/include/hw/arm/max78000_soc.h +++ b/include/hw/arm/max78000_soc.h @@ -12,6 +12,7 @@ #include "hw/or-irq.h" #include "hw/arm/armv7m.h" #include "hw/misc/max78000_icc.h" +#include "hw/char/max78000_uart.h" #include "qom/object.h" =20 #define TYPE_MAX78000_SOC "max78000-soc" @@ -24,6 +25,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(MAX78000State, MAX78000_SOC) =20 /* The MAX78k has 2 instruction caches; only icc0 matters, icc1 is for RIS= C */ #define MAX78000_NUM_ICC 2 +#define MAX78000_NUM_UART 3 =20 struct MAX78000State { SysBusDevice parent_obj; @@ -34,6 +36,7 @@ struct MAX78000State { MemoryRegion flash; =20 Max78000IccState icc[MAX78000_NUM_ICC]; + Max78000UartState uart[MAX78000_NUM_UART]; =20 Clock *sysclk; }; --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668464; cv=none; d=zohomail.com; s=zohoarc; b=RvOY5pDQGNjBp64FamTD2OGVAWrgnZAMvTwV0fd5f8lkq810O1HmHBP88TkcQB50PxO0ShVdvMqfn1VPiOfXgIsXmCDQIa07OAAoIqDnPGzwwfCz/CXq/EJQsMBiLMBhEKKR3588360yb7ur7zFAirvjMkbYKNZV0unk86cYbgE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668464; 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=3HwpcHBBUn2dcbW8T3vErv8M1+Kd3LAIXbcCOF5JP6o=; b=HnlF68aZB+8ROHy3CT/5n0UTmwAeaD3+cC9+MmRHMa3ELJ0wkctk3JQREqHgy1mkvbmCQRTJ6ob0N04bQhjpcIt31hljOC8UT0zVQ1qL9yzz3a6npyx6QTVczBmAQXm/N65SU6Jtq47mSn6KfnIfExZxcRAkJdEe8AGVyducYPI= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17516684648121001.4101455744296; Fri, 4 Jul 2025 15:34:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxr-0001ji-SM; Fri, 04 Jul 2025 18:33:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxf-0001fa-It for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x833.google.com ([2607:f8b0:4864:20::833]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxa-00079K-PK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:51 -0400 Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-4a4bb155edeso16444411cf.2 for ; Fri, 04 Jul 2025 15:32:46 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668365; x=1752273165; 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=3HwpcHBBUn2dcbW8T3vErv8M1+Kd3LAIXbcCOF5JP6o=; b=nIE15ezhNQuIV4uzxvx96W5d+o/e3LKEgXjR9tYAzxACo4in2tYFpDbXO4MGUJQhB2 kFBiWKNI1FZpDmQVwuUD2CyuSEK2ZGhdk/thPURYB8UTed/M0Ji9kdAhXFSskwuuLWkb CCXdx3aSyO/CNII9kOldCWwFY6lb4rCdFb1GVacVjZP5NBa7NUCYctCUmUlsBvIOHKHb VIob2G9a3RJzyZf/j9tOA5lCQ89ldh4N0F37DDexvW6Tv7fCiJeC5WFd+C/Gbs/PvHpy P6Uj4pMa00Kr+Ga0yCR8nUTifYu7+Q1fueQ631+7RpffCMIeYNnzklAq+/hzqQLlabMu 8H7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668365; x=1752273165; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3HwpcHBBUn2dcbW8T3vErv8M1+Kd3LAIXbcCOF5JP6o=; b=smohZRWRF/PbK13ZTpPmnjP4u7HFfdMSKIwhYeAGUo8pdEYXZab7KCsi+QIr6cKn8W L6QtV9CJE/c/Bpx+zMphq+MRDRsMyD/PRi3K+2GAbr1LnzFCi681kGoqvt53Xu92ZlKt 0nCJg9Jy/TqFOJ2kLqEr8hWNtfJrIiGNCc3zhRk7iSkQcUUds5yfv/xjpxp9wrdZoSRg gKcLSY8ZnKhgMQFNaWA50MmZjhEezQQVRKTAURZoW6iRbz84ew7WWk9zWC8wQVThb3c0 8gcMavUBmZilCD/QFTtKRmqZuWPpcVhxshrxnJr2wsPP9jedB343tpGTAChOTHSVI4sP joSg== X-Gm-Message-State: AOJu0YxgU07SlsOGFkUE8KJZjACMqQXjJRLk5od0eZwe6Sl8ieGIUVRE ZIjcQwR49Dv7mIi7Vv2Ov+XQouvZtGsQrPHrtrsPHx7/NAFNb+sxkdW84sE61Q== X-Gm-Gg: ASbGnctqsPVPSk8Z+aKqpH4xaY84PnM94j1mlMIoHBBWqM5j4i74MnBaxJV1RTUkoUa ujt2zPVoeMt1b159zDnDJxSDL64W2j6mPq9qzRHXdpA+NOL2z8mS18Q52XbvG62RWDv522MbL0M m78QYo0doaFmb2eRzWIpGJSJ2LkCq2y6pfjUMij59OBJkz1Wroa06MyLqDYqzBu5PasURnszrre a6WJlivoHhnT9iCDkX8sLTB/vznZqpsED4W28mom+6FayyajF95QlXIuIQmv7inRBMIshMeJW43 5meP30HK/VpSxmgPJ4eB7TgeMQvvWxGgjHTTN7GuI0YzQjBI5VkrCdoni3OUfhAkkLoSnRloZmD mpaiing== X-Google-Smtp-Source: AGHT+IG0NltPne71Auc9iNXNwAA+d1/uCMjMkv+EGPx7YwJwzgpMLD/0v01zV/RiHa8E/3rbO8/etg== X-Received: by 2002:a05:622a:1822:b0:494:950c:6dca with SMTP id d75a77b69052e-4a9a689b796mr9623471cf.23.1751668365015; Fri, 04 Jul 2025 15:32:45 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 06/11] MAX78000: GCR Implementation Date: Fri, 4 Jul 2025 18:32:34 -0400 Message-Id: <20250704223239.248781-7-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::833; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x833.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668466648116600 Content-Type: text/plain; charset="utf-8" This commit implements the Global Control Register for the MAX78000 Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/Kconfig | 1 + hw/misc/Kconfig | 3 + hw/misc/max78000_gcr.c | 339 +++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + include/hw/misc/max78000_gcr.h | 129 +++++++++++++ 5 files changed, 473 insertions(+) create mode 100644 hw/misc/max78000_gcr.c create mode 100644 include/hw/misc/max78000_gcr.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 031e0bf59e..41bb64458f 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -368,6 +368,7 @@ config MAX78000_SOC select ARM_V7M select MAX78000_ICC select MAX78000_UART + select MAX78000_GCR =20 config RASPI bool diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 781bcf74cc..fde2266b8f 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -47,6 +47,9 @@ config A9SCU config ARM11SCU bool =20 +config MAX78000_GCR + bool + config MAX78000_ICC bool =20 diff --git a/hw/misc/max78000_gcr.c b/hw/misc/max78000_gcr.c new file mode 100644 index 0000000000..8c282f3916 --- /dev/null +++ b/hw/misc/max78000_gcr.c @@ -0,0 +1,339 @@ +/* + * MAX78000 Global Control Registers + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "trace.h" +#include "hw/irq.h" +#include "system/runstate.h" +#include "migration/vmstate.h" +#include "hw/qdev-properties.h" +#include "hw/char/max78000_uart.h" +#include "hw/misc/max78000_gcr.h" + + +static void max78000_gcr_reset_hold(Object *obj, ResetType type) +{ + DeviceState *dev =3D DEVICE(obj); + Max78000GcrState *s =3D MAX78000_GCR(dev); + s->sysctrl =3D 0x21002; + s->rst0 =3D 0; + /* All clocks are always ready */ + s->clkctrl =3D 0x3e140008; + s->pm =3D 0x3f000; + s->pclkdiv =3D 0; + s->pclkdis0 =3D 0xffffffff; + s->memctrl =3D 0x5; + s->memz =3D 0; + s->sysst =3D 0; + s->rst1 =3D 0; + s->pckdis1 =3D 0xffffffff; + s->eventen =3D 0; + s->revision =3D 0xa1; + s->sysie =3D 0; + s->eccerr =3D 0; + s->ecced =3D 0; + s->eccie =3D 0; + s->eccaddr =3D 0; +} + +static uint64_t max78000_gcr_read(void *opaque, hwaddr addr, + unsigned int size) +{ + Max78000GcrState *s =3D opaque; + + switch (addr) { + case SYSCTRL: + return s->sysctrl; + + case RST0: + return s->rst0; + + case CLKCTRL: + return s->clkctrl; + + case PM: + return s->pm; + + case PCLKDIV: + return s->pclkdiv; + + case PCLKDIS0: + return s->pclkdis0; + + case MEMCTRL: + return s->memctrl; + + case MEMZ: + return s->memz; + + case SYSST: + return s->sysst; + + case RST1: + return s->rst1; + + case PCKDIS1: + return s->pckdis1; + + case EVENTEN: + return s->eventen; + + case REVISION: + return s->revision; + + case SYSIE: + return s->sysie; + + case ECCERR: + return s->eccerr; + + case ECCED: + return s->ecced; + + case ECCIE: + return s->eccie; + + case ECCADDR: + return s->eccaddr; + + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" + HWADDR_PRIx "\n", __func__, addr); + return 0; + + } +} + +static void max78000_gcr_write(void *opaque, hwaddr addr, + uint64_t val64, unsigned int size) +{ + Max78000GcrState *s =3D opaque; + uint32_t val =3D val64; + uint8_t zero[0xc000] =3D {0}; + switch (addr) { + case SYSCTRL: + /* Checksum calculations always pass immediately */ + s->sysctrl =3D (val & 0x30000) | 0x1002; + break; + + case RST0: + if (val & SYSTEM_RESET) { + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); + } + if (val & PERIPHERAL_RESET) { + /* + * Peripheral reset resets all peripherals. The CPU + * retains its state. The GPIO, watchdog timers, AoD, + * RAM retention, and general control registers (GCR), + * including the clock configuration, are unaffected. + */ + val =3D UART2_RESET | UART1_RESET | UART0_RESET | + ADC_RESET | CNN_RESET | TRNG_RESET | + RTC_RESET | I2C0_RESET | SPI1_RESET | + TMR3_RESET | TMR2_RESET | TMR1_RESET | + TMR0_RESET | WDT0_RESET | DMA_RESET; + } + if (val & SOFT_RESET) { + /* Soft reset also resets GPIO */ + val =3D UART2_RESET | UART1_RESET | UART0_RESET | + ADC_RESET | CNN_RESET | TRNG_RESET | + RTC_RESET | I2C0_RESET | SPI1_RESET | + TMR3_RESET | TMR2_RESET | TMR1_RESET | + TMR0_RESET | GPIO1_RESET | GPIO0_RESET | + DMA_RESET; + } + if (val & UART2_RESET) { + device_cold_reset(s->uart2); + } + if (val & UART1_RESET) { + device_cold_reset(s->uart1); + } + if (val & UART0_RESET) { + device_cold_reset(s->uart0); + } + /* TODO: As other devices are implemented, add them here */ + break; + + case CLKCTRL: + s->clkctrl =3D val | SYSCLK_RDY; + break; + + case PM: + s->pm =3D val; + break; + + case PCLKDIV: + s->pclkdiv =3D val; + break; + + case PCLKDIS0: + s->pclkdis0 =3D val; + break; + + case MEMCTRL: + s->memctrl =3D val; + break; + + case MEMZ: + if (val & ram0) { + address_space_write(&s->sram_as, SYSRAM0_START, + MEMTXATTRS_UNSPECIFIED, zero, 0x8000); + } + if (val & ram1) { + address_space_write(&s->sram_as, SYSRAM1_START, + MEMTXATTRS_UNSPECIFIED, zero, 0x8000); + } + if (val & ram2) { + address_space_write(&s->sram_as, SYSRAM2_START, + MEMTXATTRS_UNSPECIFIED, zero, 0xC000); + } + if (val & ram3) { + address_space_write(&s->sram_as, SYSRAM3_START, + MEMTXATTRS_UNSPECIFIED, zero, 0x4000); + } + break; + + case SYSST: + s->sysst =3D val; + break; + + case RST1: + /* TODO: As other devices are implemented, add them here */ + s->rst1 =3D val; + break; + + case PCKDIS1: + s->pckdis1 =3D val; + break; + + case EVENTEN: + s->eventen =3D val; + break; + + case REVISION: + s->revision =3D val; + break; + + case SYSIE: + s->sysie =3D val; + break; + + case ECCERR: + s->eccerr =3D val; + break; + + case ECCED: + s->ecced =3D val; + break; + + case ECCIE: + s->eccie =3D val; + break; + + case ECCADDR: + s->eccaddr =3D val; + break; + + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIx "\= n", + __func__, addr); + break; + + } +} + +static const Property max78000_gcr_properties[] =3D { + DEFINE_PROP_LINK("sram", Max78000GcrState, sram, + TYPE_MEMORY_REGION, MemoryRegion*), + DEFINE_PROP_LINK("uart0", Max78000GcrState, uart0, + TYPE_MAX78000_UART, DeviceState*), + DEFINE_PROP_LINK("uart1", Max78000GcrState, uart1, + TYPE_MAX78000_UART, DeviceState*), + DEFINE_PROP_LINK("uart2", Max78000GcrState, uart2, + TYPE_MAX78000_UART, DeviceState*), +}; + +static const MemoryRegionOps max78000_gcr_ops =3D { + .read =3D max78000_gcr_read, + .write =3D max78000_gcr_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static const VMStateDescription vmstate_max78000_gcr =3D { + .name =3D TYPE_MAX78000_GCR, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(sysctrl, Max78000GcrState), + VMSTATE_UINT32(rst0, Max78000GcrState), + VMSTATE_UINT32(clkctrl, Max78000GcrState), + VMSTATE_UINT32(pm, Max78000GcrState), + VMSTATE_UINT32(pclkdiv, Max78000GcrState), + VMSTATE_UINT32(pclkdis0, Max78000GcrState), + VMSTATE_UINT32(memctrl, Max78000GcrState), + VMSTATE_UINT32(memz, Max78000GcrState), + VMSTATE_UINT32(sysst, Max78000GcrState), + VMSTATE_UINT32(rst1, Max78000GcrState), + VMSTATE_UINT32(pckdis1, Max78000GcrState), + VMSTATE_UINT32(eventen, Max78000GcrState), + VMSTATE_UINT32(revision, Max78000GcrState), + VMSTATE_UINT32(sysie, Max78000GcrState), + VMSTATE_UINT32(eccerr, Max78000GcrState), + VMSTATE_UINT32(ecced, Max78000GcrState), + VMSTATE_UINT32(eccie, Max78000GcrState), + VMSTATE_UINT32(eccaddr, Max78000GcrState), + VMSTATE_END_OF_LIST() + } +}; + +static void max78000_gcr_init(Object *obj) +{ + Max78000GcrState *s =3D MAX78000_GCR(obj); + + memory_region_init_io(&s->mmio, obj, &max78000_gcr_ops, s, + TYPE_MAX78000_GCR, 0x400); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); + +} + +static void max78000_gcr_realize(DeviceState *dev, Error **errp) +{ + Max78000GcrState *s =3D MAX78000_GCR(dev); + + address_space_init(&s->sram_as, s->sram, "sram"); +} + +static void max78000_gcr_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + device_class_set_props(dc, max78000_gcr_properties); + + dc->realize =3D max78000_gcr_realize; + dc->vmsd =3D &vmstate_max78000_gcr; + rc->phases.hold =3D max78000_gcr_reset_hold; +} + +static const TypeInfo max78000_gcr_info =3D { + .name =3D TYPE_MAX78000_GCR, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(Max78000GcrState), + .instance_init =3D max78000_gcr_init, + .class_init =3D max78000_gcr_class_init, +}; + +static void max78000_gcr_register_types(void) +{ + type_register_static(&max78000_gcr_info); +} + +type_init(max78000_gcr_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index a21a994ff8..283d06dad4 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -70,6 +70,7 @@ system_ss.add(when: 'CONFIG_IMX', if_true: files( 'imx_ccm.c', 'imx_rngc.c', )) +system_ss.add(when: 'CONFIG_MAX78000_GCR', if_true: files('max78000_gcr.c'= )) system_ss.add(when: 'CONFIG_MAX78000_ICC', if_true: files('max78000_icc.c'= )) system_ss.add(when: 'CONFIG_NPCM7XX', if_true: files( 'npcm_clk.c', diff --git a/include/hw/misc/max78000_gcr.h b/include/hw/misc/max78000_gcr.h new file mode 100644 index 0000000000..f04c8a3ee7 --- /dev/null +++ b/include/hw/misc/max78000_gcr.h @@ -0,0 +1,129 @@ +/* + * MAX78000 Global Control Register + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef HW_MAX78000_GCR_H +#define HW_MAX78000_GCR_H + +#include "hw/sysbus.h" +#include "qom/object.h" + +#define TYPE_MAX78000_GCR "max78000-gcr" +OBJECT_DECLARE_SIMPLE_TYPE(Max78000GcrState, MAX78000_GCR) + +#define SYSCTRL 0x0 +#define RST0 0x4 +#define CLKCTRL 0x8 +#define PM 0xc +#define PCLKDIV 0x18 +#define PCLKDIS0 0x24 +#define MEMCTRL 0x28 +#define MEMZ 0x2c +#define SYSST 0x40 +#define RST1 0x44 +#define PCKDIS1 0x48 +#define EVENTEN 0x4c +#define REVISION 0x50 +#define SYSIE 0x54 +#define ECCERR 0x64 +#define ECCED 0x68 +#define ECCIE 0x6c +#define ECCADDR 0x70 + +/* RST0 */ +#define SYSTEM_RESET (1 << 31) +#define PERIPHERAL_RESET (1 << 30) +#define SOFT_RESET (1 << 29) +#define UART2_RESET (1 << 28) + +#define ADC_RESET (1 << 26) +#define CNN_RESET (1 << 25) +#define TRNG_RESET (1 << 24) + +#define RTC_RESET (1 << 17) +#define I2C0_RESET (1 << 16) + +#define SPI1_RESET (1 << 13) +#define UART1_RESET (1 << 12) +#define UART0_RESET (1 << 11) + +#define TMR3_RESET (1 << 8) +#define TMR2_RESET (1 << 7) +#define TMR1_RESET (1 << 6) +#define TMR0_RESET (1 << 5) + +#define GPIO1_RESET (1 << 3) +#define GPIO0_RESET (1 << 2) +#define WDT0_RESET (1 << 1) +#define DMA_RESET (1 << 0) + +/* CLKCTRL */ +#define SYSCLK_RDY (1 << 13) + +/* MEMZ */ +#define ram0 (1 << 0) +#define ram1 (1 << 1) +#define ram2 (1 << 2) +#define ram3 (1 << 3) + +/* RST1 */ +#define CPU1_RESET (1 << 31) + +#define SIMO_RESET (1 << 25) +#define DVS_RESET (1 << 24) + +#define I2C2_RESET (1 << 20) +#define I2S_RESET (1 << 19) + +#define SMPHR_RESET (1 << 16) + +#define SPI0_RESET (1 << 11) +#define AES_RESET (1 << 10) +#define CRC_RESET (1 << 9) + +#define PT_RESET (1 << 1) +#define I2C1_RESET (1 << 0) + + +#define SYSRAM0_START 0x20000000 +#define SYSRAM1_START 0x20008000 +#define SYSRAM2_START 0x20010000 +#define SYSRAM3_START 0x2001C000 + +struct Max78000GcrState { + SysBusDevice parent_obj; + + MemoryRegion mmio; + + uint32_t sysctrl; + uint32_t rst0; + uint32_t clkctrl; + uint32_t pm; + uint32_t pclkdiv; + uint32_t pclkdis0; + uint32_t memctrl; + uint32_t memz; + uint32_t sysst; + uint32_t rst1; + uint32_t pckdis1; + uint32_t eventen; + uint32_t revision; + uint32_t sysie; + uint32_t eccerr; + uint32_t ecced; + uint32_t eccie; + uint32_t eccaddr; + + MemoryRegion *sram; + AddressSpace sram_as; + + DeviceState *uart0; + DeviceState *uart1; + DeviceState *uart2; + +}; + +#endif --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668468; cv=none; d=zohomail.com; s=zohoarc; b=IyuHY8GVKw6StoajmI8R8dV7rtM2TS840t5OJ6Eo3dpu6AOa9k3jsluNGdG1E4Je31Sdc+S9u3LVky+Vd1MQpLqXk5e4a/UPacrxXx2WZDJ+AcdSceIc+f+UuhTplGNRZrHtPWez4PJ4dFC/F8A//ZlyDTf6PlQz5G5hiRKNeds= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668468; 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=49cgo57NmECVgjxbtN5bwRKsawdIzTQJeJdTf1yIFQ0=; b=Z3NtA7sDxUSNuL0vy6Jbgem8FBhP7WfvPdoxmC1+gEBR/Ne4T6gIg1jRQKoxLU3MA9B5H3gvfbJBiGNa3sZPppm9Z8HRuoXeTn1YEow8C9lrBCAwOXUEkJpe5lvB3MxKacYLECHY1EaUnHJqm2+hEir2tHLVDFZqH4pg/x5vDd0= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668468433565.8710712844634; Fri, 4 Jul 2025 15:34:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxu-0001kD-BG; Fri, 04 Jul 2025 18:33:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxi-0001gI-Lk for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x835.google.com ([2607:f8b0:4864:20::835]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxc-00079Y-Qq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:51 -0400 Received: by mail-qt1-x835.google.com with SMTP id d75a77b69052e-4a774209cf0so15771591cf.0 for ; Fri, 04 Jul 2025 15:32:46 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668365; x=1752273165; 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=49cgo57NmECVgjxbtN5bwRKsawdIzTQJeJdTf1yIFQ0=; b=Itk/TPh3J2CGjmIZuySvPOeJO+R8DhW+ZvOh4rcJadROa3az428BlXIrOx+3qvYm53 r5vF92TzbpuaXdn8kBhME0mkjP483HuLE8qA2KsOxVTp1poj7ry37RjbcigNJL6VBWYR sKChk5+5Djqa+uoVne3ulYiOyPwCfZbxrlQGHXghS9w2wdkdcYjdkSsqSl6JAzSmh7bq qDhCpigjsE8oxGn83uP5NR0NOUMIBVfOlDlCSRYYp4LqM/bkqqiCdS83kCFC9+bMSzKj 8hxD0oZmIWg4cC6PcrtRABkVGb7E9Czb6t6thU94MhGRQFTKSZTLnlQ0/MRvpRMGmF+i ns5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668365; x=1752273165; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=49cgo57NmECVgjxbtN5bwRKsawdIzTQJeJdTf1yIFQ0=; b=TdAJKUtAiIa13tuz21c3Rc9HIqDcJBr83jUU0XHGmhDqXfN1vnf1OWlnSmi8QQAk9d oyoE2Zi7ZgO0ras73Hgj3mKrIP2ExEX0Xz5nHyO1tjP/6byzgDG1hA13obdofnYKSaRm JLs2BYXuifijIW3HP4Cu5u7vmSaU0zBhlj1VXrOAn21GooN85vawretEvI18GoVUN8zC 24w0SMSD/TlYQEdpPfedvvWDd1KmtLyJvxohHoy5L7DmD24wHrvbdGocoqkn+qoZgc19 HkomeNE3moU8jMHh/djUfP7OLx4wEoHpptjPCsfb8cgDxE33w2rWUnaosTsTC/avUxTA Dh0A== X-Gm-Message-State: AOJu0YyDCjsiV3otVNAeCDYFsWWCyh0gPn17xmCsgzYzP471HgCCqF1u ZPJ+0BjTRMPEA3WXFNMrpuYaI2YJ8pvCtIA2WO9BkBkOJfoel9TDaMzrjtxKhQ== X-Gm-Gg: ASbGncsuO+lIxAcFFLAgBxtJBhcV6/5m0lWmbYlGbi0NufiCHmn1OZnS9ZUyvZmEdxD etB4X0wuc4iwHnpzyO/yr3uoRl5sXEomC74NxpPhEhfhK/czfa/rGg7+K8fJyO2dp/toVPH0/bd 0oToho36Af4dfhmAorqQuTSeqT0WzpaT09OSn7191gypnjx7MjBGoyFl2Z4Llq8CNJvFMxpXMcg 8od67e7kqJBHPhbwGmsen8timeVb6LurCNR6v5ghCoD4I8kyH7vmq4CN5MBFFGGmUkHPVRR4c4A VaWD5lDlxBIRWGs5WK9RiDaVqpXAmndnNrYzcKOBjmyHVIudg5mPCjbFlE2MQiWweU3XyzzqtNv 9hXpFTw== X-Google-Smtp-Source: AGHT+IEYDwiVMyEvAY/Xwsnmtax5zFXKdSwo4esMKrG8MQldbBxRSRyMUcbC7cY4iu3CrJgXczOhsA== X-Received: by 2002:a05:622a:4c1a:b0:476:6b20:2cf3 with SMTP id d75a77b69052e-4a9987b0580mr57311061cf.33.1751668365563; Fri, 04 Jul 2025 15:32:45 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 07/11] MAX78000: Add GCR to SOC Date: Fri, 4 Jul 2025 18:32:35 -0400 Message-Id: <20250704223239.248781-8-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::835; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x835.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668470595116600 Content-Type: text/plain; charset="utf-8" This commit adds the Global Control Register to max78000_soc Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/max78000_soc.c | 18 ++++++++++++++++-- include/hw/arm/max78000_soc.h | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c index 2f93ab882d..45c6088312 100644 --- a/hw/arm/max78000_soc.c +++ b/hw/arm/max78000_soc.c @@ -30,6 +30,8 @@ static void max78000_soc_initfn(Object *obj) =20 object_initialize_child(obj, "armv7m", &s->armv7m, TYPE_ARMV7M); =20 + object_initialize_child(obj, "gcr", &s->gcr, TYPE_MAX78000_GCR); + for (i =3D 0; i < MAX78000_NUM_ICC; i++) { g_autofree char *name =3D g_strdup_printf("icc%d", i); object_initialize_child(obj, name, &s->icc[i], TYPE_MAX78000_ICC); @@ -48,7 +50,7 @@ static void max78000_soc_realize(DeviceState *dev_soc, Er= ror **errp) { MAX78000State *s =3D MAX78000_SOC(dev_soc); MemoryRegion *system_memory =3D get_system_memory(); - DeviceState *dev, *armv7m; + DeviceState *dev, *gcrdev, *armv7m; SysBusDevice *busdev; Error *err =3D NULL; int i; @@ -69,6 +71,11 @@ static void max78000_soc_realize(DeviceState *dev_soc, E= rror **errp) =20 memory_region_init_ram(&s->sram, NULL, "MAX78000.sram", SRAM_SIZE, &err); + + gcrdev =3D DEVICE(&s->gcr); + object_property_set_link(OBJECT(gcrdev), "sram", OBJECT(&s->sram), + &err); + if (err !=3D NULL) { error_propagate(errp, err); return; @@ -101,19 +108,26 @@ static void max78000_soc_realize(DeviceState *dev_soc= , Error **errp) } =20 for (i =3D 0; i < MAX78000_NUM_UART; i++) { + g_autofree char *link =3D g_strdup_printf("uart%d", i); dev =3D DEVICE(&(s->uart[i])); qdev_prop_set_chr(dev, "chardev", serial_hd(i)); if (!sysbus_realize(SYS_BUS_DEVICE(&s->uart[i]), errp)) { return; } =20 + object_property_set_link(OBJECT(gcrdev), link, OBJECT(dev), + &err); + busdev =3D SYS_BUS_DEVICE(dev); sysbus_mmio_map(busdev, 0, max78000_uart_addr[i]); sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, max78000_uart_irq[i= ])); } =20 - create_unimplemented_device("globalControl", 0x40000000, 0x400); + dev =3D DEVICE(&s->gcr); + sysbus_realize(SYS_BUS_DEVICE(dev), errp); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x40000000); + create_unimplemented_device("systemInterface", 0x40000400, 0x400); create_unimplemented_device("functionControl", 0x40000800, 0x400); create_unimplemented_device("watchdogTimer0", 0x40003000, 0x400); diff --git a/include/hw/arm/max78000_soc.h b/include/hw/arm/max78000_soc.h index 57894f0035..919aca0855 100644 --- a/include/hw/arm/max78000_soc.h +++ b/include/hw/arm/max78000_soc.h @@ -11,6 +11,7 @@ =20 #include "hw/or-irq.h" #include "hw/arm/armv7m.h" +#include "hw/misc/max78000_gcr.h" #include "hw/misc/max78000_icc.h" #include "hw/char/max78000_uart.h" #include "qom/object.h" @@ -35,6 +36,7 @@ struct MAX78000State { MemoryRegion sram; MemoryRegion flash; =20 + Max78000GcrState gcr; Max78000IccState icc[MAX78000_NUM_ICC]; Max78000UartState uart[MAX78000_NUM_UART]; =20 --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668448; cv=none; d=zohomail.com; s=zohoarc; b=Jk2Q3drxrfmEvsB+YI/3jCw15lCjcFGh9E73bH9f9O0VmIskrSSML/sK5lfFMyO234rQalbjXBT7XtHA4R5SYVocuKOxvujmfCD3b0N58qgFBf9HCY6t8dyLYv4EA6cjj98z7dsuOIjx+ciysBrABoN1RHQfo1M0tmwZWqQBrIo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668448; 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=RNTuphuGm9p7ud6YPEAB9vvpfF4veBp+TzIvzkfoEsQ=; b=JaVRfa2wz6NZ52BfxwPhixdw1qekAPzxBepZX5BodEzGTMWhkNchnz16tcD+go5QKQsl8GuOzHqQl1wWMHF+3pRpAzEiJ4kHRqRaIapleqIITG5aA+5lBrqzn3OVtZPUpzYKWP1iabUMFdGmNfGICpgiZUF/PKxCIY0vMoKmOsA= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668448522396.4369876809891; Fri, 4 Jul 2025 15:34:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxu-0001jo-1G; Fri, 04 Jul 2025 18:33:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxi-0001gE-Kq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x82c.google.com ([2607:f8b0:4864:20::82c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxd-0007Bt-6o for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:53 -0400 Received: by mail-qt1-x82c.google.com with SMTP id d75a77b69052e-4a58c2430edso16466901cf.1 for ; Fri, 04 Jul 2025 15:32:47 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668367; x=1752273167; 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=RNTuphuGm9p7ud6YPEAB9vvpfF4veBp+TzIvzkfoEsQ=; b=F0ABcvYrTvShJLrF5AKHmfKEb2gBXO4QM7w/TAxZ24yf/902YGQ6UiaA+gpxhsvmKr Rvll+M2ONwe6ZDY+cIV2vPBJs2XBe9fk5KejgqWZSgktSBCnaGSphZHM7vqHQ5P93yLn GprdQttB4pPaQyIJ+kIXFtpRqGsaVEjW5xWp4+c3FhmqTaQfixXv3FXqaHhx1hXTlFwN Dbu406KR9BvUA/Ek50jP0r7fQ2t9dYwO07MZtwlaY7tVVEXhfSOsHq7b2uns27L6cGPG F3ErxARUt898svUEpwkANzI477lMblBY10eFpzCy4spQgtxlLWL6juZ++mZycv5Dr92j i38Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668367; x=1752273167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RNTuphuGm9p7ud6YPEAB9vvpfF4veBp+TzIvzkfoEsQ=; b=UyHIFxUjXepqY/EJMv50IBMzHluKyoaHktZ7Kp6r4Mq5smzYD7oZ7nG2iDB2VuTLLd U7U72vlpXnk9X9gwxx+9d8TH0WBtj5iQgHX9CpCmazovcUU5CavprgIUjEaU1P2xdzPP m8vJj1bVTE3axA1pP+5apm7Z4tA2aRMhjdo5TY4RlgqE71x1+JDTZ00X0rmNfFLJgwt8 VQ0C7R1dpp79gE4uSjc4kePqp22r8x7Ih9iZSJNMHRFAXHwXrhbThNeq8tKMdbpV5/nL 7aaQKNVovl35iwjfIRHpg6pR9joz6vxIyVuXN/vCZfXvcRL1UYA68m7F8BgilAguKcWG cpvA== X-Gm-Message-State: AOJu0YzjT2ritgI54JKks5V79cpfSD5YKrc/jzDUWXpjhm2mYWmLEi8t /i2EWfmaB+O2KyhUI4bvvERDvGaiasosQv5OykztEQawZXnl+22bSFNaeYhlsw== X-Gm-Gg: ASbGnctuVxENEKKtngsPwK4lA2zGCkFAzuGJSVVW+Cgsurbc4KqEEAvk5qJh2xQ9lNM 9WBpYYD6aKhJgpXDfGaOQBYHLNndy9YbtEYp1BpjTkGzGUKM1+t9/yeLD0Y1jZYIX6MnTP9ElM3 I+ojU/5/2nRuCL/wQt313Ef82m4yCcrBFD+g5rtSzDkbKlPEFTJ1Mr5IrD1Gb66Bq3xJVKzDsY4 TSb5LSl4vSat9V1SRrbqGjBA80g5MHYGRP4xms8qGuQp7d+5aQKWm+EToZG2soqpiXujEEHgXjZ 6daeRtoBGMAl08QB/pTQqJ7HxaPpqM8S9Vc6S5Lff9Q7LP3tyafFEJh9s9FOmQG07zdBrHVAU5q BYwZZkg== X-Google-Smtp-Source: AGHT+IHzxua7tFm582y+3OR3jxnYTxgolXevGZv3UuAad0zM73+Vd0iiEJnpPy2awdz8juskUoRiEA== X-Received: by 2002:a05:622a:418f:b0:4a9:8299:4e00 with SMTP id d75a77b69052e-4a994cf0d4bmr74040501cf.0.1751668366538; Fri, 04 Jul 2025 15:32:46 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 08/11] MAX78000: TRNG Implementation Date: Fri, 4 Jul 2025 18:32:36 -0400 Message-Id: <20250704223239.248781-9-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::82c; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x82c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668450598116600 Content-Type: text/plain; charset="utf-8" This commit implements the True Random Number Generator for the MAX78000 Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/Kconfig | 1 + hw/misc/Kconfig | 3 + hw/misc/max78000_gcr.c | 6 ++ hw/misc/max78000_trng.c | 139 ++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + include/hw/misc/max78000_gcr.h | 1 + include/hw/misc/max78000_trng.h | 35 ++++++++ 7 files changed, 186 insertions(+) create mode 100644 hw/misc/max78000_trng.c create mode 100644 include/hw/misc/max78000_trng.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 41bb64458f..fcac62be6f 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -369,6 +369,7 @@ config MAX78000_SOC select MAX78000_ICC select MAX78000_UART select MAX78000_GCR + select MAX78000_TRNG =20 config RASPI bool diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index fde2266b8f..dd6a6e54da 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -53,6 +53,9 @@ config MAX78000_GCR config MAX78000_ICC bool =20 +config MAX78000_TRNG + bool + config MOS6522 bool =20 diff --git a/hw/misc/max78000_gcr.c b/hw/misc/max78000_gcr.c index 8c282f3916..5916ee615a 100644 --- a/hw/misc/max78000_gcr.c +++ b/hw/misc/max78000_gcr.c @@ -14,6 +14,7 @@ #include "migration/vmstate.h" #include "hw/qdev-properties.h" #include "hw/char/max78000_uart.h" +#include "hw/misc/max78000_trng.h" #include "hw/misc/max78000_gcr.h" =20 =20 @@ -157,6 +158,9 @@ static void max78000_gcr_write(void *opaque, hwaddr add= r, if (val & UART0_RESET) { device_cold_reset(s->uart0); } + if (val & TRNG_RESET) { + device_cold_reset(s->trng); + } /* TODO: As other devices are implemented, add them here */ break; =20 @@ -257,6 +261,8 @@ static const Property max78000_gcr_properties[] =3D { TYPE_MAX78000_UART, DeviceState*), DEFINE_PROP_LINK("uart2", Max78000GcrState, uart2, TYPE_MAX78000_UART, DeviceState*), + DEFINE_PROP_LINK("trng", Max78000GcrState, trng, + TYPE_MAX78000_TRNG, DeviceState*), }; =20 static const MemoryRegionOps max78000_gcr_ops =3D { diff --git a/hw/misc/max78000_trng.c b/hw/misc/max78000_trng.c new file mode 100644 index 0000000000..ecdaef53b6 --- /dev/null +++ b/hw/misc/max78000_trng.c @@ -0,0 +1,139 @@ +/* + * MAX78000 True Random Number Generator + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "trace.h" +#include "hw/irq.h" +#include "migration/vmstate.h" +#include "hw/misc/max78000_trng.h" +#include "qemu/guest-random.h" + +static uint64_t max78000_trng_read(void *opaque, hwaddr addr, + unsigned int size) +{ + uint32_t data; + + Max78000TrngState *s =3D opaque; + switch (addr) { + case CTRL: + return s->ctrl; + + case STATUS: + return 1; + + case DATA: + /* + * When interrupts are enabled, reading random data should cause a + * new interrupt to be generated; since there's always a random nu= mber + * available, we could qemu_set_irq(s->irq, s->ctrl & RND_IE). Bec= ause + * of how trng_write is set up, this is always a noop, so don't + */ + qemu_guest_getrandom_nofail(&data, sizeof(data)); + return data; + + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" + HWADDR_PRIx "\n", __func__, addr); + break; + } + return 0; +} + +static void max78000_trng_write(void *opaque, hwaddr addr, + uint64_t val64, unsigned int size) +{ + Max78000TrngState *s =3D opaque; + uint32_t val =3D val64; + switch (addr) { + case CTRL: + /* TODO: implement AES keygen */ + s->ctrl =3D val; + + /* + * This device models random number generation as taking 0 time. + * A new random number is always available, so the condition for t= he + * RND interrupt is always fulfilled; we can just set irq to 1. + */ + if (val & RND_IE) { + qemu_set_irq(s->irq, 1); + } else{ + qemu_set_irq(s->irq, 0); + } + break; + + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" + HWADDR_PRIx "\n", __func__, addr); + break; + } +} + +static void max78000_trng_reset_hold(Object *obj, ResetType type) +{ + Max78000TrngState *s =3D MAX78000_TRNG(obj); + s->ctrl =3D 0; + s->status =3D 0; + s->data =3D 0; +} + +static const MemoryRegionOps max78000_trng_ops =3D { + .read =3D max78000_trng_read, + .write =3D max78000_trng_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static const VMStateDescription max78000_trng_vmstate =3D { + .name =3D TYPE_MAX78000_TRNG, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(ctrl, Max78000TrngState), + VMSTATE_UINT32(status, Max78000TrngState), + VMSTATE_UINT32(data, Max78000TrngState), + VMSTATE_END_OF_LIST() + } +}; + +static void max78000_trng_init(Object *obj) +{ + Max78000TrngState *s =3D MAX78000_TRNG(obj); + sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq); + + memory_region_init_io(&s->mmio, obj, &max78000_trng_ops, s, + TYPE_MAX78000_TRNG, 0x1000); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); + +} + +static void max78000_trng_class_init(ObjectClass *klass, const void *data) +{ + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + DeviceClass *dc =3D DEVICE_CLASS(klass); + + rc->phases.hold =3D max78000_trng_reset_hold; + dc->vmsd =3D &max78000_trng_vmstate; + +} + +static const TypeInfo max78000_trng_info =3D { + .name =3D TYPE_MAX78000_TRNG, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(Max78000TrngState), + .instance_init =3D max78000_trng_init, + .class_init =3D max78000_trng_class_init, +}; + +static void max78000_trng_register_types(void) +{ + type_register_static(&max78000_trng_info); +} + +type_init(max78000_trng_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index 283d06dad4..c7c57d924b 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -72,6 +72,7 @@ system_ss.add(when: 'CONFIG_IMX', if_true: files( )) system_ss.add(when: 'CONFIG_MAX78000_GCR', if_true: files('max78000_gcr.c'= )) system_ss.add(when: 'CONFIG_MAX78000_ICC', if_true: files('max78000_icc.c'= )) +system_ss.add(when: 'CONFIG_MAX78000_TRNG', if_true: files('max78000_trng.= c')) system_ss.add(when: 'CONFIG_NPCM7XX', if_true: files( 'npcm_clk.c', 'npcm_gcr.c', diff --git a/include/hw/misc/max78000_gcr.h b/include/hw/misc/max78000_gcr.h index f04c8a3ee7..23ddf0885b 100644 --- a/include/hw/misc/max78000_gcr.h +++ b/include/hw/misc/max78000_gcr.h @@ -123,6 +123,7 @@ struct Max78000GcrState { DeviceState *uart0; DeviceState *uart1; DeviceState *uart2; + DeviceState *trng; =20 }; =20 diff --git a/include/hw/misc/max78000_trng.h b/include/hw/misc/max78000_trn= g.h new file mode 100644 index 0000000000..c5a8129b6a --- /dev/null +++ b/include/hw/misc/max78000_trng.h @@ -0,0 +1,35 @@ +/* + * MAX78000 True Random Number Generator + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef HW_MAX78000_TRNG_H +#define HW_MAX78000_TRNG_H + +#include "hw/sysbus.h" +#include "qom/object.h" + +#define TYPE_MAX78000_TRNG "max78000-trng" +OBJECT_DECLARE_SIMPLE_TYPE(Max78000TrngState, MAX78000_TRNG) + +#define CTRL 0 +#define STATUS 4 +#define DATA 8 + +#define RND_IE (1 << 1) + +struct Max78000TrngState { + SysBusDevice parent_obj; + + MemoryRegion mmio; + + uint32_t ctrl; + uint32_t status; + uint32_t data; + + qemu_irq irq; +}; + +#endif --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668448; cv=none; d=zohomail.com; s=zohoarc; b=aV2g5NLa4qpLLfL9+Xx01rx9mTZl/zfL/x42un0ibPlH/Topt2P4pAufl9P1MpnYXHyjOsx6nC6nJX+ZhJ578UNoDTo1m4I1/kRlrNBB4KwG9/VIjrQ85VNFasR/RdEobSfevao/D6YIyvNk4doznyz1wVzEHzzlE1O21JqRIWw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668448; 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=uKmkxRAsLrWjnsCOSQbFX4weQOnjMiP/ZpQ6qjeJJOQ=; b=OLjQkwEYvChsyBrS2VOXy98ve/1BAvkTYXWmbemAQiM5JDv0L421dB92SebK2eI2hX4gxnKBeHeoTlkdACpcKm5jF3PGchgaf1T+37dc+vOub6UmxN0XLw4/5bFwZhgosEa1B6oik61WBGj1nT0Rab2I0vKBd83G2sGpu+g1IxE= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668448521150.01069225378467; Fri, 4 Jul 2025 15:34:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxw-0001kr-RM; Fri, 04 Jul 2025 18:33:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxi-0001gH-Kq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x833.google.com ([2607:f8b0:4864:20::833]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxd-0007CZ-6k for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:52 -0400 Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-4a6f0bcdf45so16992291cf.0 for ; Fri, 04 Jul 2025 15:32:48 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668368; x=1752273168; 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=uKmkxRAsLrWjnsCOSQbFX4weQOnjMiP/ZpQ6qjeJJOQ=; b=V4/03W1xYn+nL0CZuSHkUQ3OIfm10dREr5eUWveaeHr5DywDxUClLQmjjhhD3Ag1PH D44xvqcvEAtUF6qz7LxfPmYBHU1joZhVAFnaW4eGE+3EWTaXb8JEemtWnzTQ6M6EX30d qnLxUsbvnQrvQoyPaN+fzPiJf3txL7+lecFZtLxYN0ZlFG+pG2PhO3x3/0eY86He6tdB GWZKdlByWYJjDHd1RSxjVRfLKml6ZyAScG8Ex4WpID9fUNmpRQHbdw8wNRj0M/xTJHCA /7UJJUBa6KJHG6qCP3i8sFoh8MxJq0FSc7GLvEBCYDJ9xqtTqmSvUXzCRFSDoXZSUzl7 xU/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668368; x=1752273168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uKmkxRAsLrWjnsCOSQbFX4weQOnjMiP/ZpQ6qjeJJOQ=; b=w+ysNP+aIab3AhACTTufMIJL3ynZ1OOfup64T3vnH8wT/WoCE83Gp8x+c54UWZmF2u /70O/pp0mh7uiZSM6Cn0fKoYGwRjYiBNgqYtWkH01Rma9HNtJEEboL1nuv3KbFh+G6DP sxxS7hpWcpTgBFf+8YpZiUhRJhX9tSxG77nxYyimWIFUY/zlNyK3o4vfq3DZnASpnCDI C5cldzs6X0ijukuc46AyM/fSm7XTP2hUmfsmvaVKHGOu5J7uHKq7sonQ7mpmZpXUR8Cu B+l5zQ7Oh2hoioLyhdobvrFAww4GOuVO3nCM4Z7ApGquWiogPzFNpYOGZZwCUxzOiBL4 09Nw== X-Gm-Message-State: AOJu0Yx5ZaBH341XW163R7JyLmsfguq5s4uQAzn57sSD47DAWGHzCJ0f ARu3QAM/U4pCksSj208e2VF+FUNbrnMxLuuIG6+eYXWQm0Ks6WPjrq5JB4DG3g== X-Gm-Gg: ASbGncsTV08qDScjCrNfSo8sV8q/H+dJvUAXvp/XULt+rMup0mAXq/GSxUAkeNxVKAZ ihGwRLj62NcdThgf2QLB3XNh9ou5hKZapFTvlmFbrzWzQxuKpeHIHW102/mr+D/7T3ADtLw90wR pT9cbXfNBPtMLzZQxe9c1r6PkM+YsgYpbv2f+ZimXmJ9EzHnOzxqHJ1AP0NUfldnD0rGwccoERE KKW6VpWeEcS9W/v/MrOgkHNb0PXbezK/t/TvxHRLTEWYqzXbxsI7JP2PxuJ6jo/GFD7rU/rnlse u5K8C30SuSpbMG/QXwYqxJMah5RLVQDcE44QEgec99Zh0O8adUytrwJIeR0MVrxIUJhI9lwYWvJ 2gz952g== X-Google-Smtp-Source: AGHT+IEQRc/K7OH7dQ+PT7kvz/9GHnfa8s48LweLUsDYemgDvFfn8FyLFp+CJoWxZKDLkEepGrd7cw== X-Received: by 2002:a05:622a:4ccb:b0:4a9:8852:7b95 with SMTP id d75a77b69052e-4a99685488emr56714981cf.26.1751668367650; Fri, 04 Jul 2025 15:32:47 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 09/11] MAX78000: Add TRNG to SOC Date: Fri, 4 Jul 2025 18:32:37 -0400 Message-Id: <20250704223239.248781-10-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::833; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x833.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668450443116600 Content-Type: text/plain; charset="utf-8" This commit adds TRNG to max78000_soc Signed-off-by: Jackson Donaldson --- hw/arm/max78000_soc.c | 10 +++++++++- include/hw/arm/max78000_soc.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c index 45c6088312..3f2069fb03 100644 --- a/hw/arm/max78000_soc.c +++ b/hw/arm/max78000_soc.c @@ -43,6 +43,8 @@ static void max78000_soc_initfn(Object *obj) TYPE_MAX78000_UART); } =20 + object_initialize_child(obj, "trng", &s->trng, TYPE_MAX78000_TRNG); + s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); } =20 @@ -124,6 +126,13 @@ static void max78000_soc_realize(DeviceState *dev_soc,= Error **errp) max78000_uart_irq[i= ])); } =20 + dev =3D DEVICE(&s->trng); + sysbus_realize(SYS_BUS_DEVICE(dev), errp); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x4004d000); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, qdev_get_gpio_in(armv7m, 4)= ); + + object_property_set_link(OBJECT(gcrdev), "trng", OBJECT(dev), &err); + dev =3D DEVICE(&s->gcr); sysbus_realize(SYS_BUS_DEVICE(dev), errp); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x40000000); @@ -166,7 +175,6 @@ static void max78000_soc_realize(DeviceState *dev_soc, = Error **errp) create_unimplemented_device("semaphore", 0x4003e000, 0x1000= ); =20 create_unimplemented_device("spi1", 0x40046000, 0x2000= ); - create_unimplemented_device("trng", 0x4004d000, 0x1000= ); create_unimplemented_device("i2s", 0x40060000, 0x1000= ); create_unimplemented_device("lowPowerControl", 0x40080000, 0x400); create_unimplemented_device("gpio2", 0x40080400, 0x200); diff --git a/include/hw/arm/max78000_soc.h b/include/hw/arm/max78000_soc.h index 919aca0855..528598cfcb 100644 --- a/include/hw/arm/max78000_soc.h +++ b/include/hw/arm/max78000_soc.h @@ -14,6 +14,7 @@ #include "hw/misc/max78000_gcr.h" #include "hw/misc/max78000_icc.h" #include "hw/char/max78000_uart.h" +#include "hw/misc/max78000_trng.h" #include "qom/object.h" =20 #define TYPE_MAX78000_SOC "max78000-soc" @@ -39,6 +40,7 @@ struct MAX78000State { Max78000GcrState gcr; Max78000IccState icc[MAX78000_NUM_ICC]; Max78000UartState uart[MAX78000_NUM_UART]; + Max78000TrngState trng; =20 Clock *sysclk; }; --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668503; cv=none; d=zohomail.com; s=zohoarc; b=bYmQ3uDrbbpeihSt80STT3WqOPY7VB1tj3bjGAQn3O0hBlxCVKfS0i/ysO2cR/slHIsQ9JWPDa2279Xhz+TH6BrTOjqBlTClHJMUnAHn/ovCXdqcMweHu6ILmdRg0lM7xnDy0wIKTMMHmyDusGC+cyISVlDIII97Yvgy/g2XZqM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668503; 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=6E+EqxxfU5SNy6RouBOnTMgirqhhPAntczpBQffoP6Y=; b=RutcybAwxVJHcJxZAjZ/ubncyKIhS8FyZK3WkItDjRaQ8QbfuZV1m8z+oy7uvZZqmHd5Yr0f7q5zyam9ZuZt1yApeYABuqUILQg8sNQFfa3YHRwfYPA/50FedGmRYVdlrwA01GZQCdtiLepi813a82LY7HpSI17dn+vl5VSuSqY= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668503182231.01044811989686; Fri, 4 Jul 2025 15:35:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxz-0001lR-1E; Fri, 04 Jul 2025 18:33:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxl-0001gT-9f for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x834.google.com ([2607:f8b0:4864:20::834]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxf-0007Dm-9R for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:56 -0400 Received: by mail-qt1-x834.google.com with SMTP id d75a77b69052e-4a585dc5f4aso17254921cf.2 for ; Fri, 04 Jul 2025 15:32:49 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668369; x=1752273169; 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=6E+EqxxfU5SNy6RouBOnTMgirqhhPAntczpBQffoP6Y=; b=nFpvM3DcKzHyn7MLnLCN7jusH0cNYOGwVJvLOM0gZSrdSllK13L48r7rzIXwtZpw0o BSLbrIlwIM5ObEfqUnEEDu2H2JPnaK+QzgEeM3O341qiLEbmsUuz0pbQEV/+Hw/IVZlF nRHCyzaM2dbewxfmWoIrnVZAVVNMD1vozPetacx8RQ0pQy/6kHFI8cgMcdITA9/RDkjG 9D6W0TO9TMvM1iUEQVPrRrLdgFQszLFeBIeWF3hV+lY+PooxrzIKr4JT/enwTbHXVoKn X0GvVJo3MkDlu3aDYiUpnYpWCtNkL90xwd4R9Ad/SALLElHAOs4BPOt1Qjyl/LsZITqu EY+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668369; x=1752273169; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6E+EqxxfU5SNy6RouBOnTMgirqhhPAntczpBQffoP6Y=; b=ozo4nAmR4dOg0UcAtETANjS8hzo7Z7g1Xro4J/ub/5ux1S4EDJHzomcKfkbefrWZuF WKJ7z/yYwWb6azei0S+UeXpvwFrTBFbQqLwvPTpSVo2Dbzhts6Sntv6LQ6BWTgHxSTBU FHXBUd+Xj/W7xU/ZVg99hmD6f9hC1/ptU0o79VfZhSpzP6D30r+q0qfMCW0BMtwZQhOh idrZIFLsKXsGs5KwV9OQDpsQaBBQ2Oj1NOKLWeaJoV9wiw3XzeTdLu1iSf5ZTeVHxQyD xUy0fNqTEWEtL1zh8hA9I/bc/W6PHRKjA48BZ1lvwHfq0kEo8ixlCGldKe7xRFth/l1t +X4A== X-Gm-Message-State: AOJu0YzrJOMgWZBpejiwfNlTi0RixVIA/Fys4GrodslTooCMWFuZgUYf 3oaq4hIJLs5EpTVdpArwwdR88S+Stp4oLOutdG4/Dt1cfxhWTDbn5O4rd6isWA== X-Gm-Gg: ASbGncsWyDb7T3mu8MZTXMHREpY1hJIS/jaabqu3zOTC+F6JFydQQfmUDaTm16McfKI ZC06HlEhejbgHoVR4y3lUcBdF2Rgibbya9nHWr6qHC/XN0pKHcrZfwtCTbN1Hvz359NghMltRie E5qyBEZZQMEYgrD22OstgylQHwqC0AVUPs4izZTpUueNmz9POYGEmDqLI6CbI2HRDz6A8UnaRMd VKRKAWC0UwWXMdW0vT3pqLPS37ixrFKHiC58IzTSprsJGqye6f6R2gDcjzDFbxtrIf6avpeLnzN ubMweWwD6zEWU8jaalwQ6c8qwLzbmoPPlQg3FObsUPsYZdvMJeUmayEIhARqSKZGGnCSsp4tnp1 Vbn/NpSAtSjpw7dVA X-Google-Smtp-Source: AGHT+IHBWz6iNrxqrRHS8gjFzRcaUislvS05owmy7mmeq71X8RqDEhOZFYLhnkNjwT3W6ah9YRSwwg== X-Received: by 2002:ac8:574c:0:b0:4a7:a905:d5b1 with SMTP id d75a77b69052e-4a9a68aa826mr8565151cf.15.1751668368859; Fri, 04 Jul 2025 15:32:48 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 10/11] MAX78000: AES implementation Date: Fri, 4 Jul 2025 18:32:38 -0400 Message-Id: <20250704223239.248781-11-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::834; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x834.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668505407116600 Content-Type: text/plain; charset="utf-8" This commit implements AES for the MAX78000 Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/Kconfig | 1 + hw/misc/Kconfig | 3 + hw/misc/max78000_aes.c | 223 +++++++++++++++++++++++++++++++++ hw/misc/max78000_gcr.c | 6 + hw/misc/meson.build | 1 + include/hw/misc/max78000_aes.h | 68 ++++++++++ include/hw/misc/max78000_gcr.h | 1 + 7 files changed, 303 insertions(+) create mode 100644 hw/misc/max78000_aes.c create mode 100644 include/hw/misc/max78000_aes.h diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index fcac62be6f..3e41120c89 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -370,6 +370,7 @@ config MAX78000_SOC select MAX78000_UART select MAX78000_GCR select MAX78000_TRNG + select MAX78000_AES =20 config RASPI bool diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index dd6a6e54da..c27285b47a 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -47,6 +47,9 @@ config A9SCU config ARM11SCU bool =20 +config MAX78000_AES + bool + config MAX78000_GCR bool =20 diff --git a/hw/misc/max78000_aes.c b/hw/misc/max78000_aes.c new file mode 100644 index 0000000000..0bfb2f02b5 --- /dev/null +++ b/hw/misc/max78000_aes.c @@ -0,0 +1,223 @@ +/* + * MAX78000 AES + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "trace.h" +#include "hw/irq.h" +#include "migration/vmstate.h" +#include "hw/misc/max78000_aes.h" +#include "crypto/aes.h" + +static void max78000_aes_set_status(Max78000AesState *s) +{ + s->status =3D 0; + if (s->result_index >=3D 16) { + s->status |=3D OUTPUT_FULL; + } + if (s->result_index =3D=3D 0) { + s->status |=3D OUTPUT_EMPTY; + } + if (s->data_index >=3D 16) { + s->status |=3D INPUT_FULL; + } + if (s->data_index =3D=3D 0) { + s->status |=3D INPUT_EMPTY; + } +} + +static uint64_t max78000_aes_read(void *opaque, hwaddr addr, + unsigned int size) +{ + Max78000AesState *s =3D opaque; + switch (addr) { + case CTRL: + return s->ctrl; + + case STATUS: + return s->status; + + case INTFL: + return s->intfl; + + case INTEN: + return s->inten; + + case FIFO: + if (s->result_index >=3D 4) { + s->intfl &=3D ~DONE; + s->result_index -=3D 4; + max78000_aes_set_status(s); + return ldl_be_p(&s->result[s->result_index]); + } else{ + return 0; + } + + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" + HWADDR_PRIx "\n", __func__, addr); + break; + + } + return 0; +} + +static void max78000_aes_do_crypto(Max78000AesState *s) +{ + int keylen =3D 256; + uint8_t *keydata =3D s->key; + if ((s->ctrl & KEY_SIZE) =3D=3D 0) { + keylen =3D 128; + keydata +=3D 16; + } else if ((s->ctrl & KEY_SIZE) =3D=3D 1 << 6) { + keylen =3D 192; + keydata +=3D 8; + } + + AES_KEY key; + if ((s->ctrl & TYPE) =3D=3D 0) { + AES_set_encrypt_key(keydata, keylen, &key); + AES_set_decrypt_key(keydata, keylen, &s->internal_key); + AES_encrypt(s->data, s->result, &key); + s->result_index =3D 16; + } else if ((s->ctrl & TYPE) =3D=3D 1 << 8) { + AES_set_decrypt_key(keydata, keylen, &key); + AES_set_decrypt_key(keydata, keylen, &s->internal_key); + AES_decrypt(s->data, s->result, &key); + s->result_index =3D 16; + } else{ + AES_decrypt(s->data, s->result, &s->internal_key); + s->result_index =3D 16; + } + s->intfl |=3D DONE; +} + +static void max78000_aes_write(void *opaque, hwaddr addr, + uint64_t val64, unsigned int size) +{ + Max78000AesState *s =3D opaque; + uint32_t val =3D val64; + switch (addr) { + case CTRL: + if (val & OUTPUT_FLUSH) { + s->result_index =3D 0; + val &=3D ~OUTPUT_FLUSH; + } + if (val & INPUT_FLUSH) { + s->data_index =3D 0; + val &=3D ~INPUT_FLUSH; + } + if (val & START) { + max78000_aes_do_crypto(s); + } + + /* Hardware appears to stay enabled even if 0 written */ + s->ctrl =3D val | (s->ctrl & AES_EN); + break; + + case FIFO: + assert(s->data_index <=3D 12); + stl_be_p(&s->data[12 - s->data_index], val); + s->data_index +=3D 4; + if (s->data_index >=3D 16) { + s->data_index =3D 0; + max78000_aes_do_crypto(s); + } + break; + + case KEY_BASE ... KEY_END - 4: + stl_be_p(&s->key[(KEY_END - KEY_BASE - 4) - (addr - KEY_BASE)], va= l); + break; + + default: + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" + HWADDR_PRIx "\n", __func__, addr); + break; + + } + max78000_aes_set_status(s); +} + +static void max78000_aes_reset_hold(Object *obj, ResetType type) +{ + Max78000AesState *s =3D MAX78000_AES(obj); + s->ctrl =3D 0; + s->status =3D 0; + s->intfl =3D 0; + s->inten =3D 0; + + s->data_index =3D 0; + s->result_index =3D 0; + + memset(s->data, 0, sizeof(s->data)); + memset(s->key, 0, sizeof(s->key)); + memset(s->result, 0, sizeof(s->result)); + memset(&s->internal_key, 0, sizeof(s->internal_key)); +} + +static const MemoryRegionOps max78000_aes_ops =3D { + .read =3D max78000_aes_read, + .write =3D max78000_aes_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static const VMStateDescription vmstate_max78000_aes =3D { + .name =3D TYPE_MAX78000_AES, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(ctrl, Max78000AesState), + VMSTATE_UINT32(status, Max78000AesState), + VMSTATE_UINT32(intfl, Max78000AesState), + VMSTATE_UINT32(inten, Max78000AesState), + VMSTATE_UINT8_ARRAY(data, Max78000AesState, 16), + VMSTATE_UINT8_ARRAY(key, Max78000AesState, 32), + VMSTATE_UINT8_ARRAY(result, Max78000AesState, 16), + VMSTATE_UINT32_ARRAY(internal_key.rd_key, Max78000AesState, 60), + VMSTATE_INT32(internal_key.rounds, Max78000AesState), + VMSTATE_END_OF_LIST() + } +}; + +static void max78000_aes_init(Object *obj) +{ + Max78000AesState *s =3D MAX78000_AES(obj); + sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq); + + memory_region_init_io(&s->mmio, obj, &max78000_aes_ops, s, + TYPE_MAX78000_AES, 0xc00); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); + +} + +static void max78000_aes_class_init(ObjectClass *klass, const void *data) +{ + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + DeviceClass *dc =3D DEVICE_CLASS(klass); + + rc->phases.hold =3D max78000_aes_reset_hold; + dc->vmsd =3D &vmstate_max78000_aes; + +} + +static const TypeInfo max78000_aes_info =3D { + .name =3D TYPE_MAX78000_AES, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(Max78000AesState), + .instance_init =3D max78000_aes_init, + .class_init =3D max78000_aes_class_init, +}; + +static void max78000_aes_register_types(void) +{ + type_register_static(&max78000_aes_info); +} + +type_init(max78000_aes_register_types) diff --git a/hw/misc/max78000_gcr.c b/hw/misc/max78000_gcr.c index 5916ee615a..fbbc92cca3 100644 --- a/hw/misc/max78000_gcr.c +++ b/hw/misc/max78000_gcr.c @@ -15,6 +15,7 @@ #include "hw/qdev-properties.h" #include "hw/char/max78000_uart.h" #include "hw/misc/max78000_trng.h" +#include "hw/misc/max78000_aes.h" #include "hw/misc/max78000_gcr.h" =20 =20 @@ -161,6 +162,9 @@ static void max78000_gcr_write(void *opaque, hwaddr add= r, if (val & TRNG_RESET) { device_cold_reset(s->trng); } + if (val & AES_RESET) { + device_cold_reset(s->aes); + } /* TODO: As other devices are implemented, add them here */ break; =20 @@ -263,6 +267,8 @@ static const Property max78000_gcr_properties[] =3D { TYPE_MAX78000_UART, DeviceState*), DEFINE_PROP_LINK("trng", Max78000GcrState, trng, TYPE_MAX78000_TRNG, DeviceState*), + DEFINE_PROP_LINK("aes", Max78000GcrState, aes, + TYPE_MAX78000_AES, DeviceState*), }; =20 static const MemoryRegionOps max78000_gcr_ops =3D { diff --git a/hw/misc/meson.build b/hw/misc/meson.build index c7c57d924b..b1d8d8e5d2 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -70,6 +70,7 @@ system_ss.add(when: 'CONFIG_IMX', if_true: files( 'imx_ccm.c', 'imx_rngc.c', )) +system_ss.add(when: 'CONFIG_MAX78000_AES', if_true: files('max78000_aes.c'= )) system_ss.add(when: 'CONFIG_MAX78000_GCR', if_true: files('max78000_gcr.c'= )) system_ss.add(when: 'CONFIG_MAX78000_ICC', if_true: files('max78000_icc.c'= )) system_ss.add(when: 'CONFIG_MAX78000_TRNG', if_true: files('max78000_trng.= c')) diff --git a/include/hw/misc/max78000_aes.h b/include/hw/misc/max78000_aes.h new file mode 100644 index 0000000000..407c45ef61 --- /dev/null +++ b/include/hw/misc/max78000_aes.h @@ -0,0 +1,68 @@ +/* + * MAX78000 AES + * + * Copyright (c) 2025 Jackson Donaldson + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef HW_MAX78000_AES_H +#define HW_MAX78000_AES_H + +#include "hw/sysbus.h" +#include "crypto/aes.h" +#include "qom/object.h" + +#define TYPE_MAX78000_AES "max78000-aes" +OBJECT_DECLARE_SIMPLE_TYPE(Max78000AesState, MAX78000_AES) + +#define CTRL 0 +#define STATUS 4 +#define INTFL 8 +#define INTEN 0xc +#define FIFO 0x10 + +#define KEY_BASE 0x400 +#define KEY_END 0x420 + +/* CTRL */ +#define TYPE (1 << 9 | 1 << 8) +#define KEY_SIZE (1 << 7 | 1 << 6) +#define OUTPUT_FLUSH (1 << 5) +#define INPUT_FLUSH (1 << 4) +#define START (1 << 3) + +#define AES_EN (1 << 0) + +/* STATUS */ +#define OUTPUT_FULL (1 << 4) +#define OUTPUT_EMPTY (1 << 3) +#define INPUT_FULL (1 << 2) +#define INPUT_EMPTY (1 << 1) +#define BUSY (1 << 0) + +/* INTFL*/ +#define DONE (1 << 0) + +struct Max78000AesState { + SysBusDevice parent_obj; + + MemoryRegion mmio; + + uint32_t ctrl; + uint32_t status; + uint32_t intfl; + uint32_t inten; + uint32_t data_index; + uint8_t data[16]; + + uint8_t key[32]; + AES_KEY internal_key; + + uint32_t result_index; + uint8_t result[16]; + + + qemu_irq irq; +}; + +#endif diff --git a/include/hw/misc/max78000_gcr.h b/include/hw/misc/max78000_gcr.h index 23ddf0885b..d5858a40f3 100644 --- a/include/hw/misc/max78000_gcr.h +++ b/include/hw/misc/max78000_gcr.h @@ -124,6 +124,7 @@ struct Max78000GcrState { DeviceState *uart1; DeviceState *uart2; DeviceState *trng; + DeviceState *aes; =20 }; =20 --=20 2.34.1 From nobody Mon Feb 9 02:02:25 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=1751668470; cv=none; d=zohomail.com; s=zohoarc; b=cIuhw5Y6m9icMWOB8fw/YBSvBnHNTBXP/z5dYNgmVZRRuLY5Swd1nYWPi0f7tVfIS8QMvy6LM2O/TuSmgioHBXKTnoA1JBMxVDhTA4t7DAZMaFb4Lw9ja9eUGFu3fYhabXQfEs7RJeOEiFqRTQ2uLk3V6xF7jE2iCf+zyWg4tik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751668470; 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=hotAB/ED0EAxC4E6VxD2YUk0GGx5OkOJzrkHwOKZueo=; b=eDgSBI8geB1WFFTMtViNnHLxDVFI09yQOhUD5LFvFuIdaAvNY8Vm/BolERM4ynj2PjUHApUTnhVd/QbSBzd9gUXIo/U/w1nyBD4ClEnK/gTSjBmCS41olZkdkNIZjyPxCT+/VU7ZFaexIJPdCYYgbQD1mIjo0qHgdsgShbSpWuA= 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751668470844647.5436455433756; Fri, 4 Jul 2025 15:34:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXoxw-0001ks-Sw; Fri, 04 Jul 2025 18:33:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXoxj-0001gL-R1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:58 -0400 Received: from mail-qt1-x830.google.com ([2607:f8b0:4864:20::830]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXoxf-0007Gv-9U for qemu-devel@nongnu.org; Fri, 04 Jul 2025 18:32:55 -0400 Received: by mail-qt1-x830.google.com with SMTP id d75a77b69052e-4a589b7dd5fso25264871cf.0 for ; Fri, 04 Jul 2025 15:32:50 -0700 (PDT) Received: from user-jcksn.myfiosgateway.com ([2600:4040:2bcd:3800:7cf4:c69f:10f5:f5b9]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4a994a3093asm21528851cf.36.2025.07.04.15.32.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 15:32:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751668370; x=1752273170; 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=hotAB/ED0EAxC4E6VxD2YUk0GGx5OkOJzrkHwOKZueo=; b=D9mRoAtLXYswPMSz7Ltoh5w88EeF/1Dh7GnALdZNVH1MvCLS/nMEuw4/fGbx3J9zGS vJl94/LzOEnc/YPv6nPHDldmN+Gpi/3G70ik1hqLP+pdPp9qr5PybSyY9Akhwsk7dkcv iyY4Jk3LCyZwcYfSm6cFAnjl4+pmFE0TTI8KeN+bBjjAi2Sk4OdjwwYA1ORixQMzRXlx VmTWLEvfB7QfcbJiWI69l1LPDtBoFyPd5FvQSrWAcmejU6SyKwo7aNU7G6+Z80ANuJzY 1/5lFfbn6FZtL8eBMBt280nNBgycvpxP4VuazdLl8wya4xoYBYdsa4udka42z3vFTRoO xquA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751668370; x=1752273170; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hotAB/ED0EAxC4E6VxD2YUk0GGx5OkOJzrkHwOKZueo=; b=UOSuUZYtFh7r2IotU/mCMr1d+8T+t7Uh4eAIBNn7Bf9pdwesoxYmge+dTgMCtSZcUR ydnuNu+Ps/ufIkWVFeaX1ofgmJM+1KM3AtNggzbtkfBYKxsZINeuxpfEAIbDZG3i2sOW qfBhTAIKkUrxOW0QHONLMasHS4CnOs6LmqDrvYQNpGWJ9MMxUUYP974LAB1mxluyKm9H E657VU8KePVMbSPPtq38ikpDUDzqzv7WznxoOZwYjLHcF+ftbtNYZLAw0+Ama0NQMJ8X 9W2r3M/3Xiipp/mclpWTFbNdiPZqRtCw4rD3U8jhsBUzYHo0WeGe2OSQlTW8Sb179Avm lOhA== X-Gm-Message-State: AOJu0YzXPA8kWkpaXZBHN8F4OvbLtxMf0WbrWGv1te2drnDOgeUQMJfT KhWAVhCYIgkm0aI+gdxsNmsBxHW5wcuF87zL4ZaAhQaRWYquetI6DRGJQIJNlw== X-Gm-Gg: ASbGncsu8VIGTrR5z+XIIGSW9WVf4mTNtJKwvC3Fv8fJO0v7HWhJdM19yQuN0pqmw4P IoJA1XlGRBGSZPn/FLd3uitVK9ySgb6rayFr4wZJmBGaZ2hRCtoKXZETYjS+2DzUAlspZ8Up3p0 kVq4MxMhbuOHMw2buFpOMceBsl7Egs0T4BGaNf1IDRj8H8Mklmn0Z9ullJX/7VzhP+DmF+e9yPh P3y2vmAitXJ+GdvnK7cxI+8Xdv84Asuspeoq6sxukd0RxrDw2iumuV5QsXG9N6vgMQCR1sKqgqg /ttbrneKa8ubaZUc+j/kToK+sPPX8gcPRiwJletxMhBO3NFGLqbvg5ZZXbO3EQHQa8ONC44loti jBhreWw== X-Google-Smtp-Source: AGHT+IHjkrMZsan5iatA2ykyGODfJx7k02cHD3g4xn6tBNbcy5RNl9C+P9DDc3ozZjcgnthiFYXQgA== X-Received: by 2002:a05:622a:4a89:b0:4a8:24fa:67db with SMTP id d75a77b69052e-4a9a68c185amr10330331cf.1.1751668369790; Fri, 04 Jul 2025 15:32:49 -0700 (PDT) From: Jackson Donaldson X-Google-Original-From: Jackson Donaldson To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Subject: [PATCH v4 11/11] MAX78000: Add AES to SOC Date: Fri, 4 Jul 2025 18:32:39 -0400 Message-Id: <20250704223239.248781-12-jcksn@duck.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250704223239.248781-1-jcksn@duck.com> References: <20250704223239.248781-1-jcksn@duck.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=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::830; envelope-from=jackson88044@gmail.com; helo=mail-qt1-x830.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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_ENVFROM_END_DIGIT=0.25, 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: 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: 1751668472546116600 Content-Type: text/plain; charset="utf-8" This commit adds AES to max78000_soc Signed-off-by: Jackson Donaldson Reviewed-by: Peter Maydell --- hw/arm/max78000_soc.c | 12 +++++++++--- include/hw/arm/max78000_soc.h | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c index 3f2069fb03..7f1856f5ba 100644 --- a/hw/arm/max78000_soc.c +++ b/hw/arm/max78000_soc.c @@ -45,6 +45,8 @@ static void max78000_soc_initfn(Object *obj) =20 object_initialize_child(obj, "trng", &s->trng, TYPE_MAX78000_TRNG); =20 + object_initialize_child(obj, "aes", &s->aes, TYPE_MAX78000_AES); + s->sysclk =3D qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0); } =20 @@ -133,6 +135,13 @@ static void max78000_soc_realize(DeviceState *dev_soc,= Error **errp) =20 object_property_set_link(OBJECT(gcrdev), "trng", OBJECT(dev), &err); =20 + dev =3D DEVICE(&s->aes); + sysbus_realize(SYS_BUS_DEVICE(dev), errp); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x40007400); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, qdev_get_gpio_in(armv7m, 5)= ); + + object_property_set_link(OBJECT(gcrdev), "aes", OBJECT(dev), &err); + dev =3D DEVICE(&s->gcr); sysbus_realize(SYS_BUS_DEVICE(dev), errp); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x40000000); @@ -148,9 +157,6 @@ static void max78000_soc_realize(DeviceState *dev_soc, = Error **errp) create_unimplemented_device("powerSequencer", 0x40006800, 0x400); create_unimplemented_device("miscControl", 0x40006c00, 0x400); =20 - create_unimplemented_device("aes", 0x40007400, 0x400); - create_unimplemented_device("aesKey", 0x40007800, 0x400); - create_unimplemented_device("gpio0", 0x40008000, 0x1000= ); create_unimplemented_device("gpio1", 0x40009000, 0x1000= ); =20 diff --git a/include/hw/arm/max78000_soc.h b/include/hw/arm/max78000_soc.h index 528598cfcb..a203079ee9 100644 --- a/include/hw/arm/max78000_soc.h +++ b/include/hw/arm/max78000_soc.h @@ -11,6 +11,7 @@ =20 #include "hw/or-irq.h" #include "hw/arm/armv7m.h" +#include "hw/misc/max78000_aes.h" #include "hw/misc/max78000_gcr.h" #include "hw/misc/max78000_icc.h" #include "hw/char/max78000_uart.h" @@ -41,6 +42,7 @@ struct MAX78000State { Max78000IccState icc[MAX78000_NUM_ICC]; Max78000UartState uart[MAX78000_NUM_UART]; Max78000TrngState trng; + Max78000AesState aes; =20 Clock *sysclk; }; --=20 2.34.1