summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com>2023-11-19 18:52:58 -0800
committerSecurityBot <android-nexus-securitybot@system.gserviceaccount.com>2023-11-19 18:52:58 -0800
commit4cb777e06fdc6c4fae24c0ce0a232138d14fcac9 (patch)
tree0ffcbeabcff8f4f1bc6b19a30aead9229be36236
parent15e43b4a6494f64d4e584957194769c5d6dfe50c (diff)
parentc4a71452049c4a25ad6b7eb3ad8a5f4ac7f5af81 (diff)
downloadaoc-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.c18
-rw-r--r--aoc.c94
-rw-r--r--aoc_channel_dev.c5
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__);
diff --git a/aoc.c b/aoc.c
index f84a182..95c85d2 100644
--- a/aoc.c
+++ b/aoc.c
@@ -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;
}