sc7280: Add Modem region to avoid modem cleanup in Secboot reboot
Modem uses different memory regions based on LTE/WiFi. This adds correct carve-out to prevent region being disturbed. BUG=b:182963902 TEST=Validated on qualcomm sc7280 developement board Signed-off-by: T Michael Turney <quic_mturney@quicinc.com> Change-Id: I56bfb210606b08893ff71dd1b6679f1ec102ec95 Reviewed-on: https://review.coreboot.org/c/coreboot/+/58545 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Shelley Chen <shchen@google.com>
This commit is contained in:
parent
bfdc132436
commit
730107e6c1
5 changed files with 31 additions and 0 deletions
|
@ -25,5 +25,6 @@ DECLARE_REGION(dram_wlan)
|
||||||
DECLARE_REGION(dram_wpss)
|
DECLARE_REGION(dram_wpss)
|
||||||
DECLARE_REGION(shrm)
|
DECLARE_REGION(shrm)
|
||||||
DECLARE_REGION(dram_cpucp)
|
DECLARE_REGION(dram_cpucp)
|
||||||
|
DECLARE_REGION(dram_modem)
|
||||||
|
|
||||||
#endif // _SOC_QUALCOMM_SYMBOLS_COMMON_H_
|
#endif // _SOC_QUALCOMM_SYMBOLS_COMMON_H_
|
||||||
|
|
|
@ -31,10 +31,12 @@ romstage-y += ../common/qclib.c
|
||||||
romstage-y += ../common/mmu.c
|
romstage-y += ../common/mmu.c
|
||||||
romstage-y += mmu.c
|
romstage-y += mmu.c
|
||||||
romstage-y += ../common/usb/usb.c
|
romstage-y += ../common/usb/usb.c
|
||||||
|
romstage-y += carve_out.c
|
||||||
romstage-$(CONFIG_DRIVERS_UART) += ../common/qupv3_uart.c
|
romstage-$(CONFIG_DRIVERS_UART) += ../common/qupv3_uart.c
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
ramstage-y += soc.c
|
ramstage-y += soc.c
|
||||||
|
ramstage-y += carve_out.c
|
||||||
ramstage-y += cbmem.c
|
ramstage-y += cbmem.c
|
||||||
ramstage-$(CONFIG_DRIVERS_UART) += ../common/qupv3_uart.c
|
ramstage-$(CONFIG_DRIVERS_UART) += ../common/qupv3_uart.c
|
||||||
ramstage-y += ../common/usb/usb.c
|
ramstage-y += ../common/usb/usb.c
|
||||||
|
|
22
src/soc/qualcomm/sc7280/carve_out.c
Normal file
22
src/soc/qualcomm/sc7280/carve_out.c
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
|
||||||
|
#include <arch/stages.h>
|
||||||
|
#include <soc/mmu_common.h>
|
||||||
|
#include <soc/symbols_common.h>
|
||||||
|
#include <device/mmio.h>
|
||||||
|
|
||||||
|
#define MODEM_ONLY 0x004c5445
|
||||||
|
|
||||||
|
bool soc_modem_carve_out(void **start, void **end)
|
||||||
|
{
|
||||||
|
uint32_t modem_id = read32(_modem_id);
|
||||||
|
|
||||||
|
switch (modem_id) {
|
||||||
|
case MODEM_ONLY:
|
||||||
|
*start = _dram_modem;
|
||||||
|
*end = _edram_modem;
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -56,6 +56,7 @@ SECTIONS
|
||||||
REGION(dram_soc, 0x80900000, 0x200000, 0x1000)
|
REGION(dram_soc, 0x80900000, 0x200000, 0x1000)
|
||||||
REGION(dram_cpucp,0x80B00000, 0x100000, 0x1000)
|
REGION(dram_cpucp,0x80B00000, 0x100000, 0x1000)
|
||||||
REGION(dram_wlan, 0x80C00000, 0xC00000, 0x1000)
|
REGION(dram_wlan, 0x80C00000, 0xC00000, 0x1000)
|
||||||
|
REGION(dram_modem, 0x8B800000, 0xF600000, 0x1000)
|
||||||
REGION(dram_wpss, 0x9AE00000, 0x1900000, 0x1000)
|
REGION(dram_wpss, 0x9AE00000, 0x1900000, 0x1000)
|
||||||
POSTRAM_CBFS_CACHE(0x9F800000, 16M)
|
POSTRAM_CBFS_CACHE(0x9F800000, 16M)
|
||||||
RAMSTAGE(0xA0800000, 16M)
|
RAMSTAGE(0xA0800000, 16M)
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
|
|
||||||
static void soc_read_resources(struct device *dev)
|
static void soc_read_resources(struct device *dev)
|
||||||
{
|
{
|
||||||
|
void *start = NULL;
|
||||||
|
void *end = NULL;
|
||||||
|
|
||||||
ram_resource(dev, 0, (uintptr_t)ddr_region->offset / KiB,
|
ram_resource(dev, 0, (uintptr_t)ddr_region->offset / KiB,
|
||||||
ddr_region->size / KiB);
|
ddr_region->size / KiB);
|
||||||
reserved_ram_resource(dev, 1, (uintptr_t)_dram_soc / KiB,
|
reserved_ram_resource(dev, 1, (uintptr_t)_dram_soc / KiB,
|
||||||
|
@ -21,6 +24,8 @@ static void soc_read_resources(struct device *dev)
|
||||||
REGION_SIZE(dram_aop) / KiB);
|
REGION_SIZE(dram_aop) / KiB);
|
||||||
reserved_ram_resource(dev, 5, (uintptr_t)_dram_cpucp / KiB,
|
reserved_ram_resource(dev, 5, (uintptr_t)_dram_cpucp / KiB,
|
||||||
REGION_SIZE(dram_cpucp) / KiB);
|
REGION_SIZE(dram_cpucp) / KiB);
|
||||||
|
if (soc_modem_carve_out(&start, &end))
|
||||||
|
reserved_ram_resource(dev, 6, (uintptr_t)start / KiB, (end - start) / KiB);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void soc_init(struct device *dev)
|
static void soc_init(struct device *dev)
|
||||||
|
|
Loading…
Reference in a new issue