A flash driver will give you access to devices, which are useful during
development and for field upgrades and are ideal for storing fixed size
persistent configuration data like your board's Ethernet MAC address.
This is true for drivers supporting a number of vendors' devices.

The flash driver does auto-erase when the length of data written per
write() is exactly the corresponding erase block size. So usually you
just need to do:

The MTD subsystem offers a more general solution which allows you to
treat the flash as a regular block device on which you can mount a
filesystem. It's ideal for large amounts of variable sized data or
applications requiring a traditional writable filesystem, provided by
the JournalingFlashFilesystem.

However, some work is required to get the MTD to run on PowerPC, as
it does not yet support big endian.

Using the on-chip watchdog to provide the basic "write kicked" /dev/watchdog interface
described in Documentation/watchdog.txt is problematic, because the SYPCR register controlling it
can only be written once after reset to both set the timeout and enable the
watchdog. Once enabled, the boot loader and kernel must keep it from expiring
up until the point where the user application opens /dev/watchdog. Littering the generic
kernel decompress and startup codes with watchdog kicks to do this isn't
acceptable to other Linux users. Hence, hardware watchdog support hasn't
been implemented yet.

Use something that "frames" the data and the SI/TDM interface works really
sweet. Take a look at the CS4218 audio codec driver for the Embedded Planet
boards. It's floating around in the 2.2.13 kernels on the MontaVista? site.

This driver is an interface for the SPI controller in MPC8xx.
The driver is written to work with the microcode patches to correct the
parameter RAM problems. The driver supports basic init, open, close, read,
and write functions.