Linkstation LS220D

From Buffalo NAS Wiki

Specs

Linkstation LS220D

CPU 800 MHz dual issue ARM (Marvell 88F6707)
Memory 256 MB DDR3
Bays 2
Network 1x 10/100/1000 Mbps (Marvell 88E1518) *labeled as 88EC048
Sata 1x SATA II (SoC)
NAND Flash 512MB*
SPI Flash 1 MB (MX25L8006E)
USB 2.0 1 (Rear)
USB 3.0 None
Fan Yes
Power 12V - 4A

Variations

LS220DE Diskless
LS220D0202 2TB
LS220D0402 6TB
LS220D0802 8TB

Stock Firmware Installation

Restoring_Stock_Firmware_without_TFTP

Install from built in NAND

The diskless (LS220DE) has a copy of the firmware stored in its NAND-flash* The firmware can be loaded following the Quickstart Guide for this model.

Custom Firmware/Operating System installation

Installing Debian on Armada-370 Devices

Device Notes

Many of the Linkstation models only include the NAND Flash for the diskless models, I have not yet been able to confirm whether this is the case for the LS220

Serial Console

To access the 3.3v UART serial console resistor R150 and R115 must be removed. The location of the connections can be seen in the picture below.

220 uart.PNG

Credit: @squarecode

Disassembly

Remove the 3 screws on the bottom of the device and the two screws on the inside right side, then carefully pry the pieces apart. This is not easy.

Pictures

DMESG output

Booting Linux on physical CPU 0
Initializing cgroup subsys cpu
Linux version 3.3.4 (root@nasbuild) (gcc version 4.6.2 (Linaro GCC branch-4.6.2. Marvell GCC 201201-883.01c949de) ) #1 Wed Dec 20 15:00:32 JST 2017
CPU: Marvell PJ4Bv7 Processor [561f5811] revision 1 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
Machine: Marvell Armada-370
Using UBoot passing parameters structure
>>>>>>>Tag MAC 07:f4:7f:43:50:00
>>>>>>>Tag MAC 26:2d:51:ec:af:84
Memory policy: ECC disabled, Data cache writealloc
On node 0 totalpages: 65536
free_area_init_node: node 0, pgdat c05789e4, node_mem_map c05b2000
  Normal zone: 512 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 65024 pages, LIFO batch:15
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0 
Built 1 zonelists in Zone order, mobility grouping off.  Total pages: 65024
Kernel command line: console=ttyS0,115200 root=/dev/sda2 rw initrd=0x2600040 panic=5 BOOTVER=0.36 UBOOT_DATE=2016/12/13 mtdparts=armada-nand:0x2000000(
boot),0x1e000000(rootfs)
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 256MB = 256MB total
Memory: 236148k/236148k available, 25996k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    vmalloc : 0xd0800000 - 0xff000000   ( 744 MB)
    lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    modules : 0xbf000000 - 0xbfe00000   (  14 MB)
      .text : 0xc0008000 - 0xc0524f3c   (5236 kB)
      .init : 0xc0525000 - 0xc054a000   ( 148 kB)
      .data : 0xc054a000 - 0xc05797c0   ( 190 kB)
       .bss : 0xc05797e4 - 0xc05b1910   ( 225 kB)
NR_IRQS:256
axp_time_init
Calibrating delay loop... 795.44 BogoMIPS (lpj=3977216)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
hw perfevents: no hardware support available
Setting up static identity map for 0x3cf6a0 - 0x3cf6e4
devtmpfs: initialized
xor: measuring software checksum speed
   arm4regs  :   766.800 MB/sec
   8regs     :   544.000 MB/sec
   32regs    :   765.200 MB/sec
xor: using function: arm4regs (766.800 MB/sec)
NET: Registered protocol family 16
L0 cache Enabled
Speculative Prefetch Disabled
aurora_l2_init 
Aurora: Enabling L2
AuroraL2: System L2 cache support initialised
Support IO coherency.
Enable DLB and DRAM write coalescing

CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 256MB 
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
DEVICE_CS0 ....base f2000000, size  32MB 
DEVICE_CS1 ....no such
DEVICE_CS2 ....no such
DEVICE_CS3 ....no such
PEX0_MEM ....base e0000000, size  32MB 
PEX0_IO ....base f1100000, size   1MB 
PEX1_MEM ....base e2000000, size  32MB 
PEX1_IO ....base f1200000, size   1MB 
INTER_REGS ....base d0000000, size   1MB 
DMA_UART ....no such
SPI_CS0 ....base f0000000, size  16MB 
SPI_CS1 ....no such
SPI_CS2 ....no such
SPI_CS3 ....no such
SPI_CS4 ....no such
SPI_CS5 ....no such
SPI_CS6 ....no such
SPI_CS7 ....no such
BOOT_ROM_CS ....no such
DEV_BOOTCS ....base f5000000, size  16MB 
PMU_SCRATCHPAD ....no such
CRYPT0_ENG ....base c8010000, size  64KB 

  Marvell Armada370 Board-- JSMT370  Soc: MV6710 A1 LE
  LSP version: Armada370_LSP_3.1.0_p15_NQ


 Detected Tclk 200000000, SysClk 533000000, FabricClk 533000000
