162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Virtual PTP 1588 clock for use with KVM guests 462306a36Sopenharmony_ci * Copyright (C) 2019 ARM Ltd. 562306a36Sopenharmony_ci * All Rights Reserved 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/arm-smccc.h> 962306a36Sopenharmony_ci#include <linux/ptp_kvm.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <asm/arch_timer.h> 1262306a36Sopenharmony_ci#include <asm/hypervisor.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciint kvm_arch_ptp_init(void) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci int ret; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci ret = kvm_arm_hyp_service_available(ARM_SMCCC_KVM_FUNC_PTP); 1962306a36Sopenharmony_ci if (ret <= 0) 2062306a36Sopenharmony_ci return -EOPNOTSUPP; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci return 0; 2362306a36Sopenharmony_ci} 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_civoid kvm_arch_ptp_exit(void) 2662306a36Sopenharmony_ci{ 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ciint kvm_arch_ptp_get_clock(struct timespec64 *ts) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci return kvm_arch_ptp_get_crosststamp(NULL, ts, NULL); 3262306a36Sopenharmony_ci} 33