From 399265ce726dfc7e5b02352fbf17683a4ee15950 Mon Sep 17 00:00:00 2001 From: Aurora pro automerger Date: Tue, 14 Jun 2022 13:50:26 -0700 Subject: [Copybara Auto Merge] Merge branch 'gs201-release' into 'android13-gs-pixel-5.10-tm-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 --- gxp-firmware.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'gxp-firmware.c') 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 #include #include +#include #include #include @@ -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]); -- cgit v1.2.3