diff mbox series

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

Message ID 20230811112116.2279419-3-Shyam-sundar.S-k@amd.com (mailing list archive)
State Changes Requested, archived
Headers show
Series Updates to amd-pmc driver | expand

Commit Message

Shyam Sundar S K Aug. 11, 2023, 11:21 a.m. UTC
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@amd.com>
Signed-off-by: Sanket Goswami <Sanket.Goswami@amd.com>
Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
---
 drivers/platform/x86/amd/pmc/pmc.c | 39 +++++-------------------------
 1 file changed, 6 insertions(+), 33 deletions(-)

Comments

Mario Limonciello Aug. 11, 2023, 12:04 p.m. UTC | #1
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@amd.com>
> Signed-off-by: Sanket Goswami <Sanket.Goswami@amd.com>
> Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
> ---
>   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)
Shyam Sundar S K Aug. 22, 2023, 4:05 a.m. UTC | #2
Hi Mario,

On 8/11/2023 5:34 PM, Limonciello, Mario wrote:
> 
> 
> 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@amd.com>
>> Signed-off-by: Sanket Goswami <Sanket.Goswami@amd.com>
>> Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
>> ---
>>   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.

Apologies. I missed to respond back on this. I will drop this patch in v2.

Thanks,
Shyam

> 
>> 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)
diff mbox series

Patch

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)