/** * @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; }
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(); }