/**
 * @brief register prcmu handler
 *
 * @param fops
 */
void __init prcmu_early_init(void)
{
	int i, ret = 0;
	struct prcmu_fops_register_data *data;
	if (cpu_is_u9540())
		data =  dbx540_prcmu_early_init();
	else
		data = db8500_prcmu_early_init();

	if (data == NULL)
		return;

	dbx500_prcmu_init_ctx();

	for (i = 0; i < data->size; i++) {
		switch (data->tab[i].fops) {
		case PRCMU_EARLY:
			dbx500_prcmu_context.pearly = data->tab[i].data.pearly;
			break;
		case PRCMU_VAL:
			dbx500_prcmu_register_pval(data->tab[i].data.pval,
					data->tab[i].size);
			break;
		case PRCMU_OUT:
			dbx500_prcmu_register_pout(data->tab[i].data.pout,
					data->tab[i].size);
			break;
		default:
			dbx500_prcmu_error("ops out of range");
			ret = -EIO;
		}
	}
	return;
}
Exemple #2
0
void __init ux500_init_irq(void)
{
	void __iomem *dist_base;
	void __iomem *cpu_base;

	if (cpu_is_u5500()) {
		dist_base = __io_address(U5500_GIC_DIST_BASE);
		cpu_base = __io_address(U5500_GIC_CPU_BASE);
	} else if (cpu_is_u8500()) {
		dist_base = __io_address(U8500_GIC_DIST_BASE);
		cpu_base = __io_address(U8500_GIC_CPU_BASE);
	} else
		ux500_unknown_soc();

#ifdef CONFIG_OF
	if (of_have_populated_dt())
		of_irq_init(ux500_dt_irq_match);
	else
#endif
		gic_init(0, 29, dist_base, cpu_base);

	if (cpu_is_u5500())
		db5500_prcmu_early_init();
	if (cpu_is_u8500())
		db8500_prcmu_early_init();
	clk_init();
}