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.

AM6421: Help with bank interrupts on AM64x

Part Number: AM6421

Tool/software:

Hello, 

On our device, we are trying to use bank based interrupts with some code taken from the mcu_plus_sdk, however, we are having issues. First, I'll start out with the code we currently have:

int32_t IOLM_SOC_UTIL_gpioIrqSet(uint32_t u32BankNumber_p,
                                 uint32_t u32IntRouter_p,
                                 uint32_t u32IntSrcID_p,
                                 uint32_t u32IntDstID_p,
                                 uint32_t u32BankSrcIndexBase_p)
{
  int32_t retVal = SystemP_FAILURE;
  struct tisci_msg_rm_irq_set_req rmIrqReq;
  struct tisci_msg_rm_irq_set_resp rmIrqResp;

  /* For setting the IRQ for GPIO using sciclient APIs, we need to populate
   * a structure, tisci_msg_rm_irq_set_req instantiated above. The definition
   * of this struct and details regarding the struct members can be found in
   * the tisci_rm_irq.h.
   */
  /* Initialize all flags to zero since we'll be setting only a few */
  rmIrqReq.valid_params = 0U;
  /* Our request has a destination id, so enable the flag for DST ID */
  rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_ID_VALID;
  /* DST HOST IRQ is the output index of the interrupt router. We need to make sure this is also enabled as a valid
   * param */
  rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
  /* This is not a global event */
  rmIrqReq.global_event = 0U;
  /* Our interrupt source would be the GPIO peripheral. The source id has to be a device id recognizable by the SYSFW.
   * The list of device IDs can be found in tisci_devices.h file under
   * source/drivers/sciclient/include/tisci/am64x_am243x/. In GPIO case there are 3 possible options - TISCI_DEV_GPIO0,
   * TISCI_DEV_GPIO1, TISCI_DEV_MCU_GPIO0. For input interrupt, we need to choose the TISCI_DEV_GPIO1
   */
  rmIrqReq.src_id = u32IntSrcID_p;
  /* This is the interrupt source index within the GPIO peripheral */
  rmIrqReq.src_index = u32BankSrcIndexBase_p + u32BankNumber_p;
  /* This is the destination of the interrupt, usually a CPU core. Here we choose the TISCI device ID for R5F0-0 core.
   * For a different core, the corresponding TISCI device id has to be provided */
  rmIrqReq.dst_id = u32IntDstID_p;
  /* This is the output index of the interrupt router. This depends on the core and board configuration */
  rmIrqReq.dst_host_irq = u32IntRouter_p;
  /* Rest of the struct members are unused for GPIO interrupt */
  rmIrqReq.ia_id = 0U;
  rmIrqReq.vint = 0U;
  rmIrqReq.vint_status_bit_index = 0U;
  rmIrqReq.secondary_host = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST;

  /* To set the interrupt we now invoke the Sciclient_rmIrqSet function which
   * will find out the route to configure the interrupt and request DMSC to
   * grant the resource
   */
  retVal = Sciclient_rmIrqSet(&rmIrqReq, &rmIrqResp, SystemP_WAIT_FOREVER);
  return retVal;
}

This comes from mcu_plus_sdk/docs/api_guide_am64x/DRIVERS_SCICLIENT_PAGE.html.

int32_t IOLM_SOC_UTIL_registerGPIOInterrupt(HwiP_Object* gpioHwiObject_p,
                                            uint32_t u32Bank_p,
                                            uint32_t u32Base_p,
                                            uint32_t u32BaseIndex_p,
                                            uint32_t u32Router_p,
                                            uint32_t u32Src_p,
                                            uint32_t u32Dst_p,
                                            HwiP_FxnCallback vISR_p)
{
  int32_t retVal = SystemP_SUCCESS;
  HwiP_Params hwiPrms;

  // setup the GPIO input interrupt capability
  // interrupt router needs to exist, ie. MCU_GPIO0 to R50_0
  retVal = IOLM_SOC_UTIL_gpioIrqSet(u32Bank_p, u32Router_p, u32Src_p, u32Dst_p, u32BaseIndex_p);
  if (SystemP_SUCCESS == retVal)
  {
    GPIO_bankIntrEnable(u32Base_p, u32Bank_p); // not pin interrupt

    /* Register pin interrupt */
    HwiP_Params_init(&hwiPrms);
    hwiPrms.intNum = u32Router_p;
    hwiPrms.callback = vISR_p;
    hwiPrms.args = (void*)u32Bank_p; // NOLINT
    retVal = HwiP_construct(gpioHwiObject_p, &hwiPrms);
  }
  else
  {
    printf("Error setting up interrupt.\n");
  }

  return retVal;
}

