diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2023-10-09 11:30:11 -0700 |
---|---|---|
committer | Pindar Yang <pindaryang@google.com> | 2023-10-11 07:02:50 +0000 |
commit | f7d1ed25de655e15fdc066e4e1c779826684723a (patch) | |
tree | 2cf54229f16420e5db3bd489daeaf6b9541d985b | |
parent | 75ada36a0c96d6b028786b0ed9c61f0a7a82fd4f (diff) | |
parent | 89b5a47bfcce5de1d5a885087dde90d4c97f858e (diff) | |
download | aoc-f7d1ed25de655e15fdc066e4e1c779826684723a.tar.gz |
Merge android13-gs-pixel-5.10-udc-qpr1 into android13-gs-pixel-5.10-24Q1
Conflict files:
aoc.c
Bug: 300854197
SBMerger: 571992243
Change-Id: I4f8cbdab0ca7783ac37cbfc5fb326de12703d481
Signed-off-by: Pindar Yang <pindaryang@google.com>
-rw-r--r-- | aoc.c | 6 | ||||
-rw-r--r-- | aoc.h | 3 | ||||
-rw-r--r-- | aoc_v1.c | 26 |
3 files changed, 28 insertions, 7 deletions
@@ -641,7 +641,7 @@ static void aoc_fw_callback(const struct firmware *fw, void *ctx) aoc_release_from_reset(prvdata); } - enable_irq(prvdata->watchdog_irq); + configure_crash_interrupts(prvdata, true); /* Monitor if there is callback from aoc after 5sec */ cancel_delayed_work_sync(&prvdata->monitor_work); @@ -948,7 +948,7 @@ static ssize_t reset_store(struct device *dev, struct device_attribute *attr, if (prvdata->no_ap_resets) { dev_err(dev, "Reset request rejected, option disabled via persist options"); } else { - disable_irq_nosync(prvdata->watchdog_irq); + configure_crash_interrupts(prvdata, false); strlcpy(prvdata->ap_reset_reason, reason_str, AP_RESET_REASON_LENGTH); prvdata->ap_triggered_reset = true; schedule_work(&prvdata->watchdog_work); @@ -2560,7 +2560,7 @@ static void aoc_platform_shutdown(struct platform_device *pdev) { struct aoc_prvdata *prvdata = platform_get_drvdata(pdev); - disable_irq_nosync(prvdata->watchdog_irq); + configure_crash_interrupts(prvdata, false); aoc_take_offline(prvdata); } @@ -120,6 +120,7 @@ struct aoc_prvdata { int watchdog_irq; struct work_struct watchdog_work; + bool first_fw_load; bool aoc_reset_done; bool ap_triggered_reset; bool force_release_aoc; @@ -284,6 +285,8 @@ bool aoc_fw_ready(void); u32 dt_property(struct device_node *node, const char *key); +void configure_crash_interrupts(struct aoc_prvdata *prvdata, bool enable); + #define AOC_SERVICE_NAME_LENGTH 32 /* Rings should have the ring flag set, slots = 1, size = ring size @@ -136,8 +136,6 @@ int aoc_watchdog_restart(struct aoc_prvdata *prvdata, return AOC_RESTART_DISABLED_RC; aoc_reset_successful = false; - disable_irq_nosync(prvdata->sysmmu_nonsecure_irq); - disable_irq_nosync(prvdata->sysmmu_secure_irq); for (i = 0; i < aoc_reset_tries; i++) { dev_info(prvdata->dev, "asserting aoc_req\n"); request_aoc_on(prvdata, true); @@ -179,8 +177,6 @@ int aoc_watchdog_restart(struct aoc_prvdata *prvdata, panic("AoC kernel panic: timed out waiting for aoc_ack"); } - enable_irq(prvdata->sysmmu_nonsecure_irq); - enable_irq(prvdata->sysmmu_secure_irq); if (!aoc_reset_successful) { /* Trigger acpm ramdump since we timed out the aoc reset request */ dbg_snapshot_emergency_reboot("AoC Restart timed out"); @@ -439,6 +435,7 @@ int configure_watchdog_interrupt(struct platform_device *pdev, struct aoc_prvdat ret); return -EIO; } + prvdata->first_fw_load = true; return ret; } @@ -496,3 +493,24 @@ void aoc_configure_ssmt(struct platform_device *pdev {} #endif EXPORT_SYMBOL_GPL(aoc_configure_ssmt); + +void configure_crash_interrupts(struct aoc_prvdata *prvdata, bool enable) +{ + if (prvdata->first_fw_load) { + /* Default irq state of watchdog is off and sysmmu is on. + * When loading aoc firmware in first time + * Enable only irq of watchdog for balance irq state + */ + enable_irq(prvdata->watchdog_irq); + prvdata->first_fw_load = false; + } else if (enable) { + enable_irq(prvdata->sysmmu_nonsecure_irq); + enable_irq(prvdata->sysmmu_secure_irq); + enable_irq(prvdata->watchdog_irq); + } else { + disable_irq(prvdata->sysmmu_nonsecure_irq); + disable_irq(prvdata->sysmmu_secure_irq); + disable_irq_nosync(prvdata->watchdog_irq); + } +} +EXPORT_SYMBOL_GPL(configure_crash_interrupts); |