MCPcopy Create free account
hub / github.com/F-Stack/f-stack / its_init_cpu_lpi

Function its_init_cpu_lpi

freebsd/arm64/arm64/gicv3_its.c:616–695  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

614}
615
616static void
617its_init_cpu_lpi(device_t dev, struct gicv3_its_softc *sc)
618{
619 device_t gicv3;
620 uint64_t xbaser, tmp;
621 uint32_t ctlr;
622 u_int cpuid;
623
624 gicv3 = device_get_parent(dev);
625 cpuid = PCPU_GET(cpuid);
626
627 /* Disable LPIs */
628 ctlr = gic_r_read_4(gicv3, GICR_CTLR);
629 ctlr &= ~GICR_CTLR_LPI_ENABLE;
630 gic_r_write_4(gicv3, GICR_CTLR, ctlr);
631
632 /* Make sure changes are observable my the GIC */
633 dsb(sy);
634
635 /*
636 * Set the redistributor base
637 */
638 xbaser = vtophys(sc->sc_conf_base) |
639 (GICR_PROPBASER_SHARE_IS << GICR_PROPBASER_SHARE_SHIFT) |
640 (GICR_PROPBASER_CACHE_NIWAWB << GICR_PROPBASER_CACHE_SHIFT) |
641 (flsl(LPI_CONFTAB_SIZE | GIC_FIRST_LPI) - 1);
642 gic_r_write_8(gicv3, GICR_PROPBASER, xbaser);
643
644 /* Check the cache attributes we set */
645 tmp = gic_r_read_8(gicv3, GICR_PROPBASER);
646
647 if ((tmp & GICR_PROPBASER_SHARE_MASK) !=
648 (xbaser & GICR_PROPBASER_SHARE_MASK)) {
649 if ((tmp & GICR_PROPBASER_SHARE_MASK) ==
650 (GICR_PROPBASER_SHARE_NS << GICR_PROPBASER_SHARE_SHIFT)) {
651 /* We need to mark as non-cacheable */
652 xbaser &= ~(GICR_PROPBASER_SHARE_MASK |
653 GICR_PROPBASER_CACHE_MASK);
654 /* Non-cacheable */
655 xbaser |= GICR_PROPBASER_CACHE_NIN <<
656 GICR_PROPBASER_CACHE_SHIFT;
657 /* Non-sareable */
658 xbaser |= GICR_PROPBASER_SHARE_NS <<
659 GICR_PROPBASER_SHARE_SHIFT;
660 gic_r_write_8(gicv3, GICR_PROPBASER, xbaser);
661 }
662 sc->sc_its_flags |= ITS_FLAGS_LPI_CONF_FLUSH;
663 }
664
665 /*
666 * Set the LPI pending table base
667 */
668 xbaser = vtophys(sc->sc_pend_base[cpuid]) |
669 (GICR_PENDBASER_CACHE_NIWAWB << GICR_PENDBASER_CACHE_SHIFT) |
670 (GICR_PENDBASER_SHARE_IS << GICR_PENDBASER_SHARE_SHIFT);
671
672 gic_r_write_8(gicv3, GICR_PENDBASER, xbaser);
673

Callers 1

its_init_cpuFunction · 0.85

Calls 6

device_get_parentFunction · 0.85
gic_r_read_4Function · 0.85
gic_r_write_4Function · 0.85
gic_r_write_8Function · 0.85
gic_r_read_8Function · 0.85
flslFunction · 0.50

Tested by

no test coverage detected