Skip to content

Commit

Permalink
connectx4: Command mailbox chaining fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
lukego committed Jun 8, 2016
1 parent 6abbd96 commit 92ec410
Showing 1 changed file with 10 additions and 14 deletions.
24 changes: 10 additions & 14 deletions src/apps/mellanox/connectx4.lua
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,8 @@ local cmdq_entry_t = ffi.typeof("uint32_t[0x40/4]")
local cmdq_mailbox_t = ffi.typeof("uint32_t[0x240/4]")

-- XXX Check with maximum length of commands that we really use.
local max_mailboxes = 10
local data_per_mailbox = 0x230 -- Bytes of input/output data in a mailbox
local max_mailboxes = 1000
local data_per_mailbox = 0x200 -- Bytes of input/output data in a mailbox

-- Create a command queue with dedicated/reusable DMA memory.
function cmdq:new(init_seg)
Expand Down Expand Up @@ -264,7 +264,7 @@ function cmdq:prepare(command, last_input_offset, last_output_offset)

-- Command entry:

ffi.fill(self.entry, ffi.sizeof(self.entry), 0)
ffi.fill(self.entry, ffi.sizeof(cmdq_entry_t), 0)
self:setbits(0x00, 31, 24, 0x7) -- type
self:setbits(0x04, 31, 0, input_size)
self:setbits(0x38, 31, 0, output_size)
Expand All @@ -277,8 +277,6 @@ function cmdq:prepare(command, last_input_offset, last_output_offset)
-- How many mailboxes do we need?
local ninboxes = math.ceil((input_size - 16) / data_per_mailbox)
local noutboxes = math.ceil((output_size - 16) / data_per_mailbox)
print("ninboxes", ninboxes)
print("noutboxes", noutboxes)
if ninboxes > max_mailboxes then error("Input overflow: " ..input_size) end
if noutboxes > max_mailboxes then error("Output overflow: "..output_size) end

Expand All @@ -298,8 +296,8 @@ function cmdq:prepare(command, last_input_offset, last_output_offset)
-- Initialize mailboxes
for i = 0, max_mailboxes-1 do
-- Zap old state
ffi.fill(self.inboxes[i], ffi.sizeof(self.inboxes[i]), 0)
ffi.fill(self.outboxes[i], ffi.sizeof(self.outboxes[i]), 0)
ffi.fill(self.inboxes[i], ffi.sizeof(cmdq_mailbox_t), 0)
ffi.fill(self.outboxes[i], ffi.sizeof(cmdq_mailbox_t), 0)
-- Set mailbox block number
setint(self.inboxes[i], 0x238, i)
setint(self.outboxes[i], 0x238, i)
Expand Down Expand Up @@ -334,8 +332,8 @@ function cmdq:setinbits(ofs, ...) --bit1, bit2, val, ...
if ofs <= 16 - 4 then --inline
self:setbits(0x10 + ofs, ...)
else --input mailbox
local mailbox = math.floor((ofs + 4 - 16) / data_per_mailbox)
local offset = (ofs + 4 - 16) % data_per_mailbox
local mailbox = math.floor((ofs - 16) / data_per_mailbox)
local offset = (ofs - 16) % data_per_mailbox
setint(self.inboxes[mailbox], offset, setbits(...))
end
end
Expand Down Expand Up @@ -404,11 +402,9 @@ function cmdq:post(last_in_ofs, last_out_ofs)
local ninboxes = math.ceil((last_in_ofs + 4 - 16) / data_per_mailbox)
for i = 0, ninboxes-1 do
local blocknumber = getint(self.inboxes[i], 0x238, 31, 0)
if blocknumber ~= 0 then -- mailbox being used?
local address = memory.virtual_to_physical(self.inboxes[i])
print("Block "..blocknumber.." @ "..bit.tohex(address, 12)..":")
dumpoffset = hexdump(self.inboxes[i], 0, ffi.sizeof(cmdq_mailbox_t), dumpoffset)
end
local address = memory.virtual_to_physical(self.inboxes[i])
print("Block "..blocknumber.." @ "..bit.tohex(address, 12)..":")
dumpoffset = hexdump(self.inboxes[i], 0, ffi.sizeof(cmdq_mailbox_t), dumpoffset)
end
end

Expand Down

0 comments on commit 92ec410

Please sign in to comment.