gpiochip_add: registered GPIOs 0 to 64 on device: mv_gpio
hw-breakpoint: debug architecture 0x4 unsupported.
Marvell USB EHCI Host controller #0: c804c400
PCI host bridge to bus 0000:00
pci_bus 0000:00: root bus resource [io  0x0000-0xfffff]
pci_bus 0000:00: root bus resource [mem 0xe0000000-0xe1ffffff]
PCI: bus0: Fast back to back transfers enabled
PCI host bridge to bus 0000:01
pci_bus 0000:01: root bus resource [io  0x100000-0x1fffff]
pci_bus 0000:01: root bus resource [mem 0xe2000000-0xe3ffffff]
PCI: bus1: Fast back to back transfers enabled
bio: create slab <bio-0> at 0
raid6: int32x1    106 MB/s
raid6: int32x2    157 MB/s
raid6: int32x4    143 MB/s
raid6: int32x8    167 MB/s
raid6: using algorithm int32x8 (167 MB/s)
vgaarb: loaded
SCSI subsystem initialized
libata version 3.00 loaded.
Switching to clocksource armada370_clocksource
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
PCI: CLS 0 bytes, default 32
Trying to unpack rootfs image as initramfs...
Freeing initrd memory: 11720K
cesadev_init(c052cc88)
mvCesaInit: channels=1, session=640, queue=64
Armada XP hwmon thermal sensor initialized.
Initializing Armada-XP CPU power management  (DISABLED)
MICON ctrl (C) BUFFALO INC. V.1.00 installed.
Buffalo Gpio Control Driver (C) BUFFALO INC. Ver.1.00 installed.
Buffalo CPU Inerupts Driver (C) BUFFALO INC. Ver.0.01 alpha1 installed.
Kernel event proc (C) BUFFALO INC. V.1.00 installed.
initial_polarity_val = 0x00018000
initial_polarity_val_high = 0x00000000
Buffalo GPIO SATA Hotplug Event Driver (C) BUFFALO INC. Ver.1.00 installed.
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
JFFS2 version 2.2. (NAND) \xffffffc2\xffffffa9 2001-2006 Red Hat, Inc.
fuse init (API version 7.18)
SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled
SGI XFS Quota Management subsystem
msgmni has been set to 484
async_tx: api initialized (async)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
mv_xor_shared mv_xor_shared.0: Marvell shared XOR driver
mv_xor_shared mv_xor_shared.1: Marvell shared XOR driver
mv_xor mv_xor.0: Marvell XOR: ( xor )
mv_xor mv_xor.1: Marvell XOR: ( xor )
mv_xor mv_xor.2: Marvell XOR: ( cpy )
mv_xor mv_xor.3: Marvell XOR: ( fill cpy )
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xd0012000 (irq = 41) is a 16550A
console [ttyS0] enabled
brd: module loaded
loop: module loaded
sata_mv sata_mv.0: version 1.28
** BUFFALO Disable Command Queuing Function [sata_mv sata_mv.0] **
sata_mv sata_mv.0: slots 32 ports 2
scsi0 : sata_mv
scsi1 : sata_mv
ata1: SATA max UDMA/133 irq 55
ata2: SATA max UDMA/133 irq 55

