From owner-svn-src-all@freebsd.org Mon Feb 3 14:38:19 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D4FF524E1E2; Mon, 3 Feb 2020 14:38:19 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48B9Rb54h9z4dVc; Mon, 3 Feb 2020 14:38:19 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A924620E8; Mon, 3 Feb 2020 14:38:19 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 013EcJPo086818; Mon, 3 Feb 2020 14:38:19 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 013EcJOY086817; Mon, 3 Feb 2020 14:38:19 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <202002031438.013EcJOY086817@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Mon, 3 Feb 2020 14:38:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r357448 - head/sys/arm64/arm64 X-SVN-Group: head X-SVN-Commit-Author: andrew X-SVN-Commit-Paths: head/sys/arm64/arm64 X-SVN-Commit-Revision: 357448 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Feb 2020 14:38:19 -0000 Author: andrew Date: Mon Feb 3 14:38:19 2020 New Revision: 357448 URL: https://svnweb.freebsd.org/changeset/base/357448 Log: Remove the GICv3 ITS irq and replace it with an ID In r357324 most of the use of gi_irq was moved to gi_lpi. Complete this with the last few places we need the IRQ value and create gi_id for the per-device value we need. MFC after: 2 weeks Sponsored by: DARPA, AFRL Modified: head/sys/arm64/arm64/gicv3_its.c Modified: head/sys/arm64/arm64/gicv3_its.c ============================================================================== --- head/sys/arm64/arm64/gicv3_its.c Mon Feb 3 14:28:31 2020 (r357447) +++ head/sys/arm64/arm64/gicv3_its.c Mon Feb 3 14:38:19 2020 (r357448) @@ -223,7 +223,7 @@ struct its_col { struct gicv3_its_irqsrc { struct intr_irqsrc gi_isrc; - u_int gi_irq; + u_int gi_id; u_int gi_lpi; struct its_dev *gi_its_dev; }; @@ -806,7 +806,7 @@ gicv3_its_attach(device_t dev) M_GICV3_ITS, M_WAITOK | M_ZERO); name = device_get_nameunit(dev); for (i = 0; i < sc->sc_irq_length; i++) { - sc->sc_irqs[i].gi_irq = i; + sc->sc_irqs[i].gi_id = -1; sc->sc_irqs[i].gi_lpi = i + sc->sc_irq_base - GIC_FIRST_LPI; err = intr_isrc_register(&sc->sc_irqs[i].gi_isrc, dev, 0, "%s,%u", name, i); @@ -906,7 +906,7 @@ gicv3_its_pre_ithread(device_t dev, struct intr_irqsrc sc = device_get_softc(dev); girq = (struct gicv3_its_irqsrc *)isrc; gicv3_its_disable_intr(dev, isrc); - gic_icc_write(EOIR1, girq->gi_irq + sc->sc_irq_base); + gic_icc_write(EOIR1, girq->gi_lpi + GIC_FIRST_LPI); } static void @@ -924,7 +924,7 @@ gicv3_its_post_filter(device_t dev, struct intr_irqsrc sc = device_get_softc(dev); girq = (struct gicv3_its_irqsrc *)isrc; - gic_icc_write(EOIR1, girq->gi_irq + sc->sc_irq_base); + gic_icc_write(EOIR1, girq->gi_lpi + GIC_FIRST_LPI); } static int @@ -1135,6 +1135,7 @@ gicv3_its_alloc_msi(device_t dev, device_t child, int for (i = 0; i < count; i++, irq++) { its_dev->lpis.lpi_free--; girq = &sc->sc_irqs[irq]; + girq->gi_id = i; girq->gi_its_dev = its_dev; srcs[i] = (struct intr_irqsrc *)girq; @@ -1167,6 +1168,7 @@ gicv3_its_release_msi(device_t dev, device_t child, in its_dev->lpis.lpi_busy)); for (i = 0; i < count; i++) { girq = (struct gicv3_its_irqsrc *)isrc[i]; + girq->gi_id = -1; girq->gi_its_dev = NULL; } its_dev->lpis.lpi_busy -= count; @@ -1196,11 +1198,13 @@ gicv3_its_alloc_msix(device_t dev, device_t child, dev sc = device_get_softc(dev); irq = its_dev->lpis.lpi_base + its_dev->lpis.lpi_num - its_dev->lpis.lpi_free; - its_dev->lpis.lpi_free--; - its_dev->lpis.lpi_busy++; girq = &sc->sc_irqs[irq]; + girq->gi_id = its_dev->lpis.lpi_busy; girq->gi_its_dev = its_dev; + its_dev->lpis.lpi_free--; + its_dev->lpis.lpi_busy++; + /* Map the message to the given IRQ */ gicv3_its_select_cpu(dev, (struct intr_irqsrc *)girq); its_cmd_mapti(dev, girq); @@ -1227,6 +1231,7 @@ gicv3_its_release_msix(device_t dev, device_t child, s "were allocated: allocated %d", its_dev->lpis.lpi_busy)); girq = (struct gicv3_its_irqsrc *)isrc; girq->gi_its_dev = NULL; + girq->gi_id = -1; its_dev->lpis.lpi_busy--; if (its_dev->lpis.lpi_busy == 0) @@ -1246,7 +1251,7 @@ gicv3_its_map_msi(device_t dev, device_t child, struct girq = (struct gicv3_its_irqsrc *)isrc; *addr = vtophys(rman_get_virtual(sc->sc_its_res)) + GITS_TRANSLATER; - *data = girq->gi_irq - girq->gi_its_dev->lpis.lpi_base; + *data = girq->gi_id; return (0); } @@ -1581,7 +1586,7 @@ its_cmd_movi(device_t dev, struct gicv3_its_irqsrc *gi desc.cmd_type = ITS_CMD_MOVI; desc.cmd_desc_movi.its_dev = girq->gi_its_dev; desc.cmd_desc_movi.col = col; - desc.cmd_desc_movi.id = girq->gi_irq - girq->gi_its_dev->lpis.lpi_base; + desc.cmd_desc_movi.id = girq->gi_id; its_cmd_send(dev, &desc); } @@ -1619,9 +1624,9 @@ its_cmd_mapti(device_t dev, struct gicv3_its_irqsrc *g desc.cmd_desc_mapvi.its_dev = girq->gi_its_dev; desc.cmd_desc_mapvi.col = col; /* The EventID sent to the device */ - desc.cmd_desc_mapvi.id = girq->gi_irq - girq->gi_its_dev->lpis.lpi_base; + desc.cmd_desc_mapvi.id = girq->gi_id; /* The physical interrupt presented to softeware */ - desc.cmd_desc_mapvi.pid = girq->gi_irq + sc->sc_irq_base; + desc.cmd_desc_mapvi.pid = girq->gi_lpi + GIC_FIRST_LPI; its_cmd_send(dev, &desc); } @@ -1651,7 +1656,7 @@ its_cmd_inv(device_t dev, struct its_dev *its_dev, desc.cmd_type = ITS_CMD_INV; /* The EventID sent to the device */ - desc.cmd_desc_inv.pid = girq->gi_irq - its_dev->lpis.lpi_base; + desc.cmd_desc_inv.pid = girq->gi_id; desc.cmd_desc_inv.its_dev = its_dev; desc.cmd_desc_inv.col = col;