ASELSANMicrokernel
S55 · SOURCE-BOUND GATE EVIDENCE

RPi5 G8d wrong-core timer kontrolü düzeltildi; exact paket reflash bekliyor

Operations komutu/kapı ailesi → gerçek repository yürütme sözleşmesi Bu sayfa yalnız S55 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.

S55Komut / fiziksel sözleşmeOperations id exactsource SHA exact

operation: rpi5-g8d-cpu1-timer-readback-fix-staged

script/Makefile/config · Operations · 2 exact excerpt

sequence-bound=true · implementation-bound=false
01 · Yürütme sözleşmesi

Gerçek script / Makefile / config kaynağı

tam dosyaL1–L229
scripts/verify-rpi5-g8d-layout.sh::verify-rpi5-g8d-layout.sh
#!/bin/sh
set -eu

if [ "$#" -ne 2 ]; then
    echo "usage: $0 <llvm-objdump> <rpi5-kernel-elf>" >&2
    exit 2
fi

objdump=$1
kernel=$2
for input in "$objdump" "$kernel"; do
    if [ ! -f "$input" ] || [ ! -r "$input" ]; then
        echo "HATA: G8d gate okuyamıyor: $input" >&2
        exit 1
    fi
done

disassembly=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-dis.XXXXXX")
secondary=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-secondary.XXXXXX")
primary=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-primary.XXXXXX")
task=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-task.XXXXXX")
handler=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-handler.XXXXXX")
prepare=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-prepare.XXXXXX")
send=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-send.XXXXXX")
stack_call=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-stack-call.XXXXXX")
prerequisite=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-prerequisite.XXXXXX")
g8c_secondary=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-g8c-secondary.XXXXXX")
irq_dispatch=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g8d-irq-dispatch.XXXXXX")
trap 'rm -f "$disassembly" "$secondary" "$primary" "$task" "$handler" "$prepare" "$send" "$stack_call" "$prerequisite" "$g8c_secondary" "$irq_dispatch"' EXIT HUP INT TERM

"$objdump" -d --no-show-raw-insn "$kernel" > "$disassembly"

extract_symbol() {
    symbol=$1
    output=$2
    awk -v header="<$symbol>:" '
        index($0, header) { capture = 1 }
        capture && /^[[:space:]]*$/ { exit }
        capture { print }
    ' "$disassembly" > "$output"
    if [ ! -s "$output" ]; then
        echo "HATA: G8d makine-kodu sembolü bulunamadı: $symbol" >&2
        exit 1
    fi
}

extract_symbol rpi5_g8d_secondary_run "$secondary"
extract_symbol rpi5_g8d_primary_run "$primary"
extract_symbol rpi5_g8d_task_wake_entry "$task"
extract_symbol rpi5_g8d_try_handle_secondary_irq "$handler"
extract_symbol rpi5_g8d_init_secondary_sgi "$prepare"
extract_symbol rpi5_g8d_send_sgi "$send"
extract_symbol rpi5_g8d_call_on_existing_task_stack "$stack_call"
extract_symbol rpi5_g8c_prerequisite_complete "$prerequisite"
extract_symbol rpi5_g8c_secondary_run "$g8c_secondary"
extract_symbol rust_irq_handler "$irq_dispatch"

for contract in \
    'cmp[[:space:]]+w0, #0xf' \
    'ubfiz[[:space:]]+w[0-9]+, w1, #16, #8' \
    'dsb[[:space:]]+ishst' \
    'orr[[:space:]]+w[0-9]+, w[0-9]+, w0' \
    'str[[:space:]]+w[0-9]+, \[x[0-9]+\]$' \
    'dsb[[:space:]]+ish'; do
    if ! grep -Eq "$contract" "$send"; then
        echo "HATA: G8d explicit-target SGIR makine-kodu eksik: $contract" >&2
        exit 1
    fi
done

if grep -Eq 'mrs[[:space:]]+x[0-9]+, CNTV_CTL_EL0' "$primary"; then
    echo "HATA: G8d CPU0 yolu kendi per-CPU timer register'ını CPU1 durumu olarak okuyor" >&2
    exit 1
fi
if ! grep -Eq 'ldar[[:space:]]+x[0-9]+, \[x[0-9]+\]' "$primary"; then
    echo "HATA: G8d CPU0 yolu yayımlanmış CPU1 timer readback'ini acquire-load etmiyor" >&2
    exit 1
