Newer
Older
minerva / Kernel / Arch / aarch64 / PowerState.cpp
@minerva minerva on 13 Jul 711 bytes Initial commit
/*
 * Copyright (c) 2023, Liav A. <liavalb@hotmail.co.il>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#include <Kernel/Arch/PowerState.h>
#include <Kernel/Arch/aarch64/PSCI.h>
#include <Kernel/Arch/aarch64/RPi/Watchdog.h>
#include <Kernel/Firmware/DeviceTree/DeviceTree.h>

namespace Kernel {

void arch_specific_reboot(PowerOffOrRebootReason)
{
    if (PSCI::is_supported())
        PSCI::reset();
}

void arch_specific_poweroff(PowerOffOrRebootReason)
{
    if (PSCI::is_supported())
        PSCI::poweroff();

    if (DeviceTree::get().is_compatible_with("raspberrypi,3-model-b"sv) || DeviceTree::get().is_compatible_with("raspberrypi,4-model-b"sv))
        RPi::Watchdog::the().system_shutdown();
}

}