1*83d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */ 2350b50eeSStefan Roese 3350b50eeSStefan Roese#include <config.h> 4350b50eeSStefan Roese#include <linux/linkage.h> 5350b50eeSStefan Roese 6944c7a31SStefan RoeseENTRY(save_boot_params) 7944c7a31SStefan Roese stmfd sp!, {r0 - r12, lr} /* @ save registers on stack */ 8944c7a31SStefan Roese ldr r12, =CONFIG_SPL_BOOTROM_SAVE 9944c7a31SStefan Roese str sp, [r12] 10944c7a31SStefan Roese b save_boot_params_ret 11944c7a31SStefan RoeseENDPROC(save_boot_params) 12944c7a31SStefan Roese 13944c7a31SStefan RoeseENTRY(return_to_bootrom) 14944c7a31SStefan Roese ldr r12, =CONFIG_SPL_BOOTROM_SAVE 15944c7a31SStefan Roese ldr sp, [r12] 16944c7a31SStefan Roese mov r0, #0x0 /* @ return value: 0x0 NO_ERR */ 17944c7a31SStefan Roese ldmfd sp!, {r0 - r12, pc} /* @ restore regs and return */ 18944c7a31SStefan RoeseENDPROC(return_to_bootrom) 19350b50eeSStefan Roese 20350b50eeSStefan Roese/* 21350b50eeSStefan Roese * cache_inv - invalidate Cache line 22350b50eeSStefan Roese * r0 - dest 23350b50eeSStefan Roese */ 24350b50eeSStefan Roese .global cache_inv 25350b50eeSStefan Roese .type cache_inv, %function 26350b50eeSStefan Roese cache_inv: 27350b50eeSStefan Roese 28350b50eeSStefan Roese stmfd sp!, {r1-r12} 29350b50eeSStefan Roese 30350b50eeSStefan Roese mcr p15, 0, r0, c7, c6, 1 31350b50eeSStefan Roese 32350b50eeSStefan Roese ldmfd sp!, {r1-r12} 33350b50eeSStefan Roese bx lr 34350b50eeSStefan Roese 35350b50eeSStefan Roese 36350b50eeSStefan Roese/* 37350b50eeSStefan Roese * flush_l1_v6 - l1 cache clean invalidate 38350b50eeSStefan Roese * r0 - dest 39350b50eeSStefan Roese */ 40350b50eeSStefan Roese .global flush_l1_v6 41350b50eeSStefan Roese .type flush_l1_v6, %function 42350b50eeSStefan Roese flush_l1_v6: 43350b50eeSStefan Roese 44350b50eeSStefan Roese stmfd sp!, {r1-r12} 45350b50eeSStefan Roese 46350b50eeSStefan Roese mcr p15, 0, r0, c7, c10, 5 /* @ data memory barrier */ 47350b50eeSStefan Roese mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */ 48350b50eeSStefan Roese mcr p15, 0, r0, c7, c10, 4 /* @ data sync barrier */ 49350b50eeSStefan Roese 50350b50eeSStefan Roese ldmfd sp!, {r1-r12} 51350b50eeSStefan Roese bx lr 52350b50eeSStefan Roese 53350b50eeSStefan Roese 54350b50eeSStefan Roese/* 55350b50eeSStefan Roese * flush_l1_v7 - l1 cache clean invalidate 56350b50eeSStefan Roese * r0 - dest 57350b50eeSStefan Roese */ 58350b50eeSStefan Roese .global flush_l1_v7 59350b50eeSStefan Roese .type flush_l1_v7, %function 60350b50eeSStefan Roese flush_l1_v7: 61350b50eeSStefan Roese 62350b50eeSStefan Roese stmfd sp!, {r1-r12} 63350b50eeSStefan Roese 64350b50eeSStefan Roese dmb /* @data memory barrier */ 65350b50eeSStefan Roese mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */ 66350b50eeSStefan Roese dsb /* @data sync barrier */ 67350b50eeSStefan Roese 68350b50eeSStefan Roese ldmfd sp!, {r1-r12} 69350b50eeSStefan Roese bx lr 70