imx: bootaux: cleanup code

Use if (CONFIG_IS_ENABLED()) to make code cleaner
Enable elf support for i.MX8M

Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
Peng Fan 2022-04-29 16:03:11 +08:00 committed by Stefano Babic
parent 290ffe5788
commit 56c2dbdaba

View File

@ -14,7 +14,13 @@
#include <linux/compiler.h> #include <linux/compiler.h>
#include <cpu_func.h> #include <cpu_func.h>
#ifndef CONFIG_IMX8M /* Just to avoid build error */
#if CONFIG_IS_ENABLED(IMX8M)
#define SRC_M4C_NON_SCLR_RST_MASK BIT(0)
#define SRC_M4_ENABLE_MASK BIT(0)
#define SRC_M4_REG_OFFSET 0
#endif
const __weak struct rproc_att hostmap[] = { }; const __weak struct rproc_att hostmap[] = { };
static const struct rproc_att *get_host_mapping(unsigned long auxcore) static const struct rproc_att *get_host_mapping(unsigned long auxcore)
@ -59,7 +65,7 @@ static unsigned long load_elf_image_m_core_phdr(unsigned long addr)
return 0; return 0;
} }
dst = (void *)(phdr->p_paddr - mmap->da) + mmap->sa; dst = (void *)(ulong)(phdr->p_paddr - mmap->da) + mmap->sa;
src = (void *)addr + phdr->p_offset; src = (void *)addr + phdr->p_offset;
debug("Loading phdr %i to 0x%p (%i bytes)\n", debug("Loading phdr %i to 0x%p (%i bytes)\n",
@ -77,7 +83,6 @@ static unsigned long load_elf_image_m_core_phdr(unsigned long addr)
return ehdr->e_entry; return ehdr->e_entry;
} }
#endif
int arch_auxiliary_core_up(u32 core_id, ulong addr) int arch_auxiliary_core_up(u32 core_id, ulong addr)
{ {
@ -86,10 +91,6 @@ int arch_auxiliary_core_up(u32 core_id, ulong addr)
if (!addr) if (!addr)
return -EINVAL; return -EINVAL;
#ifdef CONFIG_IMX8M
stack = *(u32 *)addr;
pc = *(u32 *)(addr + 4);
#else
/* /*
* handling ELF64 binaries * handling ELF64 binaries
* isn't supported yet. * isn't supported yet.
@ -109,7 +110,7 @@ int arch_auxiliary_core_up(u32 core_id, ulong addr)
stack = *(u32 *)addr; stack = *(u32 *)addr;
pc = *(u32 *)(addr + 4); pc = *(u32 *)(addr + 4);
} }
#endif
printf("## Starting auxiliary core stack = 0x%08lX, pc = 0x%08lX...\n", printf("## Starting auxiliary core stack = 0x%08lX, pc = 0x%08lX...\n",
stack, pc); stack, pc);
@ -120,36 +121,32 @@ int arch_auxiliary_core_up(u32 core_id, ulong addr)
flush_dcache_all(); flush_dcache_all();
/* Enable M4 */ /* Enable M4 */
#ifdef CONFIG_IMX8M if (CONFIG_IS_ENABLED(IMX8M)) {
arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, 0, 0, arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, 0, 0, 0, 0, 0, 0, NULL);
0, 0, 0, 0, NULL); } else {
#else clrsetbits_le32(SRC_BASE_ADDR + SRC_M4_REG_OFFSET,
clrsetbits_le32(SRC_BASE_ADDR + SRC_M4_REG_OFFSET, SRC_M4C_NON_SCLR_RST_MASK, SRC_M4_ENABLE_MASK);
SRC_M4C_NON_SCLR_RST_MASK, SRC_M4_ENABLE_MASK); }
#endif
return 0; return 0;
} }
int arch_auxiliary_core_check_up(u32 core_id) int arch_auxiliary_core_check_up(u32 core_id)
{ {
#ifdef CONFIG_IMX8M
struct arm_smccc_res res; struct arm_smccc_res res;
arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_STARTED, 0, 0,
0, 0, 0, 0, &res);
return res.a0;
#else
unsigned int val; unsigned int val;
if (CONFIG_IS_ENABLED(IMX8M)) {
arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_STARTED, 0, 0, 0, 0, 0, 0, &res);
return res.a0;
}
val = readl(SRC_BASE_ADDR + SRC_M4_REG_OFFSET); val = readl(SRC_BASE_ADDR + SRC_M4_REG_OFFSET);
if (val & SRC_M4C_NON_SCLR_RST_MASK) if (val & SRC_M4C_NON_SCLR_RST_MASK)
return 0; /* assert in reset */ return 0; /* assert in reset */
return 1; return 1;
#endif
} }
/* /*