12e192b24SSimon Glass /* 22e192b24SSimon Glass * (C) Copyright 2001 32e192b24SSimon Glass * Denis Peter, MPL AG Switzerland 42e192b24SSimon Glass * 52e192b24SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 62e192b24SSimon Glass */ 72e192b24SSimon Glass 82e192b24SSimon Glass /* 92e192b24SSimon Glass * SCSI support. 102e192b24SSimon Glass */ 112e192b24SSimon Glass #include <common.h> 122e192b24SSimon Glass #include <command.h> 132e192b24SSimon Glass #include <scsi.h> 142e192b24SSimon Glass 152e192b24SSimon Glass static int scsi_curr_dev; /* current device */ 162e192b24SSimon Glass 172e192b24SSimon Glass /* 182e192b24SSimon Glass * scsi boot command intepreter. Derived from diskboot 192e192b24SSimon Glass */ 20861fe650SMichal Simek static int do_scsiboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 212e192b24SSimon Glass { 222e192b24SSimon Glass return common_diskboot(cmdtp, "scsi", argc, argv); 232e192b24SSimon Glass } 242e192b24SSimon Glass 2511f610edSSimon Glass /* 262e192b24SSimon Glass * scsi command intepreter 272e192b24SSimon Glass */ 28861fe650SMichal Simek static int do_scsi(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 292e192b24SSimon Glass { 30c002e39aSMichal Simek int ret; 31c002e39aSMichal Simek 32*1eaadd34SSimon Glass if (argc == 2) { 332e192b24SSimon Glass if (strncmp(argv[1], "res", 3) == 0) { 342e192b24SSimon Glass printf("\nReset SCSI\n"); 35db13a768SBin Meng #ifndef CONFIG_DM_SCSI 364682c8a1SSimon Glass scsi_bus_reset(NULL); 37db13a768SBin Meng #endif 388eab1a58SSimon Glass ret = scsi_scan(true); 39c002e39aSMichal Simek if (ret) 40c002e39aSMichal Simek return CMD_RET_FAILURE; 41c002e39aSMichal Simek return ret; 422e192b24SSimon Glass } 432e192b24SSimon Glass if (strncmp(argv[1], "scan", 4) == 0) { 448eab1a58SSimon Glass ret = scsi_scan(true); 45c002e39aSMichal Simek if (ret) 46c002e39aSMichal Simek return CMD_RET_FAILURE; 47c002e39aSMichal Simek return ret; 482e192b24SSimon Glass } 492e192b24SSimon Glass } 5011f610edSSimon Glass 51*1eaadd34SSimon Glass return blk_common_cmd(argc, argv, IF_TYPE_SCSI, &scsi_curr_dev); 522e192b24SSimon Glass } 532e192b24SSimon Glass 54ba524269STom Rini U_BOOT_CMD( 55ba524269STom Rini scsi, 5, 1, do_scsi, 56ba524269STom Rini "SCSI sub-system", 57ba524269STom Rini "reset - reset SCSI controller\n" 58ba524269STom Rini "scsi info - show available SCSI devices\n" 59ba524269STom Rini "scsi scan - (re-)scan SCSI bus\n" 60ba524269STom Rini "scsi device [dev] - show or set current device\n" 61ba524269STom Rini "scsi part [dev] - print partition table of one or all SCSI devices\n" 62ba524269STom Rini "scsi read addr blk# cnt - read `cnt' blocks starting at block `blk#'\n" 63ba524269STom Rini " to memory address `addr'\n" 64ba524269STom Rini "scsi write addr blk# cnt - write `cnt' blocks starting at block\n" 65ba524269STom Rini " `blk#' from memory address `addr'" 66ba524269STom Rini ); 67ba524269STom Rini 68ba524269STom Rini U_BOOT_CMD( 69ba524269STom Rini scsiboot, 3, 1, do_scsiboot, 70ba524269STom Rini "boot from SCSI device", 71ba524269STom Rini "loadAddr dev:part" 72ba524269STom Rini ); 73