From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366923; cv=none; d=zohomail.com; s=zohoarc; b=FRrACYpzq5JW9c0pu55Z2HOj6i6qjX/E/y7pZ/LKcZOZjOMynkH5FhAAcDC2KmXeMzaYZQ26bihVlVhEye38QGlqAWM6QWjSPTRudIvPv6GPeM2PelYYHBaXG2GEbBfqM1N3lrfDhkY0KNCfj73nsRLoFgxrJ2OU2nDnCaEqN+M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366923; 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=N9LG6dG3goSjvKzksT9K58D3H3jHh9Zchpi/PnZxLks=; b=i03EzDF4e25wlhGD8gfltAAmpevUlCA+3beQvYwDQxZe9PMtgvBYgakoqCayQrfI9huDgGyPenhlYnTyCA+k3nUtcJXv05pZ2n6lShoPEeI36UxozZjTq2s3QE3Iw9eDHEncmS4vhcudTFUd+N3QhV65atj4r28SJ6iZYEUU+G8= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366923037681.6160404259548; Wed, 29 Jul 2026 16:15:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDSy-000798-2Q; Wed, 29 Jul 2026 19:13:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3GYlqagYKCjAfUfgedSaaSXQ.OaYcQYg-PQhQXZaZSZg.adS@flex--titusr.bounces.google.com>) id 1wpDSw-00077D-9x for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:34 -0400 Received: from mail-pj1-x1047.google.com ([2607:f8b0:4864:20::1047]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3GYlqagYKCjAfUfgedSaaSXQ.OaYcQYg-PQhQXZaZSZg.adS@flex--titusr.bounces.google.com>) id 1wpDSt-0007Gv-MI for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:33 -0400 Received: by mail-pj1-x1047.google.com with SMTP id 98e67ed59e1d1-38ea32e57e2so2520245a91.1 for ; Wed, 29 Jul 2026 16:13:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366810; x=1785971610; darn=nongnu.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=N9LG6dG3goSjvKzksT9K58D3H3jHh9Zchpi/PnZxLks=; b=G1s5wXREBPyZ7YywoSAAVWDbLW53jukNZVfqkyMUUYVpw5EdZC7NqGAbtp6tMNvsRw Tz1nDZx0WWN2uC3JxIFef4N1VKwMxx20CMIKRvUYu7B01EN9BksYkFzLAqBb/9a2VOKK dGiv66k/wZ5wRyUl9vZ68ksanN0PTDF3ranu6eZaK4TcBDU8s1G9XYFF4/zBPqXNE2C1 P493XdYQ0513dREdjzdReyHT5mtgB/f4+2ORc8KpXfw9DUoHXRN/se4GZDyfFV9xEoKy AGOvagA4FbsZyhvwzipbOkosheS1/P1qY6dPC4sHYV0Q+OARJSrLlw4cV9b5bbr+Igd0 Va3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366810; x=1785971610; h=content-type: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:content-type; bh=N9LG6dG3goSjvKzksT9K58D3H3jHh9Zchpi/PnZxLks=; b=SNbJ4NVFGcoRM9XeLDGyBYM5zCFiyjcxevpDRjKYNEYXRO0iM726lwUeMG2dYf6OPi uUGHzfkwYBUsjaLxQTtrgaaq3XhWnGsoBETlLcGIi8laWubRrol25eawjjU0KfrdzqOJ 6KPgbXRgjDCwFTUA6JfZK55+hOQ+vpI2TL6SABMm9Wt2yNVKatL0a2COSCnLuAJk0Gcc fP8tDWdSiTWj9/ROrhFj8hl8X8DqcL6x5YNQhYZi53H/HHIPv6WnLfcw0tlsYLqr3u85 /2CiYKSZLQmuV0hz076DeGBrKyDlYjhLaE8+iK0LozlHINd6RRrAUvzo3SM2NlD37IyO Hr3w== X-Forwarded-Encrypted: i=1; AHgh+RpitO0iJVh0M0OO8BrtIgVtNrnAfioQWtgLgedWMHF70nbZW2RFjhkCRZ7FFInNjcSFbTgzNaPatBrE@nongnu.org X-Gm-Message-State: AOJu0YxRg5dy0dKSv6DN4i4BOh61zBgheMPsHbx36NIyBEqZJTXp/2gp HBHZPj1EiKLQmPsDyF0hd0IMyYT4Eh6EiwAb+JS3xtfN1CMIIcg2qZx6VA2nfS9gINsGM0/Aoua h3Dbi6g== X-Received: from dybdr30.prod.google.com ([2002:a05:7300:b29e:b0:313:d984:da01]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4b84:b0:38e:5964:97a8 with SMTP id 98e67ed59e1d1-38f9bd87177mr213677a91.16.1785366809728; Wed, 29 Jul 2026 16:13:29 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:16 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-2-titusr@google.com> Subject: [PATCH 1/8] osdep: add DIV_ROUND_CLOSEST From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1047; envelope-from=3GYlqagYKCjAfUfgedSaaSXQ.OaYcQYg-PQhQXZaZSZg.adS@flex--titusr.bounces.google.com; helo=mail-pj1-x1047.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: 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 @google.com) X-ZM-MESSAGEID: 1785366923966158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This is taken from linux/include/uapi/linux/const.h to match the driver behaviour when reading sensor values. Signed-off-by: Titus Rwantare --- include/qemu/osdep.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 1ec5b42230..08f87c9d61 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -522,6 +522,19 @@ void QEMU_ERROR("code path is reachable") #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) #endif =20 +#ifndef DIV_ROUND_CLOSEST +#define DIV_ROUND_CLOSEST(n, d) \ +({ \ + typeof(n) __n =3D n; \ + typeof(d) __d =3D d; \ + (((typeof(n))-1) > 0 || \ + ((typeof(d))-1) > 0 || \ + (((__n) > 0) =3D=3D ((__d) > 0))) ? \ + (((__n) + ((__d) / 2)) / (__d)) : \ + (((__n) - ((__d) / 2)) / (__d)); \ +}) +#endif + /* * &(x)[0] is always a pointer - if it's same type as x then the argument = is a * pointer, not an array. --=20 2.55.0.508.g3f0d502094-goog From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366919; cv=none; d=zohomail.com; s=zohoarc; b=RI28I8Hs8i2iOSBZKFqWEt5jCNaGFB9ejpswrSYVj+w9RXYWiEdMSvepozZju/XNSYU0cLs1reKULFPbscUdfa/yJwxl5tQuOWc7DhkIpL/YnhGzvZo9gboC3lxDw4YBiNdJJSpXEXJVBVaU8IoXZGHKKnkjgzrIQcEjji1P3zQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366919; 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=a7KMZQX7WKu7NK26d8sCHa90LZGnlaTr77TpG29ztMM=; b=hcjj+TEISorHy8b5sCFbEcUQv51k4lQILBdVJI0iTWDzdPjoNEde2pV50wlspy4Q4QowTAvqxBArWqivWaR1WGwwWBJ9/hzSEj6A8AQUowA0Ho08IIbqdHWqKiapqdKaLnxe9nHRS8LyqLOFw1gaO5cHnU9U1uMB4gMtqw3ju4I= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366919919982.3508772372539; Wed, 29 Jul 2026 16:15:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDSy-00079R-Ab; Wed, 29 Jul 2026 19:13:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3GolqagYKCjEgVghfeTbbTYR.PbZdRZh-QRiRYabaTah.beT@flex--titusr.bounces.google.com>) id 1wpDSw-00077Z-Mh for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:34 -0400 Received: from mail-pf1-x447.google.com ([2607:f8b0:4864:20::447]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3GolqagYKCjEgVghfeTbbTYR.PbZdRZh-QRiRYabaTah.beT@flex--titusr.bounces.google.com>) id 1wpDSu-0007HG-Vo for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:34 -0400 Received: by mail-pf1-x447.google.com with SMTP id d2e1a72fcca58-848662cd2a1so1678248b3a.2 for ; Wed, 29 Jul 2026 16:13:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366811; x=1785971611; darn=nongnu.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=a7KMZQX7WKu7NK26d8sCHa90LZGnlaTr77TpG29ztMM=; b=sUy9TdguDW9WEqVCs4j5w9qWE7HF5eE0sDa/a19w+5xEFNoSum6asmc0xa4eLLE0mW mG0poJUqJ+Yh5zhG8wD1qXf6rjk6LwGYKibOTK6RbyTJ8uCasg35PNXyX4SCOTjFoipD usx/0ov9D/4QMtf+hSzXJFW9NnAZ6KQv+LuKmj/Yd0I8mAKbPP5k7BQ2pZB+gHzie6CH tSdhMzQFS2pmVjHz8my4vW/xBtWShhpCyZjYxVtwEc5vyLTyd4vtfiGlMfPMHvDAdB3W AwdrianZh6GCgnC2qH+q4ail25HcQ59qpRj79/cNwM1fC6Xc8G+x7mjpi68wAITLdtTI 6FUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366811; x=1785971611; h=content-type: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:content-type; bh=a7KMZQX7WKu7NK26d8sCHa90LZGnlaTr77TpG29ztMM=; b=rIBXPNPLiMr9ZOqiKWsJgHekQAI4zT+FWlfxckHF3+pJk5RdBB4faDTIG24/WAbxVf rnwU0LBH2DCk98esS+0liVt7kypjuYJy7B1dbERUqcdCkV2d9Q6JaRWgZEOhhNv36W9G z2c8h/hjNV9ItcDPD3CyzuwYmLGpytyMtSS95/VtUEEv+X7zGG3Y5ufdCnZhJBrWEk4K cbH9AhHHha6scCNkzS6LhNWaRIu4P0NjSD3HJn8/RamkG4JAJpAx1GSGkcBnyE2jYXlz 2rSblSrfGAx633K2Ix77OpQe2h1U6vLn8nPM0YDSLR8iF+KeUf+ld5Bl5XeWcEKnC0fw rE4A== X-Forwarded-Encrypted: i=1; AHgh+Roc42sJBE/Kk8xUqgrcpdZlc7QwY4iMRGAlaT0e1lPKgHsAQMeJsM9a2o7yLbzhGZzyLk0Ixr4TSD5M@nongnu.org X-Gm-Message-State: AOJu0YxRuerOle2dImWmS1YslzRfj2z4nuAQh7BznNZsSdqqDd4CeXTm Ie5fhOBYSNadJxNglbjdtGRXIk7l3TlVYIrEsyku/51J6iDxNhMHirKRNA5idFU6L3zPbIhOif9 IFTABog== X-Received: from dlbuu4.prod.google.com ([2002:a05:7022:7e84:b0:13d:6291:7191]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:a109:b0:3c3:b656:4f5b with SMTP id adf61e73a8af0-3c9008e68ddmr53041637.56.1785366810640; Wed, 29 Jul 2026 16:13:30 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:17 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-3-titusr@google.com> Subject: [PATCH 2/8] hw/i2c: pmbus: add milliunits linear mode functions From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::447; envelope-from=3GolqagYKCjEgVghfeTbbTYR.PbZdRZh-QRiRYabaTah.beT@flex--titusr.bounces.google.com; helo=mail-pf1-x447.google.com X-Spam_score_int: -94 X-Spam_score: -9.5 X-Spam_bar: --------- X-Spam_report: (-9.5 / 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, FUZZY_MILLION=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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1785366922329158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Because we are limited by unsigned ints, we need to be able to provide inputs in milliunits which can get scaled up to fit in the linear mode registers. For example: 3.4 is a valid input, and now we can provide 3400 and scale it into the register without losing the 0.4 Signed-off-by: Titus Rwantare --- hw/i2c/pmbus_device.c | 39 +++++++++++++++++++++++++++++++++++ include/hw/i2c/pmbus_device.h | 18 ++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/hw/i2c/pmbus_device.c b/hw/i2c/pmbus_device.c index 1ca117bd3c..6e477fd6cf 100644 --- a/hw/i2c/pmbus_device.c +++ b/hw/i2c/pmbus_device.c @@ -38,6 +38,26 @@ uint16_t pmbus_data2linear_mode(uint16_t value, int exp) return value >> exp; } =20 +uint16_t pmbus_milliunits2linear_mode(uint32_t value, int exp) +{ + uint64_t ret; + uint64_t val =3D value; + + /* L =3D D * 2^(-e) */ + if (exp < 0) { + ret =3D DIV_ROUND_CLOSEST((val << (-exp)), 1000); + } else { + ret =3D DIV_ROUND_CLOSEST((val >> exp), 1000); + } + + /* clamp value to maximum if it exceeds representable value*/ + if (ret > UINT16_MAX) { + return UINT16_MAX; + } + + return (uint16_t)ret; +} + uint16_t pmbus_linear_mode2data(uint16_t value, int exp) { /* D =3D L * 2^e */ @@ -47,6 +67,25 @@ uint16_t pmbus_linear_mode2data(uint16_t value, int exp) return value << exp; } =20 +uint32_t pmbus_linear_mode2milliunits(uint16_t value, int exp) +{ + /* D =3D L * 2^e */ + uint64_t val =3D value; + uint64_t ret; + + if (exp < 0) { + ret =3D DIV_ROUND_CLOSEST((val * 1000), 1ULL << (-exp)); + } else { + ret =3D (val << exp) * 1000; + } + + if (ret > UINT32_MAX) { + return UINT32_MAX; + } + + return (uint32_t)ret; +} + void pmbus_send(PMBusDevice *pmdev, const uint8_t *data, uint16_t len) { if (pmdev->out_buf_len + len > SMBUS_DATA_MAX_LEN) { diff --git a/include/hw/i2c/pmbus_device.h b/include/hw/i2c/pmbus_device.h index f195c11384..9f3569e997 100644 --- a/include/hw/i2c/pmbus_device.h +++ b/include/hw/i2c/pmbus_device.h @@ -481,6 +481,15 @@ uint32_t pmbus_direct_mode2data(PMBusCoefficients c, u= int16_t value); */ uint16_t pmbus_data2linear_mode(uint16_t value, int exp); =20 +/** + * Convert milliunit sensor value to linear mode format + * + * L =3D D * 2^(-e) + * + * @return uint16 + */ +uint16_t pmbus_milliunits2linear_mode(uint32_t value, int exp); + /** * Convert linear mode formatted data into sensor reading * @@ -490,6 +499,15 @@ uint16_t pmbus_data2linear_mode(uint16_t value, int ex= p); */ uint16_t pmbus_linear_mode2data(uint16_t value, int exp); =20 +/** + * Convert linear mode formatted data into sensor reading in milliunits + * + * D =3D L * 2^e + * + * @return uint32 value in milliunits + */ +uint32_t pmbus_linear_mode2milliunits(uint16_t value, int exp); + /** * @brief Send a block of data over PMBus * Assumes that the bytes in the block are already ordered correctly, --=20 2.55.0.508.g3f0d502094-goog From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366860; cv=none; d=zohomail.com; s=zohoarc; b=NtrsKxDfhWLLIVnNsc3VJzhP7/FQvNLWZDxjM5MnlNDokTndHLThYmcz71dG6nYofmEX9h7CVPty/pkw9HSHlAFoP2DplmvAxe2twqxt1TTA2ekgRgiRamyqFn2jQ7x/hd08d6fF4Fze9FLD5Mp59rBwoi0Kir+FOdF7MV2mBpc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366860; 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=r0Q2A/3ze/zjMWoELy/FKDEtatpELgtMzBDktjSHJF0=; b=chhwvLGsrOnxG9nxSDm5OcPZC8K2HyzIvcfXDsF60hHMgbLVaunhwV8kpGRKSjTRDO708ihp5qD9Ime8+UoiRS00B9FIxYcVd69TFeztr9l0IM1KcTexR1K5YRKRaCy/GSylu6W1MwFuDkYefTgFBBtPAxlfUVd+t19KFcRurLc= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366860249241.62003453971158; Wed, 29 Jul 2026 16:14:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDSz-0007AK-Ou; Wed, 29 Jul 2026 19:13:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3G4lqagYKCjIhWhigfUccUZS.QcaeSai-RSjSZbcbUbi.cfU@flex--titusr.bounces.google.com>) id 1wpDSx-00078e-Ob for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:35 -0400 Received: from mail-pl1-x646.google.com ([2607:f8b0:4864:20::646]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3G4lqagYKCjIhWhigfUccUZS.QcaeSai-RSjSZbcbUbi.cfU@flex--titusr.bounces.google.com>) id 1wpDSv-0007HU-SB for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:35 -0400 Received: by mail-pl1-x646.google.com with SMTP id d9443c01a7336-2cccfa32670so16102695ad.2 for ; Wed, 29 Jul 2026 16:13:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366812; x=1785971612; darn=nongnu.org; h=content-transfer-encoding:content-type:cc:to:from:subject :message-id:references:mime-version:in-reply-to:date:from:to:cc :subject:date:message-id:reply-to:content-type; bh=r0Q2A/3ze/zjMWoELy/FKDEtatpELgtMzBDktjSHJF0=; b=J9R9eU50LOEh1nCIodvpVfVnmX1DGixUxz4yA1thlPo9mj3N1Iz/rL8Z9AUXVRNLwd wSoC6RuiaZIXrB5WvzCZn0PMBtaJp4mkRTfgh4zbzZaYxmP6kK9OxipeLZlfXMAHMavA ncPuqr5TPI4yqXDKlE/kfWv+pU14LYYH0OjIpyh2A0IFfqB3Jpag50d7FUoJY1VpqEIM EgHkSefaF+xVA1zaqjUByzLKT/9rA6mVL35dqlHRSHwsGBRq2Z1PFmlgNMnfdEMqQ/mL 74214675IJ6FdR9rrafDBqS1X1JVMyLbpkCtdnVjloKha/10lKnDyMTzjGSoELvKxuUr SVXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366812; x=1785971612; h=content-transfer-encoding:content-type: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 :content-type; bh=r0Q2A/3ze/zjMWoELy/FKDEtatpELgtMzBDktjSHJF0=; b=PpqZ/fEW/xJTX3JFYnFhEpqXN8B2JqvD3mzDVp/hc/wJW0hRgQO67v5yAiLIJjCPvS vcQKQ7pya7GF2YaX77g7cLqUeR/1weGR31rqZ05Xwyi0OvoBqKIcDiDZA8D4d1On3zew /XBzY8nTVV0Isyka2IQr56kPrRupXDqT7s5t6eK3xSQTg+NX9HsJ7V+E7rU6lZqTXB2v fxj4nTwbB1CV2Os/6HQZcpX73oNMCcLJc4aipZU2pJxwIhOOe99Rdswzae3DRJH6aiFq Mnabhdt19Yxvdsrz6uP6DTg+U8PLqXGIBqVtVeWfsK4mi9lip3XnWwoyUNDDQBIZwWSk QrsQ== X-Forwarded-Encrypted: i=1; AHgh+RoM8zPEQLKwP2wcG/z1bC5VEZnMyoiZ89ikhKsXSDsSJ+b3lNZNt+KZDBhvHCX2GfGJlt+gY6sZi5EW@nongnu.org X-Gm-Message-State: AOJu0YyT9siblzkdqc5QW+pWH3M0Zrn25XKAYLqEArEtUyESskYapbs7 7YjsTWyaiuvqJTyGLkI2XHBM5LuSqlPpb8b/+f6uurdvPW4Z/ql/joixMPISWbvjOiSpKPY/Tae w1YfQbg== X-Received: from dylq8.prod.google.com ([2002:a05:7300:5988:b0:313:fb09:e2c0]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1aae:b0:2cc:9763:e607 with SMTP id d9443c01a7336-2d035d1a647mr2989835ad.27.1785366811882; Wed, 29 Jul 2026 16:13:31 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:18 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-4-titusr@google.com> Subject: [PATCH 3/8] hw/i2c: smbus: increase MAX_DATA_LEN From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::646; envelope-from=3G4lqagYKCjIhWhigfUccUZS.QcaeSai-RSjSZbcbUbi.cfU@flex--titusr.bounces.google.com; helo=mail-pl1-x646.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: 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 @google.com) X-ZM-MESSAGEID: 1785366862303158500 Content-Type: text/plain; charset="utf-8" The 32 byte payload was raised to 255 for block reads in the SMBus 3.0 specification. SMBus does not provide a way for devices to declare which version of the spec they are designed to so we must allow newer devices to return as much data as they allow. vsmstate_smbus_extended_data is added to avoid breaking migration. Specification: https://smbus.org/specs/SMBus_3_3_20240512.pdf > 6.5.7 Block Write/Read The Block Write begins with a slave address and a write condition. After th= e command code the host issues a byte count which describes how many more b= ytes will follow in the message. If a slave has 20 bytes to send, the byte = count field will have the value 20 (14h), followed by the 20 bytes of data.= The byte count does not include the PEC byte. The byte count may be 0. A B= lock Read or Block Write is allowed to transfer a maximum of 255 data bytes. Signed-off-by: Titus Rwantare Reviewed-by: Peter Maydell --- hw/i2c/smbus_slave.c | 27 ++++++++++++++++++++++++++- include/hw/i2c/smbus_slave.h | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hw/i2c/smbus_slave.c b/hw/i2c/smbus_slave.c index cfb61c879e..5dd2c38af7 100644 --- a/hw/i2c/smbus_slave.c +++ b/hw/i2c/smbus_slave.c @@ -215,6 +215,26 @@ bool smbus_vmstate_needed(SMBusDevice *dev) return dev->mode !=3D SMBUS_IDLE; } =20 +#define SMBUS_DATA_MAX_LEN_OLD 34 +static bool smbus_extended_needed(void *opaque) +{ + SMBusDevice *dev =3D opaque; + return dev->data_len > SMBUS_DATA_MAX_LEN_OLD; +} + +static const VMStateDescription vmstate_smbus_extended_data =3D { + .name =3D TYPE_SMBUS_DEVICE"/extended", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D smbus_extended_needed, + .fields =3D (const VMStateField[]) { + /* separately save [34..257) */ + VMSTATE_UINT8_SUB_ARRAY(data_buf, SMBusDevice, SMBUS_DATA_MAX_LEN_= OLD, + SMBUS_DATA_MAX_LEN - SMBUS_DATA_MAX_LEN_OLD), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_smbus_device =3D { .name =3D TYPE_SMBUS_DEVICE, .version_id =3D 1, @@ -223,8 +243,13 @@ const VMStateDescription vmstate_smbus_device =3D { VMSTATE_I2C_SLAVE(i2c, SMBusDevice), VMSTATE_INT32(mode, SMBusDevice), VMSTATE_INT32(data_len, SMBusDevice), - VMSTATE_UINT8_ARRAY(data_buf, SMBusDevice, SMBUS_DATA_MAX_LEN), + VMSTATE_UINT8_SUB_ARRAY(data_buf, SMBusDevice, 0, + SMBUS_DATA_MAX_LEN_OLD), VMSTATE_END_OF_LIST() + }, + .subsections =3D (const VMStateDescription * const[]) { + &vmstate_smbus_extended_data, + NULL } }; =20 diff --git a/include/hw/i2c/smbus_slave.h b/include/hw/i2c/smbus_slave.h index 86bfe0a79e..59522ff1b1 100644 --- a/include/hw/i2c/smbus_slave.h +++ b/include/hw/i2c/smbus_slave.h @@ -64,7 +64,7 @@ struct SMBusDeviceClass { uint8_t (*receive_byte)(SMBusDevice *dev); }; =20 -#define SMBUS_DATA_MAX_LEN 34 /* command + len + 32 bytes of data. */ +#define SMBUS_DATA_MAX_LEN 257 /* command + len + 255 bytes of data. */ =20 struct SMBusDevice { /* The SMBus protocol is implemented on top of I2C. */ --=20 2.55.0.508.g3f0d502094-goog From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366901; cv=none; d=zohomail.com; s=zohoarc; b=jxhCM8JY64YCkS6+SlunTDkC7OgisesS6Iljchw/wpti0hEa9/x4ECQcmuws2DkESB03hnNUJ+jD13i8Ih/oI35PxAzFCFfVnb21AY/Hri5lSJZljz1MkHfSF6TS3egK8oUvSos53mB563hTJLiLJCsplBNmkg076cgHoS2u5WI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366901; 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=FvLCWTuldONgyeVgmj2EEz4jl/z9eb7Nj+jYEh6a67k=; b=Gowbs98iFJ4+A7S8WSmzcpkC/G2SJvwUSxQyvxhS+x2BvF8PiM5z5kR4rBUPjOCRGrNxaGPgAEbaG4l517h1QIp8kG5fhTv4dAtsiCfWDyVRpWeU0RQCp8ptBsO5e19r1ngq8jtawFsr2K6UnSHScZzATc2pUkMHaDvw3/DUMfE= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366901709768.930760263357; Wed, 29 Jul 2026 16:15:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDT0-0007Ac-98; Wed, 29 Jul 2026 19:13:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3HIlqagYKCjMiXijhgVddVaT.RdbfTbj-STkTacdcVcj.dgV@flex--titusr.bounces.google.com>) id 1wpDSy-00079f-LN for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:36 -0400 Received: from mail-pg1-x546.google.com ([2607:f8b0:4864:20::546]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3HIlqagYKCjMiXijhgVddVaT.RdbfTbj-STkTacdcVcj.dgV@flex--titusr.bounces.google.com>) id 1wpDSw-0007Hx-LD for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:36 -0400 Received: by mail-pg1-x546.google.com with SMTP id 41be03b00d2f7-cb733fc5024so2081528a12.2 for ; Wed, 29 Jul 2026 16:13:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366813; x=1785971613; darn=nongnu.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=FvLCWTuldONgyeVgmj2EEz4jl/z9eb7Nj+jYEh6a67k=; b=F5R/C50n8RUGLEYCaDK58duNGo0moYEiNJH3lPFSoJwba08tcUs/WAG4/1sVK55B2m 1esdw3sejFyhLJPzQ6o3T3dC0kWBttDKqoUp+Gv+vu0/CnVcqjo9HDKFWcP8agYywohb rJIu4D6GqK+OPzZ0wANmJy4AsKco5bAudx7t/kq9Nv2JRzkUGJrOZr2I2reL3ZEDbLVd FnCVklkO9OtIuL44SflSYaCqSP0LPBmedSqJuftWPbWoFKBJAp7un/z6F8Po5jFGwAKQ qRsK6o+/8p38++lhg2wAPpJHyMj5fW1maZAMsiXxgwQSrzQSFazVqittSnqEimP3o2vP EC+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366813; x=1785971613; h=content-type: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:content-type; bh=FvLCWTuldONgyeVgmj2EEz4jl/z9eb7Nj+jYEh6a67k=; b=C9KDvOQ8RIZli5QuAt3qAK1H/LXXKIPhv/cqT9N+HhuZBuXQFREVT/dhIB81f3bHA+ QBF4IV4z01mLpGBOelW/Nwkej6XtHLVkr1MZGhq8f8mj9apHzShWKaUYsQIAYMREOCeu KcDUH/TVcxStmF6HhivJ2RiD3E8YEWwBF4WE8ZrXGUrHuGNSMogALnxBL4D6rrxf8PCt aOzuvOzvx/ivGalN20Mpg9od7QB6R3gDHrovATn2/UGy1D4AxExziDC2DRftfSaiAzWn 6sp8ec1zGloCHoEbzSSeYTW2uXX4U0b+lb0NXBTR0m8dI0EoXTO3OuYAqUR0VrpvgxrP Nqsw== X-Forwarded-Encrypted: i=1; AHgh+RrjHA4wurlLIm/BSqLju7uxggqVMcJojJ3IvJX8YIg4tQWE9recdFNc/MPbu7RkoBJASpb9sQTEB65l@nongnu.org X-Gm-Message-State: AOJu0YyIr22VXG60AWNAN+77yGdRwx2AjhZOb+CbMyAtJ5fwRLQ5Z0Tq +9UFHDyWOfnQM068As9mQiFvcWCiw+Zf66lWQOB0oTvzpGX2p4aCbFo3IiLXRSv1j6fa2uJRBNs 2BeaQVA== X-Received: from dlbur8-n1.prod.google.com ([2002:a05:7022:ea48:10b0:139:fea6:ad4]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6da9:b0:3c3:8d86:9856 with SMTP id adf61e73a8af0-3c900478aaamr104040637.14.1785366812756; Wed, 29 Jul 2026 16:13:32 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:19 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-5-titusr@google.com> Subject: [PATCH 4/8] hw/sensor: update adm1266 block transfers From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::546; envelope-from=3HIlqagYKCjMiXijhgVddVaT.RdbfTbj-STkTacdcVcj.dgV@flex--titusr.bounces.google.com; helo=mail-pg1-x546.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: 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 @google.com) X-ZM-MESSAGEID: 1785366903984158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fixes an issue with reading the MFR_* registers on the ADM1266, this device has an unconventional access pattern where a block write of length 1 is written to the MFR_* register with the length of the data to be read back. Simultaneously, it is possible to write to the contents of these registers so long as the block write is longer than 1. Signed-off-by: Titus Rwantare --- hw/sensor/adm1266.c | 124 ++++++++++++++++++++++++++++++++----- tests/qtest/adm1266-test.c | 25 +++++--- 2 files changed, 126 insertions(+), 23 deletions(-) diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c index 37d1cffd57..2979557309 100644 --- a/hw/sensor/adm1266.c +++ b/hw/sensor/adm1266.c @@ -37,13 +37,14 @@ OBJECT_DECLARE_SIMPLE_TYPE(ADM1266State, ADM1266) #define ADM1266_CAPABILITY_NO_PEC 0x20 #define ADM1266_PMBUS_REVISION_DEFAULT 0x22 #define ADM1266_MFR_ID_DEFAULT "ADI" -#define ADM1266_MFR_ID_DEFAULT_LEN 32 #define ADM1266_MFR_MODEL_DEFAULT "ADM1266-A1" -#define ADM1266_MFR_MODEL_DEFAULT_LEN 32 #define ADM1266_MFR_REVISION_DEFAULT "25" -#define ADM1266_MFR_REVISION_DEFAULT_LEN 8 +#define ADM1266_MFR_LOCATION_DEFAULT "0000" +#define ADM1266_MFR_DATE_DEFAULT "0000" +#define ADM1266_MFR_SERIAL_DEFAULT "0000" =20 -#define ADM1266_NUM_PAGES 17 +#define ADM1266_NUM_PAGES 17 +#define ADM1266_READ_LENGTH_DEFAULT 48 /** * PAGE Index * Page 0 VH1. @@ -66,10 +67,14 @@ OBJECT_DECLARE_SIMPLE_TYPE(ADM1266State, ADM1266) */ typedef struct ADM1266State { PMBusDevice parent; + uint8_t read_length; =20 char mfr_id[32]; char mfr_model[32]; char mfr_rev[8]; + char mfr_location[48]; + char mfr_date[16]; + char mfr_serial[32]; } ADM1266State; =20 static const uint8_t adm1266_ic_device_id[] =3D {0x03, 0x41, 0x12, 0x66}; @@ -95,9 +100,34 @@ static void adm1266_exit_reset(Object *obj, ResetType t= ype) pmdev->pages[i].revision =3D ADM1266_PMBUS_REVISION_DEFAULT; } =20 - strncpy(s->mfr_id, ADM1266_MFR_ID_DEFAULT, 4); - strncpy(s->mfr_model, ADM1266_MFR_MODEL_DEFAULT, 11); - strncpy(s->mfr_rev, ADM1266_MFR_REVISION_DEFAULT, 3); + memcpy(s->mfr_id, ADM1266_MFR_ID_DEFAULT, 4); + memcpy(s->mfr_model, ADM1266_MFR_MODEL_DEFAULT, 11); + memcpy(s->mfr_rev, ADM1266_MFR_REVISION_DEFAULT, 3); + memcpy(s->mfr_location, ADM1266_MFR_LOCATION_DEFAULT, 5); + memcpy(s->mfr_date, ADM1266_MFR_DATE_DEFAULT, 5); + memcpy(s->mfr_serial, ADM1266_MFR_SERIAL_DEFAULT, 5); + s->read_length =3D ADM1266_READ_LENGTH_DEFAULT; +} + +static void adm1266_send_string(PMBusDevice *pmdev, const char *str) +{ + ADM1266State *s =3D ADM1266(pmdev); + size_t len =3D strlen(str); + + if (s->read_length < len) { + len =3D s->read_length; + } + + g_assert(len + pmdev->out_buf_len < SMBUS_DATA_MAX_LEN); + pmdev->out_buf[len + pmdev->out_buf_len] =3D len; + + for (int i =3D len - 1; i >=3D 0; i--) { + pmdev->out_buf[i + pmdev->out_buf_len] =3D str[len - 1 - i]; + } + pmdev->out_buf_len +=3D len + 1; + + /* reset read length */ + s->read_length =3D ADM1266_READ_LENGTH_DEFAULT; } =20 static uint8_t adm1266_read_byte(PMBusDevice *pmdev) @@ -106,15 +136,27 @@ static uint8_t adm1266_read_byte(PMBusDevice *pmdev) =20 switch (pmdev->code) { case PMBUS_MFR_ID: /* R/W block */ - pmbus_send_string(pmdev, s->mfr_id); + adm1266_send_string(pmdev, s->mfr_id); break; =20 case PMBUS_MFR_MODEL: /* R/W block */ - pmbus_send_string(pmdev, s->mfr_model); + adm1266_send_string(pmdev, s->mfr_model); break; =20 case PMBUS_MFR_REVISION: /* R/W block */ - pmbus_send_string(pmdev, s->mfr_rev); + adm1266_send_string(pmdev, s->mfr_rev); + break; + + case PMBUS_MFR_LOCATION: /* R/W block */ + adm1266_send_string(pmdev, s->mfr_location); + break; + + case PMBUS_MFR_DATE: /* R/W block */ + adm1266_send_string(pmdev, s->mfr_date); + break; + + case PMBUS_MFR_SERIAL: /* R/W block */ + adm1266_send_string(pmdev, s->mfr_serial); break; =20 case PMBUS_IC_DEVICE_ID: @@ -135,6 +177,43 @@ static uint8_t adm1266_read_byte(PMBusDevice *pmdev) return 0; } =20 +static uint8_t adm1266_receive_block(PMBusDevice *pmdev, uint8_t *dest, + size_t len) +{ + ADM1266State *s =3D ADM1266(pmdev); + uint8_t sent_len; + + /* Exclude command code from return value */ + pmdev->in_buf++; + pmdev->in_buf_len--; + + /* The byte after the command code denotes the length */ + sent_len =3D pmdev->in_buf[0]; + + /* Block writes with length 1 are read requests */ + if (sent_len =3D=3D 1) { + s->read_length =3D pmdev->in_buf[1]; + return 0; + } + + /* exclude length byte */ + pmdev->in_buf++; + pmdev->in_buf_len--; + + /* Be as conservative as possible on how much data to receive */ + if (pmdev->in_buf_len < len) { + len =3D pmdev->in_buf_len; + } + if (sent_len < len) { + len =3D sent_len; + } + + /* dest may contain data from previous writes */ + memset(dest, 0, len); + memcpy(dest, pmdev->in_buf, len); + return len; +} + static int adm1266_write_data(PMBusDevice *pmdev, const uint8_t *buf, uint8_t len) { @@ -142,16 +221,31 @@ static int adm1266_write_data(PMBusDevice *pmdev, con= st uint8_t *buf, =20 switch (pmdev->code) { case PMBUS_MFR_ID: /* R/W block */ - pmbus_receive_block(pmdev, (uint8_t *)s->mfr_id, sizeof(s->mfr_id)= ); + adm1266_receive_block(pmdev, (uint8_t *)s->mfr_id, sizeof(s->mfr_i= d)); break; =20 case PMBUS_MFR_MODEL: /* R/W block */ - pmbus_receive_block(pmdev, (uint8_t *)s->mfr_model, - sizeof(s->mfr_model)); + adm1266_receive_block(pmdev, (uint8_t *)s->mfr_model, + sizeof(s->mfr_model)); break; =20 case PMBUS_MFR_REVISION: /* R/W block*/ - pmbus_receive_block(pmdev, (uint8_t *)s->mfr_rev, sizeof(s->mfr_re= v)); + adm1266_receive_block(pmdev, (uint8_t *)s->mfr_rev, sizeof(s->mfr_= rev)); + break; + + case PMBUS_MFR_LOCATION: /* R/W block*/ + adm1266_receive_block(pmdev, (uint8_t *)s->mfr_location, + sizeof(s->mfr_location)); + break; + + case PMBUS_MFR_DATE: /* R/W block*/ + adm1266_receive_block(pmdev, (uint8_t *)s->mfr_date, + sizeof(s->mfr_date)); + break; + + case PMBUS_MFR_SERIAL: /* R/W block*/ + adm1266_receive_block(pmdev, (uint8_t *)s->mfr_serial, + sizeof(s->mfr_serial)); break; =20 case ADM1266_SET_RTC: /* do nothing */ @@ -212,7 +306,7 @@ static void adm1266_init(Object *obj) { PMBusDevice *pmdev =3D PMBUS_DEVICE(obj); uint64_t flags =3D PB_HAS_VOUT_MODE | PB_HAS_VOUT | PB_HAS_VOUT_MARGIN= | - PB_HAS_VOUT_RATING | PB_HAS_STATUS_MFR_SPECIFIC; + PB_HAS_VOUT_RATING; =20 for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { pmbus_page_config(pmdev, i, flags); diff --git a/tests/qtest/adm1266-test.c b/tests/qtest/adm1266-test.c index 726e475938..fa8bbc5795 100644 --- a/tests/qtest/adm1266-test.c +++ b/tests/qtest/adm1266-test.c @@ -83,20 +83,28 @@ static void test_defaults(void *obj, void *data, QGuest= Allocator *alloc) compare_string(i2cdev, PMBUS_MFR_REVISION, ADM1266_MFR_REVISION_DEFAUL= T); } =20 -/* test r/w registers */ -static void test_rw_regs(void *obj, void *data, QGuestAllocator *alloc) +static void test_partial_reads(void *obj, void *data, QGuestAllocator *all= oc) { QI2CDevice *i2cdev =3D (QI2CDevice *)obj; + /* 1 byte block write requesting 7 byte response */ + uint8_t req_len[] =3D {0x01, 0x7}; =20 - /* empty strings */ - i2c_set8(i2cdev, PMBUS_MFR_ID, 0); - compare_string(i2cdev, PMBUS_MFR_ID, ""); + i2c_write_block(i2cdev, PMBUS_MFR_MODEL, req_len, sizeof(req_len)); + compare_string(i2cdev, PMBUS_MFR_MODEL, "ADM1266"); =20 - i2c_set8(i2cdev, PMBUS_MFR_MODEL, 0); + req_len[1] =3D 0; + i2c_write_block(i2cdev, PMBUS_MFR_MODEL, req_len, sizeof(req_len)); compare_string(i2cdev, PMBUS_MFR_MODEL, ""); =20 - i2c_set8(i2cdev, PMBUS_MFR_REVISION, 0); - compare_string(i2cdev, PMBUS_MFR_REVISION, ""); + req_len[1] =3D 100; + i2c_write_block(i2cdev, PMBUS_MFR_MODEL, req_len, sizeof(req_len)); + compare_string(i2cdev, PMBUS_MFR_MODEL, ADM1266_MFR_MODEL_DEFAULT); +} + +/* test r/w registers */ +static void test_rw_regs(void *obj, void *data, QGuestAllocator *alloc) +{ + QI2CDevice *i2cdev =3D (QI2CDevice *)obj; =20 /* test strings */ write_and_compare_string(i2cdev, PMBUS_MFR_ID, TEST_STRING_A, @@ -118,6 +126,7 @@ static void adm1266_register_nodes(void) qos_node_consumes("adm1266", "i2c-bus", &opts); =20 qos_add_test("test_defaults", "adm1266", test_defaults, NULL); + qos_add_test("test_partial_reads", "adm1266", test_partial_reads, NULL= ); qos_add_test("test_rw_regs", "adm1266", test_rw_regs, NULL); } =20 --=20 2.55.0.508.g3f0d502094-goog From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366902; cv=none; d=zohomail.com; s=zohoarc; b=gSi6gsXpRR7iyFV2N3lRfyfIEeDhr8M8EvAIlYFalJCmlsevkVrcFRc22J5l2rwU64N8L8LkB3Fb+g1xTya7/7Y9Rgq1hSrflq24IQ66DEk0AC/pGZ/4Ld2PAy3wpiaML9u7oeq4Ugs+zqqhFMZpYWJ9B1yznoP3w1OFRb6wINc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366902; 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=6e32ecauHw/VcmLw//niI9ZF67yHhYPBOSWtJHmDDNE=; b=Zrduh9FXMET35wK3krZ2MYICeC15zKmAJ7zGXLgWv12pz5UQ6Fooavr6GlpLgYFjyEC+sNrfvRvjT5zjTlb8kmVISuRFfoc6Y3xWluzb7KGvvrBiB6bRWE0QgqWzVptmpJ/9Tyoa/2TsHkXtqOqkkABPO5Ztt8LOEW84EwYTVJk= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366901998631.995349237326; Wed, 29 Jul 2026 16:15:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDT1-0007Bh-Ls; Wed, 29 Jul 2026 19:13:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3HYlqagYKCjQjYjkihWeeWbU.SecgUck-TUlUbdedWdk.ehW@flex--titusr.bounces.google.com>) id 1wpDSz-0007AY-UC for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:37 -0400 Received: from mail-pl1-x647.google.com ([2607:f8b0:4864:20::647]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3HYlqagYKCjQjYjkihWeeWbU.SecgUck-TUlUbdedWdk.ehW@flex--titusr.bounces.google.com>) id 1wpDSx-0007Ia-Vv for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:37 -0400 Received: by mail-pl1-x647.google.com with SMTP id d9443c01a7336-2cc5faecf01so31069435ad.1 for ; Wed, 29 Jul 2026 16:13:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366814; x=1785971614; darn=nongnu.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6e32ecauHw/VcmLw//niI9ZF67yHhYPBOSWtJHmDDNE=; b=B5JhE4Yx98HRvX9zV5PGFpNfJyukAPuu3hVbNll+axg9ZRTiMnLvhte25HXOpHsEG7 HGf7UkrO7BnenqLMMdXoq1uKpk9INZYlod8wdIVlHdpqnPmk+xXbsRaIjtFD6onP799x uMkNVU7uASzOZKdihvnXIsDLfpnmJO2MjpIj6TBSeKZsR+4e180i/khFgholRFMi78q1 Umiym790XQOSSenJ86IavHEv3dn4aWG/4peYjcLM/B7Mi3TXIj5/JCDQgzEswKBUpoQn wZnzQk7b4Xba3kexdRr+0rK/IO+cfN4J81JjhjboBBlwusiq1/nU5Rg/BkPT1mqo2/5x DaCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366814; x=1785971614; h=content-type: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:content-type; bh=6e32ecauHw/VcmLw//niI9ZF67yHhYPBOSWtJHmDDNE=; b=EMgQL9HgDDH9szI7M8UHBWYe+VO5xHG3aMN9UN/2bojrEHkmKEEUpbyCsopgS6CfOt xaUn0ONIvqFWMU4zeya8vDiPZwf36xkrlesrwXaow2xtk7gTLwmFwVO4x24VPyaLbzOV TB4UmaVY+kgesxFgJNWGhWKvDg9IgrLGMMMAdD3Xwdyjfek9/jN2gEisMv9vRcO+bJOv PyDnMs8SvtqgylfZ4Ha7kwupfqBsBF7A1iUfZ7PD0VHbmO2nvz6CAhlYYXLPUW7sbskG +5bktOW7zy3E5PePbXxkqXBgi/U5+MI+pEFU9WImoBLVc6jQ/2l7pXQwFAIFa1z+TPL7 YT7w== X-Forwarded-Encrypted: i=1; AHgh+RpdOtrw/V42conh1mC/xZj6m5+43KZfHVx6HPAG2gQdAylnz7Vu6d8kqbOX/zgoD3ddb1d7XvTkYc6m@nongnu.org X-Gm-Message-State: AOJu0YxUYjgX9zFB4lOJWgK/YJfyBQVE/K3rXl/b+n0jeiWvMGHqLLqz V/FxffOpfIUYvBOAfix4o7GM4UISmYuU8bk65vlBlRTkLVf/Kf93Ts8nOhWEjhx+/MxckuH7WNN pueTsLg== X-Received: from dybkb41.prod.google.com ([2002:a05:7301:38a9:b0:314:f46f:997e]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:8c6:b0:2c9:97a7:3289 with SMTP id d9443c01a7336-2d035d024efmr2770375ad.43.1785366813686; Wed, 29 Jul 2026 16:13:33 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:20 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-6-titusr@google.com> Subject: [PATCH 5/8] hw/sensor: switch adm1266 to millivolts vout From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::647; envelope-from=3HYlqagYKCjQjYjkihWeeWbU.SecgUck-TUlUbdedWdk.ehW@flex--titusr.bounces.google.com; helo=mail-pl1-x647.google.com X-Spam_score_int: -94 X-Spam_score: -9.5 X-Spam_bar: --------- X-Spam_report: (-9.5 / 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, FUZZY_MILLION=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: 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 @google.com) X-ZM-MESSAGEID: 1785366903865158501 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Enables storing fractional voltages for the ADM1266 over QMP Signed-off-by: Titus Rwantare --- hw/sensor/adm1266.c | 27 ++++--- tests/qtest/adm1266-test.c | 150 +++++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+), 10 deletions(-) diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c index 2979557309..80960dc1c4 100644 --- a/hw/sensor/adm1266.c +++ b/hw/sensor/adm1266.c @@ -263,32 +263,39 @@ static int adm1266_write_data(PMBusDevice *pmdev, con= st uint8_t *buf, static void adm1266_get(Object *obj, Visitor *v, const char *name, void *o= paque, Error **errp) { - uint16_t value; + uint32_t value, index; PMBusDevice *pmdev =3D PMBUS_DEVICE(obj); PMBusVoutMode *mode =3D (PMBusVoutMode *)&pmdev->pages[0].vout_mode; =20 - if (strcmp(name, "vout") =3D=3D 0) { - value =3D pmbus_linear_mode2data(*(uint16_t *)opaque, mode->exp); + if (strncmp(name, "vout[", 5) =3D=3D 0) { + sscanf(name, "vout[%u]", &index); + mode =3D (PMBusVoutMode *)&pmdev->pages[index].vout_mode; + value =3D pmbus_linear_mode2milliunits(*(uint16_t *)opaque, mode->= exp); } else { value =3D *(uint16_t *)opaque; } =20 - visit_type_uint16(v, name, &value, errp); + visit_type_uint32(v, name, &value, errp); } =20 static void adm1266_set(Object *obj, Visitor *v, const char *name, void *o= paque, Error **errp) { uint16_t *internal =3D opaque; - uint16_t value; + uint32_t value, index; PMBusDevice *pmdev =3D PMBUS_DEVICE(obj); - PMBusVoutMode *mode =3D (PMBusVoutMode *)&pmdev->pages[0].vout_mode; + PMBusVoutMode *mode; =20 - if (!visit_type_uint16(v, name, &value, errp)) { + if (!visit_type_uint32(v, name, &value, errp)) { return; } - - *internal =3D pmbus_data2linear_mode(value, mode->exp); + if (strncmp(name, "vout[", 5) =3D=3D 0) { + sscanf(name, "vout[%u]", &index); + mode =3D (PMBusVoutMode *)&pmdev->pages[index].vout_mode; + *internal =3D pmbus_milliunits2linear_mode(value, mode->exp); + } else { + *internal =3D value; + } pmbus_check_limits(pmdev); } =20 @@ -311,7 +318,7 @@ static void adm1266_init(Object *obj) for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { pmbus_page_config(pmdev, i, flags); =20 - object_property_add(obj, "vout[*]", "uint16", + object_property_add(obj, "vout[*]", "uint32", adm1266_get, adm1266_set, NULL, &pmdev->pages[i].read_vout); } diff --git a/tests/qtest/adm1266-test.c b/tests/qtest/adm1266-test.c index fa8bbc5795..fd3d8079b6 100644 --- a/tests/qtest/adm1266-test.c +++ b/tests/qtest/adm1266-test.c @@ -16,6 +16,7 @@ #include "qobject/qdict.h" #include "qobject/qnum.h" #include "qemu/bitops.h" +#include "qemu/bswap.h" =20 #define TEST_ID "adm1266-test" #define TEST_ADDR (0x12) @@ -45,6 +46,57 @@ #define TEST_STRING_B "b sample" #define TEST_STRING_C "rev c" =20 +#define ADM1266_NUM_PAGES 17 +#define ADM1266_MAX_VALUE 65535000 + +typedef union { + uint8_t raw; + PMBusVoutMode mode; +} ADM1266VoutMode; + +static uint32_t qmp_adm1266_get(const char *id, const char *property) +{ + QDict *response; + uint32_t ret; + response =3D qmp("{ 'execute': 'qom-get', 'arguments': { 'path': %s, " + "'property': %s } }", id, property); + g_assert(qdict_haskey(response, "return")); + ret =3D qnum_get_uint(qobject_to(QNum, qdict_get(response, "return"))); + qobject_unref(response); + return ret; +} + +static void qmp_adm1266_set(const char *id, + const char *property, + uint32_t value) +{ + QDict *response; + + response =3D qmp("{ 'execute': 'qom-set', 'arguments': { 'path': %s, " + "'property': %s, 'value': %u } }", + id, property, value); + g_assert(qdict_haskey(response, "return")); +} + +static uint64_t adm1266_linear_mode2milliunits(uint16_t value, int exp) +{ + /* D =3D L * 2^e */ + uint64_t val =3D value; + uint64_t ret; + + if (exp < 0) { + ret =3D DIV_ROUND_CLOSEST((val * 1000), 1ULL << (-exp)); + } else { + ret =3D (val << exp) * 1000; + } + + if (ret > UINT32_MAX) { + return UINT32_MAX; + } + + return ret; +} + static void compare_string(QI2CDevice *i2cdev, uint8_t reg, const char *test_str) { @@ -67,6 +119,98 @@ static void write_and_compare_string(QI2CDevice *i2cdev= , uint8_t reg, compare_string(i2cdev, reg, test_str); } =20 +static void test_vout_milliunits(void *obj, void *data, QGuestAllocator *a= lloc) +{ + uint16_t i2c_value, value; + uint64_t i2c_milliunits; + QI2CDevice *i2cdev =3D (QI2CDevice *)obj; + char *path; + ADM1266VoutMode m; + + /* set a different value in millivolts for each page */ + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + path =3D g_strdup_printf("vout[%d]", i); + qmp_adm1266_set(TEST_ID, path, (1000 * (i + 1))); + } + + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + i2c_set8(i2cdev, PMBUS_PAGE, i); + + m.raw =3D i2c_get8(i2cdev, PMBUS_VOUT_MODE); + i2c_value =3D bswap16(i2c_get16(i2cdev, PMBUS_READ_VOUT)); + i2c_milliunits =3D adm1266_linear_mode2milliunits(i2c_value, m.mod= e.exp); + g_assert_cmpuint(i2c_milliunits, =3D=3D, (1000 * (i + 1))); + + path =3D g_strdup_printf("vout[%d]", i); + value =3D qmp_adm1266_get(TEST_ID, path); + g_assert_cmpuint(value, =3D=3D, (1000 * (i + 1))); + } +} + +/* + * Note that the exponent determines the dynamic range, large exponents ca= n not + * be used with values that need to be incremented in small steps + */ +static void test_vout_mode_exponent(void *obj, void *data, + QGuestAllocator *alloc) +{ + uint16_t i2c_value, value, expected; + uint64_t i2c_milliunits; + QI2CDevice *i2cdev =3D (QI2CDevice *)obj; + ADM1266VoutMode m; + char *path; + + /* set a different exponent per page and a different value */ + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + i2c_set8(i2cdev, PMBUS_PAGE, i); + expected =3D 1000 * (i * 2); + m.mode.exp =3D i - 14; + i2c_set8(i2cdev, PMBUS_VOUT_MODE, m.raw); + path =3D g_strdup_printf("vout[%d]", i); + qmp_adm1266_set(TEST_ID, path, expected); + } + + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + i2c_set8(i2cdev, PMBUS_PAGE, i); + expected =3D 1000 * (i * 2); + /* check correct value from i2c*/ + m.raw =3D i2c_get8(i2cdev, PMBUS_VOUT_MODE); + i2c_value =3D bswap16(i2c_get16(i2cdev, PMBUS_READ_VOUT)); + i2c_milliunits =3D adm1266_linear_mode2milliunits(i2c_value, m.mod= e.exp); + g_assert_cmpuint(i2c_milliunits, =3D=3D, expected); + + /* check correct value from qmp*/ + path =3D g_strdup_printf("vout[%d]", i); + value =3D qmp_adm1266_get(TEST_ID, path); + g_assert_cmpuint(value, =3D=3D, expected); + } +} + +static void test_vout_clamp_to_max(void *obj, void *data, + QGuestAllocator *alloc) +{ + uint16_t i2c_value; + uint32_t value; + QI2CDevice *i2cdev =3D (QI2CDevice *)obj; + char *path; + + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + path =3D g_strdup_printf("vout[%d]", i); + qmp_adm1266_set(TEST_ID, path, 90000000); + } + + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + i2c_set8(i2cdev, PMBUS_PAGE, i); + + i2c_value =3D bswap16(i2c_get16(i2cdev, PMBUS_READ_VOUT)); + g_assert_cmpuint(i2c_value, =3D=3D, UINT16_MAX); + + path =3D g_strdup_printf("vout[%d]", i); + value =3D qmp_adm1266_get(TEST_ID, path); + g_assert_cmpuint(value, =3D=3D, ADM1266_MAX_VALUE); + } +} + static void test_defaults(void *obj, void *data, QGuestAllocator *alloc) { uint16_t i2c_value; @@ -128,6 +272,12 @@ static void adm1266_register_nodes(void) qos_add_test("test_defaults", "adm1266", test_defaults, NULL); qos_add_test("test_partial_reads", "adm1266", test_partial_reads, NULL= ); qos_add_test("test_rw_regs", "adm1266", test_rw_regs, NULL); + qos_add_test("test_vout_milliunits", "adm1266", + test_vout_milliunits, NULL); + qos_add_test("test_vout_mode_exponent", "adm1266", + test_vout_mode_exponent, NULL); + qos_add_test("test_vout_clamp_to_max", "adm1266", + test_vout_clamp_to_max, NULL); } =20 libqos_init(adm1266_register_nodes); --=20 2.55.0.508.g3f0d502094-goog From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366900; cv=none; d=zohomail.com; s=zohoarc; b=ScWLAcyaKUh7CcBBKvvkRRIdgZMCIOrOezC3jVIumL3EQA8aFtMWfTotTJglpa2fCi87UU0ud2LcT19YmybqKgFshPig22XyXiqb75hVX/28VgjnyhMG/Te3sglUKrESLWQ6wIfhIJrXUwYeLrHptxRrvWWuzYcvxYUa11and44= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366900; 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=JVD11tqubf/ZoFd0+u8pfU9HDmID5aXBVmA5l13Z7RI=; b=e14YyrG8PGSrTLTQMfVTyhp7i5VUK+JzqHN2gCdCImoiHJ8QrYIJiUJhO+OTjXmul2Uo6tvo9cU+Equ3VwjU/LM++tUQqUizrgmMDDelzqOoGiH1Odtfeyuj6Q6GvMsZv7NsmZ4dBRDdZRKeuU7yyEOyP+dnp4q9EG+AVf7HcQk= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366900356376.6605302529432; Wed, 29 Jul 2026 16:15:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDT2-0007CW-2i; Wed, 29 Jul 2026 19:13:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3HolqagYKCjUkZkljiXffXcV.TfdhVdl-UVmVcefeXel.fiX@flex--titusr.bounces.google.com>) id 1wpDT0-0007Aj-7o for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:38 -0400 Received: from mail-pj1-x1047.google.com ([2607:f8b0:4864:20::1047]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3HolqagYKCjUkZkljiXffXcV.TfdhVdl-UVmVcefeXel.fiX@flex--titusr.bounces.google.com>) id 1wpDSy-0007J5-Pt for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:37 -0400 Received: by mail-pj1-x1047.google.com with SMTP id 98e67ed59e1d1-38ea32e57e2so2520428a91.1 for ; Wed, 29 Jul 2026 16:13:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366815; x=1785971615; darn=nongnu.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JVD11tqubf/ZoFd0+u8pfU9HDmID5aXBVmA5l13Z7RI=; b=HsBunJsYifMjzgbuPZoYXslbsRwsdswRy5m6V6TPzbtVU/xZJNz9t10rbz9G7X2Yqo RLKauQN6cIkMUbHsBPgqe9z8OalvKE3W2MLjqF/Accuxv0zWqXoRnaae+q6JqkE7c+gs h/Dkm02GqKB2SdtpJOqCFQnRA4EzZ/JVyCrHZFRtGbR3g6pCFE/hQy+bnl5K8oiivHBr ZYxYqBol4Y2AyC7vOmhjPsfUFYpDz9C6wJJfic7SJharcUdntom8YD7NNi3dXuIbsFV+ TkgJzQImr3XwR02HxDD2K0R8g64pL3xfPENsMPoESESC5tmKQcANvphYQxplzcdsAzAc q8xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366815; x=1785971615; h=content-type: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:content-type; bh=JVD11tqubf/ZoFd0+u8pfU9HDmID5aXBVmA5l13Z7RI=; b=REZkiX8RLKfxk0dz4OOZ9sQ4qNwPwmI0kcXqq/kvL7VgIT3r3NcLzyhR+Ezu4dy5fy 5pXUI4NVPfHthZSPktv7JepuX+YqW/BzJ4zJGJJK+WLMH4I0Vu2JvST/63YYDsFva2xw m9teX7IAObHspgES4+5AU+6P73Jwb5G1woEx9vkNZYMbFqoOtKPiVbGG+xORR7TP+8Z5 Fiw4PRQANu4fPfyosIGXNvvn0LYuZBDeJEdYa4y9OLsaqu1TE+ji8TMpyzKYyrUGF7HQ gtw8bXShdRA0jDqC2HGEEkfIfNF7EpeDFaQ/uHxUfLRQoONeiKP+OYiBnkNqtz84D2Mk ZLlw== X-Forwarded-Encrypted: i=1; AHgh+RoPlEi7dLeoP5oio++NuV7HGi01cUw82T7kT2W0PzGU6xmns1RtnglSZTGGoXOzUJHx4IfpjTaYWKC7@nongnu.org X-Gm-Message-State: AOJu0YzPSYFSuP7LkUaJ7xV+oIw/j4ZG2lzp0o1bmuY+Frl99ZvaJ7lY iCWvTUzmX2wd/zPNhLeuTGxAxoFo9Y5D1zrqxoG1iXnLxp/Tx4JdA+OGUc/35wFIndBqWFhpd09 uQ7721A== X-Received: from dybih50.prod.google.com ([2002:a05:7301:30b2:b0:314:3eac:8ca1]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4b84:b0:38f:5801:dc0e with SMTP id 98e67ed59e1d1-38f9bd8723dmr202745a91.15.1785366814582; Wed, 29 Jul 2026 16:13:34 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:21 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-7-titusr@google.com> Subject: [PATCH 6/8] hw/i2c: fix VOUT_MODE representation on little-endian machines From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1047; envelope-from=3HolqagYKCjUkZkljiXffXcV.TfdhVdl-UVmVcefeXel.fiX@flex--titusr.bounces.google.com; helo=mail-pj1-x1047.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: 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 @google.com) X-ZM-MESSAGEID: 1785366902324158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Fan Even though VOUT_MODE is only one byte, bitfields are allocated in the order specific to the host's endianness. Signed-off-by: Titus Rwantare Signed-off-by: Jason Fan --- include/hw/i2c/pmbus_device.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/hw/i2c/pmbus_device.h b/include/hw/i2c/pmbus_device.h index 9f3569e997..03b2c21c19 100644 --- a/include/hw/i2c/pmbus_device.h +++ b/include/hw/i2c/pmbus_device.h @@ -449,10 +449,17 @@ typedef struct PMBusCoefficients { /** * VOUT_Mode bit fields */ +#if HOST_BIG_ENDIAN typedef struct PMBusVoutMode { uint8_t mode:3; int8_t exp:5; } PMBusVoutMode; +# else +typedef struct PMBusVoutMode { + int8_t exp:5; + uint8_t mode:3; +} PMBusVoutMode; +#endif =20 /** * Convert sensor values to direct mode format --=20 2.55.0.508.g3f0d502094-goog From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366902; cv=none; d=zohomail.com; s=zohoarc; b=SLQnCuEDw8NsBodD8yYVnnctSWrfxMznDqBmT2fpJHbUFpLJcuRvcEWOoGyvjrffegwCQ1EEwcgFMlrf0aEcQvAt0sxoNkR4kHhawPvZX4/Se49Na2HcM27ZBhCi+5rZZhv5kXq4WwVagD2l506sDrZhn+4+wsG4kHUfLYclYVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366902; 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=/xteIKdxXDxQ8Aqr01sR3LS+skiTi1bfiq4aNzEz6EU=; b=WcwsolCMLxcReETMqPBpiMXlRGoFLrfvwl4Ya9G9EC5NydPUoMFRhbi/4GlKGUd8AcVYyQptqCTpDza4c4sGyAUG2v9nUqaAmZE3BQU0ufzNBp7KIAEcfmPl+oOftFbqfZck79g81/ADTuC76E0BOeMJhEnWbU98C/6+RtoTAwA= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366902951182.27046307115677; Wed, 29 Jul 2026 16:15:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDT3-0007Di-OH; Wed, 29 Jul 2026 19:13:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3H4lqagYKCjYlalmkjYggYdW.UgeiWem-VWnWdfgfYfm.gjY@flex--titusr.bounces.google.com>) id 1wpDT1-0007Bf-Gw for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:39 -0400 Received: from mail-pg1-x546.google.com ([2607:f8b0:4864:20::546]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3H4lqagYKCjYlalmkjYggYdW.UgeiWem-VWnWdfgfYfm.gjY@flex--titusr.bounces.google.com>) id 1wpDSz-0007JZ-Tp for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:39 -0400 Received: by mail-pg1-x546.google.com with SMTP id 41be03b00d2f7-cb5bdd8450dso1158863a12.0 for ; Wed, 29 Jul 2026 16:13:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366816; x=1785971616; darn=nongnu.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/xteIKdxXDxQ8Aqr01sR3LS+skiTi1bfiq4aNzEz6EU=; b=fI4M+AzZSYWOzcQ37Y7SKSF+Berf/yd0lXubNycgM4tzYB0VvspwFZusZXUhrBG0rD Ke1wNLrbaoX9F/BNDogc9qq0uZWkj1MOrMWnjH1MVkxz+cRLj7m8vJA0D67Fz1S9wCxc ZVlFUrzI/a8j8QXwbW9LNEbXX5YRhv9r5gouzI1v6NTahhwSfRSW0ojFH3HsoeVbwTLn 1BPDTT7LBsc2GH3XD6HCBzdWwSjX908ZpclH4LZUu+AyBee3zR5hP7i7yODllXdMNHNB /XDW1iORt9OpuH2IiesbaGsokc+lZb06ApoSjq2AcTRDdMAIdsP8DArYwYJSgHCsrwuy Qkfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366816; x=1785971616; h=content-type: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:content-type; bh=/xteIKdxXDxQ8Aqr01sR3LS+skiTi1bfiq4aNzEz6EU=; b=R4Uao/pB0b1EHxwLrzgzkFtYATaS8/E9F5uLMCmcXiYFWr63VaQua3waV9aRGi7kC8 IaQOT6zaAgW9WjC80WowX3zsuDkuid9+xIlngrlWCq4ebl+VPMFu2FmCN9tGEco74oxy Tj3/DFHjMnHNfsws4JjFU35Li91UFG7gTzD+z7/KJsfSvaooIBuBFE3EhTciNoeFlLmo 74Z4qsA1sLMpZVh+ivIKqjf9vCtaZ8gcBMMaiVYCjEeEUsUn+cobVqJS6K6XcZx7amHn sY4G53NRX9/dDSv6IptXJcdhVifWuKx3G8yIQqqo/5uGWoTbfVsHK/u3KhbigB7fpUXh VqUg== X-Forwarded-Encrypted: i=1; AHgh+RquxRruUHOGT8bWnfTeZlTvLvGfBpfqBX+HzQ8cWVGoaKCB3buB/AzADcHy0ryqRpMttlyUA844/xCS@nongnu.org X-Gm-Message-State: AOJu0YxiOgF/kWUCnR4hVExGldFpib3sLR6Wp2VMY4c8q0qdCODxHQyi Gd3nuutakhtFI4yPxc05vuz7u98gpqimy5iQg6+Wy2LvRUW0J3MNNrqcfSp5uShXZvmryTGGmlu sBGRWqA== X-Received: from dled15-n1.prod.google.com ([2002:a05:701b:42cf:10b0:13d:21e5:3b5e]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7f95:b0:3c2:dcdd:a85a with SMTP id adf61e73a8af0-3c900470d00mr95706637.13.1785366815484; Wed, 29 Jul 2026 16:13:35 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:22 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-8-titusr@google.com> Subject: [PATCH 7/8] hw/sensor: adm1266: expose vout_mode over QMP From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::546; envelope-from=3H4lqagYKCjYlalmkjYggYdW.UgeiWem-VWnWdfgfYfm.gjY@flex--titusr.bounces.google.com; helo=mail-pg1-x546.google.com X-Spam_score_int: -94 X-Spam_score: -9.5 X-Spam_bar: --------- X-Spam_report: (-9.5 / 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, FUZZY_MILLION=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: 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 @google.com) X-ZM-MESSAGEID: 1785366903862158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The vout_mode registers can now be adjusted to allow a wider value range in read_vout. vout_mode is per pmbus page, therefore vout_mode[n] will affect read_vout[n]. Signed-off-by: Titus Rwantare --- hw/sensor/adm1266.c | 8 ++++++++ tests/qtest/adm1266-test.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c index 80960dc1c4..1464307971 100644 --- a/hw/sensor/adm1266.c +++ b/hw/sensor/adm1266.c @@ -271,6 +271,8 @@ static void adm1266_get(Object *obj, Visitor *v, const = char *name, void *opaque, sscanf(name, "vout[%u]", &index); mode =3D (PMBusVoutMode *)&pmdev->pages[index].vout_mode; value =3D pmbus_linear_mode2milliunits(*(uint16_t *)opaque, mode->= exp); + } else if (strncmp(name, "vout_mode", 9) =3D=3D 0) { + value =3D *(uint8_t *)opaque; } else { value =3D *(uint16_t *)opaque; } @@ -293,6 +295,8 @@ static void adm1266_set(Object *obj, Visitor *v, const = char *name, void *opaque, sscanf(name, "vout[%u]", &index); mode =3D (PMBusVoutMode *)&pmdev->pages[index].vout_mode; *internal =3D pmbus_milliunits2linear_mode(value, mode->exp); + } else if (strncmp(name, "vout_mode", 9) =3D=3D 0) { + *(uint8_t *)opaque =3D value; } else { *internal =3D value; } @@ -321,6 +325,10 @@ static void adm1266_init(Object *obj) object_property_add(obj, "vout[*]", "uint32", adm1266_get, adm1266_set, NULL, &pmdev->pages[i].read_vout); + + object_property_add(obj, "vout_mode[*]", "uint32", + adm1266_get, + adm1266_set, NULL, &pmdev->pages[i].vout_mode); } } =20 diff --git a/tests/qtest/adm1266-test.c b/tests/qtest/adm1266-test.c index fd3d8079b6..9cdd206c3f 100644 --- a/tests/qtest/adm1266-test.c +++ b/tests/qtest/adm1266-test.c @@ -186,6 +186,40 @@ static void test_vout_mode_exponent(void *obj, void *d= ata, } } =20 +static void test_vout_mode_qmp(void *obj, void *data, + QGuestAllocator *alloc) +{ + uint16_t i2c_value, value, expected; + QI2CDevice *i2cdev =3D (QI2CDevice *)obj; + ADM1266VoutMode m; + char *path; + + /* set a different exponent per page and a different value */ + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + expected =3D 1000 * (i * 2); + m.mode.exp =3D i - 14; + path =3D g_strdup_printf("vout_mode[%d]", i); + qmp_adm1266_set(TEST_ID, path, m.raw); + path =3D g_strdup_printf("vout[%d]", i); + qmp_adm1266_set(TEST_ID, path, expected); + } + + for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { + i2c_set8(i2cdev, PMBUS_PAGE, i); + expected =3D 1000 * (i * 2); + /* check correct value from i2c*/ + m.raw =3D i2c_get8(i2cdev, PMBUS_VOUT_MODE); + i2c_value =3D bswap16(i2c_get16(i2cdev, PMBUS_READ_VOUT)); + i2c_value =3D adm1266_linear_mode2milliunits(i2c_value, m.mode.exp= ); + g_assert_cmpuint(i2c_value, =3D=3D, expected); + + /* check correct value from qmp*/ + path =3D g_strdup_printf("vout[%d]", i); + value =3D qmp_adm1266_get(TEST_ID, path); + g_assert_cmpuint(value, =3D=3D, expected); + } +} + static void test_vout_clamp_to_max(void *obj, void *data, QGuestAllocator *alloc) { @@ -278,6 +312,7 @@ static void adm1266_register_nodes(void) test_vout_mode_exponent, NULL); qos_add_test("test_vout_clamp_to_max", "adm1266", test_vout_clamp_to_max, NULL); + qos_add_test("test_vout_mode_qmp", "adm1266", test_vout_mode_qmp, NULL= ); } =20 libqos_init(adm1266_register_nodes); --=20 2.55.0.508.g3f0d502094-goog From nobody Mon Sep 28 02:05:31 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=reject dis=none) header.from=google.com ARC-Seal: i=1; a=rsa-sha256; t=1785366908; cv=none; d=zohomail.com; s=zohoarc; b=GtyElXQMqasNODGfJANm4N4ulFs3NKEvtVGlLN6bScbBiij8zlzOFD/q6obhde2d8GZlvKftVnRsXSVkV+LgbUB6iFs/615gFE/HSugZAOwwMHGdZmEA/v1irLqA1/Ce0AxKWyuTP3qk8sdCWsvJS/9pzgI2/LHuIuDXWIe10go= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785366908; 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=rj/PLz8usrH3OiKcLytTs4/lCfhHMIDEojECCw7hUKg=; b=FJYkZO/D5XnUB2QlR4CPvpt2DiWCx0N8QFjk7U+nCEufglXCx51X6Qpf8zRHzM9liqPZJgKNfbdBCVYAwY6x2VTNc7UctibZUXMgwcDm3Ph5yB/kq9mr3rVxrsxAlPNSoqAQJgC0lvLngWlFxfgAeEqghHFjuwocXGoKh8+m6EQ= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785366908440642.343041384346; Wed, 29 Jul 2026 16:15:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wpDT4-0007Dk-Aa; Wed, 29 Jul 2026 19:13:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <3IIlqagYKCjcmbmnlkZhhZeX.VhfjXfn-WXoXeghgZgn.hkZ@flex--titusr.bounces.google.com>) id 1wpDT2-0007Cz-R7 for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:40 -0400 Received: from mail-pj1-x1047.google.com ([2607:f8b0:4864:20::1047]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <3IIlqagYKCjcmbmnlkZhhZeX.VhfjXfn-WXoXeghgZgn.hkZ@flex--titusr.bounces.google.com>) id 1wpDT1-0007K1-5U for qemu-devel@nongnu.org; Wed, 29 Jul 2026 19:13:40 -0400 Received: by mail-pj1-x1047.google.com with SMTP id 98e67ed59e1d1-38f5ac7416eso1861879a91.3 for ; Wed, 29 Jul 2026 16:13:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1785366817; x=1785971617; darn=nongnu.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=rj/PLz8usrH3OiKcLytTs4/lCfhHMIDEojECCw7hUKg=; b=wDep6C5Ryf1DQddqPsG8E4Q4e7keaKqYoIZYB4mZIqpO5Jzq83Uz0FHvsNZq57JL/Q 8O/t9TNpHNXYfU03FDDvRFvGgzYlMHaQQdzZOiCvCYO2RqAU065JoViCT5U+SxxNV/wS t9Hm4bDsCwnkDiVTPxjIJki1IYVgwrAPTAlHk25wZi+Hd2/JVGxr1+FwwM+Jy5uoYCwA Fr8zKKYqLBP971bI58izy62JFuj2iX6QDiwoWjc4utKALo3L48q5YU/MiynESkiXDdfG kSK+VKL7wcx2y0PHhcdtcDQ4wsdNT0mLBu/8vKXMz9xF4mhwhDwaIxS82O6fS9iUgSyy bXHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785366817; x=1785971617; h=content-type: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:content-type; bh=rj/PLz8usrH3OiKcLytTs4/lCfhHMIDEojECCw7hUKg=; b=kTLQQY5UsLsOMUeyNOxq6hGSJpaJKkGewaVm49ecQgzwVBHzD4U3VX6OfTol3cpKnZ rYMKr8GUgJA1c8dEXzoGD/MGdWEd2JBnU8LQLBEXoVFtJP3ahTNC4Qi1TXW4Yrq9I/jN oK+OjSFqVRC7qphlyUn70KZLXZ/g1k5+vBaRDgk2OzLpnn+NIydjTxlbDHkUBLTzxbXL aNP/uONKCAoeMV/GQQqnABitlmSDcwZ6KkUVnwvd5jANb+Q63U4meTWNydQVzkVSCJ3A BzLbhf6yfO3MZO7scnkigaqH4yBAvFsPGyPyefYM4hQICAczwv/aBqWmG3rrT5THl6hm BpfQ== X-Forwarded-Encrypted: i=1; AHgh+Rp61vRqrfU0l5/+IPkAzdTu1ID83hdkaNRXSOXSYRLteo7Dfcuxy6y6/8gnSQlrrMxD4we6rkCgLUla@nongnu.org X-Gm-Message-State: AOJu0YwbJ9eA/ZXaGGSe+PMtPLuAI+3cdYDbKQAhH/2MXwRUmOcY72Bk CkUW2r7D9TdgWfNXYZyZlcAGbBtbCEUuCGA4T16Hu5+GUd0NDxADgP17K8luEZ3HDK8JH5/xqpE m/DF6dQ== X-Received: from dydn10.prod.google.com ([2002:a05:7300:730a:b0:30f:3dee:fdfe]) (user=titusr job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3811:b0:37f:9cdf:f037 with SMTP id 98e67ed59e1d1-38f9bece03bmr191237a91.26.1785366816532; Wed, 29 Jul 2026 16:13:36 -0700 (PDT) Date: Wed, 29 Jul 2026 23:13:23 +0000 In-Reply-To: <20260729231325.3808993-1-titusr@google.com> Mime-Version: 1.0 References: <20260729231325.3808993-1-titusr@google.com> X-Mailer: git-send-email 2.55.0.508.g3f0d502094-goog Message-ID: <20260729231325.3808993-9-titusr@google.com> Subject: [PATCH 8/8] hw/sensor: adm1266: set default VOUT mode From: Titus Rwantare To: peter.maydell@linaro.org Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kfting@nuvoton.com, imaginos32@gmail.com, wuhaotsh@google.com, philmd@mailo.com, fanjason@google.com, Titus Rwantare Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1047; envelope-from=3IIlqagYKCjcmbmnlkZhhZeX.VhfjXfn-WXoXeghgZgn.hkZ@flex--titusr.bounces.google.com; helo=mail-pj1-x1047.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @google.com) X-ZM-MESSAGEID: 1785366910199158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" VOUT_MODE 0 represents linear mode, and the exponent is set to -10, to allow us to fit 3.3V in the register. Signed-off-by: Titus Rwantare --- hw/sensor/adm1266.c | 17 ++++++++++++----- tests/qtest/adm1266-test.c | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c index 1464307971..c0c6341876 100644 --- a/hw/sensor/adm1266.c +++ b/hw/sensor/adm1266.c @@ -42,6 +42,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ADM1266State, ADM1266) #define ADM1266_MFR_LOCATION_DEFAULT "0000" #define ADM1266_MFR_DATE_DEFAULT "0000" #define ADM1266_MFR_SERIAL_DEFAULT "0000" +#define ADM1266_VOUT_MODE_EXP_DEFAULT -10 + =20 #define ADM1266_NUM_PAGES 17 #define ADM1266_READ_LENGTH_DEFAULT 48 @@ -85,6 +87,10 @@ static void adm1266_exit_reset(Object *obj, ResetType ty= pe) { ADM1266State *s =3D ADM1266(obj); PMBusDevice *pmdev =3D PMBUS_DEVICE(obj); + PMBusVoutMode m =3D { + .mode =3D 0, + .exp =3D ADM1266_VOUT_MODE_EXP_DEFAULT + }; =20 pmdev->page =3D 0; pmdev->capability =3D ADM1266_CAPABILITY_NO_PEC; @@ -92,11 +98,12 @@ static void adm1266_exit_reset(Object *obj, ResetType t= ype) for (int i =3D 0; i < ADM1266_NUM_PAGES; i++) { pmdev->pages[i].operation =3D ADM1266_OPERATION_DEFAULT; pmdev->pages[i].revision =3D ADM1266_PMBUS_REVISION_DEFAULT; - pmdev->pages[i].vout_mode =3D 0; - pmdev->pages[i].read_vout =3D pmbus_data2linear_mode(12, 0); - pmdev->pages[i].vout_margin_high =3D pmbus_data2linear_mode(15, 0); - pmdev->pages[i].vout_margin_low =3D pmbus_data2linear_mode(3, 0); - pmdev->pages[i].vout_ov_fault_limit =3D pmbus_data2linear_mode(16,= 0); + + pmdev->pages[i].vout_mode =3D *(uint8_t *)&m; + pmdev->pages[i].read_vout =3D pmbus_data2linear_mode(12, m.exp); + pmdev->pages[i].vout_margin_high =3D pmbus_data2linear_mode(15, m.= exp); + pmdev->pages[i].vout_margin_low =3D pmbus_data2linear_mode(3, m.ex= p); + pmdev->pages[i].vout_ov_fault_limit =3D pmbus_data2linear_mode(16,= m.exp); pmdev->pages[i].revision =3D ADM1266_PMBUS_REVISION_DEFAULT; } =20 diff --git a/tests/qtest/adm1266-test.c b/tests/qtest/adm1266-test.c index 9cdd206c3f..6fcf2505cf 100644 --- a/tests/qtest/adm1266-test.c +++ b/tests/qtest/adm1266-test.c @@ -47,7 +47,7 @@ #define TEST_STRING_C "rev c" =20 #define ADM1266_NUM_PAGES 17 -#define ADM1266_MAX_VALUE 65535000 +#define ADM1266_MAX_VALUE 63999 /* UINT16_MAX * 2^-= 10 */ =20 typedef union { uint8_t raw; --=20 2.55.0.508.g3f0d502094-goog