diff options
author | Heiko Schocher <hs@denx.de> | 2009-09-23 07:56:08 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2009-09-25 01:22:13 +0200 |
commit | 3887c3fbdbbe6bbb4df60ed415c8e1ab9fe56b5e (patch) | |
tree | 45036f888029797df3058eb7c99c1fa2f6b22632 /cpu/mpc5xxx/cpu.c | |
parent | 7f625fc6d3ba8f890e843ac01717804c2462ed53 (diff) | |
download | u-boot-imx-3887c3fbdbbe6bbb4df60ed415c8e1ab9fe56b5e.zip u-boot-imx-3887c3fbdbbe6bbb4df60ed415c8e1ab9fe56b5e.tar.gz u-boot-imx-3887c3fbdbbe6bbb4df60ed415c8e1ab9fe56b5e.tar.bz2 |
mucmc52, uc101: delete ata@3a00 node, if no CF card is detected
U-Boot can detect if an 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 does not probe the device and
crash. This is needed for buggy hardware (uc101) where
no pull down resistor is connected to the signal IDE5V_DD7.
Signed-off-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'cpu/mpc5xxx/cpu.c')
-rw-r--r-- | cpu/mpc5xxx/cpu.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/cpu/mpc5xxx/cpu.c b/cpu/mpc5xxx/cpu.c index f6258c7..efa64c7 100644 --- a/cpu/mpc5xxx/cpu.c +++ b/cpu/mpc5xxx/cpu.c @@ -40,6 +40,10 @@ #include <fdt_support.h> #endif +#if defined(CONFIG_OF_IDE_FIXUP) +#include <ide.h> +#endif + DECLARE_GLOBAL_DATA_PTR; int checkcpu (void) @@ -137,6 +141,22 @@ 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_device_present(0)) { + /* NO CF card detected -> delete ata node in DTS */ + int nodeoffset = 0; + char nodename[] = "/soc5200@f0000000/ata@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 |