Lines Matching refs:imsic
159 static bool imsic_is_bad_it(struct imsic_data *imsic, size_t it) in imsic_is_bad_it() argument
161 assert(imsic == &imsic_data); in imsic_is_bad_it()
162 return (!it || it > imsic->num_ids); in imsic_is_bad_it()
168 struct imsic_data *imsic = container_of(chip, struct imsic_data, chip); in imsic_op_configure() local
171 if (imsic_is_bad_it(imsic, it)) in imsic_op_configure()
174 if (imsic->aplic_chip) { in imsic_op_configure()
175 res = interrupt_configure(imsic->aplic_chip, it, type, prio); in imsic_op_configure()
185 struct imsic_data *imsic = container_of(chip, struct imsic_data, chip); in imsic_op_enable() local
187 if (imsic_is_bad_it(imsic, it)) in imsic_op_enable()
190 if (imsic->aplic_chip) in imsic_op_enable()
191 interrupt_enable(imsic->aplic_chip, it); in imsic_op_enable()
197 struct imsic_data *imsic = container_of(chip, struct imsic_data, chip); in imsic_op_disable() local
199 if (imsic_is_bad_it(imsic, it)) in imsic_op_disable()
203 if (imsic->aplic_chip) in imsic_op_disable()
204 interrupt_disable(imsic->aplic_chip, it); in imsic_op_disable()
209 struct imsic_data *imsic = container_of(chip, struct imsic_data, chip); in imsic_op_raise_pi() local
211 if (imsic_is_bad_it(imsic, it)) in imsic_op_raise_pi()
228 struct imsic_data *imsic = &imsic_data; in imsic_init_base_addr() local
238 imsic->imsic_base = imsic_base; in imsic_init_base_addr()
239 imsic->size = IMSIC_SIZE; in imsic_init_base_addr()
240 imsic->targets_mmode = false; in imsic_init_base_addr()
241 imsic->num_ids = IMSIC_NUM_IDS; in imsic_init_base_addr()
242 imsic->guest_index_bits = IMSIC_GUEST_INDEX_BITS; in imsic_init_base_addr()
243 imsic->hart_index_bits = IMSIC_HART_INDEX_BITS; in imsic_init_base_addr()
244 imsic->group_index_bits = IMSIC_GROUP_INDEX_BITS; in imsic_init_base_addr()
245 imsic->group_index_shift = IMSIC_GROUP_INDEX_SHIFT; in imsic_init_base_addr()
250 struct imsic_data *imsic) in imisc_parse_fdt_node() argument
259 if (nodeoff < 0 || !imsic || !fdt) in imisc_parse_fdt_node()
265 imsic->imsic_base = core_mmu_get_va(reg_addr, MEM_AREA_IO_SEC, in imisc_parse_fdt_node()
267 if (!imsic->imsic_base) in imisc_parse_fdt_node()
269 imsic->size = reg_size; in imisc_parse_fdt_node()
271 imsic->targets_mmode = false; in imisc_parse_fdt_node()
277 imsic->targets_mmode = true; in imisc_parse_fdt_node()
287 imsic->guest_index_bits = fdt32_to_cpu(*val); in imisc_parse_fdt_node()
289 imsic->guest_index_bits = 0; in imisc_parse_fdt_node()
293 imsic->hart_index_bits = fdt32_to_cpu(*val); in imisc_parse_fdt_node()
295 imsic->hart_index_bits = in imisc_parse_fdt_node()
300 imsic->group_index_bits = fdt32_to_cpu(*val); in imisc_parse_fdt_node()
302 imsic->group_index_bits = 0; in imisc_parse_fdt_node()
306 imsic->group_index_shift = fdt32_to_cpu(*val); in imisc_parse_fdt_node()
308 imsic->group_index_shift = 2 * IMSIC_MMIO_PAGE_SHIFT; in imisc_parse_fdt_node()
312 imsic->num_ids = fdt32_to_cpu(*val); in imisc_parse_fdt_node()
320 static TEE_Result imsic_init_from_device_tree(struct imsic_data *imsic) in imsic_init_from_device_tree() argument
339 res = imisc_parse_fdt_node(fdt, node, imsic); in imsic_init_from_device_tree()
344 if (!imsic->targets_mmode) in imsic_init_from_device_tree()
355 struct imsic_data *imsic = &imsic_data; in imsic_it_handle() local
361 if (id > IMSIC_IPI_ID && id <= imsic->num_ids) in imsic_it_handle()
362 interrupt_call_handlers(&imsic->chip, id); in imsic_it_handle()
369 struct imsic_data *imsic = &imsic_data; in imsic_init_per_hart() local
371 imsic_local_eix_update(1, imsic->num_ids, false, false); in imsic_init_per_hart()
378 struct imsic_data *imsic = &imsic_data; in imsic_init() local
382 res = imsic_init_from_device_tree(imsic); in imsic_init()
389 imsic->chip.ops = &imsic_ops; in imsic_init()
393 imsic->aplic_chip = interrupt_get_main_chip(); in imsic_init()
395 interrupt_main_init(&imsic->chip); in imsic_init()