コード例 #1
0
static int stop_pmu(void)
{
	u32 intenc_value;
	u32 flag_value;
	u32 pmnc_value;

	intenc_value = 0xffffffff;
	flag_value   = 0xffffffff;

	/* disable all counters */
	pmnc_value = PJ4_Read_PMNC();
	pmnc_value &= ~0x1;
	PJ4_Write_PMNC(pmnc_value);

	/* clear overflow flags */
	PJ4_Write_FLAG(flag_value);

	/* disable all interrupts */
	PJ4_Write_INTENC(intenc_value);

	/* We need to save the PMU counter value for calibration result before calling free_pmu()
 	 * because free_pmu() may cause these registers be modified by IPM */
 	reg_value[COUNTER_PJ4_PMU_CCNT] = PJ4_ReadPMUCounter(COUNTER_PJ4_PMU_CCNT);
	reg_value[COUNTER_PJ4_PMU_PMN0] = PJ4_ReadPMUCounter(COUNTER_PJ4_PMU_PMN0);
	reg_value[COUNTER_PJ4_PMU_PMN1] = PJ4_ReadPMUCounter(COUNTER_PJ4_PMU_PMN1);
	reg_value[COUNTER_PJ4_PMU_PMN2] = PJ4_ReadPMUCounter(COUNTER_PJ4_PMU_PMN2);
	reg_value[COUNTER_PJ4_PMU_PMN3] = PJ4_ReadPMUCounter(COUNTER_PJ4_PMU_PMN3);

	unregister_pmu_isr();

	free_pmu();
	
	return 0;
}
コード例 #2
0
ファイル: isr.c プロジェクト: ashang/xpenology-3.x
static int stop_ebs(void)
{
	int ret = 0;

	if (is_pmu_enabled())
	{
		on_each_cpu(stop_pmu, NULL, 1);

		ret = unregister_pmu_isr();
		if (ret != 0)
		{
			return ret;
		}

		ret = free_pmu();
		if (ret != 0)
		{
			return ret;
		}

		unregister_hotcpu_notifier(&cpu_notifier_for_pmu);
	}

	return 0;
}
コード例 #3
0
static int stop_pmu(void)
{
	unsigned int inten_value;
	unsigned int pmnc_value;
	unsigned int flag_value;

	inten_value  = 0x0;
	flag_value = 0x1f;

	pmnc_value = ReadPMUReg(PXA2_PMU_PMNC);

	/* disable the counters */
	pmnc_value |= 0x10;
	pmnc_value &= ~0x1;

	WritePMUReg(PXA2_PMU_PMNC, pmnc_value);
	WritePMUReg(PXA2_PMU_INTEN, inten_value);
	WritePMUReg(PXA2_PMU_FLAG, flag_value);

	/* We need to save the PMU counter value for calibration result before calling free_pmu()
 	 * because free_pmu() may cause these registers be modified by IPM */
 	reg_value[COUNTER_PXA2_PMU_CCNT] = ReadPMUReg(PXA2_PMU_CCNT);
	reg_value[COUNTER_PXA2_PMU_PMN0] = ReadPMUReg(PXA2_PMU_PMN0);
	reg_value[COUNTER_PXA2_PMU_PMN1] = ReadPMUReg(PXA2_PMU_PMN1);
	reg_value[COUNTER_PXA2_PMU_PMN2] = ReadPMUReg(PXA2_PMU_PMN2);
	reg_value[COUNTER_PXA2_PMU_PMN3] = ReadPMUReg(PXA2_PMU_PMN3);

	unregister_pmu_isr();

	free_pmu();

	return 0;
}
コード例 #4
0
ファイル: isr.c プロジェクト: ashang/xpenology-3.x
static int stop_pmu(void)
{
	int i;
	u32 cor_value[PJ1_PMN_NUM];
	u32 inten_value;
	u32 flag_value;

	inten_value  = 0x0;
	flag_value = 0xf;

	/* disable all counters */
	cor_value[0] = PJ1_ReadCOR(PJ1_PMU_COR0);
	cor_value[1] = PJ1_ReadCOR(PJ1_PMU_COR1);
	cor_value[2] = PJ1_ReadCOR(PJ1_PMU_COR2);
	cor_value[3] = PJ1_ReadCOR(PJ1_PMU_COR3);

	for (i=0; i<PJ1_PMN_NUM; i++)
	{
		cor_value[i] &= ~0x1;
	}

	PJ1_WriteCOR(PJ1_PMU_COR0, cor_value[0]);
	PJ1_WriteCOR(PJ1_PMU_COR1, cor_value[1]);
	PJ1_WriteCOR(PJ1_PMU_COR2, cor_value[2]);
	PJ1_WriteCOR(PJ1_PMU_COR3, cor_value[3]);

	/* clear overflow flags */
	PJ1_WriteFLAG(flag_value);

	/* disable all interrupts */
	PJ1_WriteINTEN(inten_value);

	/* We need to save the PMU counter value for calibration result before calling free_pmu()
	 * because free_pmu() may cause these registers be modified by IPM */
	reg_value[COUNTER_PJ1_PMU_PMN0] = PJ1_ReadCounter(PJ1_PMU_PMN0);
	reg_value[COUNTER_PJ1_PMU_PMN1] = PJ1_ReadCounter(PJ1_PMU_PMN1);
	reg_value[COUNTER_PJ1_PMU_PMN2] = PJ1_ReadCounter(PJ1_PMU_PMN2);
	reg_value[COUNTER_PJ1_PMU_PMN3] = PJ1_ReadCounter(PJ1_PMU_PMN3);

	/* There is no PMU interrupt in Avanta */
#if !defined(PX_SOC_AVANTA)
	unregister_pmu_isr();
#endif

	free_pmu();

	return 0;
}