lkml.org 
[lkml]   [2019]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 05/36] irqchip/gic-v3-its: Kill its->ite_size and use TYPER copy instead
    Date
    Now that we have a copy of TYPER in the ITS structure, rely on this
    to provide the same service as its->ite_size, which gets axed.
    Errata workarounds are now updating the cached fields instead of
    requiring a separate field in the ITS structure.

    Signed-off-by: Marc Zyngier <maz@kernel.org>
    ---
    drivers/irqchip/irq-gic-v3-its.c | 8 ++++----
    include/linux/irqchip/arm-gic-v3.h | 2 +-
    2 files changed, 5 insertions(+), 5 deletions(-)

    diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
    index b3c9bc0c3ecd..3b046181ddfc 100644
    --- a/drivers/irqchip/irq-gic-v3-its.c
    +++ b/drivers/irqchip/irq-gic-v3-its.c
    @@ -6,6 +6,7 @@

    #include <linux/acpi.h>
    #include <linux/acpi_iort.h>
    +#include <linux/bitfield.h>
    #include <linux/bitmap.h>
    #include <linux/cpu.h>
    #include <linux/crash_dump.h>
    @@ -108,7 +109,6 @@ struct its_node {
    struct list_head its_device_list;
    u64 flags;
    unsigned long list_nr;
    - u32 ite_size;
    u32 device_ids;
    int numa_node;
    unsigned int msi_domain_flags;
    @@ -2435,7 +2435,7 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id,
    * sized as a power of two (and you need at least one bit...).
    */
    nr_ites = max(2, nvecs);
    - sz = nr_ites * its->ite_size;
    + sz = nr_ites * (FIELD_GET(GITS_TYPER_ITT_ENTRY_SIZE, its->typer) + 1);
    sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
    itt = kzalloc_node(sz, GFP_KERNEL, its->numa_node);
    if (alloc_lpis) {
    @@ -3250,7 +3250,8 @@ static bool __maybe_unused its_enable_quirk_qdf2400_e0065(void *data)
    struct its_node *its = data;

    /* On QDF2400, the size of the ITE is 16Bytes */
    - its->ite_size = 16;
    + its->typer &= ~GITS_TYPER_ITT_ENTRY_SIZE;
    + its->typer |= FIELD_PREP(GITS_TYPER_ITT_ENTRY_SIZE, 16 - 1);

    return true;
    }
    @@ -3619,7 +3620,6 @@ static int __init its_probe_one(struct resource *res,
    its->typer = typer;
    its->base = its_base;
    its->phys_base = res->start;
    - its->ite_size = GITS_TYPER_ITT_ENTRY_SIZE(typer);
    its->device_ids = GITS_TYPER_DEVBITS(typer);
    if (is_v4(its)) {
    if (!(typer & GITS_TYPER_VMOVP)) {
    diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
    index 5cc10cf7cb3e..4bce7a904075 100644
    --- a/include/linux/irqchip/arm-gic-v3.h
    +++ b/include/linux/irqchip/arm-gic-v3.h
    @@ -334,7 +334,7 @@
    #define GITS_TYPER_PLPIS (1UL << 0)
    #define GITS_TYPER_VLPIS (1UL << 1)
    #define GITS_TYPER_ITT_ENTRY_SIZE_SHIFT 4
    -#define GITS_TYPER_ITT_ENTRY_SIZE(r) ((((r) >> GITS_TYPER_ITT_ENTRY_SIZE_SHIFT) & 0xf) + 1)
    +#define GITS_TYPER_ITT_ENTRY_SIZE GENMASK_ULL(7, 4)
    #define GITS_TYPER_IDBITS_SHIFT 8
    #define GITS_TYPER_DEVBITS_SHIFT 13
    #define GITS_TYPER_DEVBITS(r) ((((r) >> GITS_TYPER_DEVBITS_SHIFT) & 0x1f) + 1)
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-10-27 15:43    [W:4.131 / U:0.720 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site