Re: [PATCH 2/4] platform/x86/amd/pmc: Read SMU version at the time of probe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 8/11/2023 6:21 AM, Shyam Sundar S K wrote:
Currently the SMU version is being read at multiple places, unify all
of them and get the SMU version at the time of probe.

Co-developed-by: Sanket Goswami <Sanket.Goswami@xxxxxxx>
Signed-off-by: Sanket Goswami <Sanket.Goswami@xxxxxxx>
Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@xxxxxxx>
---
  drivers/platform/x86/amd/pmc/pmc.c | 39 +++++-------------------------
  1 file changed, 6 insertions(+), 33 deletions(-)


It's actually quite intentional that the SMU version isn't read at probe but rather at first use. The reason is that it increased boot time in a measurable way.

diff --git a/drivers/platform/x86/amd/pmc/pmc.c b/drivers/platform/x86/amd/pmc/pmc.c
index c1e788b67a74..043451fabbbe 100644
--- a/drivers/platform/x86/amd/pmc/pmc.c
+++ b/drivers/platform/x86/amd/pmc/pmc.c
@@ -405,12 +405,6 @@ static ssize_t smu_fw_version_show(struct device *d, struct device_attribute *at
  {
  	struct amd_pmc_dev *dev = dev_get_drvdata(d);
- if (!dev->major) {
-		int rc = amd_pmc_get_smu_version(dev);
-
-		if (rc)
-			return rc;
-	}
  	return sysfs_emit(buf, "%u.%u.%u\n", dev->major, dev->minor, dev->rev);
  }
@@ -419,12 +413,6 @@ static ssize_t smu_program_show(struct device *d, struct device_attribute *attr,
  {
  	struct amd_pmc_dev *dev = dev_get_drvdata(d);
- if (!dev->major) {
-		int rc = amd_pmc_get_smu_version(dev);
-
-		if (rc)
-			return rc;
-	}
  	return sysfs_emit(buf, "%u\n", dev->smu_program);
  }
@@ -526,16 +514,9 @@ static int amd_pmc_idlemask_read(struct amd_pmc_dev *pdev, struct device *dev,
  				 struct seq_file *s)
  {
  	u32 val;
-	int rc;
switch (pdev->cpu_id) {
  	case AMD_CPU_ID_CZN:
-		/* we haven't yet read SMU version */
-		if (!pdev->major) {
-			rc = amd_pmc_get_smu_version(pdev);
-			if (rc)
-				return rc;
-		}
  		if (pdev->major > 56 || (pdev->major >= 55 && pdev->minor >= 37))
  			val = amd_pmc_reg_read(pdev, AMD_PMC_SCRATCH_REG_CZN);
  		else
@@ -717,13 +698,6 @@ static int amd_pmc_get_os_hint(struct amd_pmc_dev *dev)
  static int amd_pmc_czn_wa_irq1(struct amd_pmc_dev *pdev)
  {
  	struct device *d;
-	int rc;
-
-	if (!pdev->major) {
-		rc = amd_pmc_get_smu_version(pdev);
-		if (rc)
-			return rc;
-	}
if (pdev->major > 64 || (pdev->major == 64 && pdev->minor > 65))
  		return 0;
@@ -749,13 +723,6 @@ static int amd_pmc_verify_czn_rtc(struct amd_pmc_dev *pdev, u32 *arg)
  	struct rtc_time tm;
  	int rc;
- /* we haven't yet read SMU version */
-	if (!pdev->major) {
-		rc = amd_pmc_get_smu_version(pdev);
-		if (rc)
-			return rc;
-	}
-
  	if (pdev->major < 64 || (pdev->major == 64 && pdev->minor < 53))
  		return 0;
@@ -1059,6 +1026,12 @@ static int amd_pmc_probe(struct platform_device *pdev) mutex_init(&dev->lock); + err = amd_pmc_get_smu_version(dev);
+	if (err) {
+		dev_err(dev->dev, "error reading SMU version\n");
+		goto err_pci_dev_put;
+	}
+
  	if (enable_stb && amd_pmc_is_stb_supported(dev)) {
  		err = amd_pmc_s2d_init(dev);
  		if (err)



[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux