public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCHv5 2/2] mucmc52, uc101: delete ata@3a00 node, if no CF card is detected
@ 2009-09-15  5:02 Heiko Schocher
  2009-09-22 20:37 ` Wolfgang Denk
  0 siblings, 1 reply; 3+ messages in thread
From: Heiko Schocher @ 2009-09-15  5:02 UTC (permalink / raw)
  To: u-boot

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>
---

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

changes since v3
- correct spelling in README and commit message, as
  Detlev Zundel suggested

changes since v4
- added comments from Stefan Roese
  Coding Style corrections
  do not longer include the global variable, instead
  call ide_device_present()
- added comment from Jerry Van Baren
  correct README entry

 README                                     |    9 +++++++++
 common/cmd_ide.c                           |    8 ++++++++
 cpu/mpc5xxx/cpu.c                          |   20 ++++++++++++++++++++
 include/configs/manroland/mpc5200-common.h |    1 +
 include/ide.h                              |    3 +++
 5 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/README b/README
index ff4ed8b..8d0cbc9 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 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:

 		bootvx constructs a valid bootline using the following
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index 4d7a0ac..ec9a1df 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -1624,6 +1624,14 @@ static void ide_led (uchar led, uchar status)

 #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
diff --git a/cpu/mpc5xxx/cpu.c b/cpu/mpc5xxx/cpu.c
index f6258c7..7307c05 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 at f0000000/ata at 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			"soc5200 at f0000000"
 #define OF_TBCLK		(bd->bi_busfreq / 4)
 #define OF_STDOUT_PATH		"/soc5200 at f0000000/serial at 2000"
+#define CONFIG_OF_IDE_FIXUP

 #endif /* __MANROLAND_MPC52XX__COMMON_H */
diff --git a/include/ide.h b/include/ide.h
index ddb9579..6a1b7ae 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -54,4 +54,7 @@ void ide_init(void);
 ulong ide_read(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 */
-- 
1.6.0.6

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCHv5 2/2] mucmc52, uc101: delete ata@3a00 node, if no CF card is detected
  2009-09-15  5:02 [U-Boot] [PATCHv5 2/2] mucmc52, uc101: delete ata@3a00 node, if no CF card is detected Heiko Schocher
@ 2009-09-22 20:37 ` Wolfgang Denk
  2009-09-23  5:51   ` Heiko Schocher
  0 siblings, 1 reply; 3+ messages in thread
From: Wolfgang Denk @ 2009-09-22 20:37 UTC (permalink / raw)
  To: u-boot

Dear Heiko Schocher,

In message <4AAF1FE4.9050704@denx.de> you wrote:
> 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>

Seems this patch depends on other patches, that add support for the
manroland boards, which have not been accepted yet. I think I'm
waiting for a resubmit from you?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
ATTENTION: Despite Any Other Listing of Product Contents Found  Here-
on, the Consumer is Advised That, in Actuality, This Product Consists
Of 99.9999999999% Empty Space.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCHv5 2/2] mucmc52, uc101: delete ata@3a00 node, if no CF card is detected
  2009-09-22 20:37 ` Wolfgang Denk
@ 2009-09-23  5:51   ` Heiko Schocher
  0 siblings, 0 replies; 3+ messages in thread
From: Heiko Schocher @ 2009-09-23  5:51 UTC (permalink / raw)
  To: u-boot

Hello Wolfgang,

Wolfgang Denk wrote:
> Dear Heiko Schocher,
> 
> In message <4AAF1FE4.9050704@denx.de> you wrote:
>> 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>
> 
> Seems this patch depends on other patches, that add support for the
> manroland boards, which have not been accepted yet. I think I'm
> waiting for a resubmit from you?

OK, I am reposting it.

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-09-23  5:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-15  5:02 [U-Boot] [PATCHv5 2/2] mucmc52, uc101: delete ata@3a00 node, if no CF card is detected Heiko Schocher
2009-09-22 20:37 ` Wolfgang Denk
2009-09-23  5:51   ` Heiko Schocher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox