214 lines
5.0 KiB
ArmAsm
214 lines
5.0 KiB
ArmAsm
|
/* Copyright 2016 The Chromium OS Authors. All rights reserved.
|
||
|
* Use of this source code is governed by a BSD-style license that can be
|
||
|
* found in the LICENSE file.
|
||
|
*/
|
||
|
#include "config.h"
|
||
|
#include "rwsig.h"
|
||
|
|
||
|
OUTPUT_FORMAT(BFD_FORMAT, BFD_FORMAT, BFD_FORMAT)
|
||
|
OUTPUT_ARCH(BFD_ARCH)
|
||
|
ENTRY(reset)
|
||
|
|
||
|
SECTIONS
|
||
|
{
|
||
|
. = CONFIG_ISH_BOOT_START; /* ISH SRAM (640KB) begins at 0xFF000000 */
|
||
|
|
||
|
__aon_ro_start = .;
|
||
|
|
||
|
/* .init section should be first, since it contains the boot code */
|
||
|
.init : { *(.init*); }
|
||
|
.text : { *(.text.*); }
|
||
|
.text.unlikely : { *(.text.unlikely*); }
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
.rodata : {
|
||
|
/* Symbols defined here are declared in link_defs.h */
|
||
|
__irqprio = .;
|
||
|
KEEP(*(.rodata.irqprio))
|
||
|
__irqprio_end = .;
|
||
|
|
||
|
__irq_data = .;
|
||
|
KEEP(*(.rodata.irqs))
|
||
|
__irq_data_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
__cmds = .;
|
||
|
KEEP(*(SORT(.rodata.cmds*)))
|
||
|
__cmds_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
__extension_cmds = .;
|
||
|
KEEP(*(.rodata.extensioncmds))
|
||
|
__extension_cmds_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
__hcmds = .;
|
||
|
KEEP(*(SORT(.rodata.hcmds*)))
|
||
|
__hcmds_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
__mkbp_evt_srcs = .;
|
||
|
KEEP(*(.rodata.evtsrcs))
|
||
|
__mkbp_evt_srcs_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
__hooks_init = .;
|
||
|
KEEP(*(.rodata.HOOK_INIT))
|
||
|
__hooks_init_end = .;
|
||
|
|
||
|
__hooks_pre_freq_change = .;
|
||
|
KEEP(*(.rodata.HOOK_PRE_FREQ_CHANGE))
|
||
|
__hooks_pre_freq_change_end = .;
|
||
|
|
||
|
__hooks_freq_change = .;
|
||
|
KEEP(*(.rodata.HOOK_FREQ_CHANGE))
|
||
|
__hooks_freq_change_end = .;
|
||
|
|
||
|
__hooks_sysjump = .;
|
||
|
KEEP(*(.rodata.HOOK_SYSJUMP))
|
||
|
__hooks_sysjump_end = .;
|
||
|
|
||
|
__hooks_chipset_pre_init = .;
|
||
|
KEEP(*(.rodata.HOOK_CHIPSET_PRE_INIT))
|
||
|
__hooks_chipset_pre_init_end = .;
|
||
|
|
||
|
__hooks_chipset_startup = .;
|
||
|
KEEP(*(.rodata.HOOK_CHIPSET_STARTUP))
|
||
|
__hooks_chipset_startup_end = .;
|
||
|
|
||
|
__hooks_chipset_resume = .;
|
||
|
KEEP(*(.rodata.HOOK_CHIPSET_RESUME))
|
||
|
__hooks_chipset_resume_end = .;
|
||
|
|
||
|
__hooks_chipset_suspend = .;
|
||
|
KEEP(*(.rodata.HOOK_CHIPSET_SUSPEND))
|
||
|
__hooks_chipset_suspend_end = .;
|
||
|
|
||
|
__hooks_chipset_shutdown = .;
|
||
|
KEEP(*(.rodata.HOOK_CHIPSET_SHUTDOWN))
|
||
|
__hooks_chipset_shutdown_end = .;
|
||
|
|
||
|
__hooks_chipset_reset = .;
|
||
|
KEEP(*(.rodata.HOOK_CHIPSET_RESET))
|
||
|
__hooks_chipset_reset_end = .;
|
||
|
|
||
|
__hooks_ac_change = .;
|
||
|
KEEP(*(.rodata.HOOK_AC_CHANGE))
|
||
|
__hooks_ac_change_end = .;
|
||
|
|
||
|
__hooks_lid_change = .;
|
||
|
KEEP(*(.rodata.HOOK_LID_CHANGE))
|
||
|
__hooks_lid_change_end = .;
|
||
|
|
||
|
__hooks_tablet_mode_change = .;
|
||
|
KEEP(*(.rodata.HOOK_TABLET_MODE_CHANGE))
|
||
|
__hooks_tablet_mode_change_end = .;
|
||
|
|
||
|
__hooks_base_attached_change = .;
|
||
|
KEEP(*(.rodata.HOOK_BASE_ATTACHED_CHANGE))
|
||
|
__hooks_base_attached_change_end = .;
|
||
|
|
||
|
__hooks_pwrbtn_change = .;
|
||
|
KEEP(*(.rodata.HOOK_POWER_BUTTON_CHANGE))
|
||
|
__hooks_pwrbtn_change_end = .;
|
||
|
|
||
|
__hooks_battery_soc_change = .;
|
||
|
KEEP(*(.rodata.HOOK_BATTERY_SOC_CHANGE))
|
||
|
__hooks_battery_soc_change_end = .;
|
||
|
|
||
|
#ifdef CONFIG_USB_SUSPEND
|
||
|
__hooks_usb_change = .;
|
||
|
KEEP(*(.rodata.HOOK_USB_PM_CHANGE))
|
||
|
__hooks_usb_change_end = .;
|
||
|
#endif
|
||
|
|
||
|
__hooks_tick = .;
|
||
|
KEEP(*(.rodata.HOOK_TICK))
|
||
|
__hooks_tick_end = .;
|
||
|
|
||
|
__hooks_second = .;
|
||
|
KEEP(*(.rodata.HOOK_SECOND))
|
||
|
__hooks_second_end = .;
|
||
|
|
||
|
__hooks_usb_pd_disconnect = .;
|
||
|
KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT))
|
||
|
__hooks_usb_pd_disconnect_end = .;
|
||
|
|
||
|
__hooks_usb_pd_connect = .;
|
||
|
KEEP(*(.rodata.HOOK_USB_PD_CONNECT))
|
||
|
__hooks_usb_pd_connect_end = .;
|
||
|
|
||
|
__deferred_funcs = .;
|
||
|
KEEP(*(.rodata.deferred))
|
||
|
__deferred_funcs_end = .;
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
KEEP(*(.rodata.*))
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* ISH DMA need 64 bytes address align, in D0i3 low power state
|
||
|
* need copy RW part to IMR DDR via DMA
|
||
|
*/
|
||
|
. = ALIGN(64);
|
||
|
__aon_ro_end = .;
|
||
|
|
||
|
__aon_rw_start = .;
|
||
|
|
||
|
.data : {
|
||
|
__data_start = .;
|
||
|
*(.data.*);
|
||
|
__data_end = .;
|
||
|
}
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
.note.gnu.build-id : { *(.note.gnu.build-id); }
|
||
|
|
||
|
.bss : {
|
||
|
__bss_start = .;
|
||
|
|
||
|
*(.bss*);
|
||
|
*(COMMON*);
|
||
|
|
||
|
/*
|
||
|
* Reserve space for deferred function firing times.
|
||
|
* Each time is a uint64_t, each func is a 32-bit
|
||
|
* pointer, thus the scaling factor of two. The 8
|
||
|
* byte alignment of uint64_t is required by the ABI.
|
||
|
*/
|
||
|
|
||
|
. = ALIGN(8);
|
||
|
__deferred_until = .;
|
||
|
. += (__deferred_funcs_end - __deferred_funcs) * (8 / 4);
|
||
|
__deferred_until_end = .;
|
||
|
|
||
|
__bss_end = .;
|
||
|
__bss_size_words = ABSOLUTE((__bss_end - __bss_start) / 4);
|
||
|
|
||
|
/*
|
||
|
* Shared memory buffer must be at the end of
|
||
|
* preallocated RAM, so it can expand to use all the
|
||
|
* remaining RAM.
|
||
|
*/
|
||
|
__shared_mem_buf = .;
|
||
|
}
|
||
|
|
||
|
__aon_rw_end = . + CONFIG_SHAREDMEM_MINIMUM_SIZE;
|
||
|
|
||
|
ASSERT((__shared_mem_buf + CONFIG_SHAREDMEM_MINIMUM_SIZE) <=
|
||
|
(CONFIG_RAM_BASE + CONFIG_RAM_SIZE),
|
||
|
"Not enough space for shared memory.")
|
||
|
__ram_free = (CONFIG_RAM_BASE + CONFIG_RAM_SIZE) -
|
||
|
(__shared_mem_buf + CONFIG_SHAREDMEM_MINIMUM_SIZE);
|
||
|
|
||
|
/* TODO: Adjust __image_size to proper value for core minute-ia later */
|
||
|
__image_size = . - CONFIG_ISH_BOOT_START;
|
||
|
|
||
|
def_irq_low = ABSOLUTE(default_int_handler) & 0xFFFF;
|
||
|
def_irq_high = ABSOLUTE(default_int_handler) >> 16;
|
||
|
|
||
|
#ifdef CONFIG_ISH_PM_AONTASK
|
||
|
ish_persistent_data_aon = ABSOLUTE(CONFIG_AON_PERSISTENT_BASE);
|
||
|
#endif
|
||
|
}
|