On 22/10/2024 09:58, Tudor Ambarus wrote: > >>>> >>>> I also cannot find any piece of code setting several of above, e.g. tx_base >>> >>> I'm not writing any SRAM configuration fields, these fields are used to >>> read/retrive the channel parameters from SRAM. >> >> I meany tx_base is always 0. Where is this property set? Ever? > > It's not zero. My assumption is it is set in the acpm firmware, but I Where is any assignment to this member? > don't have access to that to verify. Here are some debug prints made in > the linux driver: > > [ 0.069575][ T1] gs-acpm-ipc 17610000.mailbox: > exynos_mbox_chan_init ID = 2 poll = 1, mlen = 16, qlen = 5 > [ 0.069927][ T1] gs-acpm-ipc 17610000.mailbox: > exynos_mbox_chan_init ID = 2 offsets: rx_base = 0x00038290 rx_front = > 0x0003828c, rx_rear = 0x00038288 > [ 0.070449][ T1] gs-acpm-ipc 17610000.mailbox: > exynos_mbox_chan_init ID = 2 offsets: tx_base = 0x000382f0 tx_front = > 0x000382ec, tx_rear = 0x000382e8 > > > tx_base contains the SRAM offset of the RX queue used in linux. The > offset is relative to the base address of the SRAM config data. > > tx_base is seen/named from the firmware's point of view, thus named TX. > I assume the same struct is defined in the acpm firmware. > > > Somewhere below in the linux driver I get the RX ring base address by doing: > > rx->base = exynos_acpm_get_iomem_addr(base, &shmem_chan->tx_base); tx_base is still 0. > > where base is the SRAM base address of the channels configuration data. > > static void __iomem *exynos_acpm_get_iomem_addr(void __iomem *base, > > > void __iomem *addr) > > > { > > > u32 offset; > > > > > > offset = readl_relaxed(addr); > > > return base + offset; > > > } > > Hope this clarifies a bit these struct members. No, where is tx_base assigned? Best regards, Krzysztof