From nobody Thu Apr 30 00:18:10 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g5ZWk5SBNz6cDy9 for ; Thu, 30 Apr 2026 00:18:10 +0000 (UTC) (envelope-from git@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) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g5ZWk4df6z4BJT for ; Thu, 30 Apr 2026 00:18:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777508290; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=FcAq82pkxDW89O9hbsKfnCOCvqratje3kNKPvCAMk1c=; b=G7o5FL1hfyP75upCFQFdL0Nbtk8P457f8LXYJL5mKHY+n1N5uH9Vl7XDi22QB1eCMiWntY /Xqo2nlmuBcsEUV+jU2DqbEE9EDvu51c25OEdn/ZJPuy65pkKS4Fes0vDqpRr9l+nPdD2w wY8YzgKKvgR6uPW01p/uU8jE5jy474zliXdZ2VsTJ+d3jZPXCItOZ+VpkikVh8Q6lDOYkr kMEWh9/W2h7cXJMao+pAJvFtLYpcAUbACP7iI65fSD7eX1torITK+jT6+TTsu7TibHVJKD Retx/bUbacgroRgH/wSqLhCjYFET3u1/SLO1RPulpxZOnw3lpbFgZOYRfmXYfA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777508290; a=rsa-sha256; cv=none; b=gZeq7D0b6UXmeTuKZSZr+5r827Mxbnl+kvfluPG5RuINGohSjqcPdUy+ZnTEhh7lIQbF1t P2Kom+p8JUKl6w6UfkM5uUgJye/2zYnae5J7kI2z0bivJWTjlcK0BfKy2qS7ia8VlXHhQa Y/+UmcZTzRDTcb5COZNk6q4E+LKiw9y2odD4/yUf2KAaYedFujeADGVohc05ojG+3v6VaC adz+CuZItgioPQDrk2Xn/+4SXqt+tY/B05Q7lfkx8M7DdNg4aFpTyHpxuMtgXOLvbEBmf4 Wyzvj84v0HcEDuO6N7io6Ni064CVyKCohxfve38JLzEredGhqPdgUQq0PbUrCA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777508290; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=FcAq82pkxDW89O9hbsKfnCOCvqratje3kNKPvCAMk1c=; b=POa7o4U8R/2ZVdl5jIwhpEKjF27UW16U8wV6uxWPuwpYRn1ypLgrebLckv06m1ObZhd7s/ jvIUxkZl2WfgSNLkwzl2N4Q/3/qF8F4SS8GLVs1fDC01uiPmEw5LSQBuOR4OG032mbQaMY lyi1zYfCY7gcVWL1Hy+Pb50xmfFb9P5rNUUSNhZ8LajjrQADkWIZ39d+dr+223s7AhZ1bU /tCCi4l5X+uanrPZwGTfS3u9Z2NjQWGkkL/Y0ov2Xw7Isa1mPKNVd5dIL1HUQOnK0WFfk9 FJBsRfxLo4EAykh/o4H26twP7WBTtlO2QMz2hrfkPp+0TmZgoyJWUEKjL/tHsw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g5ZWk4BMxz135L for ; Thu, 30 Apr 2026 00:18:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 317a4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 30 Apr 2026 00:18:10 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: 40bcad56f1b8 - main - powerpc/pic: Add a PIC_AP_INIT() to set up AP PIC info List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 40bcad56f1b8b3a0eed9af68de5535a784c004d9 Auto-Submitted: auto-generated Date: Thu, 30 Apr 2026 00:18:10 +0000 Message-Id: <69f29fc2.317a4.ef71453@gitrepo.freebsd.org> The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=40bcad56f1b8b3a0eed9af68de5535a784c004d9 commit 40bcad56f1b8b3a0eed9af68de5535a784c004d9 Author: Justin Hibbits AuthorDate: 2026-04-30 00:12:18 +0000 Commit: Justin Hibbits CommitDate: 2026-04-30 00:13:48 +0000 powerpc/pic: Add a PIC_AP_INIT() to set up AP PIC info pc_cpuid may not match the PIC's idea of a given CPU. Since openpic has a WHOAMI register, we can use that to get the PIC's idea of the CPU. This needs to be done on each AP, so add a PIC_AP_INIT device method so the PIC can perform any AP-specific initialization at AP bootstrap time. This fixes SMP on e6500, which is still lacking SMT support. Differential Revision: https://reviews.freebsd.org/D56421 --- sys/powerpc/include/pcpu.h | 1 + sys/powerpc/powerpc/mp_machdep.c | 1 + sys/powerpc/powerpc/openpic.c | 28 +++++++++++++++++++++------- sys/powerpc/powerpc/pic_if.m | 3 +++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/sys/powerpc/include/pcpu.h b/sys/powerpc/include/pcpu.h index 924b3d893acd..f2a9bd0080b5 100644 --- a/sys/powerpc/include/pcpu.h +++ b/sys/powerpc/include/pcpu.h @@ -45,6 +45,7 @@ struct pvo_entry; struct thread *pc_vecthread; /* current vec user */ \ struct thread *pc_htmthread; /* current htm user */ \ uintptr_t pc_hwref; \ + uintptr_t pc_pic; \ int pc_bsp; \ volatile int pc_awake; \ uint32_t pc_ipimask; \ diff --git a/sys/powerpc/powerpc/mp_machdep.c b/sys/powerpc/powerpc/mp_machdep.c index d6d140aa0ea2..114990a97cdb 100644 --- a/sys/powerpc/powerpc/mp_machdep.c +++ b/sys/powerpc/powerpc/mp_machdep.c @@ -87,6 +87,7 @@ machdep_ap_bootstrap(void) /* Give platform code a chance to do anything else necessary */ platform_smp_ap_init(); + PIC_AP_INIT(root_pic); /* Initialize decrementer */ decr_ap_init(); diff --git a/sys/powerpc/powerpc/openpic.c b/sys/powerpc/powerpc/openpic.c index aa28f63cb6f5..bdd59407e3d4 100644 --- a/sys/powerpc/powerpc/openpic.c +++ b/sys/powerpc/powerpc/openpic.c @@ -254,7 +254,7 @@ openpic_bind(device_t dev, u_int irq, cpuset_t cpumask, void **priv __unused) break; ncpu++; } - mask &= (1 << cpu); + mask = (1 << __pcpu[cpu].pc_pic); } openpic_write(sc, OPENPIC_IDEST(irq), mask); @@ -288,9 +288,10 @@ openpic_dispatch(device_t dev, struct trapframe *tf) CTR1(KTR_INTR, "%s: got interrupt", __func__); - cpuid = (dev == root_pic) ? PCPU_GET(cpuid) : 0; - sc = device_get_softc(dev); + + cpuid = (dev == root_pic) ? PCPU_GET(pic) : 0; + while (1) { vector = openpic_read(sc, OPENPIC_PCPU_IACK(cpuid)); vector &= OPENPIC_VECTOR_MASK; @@ -337,9 +338,9 @@ openpic_eoi(device_t dev, u_int irq __unused, void *priv __unused) struct openpic_softc *sc; u_int cpuid; - cpuid = (dev == root_pic) ? PCPU_GET(cpuid) : 0; - sc = device_get_softc(dev); + cpuid = (dev == root_pic) ? PCPU_GET(pic) : 0; + openpic_write(sc, OPENPIC_PCPU_EOI(cpuid), 0); } @@ -352,8 +353,8 @@ openpic_ipi(device_t dev, u_int cpu) sc = device_get_softc(dev); sched_pin(); - openpic_write(sc, OPENPIC_PCPU_IPI_DISPATCH(PCPU_GET(cpuid), 0), - 1u << cpu); + openpic_write(sc, OPENPIC_PCPU_IPI_DISPATCH(PCPU_GET(pic), 0), + 1u << pcpu_find(cpu)->pc_pic); sched_unpin(); } @@ -454,6 +455,18 @@ openpic_resume(device_t dev) return (0); } +static void +openpic_ap_init(device_t dev) +{ + struct openpic_softc *sc; + + if (dev != root_pic) + return; + + sc = device_get_softc(dev); + PCPU_SET(pic, bus_read_4(sc->sc_memr, OPENPIC_WHOAMI)); +} + static device_method_t openpic_methods[] = { /* Device interface */ DEVMETHOD(device_suspend, openpic_suspend), @@ -468,6 +481,7 @@ static device_method_t openpic_methods[] = { DEVMETHOD(pic_ipi, openpic_ipi), DEVMETHOD(pic_mask, openpic_mask), DEVMETHOD(pic_unmask, openpic_unmask), + DEVMETHOD(pic_ap_init, openpic_ap_init), DEVMETHOD_END }; diff --git a/sys/powerpc/powerpc/pic_if.m b/sys/powerpc/powerpc/pic_if.m index 59187be9d935..dbbcc93f6241 100644 --- a/sys/powerpc/powerpc/pic_if.m +++ b/sys/powerpc/powerpc/pic_if.m @@ -100,3 +100,6 @@ METHOD void unmask { void *priv; }; +METHOD void ap_init { + device_t dev; +};