All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoffer Dall <christoffer.dall@linaro.org>
To: "Jérémy Fanguède" <j.fanguede@virtualopensystems.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>,
	linux-kernel@vger.kernel.org,
	Russell King <linux@armlinux.org.uk>,
	tech@virtualopensystems.com, kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] KVM: arm: Enable emulation of the physical timer
Date: Fri, 16 Feb 2018 09:13:27 +0100	[thread overview]
Message-ID: <20180216081327.GA10440@cbox> (raw)
In-Reply-To: <1518518476-26645-1-git-send-email-j.fanguede@virtualopensystems.com>

On Tue, Feb 13, 2018 at 11:41:16AM +0100, Jérémy Fanguède wrote:
> Set the handlers to emulate read and write operations for CNTP_CTL,
> CNTP_CVAL and CNTP_TVAL registers in such a way that VMs can use the
> physical timer.
> 
> Signed-off-by: Jérémy Fanguède <j.fanguede@virtualopensystems.com>
> ---
> 
> This patch is the equivalent of this one: [1], but for arm 32bits
> instead of ARMv8 aarch32.
> 
> [1] https://patchwork.kernel.org/patch/10207019/
> 

Thanks, both queued.

-Christoffer

> ---
>  arch/arm/kvm/coproc.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 61 insertions(+)
> 
> diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c
> index 6d1d2e2..3a02e76 100644
> --- a/arch/arm/kvm/coproc.c
> +++ b/arch/arm/kvm/coproc.c
> @@ -270,6 +270,60 @@ static bool access_gic_sre(struct kvm_vcpu *vcpu,
>  	return true;
>  }
>  
> +static bool access_cntp_tval(struct kvm_vcpu *vcpu,
> +			     const struct coproc_params *p,
> +			     const struct coproc_reg *r)
> +{
> +	u64 now = kvm_phys_timer_read();
> +	u64 val;
> +
> +	if (p->is_write) {
> +		val = *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val + now);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL);
> +		*vcpu_reg(vcpu, p->Rt1) = val - now;
> +	}
> +
> +	return true;
> +}
> +
> +static bool access_cntp_ctl(struct kvm_vcpu *vcpu,
> +			    const struct coproc_params *p,
> +			    const struct coproc_reg *r)
> +{
> +	u32 val;
> +
> +	if (p->is_write) {
> +		val = *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CTL, val);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CTL);
> +		*vcpu_reg(vcpu, p->Rt1) = val;
> +	}
> +
> +	return true;
> +}
> +
> +static bool access_cntp_cval(struct kvm_vcpu *vcpu,
> +			     const struct coproc_params *p,
> +			     const struct coproc_reg *r)
> +{
> +	u64 val;
> +
> +	if (p->is_write) {
> +		val = (u64)*vcpu_reg(vcpu, p->Rt2) << 32;
> +		val |= *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL);
> +		*vcpu_reg(vcpu, p->Rt1) = val;
> +		*vcpu_reg(vcpu, p->Rt2) = val >> 32;
> +	}
> +
> +	return true;
> +}
> +
>  /*
>   * We could trap ID_DFR0 and tell the guest we don't support performance
>   * monitoring.  Unfortunately the patch to make the kernel check ID_DFR0 was
> @@ -423,10 +477,17 @@ static const struct coproc_reg cp15_regs[] = {
>  	{ CRn(13), CRm( 0), Op1( 0), Op2( 4), is32,
>  			NULL, reset_unknown, c13_TID_PRIV },
>  
> +	/* CNTP */
> +	{ CRm64(14), Op1( 2), is64, access_cntp_cval},
> +
>  	/* CNTKCTL: swapped by interrupt.S. */
>  	{ CRn(14), CRm( 1), Op1( 0), Op2( 0), is32,
>  			NULL, reset_val, c14_CNTKCTL, 0x00000000 },
>  
> +	/* CNTP */
> +	{ CRn(14), CRm( 2), Op1( 0), Op2( 0), is32, access_cntp_tval },
> +	{ CRn(14), CRm( 2), Op1( 0), Op2( 1), is32, access_cntp_ctl },
> +
>  	/* The Configuration Base Address Register. */
>  	{ CRn(15), CRm( 0), Op1( 4), Op2( 0), is32, access_cbar},
>  };
> -- 
> 2.7.4
> 

WARNING: multiple messages have this Message-ID (diff)
From: christoffer.dall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] KVM: arm: Enable emulation of the physical timer
Date: Fri, 16 Feb 2018 09:13:27 +0100	[thread overview]
Message-ID: <20180216081327.GA10440@cbox> (raw)
In-Reply-To: <1518518476-26645-1-git-send-email-j.fanguede@virtualopensystems.com>

