@ -827,12 +827,20 @@ void ide_init(void)
ide_ident ( & ide_dev_desc [ i ] ) ;
dev_print ( & ide_dev_desc [ i ] ) ;
# ifndef CONFIG_BLK
if ( ( ide_dev_desc [ i ] . lba > 0 ) & & ( ide_dev_desc [ i ] . blksz > 0 ) ) {
/* initialize partition type */
part_init ( & ide_dev_desc [ i ] ) ;
}
# endif
}
WATCHDOG_RESET ( ) ;
# ifdef CONFIG_BLK
struct udevice * dev ;
uclass_first_device ( UCLASS_IDE , & dev ) ;
# endif
}
/* We only need to swap data if we are running on a big endian cpu. */
@ -1147,6 +1155,26 @@ int ide_device_present(int dev)
# endif
# ifdef CONFIG_BLK
static int ide_blk_probe ( struct udevice * udev )
{
struct blk_desc * desc = dev_get_uclass_platdata ( udev ) ;
/* fill in device vendor/product/rev strings */
strncpy ( desc - > vendor , ide_dev_desc [ desc - > devnum ] . vendor ,
BLK_VEN_SIZE ) ;
desc - > vendor [ BLK_VEN_SIZE ] = ' \0 ' ;
strncpy ( desc - > product , ide_dev_desc [ desc - > devnum ] . product ,
BLK_PRD_SIZE ) ;
desc - > product [ BLK_PRD_SIZE ] = ' \0 ' ;
strncpy ( desc - > revision , ide_dev_desc [ desc - > devnum ] . revision ,
BLK_REV_SIZE ) ;
desc - > revision [ BLK_REV_SIZE ] = ' \0 ' ;
part_init ( desc ) ;
return 0 ;
}
static const struct blk_ops ide_blk_ops = {
. read = ide_read ,
. write = ide_write ,
@ -1156,6 +1184,51 @@ U_BOOT_DRIVER(ide_blk) = {
. name = " ide_blk " ,
. id = UCLASS_BLK ,
. ops = & ide_blk_ops ,
. probe = ide_blk_probe ,
} ;
static int ide_probe ( struct udevice * udev )
{
struct udevice * blk_dev ;
char name [ 20 ] ;
int blksz ;
lbaint_t size ;
int i ;
int ret ;
for ( i = 0 ; i < CONFIG_SYS_IDE_MAXDEVICE ; i + + ) {
if ( ide_dev_desc [ i ] . type ! = DEV_TYPE_UNKNOWN ) {
sprintf ( name , " blk#%d " , i ) ;
blksz = ide_dev_desc [ i ] . blksz ;
size = blksz * ide_dev_desc [ i ] . lba ;
ret = blk_create_devicef ( udev , " ide_blk " , name ,
IF_TYPE_IDE , i ,
blksz , size , & blk_dev ) ;
if ( ret )
return ret ;
}
}
return 0 ;
}
U_BOOT_DRIVER ( ide ) = {
. name = " ide " ,
. id = UCLASS_IDE ,
. probe = ide_probe ,
} ;
struct pci_device_id ide_supported [ ] = {
{ PCI_DEVICE_CLASS ( PCI_CLASS_STORAGE_IDE < < 8 , 0xffff00 ) } ,
{ }
} ;
U_BOOT_PCI_DEVICE ( ide , ide_supported ) ;
UCLASS_DRIVER ( ide ) = {
. name = " ide " ,
. id = UCLASS_IDE ,
} ;
# else
U_BOOT_LEGACY_BLK ( ide ) = {