[PATCH 1/3] platform/x86/intel/pmc: Change LPM mode fields to u8

Xi Pardee posted 3 patches 1 month, 3 weeks ago
There is a newer version of this series
[PATCH 1/3] platform/x86/intel/pmc: Change LPM mode fields to u8
Posted by Xi Pardee 1 month, 3 weeks ago
Change the datatypes pf num_lpm_modes and lpm_en_modes[] from int
to u8. The u8 type is more appropriate and improves the readability
and maintainability of the code.

Signed-off-by: Xi Pardee <xi.pardee@linux.intel.com>
---
 drivers/platform/x86/intel/pmc/core.c | 18 ++++++++++--------
 drivers/platform/x86/intel/pmc/core.h |  4 ++--
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c
index 7d7ae8a40b0ec..3e916228e7ed2 100644
--- a/drivers/platform/x86/intel/pmc/core.c
+++ b/drivers/platform/x86/intel/pmc/core.c
@@ -779,7 +779,7 @@ static int pmc_core_substate_res_show(struct seq_file *s, void *unused)
 	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
 	const int lpm_adj_x2 = pmc->map->lpm_res_counter_step_x2;
 	u32 offset = pmc->map->lpm_residency_offset;
-	int mode;
+	u8 mode;
 
 	seq_printf(s, "%-10s %-15s\n", "Substate", "Residency");
 
