From nobody Sun Feb 8 23:41:50 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass(p=quarantine dis=none) header.from=aspeedtech.com ARC-Seal: i=2; a=rsa-sha256; t=1770189680; cv=pass; d=zohomail.com; s=zohoarc; b=e+Xq9B5NYYSdBWV/h9IIqbPcev3qreT41sEbx6dueBhUfWHexVQlCcPhE4EVBkzQUdbK4bxAbNOGCAueRFQ1Xjhqa6Th/2JrrbBu9rXnT2yjigSoFX4olfs/6YArcbAFFCD4EhNsIRQEJ4DzmsdU1XvUCJ0oOlxfF14ACGS9CMg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770189680; h=Content-Type: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=cp04EIUzD0cUQEu41kq44Cq2XTyJVOa2K+3ooAQFUbY=; b=TngmZiD0qSFBwl/j+EvOcyvHEKU1Y1PT4YxYqZCdmq93BrjiN9wkzpos5rgmrrqjgVciT3sa7A/olUo1MDBPQqIB+DfAnsWz9hhWMUXL3c/colkJvcs4NDy+wPxJUHVEGwETkHV+pH+8s4XTbC+cyOhd1Labvz+GoJqXKClQKz0= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=aspeedtech.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177018968048837.94656601068493; Tue, 3 Feb 2026 23:21:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vnX8s-0005xZ-FL; Wed, 04 Feb 2026 02:17:39 -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 ) id 1vnWZG-0004bN-1W; Wed, 04 Feb 2026 01:40:50 -0500 Received: from mail-koreacentralazlp170130006.outbound.protection.outlook.com ([2a01:111:f403:c40f::6] helo=SEYPR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vnWZE-0004HE-0w; Wed, 04 Feb 2026 01:40:49 -0500 Received: from SI6PR06MB7631.apcprd06.prod.outlook.com (2603:1096:4:239::11) by TY2PPFD3DE53D05.apcprd06.prod.outlook.com (2603:1096:408::7ad) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.15; Wed, 4 Feb 2026 06:40:22 +0000 Received: from SI6PR06MB7631.apcprd06.prod.outlook.com ([fe80::afe5:a3f1:b435:e43c]) by SI6PR06MB7631.apcprd06.prod.outlook.com ([fe80::afe5:a3f1:b435:e43c%4]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 06:40:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LOixo6/9uLjU6+zzupuHxFBTsJF92HOvASxY5LEeKwQXAO/Nf4qvvgxjXBVaU6bdqiV8tSB7NDcXvK8tu/wi/O72RmIhXZ4w8Oitpq3YMtCRj+pwd3muQFRVDVzKjZQjpTc0dKGDErmohVIc9f6tEGoxJ9rX96/MIpIJd3nM6yWCPN6hIPTtRNtXIBwe9tfAzAG85Q1065/9qKvEgCLsz2xwHPbWDGASnF7c7XcuWLX/CjhYuRbSlKDx19T/CtMJQklgxcZ9P/5nmjucbS9SE4/+46jaiemLZx26+I8aEi1cYqKujnYSQWuTm5/GBsvCYM7912u/8K8vAMdKI4A2AA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cp04EIUzD0cUQEu41kq44Cq2XTyJVOa2K+3ooAQFUbY=; b=YMvt+6fZsZVa1UKN+V0xnzIdoOq5U39ZESIAP86EsQuR9G9f5/VXazc23QqUPjcOmnPCiNQEfLDjLM88V+9PDccODGpZVAa1JrE0kzHNM/5RprDsSUxkR/j2USPAEtyksnnMlNW5YVrWRrxonNg5RGKMSmuiNO9vjFm7cY3FT9TdrPdH2HyTZX4dnXaupvqDMyc6TehjBHdl3eqh96HisAS/yuUjgzoPJA4D/zF0kW10KIY74A2t9xIbbpf6hn3SyHpkbhnZ1MFttejkMONcaJxXOHI/nglzm7zEoDIgvXkxZApU679f4rB3497LWgN6ev+PSgS4hdZJsQSD11+5Gw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cp04EIUzD0cUQEu41kq44Cq2XTyJVOa2K+3ooAQFUbY=; b=mih+Q6Dl9CPmCGZqk/ShI8Lks/GZDe/71epL7fx/e0OFcwndp11mtet6RxQFRQwomy/PFYe5vJ9X0QIw1hYG3aO0O97iOLZiA3yb+0to8IKh4eYieUPg/HAnfp5LKjToS3Hc/uevLExaj8cC72cG78hRxTgZhjyYGsLWOV8Z4ducHJ/XlMjA1gOpn5iSfSMWZts1McqHGcLb/CvJ/tIqxZAjVwf+IneHgiAgq12DIEN0aCYeqYoDGM/0A4PKLPFncNn4ffC9P8IGGzyL4hOTUlSZt0aC8725XbYUsG20xrL45YrLVN/nWAmQH4ueU6wbI3jSZNLZDMUyw+3R2LUdkQ== From: Kane Chen To: =?utf-8?B?Q8OpZHJpYyBMZSBHb2F0ZXI=?= , Peter Maydell , Steven Lee , Troy Lee , Jamin Lin , Andrew Jeffery , Joel Stanley , "open list:ASPEED BMCs" , "open list:All patches CC here" CC: Troy Lee , Kane Chen Subject: [PATCH v6 03/22] hw/misc: Add basic Aspeed PWM model Thread-Topic: [PATCH v6 03/22] hw/misc: Add basic Aspeed PWM model Thread-Index: AQHclaEiCk7d9WEl7km1ufFUnsFWIg== Date: Wed, 4 Feb 2026 06:40:21 +0000 Message-ID: <20260204064016.3515639-4-kane_chen@aspeedtech.com> References: <20260204064016.3515639-1-kane_chen@aspeedtech.com> In-Reply-To: <20260204064016.3515639-1-kane_chen@aspeedtech.com> Accept-Language: zh-TW, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SI6PR06MB7631:EE_|TY2PPFD3DE53D05:EE_ x-ms-office365-filtering-correlation-id: a9a45c95-afe8-4c21-ca6b-08de63b84587 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?d2xZRS9heHIwNDd5bUlPU0lxMkwrMGZJL1FNd3J5V0JTU05BZEtlUzNTaWd3?= =?utf-8?B?RWQ2cnlQMUUyc3FWdmFUUTNOYThCV3M4NGRxZWh4aTNhOENSalA1M1IwZTJr?= =?utf-8?B?cGJObDE5Z3N6ZVAwdDY5QzhPTE1zYlNVTVUzb1I4c0NXZFNJNHdwZStWMG5E?= =?utf-8?B?dlBqTkF1Y1BsNUJoNyt6WVRjRFYxL0QzRVU0TzYxcFFRS2hVdXJGdUtzVlRW?= =?utf-8?B?MVhQNEVuWTc5UG4zWCsrTk1zS296K0w5eW9KOXpOYXFxd1VZT2hOWFRIQlh2?= =?utf-8?B?TlA3S09VSkZ2ZnFjNytjcVNRdDZoc1pycFVkanE1RVZvbmZhdUI5QUNUaTcw?= =?utf-8?B?MktlbDkvTm94cUpqeVROeVFCWS9YU0VZNUFRUlpjdmVDRnZld1Y4YUJWZnpM?= =?utf-8?B?OTJDaHA2WndpclMxOHVsem84R3drZGtYS0g3ekJ1d2tUYnNTTUVjdExGLy8v?= =?utf-8?B?ZXZrY01IN1NmcHJ6R2JXS29GZDhBUGtuTXlKOERFNDRMdC91dVl1WmdhZm01?= =?utf-8?B?cXJrNzRDYWh4aTBJNXR3c05tdEU3dVViSzVadXFmUmgrM09NckZrTjl0ZE0x?= =?utf-8?B?azlvalUzL2tNSjN1NUtCNitCS1dIRVlUYTJXU1AyYmRzQ3UyQXhpWFBDWHBU?= =?utf-8?B?VXRaSHNjbTZSYUVDVjV3S2lFR2hZczRwdmJRSExvY0w1cmw3L3grckxsK3ZT?= =?utf-8?B?M05UNHBkRGVaVTlSUTFMbEl0aEdSYzhJWlhxMGd3NVJyeVVtWmprL21SS2V6?= =?utf-8?B?cGRuNzlHMml2QkowaGEyUUlkRUxHbVRPQXdWTnRRcEZodjkzRmVrYm9XMm5J?= =?utf-8?B?ei9Lc28rbWNhQjg5cUN5UEVrRTVjUCtOQk1saTNwSUhQYmdQb3ZIR3ZkTEdk?= =?utf-8?B?SDYrWE9zVWpUcTdvenpMRVpjNmhuakJPVGJ4bGJLbW83ZUhzeUJFY0o0elJY?= =?utf-8?B?SjZVOFVLek1pR2FOcVA2TEVNYzlheGxTb0xzUVVKbmhYU3R4UmxHUWQwVHlQ?= =?utf-8?B?MnNSc0pKbk9USlVhSDFJV2Vna3laYUZRY2N5U1VMUUJLNC8xcFFPMG9PME1P?= =?utf-8?B?U0k5aDNhdWtja3NDWnl0N0xsSmxwcVEyK3czenQxc1o2L3R3Q2RMNnJDYTQ2?= =?utf-8?B?SnlmM3hKWEdtNnpidmlmT0FybnhtTzN6NUdGUEVhZitIMVZ0K1VrMmZ0Ymor?= =?utf-8?B?ZmgrSzJTTDJKNDFKVjRFYWZtL01yQlp0NWZxNmQrb2liajI2T2diT0FObVps?= =?utf-8?B?QjQ3QnJLZTVOdG1GRkZ5RDl6Q2RhQndGUVlqZ3JaRnd4eCszS2QyQWUyU2sy?= =?utf-8?B?RFBmK3FGeG0xaC9VamRqd3dLYU40N0k2ODdFejlRTFJqNzNpSnlGbGQ2MnpH?= =?utf-8?B?NkI0aGZObjdMQVB2OEUvYkhFZnRGeXNHVUdQb3RZUUh2RktGekFWSUl0ZEFY?= =?utf-8?B?UTI0TVgzZStzaGNVeVRWZTRzaVRyY2lndmhKNXFBejJLUU1ZYkUyVWlzcTVz?= =?utf-8?B?aTRtMkRFTkVJdnMza01nSFB6dlBRbWRMT0xoTHJzazlYY0hHYnJ0cmRSSlNZ?= =?utf-8?B?QmQ2OXZpTytZNUxsOVRsMDV6eUpINXgzQ0NBQytGNGlSVlg3NWtKN0VCaUt0?= =?utf-8?B?cmxsQlc5MlE3VVR6VFp0UXFzRHZmQXhSWFBXaFdGeklRWmJ0d2VOVmdTTmYv?= =?utf-8?B?ejJBWHpRV1o3R2d3c0VGNDNJZmJIc2daTlA1cVpENzVmSkhzQjZRQXY4STV0?= =?utf-8?B?YmtDbnJFZ1lTdmdtZjZTZXRPTTB1OXovRnlLdzEycHNnL01td2d0TE1yakUw?= =?utf-8?B?U21vV0phNkRNTXF3MVRpZTczSUdHNG5zTWw5NUJqcXhlWHcyNlJpY214YW8y?= =?utf-8?B?OExCZjNkRnVoZGpWcUxrTXgvS1d4RHB6c3B6RGd3YmdlUUZpYyt3K1R0WnE1?= =?utf-8?B?K3pvWlBRREZnT2RtVmQ4cTluS3laV0tyRllLWEhhRmROelc2N3pwOWp0b2Rw?= =?utf-8?B?OFBOamVqNS8zR3pnY1gvNGtXTXdRYW1YMzBKRU9YMjBhUDdKSWFLdnNWbFRj?= =?utf-8?B?ejVrRi9hUkxqZHZMT29WRnVHdFcrdDQvL0YxZzZjbmVWaEJwNVltVkhvSUlv?= =?utf-8?B?RVRnWXprMmphMzlJbk1wYlNWNGtVOUZuRnp6T1lvZURrWGlya3pKdjlaNFM2?= =?utf-8?Q?dD423yuH6xTUyR5X4gRy2OA=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SI6PR06MB7631.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024)(38070700021); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TCsrSzhQV1J1MjZDd1UwaFFjQWRvQUNrZkJlekNCL0g5UUtYcDhXVVA1TEFD?= =?utf-8?B?cDZjWmN3R01lVW1Kc2JUYitiKzJWOHFnaHRzOENnWkpHQmhDZUMyYTFMdTZR?= =?utf-8?B?elVUYXR1TGRZemZGejNKSko2cm5nWGpVMnQveHdqQWFBT0hSamZXR0ZvQXg2?= =?utf-8?B?WGcwczFJVEs4cHdZN3ZzMVRmVGo0V0pXOFp3d05xZGM2ZDROZ0tMV0p3Ykk3?= =?utf-8?B?cFIxQlZIT1RvV3dLR0ZESXJwaHpmUWozYmExWHBzb04ydDROYXhOL21hanhR?= =?utf-8?B?ZG02T3hVOEw0VVRLaEtkMG9JK2gxRWJyVE05RGdET0xzQmdaejdna0dBWmxw?= =?utf-8?B?cVA5N2FiNDVpNllzVklhK1hQck1lTDNuOWdsWHRHT1c5bEhYS2NLRnBnMWhy?= =?utf-8?B?WGsrRUpmMjZGRERVdDE1b2JRRkQ0bVVUaU9IY0h0QXZkVi9JbXU3ekt6R0JG?= =?utf-8?B?akZCVTJWb3BhZ0xtcGVDNDl3em5hYlpJMkJ5RDdZS3BHUnF5N01SMzVvWGN3?= =?utf-8?B?b1IvMzdnYW9veWdoTnRMb0VNWTdsWVpUQ0orWVYwdU8zTDRneVRpMi9ZUG1o?= =?utf-8?B?dGpLLzVxS1NtQ3JYdXZFTmQ3WHI1VCtMdDZhdERDZXZwVWlCb29jYm1wTXl0?= =?utf-8?B?RkpCb3VFLzhFTnd5cE1DT1pOa08rUzMySWNJWlhiaW1OeW1PWW8rSUhhSXdY?= =?utf-8?B?NHAwM1VtdzdHcWtzcWk2MStmUXdZNk9DQ1pNaVMyS1VvNFk0RDFkQ2RqcXdO?= =?utf-8?B?UDdNTnNBVUt1eDg0VTZVMVR4enVwY0Q5dENUNXJZRGY4YndtT1phSnFDQzA5?= =?utf-8?B?NTJHUG01TTBDejVaOXlzdEpGclV6UmVCVXBxRUxOZWZORkswTjBHNU9tUENH?= =?utf-8?B?Qi9Zb3B5SWUrUTVDaFVwc1dlWUNoVHM5WnEwa3FYLy93ZGdvS2tXV1VMbkh3?= =?utf-8?B?SnVucTQ1ZmhUTXBpZkVTSFFQeWk2TFlGQW8xMk95MEgvNUZpTW96ZXpFRmhT?= =?utf-8?B?NTZ1R0RmR040YVN2K25LWnN1dzV6M2V2T3VQNXUzVkx4Q2k3MEhRZkdxbng2?= =?utf-8?B?Mmh1d1FlbWhlM1lHS0NIR2Nzb3F5OWN6eWQ1OHdvNEZ2VVlsZFR1UU15SHJG?= =?utf-8?B?cGg4VkpaUjlLelhZTVIvTjJINkl6SnFETXE0akdIOTlGZ2c3SEtHb25QSzlU?= =?utf-8?B?TUVrZXpwa2pLbEh0Wk5TT09WY2xiTzFUQkthbXA1enRQVTFXcHdMcDdCanRV?= =?utf-8?B?WTk1aUc0dHhGUVFFUnQxUVNLTmNqRGdsWU5vR29wYmRadFZxZmZ3VURTNkdt?= =?utf-8?B?WWZzeDB6bXJNc20xeHNFV2dvajdxN25CWkNadzRtbkRFd3JmZ3QzZU5QMEQv?= =?utf-8?B?KzBnalVlUmxhWkwxdzE0UXhZalIxdjdHTFY1U0RlR2lvUSs4cWgrM0taVlR1?= =?utf-8?B?YmF1bk9NQk0zcVJmVW56OE5qMVI1K3dOSGVxYXdXRnFrSllEbDArQ1gxZHE5?= =?utf-8?B?VncxZjYyUkhNM3hIWlkxQTFUcDR4YnRZc0xhQVhSOW9HUDA4c0ZCSk5mUnQw?= =?utf-8?B?MEpTaWlNaWZtMU1haG12ay9qTVNTQmlDWjM5MHR5dnh5bExWZXpqYTQzdlZu?= =?utf-8?B?ZUV4c3RSMFlPK2ZZcGU0a0tVNEZwZ0s1OGw5RFg0dTh2UmY5MHNHQ1BKM3Mz?= =?utf-8?B?NTRJZlBtekZibDZ6Z0J0NTVhQmlmSHdpQ3VrbHR5ZkNxUWkxczBsU1BLVEhw?= =?utf-8?B?Y01wOC9aNEZXZEd3Wm5LWndwbXZINXFIZDFRc3YyaVpTMXhla0gxMFRlTnM5?= =?utf-8?B?bjJzM28vL0c0c0ZjQ05VdnRvMEt0Z20rTUpiS2JZVDQ1MDJ0TTdGTDNwcTJE?= =?utf-8?B?azk1T2Q0bG5zSXdpbGUvbHB3K3FNNnR2cERlOE8rQ2x3OEI2VDNtRXM3ME1E?= =?utf-8?B?MThwOFBVWGg3ajlKZjlmT2hEMG4yNTFvbndGTlpyRlJGcXRaUDVtRmZRR2h1?= =?utf-8?B?ak5NdmlrRXB6bnhQeHA4Lzd5Wmp5dWxTZjg1MjBIcW9VM1dYTGNLWUUwcHNW?= =?utf-8?B?bmVPNWxaemQvMk85RHlSQTVuZHpTSW1nSGZHZ1hreXBqWU55eU0wYzRza2xn?= =?utf-8?B?S1Y0cHhGRmFMd284V0VZZG5OTWJ2UUhEYkNLZmtOYTB5c0hZNXB6d0tlUnhZ?= =?utf-8?B?NEhxV1JQWmljRWhiY2w5UHZhcE5uZWsyQWp4QndJUGFaQy9weFNuYmM3SUpT?= =?utf-8?B?cm0xbkdIZUErUVRzNEV2M0Q0U1M0ZVlRcHVQcjhIK3NYNHdiYzEyVUxnU2Rz?= =?utf-8?B?aGdXamVLM3VUUUNxS2hlTjBmT1dHQjR3TU1FaTZVWVR1ZUl5UVNCZz09?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SI6PR06MB7631.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9a45c95-afe8-4c21-ca6b-08de63b84587 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Feb 2026 06:40:21.6881 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1U/OIFKI4ylOQZb5fMIZvRlpJanZWd/9hWsXLadRsoxMgy75wdWKr7NIEE9xhEMcG9Vii4/iCXFYjQ0eoqazII0s6GqYUqhwi1E19x89Tmg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY2PPFD3DE53D05 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=2a01:111:f403:c40f::6; envelope-from=kane_chen@aspeedtech.com; helo=SEYPR02CU001.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Wed, 04 Feb 2026 02:17:20 -0500 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @aspeedtech.com) X-ZM-MESSAGEID: 1770189681801154100 Add an initial PWM model for Aspeed SoCs, including device state, register definitions, and basic initialization as a sysbus device. Signed-off-by: C=EF=BF=BDdric Le Goater Signed-off-by: Kane-Chen-AS --- include/hw/arm/aspeed_soc.h | 3 +- include/hw/misc/aspeed_pwm.h | 30 +++++++++ hw/misc/aspeed_pwm.c | 120 +++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + hw/misc/trace-events | 4 ++ 5 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 include/hw/misc/aspeed_pwm.h create mode 100644 hw/misc/aspeed_pwm.c diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h index bca10c387b..7b08cca908 100644 --- a/include/hw/arm/aspeed_soc.h +++ b/include/hw/arm/aspeed_soc.h @@ -28,6 +28,7 @@ #include "hw/misc/aspeed_hace.h" #include "hw/misc/aspeed_sbc.h" #include "hw/misc/aspeed_sli.h" +#include "hw/misc/aspeed_pwm.h" #include "hw/watchdog/wdt_aspeed.h" #include "hw/net/ftgmac100.h" #include "target/arm/cpu.h" @@ -88,6 +89,7 @@ struct AspeedSoCState { MemoryRegion secsram; UnimplementedDeviceState sbc_unimplemented; AspeedSDMCState sdmc; + AspeedPWMState pwm; AspeedWDTState wdt[ASPEED_WDTS_NUM]; FTGMAC100State ftgmac100[ASPEED_MACS_NUM]; AspeedMiiState mii[ASPEED_MACS_NUM]; @@ -108,7 +110,6 @@ struct AspeedSoCState { UnimplementedDeviceState video; UnimplementedDeviceState emmc_boot_controller; UnimplementedDeviceState dpmcu; - UnimplementedDeviceState pwm; UnimplementedDeviceState espi; UnimplementedDeviceState udc; UnimplementedDeviceState ltpi; diff --git a/include/hw/misc/aspeed_pwm.h b/include/hw/misc/aspeed_pwm.h new file mode 100644 index 0000000000..f4104ada22 --- /dev/null +++ b/include/hw/misc/aspeed_pwm.h @@ -0,0 +1,30 @@ +/* + * ASPEED PWM Controller + * + * Copyright (C) 2017-2021 IBM Corp. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef ASPEED_PWM_H +#define ASPEED_PWM_H + +#include "hw/core/sysbus.h" + +#define TYPE_ASPEED_PWM "aspeed.pwm" +#define ASPEED_PWM(obj) OBJECT_CHECK(AspeedPWMState, (obj), TYPE_ASPEED_PW= M) + +#define ASPEED_PWM_NR_REGS (0x10C >> 2) + +typedef struct AspeedPWMState { + /* */ + SysBusDevice parent; + + /*< public >*/ + MemoryRegion iomem; + qemu_irq irq; + + uint32_t regs[ASPEED_PWM_NR_REGS]; +} AspeedPWMState; + +#endif /* _ASPEED_PWM_H_ */ diff --git a/hw/misc/aspeed_pwm.c b/hw/misc/aspeed_pwm.c new file mode 100644 index 0000000000..ee3d5884be --- /dev/null +++ b/hw/misc/aspeed_pwm.c @@ -0,0 +1,120 @@ +/* + * ASPEED PWM Controller + * + * Copyright (C) 2017-2021 IBM Corp. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qemu/error-report.h" +#include "hw/misc/aspeed_pwm.h" +#include "qapi/error.h" +#include "migration/vmstate.h" + +#include "trace.h" + +static uint64_t aspeed_pwm_read(void *opaque, hwaddr addr, + unsigned int size) +{ + AspeedPWMState *s =3D ASPEED_PWM(opaque); + uint64_t val =3D 0; + + addr >>=3D 2; + + if (addr >=3D ASPEED_PWM_NR_REGS) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Out-of-bounds read at offset 0x%" HWADDR_PRIx "= \n", + __func__, addr << 2); + } else { + val =3D s->regs[addr]; + } + + trace_aspeed_pwm_read(addr << 2, val); + + return val; +} + +static void aspeed_pwm_write(void *opaque, hwaddr addr, uint64_t data, + unsigned int size) +{ + AspeedPWMState *s =3D ASPEED_PWM(opaque); + + trace_aspeed_pwm_write(addr, data); + + addr >>=3D 2; + + if (addr >=3D ASPEED_PWM_NR_REGS) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Out-of-bounds write at offset 0x%" HWADDR_PRIx = "\n", + __func__, addr << 2); + return; + } + + s->regs[addr] =3D data; +} + +static const MemoryRegionOps aspeed_pwm_ops =3D { + .read =3D aspeed_pwm_read, + .write =3D aspeed_pwm_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 4, + }, +}; + +static void aspeed_pwm_reset(DeviceState *dev) +{ + struct AspeedPWMState *s =3D ASPEED_PWM(dev); + + memset(s->regs, 0, sizeof(s->regs)); +} + +static void aspeed_pwm_realize(DeviceState *dev, Error **errp) +{ + AspeedPWMState *s =3D ASPEED_PWM(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + + sysbus_init_irq(sbd, &s->irq); + + memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_pwm_ops, s, + TYPE_ASPEED_PWM, 0x1000); + + sysbus_init_mmio(sbd, &s->iomem); +} + +static const VMStateDescription vmstate_aspeed_pwm =3D { + .name =3D TYPE_ASPEED_PWM, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32_ARRAY(regs, AspeedPWMState, ASPEED_PWM_NR_REGS), + VMSTATE_END_OF_LIST(), + } +}; + +static void aspeed_pwm_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D aspeed_pwm_realize; + device_class_set_legacy_reset(dc, aspeed_pwm_reset); + dc->desc =3D "Aspeed PWM Controller"; + dc->vmsd =3D &vmstate_aspeed_pwm; +} + +static const TypeInfo aspeed_pwm_info =3D { + .name =3D TYPE_ASPEED_PWM, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(AspeedPWMState), + .class_init =3D aspeed_pwm_class_init, +}; + +static void aspeed_pwm_register_types(void) +{ + type_register_static(&aspeed_pwm_info); +} + +type_init(aspeed_pwm_register_types); diff --git a/hw/misc/meson.build b/hw/misc/meson.build index f7f1b0da75..d304a98498 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -138,6 +138,7 @@ system_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files( 'aspeed_i3c.c', 'aspeed_lpc.c', 'aspeed_ltpi.c', + 'aspeed_pwm.c', 'aspeed_scu.c', 'aspeed_sbc.c', 'aspeed_sdmc.c', diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 4cee8a2b45..d6af2fcf85 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -299,6 +299,10 @@ aspeed_i3c_write(uint64_t offset, uint64_t data) "I3C = write: offset 0x%" PRIx64 aspeed_i3c_device_read(uint32_t deviceid, uint64_t offset, uint64_t data) = "I3C Dev[%u] read: offset 0x%" PRIx64 " data 0x%" PRIx64 aspeed_i3c_device_write(uint32_t deviceid, uint64_t offset, uint64_t data)= "I3C Dev[%u] write: offset 0x%" PRIx64 " data 0x%" PRIx64 =20 +# aspeed_pwm.c +aspeed_pwm_read(uint64_t offset, uint64_t data) "read: offset 0x%" PRIx64 = " data 0x%" PRIx64 +aspeed_pwm_write(uint64_t offset, uint64_t data) "write: offset 0x%" PRIx6= 4 " data 0x%" PRIx64 + # aspeed_sdmc.c aspeed_sdmc_write(uint64_t reg, uint64_t data) "reg @0x%" PRIx64 " data: 0= x%" PRIx64 aspeed_sdmc_read(uint64_t reg, uint64_t data) "reg @0x%" PRIx64 " data: 0x= %" PRIx64 --=20 2.43.0