Skip to content

Yeni yazı: ARM GIC — Cortex-A Kesme Denetleyicisinin İçine Bakmak#101

Open
Mavrikant wants to merge 1 commit into
masterfrom
post/2026-05-30-gic-cortex-a-kesme-denetleyicisi
Open

Yeni yazı: ARM GIC — Cortex-A Kesme Denetleyicisinin İçine Bakmak#101
Mavrikant wants to merge 1 commit into
masterfrom
post/2026-05-30-gic-cortex-a-kesme-denetleyicisi

Conversation

@Mavrikant

Copy link
Copy Markdown
Owner

Yazı

Başlık: ARM GIC — Cortex-A Kesme Denetleyicisinin İçine Bakmak
Dosya: _posts/2026-05-30-gic-cortex-a-kesme-denetleyicisi.md
Dal: post/2026-05-30-gic-cortex-a-kesme-denetleyicisi
Alan: gömülü / ARM / SoC

Neden Bu Konu Seçildi?

GIC, Cortex-A ve Cortex-R sistemlerinde "saydam" olduğu varsayılan ama bütün gerçek-zaman davranışın kendi kararlarına bağlı olduğu kritik bir bloktur. Vendor BSP (Xilinx XScuGic) işi günlük geliştirme için bitirir; ama altta neyin döndüğünü bilmediğiniz sürece çoklu çekirdek bring-up, DAL A latency analizi ve "kesme alıyorum ama sonsuz tetikleniyor / ya da hiç gelmiyor" tipi hata ayıklama yapılamaz.

Bu konu, son haftalarda yazılan Renode (2026-05-14, yayında), linker script (#90, açık PR) ve volatile/Atomic (#100, açık PR) dizisinin doğal devamı: bare-metal Cortex-A bring-up zincirinde sonraki tıkanma noktası kesme denetleyicisidir.

Bu Konu Neden Türkçe İçerikte Zor Bulunuyor?

Konu, ARM Generic Interrupt Controller Architecture Specification (IHI 0048B), Xilinx UG585 TRM ve vendor BSP kaynak kodu sentezini gerektiriyor. Tekil İngilizce kaynaklar (OSDev wiki, RealDigital, baremetal-arm) parçalı; Türkçe tarafta yalnızca "XScuGic kullanımı" tarzı uygulama yazıları var — mimari + state-machine + failure-mode'u birlikte sentezleyen kaynak çok az. Banked/shared kayıt ayrımı, öncelik bitlerinin gerçek implementasyonu (Cortex-A9'da 5 bit), BPR'ın sessiz preemption etkisi gibi tuzaklar sahada bilgi/kaynak dengesinin en kötü olduğu yerler.

Derinlik Öğesi (Bölüm 7)

İki bileşen:

  1. Somut hata modu kataloğu — 8 vaka. Hepsi gerçek-dünya patterns:

    • Spurious 1023 (IAR'ı iki kez okumak)
    • Level-sensitive kaynakta EOI sonrası sonsuz tekrar
    • Forgotten EOI → active-priority drop olmaz
    • BPR=7 ile sessiz preemption kaybı
    • CPU1'de PMR=0 → ikinci çekirdek hiç kesme almaz
    • SGI'ın GICD_ITARGETSR'da banked olduğunu unutmak
    • Edge/level config hatası → "sadece ilk paket alınıyor" davranışı
    • ITARGETSR yanlış CPU'yu işaretliyor → çoklu-CPU jitter
  2. DAL A bağlamında kesme latency bütçe analizi. Cortex-A9 @ 666 MHz'de cycle-level breakdown (HW assert → distributor sample → arbitration → CPU iletim → komut bitir → exception entry → context save → IAR oku → handler prologue), her satır için belirsizlik kaynağı. WCET analizinde kötü tasarım örnekleri (ISR'da lock, malloc, cascaded GIC).

Kullanılan Kaynaklar (özet)

  • ARM Generic Interrupt Controller Architecture Specification (IHI 0048B, GICv2)
  • ARM CoreLink GIC v3/v4 Overview
  • Xilinx UG585 (Zynq-7000 TRM) — GIC bölümü
  • OSDev Wiki — Generic Interrupt Controller
  • RealDigital — Configuring the ZYNQ GIC for PL Interrupts
  • Cristian Sisterna — Interrupts in Zynq Systems (ICTP slides)
  • ARM Trusted Firmware GICv2 driver source
  • Arm Community forum: spurious interrupt 1023 davranışı

Tam liste yazının sonundaki Kaynaklar bölümünde, doğrudan erişilebilir linklerle.

Öz-Eleştiri Özeti (Faz 6)

İki teknik düzeltme:

  • ICFGR encoding: Önce 0b01/0b11 yazılmıştı; GICv2'de bit 0 RES0 olduğu için doğrusu 0b00 (level) / 0b10 (edge). Düzeltildi (hem tabloda hem örnek C kodda).
  • Latency hesabı: İlk taslakta "200 cycle ≈ 1.5 µs" denmişti; 666 MHz'de 200 cycle = 300 ns. Sıcak/soğuk cache senaryolarına göre 300 ns – 1.5 µs aralığı olarak yeniden düzenlendi.

Gizlilik kontrolü: yazı yalnızca kamuya açık ARM/Xilinx dokümantasyonu ve standart bare-metal tekniklerden üretildi; hiçbir proje, müşteri veya iç süreç bilgisi yok.

Backlog Uyarısı (insan dikkatine)

14 açık PR birikti; bu PR'la 15 olacak. Defterde özellikle:

Ajan, gelecek çalıştırmada yeni post yazmadan önce "merge önerisi raporu" üretme moduna geçebilir.

Yayın Kapısı

  • Son yayından (2026-05-26 Sistem Mühendisliği) 4 gün geçti → min_yayin_araligi_gun = 2 sağlandı
  • Konu hiçbir açık PR ile ve yayındaki postlarla çakışmıyor
  • Bölüm 7 derinlik öğesi mevcut (hata modu kataloğu + latency analizi)
  • Bölüm 13 öz-denetim listesi tek tek geçildi
  • Front matter mevcut yazıların şemasıyla aynı (background /img/posts/1.webp — daha önce kullanılmamış)

🤖 Generated with Claude Code

GICv2/PL390 mimarisi: distributor + CPU interface, SGI/PPI/SPI sınıfları,
öncelik mekaniği (implement edilen bit sayısı, PMR, BPR), state machine
(Inactive/Pending/Active), multicore yönlendirme (ITARGETSR), edge vs level
konfigürasyonu, EOI sıralaması. Zynq-7000 (PL390 + dual Cortex-A9) odaklı.

Derinlik öğesi: 8 vakalık somut hata modu kataloğu (spurious 1023, level
re-trigger, forgotten EOI, BPR=7 sessiz preemption kaybı, CPU1 PMR=0, SGI
banked yanılgısı, edge/level config hatası, ITARGETSR yanlış CPU) + DAL A
bağlamında kesme latency bütçe analizi (cycle-level breakdown).

Renode + linker script + volatile/Atomic dizisinin doğal devamı; bare-metal
Cortex-A bring-up zincirinde sonraki tıkanma noktası.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 30, 2026 05:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants