Example #1
0
File: smd.c Project: sndnvaps/lk-1
int smd_init(smd_channel_info_t *ch, uint32_t ch_type)
{
	unsigned ret = 0;

	smd_channel_alloc_entry = (smd_channel_alloc_entry_t*)memalign(CACHE_LINE, SMD_CHANNEL_ALLOC_MAX);
	ASSERT(smd_channel_alloc_entry);

	ret = smem_read_alloc_entry(SMEM_CHANNEL_ALLOC_TBL,
							(void*)smd_channel_alloc_entry,
							SMD_CHANNEL_ALLOC_MAX);
	if(ret)
	{
		dprintf(CRITICAL,"ERROR reading smem channel alloc tbl\n");
		return -1;
	}

	smd_get_channel_info(ch, ch_type);

	register_int_handler(SMD_IRQ, smd_irq_handler, ch);
	unmask_interrupt(SMD_IRQ);

	smd_set_state(ch, SMD_SS_OPENING, 1);

	smd_notify_rpm();

	return 0;
}
Example #2
0
File: smd.c Project: jaehyek/lk
int smd_init(smd_channel_info_t *ch, uint32_t ch_type)
{
	unsigned ret = 0;
	int chnl_found = 0;
	uint64_t timeout = SMD_CHANNEL_ACCESS_RETRY;

	smd_channel_alloc_entry = (smd_channel_alloc_entry_t*)memalign(CACHE_LINE, SMD_CHANNEL_ALLOC_MAX);
	ASSERT(smd_channel_alloc_entry);

	dprintf(INFO, "Waiting for the RPM to populate smd channel table\n");

	do
	{
		ret = smem_read_alloc_entry(SMEM_CHANNEL_ALLOC_TBL,
									(void*)smd_channel_alloc_entry,
									SMD_CHANNEL_ALLOC_MAX);
		if(ret)
		{
			dprintf(CRITICAL,"ERROR reading smem channel alloc tbl\n");
			return -1;
		}

		chnl_found = smd_get_channel_info(ch, ch_type);
		timeout--;
		udelay(10);
	} while(timeout && chnl_found);

	if (!timeout)
	{
		dprintf(CRITICAL, "Apps timed out waiting for RPM-->APPS channel entry\n");
		ASSERT(0);
	}

	register_int_handler(SMD_IRQ, smd_irq_handler, ch);

	smd_set_state(ch, SMD_SS_OPENING, 1);

	smd_notify_rpm();

	unmask_interrupt(SMD_IRQ);

	return 0;
}