From nobody Wed Nov 19 18:40:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1702554641; cv=none; d=zohomail.com; s=zohoarc; b=Jp11Y7eUz0/JUs8wbfRjY6hlT/AhJuonk0LjvharX6cnzYc1ZWYHz4xRxJy/telA7IIFQL2gttvOnfgfIog3iLL0lYQoaIr5m0/Z/RRVsVfdWR84TDEKRJZkY2JzLfgVgwvG3JlWo+n1oFIgQBMr83l/OLnn6i83NF/FOYkaT8k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1702554641; h=Content-Type:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VlRbIuEvA6Gkf7oFJwMsZ8blMj10H1M0sPGHVvZJfoo=; b=RVMyyJ8tbno0tV03t1Pdu6KFOrLVuT2cu8ui9ulJoFeeYUiZBxc0PC/FRtav3FnBt6qo4VnFTsEBOGmfty3nKwaNbqHok3Vm8FVvKkjz5ojU/WpDXoKZdXT9wS2AlJRPaPElQCr9lwqe+yJgIWZH9BU1E3CYi5Ovpc09/tHcIik= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1702554641154111.57467411696246; Thu, 14 Dec 2023 03:50:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rDkDg-0006lK-Ef; Thu, 14 Dec 2023 06:49:36 -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 1rDkDd-0006l0-9Y; Thu, 14 Dec 2023 06:49:34 -0500 Received: from mail-yw1-x1130.google.com ([2607:f8b0:4864:20::1130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rDkDb-0007tY-9b; Thu, 14 Dec 2023 06:49:33 -0500 Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-5e25d1d189eso4324557b3.0; Thu, 14 Dec 2023 03:49:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702554569; x=1703159369; darn=nongnu.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=VlRbIuEvA6Gkf7oFJwMsZ8blMj10H1M0sPGHVvZJfoo=; b=Qt4rgDr0ZCPeGloI1DHKBJnPmDbEuo7h8Y6EHaqkDpgtk30WVh/B7PMta3tqvfWZyy 5WDdD1rMurJ3kN1YDJ/jkFPIzhUkJeOmoVUGv9UpetYoFcVRfefB6PUwd6DGZbucTCOo s3PM0G28yNOR7jPTT8XXi9viEEWKZ009OaKRHeYgiI815PzgkgRTOKZurDmlxyYaWoOF P8epgeOFEt9gx5WNNC5KNd1aSw4/ThaNLs56/87MgcVSPtRqyhF3P5BqUmP3oZ7cK11w l4mXvpfNsG0PSL5+vTsDKefv5l+HTviHGsADjeJc6pGVju5ahjJQcObjBvy96MjfoWRJ hHuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702554569; x=1703159369; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=VlRbIuEvA6Gkf7oFJwMsZ8blMj10H1M0sPGHVvZJfoo=; b=Kc0SiTE4Bn/dmJ2KGMuUwPSWKc0qkG89J2+S7x7OwDh6dzJDNf9xwDTUpgTQB7xo1l 9kvOTrqoOz/qW10C4jSuT9xq0cq3YsreBmJdt92OdY5wm4TrbnTdyWt8SX8AYpkYPNs4 RkZLSCBottO2HuQpWbBHzRHgHVpOZKvQrpkIySTB55XJs2UmRYl8Gif1nYBceuDR61XJ XA7LkyFkIYsQvUPO3UFGJ6it3iV4wuR8Le25W5E+sVyXtIPLV/1JDdCjm86Hsk44D671 JVbipNU/bBr1ugvmxN4NODmmMDpXcI9Kkw4ctWlaEyo8OmkpZFrc+oA8g4luy8yqY5Sc 2Wcg== X-Gm-Message-State: AOJu0Yx4gsDkGmqvy5nlQ+xk/KcPY1+4xD1gehlJ91KQY2JonHCDbyu8 Um6fDy2/ebauLMmuYRAJOVlZAbeYpppaRgPWC9fXu9r1Iirvn7cPJJ4HjDEZ X-Google-Smtp-Source: AGHT+IEaLnl6r5P9H2X+MXcNU/3/WP7NurpYYPfyW0B8II41frosySz/2jMU/xrDdFBXut/TJgA/25760kwOcAk8KrM= X-Received: by 2002:a81:844a:0:b0:5e3:2e9d:451 with SMTP id u71-20020a81844a000000b005e32e9d0451mr1300420ywf.49.1702554569434; Thu, 14 Dec 2023 03:49:29 -0800 (PST) MIME-Version: 1.0 From: Nikita Ostrenkov Date: Thu, 14 Dec 2023 14:49:18 +0300 Message-ID: Subject: [PATCH v3] fsl-imx: add simple RTC emulation for i.MX6 and i.MX7 boards To: qemu-devel@nongnu.org Cc: Peter Maydell , qemu-arm@nongnu.org, Andrey Smirnov , =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= Content-Type: multipart/alternative; boundary="000000000000526a25060c76e0ec" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1130; envelope-from=n.ostrenkov@gmail.com; helo=mail-yw1-x1130.google.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, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1702554643218100007 Content-Transfer-Encoding: quoted-printable --000000000000526a25060c76e0ec MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U2lnbmVkLW9mZi1ieTogTmlraXRhIE9zdHJlbmtvdiA8bi5vc3RyZW5rb3ZAZ21haWwuY29tPgot LS0KIGh3L21pc2MvaW14N19zbnZzLmMgICAgICAgICB8IDkxICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0KIGh3L21pc2MvdHJhY2UtZXZlbnRzICAgICAgICB8ICA0ICstCiBp bmNsdWRlL2h3L21pc2MvaW14N19zbnZzLmggfCAgNyArKy0KIDMgZmlsZXMgY2hhbmdlZCwgOTIg aW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaHcvbWlzYy9pbXg3 X3NudnMuYyBiL2h3L21pc2MvaW14N19zbnZzLmMKaW5kZXggYTI0NWY5NmNkNC4uNzc2OWMzOTQ5 OSAxMDA2NDQKLS0tIGEvaHcvbWlzYy9pbXg3X3NudnMuYworKysgYi9ody9taXNjL2lteDdfc252 cy5jCkBAIC0xMywyOCArMTMsOTggQEAKICAqLwoKICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisj aW5jbHVkZSAicWVtdS9iaXRvcHMuaCIKKyNpbmNsdWRlICJxZW11L3RpbWVyLmgiCisjaW5jbHVk ZSAibWlncmF0aW9uL3Ztc3RhdGUuaCIKICNpbmNsdWRlICJody9taXNjL2lteDdfc252cy5oIgog I2luY2x1ZGUgInFlbXUvbW9kdWxlLmgiCisjaW5jbHVkZSAic3lzZW11L3N5c2VtdS5oIgogI2lu Y2x1ZGUgInN5c2VtdS9ydW5zdGF0ZS5oIgogI2luY2x1ZGUgInRyYWNlLmgiCgorI2RlZmluZSBS VENfRlJFUSAgICAzMjc2OFVMTAorCitzdGF0aWMgY29uc3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZt c3RhdGVfaW14N19zbnZzID0zRCB7CisgICAgLm5hbWUgPTNEIFRZUEVfSU1YN19TTlZTLAorICAg IC52ZXJzaW9uX2lkID0zRCAxLAorICAgIC5taW5pbXVtX3ZlcnNpb25faWQgPTNEIDEsCisgICAg LmZpZWxkcyA9M0QgKFZNU3RhdGVGaWVsZFtdKSB7CisgICAgICAgIFZNU1RBVEVfVUlOVDY0KHRp Y2tfb2Zmc2V0LCBJTVg3U05WU1N0YXRlKSwKKyAgICAgICAgVk1TVEFURV9VSU5UNjQobHBjciwg SU1YN1NOVlNTdGF0ZSksCisgICAgICAgIFZNU1RBVEVfRU5EX09GX0xJU1QoKQorICAgIH0KK307 CisKK3N0YXRpYyB1aW50NjRfdCBpbXg3X3NudnNfZ2V0X2NvdW50KElNWDdTTlZTU3RhdGUgKnMp Cit7CisgICAgaW50NjRfdCB0aWNrcyA9M0QgbXVsZGl2NjQocWVtdV9jbG9ja19nZXRfbnMocnRj X2Nsb2NrKSwgUlRDX0ZSRVEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTk9TRUNP TkRTX1BFUl9TRUNPTkQpOworICAgIHJldHVybiBzLT50aWNrX29mZnNldCArIHRpY2tzOworfQor CiBzdGF0aWMgdWludDY0X3QgaW14N19zbnZzX3JlYWQodm9pZCAqb3BhcXVlLCBod2FkZHIgb2Zm c2V0LCB1bnNpZ25lZCBzaXplKQogewotICAgIHRyYWNlX2lteDdfc252c19yZWFkKG9mZnNldCwg MCk7CisgICAgSU1YN1NOVlNTdGF0ZSAqcyA9M0QgSU1YN19TTlZTKG9wYXF1ZSk7CisgICAgdWlu dDY0X3QgcmV0ID0zRCAwOworCisgICAgc3dpdGNoIChvZmZzZXQpIHsKKyAgICBjYXNlIFNOVlNf TFBTUlRDTVI6CisgICAgICAgIHJldCA9M0QgZXh0cmFjdDY0KGlteDdfc252c19nZXRfY291bnQo cyksIDMyLCAxNSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU05WU19MUFNSVENMUjoKKyAg ICAgICAgcmV0ID0zRCBleHRyYWN0NjQoaW14N19zbnZzX2dldF9jb3VudChzKSwgMCwgMzIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNOVlNfTFBDUjoKKyAgICAgICAgcmV0ID0zRCBzLT5s cGNyOworICAgICAgICBicmVhazsKKyAgICB9CgotICAgIHJldHVybiAwOworICAgIHRyYWNlX2lt eDdfc252c19yZWFkKG9mZnNldCwgcmV0LCBzaXplKTsKKworICAgIHJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIGlteDdfc252c19yZXNldChEZXZpY2VTdGF0ZSAqZGV2KQoreworICAgIElN WDdTTlZTU3RhdGUgKnMgPTNEIElNWDdfU05WUyhkZXYpOworCisgICAgcy0+bHBjciA9M0QgMDsK IH0KCiBzdGF0aWMgdm9pZCBpbXg3X3NudnNfd3JpdGUodm9pZCAqb3BhcXVlLCBod2FkZHIgb2Zm c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHYsIHVuc2lnbmVkIHNp emUpCiB7Ci0gICAgY29uc3QgdWludDMyX3QgdmFsdWUgPTNEIHY7Ci0gICAgY29uc3QgdWludDMy X3QgbWFzayAgPTNEIFNOVlNfTFBDUl9UT1AgfCBTTlZTX0xQQ1JfRFBfRU47CisgICAgdHJhY2Vf aW14N19zbnZzX3dyaXRlKG9mZnNldCwgdiwgc2l6ZSk7CisKKyAgICBJTVg3U05WU1N0YXRlICpz ID0zRCBJTVg3X1NOVlMob3BhcXVlKTsKCi0gICAgdHJhY2VfaW14N19zbnZzX3dyaXRlKG9mZnNl dCwgdmFsdWUpOworICAgIHVpbnQ2NF90IG5ld192YWx1ZSA9M0QgMCwgc252c19jb3VudCA9M0Qg MDsKCi0gICAgaWYgKG9mZnNldCA9M0Q9M0QgU05WU19MUENSICYmICgodmFsdWUgJiBtYXNrKSA9 M0Q9M0QgbWFzaykpIHsKLSAgICAgICAgcWVtdV9zeXN0ZW1fc2h1dGRvd25fcmVxdWVzdChTSFVU RE9XTl9DQVVTRV9HVUVTVF9TSFVURE9XTik7CisgICAgaWYgKG9mZnNldCA9M0Q9M0QgU05WU19M UFNSVENNUiB8fCBvZmZzZXQgPTNEPTNEIFNOVlNfTFBTUlRDTFIpIHsKKyAgICAgICAgc252c19j b3VudCA9M0QgaW14N19zbnZzX2dldF9jb3VudChzKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG9m ZnNldCkgeworICAgIGNhc2UgU05WU19MUFNSVENNUjoKKyAgICAgICAgbmV3X3ZhbHVlID0zRCBk ZXBvc2l0NjQoc252c19jb3VudCwgMzIsIDMyLCB2KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBTTlZTX0xQU1JUQ0xSOgorICAgICAgICBuZXdfdmFsdWUgPTNEIGRlcG9zaXQ2NChzbnZzX2Nv dW50LCAwLCAzMiwgdik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU05WU19MUENSOiB7Cisg ICAgICAgIHMtPmxwY3IgPTNEIHY7CisKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayAgPTNE IFNOVlNfTFBDUl9UT1AgfCBTTlZTX0xQQ1JfRFBfRU47CisKKyAgICAgICAgaWYgKCh2ICYgbWFz aykgPTNEPTNEIG1hc2spIHsKKyAgICAgICAgICAgIHFlbXVfc3lzdGVtX3NodXRkb3duX3JlcXVl c3QoU0hVVERPV05fQ0FVU0VfR1VFU1RfU0hVVERPV04pOworICAgICAgICB9CisgICAgICAgIGJy ZWFrOworICAgIH0KKyAgICB9CisKKyAgICBpZiAob2Zmc2V0ID0zRD0zRCBTTlZTX0xQU1JUQ01S IHx8IG9mZnNldCA9M0Q9M0QgU05WU19MUFNSVENMUikgeworICAgICAgICBzLT50aWNrX29mZnNl dCArPTNEIG5ld192YWx1ZSAtIHNudnNfY291bnQ7CiAgICAgfQogfQoKQEAgLTU5LDE3ICsxMjks MjQgQEAgc3RhdGljIHZvaWQgaW14N19zbnZzX2luaXQoT2JqZWN0ICpvYmopCiB7CiAgICAgU3lz QnVzRGV2aWNlICpzZCA9M0QgU1lTX0JVU19ERVZJQ0Uob2JqKTsKICAgICBJTVg3U05WU1N0YXRl ICpzID0zRCBJTVg3X1NOVlMob2JqKTsKKyAgICBzdHJ1Y3QgdG0gdG07CgogICAgIG1lbW9yeV9y ZWdpb25faW5pdF9pbygmcy0+bW1pbywgb2JqLCAmaW14N19zbnZzX29wcywgcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgVFlQRV9JTVg3X1NOVlMsIDB4MTAwMCk7CgogICAgIHN5c2J1c19p bml0X21taW8oc2QsICZzLT5tbWlvKTsKKworICAgIHFlbXVfZ2V0X3RpbWVkYXRlKCZ0bSwgMCk7 CisgICAgcy0+dGlja19vZmZzZXQgPTNEIG1rdGltZWdtKCZ0bSkgLQorICAgICAgICBxZW11X2Ns b2NrX2dldF9ucyhydGNfY2xvY2spIC8gTkFOT1NFQ09ORFNfUEVSX1NFQ09ORDsKIH0KCiBzdGF0 aWMgdm9pZCBpbXg3X3NudnNfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqa2xhc3MsIHZvaWQgKmRh dGEpCiB7CiAgICAgRGV2aWNlQ2xhc3MgKmRjID0zRCBERVZJQ0VfQ0xBU1Moa2xhc3MpOwoKKyAg ICBkYy0+cmVzZXQgPTNEIGlteDdfc252c19yZXNldDsKKyAgICBkYy0+dm1zZCA9M0QgJnZtc3Rh dGVfaW14N19zbnZzOwogICAgIGRjLT5kZXNjICA9M0QgImkuTVg3IFNlY3VyZSBOb24tVm9sYXRp bGUgU3RvcmFnZSBNb2R1bGUiOwogfQoKZGlmZiAtLWdpdCBhL2h3L21pc2MvdHJhY2UtZXZlbnRz IGIvaHcvbWlzYy90cmFjZS1ldmVudHMKaW5kZXggMDVmZjY5MjQ0MS4uODU3MjU1MDZiZiAxMDA2 NDQKLS0tIGEvaHcvbWlzYy90cmFjZS1ldmVudHMKKysrIGIvaHcvbWlzYy90cmFjZS1ldmVudHMK QEAgLTExNiw4ICsxMTYsOCBAQCBpbXg3X2dwcl9yZWFkKHVpbnQ2NF90IG9mZnNldCkgImFkZHIg MHglMDgiIFBSSXg2NAogaW14N19ncHJfd3JpdGUodWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCB2 YWx1ZSkgImFkZHIgMHglMDgiIFBSSXg2NCAidmFsdWUKMHglMDgiIFBSSXg2NAoKICMgaW14N19z bnZzLmMKLWlteDdfc252c19yZWFkKHVpbnQ2NF90IG9mZnNldCwgdWludDMyX3QgdmFsdWUpICJh ZGRyIDB4JTA4IiBQUkl4NjQgInZhbHVlCjB4JTA4IiBQUkl4MzIKLWlteDdfc252c193cml0ZSh1 aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90IHZhbHVlKSAiYWRkciAweCUwOCIgUFJJeDY0CiJ2YWx1 ZSAweCUwOCIgUFJJeDMyCitpbXg3X3NudnNfcmVhZCh1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90 IHZhbHVlLCB1bnNpZ25lZCBzaXplKSAiaS5NWCBTTlZTCnJlYWQ6IG9mZnNldCAweCUwOCIgUFJJ eDY0ICIgdmFsdWUgMHglMDgiIFBSSXg2NCAiIHNpemUgJXUiCitpbXg3X3NudnNfd3JpdGUodWlu dDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSwgdW5zaWduZWQgc2l6ZSkgImkuTVggU05WUwp3 cml0ZTogb2Zmc2V0IDB4JTA4IiBQUkl4NjQgIiB2YWx1ZSAweCUwOCIgUFJJeDY0ICIgc2l6ZSAl dSIKCiAjIG1vczY1MjIuYwogbW9zNjUyMl9zZXRfY291bnRlcihpbnQgaW5kZXgsIHVuc2lnbmVk IGludCB2YWwpICJUJWQuY291bnRlcj0zRCVkIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ody9taXNj L2lteDdfc252cy5oIGIvaW5jbHVkZS9ody9taXNjL2lteDdfc252cy5oCmluZGV4IDE0YTFkNmZl NmIuLjEyNzIwNzYwODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaHcvbWlzYy9pbXg3X3NudnMuaAor KysgYi9pbmNsdWRlL2h3L21pc2MvaW14N19zbnZzLmgKQEAgLTIwLDcgKzIwLDkgQEAKIGVudW0g SU1YN1NOVlNSZWdpc3RlcnMgewogICAgIFNOVlNfTFBDUiA9M0QgMHgzOCwKICAgICBTTlZTX0xQ Q1JfVE9QICAgPTNEIEJJVCg2KSwKLSAgICBTTlZTX0xQQ1JfRFBfRU4gPTNEIEJJVCg1KQorICAg IFNOVlNfTFBDUl9EUF9FTiA9M0QgQklUKDUpLAorICAgIFNOVlNfTFBTUlRDTVIgPTNEIDB4MDUw LCAvKiBTZWN1cmUgUmVhbCBUaW1lIENvdW50ZXIgTVNCIFJlZ2lzdGVyICovCisgICAgU05WU19M UFNSVENMUiA9M0QgMHgwNTQsIC8qIFNlY3VyZSBSZWFsIFRpbWUgQ291bnRlciBMU0IgUmVnaXN0 ZXIgKi8KIH07CgogI2RlZmluZSBUWVBFX0lNWDdfU05WUyAiaW14Ny5zbnZzIgpAQCAtMzEsNiAr MzMsOSBAQCBzdHJ1Y3QgSU1YN1NOVlNTdGF0ZSB7CiAgICAgU3lzQnVzRGV2aWNlIHBhcmVudF9v Ymo7CgogICAgIE1lbW9yeVJlZ2lvbiBtbWlvOworCisgICAgdWludDY0X3QgdGlja19vZmZzZXQ7 CisgICAgdWludDY0X3QgbHBjcjsKIH07CgogI2VuZGlmIC8qIElNWDdfU05WU19IICovCi0tPTIw CjIuMzQuMQ== --000000000000526a25060c76e0ec Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Signed-off-by: Nikita Ostrenkov <n.ostrenkov@gmail.com>
---
=C2=A0hw/misc/im= x7_snvs.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 91 ++++++++++++++++++++++++++++++++= ++---
=C2=A0hw/misc/trace-events =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A04 +-=
=C2=A0include/hw/misc/imx7_snvs.h | =C2=A07 ++-
=C2=A03 files change= d, 92 insertions(+), 10 deletions(-)

diff --git a/hw/misc/imx7_snvs.= c b/hw/misc/imx7_snvs.c
index a245f96cd4..7769c39499 100644
--- a/hw/= misc/imx7_snvs.c
+++ b/hw/misc/imx7_snvs.c
@@ -13,28 +13,98 @@
=C2= =A0 */
=C2=A0
=C2=A0#include "qemu/osdep.h"
+#include &q= uot;qemu/bitops.h"
+#include "qemu/timer.h"
+#include = "migration/vmstate.h"
=C2=A0#include "hw/misc/imx7_snvs.h= "
=C2=A0#include "qemu/module.h"
+#include "sysem= u/sysemu.h"
=C2=A0#include "sysemu/runstate.h"
=C2=A0#= include "trace.h"
=C2=A0
+#define RTC_FREQ =C2=A0 =C2=A0327= 68ULL
+
+static const VMStateDescription vmstate_imx7_snvs =3D {
+= =C2=A0 =C2=A0.name =3D TYPE_IMX7_SNVS,
+ =C2=A0 =C2=A0.version_id =3D 1= ,
+ =C2=A0 =C2=A0.minimum_version_id =3D 1,
+ =C2=A0 =C2=A0.fields = =3D (VMStateField[]) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT64(tick_= offset, IMX7SNVSState),
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_UINT64(lpcr= , IMX7SNVSState),
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0VMSTATE_END_OF_LIST()
= + =C2=A0 =C2=A0}
+};
+
+static uint64_t imx7_snvs_get_count(IMX7SN= VSState *s)
+{
+ =C2=A0 =C2=A0int64_t ticks =3D muldiv64(qemu_clock_g= et_ns(rtc_clock), RTC_FREQ,
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 NANOSECONDS_PER_SEC= OND);
+ =C2=A0 =C2=A0return s->tick_offset + ticks;
+}
+
=C2= =A0static uint64_t imx7_snvs_read(void *opaque, hwaddr offset, unsigned siz= e)
=C2=A0{
- =C2=A0 =C2=A0trace_imx7_snvs_read(offset, 0);
+ =C2= =A0 =C2=A0IMX7SNVSState *s =3D IMX7_SNVS(opaque);
+ =C2=A0 =C2=A0uint64_= t ret =3D 0;
+
+ =C2=A0 =C2=A0switch (offset) {
+ =C2=A0 =C2=A0cas= e SNVS_LPSRTCMR:
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D extract64(imx7_snv= s_get_count(s), 32, 15);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
+ =C2=A0= =C2=A0case SNVS_LPSRTCLR:
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D extract6= 4(imx7_snvs_get_count(s), 0, 32);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0break;+ =C2=A0 =C2=A0case SNVS_LPCR:
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D s-&= gt;lpcr;
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
+ =C2=A0 =C2=A0}
=C2= =A0
- =C2=A0 =C2=A0return 0;
+ =C2=A0 =C2=A0trace_imx7_snvs_read(offs= et, ret, size);
+
+ =C2=A0 =C2=A0return ret;
+}
+
+static vo= id imx7_snvs_reset(DeviceState *dev)
+{
+ =C2=A0 =C2=A0IMX7SNVSState = *s =3D IMX7_SNVS(dev);
+
+ =C2=A0 =C2=A0s->lpcr =3D 0;
=C2=A0}<= br>=C2=A0
=C2=A0static void imx7_snvs_write(void *opaque, hwaddr offset,=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0uint64_t v, unsigned size)
=C2=A0{
= - =C2=A0 =C2=A0const uint32_t value =3D v;
- =C2=A0 =C2=A0const uint32_t= mask =C2=A0=3D SNVS_LPCR_TOP | SNVS_LPCR_DP_EN;
+ =C2=A0 =C2=A0trace_im= x7_snvs_write(offset, v, size);
+
+ =C2=A0 =C2=A0IMX7SNVSState *s =3D= IMX7_SNVS(opaque);
=C2=A0
- =C2=A0 =C2=A0trace_imx7_snvs_write(offse= t, value);
+ =C2=A0 =C2=A0uint64_t new_value =3D 0, snvs_count =3D 0;=C2=A0
- =C2=A0 =C2=A0if (offset =3D=3D SNVS_LPCR && ((value &a= mp; mask) =3D=3D mask)) {
- =C2=A0 =C2=A0 =C2=A0 =C2=A0qemu_system_shutd= own_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
+ =C2=A0 =C2=A0if (offset = =3D=3D SNVS_LPSRTCMR || offset =3D=3D SNVS_LPSRTCLR) {
+ =C2=A0 =C2=A0 = =C2=A0 =C2=A0snvs_count =3D imx7_snvs_get_count(s);
+ =C2=A0 =C2=A0}
= +
+ =C2=A0 =C2=A0switch (offset) {
+ =C2=A0 =C2=A0case SNVS_LPSRTCMR:=
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0new_value =3D deposit64(snvs_count, 32, 32= , v);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
+ =C2=A0 =C2=A0case SNVS_LP= SRTCLR:
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0new_value =3D deposit64(snvs_count,= 0, 32, v);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
+ =C2=A0 =C2=A0case S= NVS_LPCR: {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0s->lpcr =3D v;
+
+ =C2= =A0 =C2=A0 =C2=A0 =C2=A0const uint32_t mask =C2=A0=3D SNVS_LPCR_TOP | SNVS_= LPCR_DP_EN;
+
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0if ((v & mask) =3D=3D = mask) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0qemu_system_shutdown_= request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0}+ =C2=A0 =C2=A0 =C2=A0 =C2=A0break;
+ =C2=A0 =C2=A0}
+ =C2=A0 =C2= =A0}
+
+ =C2=A0 =C2=A0if (offset =3D=3D SNVS_LPSRTCMR || offset =3D= =3D SNVS_LPSRTCLR) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0s->tick_offset +=3D= new_value - snvs_count;
=C2=A0 =C2=A0 =C2=A0}
=C2=A0}
=C2=A0
@= @ -59,17 +129,24 @@ static void imx7_snvs_init(Object *obj)
=C2=A0{
= =C2=A0 =C2=A0 =C2=A0SysBusDevice *sd =3D SYS_BUS_DEVICE(obj);
=C2=A0 =C2= =A0 =C2=A0IMX7SNVSState *s =3D IMX7_SNVS(obj);
+ =C2=A0 =C2=A0struct tm = tm;
=C2=A0
=C2=A0 =C2=A0 =C2=A0memory_region_init_io(&s->mmio,= obj, &imx7_snvs_ops, s,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TYPE_IMX7_SNVS, 0x10= 00);
=C2=A0
=C2=A0 =C2=A0 =C2=A0sysbus_init_mmio(sd, &s->mmio)= ;
+
+ =C2=A0 =C2=A0qemu_get_timedate(&tm, 0);
+ =C2=A0 =C2=A0s= ->tick_offset =3D mktimegm(&tm) -
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0qe= mu_clock_get_ns(rtc_clock) / NANOSECONDS_PER_SECOND;
=C2=A0}
=C2=A0=C2=A0static void imx7_snvs_class_init(ObjectClass *klass, void *data)=C2=A0{
=C2=A0 =C2=A0 =C2=A0DeviceClass *dc =3D DEVICE_CLASS(klass);=C2=A0
+ =C2=A0 =C2=A0dc->reset =3D imx7_snvs_reset;
+ =C2=A0 =C2= =A0dc->vmsd =3D &vmstate_imx7_snvs;
=C2=A0 =C2=A0 =C2=A0dc->de= sc =C2=A0=3D "i.MX7 Secure Non-Volatile Storage Module";
=C2= =A0}
=C2=A0
diff --git a/hw/misc/trace-events b/hw/misc/trace-events<= br>index 05ff692441..85725506bf 100644
--- a/hw/misc/trace-events
+++= b/hw/misc/trace-events
@@ -116,8 +116,8 @@ imx7_gpr_read(uint64_t offse= t) "addr 0x%08" PRIx64
=C2=A0imx7_gpr_write(uint64_t offset, u= int64_t value) "addr 0x%08" PRIx64 "value 0x%08" PRIx64=
=C2=A0
=C2=A0# imx7_snvs.c
-imx7_snvs_read(uint64_t offset, uint3= 2_t value) "addr 0x%08" PRIx64 "value 0x%08" PRIx32
= -imx7_snvs_write(uint64_t offset, uint32_t value) "addr 0x%08" PR= Ix64 "value 0x%08" PRIx32
+imx7_snvs_read(uint64_t offset, uin= t64_t value, unsigned size) "i.MX SNVS read: offset 0x%08" PRIx64= " value 0x%08" PRIx64 " size %u"
+imx7_snvs_write(u= int64_t offset, uint64_t value, unsigned size) "i.MX SNVS write: offse= t 0x%08" PRIx64 " value 0x%08" PRIx64 " size %u"=C2=A0
=C2=A0# mos6522.c
=C2=A0mos6522_set_counter(int index, unsig= ned int val) "T%d.counter=3D%d"
diff --git a/include/hw/misc/i= mx7_snvs.h b/include/hw/misc/imx7_snvs.h
index 14a1d6fe6b..1272076086 10= 0644
--- a/include/hw/misc/imx7_snvs.h
+++ b/include/hw/misc/imx7_snv= s.h
@@ -20,7 +20,9 @@
=C2=A0enum IMX7SNVSRegisters {
=C2=A0 =C2=A0= =C2=A0SNVS_LPCR =3D 0x38,
=C2=A0 =C2=A0 =C2=A0SNVS_LPCR_TOP =C2=A0 =3D = BIT(6),
- =C2=A0 =C2=A0SNVS_LPCR_DP_EN =3D BIT(5)
+ =C2=A0 =C2=A0SNVS= _LPCR_DP_EN =3D BIT(5),
+ =C2=A0 =C2=A0SNVS_LPSRTCMR =3D 0x050, /* Secur= e Real Time Counter MSB Register */
+ =C2=A0 =C2=A0SNVS_LPSRTCLR =3D 0x0= 54, /* Secure Real Time Counter LSB Register */
=C2=A0};
=C2=A0
= =C2=A0#define TYPE_IMX7_SNVS "imx7.snvs"
@@ -31,6 +33,9 @@ str= uct IMX7SNVSState {
=C2=A0 =C2=A0 =C2=A0SysBusDevice parent_obj;
=C2= =A0
=C2=A0 =C2=A0 =C2=A0MemoryRegion mmio;
+
+ =C2=A0 =C2=A0uint64= _t tick_offset;
+ =C2=A0 =C2=A0uint64_t lpcr;
=C2=A0};
=C2=A0
= =C2=A0#endif /* IMX7_SNVS_H */
--
2.34.1

--000000000000526a25060c76e0ec--