fi
if [ "$(grep -Ec 'str[[:space:]]+w[0-9]+, \[x[0-9]+\]$' "$send")" -ne 1 ]; then
    echo "HATA: G8d SGIR yolu exact tek no-offset MMIO write içermiyor" >&2
    exit 1
fi

for contract in \
    'cmp[[:space:]]+w0, #0xf' \
    'cmp[[:space:]]+w1, #0x7' \
    'stur[[:space:]]+w[0-9]+, \[x[0-9]+, #-0xf0\]' \
    'ldur[[:space:]]+w[0-9]+, \[x[0-9]+, #-0xe0\]' \
    'sub[[:space:]]+x[0-9]+, x[0-9]+, #0x800' \
    'dsb[[:space:]]+sy' \
    '[[:space:]]isb([[:space:]]|$)' \
    'cmp[[:space:]]+w[0-9]+, #0x81' \
    'cmp[[:space:]]+w[0-9]+, #0x80'; do
    if ! grep -Eq "$contract" "$prepare"; then
        echo "HATA: G8d CPU1 banked SGI hazırlık makine-kodu eksik: $contract" >&2
        exit 1
    fi
done

for contract in \
    'mrs[[:space:]]+x[0-9]+, MPIDR_EL1' \
    'ubfx[[:space:]]+w[0-9]+, w1, #10, #3' \
    'ldaxr[[:space:]]+x[0-9]+' \
    'stlxr[[:space:]]+w[0-9]+' \
    'orr[[:space:]]+x[0-9]+, x[0-9]+, #0x80' \
    'mrs[[:space:]]+x[0-9]+, CNTV_CTL_EL0' \
    'cmp[[:space:]]+w2, #0x1' \
    'str[[:space:]]+w1, \[x[0-9]+\]$' \
    'cmp[[:space:]]+x[0-9]+, #0x3' \
    '[[:space:]]sev([[:space:]]|$)'; do
    if ! grep -Eq "$contract" "$handler"; then
        echo "HATA: G8d exact-once SGI handler makine-kodu eksik: $contract" >&2
        exit 1
    fi
done
if [ "$(grep -Ec 'str[[:space:]]+w1, \[x[0-9]+\]$' "$handler")" -ne 1 ]; then
    echo "HATA: G8d handler ham acknowledge değerini EOIR'ye exact bir kez yazmıyor" >&2
    exit 1
fi

for contract in \
    'bl[[:space:]]+.*<rpi5_g8c_prerequisite_complete>' \
    'mrs[[:space:]]+x[0-9]+, MPIDR_EL1' \
    'mrs[[:space:]]+x[0-9]+, TPIDR_EL1' \
    'mrs[[:space:]]+x[0-9]+, DAIF' \
    'mrs[[:space:]]+x[0-9]+, CNTV_CTL_EL0' \
    'mrs[[:space:]]+x[0-9]+, CPACR_EL1' \
    'bl[[:space:]]+.*<rpi5_g8d_init_secondary_sgi>' \
    'msr[[:space:]]+DAIFClr, #0x2' \
    'msr[[:space:]]+DAIFSet, #0x2' \
    'bl[[:space:]]+.*<rpi5_g8d_call_on_existing_task_stack>' \
    'cmp[[:space:]]+x[0-9]+, #0x6' \
    'cmp[[:space:]]+x[0-9]+, #0x7' \
    '[[:space:]]wfe([[:space:]]|$)'; do
    if ! grep -Eq "$contract" "$secondary"; then
        echo "HATA: G8d CPU1 IRQ-to-task dispatch makine-kodu eksik: $contract" >&2
        exit 1
    fi
done
if grep -Eq '[[:space:]]wfi([[:space:]]|$)' "$secondary"; then
    echo "HATA: G8d CPU1 bounded wait lost-event güvenli WFE yerine WFI içeriyor" >&2
    exit 1
fi

for contract in \
    'mrs[[:space:]]+x[0-9]+, MPIDR_EL1' \
    'cmp[[:space:]]+x[0-9]+, #0x100' \
    'ldaxr[[:space:]]+x[0-9]+' \
    'stlxr[[:space:]]+w[0-9]+' \
    'mov[[:space:]]+x[0-9]+, sp' \
    'mrs[[:space:]]+x[0-9]+, DAIF' \
    'mrs[[:space:]]+x[0-9]+, CNTV_CTL_EL0' \
    'stlr[[:space:]]+x[0-9]+' \
    '[[:space:]]ret([[:space:]]|$)'; do
    if ! grep -Eq "$contract" "$task"; then
        echo "HATA: G8d task wake makine-kodu eksik: $contract" >&2
        exit 1
    fi
