2021-11-24 07:00:10

by Andrej Picej

[permalink] [raw]
Subject: [PATCH 2/2] mfd: da9063: Make vbcore registers volatile

From: Stefan Riedmueller <[email protected]>

The VBCORE1_A and VBCORE2_A registers are used to set the desired output
voltage of the BCORE 1 and 2 buck regulators. These values can be critical
if used as input for core voltages. Thus make them volatile so they do not
get cached.

Signed-off-by: Stefan Riedmueller <[email protected]>
Signed-off-by: Andrej Picej <[email protected]>
---
drivers/mfd/da9063-i2c.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c
index 343ed6e96d87..8a3629c30382 100644
--- a/drivers/mfd/da9063-i2c.c
+++ b/drivers/mfd/da9063-i2c.c
@@ -161,6 +161,7 @@ static const struct regmap_range da9063_ad_volatile_ranges[] = {
regmap_reg_range(DA9063_REG_ADC_RES_L, DA9063_AD_REG_SECOND_D),
regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_SEQ),
regmap_reg_range(DA9063_REG_EN_32K, DA9063_REG_EN_32K),
+ regmap_reg_range(DA9063_REG_VBCORE2_A, DA9063_REG_VBCORE2_A),
regmap_reg_range(DA9063_AD_REG_MON_REG_5, DA9063_AD_REG_MON_REG_6),
};

@@ -206,6 +207,7 @@ static const struct regmap_range da9063_bb_da_volatile_ranges[] = {
regmap_reg_range(DA9063_REG_ADC_RES_L, DA9063_BB_REG_SECOND_D),
regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_SEQ),
regmap_reg_range(DA9063_REG_EN_32K, DA9063_REG_EN_32K),
+ regmap_reg_range(DA9063_REG_VBCORE2_A, DA9063_REG_VBCORE2_A),
regmap_reg_range(DA9063_BB_REG_MON_REG_5, DA9063_BB_REG_MON_REG_6),
};

--
2.25.1



2021-11-24 09:34:53

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH 2/2] mfd: da9063: Make vbcore registers volatile

On 24 November 2021 07:00, Andrej Picej wrote:

> From: Stefan Riedmueller <[email protected]>
>
> The VBCORE1_A and VBCORE2_A registers are used to set the desired output
> voltage of the BCORE 1 and 2 buck regulators. These values can be critical
> if used as input for core voltages. Thus make them volatile so they do not
> get cached.

I don't understand the need for this change. What is this fixing? As I
understand it the registers in question aren't volatile so should persist.

> Signed-off-by: Stefan Riedmueller <[email protected]>
> Signed-off-by: Andrej Picej <[email protected]>
> ---
> drivers/mfd/da9063-i2c.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c
> index 343ed6e96d87..8a3629c30382 100644
> --- a/drivers/mfd/da9063-i2c.c
> +++ b/drivers/mfd/da9063-i2c.c
> @@ -161,6 +161,7 @@ static const struct regmap_range
> da9063_ad_volatile_ranges[] = {
> regmap_reg_range(DA9063_REG_ADC_RES_L,
> DA9063_AD_REG_SECOND_D),
> regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_SEQ),
> regmap_reg_range(DA9063_REG_EN_32K, DA9063_REG_EN_32K),
> + regmap_reg_range(DA9063_REG_VBCORE2_A,
> DA9063_REG_VBCORE2_A),
> regmap_reg_range(DA9063_AD_REG_MON_REG_5,
> DA9063_AD_REG_MON_REG_6),
> };
>
> @@ -206,6 +207,7 @@ static const struct regmap_range
> da9063_bb_da_volatile_ranges[] = {
> regmap_reg_range(DA9063_REG_ADC_RES_L,
> DA9063_BB_REG_SECOND_D),
> regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_SEQ),
> regmap_reg_range(DA9063_REG_EN_32K, DA9063_REG_EN_32K),
> + regmap_reg_range(DA9063_REG_VBCORE2_A,
> DA9063_REG_VBCORE2_A),
> regmap_reg_range(DA9063_BB_REG_MON_REG_5,
> DA9063_BB_REG_MON_REG_6),
> };
>
> --
> 2.25.1