On Tue, Feb 13, 2018 at 11:41:16AM +0100, J?r?my Fangu?de wrote:
> Set the handlers to emulate read and write operations for CNTP_CTL,
> CNTP_CVAL and CNTP_TVAL registers in such a way that VMs can use the
> physical timer.
> 
> Signed-off-by: J?r?my Fangu?de <j.fanguede@virtualopensystems.com>
> ---
> 
> This patch is the equivalent of this one: [1], but for arm 32bits
> instead of ARMv8 aarch32.
> 
> [1] https://patchwork.kernel.org/patch/10207019/
> 

Thanks, both queued.

-Christoffer

> ---
>  arch/arm/kvm/coproc.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 61 insertions(+)
> 
> diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c
> index 6d1d2e2..3a02e76 100644
> --- a/arch/arm/kvm/coproc.c
> +++ b/arch/arm/kvm/coproc.c
> @@ -270,6 +270,60 @@ static bool access_gic_sre(struct kvm_vcpu *vcpu,
>  	return true;
>  }
>  
> +static bool access_cntp_tval(struct kvm_vcpu *vcpu,
> +			     const struct coproc_params *p,
> +			     const struct coproc_reg *r)
> +{
> +	u64 now = kvm_phys_timer_read();
> +	u64 val;
> +
> +	if (p->is_write) {
> +		val = *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val + now);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL);
> +		*vcpu_reg(vcpu, p->Rt1) = val - now;
> +	}
> +
> +	return true;
> +}
> +
> +static bool access_cntp_ctl(struct kvm_vcpu *vcpu,
> +			    const struct coproc_params *p,
> +			    const struct coproc_reg *r)
> +{
> +	u32 val;
> +
> +	if (p->is_write) {
> +		val = *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CTL, val);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CTL);
> +		*vcpu_reg(vcpu, p->Rt1) = val;
> +	}
> +
> +	return true;
> +}
> +
> +static bool access_cntp_cval(struct kvm_vcpu *vcpu,
> +			     const struct coproc_params *p,
> +			     const struct coproc_reg *r)
> +{
> +	u64 val;
> +
> +	if (p->is_write) {
> +		val = (u64)*vcpu_reg(vcpu, p->Rt2) << 32;
> +		val |= *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL);
> +		*vcpu_reg(vcpu, p->Rt1) = val;
> +		*vcpu_reg(vcpu, p->Rt2) = val >> 32;
> +	}
> +
> +	return true;
> +}
> +
>  /*
>   * We could trap ID_DFR0 and tell the guest we don't support performance
>   * monitoring.  Unfortunately the patch to make the kernel check ID_DFR0 was
> @@ -423,10 +477,17 @@ static const struct coproc_reg cp15_regs[] = {
>  	{ CRn(13), CRm( 0), Op1( 0), Op2( 4), is32,
>  			NULL, reset_unknown, c13_TID_PRIV },
>  
> +	/* CNTP */
> +	{ CRm64(14), Op1( 2), is64, access_cntp_cval},
> +
>  	/* CNTKCTL: swapped by interrupt.S. */
>  	{ CRn(14), CRm( 1), Op1( 0), Op2( 0), is32,
>  			NULL, reset_val, c14_CNTKCTL, 0x00000000 },
>  
> +	/* CNTP */
> +	{ CRn(14), CRm( 2), Op1( 0), Op2( 0), is32, access_cntp_tval },
> +	{ CRn(14), CRm( 2), Op1( 0), Op2( 1), is32, access_cntp_ctl },
> +
>  	/* The Configuration Base Address Register. */
>  	{ CRn(15), CRm( 0), Op1( 4), Op2( 0), is32, access_cbar},
>  };
> -- 
> 2.7.4
> 

WARNING: multiple messages have this Message-ID (diff)
From: Christoffer Dall <christoffer.dall@linaro.org>
To: "Jérémy Fanguède" <j.fanguede@virtualopensystems.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>,
	Russell King <linux@armlinux.org.uk>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org,
	tech@virtualopensystems.com
Subject: Re: [PATCH] KVM: arm: Enable emulation of the physical timer
Date: Fri, 16 Feb 2018 09:13:27 +0100	[thread overview]
Message-ID: <20180216081327.GA10440@cbox> (raw)
In-Reply-To: <1518518476-26645-1-git-send-email-j.fanguede@virtualopensystems.com>

