LS2K1000启动全链路架构解析

这份 tgt_machdep.c 基本就是 LS2K1000 PMON/Bootloader 的"总控制中枢",它已经把你前面关心的 DDR / PCIe / 启动流全部串起来了。

我帮你把它"升维成系统架构 + 执行流图",你可以直接拿去做分析或画 CSDN 系列文章。


🧠 LS2K1000 Boot 全链路执行架构(对应这份代码)

🔥 0. 启动总流程(从复位到 main)

text 复制代码
Reset Vector
   ↓
PMON entry
   ↓
init_loongarch()
   ↓
  ├─ unlock_scache()
  ├─ SMP slave_core 释放
  ├─ mem_win_cfg()          ← DDR地址映射
  ├─ get_memorysize_soc()   ← DDR size识别
  ├─ mul_pin_def_cfg()      ← pinmux
  ├─ tgt_cpufreq()          ← 时钟探测
  ├─ rtc / i2c init
  ├─ NAND / SPI NOR init
  ├─ PCIe device init
  ├─ framebuffer / VGA init
   ↓
main()

🧩 1. DDR 子系统(核心链路)

📌 关键函数:get_memorysize_soc() + mem_win_cfg()


🧠 DDR 初始化逻辑(抽象状态机)

text 复制代码
[DDR UNKNOWN]
     ↓
read tgt_memsz
     ↓
decode mem_size
     ↓
configure XBAR windows
     ↓
map CPU ↔ DDR ↔ PCIe/GPU
     ↓
[DDR READY]

🔥 DDR size 解析逻辑(非常关键)

c 复制代码
mem_size = raw_memsz & 0xff;
mem_size = mem_size << 29;
mem_size = mem_size - 0x1000000;
mem_size = mem_size >> 20;

👉 本质:

text 复制代码
BIOS/bootrom → 传入 encoded DDR size
→ decode 成 MB级容量

🧠 DDR地址映射(XBAR)

📌 mem_win_cfg()

text 复制代码
CPU_WIN0 → 0x1c000000 (Boot region)
CPU_WIN1 → 0x10000000
CPU_WIN2 → low memory alias
CPU_WIN3 → 0x80000000
CPU_WIN4/5 → high memory (4GB / 8GB / 16GB)

🔥 DDR关键本质(非常重要)

👉 LS2K1000 DDR不是"单纯内存控制器"

而是:

text 复制代码
CPU
 ↓
XBAR (交叉互联)
 ↓
DDR Controller
 ↓
Physical DRAM

所以 DDR training 成功 ≠ 可用

还必须:

✔ mem_win_cfg 正确

✔ XBAR window 正确

✔ high memory mapping 正确


⚡ 2. PCIe 全链路初始化

📌 入口:

c 复制代码
init_pcidev()

🧠 PCIe 启动状态机

text 复制代码
[PCIe RESET]
     ↓
_pci_devinit()
     ↓
扫描 device (bus 0 dev 0~x)
     ↓
建立 BAR 映射
     ↓
ls_pcie_config_set()
     ↓
interrupt fixup
payload fixup
MSI window
     ↓
GPU / SATA / GMAC 可访问

🔥 PCIe修复逻辑(非常关键)

1️⃣ interrupt fixup

c 复制代码
_pci_conf_write16(dev, 0x3c, irq | 0x100);

👉 本质:

text 复制代码
PCI INTx → CPU interrupt routing

2️⃣ payload fixup

text 复制代码
Max Payload Size
Max Read Request Size

👉 影响:

  • DMA吞吐
  • GPU性能
  • NVMe稳定性

3️⃣ MSI window

c 复制代码
0x1fe10000 → MSI vector base

👉 MSI中断映射区


🧠 3. Boot关键"隐式依赖链"

很多人看不懂这份代码,是因为漏了这条链:


🔥 系统依赖关系图

text 复制代码
DDR OK
  ↓
XBAR window OK
  ↓
PCIe config space OK
  ↓
DMA可访问 DDR
  ↓
GPU / SATA / GMAC 才能工作

⚠️ 关键点(非常重要)

👉 PCIe BAR 不可访问 = 通常不是 PCIe bug

而是:

text 复制代码
❌ DDR mapping错
❌ XBAR window没开
❌ cache/uncached映射错误

🧨 4. Cache & SMP 启动链

📌 unlock_scache()

text 复制代码
unlock L2 cache window
flush hit-invalidate

👉 本质:

text 复制代码
cache → DDR一致性初始化

📌 SMP启动

c 复制代码
st.d slave_main → 0x1fe01100

👉 含义:

text 复制代码
core0 → core1 boot entry address

🧭 5. GPIO / PINMUX 系统

📌 mul_pin_def_cfg()

text 复制代码
HDA / CAN / I2C / SDIO / NAND pin mux
USB prefetch disable

👉 本质:

text 复制代码
SoC外设复用矩阵初始化

💾 6. 存储系统初始化

text 复制代码
NAND / SPI NAND / NOR

路径:

text 复制代码
init_loongarch
  ↓
ls2k_nand_init()
ls2k_spi_nand_probe()
ls2k_m25p_probe()

🖥️ 7. Display / GPU / FB链路

📌 init_pcidev() 后半段:

text 复制代码
vga_bios_init()
dc_init()
fb_init()
HDMI bridge (LT9211 / LT8618 / SII9022A)

👉 本质:

text 复制代码
PCIe GPU / DC → framebuffer → HDMI输出

🔥 8. 一张"系统级启动总图"

text 复制代码
                ┌──────────────┐
                │   Reset CPU  │
                └──────┬───────┘
                       ↓
              ┌─────────────────┐
              │  PMON entry     │
              └──────┬──────────┘
                     ↓
        ┌────────────────────────────┐
        │ init_loongarch()           │
        └──────────┬─────────────────┘
                   ↓
     ┌──────────── DDR TRAIN / MAP ────────────┐
     │ mem_win_cfg + get_memorysize_soc        │
     └────────────┬────────────────────────────┘
                  ↓
     ┌──────── PCIe + DMA + XBAR ─────────┐
     │ init_pcidev + ls_pcie_config_set   │
     └────────────┬───────────────────────┘
                  ↓
     ┌──────── Storage + Display ────────┐
     │ NAND / SPI / VGA / FB / HDMI      │
     └────────────┬──────────────────────┘
                  ↓
               main()

相关推荐
七夜zippoe1 小时前
工业物联网数据架构设计
物联网·架构·数据·工业物联网·dolphindb
黄俊懿2 小时前
MySQL主从复制:从“异步“到“GTID“,数据同步的进化之路
数据库·sql·mysql·oracle·架构·dba·db
Sam_Deep_Thinking2 小时前
中小团队需要一个资源微服务
java·微服务·架构
星辰_mya2 小时前
异地多活:单元化架构设计
微服务·架构
刘~浪地球2 小时前
DeepSeek V4 技术解读:MoE架构优化深度解析
人工智能·架构·deepseek v4
码点滴2 小时前
私有 Gateway 接入企业 IM:从消息路由到多租户隔离——Hermes Agent 工程实战
人工智能·架构·gateway·prompt·智能体·hermes
xiaozhazha_3 小时前
企业级AI视频会议私有化部署实践:应对安全合规与成本挑战的技术架构解析
人工智能·安全·架构
Ulyanov3 小时前
基于 Python 的三维动态导弹攻防演示系统设计与实现:从架构到实战的深度剖析
开发语言·python·qt·架构·雷达电子对抗
何陋轩3 小时前
Claude 3.5 vs GPT-4o vs Gemini:程序员应该选哪个?代码能力全面测评
人工智能·面试·架构