This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VM: How to enable DMA for uart transfer in linux kernel device tree

Part Number: TDA4VM

Hi,

I want to enable dma configuration for uart in linux kernel device tree to reduce the uart interrupts load on A72 Cores. What should I do please?

Refer to the question on this post? e2e.ti.com/.../3983352

The sdk version we used is sdk8.2.

  • Hi experts,

      Is there any response for customer's question?

    Thanks.

  • Hi Gary,

    Unfortunately no examples of UART DMA enabled/tried in the SDK. It is NOT validated.

    - Keerthy

  • Hi,

    Thank you for your response.

    That's to say, the UART of the A72 core does not support DMA?

  • That's to say, the UART of the A72 core does not support DMA

    Hardware has support but the SDK(software) has not been tried or tested.

    - Keerthy

  • Hi,

    Which version of the SDK is planned to support UART DMA in the future?

    Thanks.

  • Hi,

    No plans yet. But i tried to check the UART transfers from Host(Ubuntu) PC to J712e MCU_UART with dma enabled.

    Can you try the below diff:

    diff --git a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts
    index 56d987db4..753bc3dbd 100644
    --- a/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts
    +++ b/arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts
    @@ -1207,3 +1207,23 @@
     &main_ehrpwm5 {
            status = "disabled";
     };
    +
    +&wkup_pmx0 {
    +       mcu_uart0_pins_default: mcu-uart0-pins-default {
    +               pinctrl-single,pins = <
    +                       J721E_WKUP_IOPAD(0xe4, PIN_INPUT, 0) /* (H28) WKUP_GPIO0_13.MCU_UART0_RXD */
    +                       J721E_WKUP_IOPAD(0xe0, PIN_OUTPUT, 0) /* (G29) WKUP_GPIO0_12.MCU_UART0_TXD */
    +                       J721E_WKUP_IOPAD(0xe8, PIN_INPUT, 0) /* (H29) WKUP_GPIO0_14.MCU_UART0_CTSn */
    +                       J721E_WKUP_IOPAD(0xec, PIN_OUTPUT, 0) /* (J27) WKUP_GPIO0_15.MCU_UART0_RTSn */
    +               >;
    +       };
    +};
    +
    +&mcu_uart0 {
    +       status = "okay";
    +       pinctrl-names = "default";
    +       pinctrl-0 = <&mcu_uart0_pins_default>;
    +       dmas = <&main_udmap 0xf300>,
    +              <&main_udmap 0x7300>;
    +       dma-names = "tx", "rx";
    +};
    diff --git a/drivers/dma/ti/k3-psil-j721e.c b/drivers/dma/ti/k3-psil-j721e.c
    index 34e3fc565..17e203475 100644
    --- a/drivers/dma/ti/k3-psil-j721e.c
    +++ b/drivers/dma/ti/k3-psil-j721e.c
    @@ -287,6 +287,8 @@ static struct psil_ep j721e_dst_ep_map[] = {
            /* SA2UL */
            PSIL_SA2UL(0xf500, 1),
            PSIL_SA2UL(0xf501, 1),
    +       /* MCU_PDMA2 (MCU_PDMA_MISC_G2) - UART0 */
    +       PSIL_PDMA_XY_PKT(0xf300),
     };
     


    Best Regards,
    Keerthy