linux/drivers
John Bowler 9cff3372bf [PATCH] drivers/mtd/redboot.c: recognise a foreign byte sex partition table
The RedBoot boot loader writes flash partition tables containing native
byte sex 32 bit values.  When booting an opposite byte sex kernel (e.g.  an
LE kernel from BE RedBoot) the current MTD driver fails to handle the
partition table and therefore is unable to generate the correct partition
map for the flash.

So far as I am aware this problem is ARM specific, because only ARM
supports software change of the CPU (memory system) byte sex, however the
partition table parsing is in generic MTD code.  The patch below has been
tested on NSLU2 (an IXP4XX based system) with a patch,
10-ixp4xx-copy-from.patch (submitted to linux-arm-kernel - it's ARM
specific) required to make the maps/ixp4xx.c driver work with an LE kernel.

Builds of the patched system are in the 'unstable' release of OpenSlug and
UcSlugC available from www.nslu2-linux.org.  These builds are BE, the
archives at www.nslu2-linux.org and www.handhelds.org (see
monotone.vanille.de) can be built LE (currently DISTRO targets
nslu-ltu.conf for LE thumb uclibc (32 bit kernel) and nslu2-lau.conf,
nslu2-lag.conf for LE arm uclibc/glibc) and this patch has been tested
extensively will both BE and LE systems on the NSLU2 (including swapping
between BE and LE by reflashing from both RedBoot and Linux).

The patch recognises that the FIS directory (the partition table) is
byte-reversed by examining the partition table size, which is known to be
one erase block (this is an assumption made elsewhere in redboot.c).  If
the size matches the erase block after byte swapping the value then
byte-reversal is assumed, if not no further action is taken.  The patched
code is fail safe; should redboot.c be changed to support a partition table
with a modified size field the test will fail and the partition table will
be assumed to have the host byte sex.

If byte-reversal is detected the patch byte swaps the remainder of the 32
bit fields in the copy of the table; this copy is then used to set up the
MTD partition map.

Signed-off-by: John Bowler <jbowler@acm.org>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Martin Michlmayr <tbm@cyrius.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-02-28 20:53:43 -08:00
..
acorn
acpi [PATCH] x86_64: Disable ACPI blacklist by year for now on x86-64 2006-02-26 09:53:30 -08:00
amba
atm
base [PATCH] fix __user annotations in drivers/base/memory.c 2006-02-07 20:58:04 -05:00
block [PATCH] pktcdvd: Only return -EROFS when appropriate 2006-02-20 20:00:11 -08:00
bluetooth [Bluetooth] Fix firmware loading problem of BT3C driver 2006-02-13 11:40:07 +01:00
cdrom [PATCH] remove bogus asm/bug.h includes. 2006-02-07 20:56:35 -05:00
char [PATCH] Fix Specialix SX corruption 2006-02-27 08:18:04 -08:00
connector
cpufreq [CPUFREQ] Whitespace/CodingStyle cleanups 2006-02-02 17:03:42 -05:00
crypto [PATCH] padlock: Fix typo that broke 256-bit keys 2006-02-22 07:47:07 -08:00
dio
edac [PATCH] drivers/edac/i82875p_edac.c __user annotations 2006-02-07 20:58:09 -05:00
eisa
fc4 [PATCH] drivers/fc4/fc.c: memset correct length 2006-02-20 20:00:11 -08:00
firmware
hwmon [PATCH] it87: Fix oops on removal 2006-02-13 22:30:10 -08:00
i2c [PATCH] i2c: Drop outdated probe/remove code in i2c-isa 2006-02-13 22:30:10 -08:00
ide Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6 2006-02-17 08:16:35 -08:00
ieee1394 sbp2: update 36byte inquiry workaround (fix compatibility regression) 2006-02-23 00:29:31 -05:00
infiniband Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2006-02-14 13:49:37 -08:00
input Input: kill remnants of 98kbd{,-io} and 98spkr 2006-02-15 00:49:48 -05:00
isdn [PATCH] Fix NULL pointer dereference in isdn_tty_at_cout 2006-02-14 16:09:34 -08:00
macintosh [PATCH] allow windfarm_pm112 module to load 2006-02-17 13:59:27 -08:00
mca
md [PATCH] dm: free minor after unlink gendisk 2006-02-24 14:31:39 -08:00
media [PATCH] drivers/media/video __user annotations and fixes 2006-02-08 01:03:39 -05:00
message Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6 2006-02-16 12:47:44 -08:00
mfd
misc
mmc [MMC] mmci: allow small data transfers 2006-02-16 16:48:31 +00:00
mtd [PATCH] drivers/mtd/redboot.c: recognise a foreign byte sex partition table 2006-02-28 20:53:43 -08:00
net [TG3]: Fix Sun tg3 variant detection. 2006-02-27 12:51:27 -08:00
nubus
oprofile
parisc [PARISC] Convert sba_iommu.c to use seq_file 2006-02-08 22:56:22 -05:00
parport Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6 2006-02-03 18:17:47 -08:00
pci [PATCH] PowerPC/PCI Hotplug build break 2006-02-01 16:35:29 -08:00
pcmcia
pnp Merge git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa 2006-02-01 22:08:23 -08:00
rapidio
s390 [PATCH] s390: revert dasd eer module 2006-02-20 20:00:12 -08:00
sbus
scsi [libata] Disable FUA 2006-02-27 22:31:19 -05:00
serial [SUNSU]: Fix locking error in sunsu_stop_rx(). 2006-02-28 11:55:36 -08:00
sh
sn [PATCH] sn3 iomem annotations and fixes 2006-02-08 01:03:52 -05:00
spi [PATCH] spi: Fix modular master driver remove and device suspend/remove 2006-02-20 20:00:09 -08:00
tc [PATCH] remove bogus asm/bug.h includes. 2006-02-07 20:56:35 -05:00
telephony [PATCH] ixj: fix writing silence check 2006-02-03 08:32:08 -08:00
usb [PATCH] USB: ftdi_sio: new microHAM device IDs 2006-02-28 12:42:07 -08:00
video [PATCH] Fix pseudo_palette setup in asiliantfb_setcolreg() 2006-02-24 14:31:39 -08:00
w1
zorro
Kconfig
Makefile [PATCH] drivers/sn/ must be entered for CONFIG_SGI_IOC3 2006-01-26 13:22:03 -08:00