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>master
parent
720ba46e71
commit
e8a016b537
@ -0,0 +1,27 @@ |
||||
/*
|
||||
* Copyright (c) 2015 Google, Inc |
||||
* Written by Simon Glass <sjg@chromium.org> |
||||
* Copyright (c) 2016 Xilinx, Inc |
||||
* Written by Michal Simek |
||||
* |
||||
* Based on ahci-uclass.c |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <dm.h> |
||||
#include <scsi.h> |
||||
|
||||
static int scsi_post_probe(struct udevice *dev) |
||||
{ |
||||
debug("%s: device %p\n", __func__, dev); |
||||
scsi_low_level_init(0, dev); |
||||
return 0; |
||||
} |
||||
|
||||
UCLASS_DRIVER(scsi) = { |
||||
.id = UCLASS_SCSI, |
||||
.name = "scsi", |
||||
.post_probe = scsi_post_probe, |
||||
}; |
Loading…
Reference in new issue