megasas: fix megasas_get_sata_addr

There are two bugs here.  First, the 16-bit id loses the high 8 bits
when shifted left by 24.  Second, the address must be combined with
an "or" or we just get zero.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2015-09-30 19:21:10 +02:00
parent 633dccb458
commit 8ef2eb8d2c

View File

@ -431,7 +431,7 @@ static uint64_t megasas_fw_time(void)
static uint64_t megasas_get_sata_addr(uint16_t id) static uint64_t megasas_get_sata_addr(uint16_t id)
{ {
uint64_t addr = (0x1221ULL << 48); uint64_t addr = (0x1221ULL << 48);
return addr & (id << 24); return addr | ((uint64_t)id << 24);
} }
/* /*