1*dddba19aSStephan Gerhold /* 2*dddba19aSStephan Gerhold * Copyright (c) 2021, Stephan Gerhold <stephan@gerhold.net> 3*dddba19aSStephan Gerhold * 4*dddba19aSStephan Gerhold * SPDX-License-Identifier: BSD-3-Clause 5*dddba19aSStephan Gerhold */ 6*dddba19aSStephan Gerhold 7*dddba19aSStephan Gerhold #include <arch.h> 8*dddba19aSStephan Gerhold #include <common/debug.h> 9*dddba19aSStephan Gerhold #include <drivers/delay_timer.h> 10*dddba19aSStephan Gerhold #include <lib/mmio.h> 11*dddba19aSStephan Gerhold #include <lib/psci/psci.h> 12*dddba19aSStephan Gerhold #include <plat/common/platform.h> 13*dddba19aSStephan Gerhold 14*dddba19aSStephan Gerhold #include <msm8916_mmap.h> 15*dddba19aSStephan Gerhold 16*dddba19aSStephan Gerhold static void __dead2 msm8916_system_reset(void) 17*dddba19aSStephan Gerhold { 18*dddba19aSStephan Gerhold mmio_write_32(MPM_PS_HOLD, 0); 19*dddba19aSStephan Gerhold mdelay(1000); 20*dddba19aSStephan Gerhold 21*dddba19aSStephan Gerhold ERROR("PSCI: System reset failed\n"); 22*dddba19aSStephan Gerhold panic(); 23*dddba19aSStephan Gerhold } 24*dddba19aSStephan Gerhold 25*dddba19aSStephan Gerhold static const plat_psci_ops_t msm8916_psci_ops = { 26*dddba19aSStephan Gerhold .system_off = msm8916_system_reset, 27*dddba19aSStephan Gerhold .system_reset = msm8916_system_reset, 28*dddba19aSStephan Gerhold }; 29*dddba19aSStephan Gerhold 30*dddba19aSStephan Gerhold /* Defined and used in msm8916_helpers.S */ 31*dddba19aSStephan Gerhold extern uintptr_t msm8916_entry_point; 32*dddba19aSStephan Gerhold 33*dddba19aSStephan Gerhold int plat_setup_psci_ops(uintptr_t sec_entrypoint, 34*dddba19aSStephan Gerhold const plat_psci_ops_t **psci_ops) 35*dddba19aSStephan Gerhold { 36*dddba19aSStephan Gerhold msm8916_entry_point = sec_entrypoint; 37*dddba19aSStephan Gerhold *psci_ops = &msm8916_psci_ops; 38*dddba19aSStephan Gerhold return 0; 39*dddba19aSStephan Gerhold } 40