GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
+1816
File diff suppressed because it is too large
Load Diff
+77
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright 2018-2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
.globl plat_secondary_cold_boot_setup
|
||||
.globl plat_is_my_cpu_primary
|
||||
.globl plat_reset_handler
|
||||
.globl platform_mem_init
|
||||
|
||||
|
||||
func platform_mem1_init
|
||||
ret
|
||||
endfunc platform_mem1_init
|
||||
|
||||
|
||||
func platform_mem_init
|
||||
ret
|
||||
endfunc platform_mem_init
|
||||
|
||||
|
||||
func apply_platform_errata
|
||||
|
||||
ret
|
||||
endfunc apply_platform_errata
|
||||
|
||||
|
||||
func plat_reset_handler
|
||||
mov x29, x30
|
||||
bl apply_platform_errata
|
||||
|
||||
#if defined(IMAGE_BL31)
|
||||
ldr x0, =POLICY_SMMU_PAGESZ_64K
|
||||
cbz x0, 1f
|
||||
/* Set the SMMU page size in the sACR register */
|
||||
bl _set_smmu_pagesz_64
|
||||
#endif
|
||||
1:
|
||||
mov x30, x29
|
||||
|
||||
ret
|
||||
endfunc plat_reset_handler
|
||||
|
||||
|
||||
/* void plat_secondary_cold_boot_setup (void);
|
||||
*
|
||||
* This function performs any platform specific actions
|
||||
* needed for a secondary cpu after a cold reset e.g
|
||||
* mark the cpu's presence, mechanism to place it in a
|
||||
* holding pen etc.
|
||||
*/
|
||||
func plat_secondary_cold_boot_setup
|
||||
/* lx2160a does not do cold boot for secondary CPU */
|
||||
cb_panic:
|
||||
b cb_panic
|
||||
endfunc plat_secondary_cold_boot_setup
|
||||
|
||||
|
||||
/* unsigned int plat_is_my_cpu_primary (void);
|
||||
*
|
||||
* Find out whether the current cpu is the primary
|
||||
* cpu.
|
||||
*/
|
||||
func plat_is_my_cpu_primary
|
||||
mrs x0, mpidr_el1
|
||||
and x0, x0, #(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)
|
||||
cmp x0, 0x0
|
||||
cset w0, eq
|
||||
ret
|
||||
endfunc plat_is_my_cpu_primary
|
||||
+229
@@ -0,0 +1,229 @@
|
||||
/*
|
||||
* Copyright 2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
*/
|
||||
|
||||
.section .text, "ax"
|
||||
|
||||
#include <asm_macros.S>
|
||||
|
||||
#ifndef NXP_COINED_BB
|
||||
#include <flash_info.h>
|
||||
#include <fspi.h>
|
||||
#endif
|
||||
#include <regs.h>
|
||||
#ifdef NXP_COINED_BB
|
||||
#include <snvs.h>
|
||||
#endif
|
||||
|
||||
#include <plat_warm_rst.h>
|
||||
#include <platform_def.h>
|
||||
|
||||
#define SDRAM_CFG 0x110
|
||||
#define SDRAM_CFG_2 0x114
|
||||
#define SDRAM_MD_CNTL 0x120
|
||||
#define SDRAM_INTERVAL 0x124
|
||||
#define TIMING_CFG_10 0x258
|
||||
#define DEBUG_2 0xF04
|
||||
#define DEBUG_26 0xF64
|
||||
#define DDR_DSR2 0xB24
|
||||
|
||||
#define DDR_CNTRLR_2 0x2
|
||||
#define COUNT_100 1000
|
||||
|
||||
.globl _soc_sys_warm_reset
|
||||
.align 12
|
||||
|
||||
func _soc_sys_warm_reset
|
||||
mov x3, xzr
|
||||
b touch_line0
|
||||
start_line0:
|
||||
mov x3, #1
|
||||
mov x2, #NUM_OF_DDRC
|
||||
ldr x1, =NXP_DDR_ADDR
|
||||
1:
|
||||
ldr w0, [x1, #SDRAM_CFG]
|
||||
orr w0, w0, #SDRAM_CFG_MEM_HLT
|
||||
str w0, [x1, #SDRAM_CFG]
|
||||
2:
|
||||
ldr w0, [x1, #DEBUG_2]
|
||||
and w0, w0, #DDR_DBG_2_MEM_IDLE
|
||||
cbz w0, 2b
|
||||
|
||||
ldr w0, [x1, #DEBUG_26]
|
||||
orr w0, w0, #DDR_DEBUG_26_BIT_12
|
||||
orr w0, w0, #DDR_DEBUG_26_BIT_13
|
||||
orr w0, w0, #DDR_DEBUG_26_BIT_14
|
||||
touch_line0:
|
||||
cbz x3, touch_line1
|
||||
|
||||
orr w0, w0, #DDR_DEBUG_26_BIT_15
|
||||
orr w0, w0, #DDR_DEBUG_26_BIT_16
|
||||
str w0, [x1, #DEBUG_26]
|
||||
|
||||
ldr w0, [x1, #SDRAM_CFG_2]
|
||||
orr w0, w0, #SDRAM_CFG2_FRC_SR
|
||||
str w0, [x1, #SDRAM_CFG_2]
|
||||
|
||||
3:
|
||||
ldr w0, [x1, #DDR_DSR2]
|
||||
orr w0, w0, #DDR_DSR_2_PHY_INIT_CMPLT
|
||||
str w0, [x1, #DDR_DSR2]
|
||||
ldr w0, [x1, #DDR_DSR2]
|
||||
and w0, w0, #DDR_DSR_2_PHY_INIT_CMPLT
|
||||
cbnz w0, 3b
|
||||
|
||||
ldr w0, [x1, #SDRAM_INTERVAL]
|
||||
and w0, w0, #SDRAM_INTERVAL_REFINT_CLEAR
|
||||
str w0, [x1, #SDRAM_INTERVAL]
|
||||
touch_line1:
|
||||
cbz x3, touch_line2
|
||||
|
||||
ldr w0, [x1, #SDRAM_MD_CNTL]
|
||||
orr w0, w0, #MD_CNTL_CKE(1)
|
||||
orr w0, w0, #MD_CNTL_MD_EN
|
||||
str w0, [x1, #SDRAM_MD_CNTL]
|
||||
|
||||
ldr w0, [x1, #TIMING_CFG_10]
|
||||
orr w0, w0, #DDR_TIMING_CFG_10_T_STAB
|
||||
str w0, [x1, #TIMING_CFG_10]
|
||||
|
||||
ldr w0, [x1, #SDRAM_CFG_2]
|
||||
and w0, w0, #SDRAM_CFG2_FRC_SR_CLEAR
|
||||
str w0, [x1, #SDRAM_CFG_2]
|
||||
|
||||
4:
|
||||
ldr w0, [x1, #DDR_DSR2]
|
||||
and w0, w0, #DDR_DSR_2_PHY_INIT_CMPLT
|
||||
cbz w0, 4b
|
||||
nop
|
||||
touch_line2:
|
||||
cbz x3, touch_line3
|
||||
|
||||
ldr w0, [x1, #DEBUG_26]
|
||||
orr w0, w0, #DDR_DEBUG_26_BIT_25
|
||||
and w0, w0, #DDR_DEBUG_26_BIT_24_CLEAR
|
||||
str w0, [x1, #DEBUG_26]
|
||||
|
||||
cmp x2, #DDR_CNTRLR_2
|
||||
b.ne 5f
|
||||
ldr x1, =NXP_DDR2_ADDR
|
||||
mov x2, xzr
|
||||
b 1b
|
||||
|
||||
5:
|
||||
mov x5, xzr
|
||||
6:
|
||||
add x5, x5, #1
|
||||
cmp x5, #COUNT_100
|
||||
b.ne 6b
|
||||
nop
|
||||
touch_line3:
|
||||
cbz x3, touch_line4
|
||||
#ifdef NXP_COINED_BB
|
||||
ldr x1, =NXP_SNVS_ADDR
|
||||
ldr w0, [x1, #NXP_APP_DATA_LP_GPR_OFFSET]
|
||||
|
||||
/* On Warm Boot is enabled, then zeroth bit
|
||||
* of SNVS LP GPR register 0 will used
|
||||
* to save the status of warm-reset as a cause.
|
||||
*/
|
||||
orr w0, w0, #(1 << NXP_LPGPR_ZEROTH_BIT)
|
||||
|
||||
/* write back */
|
||||
str w0, [x1, #NXP_APP_DATA_LP_GPR_OFFSET]
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
touch_line4:
|
||||
cbz x3, touch_line6
|
||||
#elif !(ERLY_WRM_RST_FLG_FLSH_UPDT)
|
||||
ldr x1, =NXP_FLEXSPI_ADDR
|
||||
ldr w0, [x1, #FSPI_IPCMD]
|
||||
orr w0, w0, #FSPI_IPCMD_TRG_MASK
|
||||
str w0, [x1, #FSPI_IPCMD]
|
||||
7:
|
||||
ldr w0, [x1, #FSPI_INTR]
|
||||
and w0, w0, #FSPI_INTR_IPCMDDONE_MASK
|
||||
cmp w0, #0
|
||||
b.eq 7b
|
||||
|
||||
ldr w0, [x1, #FSPI_IPTXFCR]
|
||||
orr w0, w0, #FSPI_IPTXFCR_CLR
|
||||
str w0, [x1, #FSPI_IPTXFCR]
|
||||
|
||||
ldr w0, [x1, #FSPI_INTR]
|
||||
orr w0, w0, #FSPI_INTR_IPCMDDONE_MASK
|
||||
str w0, [x1, #FSPI_INTR]
|
||||
nop
|
||||
touch_line4:
|
||||
cbz x3, touch_line5
|
||||
/* flexspi driver has an api
|
||||
* is_flash_busy().
|
||||
* Impelementation of the api will not
|
||||
* fit-in in 1 cache line.
|
||||
* instead a nop-cycles are introduced to
|
||||
* simulate the wait time for flash write
|
||||
* completion.
|
||||
*
|
||||
* Note: This wait time varies from flash to flash.
|
||||
*/
|
||||
|
||||
mov x0, #FLASH_WR_COMP_WAIT_BY_NOP_COUNT
|
||||
8:
|
||||
sub x0, x0, #1
|
||||
nop
|
||||
cmp x0, #0
|
||||
b.ne 8b
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
touch_line5:
|
||||
cbz x3, touch_line6
|
||||
#endif
|
||||
ldr x2, =NXP_RST_ADDR
|
||||
/* clear the RST_REQ_MSK and SW_RST_REQ */
|
||||
mov w0, #0x00000000
|
||||
str w0, [x2, #RSTCNTL_OFFSET]
|
||||
|
||||
/* initiate the sw reset request */
|
||||
mov w0, #SW_RST_REQ_INIT
|
||||
str w0, [x2, #RSTCNTL_OFFSET]
|
||||
|
||||
/* In case this address range is mapped as cacheable,
|
||||
* flush the write out of the dcaches.
|
||||
*/
|
||||
add x2, x2, #RSTCNTL_OFFSET
|
||||
dc cvac, x2
|
||||
dsb st
|
||||
isb
|
||||
|
||||
/* Function does not return */
|
||||
b .
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
touch_line6:
|
||||
cbz x3, start_line0
|
||||
|
||||
endfunc _soc_sys_warm_reset
|
||||
Reference in New Issue
Block a user