From nobody Thu Apr 30 00:18:10 2026 X-Original-To: dev-commits-src-all@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 4g5ZWr0wJqz6cDsM for ; Thu, 30 Apr 2026 00:18:16 +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 4g5ZWq510rz4B7j for ; Thu, 30 Apr 2026 00:18:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777508295; 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=bEiH23FMAuw3GIb+ZD2AUFg4mIkpMKWKWyGWpoZsUrnjnDQJ61uygQpz1KoEys3SNpKaez RsAkJqeZA3kbJ+QtrRK9UWv4R4dNqbPuR0LxMipETnLGDIAf3U0k86uDIuLx8qb03tYtBl 7iIVhV+Nzf9uF4C3lIqt7IFg92G8E8IsSu3AX0x1HJUmuQq90HnZk03IvwXsqyeydPu8V5 LVongko4+UM5fK6Y8fA76XIQHhvgNGryC7hqLwex33i/HsPXl//KGgp0bwsjXP91a7NxfC vtgF3uEZf0UicIAuFAgwbHeEJ1hmxEQQgLeVaypturt0p5cTgxJZb55G+qWAMg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777508295; a=rsa-sha256; cv=none; b=STr+6Ihh622zxnFpT8/x+xjKWkql9DLt+UIrZJFerG//fGJ7J1dAbRp8A70gGg0jwcP7G1 pdWlOePmoHgwyM0Dvuu011y+ShSgOnzhgDL3MqYTpxF1CD0tm09RnFCb58Ahb8VjfBV+vz XCV2nfnVSneXwpSB7EkhSpCShv81WAEGuVXGzB1Z8VCLMRyrj9Pm2s1ojxb68jULjm8np5 1h8N2LQSFw8S+gLw2HfjO0cvT4ZokHMna01LlIeCqurDQ8lKB/xPC5QkKkaKYE5T1MQn8w ckGki0rk2XPCClHtKhIcOs0Xlhdat6mDTCxed4KDIfNhuemAIkOqoQ6kIVPYJA== 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=1777508295; 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=kralJo/vuK9gMDo8R7qaVfhXbi3AwmMFO4QvSTG1PK3d7RI5w20LLp3bptKIj1I5+bJuv+ xvnGteCr0tFwWz7RnIPj2rzqC0RE0EZpPlNwSB9JYgwVo/imlvg6CC76VA1E4p1wj8DA9t GusF9wR2Njv9Jqst8GkM6EMZJN9a1+pzG8d5x0ClWsDWJD7kXSbpNzy4BENLEaEEEfoHQZ PCOSbrsO83JIQ1NrOi/v18FGTPGVfQ/VUDRfbXFecEnFmRtSX644l9vFINsRJgUI+PprOy 2GZTdzzep5NlmM1W4MmhWAiXW2EXOJA63YoYFxlWJEd0/59aRmiPKX/S52HfHw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g5ZWq4N0yz12Vp for ; Thu, 30 Apr 2026 00:18:15 +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 all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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; +};