From: Peter Maydell <peter.maydell@linaro.org>
To: Eric Auger <eric.auger@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
Jean-Philippe Brucker <jean-philippe.brucker@arm.com>,
Tomasz Nowicki <tn@semihalf.com>,
QEMU Developers <qemu-devel@nongnu.org>,
Peter Xu <peterx@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>,
qemu-arm <qemu-arm@nongnu.org>,
Christoffer Dall <christoffer.dall@linaro.org>,
linuc.decode@gmail.com, Bharat Bhushan <bharat.bhushan@nxp.com>,
Prem Mallappa <prem.mallappa@gmail.com>,
eric.auger.pro@gmail.com
Subject: Re: [Qemu-arm] [PATCH v9 01/14] hw/arm/smmu-common: smmu base device and datatypes
Date: Tue, 6 Mar 2018 12:09:29 +0000 [thread overview]
Message-ID: <CAFEAcA8pdpA1MUAyKNyAdM9QH6_n2NBvZPYdiFKK20N9FG2z1g@mail.gmail.com> (raw)
In-Reply-To: <1518893216-9983-2-git-send-email-eric.auger@redhat.com>
On 17 February 2018 at 18:46, Eric Auger <eric.auger@redhat.com> wrote:
> The patch introduces the smmu base device and class for the ARM
> smmu. Devices for specific versions will be derived from this
> base device.
>
> We also introduce some important datatypes.
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Signed-off-by: Prem Mallappa <prem.mallappa@broadcom.com>
>
> + * Author: Prem Mallappa <pmallapp@broadcom.com>
> + *
> + */
> +
> +#include "qemu/osdep.h"
> +#include "sysemu/sysemu.h"
> +#include "exec/address-spaces.h"
> +#include "trace.h"
> +#include "exec/target_page.h"
> +#include "qom/cpu.h"
> +#include "hw/qdev-properties.h"
> +#include "qapi/error.h"
> +
> +#include "qemu/error-report.h"
> +#include "hw/arm/smmu-common.h"
> +
> +static void smmu_base_realize(DeviceState *dev, Error **errp)
> +{
> + SMMUState *s = ARM_SMMU(dev);
> +
> + s->configs = g_hash_table_new_full(NULL, NULL, NULL, g_free);
> + s->iotlb = g_hash_table_new_full(NULL, NULL, NULL, g_free);
Shouldn't we also invoke the parent_realize ?
> +}
> +
> +static void smmu_base_reset(DeviceState *dev)
> +{
> + SMMUState *s = ARM_SMMU(dev);
> +
> + g_hash_table_remove_all(s->configs);
> + g_hash_table_remove_all(s->iotlb);
> +}
> +
> +static Property smmu_dev_properties[] = {
> + DEFINE_PROP_UINT8("bus_num", SMMUState, bus_num, 0),
> + DEFINE_PROP_LINK("primary-bus", SMMUState, primary_bus, "PCI", PCIBus *),
> + DEFINE_PROP_END_OF_LIST(),
> +};
> +
> +static void smmu_base_class_init(ObjectClass *klass, void *data)
> +{
> + DeviceClass *dc = DEVICE_CLASS(klass);
> + SMMUBaseClass *sbc = ARM_SMMU_CLASS(klass);
> +
> + dc->props = smmu_dev_properties;
> + sbc->parent_realize = dc->realize;
> + dc->realize = smmu_base_realize;
There's a device_class_set_parent_realize() in the tree now that
we should probably use instead of these 2 lines:
device_class_set_parent_realize(dc, smmu_base_realize,
&sbc->parent_realize);
> + dc->reset = smmu_base_reset;
> +}
> +
> +static const TypeInfo smmu_base_info = {
> + .name = TYPE_ARM_SMMU,
> + .parent = TYPE_SYS_BUS_DEVICE,
> + .instance_size = sizeof(SMMUState),
> + .class_data = NULL,
> + .class_size = sizeof(SMMUBaseClass),
> + .class_init = smmu_base_class_init,
> + .abstract = true,
> +};
> +
> +static void smmu_base_register_types(void)
> +{
> + type_register_static(&smmu_base_info);
> +}
> +
> +type_init(smmu_base_register_types)
> +
> diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h
> new file mode 100644
> index 0000000..8a9d931
> --- /dev/null
> +++ b/include/hw/arm/smmu-common.h
> @@ -0,0 +1,124 @@
> +/*
> + * ARM SMMU Support
> + *
> + * Copyright (C) 2015-2016 Broadcom Corporation
> + * Copyright (c) 2017 Red Hat, Inc.
> + * Written by Prem Mallappa, Eric Auger
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + */
> +
> +#ifndef HW_ARM_SMMU_COMMON_H
> +#define HW_ARM_SMMU_COMMON_H
> +
> +#include <hw/sysbus.h>
QEMU headers should be included using "", not <>.
> +#include "hw/pci/pci.h"
> +
> +#define SMMU_PCI_BUS_MAX 256
> +#define SMMU_PCI_DEVFN_MAX 256
> +
> +#define SMMU_MAX_VA_BITS 48
> +
> +/*
> + * Page table walk error types
> + */
> +typedef enum {
> + SMMU_PTW_ERR_NONE,
> + SMMU_PTW_ERR_WALK_EABT, /* Translation walk external abort */
> + SMMU_PTW_ERR_TRANSLATION, /* Translation fault */
> + SMMU_PTW_ERR_ADDR_SIZE, /* Address Size fault */
> + SMMU_PTW_ERR_ACCESS, /* Access fault */
> + SMMU_PTW_ERR_PERMISSION, /* Permission fault */
> +} SMMUPTWEventType;
> +
> +typedef struct SMMUPTWEventInfo {
> + SMMUPTWEventType type;
> + dma_addr_t addr; /* fetched address that induced an abort, if any */
> +} SMMUPTWEventInfo;
> +
> +typedef struct SMMUTransTableInfo {
> + bool disabled; /* is the translation table disabled? */
> + uint64_t ttb; /* TT base address */
> + uint8_t tsz; /* input range, ie. 2^(64 -tsz)*/
> + uint8_t granule_sz; /* granule page shift */
> + uint8_t initial_level; /* initial lookup level */
> +} SMMUTransTableInfo;
> +
> +/*
> + * Generic structure populated by derived SMMU devices
> + * after decoding the configuration information and used as
> + * input to the page table walk
> + */
> +typedef struct SMMUTransCfg {
> + int stage; /* translation stage */
> + bool aa64; /* arch64 or aarch32 translation table */
> + bool disabled; /* smmu is disabled */
> + bool bypassed; /* translation is bypassed */
> + bool aborted; /* translation is aborted */
> + uint64_t ttb; /* TT base address */
> + uint8_t oas; /* output address width */
> + uint8_t tbi; /* Top Byte Ignore */
> + uint16_t asid;
> + SMMUTransTableInfo tt[2];
Can you be consistent about either lining up the field names or not doing so,
please? (I would suggest going for 'not'.)
> +} SMMUTransCfg;
Otherwise
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
thanks
-- PMM
next prev parent reply other threads:[~2018-03-06 12:10 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-17 18:46 [Qemu-arm] [PATCH v9 00/14] ARM SMMUv3 Emulation Support Eric Auger
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 01/14] hw/arm/smmu-common: smmu base device and datatypes Eric Auger
2018-03-06 12:09 ` Peter Maydell [this message]
2018-03-06 15:01 ` [Qemu-arm] [Qemu-devel] " Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 02/14] hw/arm/smmu-common: IOMMU memory region and address space setup Eric Auger
2018-03-06 14:08 ` Peter Maydell
2018-03-06 14:47 ` [Qemu-arm] [Qemu-devel] " Auger Eric
2018-03-06 14:49 ` Peter Maydell
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 03/14] hw/arm/smmu-common: VMSAv8-64 page table walk Eric Auger
2018-03-06 19:43 ` Peter Maydell
2018-03-07 16:23 ` Auger Eric
2018-03-07 16:35 ` Peter Maydell
2018-03-08 18:56 ` Auger Eric
2018-03-08 19:01 ` Peter Maydell
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 04/14] hw/arm/smmuv3: Skeleton Eric Auger
2018-03-08 14:27 ` Peter Maydell
2018-03-09 13:19 ` Auger Eric
2018-03-09 13:37 ` Peter Maydell
2018-03-09 13:49 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 05/14] hw/arm/smmuv3: Wired IRQ and GERROR helpers Eric Auger
2018-03-08 17:49 ` [Qemu-arm] " Peter Maydell
2018-03-09 14:03 ` Auger Eric
2018-03-09 14:18 ` Peter Maydell
2018-03-09 14:50 ` [Qemu-arm] [Qemu-devel] " Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 06/14] hw/arm/smmuv3: Queue helpers Eric Auger
2018-03-08 18:28 ` Peter Maydell
2018-03-09 16:43 ` Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 07/14] hw/arm/smmuv3: Implement MMIO write operations Eric Auger
2018-03-08 18:37 ` Peter Maydell
2018-03-09 16:42 ` Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 08/14] hw/arm/smmuv3: Event queue recording helper Eric Auger
2018-03-08 18:39 ` Peter Maydell
2018-03-09 17:16 ` Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 09/14] hw/arm/smmuv3: Implement translate callback Eric Auger
2018-03-09 18:46 ` Peter Maydell
2018-03-12 10:38 ` [Qemu-devel] " Eric Auger
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 10/14] hw/arm/smmuv3: Abort on vfio or vhost case Eric Auger
2018-03-08 19:06 ` Peter Maydell
2018-03-09 17:53 ` [Qemu-arm] " Auger Eric
2018-03-09 17:59 ` Peter Maydell
2018-03-12 10:53 ` Eric Auger
2018-03-12 11:10 ` Peter Maydell
2018-03-12 15:01 ` [Qemu-arm] [Qemu-devel] " Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 11/14] target/arm/kvm: Translate the MSI doorbell in kvm_arch_fixup_msi_route Eric Auger
2018-03-12 11:59 ` Peter Maydell
2018-03-12 15:16 ` Auger Eric
2018-03-13 13:37 ` Paolo Bonzini
2018-03-15 9:45 ` Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 12/14] hw/arm/virt: Add SMMUv3 to the virt board Eric Auger
2018-03-12 12:46 ` Peter Maydell
2018-03-12 15:01 ` [Qemu-arm] [Qemu-devel] " Auger Eric
2018-03-12 15:05 ` Peter Maydell
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 13/14] hw/arm/virt-acpi-build: Add smmuv3 node in IORT table Eric Auger
2018-03-12 12:48 ` Peter Maydell
2018-03-19 14:32 ` [Qemu-arm] [Qemu-devel] " Shannon Zhao
2018-03-19 20:50 ` Auger Eric
2018-02-17 18:46 ` [Qemu-arm] [PATCH v9 14/14] hw/arm/virt: Handle iommu in 2.12 machine type Eric Auger
2018-03-12 12:56 ` [Qemu-devel] " Peter Maydell
2018-03-12 15:01 ` [Qemu-arm] " Auger Eric
2018-02-27 19:02 ` [Qemu-arm] [PATCH v9 00/14] ARM SMMUv3 Emulation Support Peter Maydell
2018-02-28 8:44 ` [Qemu-arm] [Qemu-devel] " Auger Eric
2018-03-12 12:58 ` Peter Maydell
2018-03-12 15:22 ` Auger Eric
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=CAFEAcA8pdpA1MUAyKNyAdM9QH6_n2NBvZPYdiFKK20N9FG2z1g@mail.gmail.com \
--to=peter.maydell@linaro.org \
--cc=alex.williamson@redhat.com \
--cc=bharat.bhushan@nxp.com \
--cc=christoffer.dall@linaro.org \
--cc=eric.auger.pro@gmail.com \
--cc=eric.auger@redhat.com \
--cc=jean-philippe.brucker@arm.com \
--cc=linuc.decode@gmail.com \
--cc=mst@redhat.com \
--cc=peterx@redhat.com \
--cc=prem.mallappa@gmail.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=tn@semihalf.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).