2021-11-24 14:09:30

by Andrej Picej

[permalink] [raw]
Subject: Re: [PATCH 2/2] mfd: da9063: Make vbcore registers volatile

Hi Adam,

On 24. 11. 21 10:34, Adam Thomson wrote:
> On 24 November 2021 07:00, Andrej Picej wrote:
>
>> From: Stefan Riedmueller <[email protected]>
>>
>> The VBCORE1_A and VBCORE2_A registers are used to set the desired output
>> voltage of the BCORE 1 and 2 buck regulators. These values can be critical
>> if used as input for core voltages. Thus make them volatile so they do not
>> get cached.
>
> I don't understand the need for this change. What is this fixing? As I
> understand it the registers in question aren't volatile so should persist.

So basically this two patches were needed because we needed to enable
internal LDOs bypass mode on the imx6 and in the process this PMICs regs
needed to be somehow adjusted, which only worked if this regs were
marked as volatile. Long story short, this method was only introduced in
Phytec's version so upstreaming really doesn't make much sense.

I apologize for any inconvenience, but this two patches somehow slipped
through the process and landed on the "send-to-upstream" list. I also
talked with @Stefan Rieadmueller and he agreed that this two patches can
be dropped.

Thanks for your time.

>
>> Signed-off-by: Stefan Riedmueller <[email protected]>
>> Signed-off-by: Andrej Picej <[email protected]>
>> ---
>> drivers/mfd/da9063-i2c.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/mfd/da9063-i2c.c b/drivers/mfd/da9063-i2c.c
>> index 343ed6e96d87..8a3629c30382 100644
>> --- a/drivers/mfd/da9063-i2c.c
>> +++ b/drivers/mfd/da9063-i2c.c
>> @@ -161,6 +161,7 @@ static const struct regmap_range
>> da9063_ad_volatile_ranges[] = {
>> regmap_reg_range(DA9063_REG_ADC_RES_L,
>> DA9063_AD_REG_SECOND_D),
>> regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_SEQ),
>> regmap_reg_range(DA9063_REG_EN_32K, DA9063_REG_EN_32K),
>> + regmap_reg_range(DA9063_REG_VBCORE2_A,
>> DA9063_REG_VBCORE2_A),
>> regmap_reg_range(DA9063_AD_REG_MON_REG_5,
>> DA9063_AD_REG_MON_REG_6),
>> };
>>
>> @@ -206,6 +207,7 @@ static const struct regmap_range
>> da9063_bb_da_volatile_ranges[] = {
>> regmap_reg_range(DA9063_REG_ADC_RES_L,
>> DA9063_BB_REG_SECOND_D),
>> regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_SEQ),
>> regmap_reg_range(DA9063_REG_EN_32K, DA9063_REG_EN_32K),
>> + regmap_reg_range(DA9063_REG_VBCORE2_A,
>> DA9063_REG_VBCORE2_A),
>> regmap_reg_range(DA9063_BB_REG_MON_REG_5,
>> DA9063_BB_REG_MON_REG_6),
>> };
>>
>> --
>> 2.25.1
>

2021-11-24 14:47:38

by Adam Thomson

[permalink] [raw]
Subject: RE: [PATCH 2/2] mfd: da9063: Make vbcore registers volatile

On 24 November 2021 14:05, Andrej Picej wrote:

> > I don't understand the need for this change. What is this fixing? As I
> > understand it the registers in question aren't volatile so should persist.
>
> So basically this two patches were needed because we needed to enable
> internal LDOs bypass mode on the imx6 and in the process this PMICs regs
> needed to be somehow adjusted, which only worked if this regs were
> marked as volatile. Long story short, this method was only introduced in
> Phytec's version so upstreaming really doesn't make much sense.
>
> I apologize for any inconvenience, but this two patches somehow slipped
> through the process and landed on the "send-to-upstream" list. I also
> talked with @Stefan Rieadmueller and he agreed that this two patches can
> be dropped.
>
> Thanks for your time.

That's no problem and thanks for clarifying. With regmap writes, unless the
value you're writing is the same as is in the cache or is outside of the valid
range, the write should go through. Obviously something else at play in that
platform though. :)