From: Shanker Donthineni <shankerd@codeaurora.org>
To: Andre Przywara <andre.przywara@arm.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Julien Grall <julien.grall@arm.com>
Cc: xen-devel@lists.xenproject.org, Vijay Kilari <vijay.kilari@gmail.com>
Subject: Re: [PATCH 04/28] ARM: GICv3 ITS: allocate device and collection table
Date: Fri, 24 Feb 2017 13:29:55 -0600 [thread overview]
Message-ID: <d16fec32-f17a-43bf-0eff-765e7e453f9f@codeaurora.org> (raw)
In-Reply-To: <aa6a81f8-cc37-69d9-3d48-40c1fa8b1009@codeaurora.org>
Hi Andre
On 02/16/2017 01:03 PM, Shanker Donthineni wrote:
> Hi Andre,
>
>
> On 01/30/2017 12:31 PM, Andre Przywara wrote:
>> Each ITS maps a pair of a DeviceID (usually the PCI b/d/f triplet) and
>> an EventID (the MSI payload or interrupt ID) to a pair of LPI number
>> and collection ID, which points to the target CPU.
>> This mapping is stored in the device and collection tables, which
>> software
>> has to provide for the ITS to use.
>> Allocate the required memory and hand it the ITS.
>> The maximum number of devices is limited to a compile-time constant
>> exposed in Kconfig.
>>
>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>> ---
>> xen/arch/arm/Kconfig | 14 +++++
>> xen/arch/arm/gic-v3-its.c | 129
>> +++++++++++++++++++++++++++++++++++++++
>> xen/arch/arm/gic-v3.c | 5 ++
>> xen/include/asm-arm/gic_v3_its.h | 55 ++++++++++++++++-
>> 4 files changed, 202 insertions(+), 1 deletion(-)
>>
>> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
>> index 71734a1..81bc233 100644
>> --- a/xen/arch/arm/Kconfig
>> +++ b/xen/arch/arm/Kconfig
>> @@ -64,6 +64,20 @@ config MAX_PHYS_LPI_BITS
>> This can be overriden on the command line with the
>> max_lpi_bits
>> parameter.
>>
>> +config MAX_PHYS_ITS_DEVICE_BITS
>> + depends on HAS_ITS
>> + int "Number of device bits the ITS supports"
>> + range 1 32
>> + default "10"
>> + help
>> + Specifies the maximum number of devices which want to use the
>> ITS.
>> + Xen needs to allocates memory for the whole range very early.
>> + The allocation scheme may be sparse, so a much larger
>> number must
>> + be supported to cover devices with a high bus number or
>> those on
>> + separate bus segments.
>> + This can be overriden on the command line with the
>> max_its_device_bits
>> + parameter.
>> +
>> endmenu
>>
>> menu "ARM errata workaround via the alternative framework"
>> diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c
>> index ff0f571..c31fef6 100644
>> --- a/xen/arch/arm/gic-v3-its.c
>> +++ b/xen/arch/arm/gic-v3-its.c
>> @@ -20,9 +20,138 @@
>> #include <xen/lib.h>
>> #include <xen/device_tree.h>
>> #include <xen/libfdt/libfdt.h>
>> +#include <xen/mm.h>
>> +#include <xen/sizes.h>
>> #include <asm/gic.h>
>> #include <asm/gic_v3_defs.h>
>> #include <asm/gic_v3_its.h>
>> +#include <asm/io.h>
>> +
>> +#define BASER_ATTR_MASK \
>> + ((0x3UL << GITS_BASER_SHAREABILITY_SHIFT) | \
>> + (0x7UL << GITS_BASER_OUTER_CACHEABILITY_SHIFT) | \
>> + (0x7UL << GITS_BASER_INNER_CACHEABILITY_SHIFT))
>> +#define BASER_RO_MASK (GENMASK(58, 56) | GENMASK(52, 48))
>> +
>> +static uint64_t encode_phys_addr(paddr_t addr, int page_bits)
>> +{
>> + uint64_t ret;
>> +
>> + if ( page_bits < 16 )
>> + return (uint64_t)addr & GENMASK(47, page_bits);
>> +
>> + ret = addr & GENMASK(47, 16);
>> + return ret | (addr & GENMASK(51, 48)) >> (48 - 12);
>> +}
>> +
>> +#define PAGE_BITS(sz) ((sz) * 2 + PAGE_SHIFT)
>> +
>> +static int its_map_baser(void __iomem *basereg, uint64_t regc, int
>> nr_items)
>> +{
>> + uint64_t attr, reg;
>> + int entry_size = ((regc >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f)
>> + 1;
>> + int pagesz = 0, order, table_size;
Please try ITS page sizes in the order 64K, 16K and 4K to cover more ITS
devices using a flat table. Similar to Linux ITS driver.
>> + void *buffer = NULL;
>> +
>> + attr = GIC_BASER_InnerShareable << GITS_BASER_SHAREABILITY_SHIFT;
>> + attr |= GIC_BASER_CACHE_SameAsInner <<
>> GITS_BASER_OUTER_CACHEABILITY_SHIFT;
>> + attr |= GIC_BASER_CACHE_RaWaWb <<
>> GITS_BASER_INNER_CACHEABILITY_SHIFT;
>> +
>> + /*
>> + * Setup the BASE register with the attributes that we like.
>> Then read
>> + * it back and see what sticks (page size, cacheability and
>> shareability
>> + * attributes), retrying if necessary.
>> + */
>> + while ( 1 )
>> + {
>> + table_size = ROUNDUP(nr_items * entry_size,
>> BIT(PAGE_BITS(pagesz)));
>> + order = get_order_from_bytes(table_size);
>> +
Limit to 256 ITS pages, ITS spec doesn't support more than 256 ITS pages.
/* Maximum of 256 ITS pages are allowed */
if ( (table_size >> PAGE_BITS(pagesz)) > GITS_BASER_PAGES_MAX )
table_size = BIT(PAGE_BITS(pagesz)) * GITS_BASER_PAGES_MAX;
>> + if ( !buffer )
>> + buffer = alloc_xenheap_pages(order, 0);
>> + if ( !buffer )
>> + return -ENOMEM;
>> +
Please zero memory memset(buffer, 0x00, order << PAGE_SHIFT)
--
Shanker Donthineni
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-02-24 19:30 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-30 18:31 [PATCH 00/28] arm64: Dom0 ITS emulation Andre Przywara
2017-01-30 18:31 ` [PATCH 01/28] ARM: export __flush_dcache_area() Andre Przywara
2017-02-06 11:23 ` Julien Grall
2017-01-30 18:31 ` [PATCH 02/28] ARM: GICv3 ITS: parse and store ITS subnodes from hardware DT Andre Przywara
2017-02-06 12:39 ` Julien Grall
2017-02-16 17:44 ` Andre Przywara
2017-02-16 18:15 ` Julien Grall
2017-02-06 12:58 ` Julien Grall
2017-02-27 11:43 ` Andre Przywara
2017-02-27 12:51 ` Julien Grall
2017-01-30 18:31 ` [PATCH 03/28] ARM: GICv3: allocate LPI pending and property table Andre Przywara
2017-02-06 16:26 ` Julien Grall
2017-02-27 11:34 ` Andre Przywara
2017-02-27 12:48 ` Julien Grall
2017-02-14 0:47 ` Stefano Stabellini
2017-01-30 18:31 ` [PATCH 04/28] ARM: GICv3 ITS: allocate device and collection table Andre Przywara
2017-02-06 17:19 ` Julien Grall
2017-02-14 0:55 ` Stefano Stabellini
2017-02-06 17:36 ` Julien Grall
2017-02-06 17:43 ` Julien Grall
2017-03-23 18:06 ` Andre Przywara
2017-03-23 18:08 ` Julien Grall
2017-02-14 0:54 ` Stefano Stabellini
2017-02-15 18:31 ` Shanker Donthineni
2017-02-16 19:03 ` Shanker Donthineni
2017-02-24 19:29 ` Shanker Donthineni [this message]
2017-02-27 10:23 ` Andre Przywara
2017-01-30 18:31 ` [PATCH 05/28] ARM: GICv3 ITS: map ITS command buffer Andre Przywara
2017-02-06 17:43 ` Julien Grall
2017-02-14 0:59 ` Stefano Stabellini
2017-02-14 20:50 ` Julien Grall
2017-02-14 21:00 ` Stefano Stabellini
2017-01-30 18:31 ` [PATCH 06/28] ARM: GICv3 ITS: introduce ITS command handling Andre Przywara
2017-02-06 19:16 ` Julien Grall
2017-02-07 11:44 ` Julien Grall
2017-03-07 18:08 ` Andre Przywara
2017-03-08 15:28 ` Julien Grall
2017-03-08 16:16 ` Andre Przywara
2017-02-07 11:59 ` Julien Grall
2017-01-30 18:31 ` [PATCH 07/28] ARM: GICv3 ITS: introduce device mapping Andre Przywara
2017-02-07 14:05 ` Julien Grall
2017-02-15 16:30 ` Julien Grall
2017-02-22 7:06 ` Vijay Kilari
2017-02-24 19:37 ` Shanker Donthineni
2017-02-22 13:17 ` Julien Grall
2017-01-30 18:31 ` [PATCH 08/28] ARM: GICv3 ITS: introduce host LPI array Andre Przywara
2017-02-07 18:01 ` Julien Grall
2017-02-14 20:05 ` Stefano Stabellini
2017-01-30 18:31 ` [PATCH 09/28] ARM: GICv3 ITS: map device and LPIs to the ITS on physdev_op hypercall Andre Przywara
2017-01-31 10:29 ` Jaggi, Manish
2017-01-31 12:43 ` Julien Grall
2017-01-31 13:19 ` Jaggi, Manish
2017-01-31 13:46 ` Julien Grall
2017-01-31 14:08 ` Jaggi, Manish
2017-01-31 15:17 ` Julien Grall
2017-01-31 16:02 ` Jaggi, Manish
2017-01-31 16:18 ` Julien Grall
2017-02-24 19:57 ` Shanker Donthineni
2017-02-24 20:28 ` Julien Grall
2017-02-27 17:20 ` Andre Przywara
2017-02-28 18:29 ` Julien Grall
2017-03-01 19:42 ` Shanker Donthineni
2017-03-03 15:53 ` Julien Grall
2017-01-31 13:28 ` Jaggi, Manish
2017-02-14 20:11 ` Stefano Stabellini
2017-01-30 18:31 ` [PATCH 10/28] ARM: GICv3: introduce separate pending_irq structs for LPIs Andre Przywara
2017-02-14 20:39 ` Stefano Stabellini
2017-02-15 17:06 ` Julien Grall
2017-02-15 17:03 ` Julien Grall
2017-01-30 18:31 ` [PATCH 11/28] ARM: GICv3: forward pending LPIs to guests Andre Przywara
2017-02-14 21:00 ` Stefano Stabellini
2017-02-15 17:18 ` Julien Grall
2017-02-15 21:25 ` Stefano Stabellini
2017-03-02 20:56 ` Julien Grall
2017-03-03 7:58 ` Jan Beulich
2017-03-03 14:53 ` Julien Grall
2017-02-15 17:30 ` Julien Grall
2017-01-30 18:31 ` [PATCH 12/28] ARM: GICv3: enable ITS and LPIs on the host Andre Przywara
2017-02-14 22:41 ` Stefano Stabellini
2017-02-15 17:35 ` Julien Grall
2017-01-30 18:31 ` [PATCH 13/28] ARM: vGICv3: handle virtual LPI pending and property tables Andre Przywara
2017-02-14 23:56 ` Stefano Stabellini
2017-02-15 18:44 ` Julien Grall
2017-01-30 18:31 ` [PATCH 14/28] ARM: vGICv3: Handle disabled LPIs Andre Przywara
2017-02-14 23:58 ` Stefano Stabellini
2017-01-30 18:31 ` [PATCH 15/28] ARM: vGICv3: introduce basic ITS emulation bits Andre Przywara
2017-02-15 20:06 ` Shanker Donthineni
2017-01-30 18:31 ` [PATCH 16/28] ARM: vITS: introduce translation table walks Andre Przywara
2017-01-30 18:31 ` [PATCH 17/28] ARM: vITS: handle CLEAR command Andre Przywara
2017-02-15 0:07 ` Stefano Stabellini
2017-01-30 18:31 ` [PATCH 18/28] ARM: vITS: handle INT command Andre Przywara
2017-01-30 18:31 ` [PATCH 19/28] ARM: vITS: handle MAPC command Andre Przywara
2017-01-30 18:31 ` [PATCH 20/28] ARM: vITS: handle MAPD command Andre Przywara
2017-02-15 0:17 ` Stefano Stabellini
2017-01-30 18:31 ` [PATCH 21/28] ARM: vITS: handle MAPTI command Andre Przywara
2017-01-30 18:31 ` [PATCH 22/28] ARM: vITS: handle MOVI command Andre Przywara
2017-01-30 18:31 ` [PATCH 23/28] ARM: vITS: handle DISCARD command Andre Przywara
2017-01-30 18:31 ` [PATCH 24/28] ARM: vITS: handle INV command Andre Przywara
2017-01-30 18:31 ` [PATCH 25/28] ARM: vITS: handle INVALL command Andre Przywara
2017-01-30 18:31 ` [PATCH 26/28] ARM: vITS: create and initialize virtual ITSes for Dom0 Andre Przywara
2017-01-30 18:31 ` [PATCH 27/28] ARM: vITS: create ITS subnodes for Dom0 DT Andre Przywara
2017-01-30 18:31 ` [PATCH 28/28] ARM: vGIC: advertising LPI support Andre Przywara
2017-02-13 13:53 ` [PATCH 00/28] arm64: Dom0 ITS emulation Vijay Kilari
2017-02-14 22:00 ` Stefano Stabellini
2017-02-15 15:59 ` Julien Grall
2017-02-15 17:55 ` Julien Grall
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=d16fec32-f17a-43bf-0eff-765e7e453f9f@codeaurora.org \
--to=shankerd@codeaurora.org \
--cc=andre.przywara@arm.com \
--cc=julien.grall@arm.com \
--cc=sstabellini@kernel.org \
--cc=vijay.kilari@gmail.com \
--cc=xen-devel@lists.xenproject.org \
/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).