This is the mail archive of the
ecos-patches@sources.redhat.com
mailing list for the eCos project.
HAL - improve IDE handling
- From: Gary Thomas <gary at mlbassoc dot com>
- To: eCos patches <ecos-patches at sources dot redhat dot com>
- Date: 20 Sep 2003 13:23:29 -0600
- Subject: HAL - improve IDE handling
- Organization: MLB Associates
This improves boot time when RedBoot has IDE support
included but the actual device may be missing.
--
Gary Thomas <gary@mlbassoc.com>
MLB Associates
Index: redboot/current/ChangeLog
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/redboot/current/ChangeLog,v
retrieving revision 1.131
diff -u -5 -p -r1.131 ChangeLog
--- redboot/current/ChangeLog 20 Sep 2003 14:35:58 -0000 1.131
+++ redboot/current/ChangeLog 20 Sep 2003 19:20:05 -0000
@@ -1,7 +1,11 @@
2003-09-20 Gary Thomas <gary@mlbassoc.com>
+ * src/fs/ide.c: Improve IDE handling by having init function return
+ actual number of controllers detected. This avoids really long times
+ for startup if the controller is missing.
+
* src/net/bootp.c: Rework to use full DHCP protocol. Previously,
once an offer came in, RedBoot was happy, without actually making
the address reservation and waiting for the final acknowledgement.
Also, added CDL to enable/disable DHCP. BUG #1000053
Index: redboot/current/src/fs/ide.c
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/redboot/current/src/fs/ide.c,v
retrieving revision 1.7
diff -u -5 -p -r1.7 ide.c
--- redboot/current/src/fs/ide.c 14 Feb 2003 16:31:40 -0000 1.7
+++ redboot/current/src/fs/ide.c 20 Sep 2003 17:42:31 -0000
@@ -406,22 +406,22 @@ static void
ide_init(void)
{
cyg_uint32 buf[SECTOR_SIZE/sizeof(cyg_uint32)], u32;
cyg_uint16 u16;
cyg_uint8 u8;
- int i, j;
+ int i, j, num_controllers;
disk_t disk;
struct ide_priv *priv;
#define DEV_INIT_VAL ((j << 4) | 0xA0)
- HAL_IDE_INIT();
+ num_controllers = HAL_IDE_INIT();
CYGACC_CALL_IF_DELAY_US(5);
priv = ide_privs;
- for (i = 0; i < HAL_IDE_NUM_CONTROLLERS; i++) {
+ for (i = 0; i < num_controllers; i++) {
// soft reset the devices on this controller
if (!ide_reset(i))
continue;
Index: hal/arm/xscale/picasso/current/ChangeLog
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/arm/xscale/picasso/current/ChangeLog,v
retrieving revision 1.1
diff -u -5 -p -r1.1 ChangeLog
--- hal/arm/xscale/picasso/current/ChangeLog 22 Aug 2003 15:19:53 -0000 1.1
+++ hal/arm/xscale/picasso/current/ChangeLog 20 Sep 2003 19:20:41 -0000
@@ -1,5 +1,9 @@
+2003-09-20 Gary Thomas <gary@mlbassoc.com>
+
+ * src/picasso_ide.c: IDE init needs to return number of controllers found.
+
2003-08-22 Gary Thomas <gary@mind.be>
* src/xilinx-load.c:
* src/vga_support.c:
* src/picasso_pci_bitstream.h:
Index: hal/arm/xscale/picasso/current/src/picasso_ide.c
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/arm/xscale/picasso/current/src/picasso_ide.c,v
retrieving revision 1.1
diff -u -5 -p -r1.1 picasso_ide.c
--- hal/arm/xscale/picasso/current/src/picasso_ide.c 22 Aug 2003 15:19:53 -0000 1.1
+++ hal/arm/xscale/picasso/current/src/picasso_ide.c 20 Sep 2003 17:41:16 -0000
@@ -106,11 +106,11 @@ void
cyg_hal_plf_ide_write_control(int ctlr, cyg_uint32 reg, cyg_uint8 val)
{
pci_io_write_8(ide_ctrl[ctlr].ctl_bar + reg, val);
}
-void
+int
cyg_hal_plf_ide_init(void)
{
int i;
cyg_pci_device_id ide_dev = CYG_PCI_NULL_DEVID;
cyg_pci_device ide_info;
@@ -127,11 +127,13 @@ cyg_hal_plf_ide_init(void)
#endif
for (i = 0; i < MAX_IDE; i++) {
ide_ctrl[i].cmd_bar = ide_info.base_map[(2*i)+0] & 0xFFFFFFFE;
ide_ctrl[i].ctl_bar = ide_info.base_map[(2*i)+1] & 0xFFFFFFFE;
}
+ return HAL_IDE_NUM_CONTROLLERS;
} else {
diag_printf("Can't find IDE controller!\n");
+ return 0;
}
}
#endif // CYGPKG_IO_PCI
Index: hal/arm/xscale/uE250/current/ChangeLog
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/arm/xscale/uE250/current/ChangeLog,v
retrieving revision 1.10
diff -u -5 -p -r1.10 ChangeLog
--- hal/arm/xscale/uE250/current/ChangeLog 8 Aug 2003 19:29:11 -0000 1.10
+++ hal/arm/xscale/uE250/current/ChangeLog 20 Sep 2003 19:20:54 -0000
@@ -1,5 +1,9 @@
+2003-09-20 Gary Thomas <gary@mlbassoc.com>
+
+ * src/uE250_ide.c: IDE init needs to return number of controllers found.
+
2003-08-08 Gary Thomas <gary@mind.be>
* src/uE250_pci.c:
* src/uE250_misc.c: Improve PCI initialization, including support
for external bus masters.
Index: hal/arm/xscale/uE250/current/src/uE250_ide.c
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/arm/xscale/uE250/current/src/uE250_ide.c,v
retrieving revision 1.1
diff -u -5 -p -r1.1 uE250_ide.c
--- hal/arm/xscale/uE250/current/src/uE250_ide.c 21 Feb 2003 18:17:33 -0000 1.1
+++ hal/arm/xscale/uE250/current/src/uE250_ide.c 20 Sep 2003 17:41:36 -0000
@@ -106,11 +106,11 @@ void
cyg_hal_plf_ide_write_control(int ctlr, cyg_uint32 reg, cyg_uint8 val)
{
pci_io_write_8(ide_ctrl[ctlr].ctl_bar + reg, val);
}
-void
+int
cyg_hal_plf_ide_init(void)
{
int i;
cyg_pci_device_id ide_dev = CYG_PCI_NULL_DEVID;
cyg_pci_device ide_info;
@@ -127,11 +127,13 @@ cyg_hal_plf_ide_init(void)
#endif
for (i = 0; i < MAX_IDE; i++) {
ide_ctrl[i].cmd_bar = ide_info.base_map[(2*i)+0] & 0xFFFFFFFE;
ide_ctrl[i].ctl_bar = ide_info.base_map[(2*i)+1] & 0xFFFFFFFE;
}
+ return HAL_IDE_NUM_CONTROLLERS;
} else {
diag_printf("Can't find IDE controller!\n");
+ return 0;
}
}
#endif // CYGPKG_IO_PCI
Index: hal/i386/pcmb/current/ChangeLog
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/i386/pcmb/current/ChangeLog,v
retrieving revision 1.18
diff -u -5 -p -r1.18 ChangeLog
--- hal/i386/pcmb/current/ChangeLog 24 Jul 2003 20:24:01 -0000 1.18
+++ hal/i386/pcmb/current/ChangeLog 20 Sep 2003 19:21:06 -0000
@@ -1,5 +1,9 @@
+2003-09-20 Gary Thomas <gary@mlbassoc.com>
+
+ * include/pcmb_io.h: IDE init needs to return number of controllers found.
+
2003-07-23 Nick Garnett <nickg@balti.calivar.com>
* include/pcmb_serial.h: Fixed bogus test on
CYGSEM_HAL_I386_PCMB_SCREEN_SUPPORT defined to test
CYGINT_HAL_I386_PCMB_SCREEN_SUPPORT > 0 instead.
Index: hal/i386/pcmb/current/include/pcmb_io.h
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/i386/pcmb/current/include/pcmb_io.h,v
retrieving revision 1.9
diff -u -5 -p -r1.9 pcmb_io.h
--- hal/i386/pcmb/current/include/pcmb_io.h 14 Aug 2002 13:19:11 -0000 1.9
+++ hal/i386/pcmb/current/include/pcmb_io.h 20 Sep 2003 17:39:13 -0000
@@ -216,11 +216,11 @@ CYG_MACRO_END
// IDE interface macros
//
#define HAL_IDE_NUM_CONTROLLERS 2
// Initialize the IDE controller(s).
-#define HAL_IDE_INIT()
+#define HAL_IDE_INIT() (HAL_IDE_NUM_CONTROLLERS)
#define __PCMB_IDE_PRI_CMD 0x1f0
#define __PCMB_IDE_PRI_CTL 0x3f4
#define __PCMB_IDE_SEC_CMD 0x170
#define __PCMB_IDE_SEC_CTL 0x374
Index: hal/mips/malta/current/ChangeLog
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/mips/malta/current/ChangeLog,v
retrieving revision 1.4
diff -u -5 -p -r1.4 ChangeLog
--- hal/mips/malta/current/ChangeLog 24 Jul 2003 20:24:03 -0000 1.4
+++ hal/mips/malta/current/ChangeLog 20 Sep 2003 19:21:14 -0000
@@ -1,5 +1,9 @@
+2003-09-20 Gary Thomas <gary@mlbassoc.com>
+
+ * src/plf_misc.c: IDE init needs to return number of controllers found.
+
2003-07-18 Nick Garnett <nickg@balti.calivar.com>
* cdl/hal_mips_malta.cdl:
Changed values for CYGNUM_HAL_RTC_NUMERATOR,
CYGNUM_HAL_RTC_DENOMINATOR and CYGNUM_HAL_RTC_PERIOD to
Index: hal/mips/malta/current/src/plf_misc.c
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/mips/malta/current/src/plf_misc.c,v
retrieving revision 1.2
diff -u -5 -p -r1.2 plf_misc.c
--- hal/mips/malta/current/src/plf_misc.c 23 May 2002 23:03:31 -0000 1.2
+++ hal/mips/malta/current/src/plf_misc.c 20 Sep 2003 17:40:46 -0000
@@ -448,20 +448,22 @@ void cyg_hal_plf_pci_cfg_write_byte (cyg
/*------------------------------------------------------------------------*/
/* IDE support */
-void cyg_hal_plf_ide_init(void)
+int
+cyg_hal_plf_ide_init(void)
{
cyg_uint32 v;
// enable IDE
v = cyg_hal_plf_pci_cfg_read_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_IDE),
CYG_PCI_CFG_PIIX4_IDETIM);
v |= (CYG_PCI_CFG_PIIX4_IDETIM_IDE << 16) | CYG_PCI_CFG_PIIX4_IDETIM_IDE;
cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_IDE),
CYG_PCI_CFG_PIIX4_IDETIM, v);
+ return HAL_IDE_NUM_CONTROLLERS;
}
/*------------------------------------------------------------------------*/
/* End of plf_misc.c */