diff options
author | Andy Fleming <afleming@freescale.com> | 2006-09-13 10:33:56 -0500 |
---|---|---|
committer | Jon Loeliger <jdl@freescale.com> | 2006-09-19 09:41:08 -0500 |
commit | 084d648b109c8984f83674043c1a7fa3885ef801 (patch) | |
tree | 4c5e1fd168d8109fde65c6a46d84da41c23f744e /board/cds | |
parent | 2f15776ccc6dc32377d8ba9652b8f58059c27c6d (diff) |
Added code to support 2.6.18 PCI changes in u-boot
* Added code to swizzle the IRQ map for the PCI
Diffstat (limited to 'board/cds')
-rw-r--r-- | board/cds/common/ft_board.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/board/cds/common/ft_board.c b/board/cds/common/ft_board.c index 77d1d851d90..a897d045a0a 100644 --- a/board/cds/common/ft_board.c +++ b/board/cds/common/ft_board.c @@ -24,9 +24,35 @@ #if defined(CONFIG_OF_FLAT_TREE) #include <ft_build.h> +#include "cadmus.h" + extern void ft_cpu_setup(void *blob, bd_t *bd); -#endif +static void cds_pci_fixup(void *blob) +{ + int len; + u32 *map; + int slot; + int i; + + map = ft_get_prop(blob, "/" OF_SOC "/pci@8000/interrupt-map", &len); + + len /= sizeof(u32); + + slot = get_pci_slot(); + + for (i=0;i<len;i+=7) { + /* We rotate the interrupt pins so that the mapping + * changes depending on the slot the carrier card is in. + */ + int j; + + map[3] = ((map[3] + slot - 2) % 4) + 1; + + map+=7; + } +} +#endif #if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) void @@ -45,5 +71,7 @@ ft_board_setup(void *blob, bd_t *bd) *p++ = cpu_to_be32(bd->bi_memstart); *p = cpu_to_be32(bd->bi_memsize); } + + cds_pci_fixup(blob); } #endif |