summaryrefslogtreecommitdiff
path: root/gxp-firmware.c
diff options
context:
space:
mode:
authorAurora pro automerger <aurora-pro-automerger@google.com>2022-06-14 13:50:26 -0700
committerJohn Scheible <johnscheible@google.com>2022-06-15 19:51:41 +0000
commit399265ce726dfc7e5b02352fbf17683a4ee15950 (patch)
tree701de08e23d0f3104a3c216a4912140d652f05c6 /gxp-firmware.c
parentb16f2fa6d4a747b68c8eab8fefb4dd94537d5426 (diff)
downloadgs201-399265ce726dfc7e5b02352fbf17683a4ee15950.tar.gz
[Copybara Auto Merge] Merge branch 'gs201-release' into 'android13-gs-pixel-5.10-tm-d1'android-13.0.0_r0.45android-13.0.0_r0.32android-13.0.0_r0.31android-gs-pantah-5.10-android13-d1
Revert "gxp: authenticate firmware after requesting it" Bug: 235447772 gxp: Add option to disable DSP FW auth Bug: 235135800 gxp: Fix hangs and OOB writes when auth fails Bug: 234947988 gxp: Adjust the per-core FW size from 16MB to 1MB Bug: 228277106 gxp: Add enable_debug_dump argument for insmod Bug: 234529356 gxp: Dynamically allocate memory for debug dump buffer Bug: 234529355 gxp: Trigger debug dump only when firmware is up and running Bug: 233660431 Bug: 233607168 gxp: remove support for unsigned firmware Bug: 220246540 gxp: authenticate firmware after requesting it Bug: 232715929 gxp: Expose additional DVFS states in power APIs Bug: 233929549 GitOrigin-RevId: 99f54518439e715bff19b7b45b9cafe635febb77 Change-Id: Iee1b3c93aad333db2d051017e3509279ceb35f38
Diffstat (limited to 'gxp-firmware.c')
-rw-r--r--gxp-firmware.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/gxp-firmware.c b/gxp-firmware.c
index 15497cf..4e207b9 100644
--- a/gxp-firmware.c
+++ b/gxp-firmware.c
@@ -12,6 +12,7 @@
#include <linux/gsa/gsa_image_auth.h>
#include <linux/io.h>
#include <linux/kernel.h>
+#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/types.h>
@@ -34,6 +35,9 @@
#define FW_HEADER_SIZE (0x1000)
#define FW_IMAGE_TYPE_OFFSET (0x400)
+static int gxp_dsp_fw_auth_disable;
+module_param_named(dsp_fw_auth_disable, gxp_dsp_fw_auth_disable, int, 0660);
+
static int
request_dsp_firmware(struct gxp_dev *gxp, char *name_prefix,
const struct firmware *out_firmwares[GXP_NUM_CORES])
@@ -115,7 +119,7 @@ static int elf_load_segments(struct gxp_dev *gxp, const u8 *elf_data,
if (!((da >= (u32)buffer->daddr) &&
((da + memsz) <= ((u32)buffer->daddr +
- (u32)buffer->size - 1)))) {
+ (u32)buffer->size)))) {
/*
* Some BSS data may be referenced from TCM, and can be
* skipped while loading
@@ -165,15 +169,6 @@ static int elf_load_segments(struct gxp_dev *gxp, const u8 *elf_data,
return ret;
}
-/* TODO (b/220246540): remove after unsigned firmware support is phased out */
-static bool gxp_firmware_image_is_signed(const u8 *data)
-{
- return data[FW_IMAGE_TYPE_OFFSET + 0] == 'D' &&
- data[FW_IMAGE_TYPE_OFFSET + 1] == 'S' &&
- data[FW_IMAGE_TYPE_OFFSET + 2] == 'P' &&
- data[FW_IMAGE_TYPE_OFFSET + 3] == 'F';
-}
-
static int
gxp_firmware_load_authenticated(struct gxp_dev *gxp, const struct firmware *fw,
const struct gxp_mapped_resource *buffer)
@@ -184,10 +179,11 @@ gxp_firmware_load_authenticated(struct gxp_dev *gxp, const struct firmware *fw,
dma_addr_t header_dma_addr;
int ret;
- /* TODO (b/220246540): remove after unsigned firmware support is phased out */
- if (!gxp_firmware_image_is_signed(data)) {
- dev_info(gxp->dev, "Loading unsigned firmware\n");
- return elf_load_segments(gxp, data, size, buffer);
+ if (gxp_dsp_fw_auth_disable) {
+ dev_warn(gxp->dev,
+ "DSP FW authentication disabled, skipping\n");
+ return elf_load_segments(gxp, data + FW_HEADER_SIZE,
+ size - FW_HEADER_SIZE, buffer);
}
if (!gxp->gsa_dev) {
@@ -272,6 +268,9 @@ static int gxp_firmware_load(struct gxp_dev *gxp, uint core)
void __iomem *core_scratchpad_base;
int ret;
+ if (!gxp->firmwares[core])
+ return -ENODEV;
+
/* Authenticate and load firmware to System RAM */
ret = gxp_firmware_load_authenticated(gxp, gxp->firmwares[core],
&gxp->fwbufs[core]);