This code mostly comes from mcu_plus_sdk/docs/api_guide_am64x/DRIVERS_GPIO_PAGE.html. 

Here's the problem: we are trying to do state interrupts. On our board, the pins we want interrupts for are GPIO0_45, GPIO0_46, GPIO0_47, and GPIO0_48. Therefore, based on the example code in the SDK, we thought these were the parameters to IOLM_SOC_UTIL_registerGPIOInterrupt:

u32Bank_p: 2 (This only covers pins GPIO0_45:47, but we got this value because there are 16 pins per bank)

u32Base_p: CSL_GPIO0_BASE (Because the pins we want interrupts on are GPIO0)

u32BaseIndex_p: 90 (This is the one we have the most questions about. Since the SDK example is using GPIO1, we don't know if this value is correct. This value adds to the bank number to fill the src_index field in the tisci_msg_rm_irq_set_req struct, but when we try 90, it does not work)

u32Router_p: CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_8

u32Src_p: TISCI_DEV_GPIO0

u32Dst_p: TISCI_DEV_R5FSS0_CORE0

Lastly, we've done a lot of experimenting on what the value of u32BaseIndex_p should be. We were successfully able to enable interrupts on one pin only by just brute forcing src_index in the tisci_msg_rm_irq_set_req struct to be equal to 45, i.e., the GPIO number of one pin we want to monitor (GPIO0_45). To us, this points towards the fact that our current code is not correctly registering bank interrupts, but rather pin interrupts. 

Hopefully this is enough information, let me know if you need more. Thank you

  • Some additional information: I am using AM64x MCU+ SDK 09.02.00

    I've done some investigating trying to put debug breakpoints in mcu_plus_sdk\source\drivers\sciclient\sciclient_rm_irq.c. I put breakpoints at every place in Sciclient_rmIrqRouteValidate where the line "valid = false;" appears, to maybe give an idea of where I'm failing. I don't really understand these data structures, but I thought this might give some insight. The validation failed at line 1761 of sciclient_rm_irq.c because "next_inp_valid" is false. I discovered that next_inp_valid is false because on line 1630, the call to Sciclient_rmIrInpIsFree returns SystemP_FAILURE. This happens at line 2730. The comment seems to indicate that "Input is in use"? The values passed into Sciclient_rmIrInpIsFree are id=3 and inp=192. I believe the id=3 comes from TISCI_DEV_MAIN_GPIOMUX_INTROUTER0, but I could be incorrect. Based on this page (https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/am64x/interrupt_cfg.html#main-gpiomux-introuter0-interrupt-router-input-sources), it feels like 192 is the right number for the gpio_bank for GPIO0 bank 2. However, it is still failing when trying to register the interrupt. 

    Not sure if any of this is helpful, but it's some more info I tried to get on my own to figure out this issue. 

  • Some more information: we are running Linux on our device on an A53 core. Our Linux application is the one that loads the R5 freertos code. We are using the following resource table:

    /*
     * K3 System Firmware Resource Management Configuration Data
     * Auto generated from K3 Resource Partitioning tool
     *
     * Copyright (C) 2019-2021 Texas Instruments Incorporated - https://www.ti.com/
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     *    Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     *    Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the
     *    distribution.
     *
     *    Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    #include "common.h"
    #include <hosts.h>
    #include <devices.h>
    #include <resasg_types.h>
    
    const struct boardcfg_rm_local am64x_boardcfg_rm_data = {
    	.rm_boardcfg = {
    		/* boardcfg_abi_rev */
    		.rev = {
    			.boardcfg_abi_maj = 0x0,
    			.boardcfg_abi_min = 0x1,
    		},
    
    		/* boardcfg_rm_host_cfg */
    		.host_cfg = {
    			.subhdr = {
    				.magic = BOARDCFG_RM_HOST_CFG_MAGIC_NUM,
    				.size = sizeof (struct boardcfg_rm_host_cfg),
    			},
    			.host_cfg_entries = {
    				{
    					.host_id = HOST_ID_A53_2,
    					.allowed_atype = 0b101010,
    					.allowed_qos = 0xAAAA,
    					.allowed_orderid = 0xAAAAAAAA,
    					.allowed_priority = 0xAAAA,
    					.allowed_sched_priority = 0xAA,
    				},
    				{
    					.host_id = HOST_ID_M4_0,
    					.allowed_atype = 0b101010,
    					.allowed_qos = 0xAAAA,
    					.allowed_orderid = 0xAAAAAAAA,
    					.allowed_priority = 0xAAAA,
    					.allowed_sched_priority = 0xAA,
    				},
    				{
    					.host_id = HOST_ID_MAIN_0_R5_1,
    					.allowed_atype = 0b101010,
    					.allowed_qos = 0xAAAA,
    					.allowed_orderid = 0xAAAAAAAA,
    					.allowed_priority = 0xAAAA,
    					.allowed_sched_priority = 0xAA,
    				},
    				{
    					.host_id = HOST_ID_MAIN_0_R5_3,
    					.allowed_atype = 0b101010,
    					.allowed_qos = 0xAAAA,
    					.allowed_orderid = 0xAAAAAAAA,
    					.allowed_priority = 0xAAAA,
    					.allowed_sched_priority = 0xAA,
    				},
    				{
    					.host_id = HOST_ID_MAIN_1_R5_1,
    					.allowed_atype = 0b101010,
    					.allowed_qos = 0xAAAA,
    					.allowed_orderid = 0xAAAAAAAA,
    					.allowed_priority = 0xAAAA,
    					.allowed_sched_priority = 0xAA,
    				},
    				{
    					.host_id = HOST_ID_MAIN_1_R5_3,
    					.allowed_atype = 0b101010,
    					.allowed_qos = 0xAAAA,
    					.allowed_orderid = 0xAAAAAAAA,
    					.allowed_priority = 0xAAAA,
    					.allowed_sched_priority = 0xAA,
    				},
    			}
    		},
    
    		/* boardcfg_rm_resasg */
    		.resasg = {
    			.subhdr = {
    				.magic = BOARDCFG_RM_RESASG_MAGIC_NUM,
    				.size = sizeof (struct boardcfg_rm_resasg),
    			},
    			.resasg_entries_size =
    				BOARDCFG_RM_RESASG_ENTRIES *
    				sizeof (struct boardcfg_rm_resasg_entry),
    			.reserved = 0,
    			/* .resasg_entries is set via boardcfg_rm_local */
    		},
    	},
    
    	/* This is actually part of .resasg */
    	.resasg_entries = {
    		/* Compare event Interrupt Router */
    		{
    			.start_resource = 0,
    			.num_resource = 16,
    			.type = RESASG_UTYPE (AM64X_DEV_CMP_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 16,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_CMP_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 16,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_CMP_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 20,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_CMP_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 24,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_CMP_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 28,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_CMP_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 32,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_CMP_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Main GPIO Interrupt Router */
    		{
    			.start_resource = 0,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_MAIN_GPIOMUX_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 8,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_MAIN_GPIOMUX_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 8,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_MAIN_GPIOMUX_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 12,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_MAIN_GPIOMUX_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		/* MCU GPIO Interrupt Router */
    		{
    			.start_resource = 0,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_MCU_MCU_GPIOMUX_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 0,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_MCU_MCU_GPIOMUX_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		/* Timesync Interrupt Router */
    		{
    			.start_resource = 0,
    			.num_resource = 41,
    			.type = RESASG_UTYPE (AM64X_DEV_TIMESYNC_EVENT_INTROUTER0,
    					RESASG_SUBTYPE_IR_OUTPUT),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block Copy DMA Global event trigger */
    		{
    			.start_resource = 50176,
    			.num_resource = 136,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_TRIGGER),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block Copy DMA Global config */
    		{
    			.start_resource = 0,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_UDMAP_GLOBAL_CONFIG),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block Copy DMA Rings for Block copy channels */
    		{
    			.start_resource = 0,
    			.num_resource = 12,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 12,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 12,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 18,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 20,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 24,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 26,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_M4_0,
    		},
    		{
    			.start_resource = 27,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block Copy DMA Rings for Split TR Rx channel */
    		{
    			.start_resource = 48,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 54,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 54,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 60,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 62,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 66,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		/* Block Copy DMA Rings for Split TR Tx channel */
    		{
    			.start_resource = 28,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 34,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 34,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 40,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 42,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 46,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_RING_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		/* Block Copy DMA Block copy channels */
    		{
    			.start_resource = 0,
    			.num_resource = 12,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 12,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 12,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 18,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 20,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 24,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 26,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_M4_0,
    		},
    		{
    			.start_resource = 27,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_BLOCK_COPY_CHAN),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block Copy DMA Split TR Rx channels */
    		{
    			.start_resource = 0,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 6,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 6,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 12,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 14,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 18,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		/* Block Copy DMA Split TR Tx channels */
    		{
    			.start_resource = 0,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 6,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 6,
    			.num_resource = 6,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 12,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 14,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 18,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_BCDMA_0,
    					RESASG_SUBTYPE_BCDMA_SPLIT_TR_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		/* DMASS Interrupt aggregator Virtual interrupts */
    		{
    			.start_resource = 5,
    			.num_resource = 35,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_VINT),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 44,
    			.num_resource = 14,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_VINT),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 44,
    			.num_resource = 14,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_VINT),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 58,
    			.num_resource = 14,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_VINT),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 92,
    			.num_resource = 14,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_VINT),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 106,
    			.num_resource = 14,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_VINT),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 168,
    			.num_resource = 16,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_VINT),
    			.host_id = HOST_ID_M4_0,
    		},
    		/* DMASS Interrupt aggregator Global events */
    		{
    			.start_resource = 16,
    			.num_resource = 512,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 528,
    			.num_resource = 256,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 528,
    			.num_resource = 256,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 784,
    			.num_resource = 192,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 976,
    			.num_resource = 256,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 1232,
    			.num_resource = 192,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 1424,
    			.num_resource = 96,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_M4_0,
    		},
    		{
    			.start_resource = 1520,
    			.num_resource = 16,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_GLOBAL_EVENT_SEVT),
    			.host_id = HOST_ID_ALL,
    		},
    		/* DMASS timer manager event */
    		{
    			.start_resource = 0,
    			.num_resource = 1024,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_TIMERMGR_EVT_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Tx channel error event */
    		{
    			.start_resource = 4096,
    			.num_resource = 42,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_PKTDMA_TX_CHAN_ERROR_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Tx flow completion event */
    		{
    			.start_resource = 4608,
    			.num_resource = 112,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_PKTDMA_TX_FLOW_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Rx channel error event */
    		{
    			.start_resource = 5120,
    			.num_resource = 29,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_PKTDMA_RX_CHAN_ERROR_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Rx flow completion event */
    		{
    			.start_resource = 5632,
    			.num_resource = 176,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_PKTDMA_RX_FLOW_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Rx flow starvation event */
    		{
    			.start_resource = 6144,
    			.num_resource = 176,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_PKTDMA_RX_FLOW_STARVATION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Rx flow firewall event */
    		{
    			.start_resource = 6656,
    			.num_resource = 176,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_PKTDMA_RX_FLOW_FIREWALL_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA BC channel error event */
    		{
    			.start_resource = 8192,
    			.num_resource = 28,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_CHAN_ERROR_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA BC channel data completion event */
    		{
    			.start_resource = 8704,
    			.num_resource = 28,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_CHAN_DATA_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA BC channel ring completion event */
    		{
    			.start_resource = 9216,
    			.num_resource = 28,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_CHAN_RING_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA Tx channel error event */
    		{
    			.start_resource = 9728,
    			.num_resource = 20,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_TX_CHAN_ERROR_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA Tx channel data completion event */
    		{
    			.start_resource = 10240,
    			.num_resource = 20,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_TX_CHAN_DATA_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA Tx channel ring completion event */
    		{
    			.start_resource = 10752,
    			.num_resource = 20,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_TX_CHAN_RING_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA Rx channel error event */
    		{
    			.start_resource = 11264,
    			.num_resource = 20,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_RX_CHAN_ERROR_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA Rx channel data completion event */
    		{
    			.start_resource = 11776,
    			.num_resource = 20,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_RX_CHAN_DATA_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Block copy DMA Rx channel ring completion event */
    		{
    			.start_resource = 12288,
    			.num_resource = 20,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_INTAGGR_0,
    					RESASG_SUBTYPE_IA_BCDMA_RX_CHAN_RING_COMPLETION_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* DMASS UDMA global config */
    		{
    			.start_resource = 0,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_UDMAP_GLOBAL_CONFIG),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Free rings for Tx channel */
    		{
    			.start_resource = 0,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 7,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 9,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 13,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 15,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_M4_0,
    		},
    		/* Packet DMA Rings for CPSW Tx channel */
    		{
    			.start_resource = 16,
    			.num_resource = 64,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_CPSW_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 16,
    			.num_resource = 64,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_CPSW_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		/* Packet DMA Rings for SA2UL Tx channel1 */
    		{
    			.start_resource = 88,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_SAUL_TX_1_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Rings for ICSSG0 Tx channel */
    		{
    			.start_resource = 96,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_ICSSG_0_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Rings for ICSSG1 Tx channel */
    		{
    			.start_resource = 104,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_ICSSG_1_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Free rings for Rx channel */
    		{
    			.start_resource = 112,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 116,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 116,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 119,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 121,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 125,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 127,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_M4_0,
    		},
    		/* Packet DMA Rings for CPSW Rx channel */
    		{
    			.start_resource = 128,
    			.num_resource = 16,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_CPSW_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 128,
    			.num_resource = 16,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_CPSW_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		/* Packet DMA Rings for SA2UL Rx channel1 */
    		{
    			.start_resource = 144,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_SAUL_RX_1_CHAN),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA Rings for SA2UL Rx channel2 */
    		{
    			.start_resource = 152,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_SAUL_RX_2_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Rings for SA2UL Rx channel3 */
    		{
    			.start_resource = 152,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_SAUL_RX_3_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Rings for ICSSG0 Rx channel */
    		{
    			.start_resource = 160,
    			.num_resource = 64,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_ICSSG_0_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Rings for ICSSG1 Rx channel */
    		{
    			.start_resource = 224,
    			.num_resource = 64,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_RING_ICSSG_1_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Free Tx channels */
    		{
    			.start_resource = 0,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 7,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 9,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 13,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 15,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_TX_CHAN),
    			.host_id = HOST_ID_M4_0,
    		},
    		/* Packet DMA CPSW Tx channels */
    		{
    			.start_resource = 16,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_CPSW_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 16,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_CPSW_TX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		/* Packet DMA SA2UL Tx channel1 */
    		{
    			.start_resource = 25,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_SAUL_TX_1_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA ICSSG0 Tx channels */
    		{
    			.start_resource = 26,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_ICSSG_0_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA ICSSG1 Tx channels */
    		{
    			.start_resource = 34,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_ICSSG_1_TX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Free Rx channels */
    		{
    			.start_resource = 0,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 7,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 9,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 13,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 15,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_M4_0,
    		},
    		/* Packet DMA Free flows for Rx channels */
    		{
    			.start_resource = 0,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 4,
    			.num_resource = 3,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 7,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 9,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 13,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 15,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_UNMAPPED_RX_CHAN),
    			.host_id = HOST_ID_M4_0,
    		},
    		/* Packet DMA CPSW Rx channel */
    		{
    			.start_resource = 16,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_CPSW_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 16,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_CPSW_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		/* Packet DMA CPSW Rx flows */
    		{
    			.start_resource = 16,
    			.num_resource = 16,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_CPSW_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		{
    			.start_resource = 16,
    			.num_resource = 16,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_CPSW_RX_CHAN),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		/* Packet DMA SA2UL Rx channel0 flows */
    		{
    			.start_resource = 32,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_SAUL_RX_0_CHAN),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA SA2UL Rx channel1 flows */
    		{
    			.start_resource = 32,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_SAUL_RX_1_CHAN),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA SA2UL Rx channel2 */
    		{
    			.start_resource = 19,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_SAUL_RX_2_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA SA2UL Rx channel2 flows */
    		{
    			.start_resource = 40,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_SAUL_RX_2_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA SA2UL Rx channel3 */
    		{
    			.start_resource = 20,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_SAUL_RX_3_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA SA2UL Rx channel3 flows */
    		{
    			.start_resource = 40,
    			.num_resource = 8,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_SAUL_RX_3_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA ICSSG0 Rx channel */
    		{
    			.start_resource = 21,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_ICSSG_0_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA ICSSG0 Rx flows */
    		{
    			.start_resource = 48,
    			.num_resource = 64,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_ICSSG_0_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA ICSSG1 Rx channel */
    		{
    			.start_resource = 25,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_ICSSG_1_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA ICSSG1 Rx flows */
    		{
    			.start_resource = 112,
    			.num_resource = 64,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_PKTDMA_0,
    					RESASG_SUBTYPE_PKTDMA_FLOW_ICSSG_1_RX_CHAN),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Ring accelerator error event */
    		{
    			.start_resource = 0,
    			.num_resource = 1,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_ERROR_OES),
    			.host_id = HOST_ID_ALL,
    		},
    		/* Packet DMA virt_id range */
    		{
    			.start_resource = 2,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_VIRTID),
    			.host_id = HOST_ID_A53_2,
    		},
    		/* Packet DMA Rings for IPC */
    		{
    			.start_resource = 20,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_GENERIC_IPC),
    			.host_id = HOST_ID_MAIN_0_R5_0,
    		},
    		{
    			.start_resource = 20,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_GENERIC_IPC),
    			.host_id = HOST_ID_MAIN_0_R5_1,
    		},
    		{
    			.start_resource = 22,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_GENERIC_IPC),
    			.host_id = HOST_ID_MAIN_0_R5_3,
    		},
    		{
    			.start_resource = 24,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_GENERIC_IPC),
    			.host_id = HOST_ID_MAIN_1_R5_1,
    		},
    		{
    			.start_resource = 26,
    			.num_resource = 2,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_GENERIC_IPC),
    			.host_id = HOST_ID_MAIN_1_R5_3,
    		},
    		{
    			.start_resource = 28,
    			.num_resource = 4,
    			.type = RESASG_UTYPE (AM64X_DEV_DMASS0_RINGACC_0,
    					RESASG_SUBTYPE_RA_GENERIC_IPC),
    			.host_id = HOST_ID_ALL,
    		},
    	},
    };
    

  • Hello Owen,

    Thanks for reaching out to Texas Instruments E2E support forum.

    I can see in the above code while setting HwiP parameters, you have passed the hwiPrms.args = (void*)u32Bank_p which is the bank number.

    Can you please try once passing the pin number?

    Please refer below code.

    hwiPrms.args     = (void *) pinNum;
    /* GPIO interrupt is a pulse type interrupt */
    hwiPrms.isPulse  = 1;
     

    The pinNum should be the exact pin number(i.e. 45 in case of GPIO0_45).

    Regards,

    Tushar

  • Thank you for the response Tushar. 

    I tried the code you provided. It successfully registered the interrupt, however, our ISR function (not displayed here) does not behave well when it tries to call GPIO_getBankIntrStatus after an interrupt is triggered. A debug assertion happens there. Thus, we kept the code in IOLM_SOC_UTIL_registerGPIOInterrupt the same and instead passed it the following parameters:

    u32Bank_p:0

    u32Base_p: CSL_GPIO0_BASE 

    u32BaseIndex_p: 45

    u32Router_p: CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_8

    u32Src_p: TISCI_DEV_GPIO0

    u32Dst_p: TISCI_DEV_R5FSS0_CORE0

    By doing this, we basically mimic a bank interrupt, but the call to Sciclient_rmIrqSet only registers the interrupt to GPIO0_45, because the values we passed in resolve to "45" on this line:

      rmIrqReq.src_index = u32BankSrcIndexBase_p + u32BankNumber_p;

    Subsequent testing confirmed that by doing this, we successfully register and process the interrupt on one pin only.

    I do not believe that our ISR function is the issue, the issue is that we are only getting interrupts back up to the software layer when we register it for one pin, when what we really want is to get interrupts for a whole bank of pins. 

    Owen

  • Hello Owen,

    Thanks for your response.

    Can you please try with the below parameters and let us know the results?

    rmIrqReq.src_id                 = TISCI_DEV_GPIO0;
    rmIrqReq.src_index              = TISCI_BANK_SRC_IDX_BASE_GPIO0 + GPIO_GET_BANK_INDEX(45);
    rmIrqReq.dst_id                 = TISCI_DEV_R5FSS0_CORE0;
    rmIrqReq.dst_host_irq           = CSLR_R5FSS0_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_8;

    where TISCI_BANK_SRC_IDX_BASE_GPIO0 = 90U

    GPIO_GET_BANK_INDEX(45) will return 2U.

    Regards,

    Tushar

  • Tushar, unfortunately, this code is essentially what I tried in my original post (once the parameters are resolved). However, I tried the code snippet you provided and the call to Sciclient_rmIrqSet still failed. 

    Owen

  • We discovered the issue.

    Our device is running Linux on an A53 core. We have a Linux application which loads the FreeRTOS code (the code posted here) onto the R5 processor. Linux was apparently using the GPIO0 peripheral. We had to add a few lines to our device tree file to mark GPIO0 as "reserved", so that none of it is in use by Linux. Now we successfully register interrupts, and the code above did not change.