Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp1762543ybh; Mon, 20 Jul 2020 06:40:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwDxCPyydxz3OF+BCDcA/dVdbdCYTnJj70AaIxWGHGT/5azecZ5JuvL5fB69ZtFH4uqS1RK X-Received: by 2002:a17:906:5006:: with SMTP id s6mr20480219ejj.294.1595252427174; Mon, 20 Jul 2020 06:40:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595252427; cv=none; d=google.com; s=arc-20160816; b=U5urfjPm4QG4jFqxS0hlkBFs32POJDc8Gm9Vma7ZR59+UN+jc2EqqB+zvP/7d0Crv0 fBIWXt+ca/rUduII7dSAXhkxBaV0OEv2ETehGyhDeNQ8KKA421o+pej/uwJPkWhtksGK jK0XdJDeYZhPLcDNNoZM4t6JDOjmQn5+QehE03lpltyOSd1IECfFZHUKCkwJCkFU4sxb sTRp8pp9g3VSaon7erzVWOKCPBrXxt0GTZ7CYw6bzcFJcUFDZVKnyEKgWmfo2iLphbGG brlJ5su39KNTjawWxbCpCkUP4x9ZqRYYaAHW68mdJ3g/UEvXFzmDQsR8S/53n9YvCvJR 92Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/GCE+/FYllLy+TOYN4GoKJYK0VrKnaCYbpKeP52SQWs=; b=OnQkuHmsojMaV9a4Qrt8+sk40dnheFQu1xDBd7ZZh0gSBHtN9lCbmW2iB+2EcWsT1n 8VaiTqMxj12QivWJOiUMpsUoZFXrpOkAUC0nz7jinrJWzERh0IJvUoR/6gkIH5tIm+YK Mq0tqaTC0boNgk7A4F3m92N5lMcJEpUtK0UAQanhPhDRYMwqxl+50pjHivcIK/f93+bM p/tk2ugZGDfEc+M6GZpjWBmqlR8Vs9VbQRJro3LGOm/6i5bNdd/ztA3B3i32oZ5v58zM CcG+G5sA6fNW5cxKwG72JlEIfsmLZ3hZAeTY7F4HGjfTdh/bxjFllqQOTRGMyPttuF6g LBdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=B4d1TREX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z14si10410883ejw.332.2020.07.20.06.40.04; Mon, 20 Jul 2020 06:40:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=B4d1TREX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728513AbgGTNjB (ORCPT + 99 others); Mon, 20 Jul 2020 09:39:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725936AbgGTNjA (ORCPT ); Mon, 20 Jul 2020 09:39:00 -0400 Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BE181C061794; Mon, 20 Jul 2020 06:39:00 -0700 (PDT) Received: by mail-pj1-x1043.google.com with SMTP id cv18so20057pjb.1; Mon, 20 Jul 2020 06:39:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/GCE+/FYllLy+TOYN4GoKJYK0VrKnaCYbpKeP52SQWs=; b=B4d1TREXa82wCs/PkGf2EtZXnwSbBF7lnkjsfFG899yjLCIslSm8vr/8QoCgqhEGzD RQJGDWJI9+a7L55TWMRqfJ2lw4RDUsgsP/CZvIpC50MEVIZnRCT9mgFLddaY9IM4NKWz Z0ENStkmaDZLIty06C/19kkdK4p82VbPsu2kzHu5YvKPfiTwdwuaZ9ghmifsySCYKF/w kE3uCEew70Ecd7qQuJar3kzChYsRBGPIviXL7HMGfun2fJHC1Y1Jd+z5p/OEEIrorLyo rwC/LMyR3ETryPNIeOwc2HLpRgs04sjlVC/sge7+fjZcft/rjT6QbMmK0Uo8Wi3vjsn4 9MYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/GCE+/FYllLy+TOYN4GoKJYK0VrKnaCYbpKeP52SQWs=; b=rRVvVsgq0Q4zoLwo9ujYdmiU0d4hUkb/DUezjk6oNEu5eiaPjcsdblpCQ5gzTXM2hm h5VCKXPt0pZDcWoIIPv+xykb74W28kxhsSFSHokUdkvN0iYZq2FK7Vj/cSvnsnEJlfmM BEfpXhDSzIu5A0G/mMB3U+wL91NpNiwotT7wA2T0F12HNMlkIbqZy+8OApoH19w/oEHZ AWYpdj6Dnudo+YUhd0BufIcTOEFdixb35wlxHwDOQ122WFte1UK5x32dmTZj84HGCvft uYhTvEPJ3yjS6PcqDfMhm1sd27YBD/hG83sim2NAbhB2o686UC28WxUshaUTmFuiSA8H 4o3w== X-Gm-Message-State: AOAM5339WucrppBnKdzQgBLhWc6RDLZWErKLJi3yE8UuNRZvTGLhRaVJ gH1y0aAUQREBNVzyNacIOgE= X-Received: by 2002:a17:902:e903:: with SMTP id k3mr18223253pld.148.1595252340209; Mon, 20 Jul 2020 06:39:00 -0700 (PDT) Received: from varodek.iballbatonwifi.com ([103.105.153.67]) by smtp.gmail.com with ESMTPSA id s6sm17042183pfd.20.2020.07.20.06.38.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Jul 2020 06:38:59 -0700 (PDT) From: Vaibhav Gupta To: Bjorn Helgaas , Bjorn Helgaas , Bjorn Helgaas , Vaibhav Gupta , Adam Radford , "James E.J. Bottomley" , "Martin K. Petersen" , Adaptec OEM Raid Solutions , Hannes Reinecke , Bradley Grove , John Garry , Don Brace , James Smart , Dick Kennedy , Kashyap Desai , Sumit Saxena , Shivasharan S , Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani , Jack Wang Cc: Vaibhav Gupta , Shuah Khan , linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linuxfoundation.org, linux-scsi@vger.kernel.org, esc.storagedev@microsemi.com, megaraidlinux.pdl@broadcom.com, MPT-FusionLinux.pdl@broadcom.com Subject: [PATCH v2 15/15] scsi: pmcraid: use generic power management Date: Mon, 20 Jul 2020 19:04:28 +0530 Message-Id: <20200720133427.454400-16-vaibhavgupta40@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200720133427.454400-1-vaibhavgupta40@gmail.com> References: <20200720133427.454400-1-vaibhavgupta40@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Drivers using legacy PM have to manage PCI states and device's PM states themselves. They also need to take care of configuration registers. With improved and powerful support of generic PM, PCI Core takes care of above mentioned, device-independent, jobs. This driver makes use of PCI helper functions like pci_save/restore_state(), pci_enable/disable_device(), pci_set_power_state() and to do required operations. In generic mode, they are no longer needed. Change function parameter in both .suspend() and .resume() to "struct device*" type. Use to_pci_dev() to get "struct pci_dev*" variable. In function pmcraid_resume(), earlier, the variable "rc" was set by pci_enable_device() which is now removed. Since PCI core does the required job, initialize "rc" with 0 value when declaring it. Compile-tested only. Signed-off-by: Vaibhav Gupta --- drivers/scsi/pmcraid.c | 44 +++++++++++------------------------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c index aa9ae2ae8579..b6b70ac2e2ee 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c @@ -5237,54 +5237,39 @@ static void pmcraid_remove(struct pci_dev *pdev) return; } -#ifdef CONFIG_PM /** * pmcraid_suspend - driver suspend entry point for power management - * @pdev: PCI device structure - * @state: PCI power state to suspend routine + * @dev: Device structure * * Return Value - 0 always */ -static int pmcraid_suspend(struct pci_dev *pdev, pm_message_t state) +static int __maybe_unused pmcraid_suspend(struct device *dev) { + struct pci_dev *pdev = to_pci_dev(dev); struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); pmcraid_shutdown(pdev); pmcraid_disable_interrupts(pinstance, ~0); pmcraid_kill_tasklets(pinstance); - pci_set_drvdata(pinstance->pdev, pinstance); pmcraid_unregister_interrupt_handler(pinstance); - pci_save_state(pdev); - pci_disable_device(pdev); - pci_set_power_state(pdev, pci_choose_state(pdev, state)); return 0; } /** * pmcraid_resume - driver resume entry point PCI power management - * @pdev: PCI device structure + * @dev: Device structure * * Return Value - 0 in case of success. Error code in case of any failure */ -static int pmcraid_resume(struct pci_dev *pdev) +static int __maybe_unused pmcraid_resume(struct device *dev) { + struct pci_dev *pdev = to_pci_dev(dev); struct pmcraid_instance *pinstance = pci_get_drvdata(pdev); struct Scsi_Host *host = pinstance->host; - int rc; - - pci_set_power_state(pdev, PCI_D0); - pci_enable_wake(pdev, PCI_D0, 0); - pci_restore_state(pdev); - - rc = pci_enable_device(pdev); - - if (rc) { - dev_err(&pdev->dev, "resume: Enable device failed\n"); - return rc; - } + int rc = 0; - pci_set_master(pdev); + device_wakeup_disable(dev); if (sizeof(dma_addr_t) == 4 || dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) @@ -5337,18 +5322,10 @@ static int pmcraid_resume(struct pci_dev *pdev) scsi_host_put(host); disable_device: - pci_disable_device(pdev); return rc; } -#else - -#define pmcraid_suspend NULL -#define pmcraid_resume NULL - -#endif /* CONFIG_PM */ - /** * pmcraid_complete_ioa_reset - Called by either timer or tasklet during * completion of the ioa reset @@ -5836,6 +5813,8 @@ static int pmcraid_probe(struct pci_dev *pdev, return -ENODEV; } +static SIMPLE_DEV_PM_OPS(pmcraid_pm_ops, pmcraid_suspend, pmcraid_resume); + /* * PCI driver structure of pmcraid driver */ @@ -5844,8 +5823,7 @@ static struct pci_driver pmcraid_driver = { .id_table = pmcraid_pci_table, .probe = pmcraid_probe, .remove = pmcraid_remove, - .suspend = pmcraid_suspend, - .resume = pmcraid_resume, + .driver.pm = &pmcraid_pm_ops, .shutdown = pmcraid_shutdown }; -- 2.27.0