diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c index fcd60ab1e058e53ceb0cd84e34cfacda3741a934..eb3052474b553037d28ba4082f6ce161f3878487 100644 --- a/board/amlogic/vim3/vim3.c +++ b/board/amlogic/vim3/vim3.c @@ -15,6 +15,8 @@ #include <asm/arch/sm.h> #include <asm/global_data.h> #include <i2c.h> +#include <linux/psci.h> +#include <reset.h> #include "khadas-mcu.h" int mmc_get_env_dev(void) @@ -188,3 +190,26 @@ int misc_init_r(void) return 0; } + +void reset_misc(void) +{ + struct reset_ctl usb_reset; + struct udevice *dev; + ofnode node; + int ret; + + node = ofnode_by_compatible(ofnode_null(), "amlogic,meson-g12a-usb-ctrl"); + if (!ofnode_valid(node)) + printf("vim3: cannot find amlogic,meson-g12a-usb-ctrl node\n"); + + ret = reset_get_by_index_nodev(node, 0, &usb_reset); + if (ret < 0) + printf("vim3: cannot find usb node reset property\n"); + + ret = reset_assert(&usb_reset); + if (ret < 0) + printf("vim3: cannot assert usb reset\n"); + + uclass_get_device_by_name(UCLASS_FIRMWARE, "psci", &dev); + invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0); +} diff --git a/configs/khadas-vim3l_android_defconfig b/configs/khadas-vim3l_android_defconfig index 085919b9741ab567e98a30d6cc57b14069c85fc0..c16df76448a7180c6234d08f281739323198d5fd 100644 --- a/configs/khadas-vim3l_android_defconfig +++ b/configs/khadas-vim3l_android_defconfig @@ -1,6 +1,7 @@ CONFIG_ARM=y CONFIG_SYS_BOARD="vim3" CONFIG_SYS_CONFIG_NAME="khadas-vim3l_android" +CONFIG_ARM_SMCCC=y CONFIG_ARCH_MESON=y CONFIG_SYS_TEXT_BASE=0x01000000 CONFIG_NR_DRAM_BANKS=1 @@ -11,6 +12,7 @@ CONFIG_MESON_G12A=y CONFIG_DEBUG_UART_BASE=0xff803000 CONFIG_DEBUG_UART_CLOCK=24000000 CONFIG_IDENT_STRING=" khadas-vim3l" +# CONFIG_PSCI_RESET is not set CONFIG_DEBUG_UART=y CONFIG_REMAKE_ELF=y CONFIG_SYS_LOAD_ADDR=0x1000000