@@ -838,7 +838,7 @@ static void pmc_core_substate_req_header_show(struct seq_file *s, int pmc_index,
 					      enum header_type type)
 {
 	struct pmc_dev *pmcdev = s->private;
-	int mode;
+	u8 mode;
 
 	seq_printf(s, "%40s |", "Element");
 	pmc_for_each_mode(mode, pmcdev)
@@ -880,7 +880,7 @@ static int pmc_core_substate_blk_req_show(struct seq_file *s, void *unused)
 			const struct pmc_bit_map *map;
 
 			for (map = maps[r_idx]; map->name; map++) {
-				int mode;
+				u8 mode;
 
 				if (!map->blk)
 					continue;
@@ -953,7 +953,8 @@ static int pmc_core_substate_req_regs_show(struct seq_file *s, void *unused)
 			u32 lpm_status;
 			u32 lpm_status_live;
 			const struct pmc_bit_map *map;
-			int mode, i, len = 32;
+			int i, len = 32;
+			u8 mode;
 
 			/*
 			 * Capture the requirements and create a mask so that we only
@@ -1065,7 +1066,7 @@ static int pmc_core_lpm_latch_mode_show(struct seq_file *s, void *unused)
 	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
 	bool c10;
 	u32 reg;
-	int mode;
+	u8 mode;
 
 	reg = pmc_core_reg_read(pmc, pmc->map->lpm_sts_latch_en_offset);
 	if (reg & LPM_STS_LATCH_MODE) {
@@ -1097,8 +1098,9 @@ static ssize_t pmc_core_lpm_latch_mode_write(struct file *file,
 	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
 	bool clear = false, c10 = false;
 	unsigned char buf[8];
-	int m, mode;
+	int mode;
 	u32 reg;
+	u8 m;
 
 	if (count > sizeof(buf) - 1)
 		return -EINVAL;
@@ -1490,8 +1492,8 @@ int pmc_core_pmt_get_lpm_req(struct pmc_dev *pmcdev, struct pmc *pmc, struct tel
 {
 	const u8 *lpm_indices;
 	int num_maps, mode_offset = 0;
-	int ret, mode;
-	int lpm_size;
+	int ret, lpm_size;
+	u8 mode;
 
 	lpm_indices = pmc->map->lpm_reg_index;
 	num_maps = pmc->map->lpm_num_maps;
diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/intel/pmc/core.h
index 272fb4f57f346..ead2f33ed3ed5 100644
--- a/drivers/platform/x86/intel/pmc/core.h
+++ b/drivers/platform/x86/intel/pmc/core.h
@@ -462,8 +462,8 @@ struct pmc_dev {
 	struct mutex lock; /* generic mutex lock for PMC Core */
 
 	u64 s0ix_counter;
-	int num_lpm_modes;
-	int lpm_en_modes[LPM_MAX_NUM_MODES];
+	u8 num_lpm_modes;
+	u8 lpm_en_modes[LPM_MAX_NUM_MODES];
 	void (*suspend)(struct pmc_dev *pmcdev);
 	int (*resume)(struct pmc_dev *pmcdev);
 
-- 
2.43.0
Re: [PATCH 1/3] platform/x86/intel/pmc: Change LPM mode fields to u8
Posted by Ilpo Järvinen 1 month, 2 weeks ago
On Tue, 16 Dec 2025, Xi Pardee wrote:

> Change the datatypes pf num_lpm_modes and lpm_en_modes[] from int
> to u8. The u8 type is more appropriate and improves the readability
> and maintainability of the code.
> 
> Signed-off-by: Xi Pardee <xi.pardee@linux.intel.com>
> ---
>  drivers/platform/x86/intel/pmc/core.c | 18 ++++++++++--------
>  drivers/platform/x86/intel/pmc/core.h |  4 ++--
>  2 files changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c
> index 7d7ae8a40b0ec..3e916228e7ed2 100644
> --- a/drivers/platform/x86/intel/pmc/core.c
> +++ b/drivers/platform/x86/intel/pmc/core.c
> @@ -779,7 +779,7 @@ static int pmc_core_substate_res_show(struct seq_file *s, void *unused)
>  	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
>  	const int lpm_adj_x2 = pmc->map->lpm_res_counter_step_x2;
>  	u32 offset = pmc->map->lpm_residency_offset;
> -	int mode;
> +	u8 mode;
>  
>  	seq_printf(s, "%-10s %-15s\n", "Substate", "Residency");
>  
> @@ -838,7 +838,7 @@ static void pmc_core_substate_req_header_show(struct seq_file *s, int pmc_index,
>  					      enum header_type type)
>  {
>  	struct pmc_dev *pmcdev = s->private;
> -	int mode;
> +	u8 mode;
>  
>  	seq_printf(s, "%40s |", "Element");
>  	pmc_for_each_mode(mode, pmcdev)
> @@ -880,7 +880,7 @@ static int pmc_core_substate_blk_req_show(struct seq_file *s, void *unused)
>  			const struct pmc_bit_map *map;
>  
>  			for (map = maps[r_idx]; map->name; map++) {
> -				int mode;
> +				u8 mode;
>  
>  				if (!map->blk)
>  					continue;
> @@ -953,7 +953,8 @@ static int pmc_core_substate_req_regs_show(struct seq_file *s, void *unused)
>  			u32 lpm_status;
>  			u32 lpm_status_live;
>  			const struct pmc_bit_map *map;
> -			int mode, i, len = 32;
> +			int i, len = 32;
> +			u8 mode;
>  
>  			/*
>  			 * Capture the requirements and create a mask so that we only
> @@ -1065,7 +1066,7 @@ static int pmc_core_lpm_latch_mode_show(struct seq_file *s, void *unused)
>  	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
>  	bool c10;
>  	u32 reg;
> -	int mode;
> +	u8 mode;
>  
>  	reg = pmc_core_reg_read(pmc, pmc->map->lpm_sts_latch_en_offset);
>  	if (reg & LPM_STS_LATCH_MODE) {
> @@ -1097,8 +1098,9 @@ static ssize_t pmc_core_lpm_latch_mode_write(struct file *file,
>  	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
>  	bool clear = false, c10 = false;
>  	unsigned char buf[8];
> -	int m, mode;
> +	int mode;
>  	u32 reg;
> +	u8 m;
>  
>  	if (count > sizeof(buf) - 1)
>  		return -EINVAL;
> @@ -1490,8 +1492,8 @@ int pmc_core_pmt_get_lpm_req(struct pmc_dev *pmcdev, struct pmc *pmc, struct tel
>  {
>  	const u8 *lpm_indices;
>  	int num_maps, mode_offset = 0;
> -	int ret, mode;
> -	int lpm_size;
> +	int ret, lpm_size;
> +	u8 mode;
>  
>  	lpm_indices = pmc->map->lpm_reg_index;
>  	num_maps = pmc->map->lpm_num_maps;

Why is "mode" in pmc_core_get_low_power_modes() left untouched?

(Unrelated to the patch, it seems to contain a double empty line as well.)

> diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/intel/pmc/core.h
> index 272fb4f57f346..ead2f33ed3ed5 100644
> --- a/drivers/platform/x86/intel/pmc/core.h
> +++ b/drivers/platform/x86/intel/pmc/core.h
> @@ -462,8 +462,8 @@ struct pmc_dev {
>  	struct mutex lock; /* generic mutex lock for PMC Core */
>  
>  	u64 s0ix_counter;
> -	int num_lpm_modes;
> -	int lpm_en_modes[LPM_MAX_NUM_MODES];
> +	u8 num_lpm_modes;
> +	u8 lpm_en_modes[LPM_MAX_NUM_MODES];
>  	void (*suspend)(struct pmc_dev *pmcdev);
>  	int (*resume)(struct pmc_dev *pmcdev);
>  
> 

-- 
 i.
Re: [PATCH 1/3] platform/x86/intel/pmc: Change LPM mode fields to u8
Posted by Xi Pardee 1 month ago
Hi Ilpo,

Thanks for reviewing the patch. My response is inline.

On 12/23/2025 4:29 AM, Ilpo Järvinen wrote:
> On Tue, 16 Dec 2025, Xi Pardee wrote:
>
>> Change the datatypes pf num_lpm_modes and lpm_en_modes[] from int
>> to u8. The u8 type is more appropriate and improves the readability
>> and maintainability of the code.
>>
>> Signed-off-by: Xi Pardee <xi.pardee@linux.intel.com>
>> ---
>>   drivers/platform/x86/intel/pmc/core.c | 18 ++++++++++--------
>>   drivers/platform/x86/intel/pmc/core.h |  4 ++--
>>   2 files changed, 12 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c
>> index 7d7ae8a40b0ec..3e916228e7ed2 100644
>> --- a/drivers/platform/x86/intel/pmc/core.c
>> +++ b/drivers/platform/x86/intel/pmc/core.c
>> @@ -779,7 +779,7 @@ static int pmc_core_substate_res_show(struct seq_file *s, void *unused)
>>   	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
>>   	const int lpm_adj_x2 = pmc->map->lpm_res_counter_step_x2;
>>   	u32 offset = pmc->map->lpm_residency_offset;
>> -	int mode;
>> +	u8 mode;
>>   
>>   	seq_printf(s, "%-10s %-15s\n", "Substate", "Residency");
>>   
>> @@ -838,7 +838,7 @@ static void pmc_core_substate_req_header_show(struct seq_file *s, int pmc_index,
>>   					      enum header_type type)
>>   {
>>   	struct pmc_dev *pmcdev = s->private;
>> -	int mode;
>> +	u8 mode;
>>   
>>   	seq_printf(s, "%40s |", "Element");
>>   	pmc_for_each_mode(mode, pmcdev)
>> @@ -880,7 +880,7 @@ static int pmc_core_substate_blk_req_show(struct seq_file *s, void *unused)
>>   			const struct pmc_bit_map *map;
>>   
>>   			for (map = maps[r_idx]; map->name; map++) {
>> -				int mode;
>> +				u8 mode;
>>   
>>   				if (!map->blk)
>>   					continue;
>> @@ -953,7 +953,8 @@ static int pmc_core_substate_req_regs_show(struct seq_file *s, void *unused)
>>   			u32 lpm_status;
>>   			u32 lpm_status_live;
>>   			const struct pmc_bit_map *map;
>> -			int mode, i, len = 32;
>> +			int i, len = 32;
>> +			u8 mode;
>>   
>>   			/*
>>   			 * Capture the requirements and create a mask so that we only
>> @@ -1065,7 +1066,7 @@ static int pmc_core_lpm_latch_mode_show(struct seq_file *s, void *unused)
>>   	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
>>   	bool c10;
>>   	u32 reg;
>> -	int mode;
>> +	u8 mode;
>>   
>>   	reg = pmc_core_reg_read(pmc, pmc->map->lpm_sts_latch_en_offset);
>>   	if (reg & LPM_STS_LATCH_MODE) {
>> @@ -1097,8 +1098,9 @@ static ssize_t pmc_core_lpm_latch_mode_write(struct file *file,
>>   	struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
>>   	bool clear = false, c10 = false;
>>   	unsigned char buf[8];
>> -	int m, mode;
>> +	int mode;
>>   	u32 reg;
>> +	u8 m;
>>   
>>   	if (count > sizeof(buf) - 1)
>>   		return -EINVAL;
>> @@ -1490,8 +1492,8 @@ int pmc_core_pmt_get_lpm_req(struct pmc_dev *pmcdev, struct pmc *pmc, struct tel
>>   {
>>   	const u8 *lpm_indices;
>>   	int num_maps, mode_offset = 0;
>> -	int ret, mode;
>> -	int lpm_size;
>> +	int ret, lpm_size;
>> +	u8 mode;
>>   
>>   	lpm_indices = pmc->map->lpm_reg_index;
>>   	num_maps = pmc->map->lpm_num_maps;
> Why is "mode" in pmc_core_get_low_power_modes() left untouched?
>
> (Unrelated to the patch, it seems to contain a double empty line as well.)

I missed this function. Will change the type of "mode" in 
pmc_core_get_low_power_modes() in next version.

Will add another patch to remove one empty line in next version.

Thanks!

Xi

>
>> diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/intel/pmc/core.h
>> index 272fb4f57f346..ead2f33ed3ed5 100644
>> --- a/drivers/platform/x86/intel/pmc/core.h
>> +++ b/drivers/platform/x86/intel/pmc/core.h
>> @@ -462,8 +462,8 @@ struct pmc_dev {
>>   	struct mutex lock; /* generic mutex lock for PMC Core */
>>   
>>   	u64 s0ix_counter;
>> -	int num_lpm_modes;
>> -	int lpm_en_modes[LPM_MAX_NUM_MODES];
>> +	u8 num_lpm_modes;
>> +	u8 lpm_en_modes[LPM_MAX_NUM_MODES];
>>   	void (*suspend)(struct pmc_dev *pmcdev);
>>   	int (*resume)(struct pmc_dev *pmcdev);
>>   
>>