dm: Add support for scsi/sata based devices
All sata based drivers are bind and corresponding block device is created. Based on this find_scsi_device() is able to get back block device based on scsi_curr_dev pointer. intr_scsi() is commented now but it can be replaced by calling find_scsi_device() and scsi_scan(). scsi_dev_desc[] is commented out but common/scsi.c heavily depends on it. That's why CONFIG_SYS_SCSI_MAX_DEVICE is hardcoded to 1 and symbol is reassigned to a block description allocated by uclass. There is only one block description by device now but it doesn't need to be correct when more devices are present. scsi_bind() ensures corresponding block device creation. uclass post_probe (scsi_post_probe()) is doing low level init. SCSI/SATA DM based drivers requires to have 64bit base address as the first entry in platform data structure to setup mmio_base. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
+1
-1
@@ -145,7 +145,7 @@ struct ahci_ioports {
|
||||
};
|
||||
|
||||
struct ahci_probe_ent {
|
||||
#ifdef CONFIG_DM_PCI
|
||||
#if defined(CONFIG_DM_PCI) || defined(CONFIG_DM_SCSI)
|
||||
struct udevice *dev;
|
||||
#else
|
||||
pci_dev_t dev;
|
||||
|
||||
@@ -66,6 +66,7 @@ enum uclass_id {
|
||||
UCLASS_REMOTEPROC, /* Remote Processor device */
|
||||
UCLASS_RESET, /* Reset controller device */
|
||||
UCLASS_RTC, /* Real time clock device */
|
||||
UCLASS_SCSI, /* SCSI device */
|
||||
UCLASS_SERIAL, /* Serial UART */
|
||||
UCLASS_SPI, /* SPI bus */
|
||||
UCLASS_SPMI, /* System Power Management Interface bus */
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define __SATA_H__
|
||||
#include <part.h>
|
||||
|
||||
#if !defined(CONFIG_DM_SCSI)
|
||||
int init_sata(int dev);
|
||||
int reset_sata(int dev);
|
||||
int scan_sata(int dev);
|
||||
@@ -15,5 +16,6 @@ int __sata_stop(void);
|
||||
int sata_port_status(int dev, int port);
|
||||
|
||||
extern struct blk_desc sata_dev_desc[];
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
+19
-1
@@ -166,8 +166,11 @@ typedef struct SCSI_cmd_block{
|
||||
void scsi_print_error(ccb *pccb);
|
||||
int scsi_exec(ccb *pccb);
|
||||
void scsi_bus_reset(void);
|
||||
#if !defined(CONFIG_DM_SCSI)
|
||||
void scsi_low_level_init(int busdevfunc);
|
||||
|
||||
#else
|
||||
void scsi_low_level_init(int busdevfunc, struct udevice *dev);
|
||||
#endif
|
||||
|
||||
/***************************************************************************
|
||||
* functions residing inside cmd_scsi.c
|
||||
@@ -175,6 +178,21 @@ void scsi_low_level_init(int busdevfunc);
|
||||
void scsi_init(void);
|
||||
int scsi_scan(int mode);
|
||||
|
||||
#if defined(CONFIG_DM_SCSI)
|
||||
/**
|
||||
* struct scsi_platdata - stores information about SCSI controller
|
||||
*
|
||||
* @base: Controller base address
|
||||
* @max_lun: Maximum number of logical units
|
||||
* @max_id: Maximum number of target ids
|
||||
*/
|
||||
struct scsi_platdata {
|
||||
unsigned long base;
|
||||
unsigned long max_lun;
|
||||
unsigned long max_id;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define SCSI_IDENTIFY 0xC0 /* not used */
|
||||
|
||||
/* Hardware errors */
|
||||
|
||||
Reference in New Issue
Block a user