1350b50eeSStefan Roese/* 2350b50eeSStefan Roese * SPDX-License-Identifier: GPL-2.0+ 3350b50eeSStefan Roese */ 4350b50eeSStefan Roese 5350b50eeSStefan Roese#include <config.h> 6350b50eeSStefan Roese#include <linux/linkage.h> 7350b50eeSStefan Roese 8*944c7a31SStefan RoeseENTRY(save_boot_params) 9*944c7a31SStefan Roese stmfd sp!, {r0 - r12, lr} /* @ save registers on stack */ 10*944c7a31SStefan Roese ldr r12, =CONFIG_SPL_BOOTROM_SAVE 11*944c7a31SStefan Roese str sp, [r12] 12*944c7a31SStefan Roese b save_boot_params_ret 13*944c7a31SStefan RoeseENDPROC(save_boot_params) 14*944c7a31SStefan Roese 15*944c7a31SStefan RoeseENTRY(return_to_bootrom) 16*944c7a31SStefan Roese ldr r12, =CONFIG_SPL_BOOTROM_SAVE 17*944c7a31SStefan Roese ldr sp, [r12] 18*944c7a31SStefan Roese mov r0, #0x0 /* @ return value: 0x0 NO_ERR */ 19*944c7a31SStefan Roese ldmfd sp!, {r0 - r12, pc} /* @ restore regs and return */ 20*944c7a31SStefan RoeseENDPROC(return_to_bootrom) 21350b50eeSStefan Roese 22350b50eeSStefan Roese/* 23350b50eeSStefan Roese * cache_inv - invalidate Cache line 24350b50eeSStefan Roese * r0 - dest 25350b50eeSStefan Roese */ 26350b50eeSStefan Roese .global cache_inv 27350b50eeSStefan Roese .type cache_inv, %function 28350b50eeSStefan Roese cache_inv: 29350b50eeSStefan Roese 30350b50eeSStefan Roese stmfd sp!, {r1-r12} 31350b50eeSStefan Roese 32350b50eeSStefan Roese mcr p15, 0, r0, c7, c6, 1 33350b50eeSStefan Roese 34350b50eeSStefan Roese ldmfd sp!, {r1-r12} 35350b50eeSStefan Roese bx lr 36350b50eeSStefan Roese 37350b50eeSStefan Roese 38350b50eeSStefan Roese/* 39350b50eeSStefan Roese * flush_l1_v6 - l1 cache clean invalidate 40350b50eeSStefan Roese * r0 - dest 41350b50eeSStefan Roese */ 42350b50eeSStefan Roese .global flush_l1_v6 43350b50eeSStefan Roese .type flush_l1_v6, %function 44350b50eeSStefan Roese flush_l1_v6: 45350b50eeSStefan Roese 46350b50eeSStefan Roese stmfd sp!, {r1-r12} 47350b50eeSStefan Roese 48350b50eeSStefan Roese mcr p15, 0, r0, c7, c10, 5 /* @ data memory barrier */ 49350b50eeSStefan Roese mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */ 50350b50eeSStefan Roese mcr p15, 0, r0, c7, c10, 4 /* @ data sync barrier */ 51350b50eeSStefan Roese 52350b50eeSStefan Roese ldmfd sp!, {r1-r12} 53350b50eeSStefan Roese bx lr 54350b50eeSStefan Roese 55350b50eeSStefan Roese 56350b50eeSStefan Roese/* 57350b50eeSStefan Roese * flush_l1_v7 - l1 cache clean invalidate 58350b50eeSStefan Roese * r0 - dest 59350b50eeSStefan Roese */ 60350b50eeSStefan Roese .global flush_l1_v7 61350b50eeSStefan Roese .type flush_l1_v7, %function 62350b50eeSStefan Roese flush_l1_v7: 63350b50eeSStefan Roese 64350b50eeSStefan Roese stmfd sp!, {r1-r12} 65350b50eeSStefan Roese 66350b50eeSStefan Roese dmb /* @data memory barrier */ 67350b50eeSStefan Roese mcr p15, 0, r0, c7, c14, 1 /* @ clean & invalidate D line */ 68350b50eeSStefan Roese dsb /* @data sync barrier */ 69350b50eeSStefan Roese 70350b50eeSStefan Roese ldmfd sp!, {r1-r12} 71350b50eeSStefan Roese bx lr 72