acpi: Add missing cbfs_unmap()

cbfs_map() can allocate memory, so cbfs_unmap() should be
called before leaving the function.

BUG=b:278264488
TEST=Built and run with additional debugs on Skyrim device
to confirm that data are correctly unmapped

Change-Id: Ibf7ba6842f42404ad8bb415f8e7fda10403cbe2e
Signed-off-by: Grzegorz Bernacki <bernacki@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/74715
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Jakub Czapiga <jacz@semihalf.com>
Reviewed-by: Tim Van Patten <timvp@google.com>
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c
index a57d498..10b0707 100644
--- a/src/acpi/acpi.c
+++ b/src/acpi/acpi.c
@@ -1905,6 +1905,7 @@
 	    || dsdt_file->length < sizeof(acpi_header_t)
 	    || memcmp(dsdt_file->signature, "DSDT", 4) != 0) {
 		printk(BIOS_ERR, "Invalid DSDT file, skipping ACPI tables\n");
+		cbfs_unmap(dsdt_file);
 		return current;
 	}
 
@@ -1914,6 +1915,7 @@
 		|| slic_file->length < sizeof(acpi_header_t)
 		|| (memcmp(slic_file->signature, "SLIC", 4) != 0
 		    && memcmp(slic_file->signature, "MSDM", 4) != 0))) {
+		cbfs_unmap(slic_file);
 		slic_file = 0;
 	}
 
@@ -1998,8 +2000,17 @@
 		current += slic_file->length;
 		current = acpi_align_current(current);
 		acpi_add_table(rsdp, slic);
+		cbfs_unmap(slic_file);
 	}
 
+	/*
+	 * cbfs_unmap() uses mem_pool_free() which works correctly only
+	 * if freeing is done in reverse order than memory allocation.
+	 * This is why unmapping of dsdt_file must be done after
+	 * unmapping slic file.
+	 */
+	cbfs_unmap(dsdt_file);
+
 	printk(BIOS_DEBUG, "ACPI:     * SSDT\n");
 	ssdt = (acpi_header_t *)current;
 	acpi_create_ssdt_generator(ssdt, ACPI_TABLE_CREATOR);