mirror of
https://github.com/LineageOS/android_kernel_samsung_msm8226.git
synced 2026-09-28 00:00:22 +02:00
Merge "msm: pil: Include peripheral name in error prints" into msm-3.0
This commit is contained in:
committed by
QuIC Gerrit Code Review
commit
310109d38b
@@ -138,8 +138,8 @@ static int load_segment(const struct elf32_phdr *phdr, unsigned num,
|
||||
const u8 *data;
|
||||
|
||||
if (memblock_overlaps_memory(phdr->p_paddr, phdr->p_memsz)) {
|
||||
dev_err(&pil->dev,
|
||||
"kernel memory would be overwritten [%#08lx, %#08lx)\n",
|
||||
dev_err(&pil->dev, "%s: kernel memory would be overwritten "
|
||||
"[%#08lx, %#08lx)\n", pil->desc->name,
|
||||
(unsigned long)phdr->p_paddr,
|
||||
(unsigned long)(phdr->p_paddr + phdr->p_memsz));
|
||||
return -EPERM;
|
||||
@@ -150,14 +150,15 @@ static int load_segment(const struct elf32_phdr *phdr, unsigned num,
|
||||
pil->desc->name, num);
|
||||
ret = request_firmware(&fw, fw_name, &pil->dev);
|
||||
if (ret) {
|
||||
dev_err(&pil->dev, "Failed to locate blob %s\n",
|
||||
fw_name);
|
||||
dev_err(&pil->dev, "%s: Failed to locate blob %s\n",
|
||||
pil->desc->name, fw_name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (fw->size != phdr->p_filesz) {
|
||||
dev_err(&pil->dev, "Blob size %u doesn't match %u\n",
|
||||
fw->size, phdr->p_filesz);
|
||||
dev_err(&pil->dev, "%s: Blob size %u doesn't match "
|
||||
"%u\n", pil->desc->name, fw->size,
|
||||
phdr->p_filesz);
|
||||
ret = -EPERM;
|
||||
goto release_fw;
|
||||
}
|
||||
@@ -174,7 +175,8 @@ static int load_segment(const struct elf32_phdr *phdr, unsigned num,
|
||||
size = min_t(size_t, IOMAP_SIZE, count);
|
||||
buf = ioremap(paddr, size);
|
||||
if (!buf) {
|
||||
dev_err(&pil->dev, "Failed to map memory\n");
|
||||
dev_err(&pil->dev, "%s: Failed to map memory\n",
|
||||
pil->desc->name);
|
||||
ret = -ENOMEM;
|
||||
goto release_fw;
|
||||
}
|
||||
@@ -195,7 +197,8 @@ static int load_segment(const struct elf32_phdr *phdr, unsigned num,
|
||||
size = min_t(size_t, IOMAP_SIZE, count);
|
||||
buf = ioremap(paddr, size);
|
||||
if (!buf) {
|
||||
dev_err(&pil->dev, "Failed to map memory\n");
|
||||
dev_err(&pil->dev, "%s: Failed to map memory\n",
|
||||
pil->desc->name);
|
||||
ret = -ENOMEM;
|
||||
goto release_fw;
|
||||
}
|
||||
@@ -210,7 +213,8 @@ static int load_segment(const struct elf32_phdr *phdr, unsigned num,
|
||||
ret = pil->desc->ops->verify_blob(pil->desc, phdr->p_paddr,
|
||||
phdr->p_memsz);
|
||||
if (ret)
|
||||
dev_err(&pil->dev, "Blob%u failed verification\n", num);
|
||||
dev_err(&pil->dev, "%s: Blob%u failed verification\n",
|
||||
pil->desc->name, num);
|
||||
}
|
||||
|
||||
release_fw:
|
||||
@@ -241,38 +245,43 @@ static int load_image(struct pil_device *pil)
|
||||
snprintf(fw_name, sizeof(fw_name), "%s.mdt", pil->desc->name);
|
||||
ret = request_firmware(&fw, fw_name, &pil->dev);
|
||||
if (ret) {
|
||||
dev_err(&pil->dev, "Failed to locate %s\n", fw_name);
|
||||
dev_err(&pil->dev, "%s: Failed to locate %s\n",
|
||||
pil->desc->name, fw_name);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (fw->size < sizeof(*ehdr)) {
|
||||
dev_err(&pil->dev, "Not big enough to be an elf header\n");
|
||||
dev_err(&pil->dev, "%s: Not big enough to be an elf header\n",
|
||||
pil->desc->name);
|
||||
ret = -EIO;
|
||||
goto release_fw;
|
||||
}
|
||||
|
||||
ehdr = (struct elf32_hdr *)fw->data;
|
||||
if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG)) {
|
||||
dev_err(&pil->dev, "Not an elf header\n");
|
||||
dev_err(&pil->dev, "%s: Not an elf header\n", pil->desc->name);
|
||||
ret = -EIO;
|
||||
goto release_fw;
|
||||
}
|
||||
|
||||
if (ehdr->e_phnum == 0) {
|
||||
dev_err(&pil->dev, "No loadable segments\n");
|
||||
dev_err(&pil->dev, "%s: No loadable segments\n",
|
||||
pil->desc->name);
|
||||
ret = -EIO;
|
||||
goto release_fw;
|
||||
}
|
||||
if (sizeof(struct elf32_phdr) * ehdr->e_phnum +
|
||||
sizeof(struct elf32_hdr) > fw->size) {
|
||||
dev_err(&pil->dev, "Program headers not within mdt\n");
|
||||
dev_err(&pil->dev, "%s: Program headers not within mdt\n",
|
||||
pil->desc->name);
|
||||
ret = -EIO;
|
||||
goto release_fw;
|
||||
}
|
||||
|
||||
ret = pil->desc->ops->init_image(pil->desc, fw->data, fw->size);
|
||||
if (ret) {
|
||||
dev_err(&pil->dev, "Invalid firmware metadata\n");
|
||||
dev_err(&pil->dev, "%s: Invalid firmware metadata\n",
|
||||
pil->desc->name);
|
||||
goto release_fw;
|
||||
}
|
||||
|
||||
@@ -283,25 +292,27 @@ static int load_image(struct pil_device *pil)
|
||||
|
||||
ret = load_segment(phdr, i, pil);
|
||||
if (ret) {
|
||||
dev_err(&pil->dev, "Failed to load segment %d\n",
|
||||
i);
|
||||
dev_err(&pil->dev, "%s: Failed to load segment %d\n",
|
||||
pil->desc->name, i);
|
||||
goto release_fw;
|
||||
}
|
||||
}
|
||||
|
||||
ret = pil_proxy_vote(pil);
|
||||
if (ret) {
|
||||
dev_err(&pil->dev, "Failed to proxy vote\n");
|
||||
dev_err(&pil->dev, "%s: Failed to proxy vote\n",
|
||||
pil->desc->name);
|
||||
goto release_fw;
|
||||
}
|
||||
|
||||
ret = pil->desc->ops->auth_and_reset(pil->desc);
|
||||
if (ret) {
|
||||
dev_err(&pil->dev, "Failed to bring out of reset\n");
|
||||
dev_err(&pil->dev, "%s: Failed to bring out of reset\n",
|
||||
pil->desc->name);
|
||||
proxy_timeout = 0; /* Remove proxy vote immediately on error */
|
||||
goto err_boot;
|
||||
}
|
||||
dev_info(&pil->dev, "brought %s out of reset\n", pil->desc->name);
|
||||
dev_info(&pil->dev, "%s: Brought out of reset\n", pil->desc->name);
|
||||
err_boot:
|
||||
pil_proxy_unvote(pil, proxy_timeout);
|
||||
release_fw:
|
||||
@@ -397,7 +408,8 @@ void pil_put(void *peripheral_handle)
|
||||
return;
|
||||
|
||||
mutex_lock(&pil->lock);
|
||||
if (WARN(!pil->count, "%s: Reference count mismatch\n", __func__))
|
||||
if (WARN(!pil->count, "%s: %s: Reference count mismatch\n",
|
||||
pil->desc->name, __func__))
|
||||
goto err_out;
|
||||
if (!--pil->count)
|
||||
pil_shutdown(pil);
|
||||
@@ -428,7 +440,8 @@ void pil_force_shutdown(const char *name)
|
||||
}
|
||||
|
||||
mutex_lock(&pil->lock);
|
||||
if (!WARN(!pil->count, "%s: Reference count mismatch\n", __func__))
|
||||
if (!WARN(!pil->count, "%s: %s: Reference count mismatch\n",
|
||||
pil->desc->name, __func__))
|
||||
pil_shutdown(pil);
|
||||
mutex_unlock(&pil->lock);
|
||||
|
||||
@@ -448,7 +461,8 @@ int pil_force_boot(const char *name)
|
||||
}
|
||||
|
||||
mutex_lock(&pil->lock);
|
||||
if (!WARN(!pil->count, "%s: Reference count mismatch\n", __func__))
|
||||
if (!WARN(!pil->count, "%s: %s: Reference count mismatch\n",
|
||||
pil->desc->name, __func__))
|
||||
ret = load_image(pil);
|
||||
if (!ret)
|
||||
pil_set_state(pil, PIL_ONLINE);
|
||||
|
||||
Reference in New Issue
Block a user