• R
    mailbox: bcm-pdc: Convert from interrupts to poll for tx done · ab8d1b2d
    Rob Rice 提交于
    The PDC driver is a mailbox controller. A mailbox controller
    can report that a mailbox message has been "transmitted" either when
    a tx interrupt fires or by having the mailbox framework poll. This
    commit converts the PDC driver to the poll method. We found that the
    tx interrupt happens when the descriptors are read by the SPU hw. Thus,
    the interrupt method does not allow more than one tx message in the PDC
    tx DMA ring at a time. To keep the SPU hw busy, we would like to keep
    the tx ring full under heavy load.
    
    With the poll method, the PDC driver responds that the previous message
    has been transmitted if the tx ring has space for another message.
    SPU request messages take a variable number of descriptors. If 15
    descriptors are available, there is a good chance another message will
    fit. Also increased the ring size from 128 to 512 descriptors.
    
    With this change, I found the PDC driver hangs on its spinlock under
    heavy load. The PDC spinlock is not required; so I removed it. Calls
    to pdc_send_data() are already synchronized because of the channel
    spinlock in the mailbox framework. Other references to ring indexes
    should not require locking because they only written on either the
    tx or rx side.
    Signed-off-by: NRob Rice <rob.rice@broadcom.com>
    Reviewed-by: NAndy Gospodarek <gospo@broadcom.com>
    Signed-off-by: NJassi Brar <jaswinder.singh@linaro.org>
    ab8d1b2d
bcm-pdc-mailbox.c 48.4 KB