I'm saying that changing sizeof(cell) will change the device tree:
drivers/escc.c:escc_add_channel
[...] cell props[2]; [...] props[0] = IO_ESCC_OFFSET + offset * 0x20; props[1] = 0x00000020; set_property(dnode, "reg", (char *)&props, 2 * sizeof(cell));
So while the guest expects reg to be 2 32-bit numbers, it suddenly gets 4 32-bit numbers that don't make sense. IIUC to the guest, any DT property is nothing more than a stream of bytes.
That code seems to fail for little-endian systems as well. I recommend you use C accessor functions similar to the Forth words to build (and read) properties, they are very convenient and easy to use (encode-int and friends).
Segher