• Home
  • Raw
  • Download

Lines Matching +full:firmware +full:- +full:initialised

1 // SPDX-License-Identifier: GPL-2.0
8 #include <linux/arm-smccc.h>
37 * The call to use to reach the firmware.
44 /* entry point from firmware to arch asm code */
59 /* This pointer is handed to firmware as the event argument. */
115 if (err && (atomic_inc_return(&arg->errors) == 1)) in sdei_cross_call_return()
116 arg->first_error = err; in sdei_cross_call_return()
123 return -EOPNOTSUPP; in sdei_to_linux_errno()
125 return -EINVAL; in sdei_to_linux_errno()
127 return -EPERM; in sdei_to_linux_errno()
129 return -EINPROGRESS; in sdei_to_linux_errno()
131 return -ENOMEM; in sdei_to_linux_errno()
152 * sdei_mark_interface_broken(). -EIO is not an error returned in invoke_sdei_fn()
156 err = -EIO; in invoke_sdei_fn()
175 if (e->event_num == event_num) { in sdei_event_find()
211 err = -ENOMEM; in sdei_event_create()
215 INIT_LIST_HEAD(&event->list); in sdei_event_create()
216 event->event_num = event_num; in sdei_event_create()
222 event->priority = result; in sdei_event_create()
228 event->type = result; in sdei_event_create()
230 if (event->type == SDEI_EVENT_TYPE_SHARED) { in sdei_event_create()
233 err = -ENOMEM; in sdei_event_create()
237 reg->event_num = event->event_num; in sdei_event_create()
238 reg->priority = event->priority; in sdei_event_create()
240 reg->callback = cb; in sdei_event_create()
241 reg->callback_arg = cb_arg; in sdei_event_create()
242 event->registered = reg; in sdei_event_create()
249 err = -ENOMEM; in sdei_event_create()
256 reg->event_num = event->event_num; in sdei_event_create()
257 reg->priority = event->priority; in sdei_event_create()
258 reg->callback = cb; in sdei_event_create()
259 reg->callback_arg = cb_arg; in sdei_event_create()
262 event->private_registered = regs; in sdei_event_create()
266 list_add(&event->list, &sdei_list); in sdei_event_create()
281 list_del(&event->list); in sdei_event_destroy_llocked()
283 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_event_destroy_llocked()
284 kfree(event->registered); in sdei_event_destroy_llocked()
286 free_percpu(event->private_registered); in sdei_event_destroy_llocked()
308 if (err && err != -EIO) { in sdei_mask_local_cpu()
328 if (err && err != -EIO) { in sdei_unmask_local_cpu()
351 if (err && err != -EIO) in _ipi_private_reset()
364 pr_err("disabling SDEI firmware interface\n"); in sdei_mark_interface_broken()
395 err = sdei_api_event_enable(arg->event->event_num); in _local_event_enable()
402 int err = -EINVAL; in sdei_event_enable()
409 return -ENOENT; in sdei_event_enable()
414 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_event_enable()
415 err = sdei_api_event_enable(event->event_num); in sdei_event_enable()
421 event->reenable = true; in sdei_event_enable()
441 err = sdei_api_event_disable(arg->event->event_num); in _ipi_event_disable()
448 int err = -EINVAL; in sdei_event_disable()
455 return -ENOENT; in sdei_event_disable()
459 event->reenable = false; in sdei_event_disable()
462 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_event_disable()
463 err = sdei_api_event_disable(event->event_num); in sdei_event_disable()
483 err = sdei_api_event_unregister(arg->event->event_num); in _local_event_unregister()
499 err = -ENOENT; in sdei_event_unregister()
504 event->reregister = false; in sdei_event_unregister()
505 event->reenable = false; in sdei_event_unregister()
508 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_event_unregister()
509 err = sdei_api_event_unregister(event->event_num); in sdei_event_unregister()
524 * unregister events, but don't destroy them as they are re-registered by
535 if (event->type != SDEI_EVENT_TYPE_SHARED) in sdei_unregister_shared()
538 err = sdei_api_event_unregister(event->event_num); in sdei_unregister_shared()
563 reg = per_cpu_ptr(arg->event->private_registered, smp_processor_id()); in _local_event_register()
564 err = sdei_api_event_register(arg->event->event_num, sdei_entry_point, in _local_event_register()
580 err = -EBUSY; in sdei_event_register()
592 if (event->type == SDEI_EVENT_TYPE_SHARED) { in sdei_event_register()
593 err = sdei_api_event_register(event->event_num, in sdei_event_register()
595 event->registered, in sdei_event_register()
610 event->reregister = true; in sdei_event_register()
627 if (event->type != SDEI_EVENT_TYPE_SHARED) in sdei_reregister_shared()
630 if (event->reregister) { in sdei_reregister_shared()
631 err = sdei_api_event_register(event->event_num, in sdei_reregister_shared()
632 sdei_entry_point, event->registered, in sdei_reregister_shared()
635 pr_err("Failed to re-register event %u\n", in sdei_reregister_shared()
636 event->event_num); in sdei_reregister_shared()
642 if (event->reenable) { in sdei_reregister_shared()
643 err = sdei_api_event_enable(event->event_num); in sdei_reregister_shared()
645 pr_err("Failed to re-enable event %u\n", in sdei_reregister_shared()
646 event->event_num); in sdei_reregister_shared()
662 /* un-register private events */ in sdei_cpuhp_down()
665 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_cpuhp_down()
671 event->event_num, err); in sdei_cpuhp_down()
684 /* re-register/enable private events */ in sdei_cpuhp_up()
687 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_cpuhp_up()
690 if (event->reregister) { in sdei_cpuhp_up()
693 pr_err("Failed to re-register event %u: %d\n", in sdei_cpuhp_up()
694 event->event_num, err); in sdei_cpuhp_up()
698 if (event->reenable) { in sdei_cpuhp_up()
701 pr_err("Failed to re-enable event %u: %d\n", in sdei_cpuhp_up()
702 event->event_num, err); in sdei_cpuhp_up()
758 * The sequence is freeze->thaw. Reboot. freeze->restore. We unregister
759 * events during freeze, then re-register and re-enable them during thaw
780 /* re-register shared events */ in sdei_device_thaw()
783 pr_warn("Failed to re-register shared events...\n"); in sdei_device_thaw()
791 pr_warn("Failed to re-register CPU hotplug notifier...\n"); in sdei_device_thaw()
866 return -EOPNOTSUPP; in sdei_register_ghes()
868 event_num = ghes->generic->notify.vector; in sdei_register_ghes()
874 return -EINVAL; in sdei_register_ghes()
898 u32 event_num = ghes->generic->notify.vector; in sdei_unregister_ghes()
903 return -EOPNOTSUPP; in sdei_unregister_ghes()
915 if (err != -EINPROGRESS) in sdei_unregister_ghes()
927 struct device_node *np = pdev->dev.of_node; in sdei_get_conduit()
975 pr_info("SDEIv%d.%d (0x%x) detected in firmware.\n", in sdei_probe()
982 return -EINVAL; in sdei_probe()
1031 { .compatible = "arm,sdei-1.0" },
1089 * its events. ACPI is initialised from a subsys_initcall(), GHES is initialised
1099 u32 event_num = arg->event_num; in sdei_event_handler()
1111 err = arg->callback(event_num, regs, arg->callback_arg); in sdei_event_handler()