Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp1586298ybc; Sun, 17 Nov 2019 03:11:46 -0800 (PST) X-Google-Smtp-Source: APXvYqwXFYPKqEngGTyLTG1YQ5pvfLHXc4AibMY5CLG5xcpyVouX7pcPuyad/tXD3MmxZwjlMzjk X-Received: by 2002:a17:906:edd2:: with SMTP id sb18mr17771993ejb.112.1573989106761; Sun, 17 Nov 2019 03:11:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573989106; cv=none; d=google.com; s=arc-20160816; b=bwHo0XinUnVrpBK1jweOIXtmfDeoXYLXhl68j6sZZkjZ3hfmaqdBkQx1ZMKw7xaoKy wnk7CrrG4g7B52QY/RP5UV9x6fBUoCoWEDOAov285kofsp8p5qhSeF2/5STkcJLL7/tn 8FV8bpaCNLO/C/Wbb/gwzWpBf723e5kvDiMYTt42NS3dg6vS6mjM6+dkk0myp/rFo8tk xu/pox7msrbzk9jc2uX182xSYzIGOf9GakypwC75g46AeojDg7BkwuzvhRf/DKKiPq3m 1cbF025FWiA7jCGT+zNzD20gwoTJGAUpl6HVXYIKXhp3BEgEnjko4wPKkaHXTrnkrsOf z7KA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:message-id :subject:cc:to:from:date; bh=OslCLXz26yU6Yic7f2HKtiPLn8IvdUtArvVnSZvlyPI=; b=izzefqxJRYqfpSu86jnJtUaLUL3z0O+QwGiovUunXP/nbVQLbuvN9VkJXDGVkpk9HI tNQUa9rlp2WQCW0jn4sGrFW59XQchRoNWUtsYR3eUN6K5doaW8tRND35kLMfJq4WMZIw RJ4NPztGVOjLW+K0CyZa2gZrj0S28aggr7QzEVzAVooB4XFhrp7abj7gwPtsZqGxVFaU uOQQWkJIwiA4A+pVg/opNd/ePfrB8JG1MwDD4Cr0elLaUbd0Run78sdDdiq8tMoOxXcG kBZ5lswLYZz1MKytiQPTV7uZ5mPxd3IZLL8+Rqg6I6b4lcbYnlKqCXhRklKyt1JR3kfH RZ6Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w15si8975680ejb.226.2019.11.17.03.11.21; Sun, 17 Nov 2019 03:11:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726151AbfKQLKP (ORCPT + 99 others); Sun, 17 Nov 2019 06:10:15 -0500 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:39892 "EHLO mail3-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725974AbfKQLKP (ORCPT ); Sun, 17 Nov 2019 06:10:15 -0500 X-IronPort-AV: E=Sophos;i="5.68,316,1569276000"; d="scan'208";a="327005452" Received: from abo-228-123-68.mrs.modulonet.fr (HELO hadrien) ([85.68.123.228]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Nov 2019 12:10:05 +0100 Date: Sun, 17 Nov 2019 12:10:04 +0100 (CET) From: Julia Lawall X-X-Sender: jll@hadrien To: Ravulapati Vishnu vardhan rao cc: Alexander.Deucher@amd.com, djkurtz@google.com, Akshu.Agrawal@amd.com, Ravulapati Vishnu vardhan rao , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Vijendar Mukunda , Maruthi Bayyavarapu , Colin Ian King , YueHaibing , Kuninori Morimoto , Sanju R Mehta , Dan Carpenter , "moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." , open list , kbuild-all@lists.01.org Subject: Re: [RESEND PATCH v5 6/6] ASoC: amd: Added ACP3x system resume and runtime pm (fwd) Message-ID: User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Line 179 needs to cleanup everything that needed to be cleaned up in the previous error handling code (line 173) as well as adding an iounmap. But maybe you could have used a devm function to avoid the need for the iounmap. Also functions should have blank lines between them. That is why this report contains lots of function definitions, and not just the one with the problem. julia ---------- Forwarded message ---------- Date: Sun, 17 Nov 2019 13:55:47 +0800 From: kbuild test robot To: kbuild@lists.01.org Cc: Julia Lawall Subject: Re: [RESEND PATCH v5 6/6] ASoC: amd: Added ACP3x system resume and runtime pm CC: kbuild-all@lists.01.org In-Reply-To: <1573629249-13272-7-git-send-email-Vishnuvardhanrao.Ravulapati@amd.com> References: <1573629249-13272-7-git-send-email-Vishnuvardhanrao.Ravulapati@amd.com> CC: Hi Ravulapati, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on asoc/for-next] [cannot apply to v5.4-rc7 next-20191115] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Ravulapati-Vishnu-vardhan-rao/ASoC-amd-Create-multiple-I2S-platform-device-Endpoint/20191113-230604 base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next :::::: branch date: 4 days ago :::::: commit date: 4 days ago If you fix the issue, kindly add following tag Reported-by: kbuild test robot Reported-by: Julia Lawall >> sound/soc/amd/raven/pci-acp3x.c:179:2-8: ERROR: missing iounmap; ioremap on line 170 and execution via conditional on line 178 # https://github.com/0day-ci/linux/commit/bfd341330019202bd0a17caa808937c88d536e58 git remote add linux-review https://github.com/0day-ci/linux git remote update linux-review git checkout bfd341330019202bd0a17caa808937c88d536e58 vim +179 sound/soc/amd/raven/pci-acp3x.c e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 24 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 25 static int acp3x_power_on(void __iomem *acp3x_base) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 26 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 27 u32 val; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 28 u32 timeout = 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 29 int ret = 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 30 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 31 val = rv_readl(acp3x_base + mmACP_PGFSM_STATUS); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 32 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 33 if (val == 0) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 34 return val; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 35 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 36 if (!((val & ACP_PGFSM_STATUS_MASK) == bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 37 ACP_POWER_ON_IN_PROGRESS)) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 38 rv_writel(ACP_PGFSM_CNTL_POWER_ON_MASK, bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 39 acp3x_base + mmACP_PGFSM_CONTROL); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 40 while (++timeout < DELAY) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 41 val = rv_readl(acp3x_base + mmACP_PGFSM_STATUS); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 42 if (!val) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 43 break; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 44 udelay(1); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 45 if (timeout > 500) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 46 pr_err("ACP is Not Powered ON\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 47 return -ETIMEDOUT; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 48 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 49 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 50 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 51 static int acp3x_power_off(void __iomem *acp3x_base) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 52 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 53 u32 val; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 54 u32 timeout = 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 55 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 56 rv_writel(ACP_PGFSM_CNTL_POWER_OFF_MASK, bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 57 acp3x_base + mmACP_PGFSM_CONTROL); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 58 while (++timeout < DELAY) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 59 val = rv_readl(acp3x_base + mmACP_PGFSM_STATUS); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 60 if ((val & ACP_PGFSM_STATUS_MASK) == ACP_POWERED_OFF) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 61 return 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 62 udelay(1); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 63 if (timeout > 500) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 64 pr_err("ACP is Not Powered OFF\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 65 return -ETIMEDOUT; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 66 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 67 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 68 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 69 static int acp3x_reset(void __iomem *acp3x_base) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 70 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 71 u32 val, timeout; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 72 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 73 rv_writel(1, acp3x_base + mmACP_SOFT_RESET); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 74 timeout = 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 75 while (++timeout < DELAY) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 76 val = rv_readl(acp3x_base + mmACP_SOFT_RESET); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 77 if ((val & ACP3x_SOFT_RESET__SoftResetAudDone_MASK) || bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 78 timeout > 100) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 79 if (val & ACP3x_SOFT_RESET__SoftResetAudDone_MASK) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 80 break; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 81 return -ENODEV; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 82 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 83 cpu_relax(); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 84 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 85 rv_writel(0, acp3x_base + mmACP_SOFT_RESET); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 86 timeout = 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 87 while (++timeout < DELAY) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 88 val = rv_readl(acp3x_base + mmACP_SOFT_RESET); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 89 if (!val) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 90 break; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 91 if (timeout > 100) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 92 return -ENODEV; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 93 cpu_relax(); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 94 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 95 return 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 96 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 97 static int acp3x_init(void __iomem *acp3x_base) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 98 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 99 int ret; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 100 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 101 /* power on */ bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 102 ret = acp3x_power_on(acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 103 if (ret) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 104 pr_err("ACP3x power on failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 105 return ret; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 106 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 107 /* Reset */ bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 108 ret = acp3x_reset(acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 109 if (ret) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 110 pr_err("ACP3x reset failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 111 return ret; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 112 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 113 return 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 114 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 115 static int acp3x_deinit(void __iomem *acp3x_base) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 116 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 117 int ret; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 118 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 119 /* Reset */ bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 120 ret = acp3x_reset(acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 121 if (ret) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 122 pr_err("ACP3x reset failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 123 return ret; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 124 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 125 /* power off */ bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 126 ret = acp3x_power_off(acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 127 if (ret) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 128 pr_err("ACP3x power off failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 129 return ret; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 130 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 131 return 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 132 } e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 133 static int snd_acp3x_probe(struct pci_dev *pci, e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 134 const struct pci_device_id *pci_id) e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 135 { e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 136 int ret; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 137 u32 addr, val, i; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 138 struct acp3x_dev_data *adata; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 139 struct platform_device_info pdevinfo[ACP3x_DEVS]; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 140 unsigned int irqflags; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 141 e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 142 if (pci_enable_device(pci)) { e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 143 dev_err(&pci->dev, "pci_enable_device failed\n"); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 144 return -ENODEV; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 145 } e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 146 e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 147 ret = pci_request_regions(pci, "AMD ACP3x audio"); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 148 if (ret < 0) { e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 149 dev_err(&pci->dev, "pci_request_regions failed\n"); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 150 goto disable_pci; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 151 } e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 152 e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 153 adata = devm_kzalloc(&pci->dev, sizeof(struct acp3x_dev_data), e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 154 GFP_KERNEL); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 155 if (!adata) { e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 156 ret = -ENOMEM; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 157 goto release_regions; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 158 } e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 159 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 160 /* check for msi interrupt support */ 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 161 ret = pci_enable_msi(pci); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 162 if (ret) 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 163 /* msi is not enabled */ 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 164 irqflags = IRQF_SHARED; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 165 else 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 166 /* msi is enabled */ 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 167 irqflags = 0; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 168 e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 169 addr = pci_resource_start(pci, 0); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 @170 adata->acp3x_base = ioremap(addr, pci_resource_len(pci, 0)); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 171 if (!adata->acp3x_base) { e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 172 ret = -ENOMEM; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 173 goto release_regions; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 174 } e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 175 pci_set_master(pci); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 176 pci_set_drvdata(pci, adata); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 177 ret = acp3x_init(adata->acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 @178 if (ret) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 @179 return -ENODEV; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 180 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 181 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 182 val = rv_readl(adata->acp3x_base + mmACP_I2S_PIN_CONFIG); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 183 switch (val) { 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 184 case I2S_MODE: 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 185 adata->res = devm_kzalloc(&pci->dev, 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 186 sizeof(struct resource) * 4, 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 187 GFP_KERNEL); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 188 if (!adata->res) { 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 189 ret = -ENOMEM; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 190 goto unmap_mmio; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 191 } 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 192 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 193 adata->res[0].name = "acp3x_i2s_iomem"; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 194 adata->res[0].flags = IORESOURCE_MEM; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 195 adata->res[0].start = addr; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 196 adata->res[0].end = addr + (ACP3x_REG_END - ACP3x_REG_START); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 197 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 198 adata->res[1].name = "acp3x_i2s_sp"; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 199 adata->res[1].flags = IORESOURCE_MEM; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 200 adata->res[1].start = addr + ACP3x_I2STDM_REG_START; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 201 adata->res[1].end = addr + ACP3x_I2STDM_REG_END; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 202 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 203 adata->res[2].name = "acp3x_i2s_bt"; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 204 adata->res[2].flags = IORESOURCE_MEM; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 205 adata->res[2].start = addr + ACP3x_BT_TDM_REG_START; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 206 adata->res[2].end = addr + ACP3x_BT_TDM_REG_END; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 207 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 208 adata->res[3].name = "acp3x_i2s_irq"; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 209 adata->res[3].flags = IORESOURCE_IRQ; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 210 adata->res[3].start = pci->irq; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 211 adata->res[3].end = adata->res[3].start; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 212 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 213 adata->acp3x_audio_mode = ACP3x_I2S_MODE; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 214 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 215 memset(&pdevinfo, 0, sizeof(pdevinfo)); 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 216 pdevinfo[0].name = "acp3x_rv_i2s_dma"; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 217 pdevinfo[0].id = 0; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 218 pdevinfo[0].parent = &pci->dev; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 219 pdevinfo[0].num_res = 4; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 220 pdevinfo[0].res = &adata->res[0]; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 221 pdevinfo[0].data = &irqflags; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 222 pdevinfo[0].size_data = sizeof(irqflags); 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 223 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 224 pdevinfo[1].name = "acp3x_i2s_playcap"; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 225 pdevinfo[1].id = 0; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 226 pdevinfo[1].parent = &pci->dev; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 227 pdevinfo[1].num_res = 1; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 228 pdevinfo[1].res = &adata->res[1]; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 229 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 230 pdevinfo[2].name = "acp3x_i2s_playcap"; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 231 pdevinfo[2].id = 1; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 232 pdevinfo[2].parent = &pci->dev; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 233 pdevinfo[2].num_res = 1; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 234 pdevinfo[2].res = &adata->res[2]; 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 235 for (i = 0; i < ACP3x_DEVS ; i++) { 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 236 adata->pdev[i] = 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 237 platform_device_register_full(&pdevinfo[i]); 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 238 if (IS_ERR(adata->pdev[i])) { 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 239 dev_err(&pci->dev, "cannot register %s device\n", 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 240 pdevinfo[i].name); 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 241 ret = PTR_ERR(adata->pdev[i]); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 242 goto unmap_mmio; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 243 } 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 244 } 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 245 break; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 246 default: 00347e4ea8ca4c Colin Ian King 2018-11-16 247 dev_err(&pci->dev, "Invalid ACP audio mode : %d\n", val); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 248 ret = -ENODEV; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 249 goto unmap_mmio; 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 250 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 251 pm_runtime_set_autosuspend_delay(&pci->dev, 10000); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 252 pm_runtime_use_autosuspend(&pci->dev); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 253 pm_runtime_set_active(&pci->dev); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 254 pm_runtime_put_noidle(&pci->dev); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 255 pm_runtime_enable(&pci->dev); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 256 return 0; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 257 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 258 unmap_mmio: bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 259 ret = acp3x_deinit(adata->acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 260 if (ret) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 261 dev_err(&pci->dev, "ACP de-init failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 262 else bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 263 dev_info(&pci->dev, "ACP de-initialized\n"); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 264 pci_disable_msi(pci); 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 265 for (i = 0 ; i < ACP3x_DEVS ; i++) 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 266 platform_device_unregister(adata->pdev[i]); 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 267 kfree(adata->res); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 268 iounmap(adata->acp3x_base); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 269 release_regions: e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 270 pci_release_regions(pci); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 271 disable_pci: e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 272 pci_disable_device(pci); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 273 e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 274 return ret; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 275 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 276 static int snd_acp3x_suspend(struct device *dev) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 277 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 278 int status; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 279 struct acp3x_dev_data *adata = dev_get_drvdata(dev); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 280 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 281 status = acp3x_deinit(adata->acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 282 if (status) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 283 dev_err(dev, "ACP de-init failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 284 else bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 285 dev_info(dev, "ACP de-initialized\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 286 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 287 return 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 288 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 289 static int snd_acp3x_resume(struct device *dev) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 290 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 291 int status; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 292 struct acp3x_dev_data *adata = dev_get_drvdata(dev); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 293 bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 294 status = acp3x_init(adata->acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 295 if (status) { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 296 dev_err(dev, "ACP init failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 297 return status; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 298 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 299 return 0; bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 300 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 301 static const struct dev_pm_ops acp3x_pm = { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 302 .runtime_suspend = snd_acp3x_suspend, bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 303 .runtime_resume = snd_acp3x_resume, bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 304 .resume = snd_acp3x_resume, bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 305 }; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 306 static void snd_acp3x_remove(struct pci_dev *pci) e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 307 { bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 308 int i, ret; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 309 struct acp3x_dev_data *adata = pci_get_drvdata(pci); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 310 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 311 if (adata->acp3x_audio_mode == ACP3x_I2S_MODE) { 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 312 for (i = 0 ; i < ACP3x_DEVS ; i++) 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 313 platform_device_unregister(adata->pdev[i]); 79701559637a30 Ravulapati Vishnu vardhan rao 2019-11-13 314 } bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 315 ret = acp3x_deinit(adata->acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 316 if (ret) bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 317 dev_err(&pci->dev, "ACP de-init failed\n"); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 318 else bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 319 dev_info(&pci->dev, "ACP de-initialized\n"); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 320 iounmap(adata->acp3x_base); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 321 pm_runtime_disable(&pci->dev); bfd34133001920 Ravulapati Vishnu vardhan rao 2019-11-13 322 pm_runtime_get_noresume(&pci->dev); 7894a7e7ea3de6 Vijendar Mukunda 2018-11-12 323 pci_disable_msi(pci); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 324 pci_release_regions(pci); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 325 pci_disable_device(pci); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 326 } e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 327 static const struct pci_device_id snd_acp3x_ids[] = { e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 328 { PCI_DEVICE(PCI_VENDOR_ID_AMD, 0x15e2), e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 329 .class = PCI_CLASS_MULTIMEDIA_OTHER << 8, e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 330 .class_mask = 0xffffff }, e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 331 { 0, }, e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 332 }; e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 333 MODULE_DEVICE_TABLE(pci, snd_acp3x_ids); e30d9128def6ca Maruthi Srinivas Bayyavarapu 2018-11-12 334 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation