xscaleの道

Planexの昔のルーター(BRC-14VG)でxscaleのixp422を使ったものがあります。

xscaleとはIntelが作っていたarmチップです。

今の人にしてみるとなんのこっちゃですが、そういう時期もありました。

xscaleシリーズはi80xxx -> pax2x0 -> ipx4xxのように製品化されていてipxは最後の世代になります。

ipx4xxシリーズはixp425が最初の製品でその後ixp422やixp420が作られたようです。ipx45x,ipx46xという製品もあったようです。

ターゲットはixp422でixpシリーズでも後期の製品で使用されてる部品から2005年くらいの製造のようです。

xscaleはarmでは珍しくビッグエンディアンで使われることが多かったようです。

```
/*
 * 
 * IXP425 Memory map:
 *
 * Phy          Phy Size        Map Size        Virt            Description
 * =========================================================================
 *
 * 0x00000000   0x10000000                                      SDRAM 1 
 *
 * 0x10000000   0x10000000                                      SDRAM 2
 *
 * 0x20000000   0x10000000                                      SDRAM 3
 *
 * 0x30000000   0x10000000                                      SDRAM 4 
 *
 * The above four are aliases to the same memory location  (0x00000000)
 *
 * 0x48000000    0x4000000                                      PCI Memory
 *
 * 0x50000000   0x10000000                      Not Mapped      EXP BUS
 *
 * 0x6000000    0x00004000          0x4000      0xFFFEB000      QMgr
 *
 * 0xC0000000        0x100          0x1000      0xFFFDD000      PCI CFG 
 *
 * 0xC4000000        0x100          0x1000      0xFFFDE000      EXP CFG 
 *
 * 0xC8000000       0xC000          0xC000      0xFFFDF000      PERIPHERAL
 *
 * 0xCC000000        0x100          0x1000      Not Mapped      SDRAM CFG 
 */
```

flashは0x50000000にあって、起動時にはここが0x00000000として見えて、起動後に以下のようにして切り替えているようです。

```:hal_platform_setup.h
                
        // value to load into pc to jump to real runtime address
        ldr     r0, =1f

        // Setup EXP_CNFG0 value to switch EXP bus out of low memory
        ldr     r2, =IXP425_EXP_CFG_BASE
        ldr     r1, [r2, #IXP425_EXP_CNFG0]
        bic     r1, r1, #EXP_CNFG0_MEM_MAP

        b       icache_boundary
        .p2align 5
icache_boundary:
        // Here is where we switch from boot address (0x000000000) to the
        // actual flash runtime address. We align to cache boundary so we
        // execute from cache during the switchover. Cachelines are 8 words.
        str     r1, [r2, #IXP425_EXP_CNFG0]    // make the EXP bus switch
        nop
        nop
        nop
        nop
        mov     pc, r0
        nop
                            // display FFFF and loop forever.
    0:  b       0b
    1:
```

5年ほど前にハードオフで324円で手に入れたターゲットがあるのですが、POWER SWが壊れたので直結にしました。ネットで同じように壊れている方をみかけたので、ひどく粗悪な部品だったようです。

LinksysのWRV54GやGemtekのGTW5715やNETGEARのWG302もIXP425を使っているようです。LinksysのNSLU2というNASもIXP420だったようです。

シリアルは115200で端子はV,T,R,Gです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/7d447793-2632-d43d-4224-17f6c9271a97.png)

|パーツ|機能|
|:--|:--|
|TE28F128|Flash 16MByte|
|W982516CH-75x2|SDRAM 32MBytex2|
|VT6202(裏)|PIC USB 2.0|
|AC101LKQT|Ethernet PHY|
|KS8995?|Ethernet Switch|
|93C66|EEPROM(Switch config?)|
|93C46(裏)|?|
|?|IR-DAモジュール|
|HSDL-7001|赤外線デコーダー|
|CY2305|クロックバッファ|

いっぱい発信器がついています。

|周波数|パーツ|用途|
|:--|:--|:--|
|24.000||USB(PCI)|
|3.686|OSC3|IR-DA|
|33.000|OSC1|PCI|
|33.333|OSC2|SOC|
|25.000|OSC4|Ether Switch|

