# Nand testing

Warning: Most of these tests are destructive in nature.

## Accessing the desired device

In order to test a particular device, that device must not be in use by the rest
of the system. There are two ways to make that happen:

* Prevent other drivers from binding to the device. This may involve building
  the system with modified binding rules for the driver that normally binds
  to the desired device, or passing kernel command line arguments to disable
  that driver.

* Unbind devices that are bound to the desired device.

For example, in order to use a test tool against the core nand driver, nandpart
devices may be removed like so:

```shell
$ unbind /dev/sys/platform/raw_nand/aml-raw_nand/nand/fvm
```

Warning: Before removing a particular device, remove its descendants. By
extension, file systems must be unmounted before a block device is removed.
Note that this requirement is likely to render a running system unusable, as
the backing for the OS may be going away. Netboot may be the only viable option.

Note that all other devices created by nandpart must also be removed. Use
`driver dump` to inspect the device tree.

## Protocol testing

`nand-test` is an integration test that performs basic tests of nand protocol
drivers.

For example, this command will test an existing ram-nand device making sure the
test does not modify anything outside blocks \[100, 109\]:

```shell
$ /boot/test/sys/nand-test --device /dev/sys/platform/00:00:2e/nand-ctl/ram-nand-0 --first-block 100 --num-blocks 10
```

## Correctness testing

`nand-util` is a troubleshooting tool that can perform a simple read-reliability
test.

```shell
$ nand-util --device /dev/sys/platform/00:00:2e/nand-ctl/ram-nand-0 --check
```

## Inspection / manipulation

```shell
$ nand-util --device /dev/sys/platform/raw_nand/aml-raw_nand/nand --info
$ nand-util --device /dev/sys/platform/raw_nand/aml-raw_nand/nand/fvm --read --block 1 --page 2
```

## Grab an image

`nand-util` can also be used to grab an image of the nand contents:

Note: If a file system is already mounted, unbind will fail, and forcing it to work is
likely to render the system unusable. Remember to netboot or use Zedboot as
needed.

```shell
$ unbind /dev/sys/platform/raw_nand/aml-raw_nand/nand/fvm/ftl/block
$ unbind /dev/sys/platform/raw_nand/aml-raw_nand/nand/fvm/ftl
$ nand-util --device /dev/sys/platform/raw_nand/aml-raw_nand/nand/fvm --save --file /tmp/image
```

Transfer the image file to the host:

```shell
$ out/default/host-tools/netcp :/tmp/image /tmp/saved_image_file
```

## Replay

A saved nand image can be loaded on top of a ram-nand device using nand-loader.

First, transfer the image to a device running Zircon. For example, on the host:

```shell
echo /nand.dmp=/tmp/saved_image_file > /tmp/manifest.txt
out/default/host-tools/minfs /tmp/image.dsk create --manifest /tmp/manifest.txt
fx set bringup.x64
fx build
fx qemu -k -- -hda /tmp/image.dsk
```

Then, inside zircon:

```shell
$ mkdir data/a
$ mount /dev/class/block/000 data/a
$ nand-loader data/a/nand.dmp
```
