xref: /rk3399_rockchip-uboot/arch/arm/mach-keystone/keystone.c (revision 00caae6d47645e68d6e5277aceb69592b49381a6)
139a72345SMasahiro Yamada /*
239a72345SMasahiro Yamada  * Keystone EVM : Board initialization
339a72345SMasahiro Yamada  *
439a72345SMasahiro Yamada  * (C) Copyright 2014
539a72345SMasahiro Yamada  *     Texas Instruments Incorporated, <www.ti.com>
639a72345SMasahiro Yamada  *
739a72345SMasahiro Yamada  * SPDX-License-Identifier:     GPL-2.0+
839a72345SMasahiro Yamada  */
939a72345SMasahiro Yamada 
1039a72345SMasahiro Yamada #include <common.h>
1139a72345SMasahiro Yamada #include <asm/io.h>
1239a72345SMasahiro Yamada #include <asm/arch/psc_defs.h>
1339a72345SMasahiro Yamada #include <asm/arch/hardware.h>
1439a72345SMasahiro Yamada 
1539a72345SMasahiro Yamada /**
1639a72345SMasahiro Yamada  * cpu_to_bus - swap bytes of the 32-bit data if the device is BE
1739a72345SMasahiro Yamada  * @ptr - array of data
1839a72345SMasahiro Yamada  * @length - lenght of data array
1939a72345SMasahiro Yamada  */
cpu_to_bus(u32 * ptr,u32 length)2039a72345SMasahiro Yamada int cpu_to_bus(u32 *ptr, u32 length)
2139a72345SMasahiro Yamada {
2239a72345SMasahiro Yamada 	u32 i;
2339a72345SMasahiro Yamada 
2439a72345SMasahiro Yamada 	if (!(readl(KS2_DEVSTAT) & 0x1))
2539a72345SMasahiro Yamada 		for (i = 0; i < length; i++, ptr++)
2639a72345SMasahiro Yamada 			*ptr = cpu_to_be32(*ptr);
2739a72345SMasahiro Yamada 
2839a72345SMasahiro Yamada 	return 0;
2939a72345SMasahiro Yamada }
3039a72345SMasahiro Yamada 
turn_off_all_dsps(int num_dsps)3139a72345SMasahiro Yamada static void turn_off_all_dsps(int num_dsps)
3239a72345SMasahiro Yamada {
3339a72345SMasahiro Yamada 	int i;
3439a72345SMasahiro Yamada 
3539a72345SMasahiro Yamada 	for (i = 0; i < num_dsps; i++) {
3639a72345SMasahiro Yamada 		if (psc_disable_module(i + KS2_LPSC_GEM_0))
3739a72345SMasahiro Yamada 			printf("Cannot disable module for #%d DSP", i);
3839a72345SMasahiro Yamada 
394ed8b2c9SSuman Anna 		if (psc_disable_domain(i + KS2_GEM_0_PWR_DOMAIN))
4039a72345SMasahiro Yamada 			printf("Cannot disable domain for #%d DSP", i);
4139a72345SMasahiro Yamada 	}
4239a72345SMasahiro Yamada }
4339a72345SMasahiro Yamada 
misc_init_r(void)4439a72345SMasahiro Yamada int misc_init_r(void)
4539a72345SMasahiro Yamada {
4639a72345SMasahiro Yamada 	char *env;
4739a72345SMasahiro Yamada 	long ks2_debug = 0;
4839a72345SMasahiro Yamada 
49*00caae6dSSimon Glass 	env = env_get("ks2_debug");
5039a72345SMasahiro Yamada 
5139a72345SMasahiro Yamada 	if (env)
5239a72345SMasahiro Yamada 		ks2_debug = simple_strtol(env, NULL, 0);
5339a72345SMasahiro Yamada 
5439a72345SMasahiro Yamada 	if ((ks2_debug & DBG_LEAVE_DSPS_ON) == 0)
5539a72345SMasahiro Yamada 		turn_off_all_dsps(KS2_NUM_DSPS);
5639a72345SMasahiro Yamada 
5739a72345SMasahiro Yamada 	return 0;
5839a72345SMasahiro Yamada }
59