done

for contract in \
    'mov[[:space:]]+x2, x1' \
    'mov[[:space:]]+x1, x0' \
    '<rpi5_g8c_call_on_stack>'; do
    if ! grep -Eq "$contract" "$stack_call"; then
        echo "HATA: G8d mevcut G8c stack yeniden-kullanım köprüsü eksik: $contract" >&2
        exit 1
    fi
done

for contract in \
    'cmp[[:space:]]+x[0-9]+, #0x5' \
    'cmp[[:space:]]+x[0-9]+, #0x1' \
    'cmp[[:space:]]+x[0-9]+, #0x3' \
    'cmp[[:space:]]+x[0-9]+, x[0-9]+' \
    'ldarb[[:space:]]+w[0-9]+' \
    'ccmp[[:space:]]+x[0-9]+, x[0-9]+'; do
    if ! grep -Eq "$contract" "$prerequisite"; then
        echo "HATA: G8d G8c fiziksel önkoşul makine-kodu eksik: $contract" >&2
        exit 1
    fi
done

for contract in \
    'bl[[:space:]]+.*<rpi5_g8d_secondary_released>' \
    'bl[[:space:]]+.*<rpi5_g8d_secondary_run>' \
    '[[:space:]]wfe([[:space:]]|$)'; do
    if ! grep -Eq "$contract" "$g8c_secondary"; then
        echo "HATA: G8d G8c park-handoff makine-kodu eksik: $contract" >&2
        exit 1
    fi
done

g8d_line=$(grep -n '<rpi5_g8d_try_handle_secondary_irq>' "$irq_dispatch" | head -n 1 | cut -d: -f1)
g8b_line=$(grep -n '<rpi5_g8b_try_handle_secondary_irq>' "$irq_dispatch" | head -n 1 | cut -d: -f1)
if [ -z "$g8d_line" ] || [ -z "$g8b_line" ] || [ "$g8d_line" -ge "$g8b_line" ]; then
    echo "HATA: G8d SGI interceptor tamamlanmış G8b interceptor'ından önce değil" >&2
    exit 1
fi

for cpu1_body in "$secondary" "$task" "$handler" "$prepare" "$stack_call" "$prerequisite"; do
    if grep -Eq '(^|[[:space:],\[])(([qv][0-9]+)|([sd][0-9]+))([[:space:],\]]|$)' "$cpu1_body"; then
        echo "HATA: G8d FP=TRAP CPU1 makine-kodu FP/SIMD talimatı içeriyor" >&2
        exit 1
    fi
    if grep -Eq 'panic|kprint|scheduler|context_switch|spawn_kernel_task|alloc::|tlbi|psci' "$cpu1_body"; then
        echo "HATA: G8d CPU1 yolu panic/UART/global scheduler/heap/shootdown/PSCI çağrısı içeriyor" >&2
        exit 1
    fi
done
if grep -Eq 'ack_and_rearm|rpi5_g8b_init_per_cpu_oneshot|rpi5_g8b_init_secondary_timer_ppi' "$secondary" "$task" "$handler"; then
    echo "HATA: G8d CPU1 yolu local timer'ı yeniden kuruyor veya rearm ediyor" >&2
    exit 1
fi

for marker in \
    'ASELSAN/G8D0 CPU=0 SOURCE=CPU0 TARGET=CPU1' \
    'ASELSAN/G8D1 CPU=1 MPIDR=0x' \
    'ASELSAN/G8D2 CPU=1 MPIDR=0x' \
    'ASELSAN/BOOT8D IPI=SGI1 CPU0_TO_CPU1=1' \
    'ASELSAN/G8DERR CODE='; do
    if ! strings "$kernel" | grep -Fq "$marker"; then
        echo "HATA: G8d marker ELF içinde yok: $marker" >&2
        exit 1
    fi
done

echo "PASS: G8d one CPU0->CPU1 SGI1, exact raw acknowledge/EOI, CPU1-published timer-off state, masked EL1h return and one existing pinned-task wake verified"
snippet sha256: fdf313db541bfile sha256: fdf313db541b
02 · Kapı kimlik kaydı

