diff options
author | Salmax Chang <salmaxchang@google.com> | 2023-06-01 15:30:07 +0800 |
---|---|---|
committer | allieliu <allieliu@google.com> | 2023-06-27 04:59:33 +0000 |
commit | d0d4813a494c34cc0ed0bdf69c8fe1dbe69132ce (patch) | |
tree | 1df83d87bed483085380ead77c7af258788052b9 | |
parent | d2e66dd4ea3daeb53c102ba926244d54ba65841a (diff) | |
download | gs-android-gs-felix-5.10-u-beta4.tar.gz |
soc/google/cpif: refine warm reset sequenceandroid-u-beta-4_r0.4android-u-beta-4_r0.3android-u-beta-4_r0.2android-gs-pantah-5.10-u-beta4android-gs-lynx-5.10-u-beta4android-gs-felix-5.10-u-beta4
Bug: 288824499
Change-Id: I0637138a2853f0fe4788e52e189ece9c46291d61
Signed-off-by: Salmax Chang <salmaxchang@google.com>
-rw-r--r-- | arch/arm64/boot/dts/google/gs201-cloudripper-cp-s5300-sit.dtsi | 1 | ||||
-rw-r--r-- | drivers/soc/google/cpif/modem_ctrl_s5100.c | 29 | ||||
-rw-r--r-- | drivers/soc/google/cpif/modem_v1.h | 1 |
3 files changed, 28 insertions, 3 deletions
diff --git a/arch/arm64/boot/dts/google/gs201-cloudripper-cp-s5300-sit.dtsi b/arch/arm64/boot/dts/google/gs201-cloudripper-cp-s5300-sit.dtsi index 3295a32fe8f4..8f0ed84297c0 100644 --- a/arch/arm64/boot/dts/google/gs201-cloudripper-cp-s5300-sit.dtsi +++ b/arch/arm64/boot/dts/google/gs201-cloudripper-cp-s5300-sit.dtsi @@ -38,6 +38,7 @@ gpio_ap2cp_pda_active = <&gph1 1 0x1>; gpio_ap2cp_nreset_n = <&gph1 3 0x1>; gpio_ap2cp_cp_wrst_n = <&gph1 6 0x1>; + gpio_cp2ap_cp_wrst_n = <&gpa0 2 0x1>; gpio_ap2cp_pm_wrst_n = <&gpa0 3 0x1>; gpio_cp2ap_phone_active = <&gpa8 4 0x1>; diff --git a/drivers/soc/google/cpif/modem_ctrl_s5100.c b/drivers/soc/google/cpif/modem_ctrl_s5100.c index 283593b221d8..6990204be9ec 100644 --- a/drivers/soc/google/cpif/modem_ctrl_s5100.c +++ b/drivers/soc/google/cpif/modem_ctrl_s5100.c @@ -785,9 +785,30 @@ static void gpio_power_offon_cp(struct modem_ctl *mc) static void gpio_power_wreset_cp(struct modem_ctl *mc) { #if !IS_ENABLED(CONFIG_CP_WRESET_WA) - mif_gpio_set_value(&mc->cp_gpio[CP_GPIO_AP2CP_CP_WRST_N], 0, 50); - mif_gpio_set_value(&mc->cp_gpio[CP_GPIO_AP2CP_PM_WRST_N], 0, 50); - mif_gpio_set_value(&mc->cp_gpio[CP_GPIO_AP2CP_CP_WRST_N], 1, 50); + int i = 0, val; + + mif_info("warm reset sequence start\n"); + val = mif_gpio_get_value(&mc->cp_gpio[CP_GPIO_CP2AP_CP_WRST_N], + false); + if (!val) + mif_err("cp2ap_cp_wrst level is low before warm reset\n"); + + mif_gpio_set_value(&mc->cp_gpio[CP_GPIO_AP2CP_PM_WRST_N], 1, 5); + mif_gpio_set_value(&mc->cp_gpio[CP_GPIO_AP2CP_CP_WRST_N], 0, + val ? 0 : 1); + + while (i++ < 20) { + if (!mif_gpio_get_value(&mc->cp_gpio[CP_GPIO_CP2AP_CP_WRST_N], + false)) + break; + mif_info("Wait for cp2ap_cp_wrst pulled to low\n"); + usleep_range(1000, 1100); + } + + mif_gpio_set_value(&mc->cp_gpio[CP_GPIO_AP2CP_PM_WRST_N], 0, 5); + mif_gpio_set_value(&mc->cp_gpio[CP_GPIO_AP2CP_CP_WRST_N], 1, 45); + + mif_info("warm reset sequence end\n"); #endif } @@ -1791,6 +1812,7 @@ static int s5100_get_pdata(struct modem_ctl *mc, struct modem_data *pdata) mc->cp_gpio[CP_GPIO_AP2CP_AP_ACTIVE].label = "AP2CP_AP_ACTIVE"; #if !IS_ENABLED(CONFIG_CP_WRESET_WA) mc->cp_gpio[CP_GPIO_AP2CP_CP_WRST_N].label = "AP2CP_CP_WRST_N"; + mc->cp_gpio[CP_GPIO_CP2AP_CP_WRST_N].label = "CP2AP_CP_WRST_N"; mc->cp_gpio[CP_GPIO_AP2CP_PM_WRST_N].label = "AP2CP_PM_WRST_N"; #endif mc->cp_gpio[CP_GPIO_CP2AP_PS_HOLD].label = "CP2AP_PS_HOLD"; @@ -1805,6 +1827,7 @@ static int s5100_get_pdata(struct modem_ctl *mc, struct modem_data *pdata) mc->cp_gpio[CP_GPIO_AP2CP_AP_ACTIVE].node_name = "gpio_ap2cp_pda_active"; #if !IS_ENABLED(CONFIG_CP_WRESET_WA) mc->cp_gpio[CP_GPIO_AP2CP_CP_WRST_N].node_name = "gpio_ap2cp_cp_wrst_n"; + mc->cp_gpio[CP_GPIO_CP2AP_CP_WRST_N].node_name = "gpio_cp2ap_cp_wrst_n"; mc->cp_gpio[CP_GPIO_AP2CP_PM_WRST_N].node_name = "gpio_ap2cp_pm_wrst_n"; #endif mc->cp_gpio[CP_GPIO_CP2AP_PS_HOLD].node_name = "gpio_cp2ap_cp_ps_hold"; diff --git a/drivers/soc/google/cpif/modem_v1.h b/drivers/soc/google/cpif/modem_v1.h index 954d42807410..ef59e0589f99 100644 --- a/drivers/soc/google/cpif/modem_v1.h +++ b/drivers/soc/google/cpif/modem_v1.h @@ -270,6 +270,7 @@ enum cp_gpio_type { CP_GPIO_AP2CP_AP_ACTIVE, #if !IS_ENABLED(CONFIG_CP_WRESET_WA) CP_GPIO_AP2CP_CP_WRST_N, + CP_GPIO_CP2AP_CP_WRST_N, CP_GPIO_AP2CP_PM_WRST_N, #endif CP_GPIO_CP2AP_PS_HOLD, |