U-Boot can detect, if a ide device is present or not. If not and this new config option is activated, u-boot removes the ata node from the DTS before booting Linux, so the Linux IDE driver didn;t crashs, when probing the device. This is needed for buggy hardware (uc101) where no pull down resistor is connected to the signal IDE5V_DD7.
Signed-off-by: Heiko Schocher <h...@denx.de> --- changes since v1: - added comment from Wolfgang Denk, to move this to a more common place, so others can also use it, and made it therefore per CONFIG_OF_IDE_FIXUP selectable. changes since v2: - add CONFIG_OF_IDE_FIXUP to mpc5200-common.h README | 9 +++++++++ cpu/mpc5xxx/cpu.c | 18 ++++++++++++++++++ include/configs/manroland/mpc5200-common.h | 1 + 3 files changed, 28 insertions(+), 0 deletions(-) diff --git a/README b/README index ff4ed8b..b9364bf 100644 --- a/README +++ b/README @@ -386,6 +386,15 @@ The following options need to be configured: This define fills in the correct boot CPU in the boot param header, the default value is zero if undefined. + CONFIG_OF_IDE_FIXUP + + U-Boot can detect, if a ide device is present or not. + If not and this config option is activated, u-boot + removes the ata node from the DTS before booting Linux, + so the Linux IDE driver didn;t crashs, when probing the + device. This is needed for buggy hardware (uc101) where + no pull down resistor is connected to the signal IDE5V_DD7. + - vxWorks boot parameters: bootvx constructs a valid bootline using the following diff --git a/cpu/mpc5xxx/cpu.c b/cpu/mpc5xxx/cpu.c index f6258c7..a2fc323 100644 --- a/cpu/mpc5xxx/cpu.c +++ b/cpu/mpc5xxx/cpu.c @@ -125,6 +125,9 @@ void ft_cpu_setup(void *blob, bd_t *bd) uchar enetaddr[6]; char * eth_path = "/" OF_SOC "/ether...@3000"; #endif +#if defined(CONFIG_OF_IDE_FIXUP) + extern block_dev_desc_t ide_dev_desc[CONFIG_SYS_IDE_MAXDEVICE]; +#endif do_fixup_by_path_u32(blob, cpu_path, "timebase-frequency", OF_TBCLK, 1); do_fixup_by_path_u32(blob, cpu_path, "bus-frequency", bd->bi_busfreq, 1); @@ -137,6 +140,21 @@ void ft_cpu_setup(void *blob, bd_t *bd) do_fixup_by_path(blob, eth_path, "mac-address", enetaddr, 6, 0); do_fixup_by_path(blob, eth_path, "local-mac-address", enetaddr, 6, 0); #endif +#if defined(CONFIG_OF_IDE_FIXUP) + if (ide_dev_desc[0].type == DEV_TYPE_UNKNOWN) { + /* NO CF card detected -> delete ata node in DTS */ + int nodeoffset = 0; + char nodename[] = "/soc5...@f0000000/a...@3a00"; + + nodeoffset = fdt_path_offset (blob, nodename); + if (nodeoffset >= 0) { + fdt_del_node(blob, nodeoffset); + } else + printf("%s: cannot find %s node err:%s\n", + __func__, nodename, fdt_strerror(nodeoffset)); + } + +#endif } #endif diff --git a/include/configs/manroland/mpc5200-common.h b/include/configs/manroland/mpc5200-common.h index 2f092b1..b29ef9b 100644 --- a/include/configs/manroland/mpc5200-common.h +++ b/include/configs/manroland/mpc5200-common.h @@ -225,5 +225,6 @@ #define OF_SOC "soc5...@f0000000" #define OF_TBCLK (bd->bi_busfreq / 4) #define OF_STDOUT_PATH "/soc5...@f0000000/ser...@2000" +#define CONFIG_OF_IDE_FIXUP #endif /* __MANROLAND_MPC52XX__COMMON_H */ -- 1.6.0.6 -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot