diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2023-11-19 18:52:58 -0800 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2023-11-19 18:52:58 -0800 |
commit | 4cb777e06fdc6c4fae24c0ce0a232138d14fcac9 (patch) | |
tree | 0ffcbeabcff8f4f1bc6b19a30aead9229be36236 | |
parent | 15e43b4a6494f64d4e584957194769c5d6dfe50c (diff) | |
parent | c4a71452049c4a25ad6b7eb3ad8a5f4ac7f5af81 (diff) | |
download | aoc-4cb777e06fdc6c4fae24c0ce0a232138d14fcac9.tar.gz |
Merge android13-gs-pixel-5.10-24Q1 into android14-gs-pixel-5.15-24Q1
SBMerger: 571992243
Change-Id: Id9aa6ac74b81d23ecd84a14be171b8e13ecce224
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r-- | alsa/aoc_alsa_hw.c | 18 | ||||
-rw-r--r-- | aoc.c | 94 | ||||
-rw-r--r-- | aoc_channel_dev.c | 5 |
3 files changed, 29 insertions, 88 deletions
diff --git a/alsa/aoc_alsa_hw.c b/alsa/aoc_alsa_hw.c index afcd7e8..6a85b7c 100644 --- a/alsa/aoc_alsa_hw.c +++ b/alsa/aoc_alsa_hw.c @@ -3095,8 +3095,6 @@ int aoc_audio_set_params(struct aoc_alsa_stream *alsa_stream, uint32_t channels, uint32_t samplerate, uint32_t bps, bool pcm_float_fmt, int source_mode) { int err = 0; - struct aoc_chip *chip = alsa_stream->chip; - pr_debug("setting channels(%u), samplerate(%u), bits-per-sample(%u)\n", channels, samplerate, bps); @@ -3112,13 +3110,6 @@ int aoc_audio_set_params(struct aoc_alsa_stream *alsa_stream, uint32_t channels, pr_err("ERR:%d capture audio param set fails\n", err); goto exit; } - - /* To deal with recording with spatial module enabled */ - if (chip->mic_spatial_module_enable && !aoc_pcm_is_mmap_raw(alsa_stream)) { - err = aoc_audio_capture_spatial_module_trigger(chip, START); - if (err < 0) - pr_err("ERR:%d mic proc spatial module failed to start!\n", err); - } } exit: @@ -3884,7 +3875,6 @@ int aoc_audio_open(struct aoc_alsa_stream *alsa_stream) int aoc_audio_close(struct aoc_alsa_stream *alsa_stream) { - int err = 0; struct aoc_chip *chip = alsa_stream->chip; struct snd_pcm_substream *substream = alsa_stream->substream; @@ -3893,14 +3883,6 @@ int aoc_audio_close(struct aoc_alsa_stream *alsa_stream) if (alsa_stream->idx == UC_ULTRASONIC_RECORD) ap_record_stop(chip, alsa_stream); else if (ap_filter_capture_stream(alsa_stream)) { - /* Disable spatial module */ - if (chip->mic_spatial_module_enable && !aoc_pcm_is_mmap_raw(alsa_stream)) { - err = aoc_audio_capture_spatial_module_trigger(chip, STOP); - if (err < 0) - pr_err("ERR:%d mic proc spatial module failed to stop!\n", - err); - } - /* Stop the capturing mic*/ if (aoc_audio_capture_active_stream_num(chip) == 0) { pr_info("%s: record stop\n", __func__); @@ -938,15 +938,13 @@ static ssize_t reset_store(struct device *dev, struct device_attribute *attr, { struct aoc_prvdata *prvdata = dev_get_drvdata(dev); char reason_str[MAX_RESET_REASON_STRING_LEN + 1]; - size_t reason_str_len = min(MAX_RESET_REASON_STRING_LEN, count); if (aoc_state != AOC_STATE_ONLINE || work_busy(&prvdata->watchdog_work)) { dev_err(dev, "Reset requested while AoC is not online"); return -ENODEV; } - strscpy(reason_str, buf, reason_str_len); - reason_str[reason_str_len] = '\0'; + strscpy(reason_str, buf, sizeof(reason_str)); dev_err(dev, "Reset requested from userspace, reason: %s", reason_str); if (prvdata->no_ap_resets) { @@ -1655,21 +1653,6 @@ void aoc_remove_map_handler(struct aoc_service_dev *dev) } EXPORT_SYMBOL_GPL(aoc_remove_map_handler); -static struct aoc_section_header *find_ramdump_section(struct aoc_ramdump_header - *ramdump_header, int section_type) -{ - int i; - - if (ramdump_header->num_sections != RAMDUMP_NUM_SECTIONS) - return NULL; - - for (i = 0; i < ramdump_header->num_sections; i++) - if (ramdump_header->sections[i].type == section_type) - return &ramdump_header->sections[i]; - - return NULL; -} - static void aoc_watchdog(struct work_struct *work) { struct aoc_prvdata *prvdata = @@ -1693,9 +1676,8 @@ static void aoc_watchdog(struct work_struct *work) int sscd_rc; char crash_info[RAMDUMP_SECTION_CRASH_INFO_SIZE]; int restart_rc; - bool ap_reset = false, invalid_magic; - struct aoc_section_header *crash_info_section = - find_ramdump_section(ramdump_header, SECTION_TYPE_CRASH_INFO); + bool ap_reset = false, valid_magic; + struct aoc_section_header *crash_info_section; prvdata->total_restarts++; @@ -1744,18 +1726,27 @@ static void aoc_watchdog(struct work_struct *work) ramdump_timeout = jiffies + (5 * HZ); while (time_before(jiffies, ramdump_timeout)) { - if (ramdump_header->valid) + valid_magic = memcmp(ramdump_header, RAMDUMP_MAGIC, sizeof(RAMDUMP_MAGIC)) == 0; + if (ramdump_header->valid == 1 && valid_magic) break; msleep(100); } - if (!ramdump_header->valid) { - dev_err(prvdata->dev, "aoc coredump timed out, coredump only contains DRAM\n"); + crash_info_section = &ramdump_header->sections[RAMDUMP_SECTION_CRASH_INFO_INDEX]; + if (crash_info_section->type != SECTION_TYPE_CRASH_INFO) + crash_info_section = NULL; + + if (!(ramdump_header->valid == 1) || !valid_magic) { + if (!(ramdump_header->valid == 1)) + dev_info(prvdata->dev, "aoc coredump timed out, coredump only contains DRAM\n"); + if (!valid_magic) + dev_info(prvdata->dev, "aoc coredump has invalid magic\n"); + if (crash_info_section) { const char *crash_reason = (const char *)ramdump_header + crash_info_section->offset; - bool crash_reason_valid = (strnlen(crash_reason, - sizeof(crash_info)) != 0); + bool crash_reason_valid = crash_reason < (char *)prvdata->dram_virt + + prvdata->dram_size && crash_reason[0] != 0; snprintf(crash_info, sizeof(crash_info), "AoC watchdog : %s (incomplete %u:%u)", @@ -1769,31 +1760,17 @@ static void aoc_watchdog(struct work_struct *work) } } - invalid_magic = memcmp(ramdump_header, RAMDUMP_MAGIC, sizeof(RAMDUMP_MAGIC)); - if (ramdump_header->valid && invalid_magic) { - dev_err(prvdata->dev, - "aoc coredump possibly failed: invalid magic\n"); - if (crash_info_section) { + if (ramdump_header->valid == 1 && valid_magic) { + if (crash_info_section && crash_info_section->flags & RAMDUMP_FLAG_VALID) { const char *crash_reason = (const char *)ramdump_header + crash_info_section->offset; - /* Check that offset was not corrupted and that we are not reading - random bytes */ - bool crash_reason_valid = crash_reason < (char *)prvdata->dram_virt + - prvdata->dram_size && crash_reason[0] != 0; - - if (crash_reason_valid) { - snprintf(crash_info, sizeof(crash_info), - "AoC watchdog : coredump corrupt [%s]", crash_reason); - } else { - snprintf(crash_info, sizeof(crash_info), - "AoC watchdog : coredump corrupt (incomplete %u:%u)", - ramdump_header->breadcrumbs[0], - ramdump_header->breadcrumbs[1]); - } + dev_info(prvdata->dev, + "aoc coredump has valid coredump header, crash reason [%s]", crash_reason); + strscpy(crash_info, crash_reason, sizeof(crash_info)); } else { - dev_err(prvdata->dev, - "could not find crash info section in aoc coredump header"); - strscpy(crash_info, "AoC Watchdog : coredump corrupt", + dev_info(prvdata->dev, + "aoc coredump has valid coredump header, but invalid crash reason"); + strscpy(crash_info, "AoC Watchdog : invalid crash info", sizeof(crash_info)); } } @@ -1821,27 +1798,6 @@ static void aoc_watchdog(struct work_struct *work) sscd_info.segs[0].addr = prvdata->dram_virt; } - if (ramdump_header->valid && !invalid_magic) { - - if (crash_info_section && crash_info_section->flags & RAMDUMP_FLAG_VALID) { - const char *crash_reason = (const char *)ramdump_header + - crash_info_section->offset; - bool crash_reason_valid = crash_reason < (char *)prvdata->dram_virt + - prvdata->dram_size && crash_reason[0] != 0; - - if (crash_reason_valid) - pr_err(">>> valid!!"); - else - pr_err(">>> invalid!!!"); - dev_info(prvdata->dev, "aoc coredump has valid coredump header, crash reason [%s]", - crash_reason); - strscpy(crash_info, crash_reason, sizeof(crash_info)); - } else { - dev_info(prvdata->dev, "aoc coredump has valid coredump header, but invalid crash reason"); - strscpy(crash_info, "AoC Watchdog : invalid crash info", - sizeof(crash_info)); - } - } if (ap_reset) { /* Prefer the user specified reason */ diff --git a/aoc_channel_dev.c b/aoc_channel_dev.c index dd5a3e8..58165d7 100644 --- a/aoc_channel_dev.c +++ b/aoc_channel_dev.c @@ -71,6 +71,8 @@ static const char * const channel_service_names[] = { "com.google.usf.non_wake_up", "com.google.chre", "com.google.chre.non_wake_up", + "com.google.bt", + "com.google.bt.non_wake_up", "usf_sh_mem_doorbell", NULL, }; @@ -210,7 +212,8 @@ static int aocc_demux_kthread(void *data) handler_found = 1; if (!node->msg.non_wake_up && (strcmp(dev_name(&service->dev),"com.google.usf") == 0 || - strcmp(dev_name(&service->dev),"com.google.chre") == 0)) { + strcmp(dev_name(&service->dev),"com.google.chre") == 0 || + strcmp(dev_name(&service->dev),"com.google.bt") == 0)) { take_wake_lock = true; } |