
Hi,
Stefan Roese wrote:
On Wednesday 15 July 2009 09:28:58 Eibach, Dirk wrote:
Please check the latest version of this code in canyonlands.c. It's now using the 4xx common __ft_board_setup() function. Please move to this version as well.
This code in canyonlands.c does not work for me:
void ft_board_setup(void *blob, bd_t *bd) { u32 val[4]; int rc;
__ft_board_setup(blob, bd);
/* Fixup NOR mapping */ val[0] = CONFIG_SYS_NOR_CS; /* chip select number */ val[1] = 0; /* always 0 */ val[2] = CONFIG_SYS_FLASH_BASE_PHYS_L; /* we fixed up this address */ val[3] = gd->bd->bi_flashsize; rc = fdt_find_and_setprop(blob, "/plb/opb/ebc", "ranges", val, sizeof(val), 1);
__ft_board_setup() sets the property "ranges", with an entry for every member of EBC_NUM_BANKS. Then the so called "fixup" happens and the property "ranges" is set again, this time with only one entry (for the nor flash). All other entries are lost.
I see. I didn't spot this problem in the original patch. Thanks for catching.
It shouldn't be too hard to fix this problem by reading the complete ranges array back and patching only the first entry and re-writing ranges again.
I think my first patch that open-coded part of ft_board_setup() related to EBC ranges was correct and tested on real hardware. I admit that I didn't test the second version of the patch, as I didn't have the hardware at hand.
I'll submit a fix soon, but I still don't have hardware for testing, so I'd appreciate your help with that.
Felix.