SPI Serial flash detected @ 0xf0000000, 1024KB (16sec x 64KB)
armada-nand armada-nand.0: Initialize HAL based NFC in 8bit mode with DMA Disabled using BCH 4bit ECC
NAND device: Manufacturer ID: 0x98, Chip ID: 0xdc (Toshiba NAND 512MiB 3,3V 8-bit)
Bad block table found at page 262080, version 0x01
Bad block table found at page 262016, version 0x01
2 cmdlinepart partitions found on MTD device armada-nand
Creating 2 MTD partitions on "armada-nand":
0x000000000000-0x000002000000 : "boot"
0x000002000000-0x000020000000 : "rootfs"
mv_eth_probe: port_mask=0x3, cpu_mask=0x1 
0 - Base 0x00000000 , Size = 0x10000000.
4 - Base 0xf2000000 , Size = 0x02000000.
8 - Base 0xe0000000 , Size = 0x02000000.
9 - Base 0xf1100000 , Size = 0x00100000.
10 - Base 0xe2000000 , Size = 0x02000000.
11 - Base 0xf1200000 , Size = 0x00100000.
12 - Base 0xd0000000 , Size = 0x00100000.
14 - Base 0xf0000000 , Size = 0x01000000.
23 - Base 0xf5000000 , Size = 0x01000000.
25 - Base 0xc8010000 , Size = 0x00010000.
  o 2 Giga ports supported
  o NETA acceleration mode 1
  o RX Queue support: 1 Queues * 128 Descriptors
  o TX Queue support: 1 Queues * 512 Descriptors
  o GSO supported
  o GRO supported
  o Receive checksum offload supported
  o Transmit checksum offload supported
  o Driver ERROR statistics enabled
  o Switch support enabled

  o Loading network interface(s)

  o Port 0 is connected to Linux netdevice
        giga p=0: mtu=1500, mac=c8029eec
    o eth0, ifindex = 2, GbE port = 0

  o Port 1 is connected to Linux netdevice
        giga p=1: mtu=1500, mac=c8029eec
    o eth1, ifindex = 3, GbE port = 1

