diff options
author | Aurora pro automerger <aurora-pro-automerger@google.com> | 2022-06-14 13:50:26 -0700 |
---|---|---|
committer | John Scheible <johnscheible@google.com> | 2022-06-15 19:51:41 +0000 |
commit | 399265ce726dfc7e5b02352fbf17683a4ee15950 (patch) | |
tree | 701de08e23d0f3104a3c216a4912140d652f05c6 /gxp-firmware.c | |
parent | b16f2fa6d4a747b68c8eab8fefb4dd94537d5426 (diff) | |
download | gs201-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.c | 27 |
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]); |