From nobody Fri Mar 14 13:14:18 2025 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1738805562; cv=none; d=zohomail.com; s=zohoarc; b=NgX0Pgi7Eqetakm73b+5DYNP61MumFtExH/lk1l2V2HFYsfuy55s/+m7B/sjZS2T/mr48h5BoM1ZPMu2hxCQ46ORfFOCmSULIYNnfsPrCYK0Ff4a88njWdBZZR4wzT1ZvCNyqzQNySqWZzErNS6039AoEjopocbg1StxDrHg0ds= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1738805562; h=Content-Type: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=c84DzyqCfqrlVTTXodKT5ext4rHnkDrcRu/S0HihXhk=; b=L/f/FeTOw1183gCJ0BgJEvOTybWNa9Y5DYYfWufqLYI26E0KMmDns5T66kkiy03/FVLILrRIO9QPgVDl8lLqgj2ag3xmYQcKqRtWtDWxB1sItQ8nXtmDoVRuQ7HEgCvkmyCnKkddg/fOEEl7F/t9wZ4tFYL5OnWWemf3SC9usvQ= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1738805562921353.5756363675912; Wed, 5 Feb 2025 17:32:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tfqkP-0005Je-Tp; Wed, 05 Feb 2025 20:32:05 -0500 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 <36hCkZwgKCt8XVIBPUTIHPPHMF.DPNRFNV-EFWFMOPOHOV.PSH@flex--wuhaotsh.bounces.google.com>) id 1tfqjy-0005DX-Ka for qemu-devel@nongnu.org; Wed, 05 Feb 2025 20:31:40 -0500 Received: from mail-pj1-x104a.google.com ([2607:f8b0:4864:20::104a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <36hCkZwgKCt8XVIBPUTIHPPHMF.DPNRFNV-EFWFMOPOHOV.PSH@flex--wuhaotsh.bounces.google.com>) id 1tfqjt-0006uO-Lr for qemu-devel@nongnu.org; Wed, 05 Feb 2025 20:31:36 -0500 Received: by mail-pj1-x104a.google.com with SMTP id 98e67ed59e1d1-2f81a0d0a18so709790a91.3 for ; Wed, 05 Feb 2025 17:31:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738805482; x=1739410282; darn=nongnu.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=c84DzyqCfqrlVTTXodKT5ext4rHnkDrcRu/S0HihXhk=; b=d5YvqkOWzJLPdPnMQkZr9VoiZvAlgYh7Z2/OZhHqHNXy8QxG4ZdzigOKpCfwc5SAuR dxM+oJWObBSx6FnIjGCRT2k5+LtSJQDtu63HFSEn4+G5fvjUhgbgYSQRwZiDCfFn5/iL iYXt2PPWr1HgQR+J36PSPKxlB3q08pO7bSxqw0wSN6HWvcpXn3nW7DN5NsxycsO2ivBQ u7myQiSyKxyvnCjk6GAzEWxQ7koWmzHLFteuMHMZ5BFiBZyrBMn1AfC8I/PLg/eh6qR6 sT/vGwrfY/GK9M36i2AGq2f1XdHiunbetHQR2Nq+f7LTFI0L0vRYMlYBHYW4Iet/P3bw k3RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738805482; x=1739410282; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=c84DzyqCfqrlVTTXodKT5ext4rHnkDrcRu/S0HihXhk=; b=N2jSAuE6ma8PiNXEyfl7gv0+cbA/pMQ5jQ4IccqYVWLgIz6ThHX6BMbV8PI9Ul8PIN qPn69gl17uHB03giZl6DAExRrWYSp5mThPvoZFvxi825nUr/3uWl/raEPldT5VSE96tk e7q8NEMncYEOTE20dVljOZloMKtEn1kYsvm3qGfPDj2C+cd6XY+Upl8G16Ghczz/xz8A K7wcevma/kR7uV3tZDZVJDgAL0g7KCMEii2r/RuOjqG9UPd0KK3wj41ASRK8V9LW9vD7 R0Z6hQPfis2g+D/S9FbaAa4DOOFxR2LxiatSncFN8CcdBy+AUxkpQggdjVl+6xacWA0k 2uaw== X-Forwarded-Encrypted: i=1; AJvYcCUJl37euhG1U4LxCUFp6I7ByixVAqOdnZEjFky60ileQ4s0B5iS36F0qHgtTdSJEA6dMYWFn3eoceca@nongnu.org X-Gm-Message-State: AOJu0YyzxEBucTnp+2KceveYgjgBI7yhO6ntsNOozY6WM29OVbSFAcJD C5zETVzai8p3bHlnBtrcI0wxPj+T+up9b0rDwaiVawgJrgnMVoKREFB5vr7+rkhPKIgCYAa8GvO y6Rq441WYzw== X-Google-Smtp-Source: AGHT+IEEz5HiE6rnG7F0ncByPVjKsjtZI0EO/t5zgbG55Lv1lEhJLEoU7poCz5qVhGvQ9M35wOk9EXlbRqBQpQ== X-Received: from pfux38.prod.google.com ([2002:a05:6a00:be6:b0:730:47e9:353e]) (user=wuhaotsh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:35cb:b0:725:322a:9438 with SMTP id d2e1a72fcca58-730350e4b7cmr7306144b3a.1.1738805482029; Wed, 05 Feb 2025 17:31:22 -0800 (PST) Date: Wed, 5 Feb 2025 17:30:55 -0800 In-Reply-To: <20250206013105.3228344-1-wuhaotsh@google.com> Mime-Version: 1.0 References: <20250206013105.3228344-1-wuhaotsh@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250206013105.3228344-8-wuhaotsh@google.com> Subject: [PATCH v3 07/17] hw/misc: Add support for NPCM8XX GCR From: Hao Wu To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, wuhaotsh@google.com, venture@google.com, Avi.Fishman@nuvoton.com, kfting@nuvoton.com, hskinnemoen@google.com, titusr@google.com, chli30@nuvoton.corp-partner.google.com 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::104a; envelope-from=36hCkZwgKCt8XVIBPUTIHPPHMF.DPNRFNV-EFWFMOPOHOV.PSH@flex--wuhaotsh.bounces.google.com; helo=mail-pj1-x104a.google.com X-Spam_score_int: -95 X-Spam_score: -9.6 X-Spam_bar: --------- X-Spam_report: (-9.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5 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 @google.com) X-ZM-MESSAGEID: 1738805565585019100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Hao Wu --- hw/misc/npcm_gcr.c | 131 ++++++++++++++++++++++++++++++++++++- include/hw/misc/npcm_gcr.h | 6 +- 2 files changed, 134 insertions(+), 3 deletions(-) diff --git a/hw/misc/npcm_gcr.c b/hw/misc/npcm_gcr.c index 7edad9e7d7..19a4b2cd17 100644 --- a/hw/misc/npcm_gcr.c +++ b/hw/misc/npcm_gcr.c @@ -1,5 +1,5 @@ /* - * Nuvoton NPCM7xx System Global Control Registers. + * Nuvoton NPCM7xx/8xx System Global Control Registers. * * Copyright 2020 Google LLC * @@ -84,6 +84,118 @@ static const uint32_t npcm7xx_cold_reset_values[NPCM7XX= _GCR_NR_REGS] =3D { [NPCM7XX_GCR_USB2PHYCTL] =3D 0x034730e4, }; =20 +enum NPCM8xxGCRRegisters { + NPCM8XX_GCR_PDID, + NPCM8XX_GCR_PWRON, + NPCM8XX_GCR_MISCPE =3D 0x014 / sizeof(uint32_t), + NPCM8XX_GCR_FLOCKR2 =3D 0x020 / sizeof(uint32_t), + NPCM8XX_GCR_FLOCKR3, + NPCM8XX_GCR_A35_MODE =3D 0x034 / sizeof(uint32_t), + NPCM8XX_GCR_SPSWC, + NPCM8XX_GCR_INTCR, + NPCM8XX_GCR_INTSR, + NPCM8XX_GCR_HIFCR =3D 0x050 / sizeof(uint32_t), + NPCM8XX_GCR_INTCR2 =3D 0x060 / sizeof(uint32_t), + NPCM8XX_GCR_SRCNT =3D 0x068 / sizeof(uint32_t), + NPCM8XX_GCR_RESSR, + NPCM8XX_GCR_RLOCKR1, + NPCM8XX_GCR_FLOCKR1, + NPCM8XX_GCR_DSCNT, + NPCM8XX_GCR_MDLR, + NPCM8XX_GCR_SCRPAD_C =3D 0x080 / sizeof(uint32_t), + NPCM8XX_GCR_SCRPAD_B, + NPCM8XX_GCR_DAVCLVLR =3D 0x098 / sizeof(uint32_t), + NPCM8XX_GCR_INTCR3, + NPCM8XX_GCR_PCIRCTL =3D 0x0a0 / sizeof(uint32_t), + NPCM8XX_GCR_VSINTR, + NPCM8XX_GCR_SD2SUR1 =3D 0x0b4 / sizeof(uint32_t), + NPCM8XX_GCR_SD2SUR2, + NPCM8XX_GCR_INTCR4 =3D 0x0c0 / sizeof(uint32_t), + NPCM8XX_GCR_CPCTL =3D 0x0d0 / sizeof(uint32_t), + NPCM8XX_GCR_CP2BST, + NPCM8XX_GCR_B2CPNT, + NPCM8XX_GCR_CPPCTL, + NPCM8XX_GCR_I2CSEGSEL =3D 0x0e0 / sizeof(uint32_t), + NPCM8XX_GCR_I2CSEGCTL, + NPCM8XX_GCR_VSRCR, + NPCM8XX_GCR_MLOCKR, + NPCM8XX_GCR_SCRPAD =3D 0x13c / sizeof(uint32_t), + NPCM8XX_GCR_USB1PHYCTL, + NPCM8XX_GCR_USB2PHYCTL, + NPCM8XX_GCR_USB3PHYCTL, + NPCM8XX_GCR_MFSEL1 =3D 0x260 / sizeof(uint32_t), + NPCM8XX_GCR_MFSEL2, + NPCM8XX_GCR_MFSEL3, + NPCM8XX_GCR_MFSEL4, + NPCM8XX_GCR_MFSEL5, + NPCM8XX_GCR_MFSEL6, + NPCM8XX_GCR_MFSEL7, + NPCM8XX_GCR_MFSEL_LK1 =3D 0x280 / sizeof(uint32_t), + NPCM8XX_GCR_MFSEL_LK2, + NPCM8XX_GCR_MFSEL_LK3, + NPCM8XX_GCR_MFSEL_LK4, + NPCM8XX_GCR_MFSEL_LK5, + NPCM8XX_GCR_MFSEL_LK6, + NPCM8XX_GCR_MFSEL_LK7, + NPCM8XX_GCR_MFSEL_SET1 =3D 0x2a0 / sizeof(uint32_t), + NPCM8XX_GCR_MFSEL_SET2, + NPCM8XX_GCR_MFSEL_SET3, + NPCM8XX_GCR_MFSEL_SET4, + NPCM8XX_GCR_MFSEL_SET5, + NPCM8XX_GCR_MFSEL_SET6, + NPCM8XX_GCR_MFSEL_SET7, + NPCM8XX_GCR_MFSEL_CLR1 =3D 0x2c0 / sizeof(uint32_t), + NPCM8XX_GCR_MFSEL_CLR2, + NPCM8XX_GCR_MFSEL_CLR3, + NPCM8XX_GCR_MFSEL_CLR4, + NPCM8XX_GCR_MFSEL_CLR5, + NPCM8XX_GCR_MFSEL_CLR6, + NPCM8XX_GCR_MFSEL_CLR7, + NPCM8XX_GCR_WD0RCRLK =3D 0x400 / sizeof(uint32_t), + NPCM8XX_GCR_WD1RCRLK, + NPCM8XX_GCR_WD2RCRLK, + NPCM8XX_GCR_SWRSTC1LK, + NPCM8XX_GCR_SWRSTC2LK, + NPCM8XX_GCR_SWRSTC3LK, + NPCM8XX_GCR_TIPRSTCLK, + NPCM8XX_GCR_CORSTCLK, + NPCM8XX_GCR_WD0RCRBLK, + NPCM8XX_GCR_WD1RCRBLK, + NPCM8XX_GCR_WD2RCRBLK, + NPCM8XX_GCR_SWRSTC1BLK, + NPCM8XX_GCR_SWRSTC2BLK, + NPCM8XX_GCR_SWRSTC3BLK, + NPCM8XX_GCR_TIPRSTCBLK, + NPCM8XX_GCR_CORSTCBLK, + /* 64 scratch pad registers start here. 0xe00 ~ 0xefc */ + NPCM8XX_GCR_SCRPAD_00 =3D 0xe00 / sizeof(uint32_t), + /* 32 semaphore registers start here. 0xf00 ~ 0xf7c */ + NPCM8XX_GCR_GP_SEMFR_00 =3D 0xf00 / sizeof(uint32_t), + NPCM8XX_GCR_REGS_END =3D 0xf80 / sizeof(uint32_t), +}; + +static const uint32_t npcm8xx_cold_reset_values[NPCM8XX_GCR_NR_REGS] =3D { + [NPCM8XX_GCR_PDID] =3D 0x04a35850, /* Arbel A1 */ + [NPCM8XX_GCR_MISCPE] =3D 0x0000ffff, + [NPCM8XX_GCR_A35_MODE] =3D 0xfff4ff30, + [NPCM8XX_GCR_SPSWC] =3D 0x00000003, + [NPCM8XX_GCR_INTCR] =3D 0x0010035e, + [NPCM8XX_GCR_HIFCR] =3D 0x0000004e, + [NPCM8XX_GCR_SD2SUR1] =3D 0xfdc80000, + [NPCM8XX_GCR_SD2SUR2] =3D 0x5200b130, + [NPCM8XX_GCR_INTCR2] =3D (1U << 19), /* DDR initialized */ + [NPCM8XX_GCR_RESSR] =3D 0x80000000, + [NPCM8XX_GCR_DAVCLVLR] =3D 0x5a00f3cf, + [NPCM8XX_GCR_INTCR3] =3D 0x5e001002, + [NPCM8XX_GCR_VSRCR] =3D 0x00004800, + [NPCM8XX_GCR_SCRPAD] =3D 0x00000008, + [NPCM8XX_GCR_USB1PHYCTL] =3D 0x034730e4, + [NPCM8XX_GCR_USB2PHYCTL] =3D 0x034730e4, + [NPCM8XX_GCR_USB3PHYCTL] =3D 0x034730e4, + /* All 32 semaphores should be initialized to 1. */ + [NPCM8XX_GCR_GP_SEMFR_00...NPCM8XX_GCR_REGS_END - 1] =3D 0x00000001, +}; + static uint64_t npcm_gcr_read(void *opaque, hwaddr offset, unsigned size) { uint32_t reg =3D offset / sizeof(uint32_t); @@ -263,6 +375,18 @@ static void npcm7xx_gcr_class_init(ObjectClass *klass,= void *data) c->cold_reset_values =3D npcm7xx_cold_reset_values; } =20 +static void npcm8xx_gcr_class_init(ObjectClass *klass, void *data) +{ + NPCMGCRClass *c =3D NPCM_GCR_CLASS(klass); + DeviceClass *dc =3D DEVICE_CLASS(klass); + + QEMU_BUILD_BUG_ON(NPCM8XX_GCR_REGS_END > NPCM_GCR_MAX_NR_REGS); + QEMU_BUILD_BUG_ON(NPCM8XX_GCR_REGS_END !=3D NPCM8XX_GCR_NR_REGS); + dc->desc =3D "NPCM8xx System Global Control Registers"; + c->nr_regs =3D NPCM8XX_GCR_NR_REGS; + c->cold_reset_values =3D npcm8xx_cold_reset_values; +} + static const TypeInfo npcm_gcr_info[] =3D { { .name =3D TYPE_NPCM_GCR, @@ -278,5 +402,10 @@ static const TypeInfo npcm_gcr_info[] =3D { .parent =3D TYPE_NPCM_GCR, .class_init =3D npcm7xx_gcr_class_init, }, + { + .name =3D TYPE_NPCM8XX_GCR, + .parent =3D TYPE_NPCM_GCR, + .class_init =3D npcm8xx_gcr_class_init, + }, }; DEFINE_TYPES(npcm_gcr_info) diff --git a/include/hw/misc/npcm_gcr.h b/include/hw/misc/npcm_gcr.h index 9af24e5cdc..9ac76ca9ab 100644 --- a/include/hw/misc/npcm_gcr.h +++ b/include/hw/misc/npcm_gcr.h @@ -1,5 +1,5 @@ /* - * Nuvoton NPCM7xx System Global Control Registers. + * Nuvoton NPCM7xx/8xx System Global Control Registers. * * Copyright 2020 Google LLC * @@ -54,8 +54,9 @@ * Number of registers in our device state structure. Don't change this wi= thout * incrementing the version_id in the vmstate. */ -#define NPCM_GCR_MAX_NR_REGS NPCM7XX_GCR_NR_REGS +#define NPCM_GCR_MAX_NR_REGS NPCM8XX_GCR_NR_REGS #define NPCM7XX_GCR_NR_REGS (0x148 / sizeof(uint32_t)) +#define NPCM8XX_GCR_NR_REGS (0xf80 / sizeof(uint32_t)) =20 typedef struct NPCMGCRState { SysBusDevice parent; @@ -78,6 +79,7 @@ typedef struct NPCMGCRClass { =20 #define TYPE_NPCM_GCR "npcm-gcr" #define TYPE_NPCM7XX_GCR "npcm7xx-gcr" +#define TYPE_NPCM8XX_GCR "npcm8xx-gcr" OBJECT_DECLARE_TYPE(NPCMGCRState, NPCMGCRClass, NPCM_GCR) =20 #endif /* NPCM_GCR_H */ --=20 2.48.1.362.g079036d154-goog