0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BCM-ARMをブートしてみた

0
Last updated at Posted at 2024-02-12

NetBSD-10のBCM5301Xのコードをいじってブートしてみました。

NetBSD/armのARMv7はBCM5301X以外はFDTになっていてGENERICなカーネルです。

おそらくNetBSD-7くらいからメンテナンスされてなくて、修正したところは以下のようなところです。

  • なぜかメモリの物理アドレスが違っていて、変更しました

  • 0x80000000からメモリがあるような設定になっていましたが、実機で見ると0x00000000と0x88000000からあります。BCMな各種DTSを見ても0x80000000なアドレスはありません。 0x80000000からメモリがありそれが0x00000000から見えるようになっているようです。これはブートローダーなどの便宜のためではないかと思われます。

  • devmapの書き方が変わったので変更しました

  • 明らかなバグも修正しました

今確認できてる問題点は以下になります。

  • ネットワークやUSB2が機能しない

  • USB3のコードがない

  • 0x00000000からの128Mしかメモリが使えていない。0x88000000からのメモリが使えない

  • DMAのtagのコードに物理アドレスが指定されている

  • DIAGNOSTICを設定してカーネルを作るとccaでpanicする

  • Timerがおかしい

  • マルチプロセッサーのコードがない(おそらくDual-Coreと思われます)

まだいろいろいじらないとだめそうです。参考にできそうな情報は、

  • Linux方面のGPLなコード

  • DTSファイル

  • FreeBSDのBHDNのコード

猛牛さんのGPLアーカイブはぐちゃぐちゃなので、githubで探すのが良いです。

GPLアーカイブでBCM固有の処理は以下にあります。

arch/arm/mach-brcm-hnd/*
arch/arm/plat-brcm/*
arch/arm/plat-brcm/include/*

src/shared/*

BroadcomはMIPS SOCの初期のころはSiBaという仕様だったのを、後期にBCMAという仕様に変更しました。BCMAは移行のために複雑になっています。BCM5301XはこのBCMAを踏襲しています。

なんとQiitaにBCM5301Xを使っている人がいました。NetBSDではsysctlのmachdep.fpu_idでfpuの有り無しが分かります。

NetBSDのBroadcomサポートはBCM2系より先にBCM53系が実装されたようです。

FreeBSDにはBCM53のコードはありません。

このポートはU-Bootを使ったターゲットだったようで、BCM5301Xとしては特殊なものだったのかもしれません。

Broadcomはデーターシートを一切公開していないので、おそらくGPLなコードを解析して作られたのではないかと思われます。

ソースのCopyrightが2012で入っていて、チップのリリースも同時期なので、なにかの製品化に向けて開発して、データーシートも手元にあったのかもしれません。

githubにこんな定義がありました。BCM4707とBCM53010は同じものみたいです。BroadcomはMIPS SOCの頃からなぜか二つの呼び名がありました。

#define	BCMA_CHIP_ID_BCM4707		53010
#define	BCMA_CHIP_ID_BCM47094		53030
#define	BCMA_CHIP_ID_BCM53018		53018

メモリマップ

 * 0x0000_0000..0x07ff_ffff      128MB  DDR2/3 DRAM Memory Region (dual map)
 * 0x0800_0000..0x0fff_ffff      128MB  PCIe 0 Address Match Region
 * 0x1800_0000..0x180f_ffff        1MB  Core Register Region
 * 0x1810_0000..0x181f_ffff        1MB  IDM Register Region
 * 0x1900_0000..0x190f_ffff        1MB  ARMcore (CORTEX-A9) Register Region
 * 0x1c00_0000..0x1dff_ffff        1MB  NAND Flash Region
 * 0x1e00_0000..0x1dff_ffff        1MB  Serial Flash Region
 * 0x4000_0000..0x47ff_ffff      128MB  PCIe 1 Address Match Region
 * 0x4800_0000..0x4fff_ffff      128MB  PCIe 2 Address Match Region
 * 0x8000_0000..0xbfff_ffff     1024MB  DDR2/3 DRAM Memory Region
 * 0xfffd_0000..0xfffe_ffff      128KB  Internal Boot ROM Region
 * 0xffff_0000..0xffff_043f     1088B   Internal SKU ROM Region
 * 0xffff_1000..0xffff_1fff        4KB  Enumeration ROM Register Region
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?