On Tue, Feb 13, 2018 at 11:41:16AM +0100, Jérémy Fanguède wrote:
> Set the handlers to emulate read and write operations for CNTP_CTL,
> CNTP_CVAL and CNTP_TVAL registers in such a way that VMs can use the
> physical timer.
> 
> Signed-off-by: Jérémy Fanguède <j.fanguede@virtualopensystems.com>
> ---
> 
> This patch is the equivalent of this one: [1], but for arm 32bits
> instead of ARMv8 aarch32.
> 
> [1] https://patchwork.kernel.org/patch/10207019/
> 

Thanks, both queued.

-Christoffer

> ---
>  arch/arm/kvm/coproc.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 61 insertions(+)
> 
> diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c
> index 6d1d2e2..3a02e76 100644
> --- a/arch/arm/kvm/coproc.c
> +++ b/arch/arm/kvm/coproc.c
> @@ -270,6 +270,60 @@ static bool access_gic_sre(struct kvm_vcpu *vcpu,
>  	return true;
>  }
>  
> +static bool access_cntp_tval(struct kvm_vcpu *vcpu,
> +			     const struct coproc_params *p,
> +			     const struct coproc_reg *r)
> +{
> +	u64 now = kvm_phys_timer_read();
> +	u64 val;
> +
> +	if (p->is_write) {
> +		val = *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val + now);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL);
> +		*vcpu_reg(vcpu, p->Rt1) = val - now;
> +	}
> +
> +	return true;
> +}
> +
> +static bool access_cntp_ctl(struct kvm_vcpu *vcpu,
> +			    const struct coproc_params *p,
> +			    const struct coproc_reg *r)
> +{
> +	u32 val;
> +
> +	if (p->is_write) {
> +		val = *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CTL, val);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CTL);
> +		*vcpu_reg(vcpu, p->Rt1) = val;
> +	}
> +
> +	return true;
> +}
> +
> +static bool access_cntp_cval(struct kvm_vcpu *vcpu,
> +			     const struct coproc_params *p,
> +			     const struct coproc_reg *r)
> +{
> +	u64 val;
> +
> +	if (p->is_write) {
> +		val = (u64)*vcpu_reg(vcpu, p->Rt2) << 32;
> +		val |= *vcpu_reg(vcpu, p->Rt1);
> +		kvm_arm_timer_set_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL, val);
> +	} else {
> +		val = kvm_arm_timer_get_reg(vcpu, KVM_REG_ARM_PTIMER_CVAL);
> +		*vcpu_reg(vcpu, p->Rt1) = val;
> +		*vcpu_reg(vcpu, p->Rt2) = val >> 32;
> +	}
> +
> +	return true;
> +}
> +
>  /*
>   * We could trap ID_DFR0 and tell the guest we don't support performance
>   * monitoring.  Unfortunately the patch to make the kernel check ID_DFR0 was
> @@ -423,10 +477,17 @@ static const struct coproc_reg cp15_regs[] = {
>  	{ CRn(13), CRm( 0), Op1( 0), Op2( 4), is32,
>  			NULL, reset_unknown, c13_TID_PRIV },
>  
> +	/* CNTP */
> +	{ CRm64(14), Op1( 2), is64, access_cntp_cval},
> +
>  	/* CNTKCTL: swapped by interrupt.S. */
>  	{ CRn(14), CRm( 1), Op1( 0), Op2( 0), is32,
>  			NULL, reset_val, c14_CNTKCTL, 0x00000000 },
>  
> +	/* CNTP */
> +	{ CRn(14), CRm( 2), Op1( 0), Op2( 0), is32, access_cntp_tval },
> +	{ CRn(14), CRm( 2), Op1( 0), Op2( 1), is32, access_cntp_ctl },
> +
>  	/* The Configuration Base Address Register. */
>  	{ CRn(15), CRm( 0), Op1( 4), Op2( 0), is32, access_cbar},
>  };
> -- 
> 2.7.4
> 

  reply	other threads:[~2018-02-16  8:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-13 10:41 [PATCH] KVM: arm: Enable emulation of the physical timer Jérémy Fanguède
2018-02-13 10:41 ` Jérémy Fanguède
2018-02-16  8:13 ` Christoffer Dall [this message]
2018-02-16  8:13   ` Christoffer Dall
2018-02-16  8:13   ` Christoffer Dall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180216081327.GA10440@cbox \
    --to=christoffer.dall@linaro.org \
    --cc=j.fanguede@virtualopensystems.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=marc.zyngier@arm.com \
    --cc=tech@virtualopensystems.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.