[PATCH RFC] power: reset: qcom-pon: Drop reason shift for PMK8350

Alexander Koskovich posted 1 patch 2 weeks, 4 days ago
drivers/power/reset/qcom-pon.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH RFC] power: reset: qcom-pon: Drop reason shift for PMK8350
Posted by Alexander Koskovich 2 weeks, 4 days ago
On the PMK8350 the SOFT_RB_SPARE register does not exist, the reset
reason is instead kept in SDAM and written through the reboot-reason
nvmem cell.

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
Would like some feedback on this as I'm seeing conflicting results,
SOFT_RB_SPARE does not exist on HLOS but it looks like the downstream
qpnp-power-on driver writes to XVDD_RB_SPARE2 for GEN3, which is on PBS.

Though, targets like waipio don't seem to have access to write to PBS
from HLOS? Get SPMI errors when I try. Didn't have an issue doing so on
milos though.

Besides, the bindings doesn't allow reboot modes on PMK8350 so maybe
setting no reason shift is correct regardless so it gets skipped?
---
 drivers/power/reset/qcom-pon.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/power/reset/qcom-pon.c b/drivers/power/reset/qcom-pon.c
index 7e108982a582..9cd55f5536b4 100644
--- a/drivers/power/reset/qcom-pon.c
+++ b/drivers/power/reset/qcom-pon.c
@@ -90,7 +90,7 @@ static const struct of_device_id qcom_pon_id_table[] = {
 	{ .compatible = "qcom,pm8941-pon", .data = (void *)NO_REASON_SHIFT },
 	{ .compatible = "qcom,pms405-pon", .data = (void *)GEN1_REASON_SHIFT },
 	{ .compatible = "qcom,pm8998-pon", .data = (void *)GEN2_REASON_SHIFT },
-	{ .compatible = "qcom,pmk8350-pon", .data = (void *)GEN2_REASON_SHIFT },
+	{ .compatible = "qcom,pmk8350-pon", .data = (void *)NO_REASON_SHIFT },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, qcom_pon_id_table);

---
base-commit: 944a035ecca915ae947905dcfb03f2b9dc6d032c
change-id: 20260907-pon-pbs-76b7ecaafe33

Best regards,
-- 
Alexander Koskovich <akoskovich@pm.me>
Re: [PATCH RFC] power: reset: qcom-pon: Drop reason shift for PMK8350
Posted by Dmitry Baryshkov 2 weeks, 2 days ago
On Mon, Sep 07, 2026 at 04:44:29PM +0000, Alexander Koskovich wrote:
> On the PMK8350 the SOFT_RB_SPARE register does not exist, the reset
> reason is instead kept in SDAM and written through the reboot-reason
> nvmem cell.
> 
> Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
> ---
> Would like some feedback on this as I'm seeing conflicting results,
> SOFT_RB_SPARE does not exist on HLOS but it looks like the downstream
> qpnp-power-on driver writes to XVDD_RB_SPARE2 for GEN3, which is on PBS.
> 
> Though, targets like waipio don't seem to have access to write to PBS
> from HLOS? Get SPMI errors when I try. Didn't have an issue doing so on
> milos though.

It well might be that the PMIC has the spare register but whether it
gets used or not depends on the platform (and the firmware) rather than
the PMIC.

> 
> Besides, the bindings doesn't allow reboot modes on PMK8350 so maybe
> setting no reason shift is correct regardless so it gets skipped?
> ---
>  drivers/power/reset/qcom-pon.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/power/reset/qcom-pon.c b/drivers/power/reset/qcom-pon.c
> index 7e108982a582..9cd55f5536b4 100644
> --- a/drivers/power/reset/qcom-pon.c
> +++ b/drivers/power/reset/qcom-pon.c
> @@ -90,7 +90,7 @@ static const struct of_device_id qcom_pon_id_table[] = {
>  	{ .compatible = "qcom,pm8941-pon", .data = (void *)NO_REASON_SHIFT },
>  	{ .compatible = "qcom,pms405-pon", .data = (void *)GEN1_REASON_SHIFT },
>  	{ .compatible = "qcom,pm8998-pon", .data = (void *)GEN2_REASON_SHIFT },
> -	{ .compatible = "qcom,pmk8350-pon", .data = (void *)GEN2_REASON_SHIFT },
> +	{ .compatible = "qcom,pmk8350-pon", .data = (void *)NO_REASON_SHIFT },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, qcom_pon_id_table);
> 
> ---
> base-commit: 944a035ecca915ae947905dcfb03f2b9dc6d032c
> change-id: 20260907-pon-pbs-76b7ecaafe33
> 
> Best regards,
> -- 
> Alexander Koskovich <akoskovich@pm.me>
> 
> 