Operations sıra, kimlik ve başlık bağı

tam Operations kaydıL32020–L32118
website/src/lib/operations.ts::rpi5-g8d-cpu1-timer-readback-fix-staged
  {
    id: "rpi5-g8d-cpu1-timer-readback-fix-staged",
    date: "2026-08-21",
    sequence: 55,
    status: "fixed",
    title:
      "RPi5 G8d wrong-core timer kontrolü düzeltildi; exact paket reflash bekliyor",
    summary:
      "Sıra 54'teki fiziksel G8DERR TIMER_STATE reddinin kök nedeni, CPU1 park ettikten sonra CPU0 final yolunun çekirdek-yerel CNTV_CTL_EL0 register'ını kendi üzerinde okuyup CPU1'in timer kanıtı sanmasıydı. CPU0'ın periyodik timer'ı doğru olarak açık olduğundan ACTUAL=0x1 üretildi. CPU1 artık kendi timer-off değerini Release ile yayımlıyor; CPU0 değeri Acquire ile okuyup sentinel ve enable bitini fail-closed denetliyor. Primary makine-kodu kapısı CPU0 yolundaki CNTV_CTL_EL0 MRS'ini yasaklıyor. G8d hedefleri 17/17, workspace 148/148, verify-core, üç-board ve makine-kodu kapıları PASS verdi. İki artefaktsız kopya ve ana build exact aynı 263408 bayt / fa08cec0…47dd4c imajı üretti. Pi kapalıdır; kart hâlâ reddedilen 6d9c556f…a46922 paketi taşır ve düzeltilmiş paket karta henüz yazılmamıştır.",
    evidence: [
      "Kök neden çekirdek-yerel CNTV_CTL_EL0 semantiğidir: CPU1'in G8b one-shot timer'ı kapalıydı, fakat CPU0 final kontrolü CPU0'ın doğru çalışan periyodik timer'ını okuyup EXPECTED=0x0 / ACTUAL=0x1 üretti.",
      "CPU1 final yolu kendi timer control değerini okur; enable biti açıksa durur ve kapalı değeri SECONDARY_TIMER_CTL_AFTER üzerinden Release ordering ile yayımlar.",
      "CPU0 primary yolu yayımlanan değeri Acquire ordering ile alır; u64::MAX sentinel'ini ve enable bitini reddeder. CPU0 final yolunda timer::read_control çağrısı kaldırıldı.",
      "Export edilen rpi5_g8d_primary_run için disassembly kapısı primary machine code içindeki MRS CNTV_CTL_EL0 talimatını yasaklar ve acquire load'u zorunlu tutar.",
      "Kaynak regresyon kapısı cpu0_validates_published_cpu1_timer_instead_of_its_own_periodic_timer ile wrong-core okumasının geri dönmesini reddeder.",
      "make verify-rpi5-g8d-host: rpi5_g8d_source 10/10 + rpi5_g8d_uart 7/7; toplam 17/17 PASS.",
      "make verify-core exit 0: cargo test --workspace 148/148, QEMU runtime smoke, QEMU/RPi4/RPi5 build ve RPi5 G7c–G8d host/layout/package kapıları PASS.",
      "Düzeltilmiş ELF 7317128 B / e6c7876e1a82c1295bff7c2342b1e372c993b386863c0eee8cb164779f9333d5; imaj 263408 B / fa08cec0050fb5b3a7e1bfc7986d1d84248219efdb26f0535951f593df47dd4c.",
      "DTB 78703 B / 40a2fbe9…ca00 ve config 501 B / 1248275c…d76b değişmedi; yeni SHA256SUMS 248 B / e8efc67e…1c5e ve manifest 3/3 OK.",
      "İki bağımsız artefaktsız workspace ile ana workspace exact aynı fa08cec0050fb5b3a7e1bfc7986d1d84248219efdb26f0535951f593df47dd4c imajını üretti; A↔B, A↔main ve B↔main cmp PASS.",
      "Fiziksel fail, kök neden, düzeltme ve reflash sınırı docs/M8.1-RPi5-G8d-CPU1-SGI-Reschedule-Staged-Proof.md içinde donduruldu.",
    ],
    commands: [
      "source + disassembly audit of rpi5_g8d_primary_run and CNTV_CTL_EL0 ownership",
      "make verify-rpi5-g8d-host",
      "make verify-core",
      "make image-rpi5",
      "iki artefaktsız geçici workspace'te make image-rpi5 + sha256 + cmp",
    ],
    terminalSessionsNote:
      "Bu oturumlar fiziksel reddin ardından uygulanan wrong-core timer düzeltmesinin gerçek seçili test ve üretim sonuçlarıdır. Düzeltilmiş paket henüz microSD'ye yazılmadı ve fiziksel BOOT8D değildir.",
    terminalSessions: [
      {
        id: "g8d-fix-root-cause-gate",
        title:
          "Wrong-core CNTV_CTL_EL0 kök nedeni ve fail-closed regresyon kapısı",
        commandLines: [
          "rg + source/disassembly audit: CPU1 publish, CPU0 acquire, primary MRS ban",
          "scripts/verify-rpi5-g8d-layout.sh <llvm-objdump> <rpi5-kernel-elf>",
        ],
        outputLines: [
          "CPU1: SECONDARY_TIMER_CTL_AFTER.store(secondary_timer_ctl_after, Release)",
          "CPU0: SECONDARY_TIMER_CTL_AFTER.load(Acquire)",
          "primary CNTV_CTL_EL0 read=forbidden",
          "PASS: G8d one CPU0->CPU1 SGI1, exact raw acknowledge/EOI, CPU1-published timer-off state, masked EL1h return and one existing pinned-task wake verified",
        ],
        exitCode: 0,
        outputMode: "selected",
      },
      {
        id: "g8d-fix-targeted",
        title: "Düzeltilmiş G8d kaynak ve strict UART hedefleri",
        commandLines: ["make verify-rpi5-g8d-host"],
        outputLines: [
          "rpi5_g8d_source: 10 passed · 0 failed",
          "rpi5_g8d_uart: 7 passed · 0 failed",
          "G8d targeted total: 17/17 PASS",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
      {
        id: "g8d-fix-full-matrix",
        title: "Düzeltilmiş tam workspace, QEMU ve üç-board matrisi",
        commandLines: ["make verify-core", "make image-rpi5"],
        outputLines: [
          "cargo test --workspace: 148/148 PASS",
          "QEMU runtime smoke: PASS",
          "QEMU / Raspberry Pi 4 / Raspberry Pi 5 build: PASS",
          "RPi5 G7c–G8d host/layout/package gates: PASS",
          "manifest=3/3 OK · image=263408 B · fa08cec0…47dd4c",
        ],
        exitCode: 0,
        outputMode: "selected",
      },
      {
        id: "g8d-fix-reproducible-image",
        title: "Üç yönlü exact düzeltilmiş imaj eşitliği",
        commandLines: [
          "copy A: make image-rpi5",
          "copy B: make image-rpi5",
          "shasum -a 256 + cmp A↔B + cmp A↔main + cmp B↔main",
        ],
        outputLines: [
          "copy A: 263408 B · fa08cec0050fb5b3a7e1bfc7986d1d84248219efdb26f0535951f593df47dd4c",
          "copy B: 263408 B · fa08cec0050fb5b3a7e1bfc7986d1d84248219efdb26f0535951f593df47dd4c",
          "main:   263408 B · fa08cec0050fb5b3a7e1bfc7986d1d84248219efdb26f0535951f593df47dd4c",
          "cmp A↔B=PASS · cmp A↔main=PASS · cmp B↔main=PASS",
        ],
        exitCode: 0,
        outputMode: "complete",
      },
    ],
    limitations: [
      "Düzeltilmiş 263408 B / fa08cec0…47dd4c paket henüz microSD'ye yazılmadı; kart fiziksel TIMER_STATE reddini üreten eski 6d9c556f…a46922 paketi taşır.",
      "G8d fiziksel PASS değildir. Yeni paket için formatsız exact kart yazımı, same-descriptor immutable UART10 capture ve strict G8d validator üzerinde G8D0/G8D1/G8D2/BOOT8D PASS gerekir.",
      "Bu düzeltme dar CPU0→CPU1 SGI1/reschedule smoke sözleşmesindedir; migration, load balancing, TLB shootdown, CPU2/CPU3, hotplug ve EL0-on-CPU1 kapsam dışıdır.",
    ],
  },
snippet sha256: 066952f32e4efile sha256: 9726dbf00f84
Kayıtlı yürütme/kanıt komutu
source + disassembly audit of rpi5_g8d_primary_run and CNTV_CTL_EL0 ownership
Registry schema v5 · generator website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9