Solution/Workaround 2:
This workaround applies to all of modes of the PCI 9054 and needs to be
used because a Target on the PCI bus will not always accept the last data in
a Direct Master write transfer. This workaround can be used if another PCI
Target on the bus can always accept at least one data transfer (which means
it won't leave the last data word of the transfer in the output holding register)
from a Direct Master Write before disconnecting.
The DMPAF signal or DMPAF bit (MARBR [30]) can be used to monitor the
Direct Master Write FIFO status. The DMPAF status is programmable
(DMPBAM [10, 8:5]) for the amount of Lwords to be in the FIFO before
declaring it full. If DMPBAM [10, 8:5] = 00000b, then whenever the Direct
Master Write FIFO has at least 1 Lword in it, the FIFO will be considered full
(DMPAF =1) and no PCI Initiator Read transaction should be performed. In
order to ensure that all Direct Master Write transfers are completed before
starting a Direct Master read, the last Direct Master Write transfer needs to be
directed to a PCI device that will always accept at least one data transfer. For
example: if another PCI 9054 is on the PCI bus, the Local Master could do a
"dummy" write (Direct Master Write) to its Mailbox register (or another
acceptable register). Because this is a register write, it won't be retried, and
will be completed once PCI bus ownership has been granted. You will know
that the write has been completed and that it is acceptable to start a Direct
Master Read if the DMPAF signal is false (=0).
Solution/Workaround 3:
This workaround applies to all of modes of the PCI 9054 and can be used if
access to the PCI arbiter is available. The DMPAF signal or DMPAF bit
(MARBR [30]) is used to monitor the Direct Master Write FIFO status. The
DMPAF status is programmable (DMPBAM [10, 8:5]) for the amount of
Lwords to be in the FIFO before declaring it full. If DMPBAM [10, 8:5] =
00000b then whenever the Direct Master Write FIFO has at least 1 Lword in
it, the FIFO will be considered full (DMPAF =1). Additionally the transfer
status needs to be ORed with DMPAF to create a signal that will inform the
system that the PCI 9054 hasn't completed its Direct Master task yet - let's
call it DMIP (Direct Master In Process). Since DMIP is in the Local clock
domain, the PCI REQ# signal needs to be synchronized to the Local clock,
before ORing it with DMPAF to create a signal that holds off other Direct
Master transfers until the pending transfer completes. Because REQ# will go
away for two clocks if MARBR[23] = 0 when a PCI transfer is retried, logic
needs detect it being gone for at least 3 clocks and the DMPAF signal being
false before allowing other Direct Master transfers to execute.
Document number: 9054AB-SIL-ER-P0-2.2
-9-