Received: by 2002:a05:7412:bc1a:b0:d7:7d3a:4fe2 with SMTP id ki26csp525397rdb; Sat, 19 Aug 2023 11:19:26 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGcxpwmmu/EQOb9z5dsxYZXa6/IPkOn+7acA2t5R6TQy91E4bAp2mfbePen6hQ+jAqsx1XW X-Received: by 2002:a17:903:32ca:b0:1af:e302:123 with SMTP id i10-20020a17090332ca00b001afe3020123mr4633511plr.3.1692469166346; Sat, 19 Aug 2023 11:19:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692469166; cv=none; d=google.com; s=arc-20160816; b=DFCKlmlpEdZUDsR3cWZ4ie8IJBwrjR8vTgBjRONThNE73kR6J3QVjv4Y7rkKk6r2dX x8BbIQYpe38wZEEZMGj7DES4fse+NMQB2DglyfgPm+uZZZhOEOReeJihuE9v57B7Un51 gtVouk4QeTWaozAsa5rqOfLmeEItdHUQ+Dh/OpBMEqc5dkec0o1Gtgo4E5g0NNCZQeeC /RkGNK0vMFCR0fN/vekF9T76+00lWuyHRBV2GhrAzxfsWaFS+dY8l7wVDvkvRuJaCcso zCDampPbhlTsLL9J3tAE13rbcVI4VAdvKWCHsP+aZn3+FwDlLhWzvyPErmfMs35Vr423 A0yA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=rPu9EybHcv+f53uItq5HW0DqxX8IdZv8teFDMaig/ZU=; fh=IXxqYk7qmUHKos9p7h2PKoRb5vxrhrn9gzi7Cjq8Uzw=; b=aGsewoSlS4IEuBTndp+LGMQIIxBlzIecMkTSXGWY+rymcTkGPMSA1Xlr6QEZbuWzm8 RsgGvC2BVojoOETimrk9IFfazFn/anT1f/KjHdSn7sUL2Qb2ZvQQQ9lyoTD6/kmn553e qStNr02hq5sKPoiURgpqq1SIRR/CicvGJ6Qrvu3nSIZvUD7yLLnBENdfckMT7vYzzkop RDlM8n1svuLOb7vHivFhfptW+FBl6Y5yUbyx/BOH0KyolbhTH0W7RfMLakmLbD0mNd5o aSEMuZ6hj75rRWIvuT6Hc/mp95s8qCQ0Vnm7MJZNScJOPNRA9d+McBrGcJ6f5OxoAXfi v2dQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sifive.com header.s=google header.b=GAaINHUg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=sifive.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id je3-20020a170903264300b001bbab2e5a27si3677421plb.290.2023.08.19.11.19.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Aug 2023 11:19:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@sifive.com header.s=google header.b=GAaINHUg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=sifive.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 9AB5A32E5D; Sat, 19 Aug 2023 01:29:00 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241695AbjHPDsl (ORCPT + 99 others); Tue, 15 Aug 2023 23:48:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60116 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241801AbjHPDsT (ORCPT ); Tue, 15 Aug 2023 23:48:19 -0400 Received: from mail-pg1-x532.google.com (mail-pg1-x532.google.com [IPv6:2607:f8b0:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DC7AF3A81 for ; Tue, 15 Aug 2023 20:40:14 -0700 (PDT) Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-565f24a5c20so277842a12.1 for ; Tue, 15 Aug 2023 20:40:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1692157214; x=1692762014; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=rPu9EybHcv+f53uItq5HW0DqxX8IdZv8teFDMaig/ZU=; b=GAaINHUgKkTiffbKFeyXGI3ArOVCLgHFwm6+07G8C/STkypzCHvDKQ56rHHIqsMPXN PwL04sykxFggY55dLFzQONd53BheUBhhUEjJJiBzdR82K1yjSRhF00bZVxgtTP1MvCol jZsFJrssJmRleYvplUDv4i8FbAXE5eCRC2tgNF/nEZSj9Vd4xUoIjJesdmKxrFdv7Cij Xo74xb8lxqSKUVCioIvLDw9mfG/wS74O90H2PvUWmEM12+GFUdRpY68eeeK+cIiZJsDf hfgnV/QEdapc5qO+rP39B5ynQKZND0jQlhmXy629b6hkosSvumrfO5CVogxgimUp3sAI 5VLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692157214; x=1692762014; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rPu9EybHcv+f53uItq5HW0DqxX8IdZv8teFDMaig/ZU=; b=K4wE31IxooYunw8jDV99sQf+yu8inftoqxNu51NiCQD9PYI9MC/1IuaeRVF3emnzEW mpZBu39pyLcBhzt+bO4HIh6PB+NjO/m65kuYx4RMd9XsE0gg8KBqDweztZ8smcCThjKE DE0NCfcfBNooGwsW0mvygepemJMoN9cgFoMrsb2BaOIu08g9DgKXSF+n58ujpX43W/UL r5d9sOdEI7tbS76jvnWE95HEkisBIkx8FG5YUbB7M8DPsT5uV3PCWCpwsVb7bShmnC8o uuaZOZB6kdU2MeWfH7nQZbx5EQioJT0NGxDEtA72iDjb0w954We6KzdL7b0Aq68Ks5W5 xoCQ== X-Gm-Message-State: AOJu0YxmsRiBvz5xQVlLyeVpZK9zPDyUdB10pHWrIBX/xymTF63L4ol8 BcEAC/AtnWS9ZYD4B7S2EMCb8w== X-Received: by 2002:a17:90a:9386:b0:26b:69c1:9a6a with SMTP id q6-20020a17090a938600b0026b69c19a6amr4775690pjo.20.1692157214230; Tue, 15 Aug 2023 20:40:14 -0700 (PDT) Received: from work.. (1-161-171-111.dynamic-ip.hinet.net. [1.161.171.111]) by smtp.gmail.com with ESMTPSA id g14-20020a170902868e00b001b9dab0397bsm11796274plo.29.2023.08.15.20.40.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Aug 2023 20:40:13 -0700 (PDT) From: Nick Hu To: nick.hu@sifive.com, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, ajones@ventanamicro.com, mason.huo@starfivetech.com, jeeheng.sia@starfivetech.com, conor.dooley@microchip.com, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Andy Chiu Subject: [PATCH] riscv: suspend: Add syscore ops for suspend Date: Wed, 16 Aug 2023 11:40:09 +0800 Message-Id: <20230816034009.2614866-1-nick.hu@sifive.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Save and restore the FPU and vector states when system suspend. If a task is the one who performs the suspend flow and it also do some floating or vector operations before the suspend, we should save and restore the FPU states and vector states for this task. Signed-off-by: Nick Hu Signed-off-by: Andy Chiu --- arch/riscv/kernel/suspend.c | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/arch/riscv/kernel/suspend.c b/arch/riscv/kernel/suspend.c index 3c89b8ec69c4..ff69ff8a1974 100644 --- a/arch/riscv/kernel/suspend.c +++ b/arch/riscv/kernel/suspend.c @@ -4,9 +4,14 @@ * Copyright (c) 2022 Ventana Micro Systems Inc. */ +#include #include +#include +#include #include #include +#include +#include void suspend_save_csrs(struct suspend_context *context) { @@ -85,3 +90,43 @@ int cpu_suspend(unsigned long arg, return rc; } + +static int riscv_cpu_suspend(void) +{ + struct task_struct *cur_task = get_current(); + struct pt_regs *regs = task_pt_regs(cur_task); + + if (has_fpu()) { + if (unlikely(regs->status & SR_SD)) + fstate_save(cur_task, regs); + } + if (has_vector()) { + if (unlikely(regs->status & SR_SD)) + riscv_v_vstate_save(cur_task, regs); + } + + return 0; +} + +static void riscv_cpu_resume(void) +{ + struct task_struct *cur_task = get_current(); + struct pt_regs *regs = task_pt_regs(cur_task); + + if (has_fpu()) + fstate_restore(cur_task, regs); + if (has_vector()) + riscv_v_vstate_restore(cur_task, regs); +} + +static struct syscore_ops riscv_cpu_syscore_ops = { + .suspend = riscv_cpu_suspend, + .resume = riscv_cpu_resume, +}; + +static int __init riscv_cpu_suspend_init(void) +{ + register_syscore_ops(&riscv_cpu_syscore_ops); + return 0; +} +arch_initcall(riscv_cpu_suspend_init); -- 2.34.1