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>
This commit is contained in:
parent
7f625fc6d3
commit
3887c3fbdb
9
README
9
README
@ -388,6 +388,15 @@ The following options need to be configured:
|
|||||||
This define fills in the correct boot CPU in the boot
|
This define fills in the correct boot CPU in the boot
|
||||||
param header, the default value is zero if undefined.
|
param header, the default value is zero if undefined.
|
||||||
|
|
||||||
|
CONFIG_OF_IDE_FIXUP
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
- vxWorks boot parameters:
|
- vxWorks boot parameters:
|
||||||
|
|
||||||
bootvx constructs a valid bootline using the following
|
bootvx constructs a valid bootline using the following
|
||||||
|
@ -1624,6 +1624,14 @@ static void ide_led (uchar led, uchar status)
|
|||||||
|
|
||||||
#endif /* CONFIG_IDE_LED */
|
#endif /* CONFIG_IDE_LED */
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_IDE_FIXUP)
|
||||||
|
int ide_device_present(int dev)
|
||||||
|
{
|
||||||
|
if (dev >= CONFIG_SYS_IDE_MAXBUS)
|
||||||
|
return 0;
|
||||||
|
return (ide_dev_desc[dev].type == DEV_TYPE_UNKNOWN ? 0 : 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#ifdef CONFIG_ATAPI
|
#ifdef CONFIG_ATAPI
|
||||||
|
@ -40,6 +40,10 @@
|
|||||||
#include <fdt_support.h>
|
#include <fdt_support.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_IDE_FIXUP)
|
||||||
|
#include <ide.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
int checkcpu (void)
|
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, "mac-address", enetaddr, 6, 0);
|
||||||
do_fixup_by_path(blob, eth_path, "local-mac-address", enetaddr, 6, 0);
|
do_fixup_by_path(blob, eth_path, "local-mac-address", enetaddr, 6, 0);
|
||||||
#endif
|
#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
|
#endif
|
||||||
|
|
||||||
|
@ -225,5 +225,6 @@
|
|||||||
#define OF_SOC "soc5200@f0000000"
|
#define OF_SOC "soc5200@f0000000"
|
||||||
#define OF_TBCLK (bd->bi_busfreq / 4)
|
#define OF_TBCLK (bd->bi_busfreq / 4)
|
||||||
#define OF_STDOUT_PATH "/soc5200@f0000000/serial@2000"
|
#define OF_STDOUT_PATH "/soc5200@f0000000/serial@2000"
|
||||||
|
#define CONFIG_OF_IDE_FIXUP
|
||||||
|
|
||||||
#endif /* __MANROLAND_MPC52XX__COMMON_H */
|
#endif /* __MANROLAND_MPC52XX__COMMON_H */
|
||||||
|
@ -54,4 +54,7 @@ void ide_init(void);
|
|||||||
ulong ide_read(int device, lbaint_t blknr, ulong blkcnt, void *buffer);
|
ulong ide_read(int device, lbaint_t blknr, ulong blkcnt, void *buffer);
|
||||||
ulong ide_write(int device, lbaint_t blknr, ulong blkcnt, void *buffer);
|
ulong ide_write(int device, lbaint_t blknr, ulong blkcnt, void *buffer);
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_IDE_FIXUP)
|
||||||
|
int ide_device_present(int dev);
|
||||||
|
#endif
|
||||||
#endif /* _IDE_H */
|
#endif /* _IDE_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user