ファームはブートローダーも含めてOpenRGというものが使われています。

```
Uncompressing Linux......................................... done, booting the kernel.
Press ESC to enter BOOT MENU mode.
RGLoader 2.6.14
Booting an active image in 3 seconds
Boot aborted
OpenRG boot>
```

NetBSDにはevbarm/conf/IXDP425というipx422の前のモデルのixp425のターゲットがあるので動かせないか調べてみたいと思っています。

bootはOpenRDのブートが使えればそのままにしたいと思っています。

u-bootにもixpのサポートがありますが、flashが古そうなので、焼けないとかあるかもなので、u-boot焼き直しは考えないほうが良いきがします。

と思ったのですが、u-bootにはixpのビルド設定がありますが、製品では使われていなく、製品で使われていたのはOpenRGのbootかRedbootのようです。

```
OpenRG boot> help
ps:  Print main-task tasks
rg_conf_print:  rg_conf_print <root> - Print OpenRG configuration
     starting from <root> - use / for the whole configuration
rg_conf_set:    rg_conf_set <path> <value> - Set rg_conf path to a value
rg_conf_set_obscure:    rg_conf_set_obscure <path> <value> - Set rg_conf path to an obscured value
rg_conf_del:    rg_conf_del <path> - Del subtree path from rg_conf
reconf: reconf <flash_delay 1(=NOW) to 4> - Reconfigure the 
     system according to the current rg_conf
entity_close:   entity_close <entity ptr> - Close an entity
host:   host <name> - Resolve host by name
flash_commit:   Save configuration to flash
restore_default:        restore_defaults [-d] - Restore default configuration
     (use -d to avoid rebooting after)
reboot: Reboot the system
log_lev_on:     log_lev_on <severity> - redirect rg_error output from severity
     equal or higher to <sevrerity> to the current cli
log_lev_off:    Stop rg_error redirection to the current cli
cat: Print file contents on console
shell:  Spawn busybox shell in foreground
flash_layout:   Prints the flash layout and content
flash_erase:    flash_erase [-d] <section> - erases a given section in the flash
flash_dump:     flash_dump [-s <section> | -r <address>] [-l <length>] [-1|2|4] - dumps the flash content
bset:   Configure bootloader
ifconfig:       Configure network interface
ping:   Test network connectivity
boot:   boot -g {-s <section> | -r <address>} - Boot the system (-g boot with kgdb)
load:   load -u <url> {-s <section> | -r <address>} - Load and burn image
help:   Print this menu
vlan_add:       Add VLAN interface
etask_list_dump:        Dump back trace of all etasks
Returned 0
```


```
OpenRG boot> flash_layout
Flash layout:

Section 00 Type BOOT       Range 0x00000000-0x00100000 MaxSize 0x00100000
     No more information.

Section 01 Type IMAGE      Range 0x00100000-0x00F80000 MaxSize 0x00E7FF6C
     Size 0x00746880 Name 'Image downloaded from: tftp://192.168.1.10/openrg.img'
     Checksum 0x3C146897 Counter 0x00000019 Start Offset 0x00000000

Section 02 Type FLASH_SECT_BOOTCONF Range 0x00F80000-0x00FA0000 MaxSize 0x0001FF6C
     Size 0x00000318 Name 'rg_conf'
     Checksum 0x0001833C Counter 0x0000C69B Start Offset 0x00000000

Section 03 Type FLASH_SECT_CONF Range 0x00FA0000-0x00FC0000 MaxSize 0x0001FF6C
     Size 0x0000234B Name 'rg_conf'
     Checksum 0x0011F971 Counter 0x0000C697 Start Offset 0x00000000

Section 04 Type FLASH_SECT_CONF Range 0x00FC0000-0x00FE0000 MaxSize 0x0001FF6C
     Size 0x000021C0 Name 'rg_conf'
     Checksum 0x0010CB45 Counter 0x0000C470 Start Offset 0x00000000

Section 05 Type FACTORY    Range 0x00FE0000-0x01000000 MaxSize 0x0001FF6C
     Size 0x000000D9 Name 'Image downloaded from: tftp://192.168.3.110/rg_factory'
     Checksum 0x00004A87 Counter 0x00000022 Start Offset 0x00000000

Total 6 sections found.
Returned 0
```

