/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2020 MediaTek Inc. * * Author: Weijie Gao */ #include #include #include #include .set noreorder NESTED(lowlevel_init, 0, ra) /* Save ra and do real lowlevel initialization */ move s0, ra /* * Use SRAM from 802.11n MAC/BBP, 16KiB (0x10184000 ~ 0x10187fff) * NOTE: non-word operations may fail in this SRAM. * Use it as stack only for CPU/DRAM init which only has word operations. */ PTR_LI sp, 0xb0187f00 /* We still need a temporary gd for udelay */ PTR_SUBU \ sp, sp, GD_SIZE # reserve space for gd li t0, -16 and sp, sp, t0 # force 16 byte alignment move k0, sp # save gd pointer move fp, sp /* Clear gd */ move t0, k0 1: PTR_S zero, 0(t0) PTR_ADDIU t0, PTRSIZE blt t0, t1, 1b nop /* Do CPU & DRAM initialization */ PTR_LA t9, mt7620_init jalr t9 nop /* Restore ra */ move ra, s0 jr ra nop END(lowlevel_init)