[SLOF] [PATCH] board-qemu/slof/vio-vscsi: Scan up to 64 SCSI IDs
lvivier at redhat.com
Thu Dec 6 22:43:29 AEDT 2018
On 06/12/2018 12:23, Thomas Huth wrote:
> On 2018-12-06 12:07, Laurent Vivier wrote:
>> On 06/12/2018 12:02, Thomas Huth wrote:
>>> QEMU supports up the 64 SCSI IDs on the vscsi "bus", see the string
>>> "max_target = 63" in the source file hw/scsi/spapr_vscsi.c of QEMU.
>>> However, SLOF currently only checks the first 9 IDs on the vscsi adaptor,
>>> so when you try to boot from a CD-ROM like this, the boot fails:
>>> qemu-system-ppc64 ... -device spapr-vscsi,id=scsi0,reg=0x2000 \
>>> -drive file=/path/to/cdrom.iso,format=raw,if=none,id=dr1,readonly=on \
>>> -device scsi-cd,bus=scsi0.0,channel=0,scsi-id=63,lun=1,drive=dr1,id=scd1
>>> Thus let's change the amount of IDs that we scan in SLOF to 64, too, to
>>> match the ID range that QEMU provides.
>>> Signed-off-by: Thomas Huth <thuth at redhat.com>
>>> board-qemu/slof/vio-vscsi.fs | 4 ++--
>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>> diff --git a/board-qemu/slof/vio-vscsi.fs b/board-qemu/slof/vio-vscsi.fs
>>> index f2d4c6f..be11b69 100644
>>> --- a/board-qemu/slof/vio-vscsi.fs
>>> +++ b/board-qemu/slof/vio-vscsi.fs
>>> @@ -507,9 +507,9 @@ TRUE VALUE first-time-init?
>>> 10000 \ Larger value seem to have problems with some CDROMs
>>> -8 CONSTANT #dev
>>> +\ Report the amount of supported SCSI IDs - QEMU uses "max_target = 63"
>>> : dev-max-target ( -- #max-target )
>>> - #dev
>>> + 40
>>> " scsi-probe-helpers.fs" included
>> In SLOF, it seems the id is encoded on 3 bits, see:
>> \ We use SRP luns of the form 8000 | (bus << 8) | (id << 5) | lun
>> \ in the top 16 bits of the 64-bit LUN
>> : (set-target)
>> to current-target
>> : dev-generate-srplun ( target lun -- )
>> swap 8 << 8000 or or 30 <<
> Let me write that in C code:
> srplun = ((target << 8) | 0x8000 | lun) << 0x30;
> If I count correctly, we've got 7 bits here, not 3, so my patch should
> be fine ...?
Yes, you're right.
My comment was based on the comment of (set-target) and it seems wrong.
More information about the SLOF