-- 
With best wishes
Dmitry
Re: [PATCH RFC] power: reset: qcom-pon: Drop reason shift for PMK8350
Posted by Konrad Dybcio 2 weeks, 2 days ago
On 9/7/26 6:44 PM, Alexander Koskovich wrote:
> On the PMK8350 the SOFT_RB_SPARE register does not exist, the reset
> reason is instead kept in SDAM and written through the reboot-reason
> nvmem cell.
> 
> Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
> ---
> Would like some feedback on this as I'm seeing conflicting results,
> SOFT_RB_SPARE does not exist on HLOS but it looks like the downstream
> qpnp-power-on driver writes to XVDD_RB_SPARE2 for GEN3, which is on PBS.
> 
> Though, targets like waipio don't seem to have access to write to PBS
> from HLOS? Get SPMI errors when I try. Didn't have an issue doing so on
> milos though.
> 
> Besides, the bindings doesn't allow reboot modes on PMK8350 so maybe
> setting no reason shift is correct regardless so it gets skipped?
> ---

Maybe +Kamal or +Fenglin would know more

Konrad

>  drivers/power/reset/qcom-pon.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/power/reset/qcom-pon.c b/drivers/power/reset/qcom-pon.c
> index 7e108982a582..9cd55f5536b4 100644
> --- a/drivers/power/reset/qcom-pon.c
> +++ b/drivers/power/reset/qcom-pon.c
> @@ -90,7 +90,7 @@ static const struct of_device_id qcom_pon_id_table[] = {
>  	{ .compatible = "qcom,pm8941-pon", .data = (void *)NO_REASON_SHIFT },
>  	{ .compatible = "qcom,pms405-pon", .data = (void *)GEN1_REASON_SHIFT },
>  	{ .compatible = "qcom,pm8998-pon", .data = (void *)GEN2_REASON_SHIFT },
> -	{ .compatible = "qcom,pmk8350-pon", .data = (void *)GEN2_REASON_SHIFT },
> +	{ .compatible = "qcom,pmk8350-pon", .data = (void *)NO_REASON_SHIFT },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, qcom_pon_id_table);
> 
> ---
> base-commit: 944a035ecca915ae947905dcfb03f2b9dc6d032c
> change-id: 20260907-pon-pbs-76b7ecaafe33
> 
> Best regards,
Re: [PATCH RFC] power: reset: qcom-pon: Drop reason shift for PMK8350
Posted by Fenglin Wu 2 weeks, 1 day ago

On 9/9/2026 7:52 PM, Konrad Dybcio wrote:
> On 9/7/26 6:44 PM, Alexander Koskovich wrote:
>> On the PMK8350 the SOFT_RB_SPARE register does not exist, the reset
>> reason is instead kept in SDAM and written through the reboot-reason
>> nvmem cell.
>>
>> Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
>> ---
>> Would like some feedback on this as I'm seeing conflicting results,
>> SOFT_RB_SPARE does not exist on HLOS but it looks like the downstream
>> qpnp-power-on driver writes to XVDD_RB_SPARE2 for GEN3, which is on PBS.
>>
>> Though, targets like waipio don't seem to have access to write to PBS
>> from HLOS? Get SPMI errors when I try. Didn't have an issue doing so on
>> milos though.
>>
>> Besides, the bindings doesn't allow reboot modes on PMK8350 so maybe
>> setting no reason shift is correct regardless so it gets skipped?
>> ---
> 
> Maybe +Kamal or +Fenglin would know more
> 
> Konrad
> 

For pmk8350 HLOS_PON, I can see a register at 0x8f,
PON_HLOS_DVDD_RB_SPARE2 in the dVdd_RB block, that may not retain the
reset reason during a device reboot. The downstream qpnp-power-on driver
stores the reset reason in PBS_PON register 0x8f,
PON_PBS_XVDD_RB_SPARE2, which belongs to the xVdd_RB block where all
register values are retained during normal reboot.

The downstream driver manages PON/reset behavior primarily through the
PBS_PON module, whereas HLOS_PON is mainly used for power/reset keys.

Since I don't have a waipio device available, I couldn't verify the SPMI
access permission issue you mentioned. My assumption is that it should
work correctly; otherwise, all reset-related functionality would be
broken internally, unless the PMIC module ownership settings in BOOT SW
were changed on your device.


>>  drivers/power/reset/qcom-pon.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/power/reset/qcom-pon.c b/drivers/power/reset/qcom-pon.c
>> index 7e108982a582..9cd55f5536b4 100644
>> --- a/drivers/power/reset/qcom-pon.c
>> +++ b/drivers/power/reset/qcom-pon.c
>> @@ -90,7 +90,7 @@ static const struct of_device_id qcom_pon_id_table[] = {
>>  	{ .compatible = "qcom,pm8941-pon", .data = (void *)NO_REASON_SHIFT },
>>  	{ .compatible = "qcom,pms405-pon", .data = (void *)GEN1_REASON_SHIFT },
>>  	{ .compatible = "qcom,pm8998-pon", .data = (void *)GEN2_REASON_SHIFT },
>> -	{ .compatible = "qcom,pmk8350-pon", .data = (void *)GEN2_REASON_SHIFT },
>> +	{ .compatible = "qcom,pmk8350-pon", .data = (void *)NO_REASON_SHIFT },
>>  	{ }
>>  };
>>  MODULE_DEVICE_TABLE(of, qcom_pon_id_table);
>>
>> ---
>> base-commit: 944a035ecca915ae947905dcfb03f2b9dc6d032c
>> change-id: 20260907-pon-pbs-76b7ecaafe33
>>
>> Best regards,