Lines Matching defs:gic_data

74 static struct gic_chip_data gic_data __read_mostly;
77 #define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer))
78 #define GIC_LINE_NR min(GICD_TYPER_SPIS(gic_data.rdists.gicd_typer), 1020U)
79 #define GIC_ESPI_NR GICD_TYPER_ESPIS(gic_data.rdists.gicd_typer)
135 #define gic_data_rdist() (this_cpu_ptr(gic_data.rdists.rdist))
224 return gic_data.dist_base;
239 return gic_data.dist_base;
264 gic_do_wait_for_rwp(gic_data.dist_base, GICD_CTLR_RWP);
290 if (gic_data.flags & FLAGS_WORKAROUND_GICR_WAKER_MSM8996)
401 base = gic_data.dist_base;
701 if (unlikely(gic_data.flags & FLAGS_WORKAROUND_ASR_ERRATUM_8601001))
771 if (generic_handle_domain_irq(gic_data.domain, irqnr)) {
784 if (generic_handle_domain_nmi(gic_data.domain, irqnr)) {
911 void __iomem *base = gic_data.dist_base;
946 if (gic_data.rdists.gicd_typer2 & GICD_TYPER2_nASSGIcap) {
972 for (i = 0; i < gic_data.nr_redist_regions; i++) {
973 void __iomem *ptr = gic_data.redist_regions[i].redist_base;
986 ret = fn(gic_data.redist_regions + i, ptr);
990 if (gic_data.redist_regions[i].single_redist)
993 if (gic_data.redist_stride) {
994 ptr += gic_data.redist_stride;
1032 (int)(region - gic_data.redist_regions),
1075 gic_data.rdists.has_vlpis &= !!(typer & GICR_TYPER_VLPIS);
1086 gic_data.rdists.has_rvpeid &= !!(typer & GICR_TYPER_RVPEID);
1087 gic_data.rdists.has_direct_lpi &= (!!(typer & GICR_TYPER_DirectLPIS) |
1089 gic_data.rdists.has_rvpeid);
1090 gic_data.rdists.has_vpend_valid_dirty &= !!(typer & GICR_TYPER_DIRTY);
1093 if (WARN_ON_ONCE(gic_data.rdists.has_rvpeid && !gic_data.rdists.has_vlpis)) {
1094 gic_data.rdists.has_direct_lpi = false;
1095 gic_data.rdists.has_vlpis = false;
1096 gic_data.rdists.has_rvpeid = false;
1099 gic_data.ppi_nr = min(GICR_TYPER_NR_PPIS(typer), gic_data.ppi_nr);
1106 gic_data.ppi_nr = UINT_MAX;
1108 if (WARN_ON(gic_data.ppi_nr == UINT_MAX))
1109 gic_data.ppi_nr = 0;
1111 gic_data.ppi_nr,
1112 gic_data.has_rss ? ", RSS" : "",
1113 gic_data.rdists.has_direct_lpi ? ", DirectLPI" : "");
1115 if (gic_data.rdists.has_vlpis)
1117 gic_data.rdists.has_direct_lpi ? "DirectLPI " : "",
1118 gic_data.rdists.has_rvpeid ? "RVPEID " : "",
1119 gic_data.rdists.has_vpend_valid_dirty ? "Valid+Dirty " : "");
1125 return readl_relaxed(gic_data.dist_base + GICD_CTLR) & GICD_CTLR_DS;
1244 if (need_rss && (!gic_data.has_rss))
1259 !!(readl_relaxed(gic_data.dist_base + GICD_TYPER) & GICD_TYPER_LPIS) &&
1274 WARN((gic_data.ppi_nr > 16 || GIC_ESPI_NR != 0) &&
1282 for (i = 0; i < gic_data.ppi_nr + 16; i += 32)
1285 gic_cpu_config(rbase, gic_data.ppi_nr + 16, gic_redist_wait_for_rwp);
1382 .fwnode = gic_data.fwnode,
1392 base_sgi = irq_domain_alloc_irqs(gic_data.domain, 8, NUMA_NO_NODE, &sgi_fwspec);
1670 if (!gic_data.ppi_descs)
1706 return d == gic_data.domain;
1713 return d == partition_get_domain(gic_data.ppi_descs[ppi_idx]);
1733 if (!gic_data.ppi_descs)
1745 ret = partition_translate_id(gic_data.ppi_descs[ppi_idx],
1824 for (i = 0; i < gic_data.nr_redist_regions; i++) {
1826 (u64)gic_data.redist_regions[i].phys_base));
1835 phys = gic_data.dist_phys_base + T241_CHIP_GICDA_OFFSET;
1950 if (gic_data.flags & FLAGS_WORKAROUND_MTK_GICR_SAVE) {
1955 ppi_nmi_refs = kcalloc(gic_data.ppi_nr, sizeof(*ppi_nmi_refs), GFP_KERNEL);
1959 for (i = 0; i < gic_data.ppi_nr; i++)
2019 gic_data.fwnode = handle;
2020 gic_data.dist_phys_base = dist_phys_base;
2021 gic_data.dist_base = dist_base;
2022 gic_data.redist_regions = rdist_regs;
2023 gic_data.nr_redist_regions = nr_redist_regions;
2024 gic_data.redist_stride = redist_stride;
2029 typer = readl_relaxed(gic_data.dist_base + GICD_TYPER);
2030 gic_data.rdists.gicd_typer = typer;
2032 gic_enable_quirks(readl_relaxed(gic_data.dist_base + GICD_IIDR),
2033 gic_quirks, &gic_data);
2042 if (!(gic_data.flags & FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539))
2043 gic_data.rdists.gicd_typer2 = readl_relaxed(gic_data.dist_base + GICD_TYPER2);
2045 gic_data.domain = irq_domain_create_tree(handle, &gic_irq_domain_ops,
2046 &gic_data);
2047 gic_data.rdists.rdist = alloc_percpu(typeof(*gic_data.rdists.rdist));
2050 gic_data.rdists.has_rvpeid = true;
2051 gic_data.rdists.has_vlpis = true;
2052 gic_data.rdists.has_direct_lpi = true;
2053 gic_data.rdists.has_vpend_valid_dirty = true;
2056 if (WARN_ON(!gic_data.domain) || WARN_ON(!gic_data.rdists.rdist)) {
2061 irq_domain_update_bus_token(gic_data.domain, DOMAIN_BUS_WIRED);
2063 gic_data.has_rss = !!(typer & GICD_TYPER_RSS);
2066 err = mbi_init(handle, gic_data.domain);
2081 its_init(handle, &gic_data.rdists, gic_data.domain);
2086 gicv2m_init(handle, gic_data.domain);
2094 if (gic_data.domain)
2095 irq_domain_remove(gic_data.domain);
2096 free_percpu(gic_data.rdists.rdist);
2122 gic_data.ppi_descs = kcalloc(gic_data.ppi_nr, sizeof(*gic_data.ppi_descs), GFP_KERNEL);
2123 if (!gic_data.ppi_descs)
2180 for (i = 0; i < gic_data.ppi_nr; i++) {
2184 .fwnode = gic_data.fwnode,
2196 desc = partition_create_desc(gic_data.fwnode, parts, nr_parts,
2201 gic_data.ppi_descs[i] = desc;
2229 gic_v3_kvm_info.has_v4 = gic_data.rdists.has_vlpis;
2230 gic_v3_kvm_info.has_v4_1 = gic_data.rdists.has_rvpeid;
2305 gic_enable_of_quirks(node, gic_quirks, &gic_data);
2571 gic_v3_kvm_info.has_v4 = gic_data.rdists.has_vlpis;
2572 gic_v3_kvm_info.has_v4_1 = gic_data.rdists.has_rvpeid;