[U-Boot] IDE_BUS unconditionally expects 2 devices per bus
Rogan Dawes
rogan at dawes.za.net
Sat Aug 14 12:41:07 CEST 2010
Hi folks
Since include/ide.h defines IDE_BUS(dev) as (dev >> 1), it ignores the
values of CONFIG_SYS_IDE_MAXBUS and CONFIG_SYS_MAXDEVICE, and
unconditionally expects an IDE bus to have two devices.
This expectation falls down with the Orion5x SATA support, which uses
that SATA controller in IDE compatability mode, but can obviously only
have one device per bus.
I'm not 100% sure whether the problem is with the IDE code, or with the
Orion5x code which identifies a drive at both "positions" on the IDE
bus. i.e. if I define CONFIG_SYS_IDE_MAXDEVICE as
(CONFIG_SYS_IDE_MAXBUS*2), I get the first drive shown twice, and the
second drive shown twice.
The following RFC patch works for me, but may well break other boards
that do not define CONFIG_SYS_IDE_MAXDEVICE and CONFIG_SYS_IDE_MAXBUS
properly:
diff --git a/include/ide.h b/include/ide.h
index 6a1b7ae..3f81fb1 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -24,7 +24,7 @@
#ifndef _IDE_H
#define _IDE_H
-#define IDE_BUS(dev) (dev >> 1)
+#define IDE_BUS(dev) (dev >> (CONFIG_SYS_IDE_MAXDEVICE /
CONFIG_SYS_IDE_MAXBUS - 1))
#define ATA_CURR_BASE(dev)
(CONFIG_SYS_ATA_BASE_ADDR+ide_bus_offset[IDE_BUS(dev)])
Ok, I'm sure it is line wrapped, tab-damaged, etc, and the line itself
is too long, but conceptually, would that be acceptable?
Thanks
Rogan
More information about the U-Boot
mailing list