コード例 #1
0
static void IRQ_SoftInt_Clear(void)
{
	*(volatile UInt32*)(KONA_BINTC_BASE_ADDR + BINTC_ISWIR0_CLR_OFFSET) =
		1<<IRQ_TO_BMIRQ(DSP_OTOAINT);
	*(volatile UInt32*)(KONA_BINTC_BASE_ADDR + BINTC_ICR0_OFFSET) =
		1<<IRQ_TO_BMIRQ(DSP_OTOAINT);

	return;
}
コード例 #2
0
static UInt32 IRQ_EnableRIPInt(void)
{
	chal_bmintc_enable_interrupt(dsp_drv.h, BINTC_OUT_DEST_AP2DSP,
				     (UInt32) IRQ_TO_BMIRQ(AP_RIP_IRQ));

	return 1;
}
コード例 #3
0
static void IRQ_EnableRIPInt(void)
{
	unsigned int x;
	void __iomem *chipreg_base = (void __iomem *)(KONA_CHIPREG_VA);
	void __iomem *base = (void __iomem *)(KONA_BINTC_BASE_ADDR);

	 if (vp_shared_mem->shared_dsp_support_chip_reg_ap_int) {
		 vp_shared_mem->shared_ap_support_chip_reg_ap_int = 1;
		 aTrace(LOG_AUDIO_DSP, "\n\r\t*IRQ_EnableRIPInt: New Int*\n\r");
		 writel((1<<CHIPREG_OUTPUT12),
		 	(base + BINTC_IMR0_15_SET_OFFSET));

		 //Programming Ap2DSP as wakeup event for power manager
	writel((1<<CHIPREG_OUTPUT12),(base + BINTC_IMR0_9_SET_OFFSET));

	x=readl(chipreg_base + CHIPREG_MDM_SW_INTR_SEL_OFFSET);
	x|=(1<<CHIPREG_OUTPUT12);
	writel(x,(chipreg_base + CHIPREG_MDM_SW_INTR_SEL_OFFSET));
	 } else {
		 aTrace(LOG_AUDIO_DSP, "\n\r\t*IRQ_EnableRIPInt: Old Int*\n\r");
		 vp_shared_mem->shared_ap_support_chip_reg_ap_int = 0;
		 *(volatile UInt32*)(KONA_BINTC_BASE_ADDR +
			 BINTC_IMR1_0_SET_OFFSET +
			 BINTC_OUT_DEST_AP2DSP*BMREG_BLOCK_SIZE) =
			 1<<(IRQ_TO_BMIRQ(AP_RIP_IRQ)-32);
	 }
	 printk(KERN_INFO "\n\r\t*IRQ_EnableRIPInt "
	 	" shared_dsp_support_chip_reg_ap_int = %x*\n\r"
	 	"\n\r\t* shared_ap_support_chip_reg_ap_int = %x*\n\r",
	 	vp_shared_mem->shared_dsp_support_chip_reg_ap_int,
	 	vp_shared_mem->shared_ap_support_chip_reg_ap_int);


	return;
}
コード例 #4
0
void intc_trigger_softirq(unsigned int irq)
{

    void __iomem *chipreg_base = (void __iomem *)(KONA_CHIPREG_VA);
	unsigned int birq = IRQ_TO_BMIRQ(IRQ_IPC_A2C);

	/* convert to BModem IRQ */

	unsigned long flags;
	unsigned int ReadData=0;;
	/* removed printouts */
	/* printk("intc_trigger_softirq\n"); */
	spin_lock_irqsave(&intc_lock, flags);

	// This SEL code is for safety only, bits in this register are shared for some other operations
	//This is additional read and write to register and may cause extra dealy. 
	// if the code stability is proven , we can remove this code below 3 lines INTR_SEL.
	ReadData=readl(chipreg_base + CHIPREG_MDM_SW_INTR_SEL_OFFSET   );
	ReadData|=(1<<birq);
    writel(ReadData, chipreg_base + CHIPREG_MDM_SW_INTR_SEL_OFFSET  );

	writel((1<<birq), chipreg_base + CHIPREG_MDM_SW_INTR_SET_OFFSET	);

		

	
	spin_unlock_irqrestore(&intc_lock, flags);
}
コード例 #5
0
static void IRQ_Enable_BModem_Interrupt(void)
{
	*(volatile UInt32*)(KONA_BINTC_BASE_ADDR + BINTC_IMR0_0_SET_OFFSET +
		BINTC_OUT_DEST_6*BMREG_BLOCK_SIZE) =
		1<<IRQ_TO_BMIRQ(DSP_OTOAINT);

	return;
}
コード例 #6
0
static irqreturn_t ipcs_interrupt(int irq, void *dev_id)
{
	void __iomem *base = (void __iomem *)(KONA_BINTC_BASE_ADDR);
	int birq = IRQ_TO_BMIRQ(IRQ_IPC_C2A_BINTC);	//55;

	/* Clear the interrupt */
	if (birq >= 32)
		writel(1 << (birq - 32),
		       base + BINTC_ISWIR1_CLR_OFFSET /*0x34 */ );
	else
		writel(1 << (birq), base + BINTC_ISWIR0_CLR_OFFSET /*0x24 */ );

#ifdef CONFIG_HAS_WAKELOCK
	wake_lock(&ipc_wake_lock);
#endif
	tasklet_schedule(&g_ipc_info.intr_tasklet);

	return IRQ_HANDLED;
}
コード例 #7
0
static void IRQ_TriggerRIPInt(void)
{
	 void __iomem *chipreg_base = (void __iomem *)(KONA_CHIPREG_VA);

	 /* Forcing new interrupt in case DSP woke up after the Interrupt */
	 /* was enabled */
	 if ((vp_shared_mem->shared_ap_support_chip_reg_ap_int == 0) &&
		 (vp_shared_mem->shared_dsp_support_chip_reg_ap_int == 1))
		 IRQ_EnableRIPInt();

	 if (vp_shared_mem->shared_ap_support_chip_reg_ap_int) {
		 aTrace(LOG_AUDIO_DSP, "\n\r\t*IRQ_TriggerRIPInt: New Int*\n\r");
		 writel((1<<CHIPREG_OUTPUT12), (chipreg_base +
		 	CHIPREG_MDM_SW_INTR_SET_OFFSET));
	 } else {
		 aTrace(LOG_AUDIO_DSP, "\n\r\t*IRQ_TriggerRIPInt: Old Int*\n\r");
		 *(volatile UInt32*)(KONA_BINTC_BASE_ADDR +
		 BINTC_ISWIR1_OFFSET) = 1<<(IRQ_TO_BMIRQ(AP_RIP_IRQ)-32);
	 }


	return;
}
コード例 #8
0
static void IRQ_SoftInt_Clear(InterruptId_t Id)
{
	chal_bmintc_clear_soft_int(dsp_drv.h, IRQ_TO_BMIRQ(Id));
	chal_bmintc_clear_interrupt(dsp_drv.h, IRQ_TO_BMIRQ(Id));
}
コード例 #9
0
static void IRQ_TriggerRIPInt(void)
{
	chal_bmintc_set_soft_int(dsp_drv.h, (UInt32) IRQ_TO_BMIRQ(AP_RIP_IRQ));
}
コード例 #10
0
static void IRQ_Enable_BModem_Interrupt(InterruptId_t Id, UInt32 DstID)
{
	chal_bmintc_enable_interrupt(dsp_drv.h, DstID,
				     (UInt32) IRQ_TO_BMIRQ(Id));
	return;
}