[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240405081735319-0700.eberman@hu-eberman-lv.qualcomm.com>
Date: Fri, 5 Apr 2024 08:18:30 -0700
From: Elliot Berman <quic_eberman@...cinc.com>
To: Pavan Kondeti <quic_pkondeti@...cinc.com>
CC: Alex Elder <elder@...aro.org>,
Srinivas Kandagatla
<srinivas.kandagatla@...aro.org>,
Murali Nalajal <quic_mnalajal@...cinc.com>,
Trilok Soni <quic_tsoni@...cinc.com>,
Srivatsa Vaddagiri
<quic_svaddagi@...cinc.com>,
Carl van Schaik <quic_cvanscha@...cinc.com>,
Philip Derrin <quic_pderrin@...cinc.com>,
Prakruthi Deepak Heragu
<quic_pheragu@...cinc.com>,
Jonathan Corbet <corbet@....net>, Rob Herring
<robh+dt@...nel.org>,
Krzysztof Kozlowski
<krzysztof.kozlowski+dt@...aro.org>,
Conor Dooley <conor+dt@...nel.org>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
Konrad Dybcio <konrad.dybcio@...aro.org>,
Bjorn Andersson
<andersson@...nel.org>,
Dmitry Baryshkov <dmitry.baryshkov@...aro.org>,
"Fuad
Tabba" <tabba@...gle.com>,
Sean Christopherson <seanjc@...gle.com>,
"Andrew
Morton" <akpm@...ux-foundation.org>,
<linux-arm-msm@...r.kernel.org>, <linux-doc@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <devicetree@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>, <linux-mm@...ck.org>
Subject: Re: [PATCH v17 11/35] virt: gunyah: Translate gh_rm_hyp_resource
into gunyah_resource
On Fri, Apr 05, 2024 at 08:40:40AM +0530, Pavan Kondeti wrote:
> On Thu, Feb 22, 2024 at 03:16:34PM -0800, Elliot Berman wrote:
> > When booting a Gunyah virtual machine, the host VM may gain capabilities
> > to interact with resources for the guest virtual machine. Examples of
> > such resources are vCPUs or message queues. To use those resources, we
> > need to translate the RM response into a gunyah_resource structure which
> > are useful to Linux drivers. Presently, Linux drivers need only to know
> > the type of resource, the capability ID, and an interrupt.
> >
> > On ARM64 systems, the interrupt reported by Gunyah is the GIC interrupt
> > ID number and always a SPI or extended SPI.
> >
> > Signed-off-by: Elliot Berman <quic_eberman@...cinc.com>
> > ---
> > arch/arm64/include/asm/gunyah.h | 36 ++++++++++++++++++++++
> > drivers/virt/gunyah/rsc_mgr.c | 67 +++++++++++++++++++++++++++++++++++++++++
> > drivers/virt/gunyah/rsc_mgr.h | 5 +++
> > include/linux/gunyah.h | 2 ++
> > 4 files changed, 110 insertions(+)
> >
> > diff --git a/arch/arm64/include/asm/gunyah.h b/arch/arm64/include/asm/gunyah.h
> > new file mode 100644
> > index 0000000000000..0cd3debe22b64
> > --- /dev/null
> > +++ b/arch/arm64/include/asm/gunyah.h
> > @@ -0,0 +1,36 @@
> > +/* SPDX-License-Identifier: GPL-2.0-only */
> > +/*
> > + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
> > + */
> > +#ifndef _ASM_GUNYAH_H
> > +#define _ASM_GUNYAH_H
> > +
> > +#include <linux/irq.h>
> > +#include <linux/irqdomain.h>
> > +
> > +static inline int arch_gunyah_fill_irq_fwspec_params(u32 virq,
> > + struct irq_fwspec *fwspec)
> > +{
> > + /* Assume that Gunyah gave us an SPI or ESPI; defensively check it */
> > + if (WARN(virq < 32, "Unexpected virq: %d\n", virq)) {
> > + return -EINVAL;
> > + } else if (virq <= 1019) {
> > + fwspec->param_count = 3;
> > + fwspec->param[0] = 0; /* GIC_SPI */
> > + fwspec->param[1] = virq - 32; /* virq 32 -> SPI 0 */
> > + fwspec->param[2] = IRQ_TYPE_EDGE_RISING;
> > + } else if (WARN(virq < 4096, "Unexpected virq: %d\n", virq)) {
> > + return -EINVAL;
> > + } else if (virq < 5120) {
> > + fwspec->param_count = 3;
> > + fwspec->param[0] = 2; /* GIC_ESPI */
> > + fwspec->param[1] = virq - 4096; /* virq 4096 -> ESPI 0 */
> > + fwspec->param[2] = IRQ_TYPE_EDGE_RISING;
> > + } else {
> > + WARN(1, "Unexpected virq: %d\n", virq);
> > + return -EINVAL;
> > + }
> > + return 0;
> > +}
> > +
>
> __get_intid_range() in gic-v3 driver looks more pleasing. Other than
> that the logic for the translation looks good to me.
Agreed, updated for v18.
static inline int arch_gunyah_fill_irq_fwspec_params(u32 virq,
struct irq_fwspec *fwspec)
{
/* Assume that Gunyah gave us an SPI or ESPI; defensively check it */
switch (virq) {
case 32 ... 1019:
fwspec->param_count = 3;
fwspec->param[0] = 0; /* GIC_SPI */
fwspec->param[1] = virq - 32; /* virq 32 -> SPI 0 */
fwspec->param[2] = IRQ_TYPE_EDGE_RISING;
break;
case 4096 ... 5119:
fwspec->param_count = 3;
fwspec->param[0] = 2; /* GIC_ESPI */
fwspec->param[1] = virq - 4096; /* virq 4096 -> ESPI 0 */
fwspec->param[2] = IRQ_TYPE_EDGE_RISING;
break;
default:
WARN(1, "Unexpected virq: %d\n", virq)
return -EINVAL;
}
return 0;
}
Powered by blists - more mailing lists