Lines Matching defs:gic_data
62 static struct gic_chip_data gic_data __read_mostly;
65 #define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer))
66 #define GIC_LINE_NR min(GICD_TYPER_SPIS(gic_data.rdists.gicd_typer), 1020U)
67 #define GIC_ESPI_NR GICD_TYPER_ESPIS(gic_data.rdists.gicd_typer)
132 #define gic_data_rdist() (this_cpu_ptr(gic_data.rdists.rdist))
203 return gic_data.dist_base;
228 gic_do_wait_for_rwp(gic_data.dist_base, GICD_CTLR_RWP);
254 if (gic_data.flags & FLAGS_WORKAROUND_GICR_WAKER_MSM8996)
349 base = gic_data.dist_base;
367 base = gic_data.dist_base;
593 base = gic_data.dist_base;
659 err = handle_domain_nmi(gic_data.domain, irqnr, regs);
727 if (handle_domain_irq(gic_data.domain, irqnr, regs)) {
775 void __iomem *base = gic_data.dist_base;
810 if (gic_data.rdists.gicd_typer2 & GICD_TYPER2_nASSGIcap) {
835 for (i = 0; i < gic_data.nr_redist_regions; i++) {
836 void __iomem *ptr = gic_data.redist_regions[i].redist_base;
849 ret = fn(gic_data.redist_regions + i, ptr);
853 if (gic_data.redist_regions[i].single_redist)
856 if (gic_data.redist_stride) {
857 ptr += gic_data.redist_stride;
893 (int)(region - gic_data.redist_regions),
935 gic_data.rdists.has_vlpis &= !!(typer & GICR_TYPER_VLPIS);
938 gic_data.rdists.has_rvpeid &= !!(typer & GICR_TYPER_RVPEID);
939 gic_data.rdists.has_direct_lpi &= (!!(typer & GICR_TYPER_DirectLPIS) |
940 gic_data.rdists.has_rvpeid);
941 gic_data.rdists.has_vpend_valid_dirty &= !!(typer & GICR_TYPER_DIRTY);
944 if (WARN_ON_ONCE(gic_data.rdists.has_rvpeid && !gic_data.rdists.has_vlpis)) {
945 gic_data.rdists.has_direct_lpi = false;
946 gic_data.rdists.has_vlpis = false;
947 gic_data.rdists.has_rvpeid = false;
950 gic_data.ppi_nr = min(GICR_TYPER_NR_PPIS(typer), gic_data.ppi_nr);
957 gic_data.ppi_nr = UINT_MAX;
959 if (WARN_ON(gic_data.ppi_nr == UINT_MAX))
960 gic_data.ppi_nr = 0;
961 pr_info("%d PPIs implemented\n", gic_data.ppi_nr);
962 if (gic_data.rdists.has_vlpis)
964 gic_data.rdists.has_direct_lpi ? "DirectLPI " : "",
965 gic_data.rdists.has_rvpeid ? "RVPEID " : "",
966 gic_data.rdists.has_vpend_valid_dirty ? "Valid+Dirty " : "");
972 return readl_relaxed(gic_data.dist_base + GICD_CTLR) & GICD_CTLR_DS;
1091 if (need_rss && (!gic_data.has_rss))
1106 !!(readl_relaxed(gic_data.dist_base + GICD_TYPER) & GICD_TYPER_LPIS) &&
1121 WARN((gic_data.ppi_nr > 16 || GIC_ESPI_NR != 0) &&
1129 for (i = 0; i < gic_data.ppi_nr + 16; i += 32)
1132 gic_cpu_config(rbase, gic_data.ppi_nr + 16, gic_redist_wait_for_rwp);
1227 .fwnode = gic_data.fwnode,
1237 base_sgi = __irq_domain_alloc_irqs(gic_data.domain, -1, 8,
1538 gic_data.ppi_descs)
1539 return d == partition_get_domain(gic_data.ppi_descs[fwspec->param[1]]);
1541 return d == gic_data.domain;
1559 if (!gic_data.ppi_descs)
1566 ret = partition_translate_id(gic_data.ppi_descs[fwspec->param[1]],
1676 if (gic_data.flags & FLAGS_WORKAROUND_MTK_GICR_SAVE) {
1681 ppi_nmi_refs = kcalloc(gic_data.ppi_nr, sizeof(*ppi_nmi_refs), GFP_KERNEL);
1685 for (i = 0; i < gic_data.ppi_nr; i++)
1752 gic_data.fwnode = handle;
1753 gic_data.dist_base = dist_base;
1754 gic_data.redist_regions = rdist_regs;
1755 gic_data.nr_redist_regions = nr_redist_regions;
1756 gic_data.redist_stride = redist_stride;
1761 typer = readl_relaxed(gic_data.dist_base + GICD_TYPER);
1762 gic_data.rdists.gicd_typer = typer;
1764 gic_enable_quirks(readl_relaxed(gic_data.dist_base + GICD_IIDR),
1765 gic_quirks, &gic_data);
1774 if (!(gic_data.flags & FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539))
1775 gic_data.rdists.gicd_typer2 = readl_relaxed(gic_data.dist_base + GICD_TYPER2);
1777 gic_data.domain = irq_domain_create_tree(handle, &gic_irq_domain_ops,
1778 &gic_data);
1779 gic_data.rdists.rdist = alloc_percpu(typeof(*gic_data.rdists.rdist));
1780 gic_data.rdists.has_rvpeid = true;
1781 gic_data.rdists.has_vlpis = true;
1782 gic_data.rdists.has_direct_lpi = true;
1783 gic_data.rdists.has_vpend_valid_dirty = true;
1785 if (WARN_ON(!gic_data.domain) || WARN_ON(!gic_data.rdists.rdist)) {
1790 irq_domain_update_bus_token(gic_data.domain, DOMAIN_BUS_WIRED);
1792 gic_data.has_rss = !!(typer & GICD_TYPER_RSS);
1794 gic_data.has_rss ? "" : "no ");
1797 err = mbi_init(handle, gic_data.domain);
1812 its_init(handle, &gic_data.rdists, gic_data.domain);
1816 gicv2m_init(handle, gic_data.domain);
1824 if (gic_data.domain)
1825 irq_domain_remove(gic_data.domain);
1826 free_percpu(gic_data.rdists.rdist);
1852 gic_data.ppi_descs = kcalloc(gic_data.ppi_nr, sizeof(*gic_data.ppi_descs), GFP_KERNEL);
1853 if (!gic_data.ppi_descs)
1910 for (i = 0; i < gic_data.ppi_nr; i++) {
1914 .fwnode = gic_data.fwnode,
1926 desc = partition_create_desc(gic_data.fwnode, parts, nr_parts,
1931 gic_data.ppi_descs[i] = desc;
1959 gic_v3_kvm_info.has_v4 = gic_data.rdists.has_vlpis;
1960 gic_v3_kvm_info.has_v4_1 = gic_data.rdists.has_rvpeid;
2011 gic_enable_of_quirks(node, gic_quirks, &gic_data);
2275 gic_v3_kvm_info.has_v4 = gic_data.rdists.has_vlpis;
2276 gic_v3_kvm_info.has_v4_1 = gic_data.rdists.has_rvpeid;