```
OpenRG boot> flash_dump -s 1 -l 0x200 
00100000: fe ed ba be 00 74 68 80  3c 14 68 97 00 00 00 19  |.....th.<.h.....|
00100010: 00 00 00 00 49 6d 61 67  65 20 64 6f 77 6e 6c 6f  |....Image downlo|
00100020: 61 64 65 64 20 66 72 6f  6d 3a 20 74 66 74 70 3a  |aded from: tftp:|
00100030: 2f 2f 31 39 32 2e 31 36  38 2e 31 2e 31 30 2f 6f  |//192.168.1.10/o|
00100040: 70 65 6e 72 67 2e 69 6d  67 00 00 00 00 00 00 00  |penrg.img.......|
00100050: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00100060: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00100070: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00100080: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00100090: 00 00 00 00 e2 8f a0 08  e5 9f b0 04 e0 4a b0 0b  |.............J..|
001000a0: ea 1d 1a 0b 00 00 00 10  e1 a0 00 00 e1 a0 00 00  |................|
001000b0: e1 a0 00 00 e1 a0 00 00  e1 a0 00 00 e1 a0 00 00  |................|
001000c0: e1 a0 00 00 e1 a0 00 00  ea 00 00 02 01 6f 28 18  |.............o(.|
001000d0: 00 a0 00 00 01 14 68 18  e1 a0 70 01 e3 a0 80 00  |......h...p.....|
001000e0: e1 0f 20 00 e3 12 00 03  1a 00 00 01 e3 a0 00 17  |.. .............|
001000f0: ef 12 34 56 e1 0f 20 00  e3 82 20 c0 e1 21 f0 02  |..4V.. ... ..!..|
00100100: e3 cf 20 1f e2 82 38 01  e4 92 00 20 e1 32 00 03  |.. ...8.... .2..|
00100110: 1a ff ff fc ee 07 0f 9a  ee 07 0f 17 ee 11 0f 10  |................|
00100120: e3 c0 00 05 e3 c0 0a 01  ee 01 0f 10 ee 11 0f 10  |................|
00100130: e3 80 00 80 ee 01 0f 10  00 00 00 00 00 00 00 00  |................|
00100140: 00 00 00 00 00 00 00 00  e2 8f 00 cc e8 90 30 7e  |..............0~|
00100150: e0 50 00 01 e3 30 00 00  0a 00 00 0a e0 85 50 00  |.P...0........P.|
00100160: e0 86 60 00 e0 8c c0 00  e0 82 20 00 e0 83 30 00  |..`....... ...0.|
00100170: e0 8d d0 00 e5 96 10 00  e0 81 10 00 e4 86 10 04  |................|
00100180: e1 56 00 0c 3a ff ff fa  e3 a0 00 00 e4 82 00 04  |.V..:...........|
00100190: e4 82 00 04 e4 82 00 04  e4 82 00 04 e1 52 00 03  |.............R..|
001001a0: 3a ff ff f9 eb 00 00 27  e1 a0 10 0d e2 8d 28 01  |:......'......(.|
001001b0: e1 54 00 02 2a 00 00 14  e2 84 05 01 e1 50 00 05  |.T..*........P..|
001001c0: 9a 00 00 11 e1 a0 50 02  e1 a0 00 05 e1 a0 30 07  |......P.......0.|
001001d0: eb 00 09 9b e2 80 00 7f  e3 c0 00 7f e0 85 10 00  |................|
001001e0: e2 8f 2d 05 e5 9f 30 50  e0 82 30 03 e8 b2 3f 00  |..-...0P..0...?.|
001001f0: e8 a1 3f 00 e8 b2 3f 00  e8 a1 3f 00 e1 52 00 03  |..?...?...?..R..|
Returned 0
```

いろいろなサイトが無くなっていますが、以下は現在でも見れます。

https://frost-11.livejournal.com/963.html

https://phj.hu/wrv54g/

https://wiki.netbsd.org/tutorials/how_to_install_netbsd_on_the_linksys_nslu2___40__slug__41___without_a_serial_port__44___using_nfs_and_telnet/