rtc-mv rtc-mv: rtc core: registered rtc-mv as rtc0
md: linear personality registered for level -1
md: raid0 personality registered for level 0
md: raid1 personality registered for level 1
md: raid10 personality registered for level 10
md: raid6 personality registered for level 6
md: raid5 personality registered for level 5
md: raid4 personality registered for level 4
cpuidle: using governor ladder
cpuidle: using governor menu
mmc0: mvsdio driver initialized, lacking card detect (fall back to polling)
TCP cubic registered
NET: Registered protocol family 17
VFP support v0.3: implementor 56 architecture 2 part 20 variant 9 rev 6
rtc-mv rtc-mv: setting system clock to 2007-11-01 07:36:51 UTC (1193902611)
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl F300)
ata1.00: ATA-8: KINGSTON SNV425S264GB, C091126a, max UDMA/100
ata1.00: 125045424 sectors, multi 16: LBA48 
ata1.00: configured for UDMA/100
scsi 0:0:0:0: Direct-Access     ATA      KINGSTON SNV425S C091 PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] 125045424 512-byte logical blocks: (64.0 GB/59.6 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sda: sda1 sda2 sda3 sda4 sda5 sda6
sd 0:0:0:0: [sda] Attached SCSI disk
ata2: SATA link down (SStatus 0 SControl F300)
Freeing init memory: 148K
kjournald starting.  Commit interval 5 seconds
EXT3-fs (sda1): mounted filesystem with writeback data mode
md: md2 stopped.
md: bind<sda5>
bio: create slab <bio-1> at 1
md/raid1:md2: active with 1 out of 2 mirrors
md2: detected capacity change from 0 to 1023410176
md: md1 stopped.
md: bind<sda2>
md/raid1:md1: active with 1 out of 2 mirrors
md1: detected capacity change from 0 to 5114888192
md: md0 stopped.
md: bind<sda1>
md/raid1:md0: active with 1 out of 2 mirrors
md0: detected capacity change from 0 to 1023868928
 md0: unknown partition table
kjournald starting.  Commit interval 5 seconds
EXT3-fs (md0): using internal journal
EXT3-fs (md0): mounted filesystem with writeback data mode
 md1: unknown partition table
kjournald starting.  Commit interval 5 seconds
EXT3-fs (md1): using internal journal
EXT3-fs (md1): mounted filesystem with writeback data mode
kjournald starting.  Commit interval 5 seconds
EXT3-fs (md1): using internal journal
EXT3-fs (md1): mounted filesystem with writeback data mode
 md2: unknown partition table
Adding 999420k swap on /dev/md2.  Priority:-1 extents:1 across:999420k 
kjournald starting.  Commit interval 5 seconds
EXT3-fs (md0): using internal journal
EXT3-fs (md0): mounted filesystem with writeback data mode
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci_marvell ehci_marvell.0: Marvell Orion EHCI
ehci_marvell ehci_marvell.0: new USB bus registered, assigned bus number 1
ehci_marvell ehci_marvell.0: irq 45, io base 0xfbb50100
ehci_marvell ehci_marvell.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver usblp
pool #1: pkt_size=1536, buf_size=1632 - 256 of 256 buffers added
eth1: link up
eth1: started
md: md101 stopped.
md: bind<sda6>
md/raid1:md101: active with 1 out of 2 mirrors
created bitmap (1 pages) for device md101
md101: bitmap initialized from disk: read 1/1 pages, set 6 of 668 bits
md101: detected capacity change from 0 to 44798181376
 md101: unknown partition table
XFS (md101): Mounting Filesystem
XFS (md101): Ending clean mount
Extra Features Reg[0] = 0x60000100
Extra Features Reg[1] = 0x101a7
Control Reg = 0x10c5387d
Main ID Reg = 0x561f5811
Cache Type Reg = 0x8003c003
L2 Control Reg = 0x1
L2 Auxilary Control Reg = 0x12086302
udevd[3997]: starting version 174
Extra Features Reg[0] = 0x60000100
Extra Features Reg[1] = 0x101a7
Control Reg = 0x10c5387d
Main ID Reg = 0x561f5811
Cache Type Reg = 0x8003c003
L2 Control Reg = 0x1
L2 Auxilary Control Reg = 0x12086302
eth1: stopped
eth1: link up
eth1: started

U-Boot env

CASset=min
MALLOC_len=5
autoload=n
baudrate=115200
bootargs_end=:10.4.50.254:255.255.255.0:KW40:eth0:none
bootargs_root=root=/dev/sda2 rw initrd=0x2600040 panic=5
bootcmd=for i in $bootorder; do run ${i}bootcmd; done
bootcommon=setenv bootargs $console $bootargs_root $bootargs_func $buffalo_ver $uboot_date $mtdparts $bootsystem; ;sf protect off; bootm 0x1200000 0x2600000
bootcommon-u=setenv bootargs $console $bootargs_func $buffalo_ver $uboot_date $mtdparts $bootsystem; ;sf protect off; bootm 0x1200000
bootdelay=0
bootorder=ide fail usb1 usb2 tftp
buffalo_ver=BOOTVER=0.20
cacheShare=no
console=console=ttyS0,115200
disL2Cache=yes
disaMvPnp=no
eeeEnable=no
enaAutoRecovery=yes
enaClockGating=no
enaFPU=no
enaWrAllo=no
eth1mtu=1500
ethaddr=00:50:43:7f:f4:07
ethmtu=1500
ethprime=egiga1
failbootcmd=bootfail
idebootcmd=ext2load ide 0:1 0x1200000 /$kernel; ext2load ide 0:1 0x2600000 /$initrd; setenv bootsystem hddboot=yes; run bootcommon
image_name=uImage
initrd=initrd.buffalo
initrd_name=uInitrd
ipaddr=192.168.11.150
kernel=uImage.buffalo
loadaddr=0x02000000
loads_echo=0
mtdids=nand0=armada-nand
mtdparts=mtdparts=armada-nand:0x2000000(boot),0x1e000000(rootfs)
mvNetConfig=mv_net_config=1,(00:50:43:11:11:11,0:1:2:3:4),mtu=1500
nandEcc=1bit
nandbootcmd=ubi part boot; ubifsmount boot; ubifsload 0x1200000 /$kernel; ubifsload 0x2600000 /$initrd; setenv bootsystem nandboot=yes; run bootcommon
netbsd_en=no
netmask=255.255.255.0
netretry=no
pexMode=rc
pxe_files_load=:default.arm-armada370-db:default.arm-armadaxp:default.arm
pxefile_addr_r=3100000
rcvrip=169.254.100.100
rootpath=/srv/oneiric
sata_delay_reset=0
sata_dma_mode=yes
serverip=192.168.11.1
standalone=fsload $load_addr $image_name;setenv bootargs $console $mtdparts root=/dev/mtdblock0 rw ip=$ipaddr:$serverip$bootargs_end; bootm $load_addr;
stderr=serial
stdin=serial
stdout=serial
tftpbootcmd=tftp 0x1200000 $kernel; tftp 0x2600000 $initrd; setenv bootsystem tftpboot=yes; run bootcommon
uboot_date=UBOOT_DATE="2014/01/28"
usb0Mode=host
usb1Mode=host
usb1bootcmd=setenv usbActive 0;usb start;fatload usb 0 0x1200000 /boot/uImage370;sf protect off;run bootcommon-u
usb2Mode=device
usb2bootcmd=fatload usb 0 0x1200000 /boot/uImage.buffalo;fatload usb 0 0x2600000 /boot/initrd.buffalo;setenv bootsystem usbboot=yes;run bootcommon
usbActive=0
vxworks_en=no
eth1addr=84:AF:EC:XX:XX:XX
deviceid=DZObJJMXXXXXXXXXXXXXXXXX
SerialNo=XXXXXXXXXXXXXXX
EnableNandBoot=1

Buffalo Resources