cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

bus.c (38160B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *  acpi_bus.c - ACPI Bus Driver ($Revision: 80 $)
      4 *
      5 *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
      6 */
      7
      8#define pr_fmt(fmt) "ACPI: " fmt
      9
     10#include <linux/module.h>
     11#include <linux/init.h>
     12#include <linux/ioport.h>
     13#include <linux/kernel.h>
     14#include <linux/list.h>
     15#include <linux/sched.h>
     16#include <linux/pm.h>
     17#include <linux/device.h>
     18#include <linux/proc_fs.h>
     19#include <linux/acpi.h>
     20#include <linux/slab.h>
     21#include <linux/regulator/machine.h>
     22#include <linux/workqueue.h>
     23#include <linux/reboot.h>
     24#include <linux/delay.h>
     25#ifdef CONFIG_X86
     26#include <asm/mpspec.h>
     27#include <linux/dmi.h>
     28#endif
     29#include <linux/acpi_agdi.h>
     30#include <linux/acpi_iort.h>
     31#include <linux/acpi_viot.h>
     32#include <linux/pci.h>
     33#include <acpi/apei.h>
     34#include <linux/suspend.h>
     35#include <linux/prmt.h>
     36
     37#include "internal.h"
     38
     39struct acpi_device *acpi_root;
     40struct proc_dir_entry *acpi_root_dir;
     41EXPORT_SYMBOL(acpi_root_dir);
     42
     43#ifdef CONFIG_X86
     44#ifdef CONFIG_ACPI_CUSTOM_DSDT
     45static inline int set_copy_dsdt(const struct dmi_system_id *id)
     46{
     47	return 0;
     48}
     49#else
     50static int set_copy_dsdt(const struct dmi_system_id *id)
     51{
     52	pr_notice("%s detected - force copy of DSDT to local memory\n", id->ident);
     53	acpi_gbl_copy_dsdt_locally = 1;
     54	return 0;
     55}
     56#endif
     57
     58static const struct dmi_system_id dsdt_dmi_table[] __initconst = {
     59	/*
     60	 * Invoke DSDT corruption work-around on all Toshiba Satellite.
     61	 * https://bugzilla.kernel.org/show_bug.cgi?id=14679
     62	 */
     63	{
     64	 .callback = set_copy_dsdt,
     65	 .ident = "TOSHIBA Satellite",
     66	 .matches = {
     67		DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
     68		DMI_MATCH(DMI_PRODUCT_NAME, "Satellite"),
     69		},
     70	},
     71	{}
     72};
     73#endif
     74
     75/* --------------------------------------------------------------------------
     76                                Device Management
     77   -------------------------------------------------------------------------- */
     78
     79acpi_status acpi_bus_get_status_handle(acpi_handle handle,
     80				       unsigned long long *sta)
     81{
     82	acpi_status status;
     83
     84	status = acpi_evaluate_integer(handle, "_STA", NULL, sta);
     85	if (ACPI_SUCCESS(status))
     86		return AE_OK;
     87
     88	if (status == AE_NOT_FOUND) {
     89		*sta = ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED |
     90		       ACPI_STA_DEVICE_UI      | ACPI_STA_DEVICE_FUNCTIONING;
     91		return AE_OK;
     92	}
     93	return status;
     94}
     95EXPORT_SYMBOL_GPL(acpi_bus_get_status_handle);
     96
     97int acpi_bus_get_status(struct acpi_device *device)
     98{
     99	acpi_status status;
    100	unsigned long long sta;
    101
    102	if (acpi_device_override_status(device, &sta)) {
    103		acpi_set_device_status(device, sta);
    104		return 0;
    105	}
    106
    107	/* Battery devices must have their deps met before calling _STA */
    108	if (acpi_device_is_battery(device) && device->dep_unmet) {
    109		acpi_set_device_status(device, 0);
    110		return 0;
    111	}
    112
    113	status = acpi_bus_get_status_handle(device->handle, &sta);
    114	if (ACPI_FAILURE(status))
    115		return -ENODEV;
    116
    117	acpi_set_device_status(device, sta);
    118
    119	if (device->status.functional && !device->status.present) {
    120		pr_debug("Device [%s] status [%08x]: functional but not present\n",
    121			 device->pnp.bus_id, (u32)sta);
    122	}
    123
    124	pr_debug("Device [%s] status [%08x]\n", device->pnp.bus_id, (u32)sta);
    125	return 0;
    126}
    127EXPORT_SYMBOL(acpi_bus_get_status);
    128
    129void acpi_bus_private_data_handler(acpi_handle handle,
    130				   void *context)
    131{
    132	return;
    133}
    134EXPORT_SYMBOL(acpi_bus_private_data_handler);
    135
    136int acpi_bus_attach_private_data(acpi_handle handle, void *data)
    137{
    138	acpi_status status;
    139
    140	status = acpi_attach_data(handle,
    141			acpi_bus_private_data_handler, data);
    142	if (ACPI_FAILURE(status)) {
    143		acpi_handle_debug(handle, "Error attaching device data\n");
    144		return -ENODEV;
    145	}
    146
    147	return 0;
    148}
    149EXPORT_SYMBOL_GPL(acpi_bus_attach_private_data);
    150
    151int acpi_bus_get_private_data(acpi_handle handle, void **data)
    152{
    153	acpi_status status;
    154
    155	if (!data)
    156		return -EINVAL;
    157
    158	status = acpi_get_data(handle, acpi_bus_private_data_handler, data);
    159	if (ACPI_FAILURE(status)) {
    160		acpi_handle_debug(handle, "No context for object\n");
    161		return -ENODEV;
    162	}
    163
    164	return 0;
    165}
    166EXPORT_SYMBOL_GPL(acpi_bus_get_private_data);
    167
    168void acpi_bus_detach_private_data(acpi_handle handle)
    169{
    170	acpi_detach_data(handle, acpi_bus_private_data_handler);
    171}
    172EXPORT_SYMBOL_GPL(acpi_bus_detach_private_data);
    173
    174static void acpi_print_osc_error(acpi_handle handle,
    175				 struct acpi_osc_context *context, char *error)
    176{
    177	int i;
    178
    179	acpi_handle_debug(handle, "(%s): %s\n", context->uuid_str, error);
    180
    181	pr_debug("_OSC request data:");
    182	for (i = 0; i < context->cap.length; i += sizeof(u32))
    183		pr_debug(" %x", *((u32 *)(context->cap.pointer + i)));
    184
    185	pr_debug("\n");
    186}
    187
    188acpi_status acpi_run_osc(acpi_handle handle, struct acpi_osc_context *context)
    189{
    190	acpi_status status;
    191	struct acpi_object_list input;
    192	union acpi_object in_params[4];
    193	union acpi_object *out_obj;
    194	guid_t guid;
    195	u32 errors;
    196	struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL};
    197
    198	if (!context)
    199		return AE_ERROR;
    200	if (guid_parse(context->uuid_str, &guid))
    201		return AE_ERROR;
    202	context->ret.length = ACPI_ALLOCATE_BUFFER;
    203	context->ret.pointer = NULL;
    204
    205	/* Setting up input parameters */
    206	input.count = 4;
    207	input.pointer = in_params;
    208	in_params[0].type 		= ACPI_TYPE_BUFFER;
    209	in_params[0].buffer.length 	= 16;
    210	in_params[0].buffer.pointer	= (u8 *)&guid;
    211	in_params[1].type 		= ACPI_TYPE_INTEGER;
    212	in_params[1].integer.value 	= context->rev;
    213	in_params[2].type 		= ACPI_TYPE_INTEGER;
    214	in_params[2].integer.value	= context->cap.length/sizeof(u32);
    215	in_params[3].type		= ACPI_TYPE_BUFFER;
    216	in_params[3].buffer.length 	= context->cap.length;
    217	in_params[3].buffer.pointer 	= context->cap.pointer;
    218
    219	status = acpi_evaluate_object(handle, "_OSC", &input, &output);
    220	if (ACPI_FAILURE(status))
    221		return status;
    222
    223	if (!output.length)
    224		return AE_NULL_OBJECT;
    225
    226	out_obj = output.pointer;
    227	if (out_obj->type != ACPI_TYPE_BUFFER
    228		|| out_obj->buffer.length != context->cap.length) {
    229		acpi_print_osc_error(handle, context,
    230			"_OSC evaluation returned wrong type");
    231		status = AE_TYPE;
    232		goto out_kfree;
    233	}
    234	/* Need to ignore the bit0 in result code */
    235	errors = *((u32 *)out_obj->buffer.pointer) & ~(1 << 0);
    236	if (errors) {
    237		if (errors & OSC_REQUEST_ERROR)
    238			acpi_print_osc_error(handle, context,
    239				"_OSC request failed");
    240		if (errors & OSC_INVALID_UUID_ERROR)
    241			acpi_print_osc_error(handle, context,
    242				"_OSC invalid UUID");
    243		if (errors & OSC_INVALID_REVISION_ERROR)
    244			acpi_print_osc_error(handle, context,
    245				"_OSC invalid revision");
    246		if (errors & OSC_CAPABILITIES_MASK_ERROR) {
    247			if (((u32 *)context->cap.pointer)[OSC_QUERY_DWORD]
    248			    & OSC_QUERY_ENABLE)
    249				goto out_success;
    250			status = AE_SUPPORT;
    251			goto out_kfree;
    252		}
    253		status = AE_ERROR;
    254		goto out_kfree;
    255	}
    256out_success:
    257	context->ret.length = out_obj->buffer.length;
    258	context->ret.pointer = kmemdup(out_obj->buffer.pointer,
    259				       context->ret.length, GFP_KERNEL);
    260	if (!context->ret.pointer) {
    261		status =  AE_NO_MEMORY;
    262		goto out_kfree;
    263	}
    264	status =  AE_OK;
    265
    266out_kfree:
    267	kfree(output.pointer);
    268	return status;
    269}
    270EXPORT_SYMBOL(acpi_run_osc);
    271
    272bool osc_sb_apei_support_acked;
    273
    274/*
    275 * ACPI 6.0 Section 8.4.4.2 Idle State Coordination
    276 * OSPM supports platform coordinated low power idle(LPI) states
    277 */
    278bool osc_pc_lpi_support_confirmed;
    279EXPORT_SYMBOL_GPL(osc_pc_lpi_support_confirmed);
    280
    281/*
    282 * ACPI 6.2 Section 6.2.11.2 'Platform-Wide OSPM Capabilities':
    283 *   Starting with ACPI Specification 6.2, all _CPC registers can be in
    284 *   PCC, System Memory, System IO, or Functional Fixed Hardware address
    285 *   spaces. OSPM support for this more flexible register space scheme is
    286 *   indicated by the “Flexible Address Space for CPPC Registers” _OSC bit.
    287 *
    288 * Otherwise (cf ACPI 6.1, s8.4.7.1.1.X), _CPC registers must be in:
    289 * - PCC or Functional Fixed Hardware address space if defined
    290 * - SystemMemory address space (NULL register) if not defined
    291 */
    292bool osc_cpc_flexible_adr_space_confirmed;
    293EXPORT_SYMBOL_GPL(osc_cpc_flexible_adr_space_confirmed);
    294
    295/*
    296 * ACPI 6.4 Operating System Capabilities for USB.
    297 */
    298bool osc_sb_native_usb4_support_confirmed;
    299EXPORT_SYMBOL_GPL(osc_sb_native_usb4_support_confirmed);
    300
    301bool osc_sb_cppc2_support_acked;
    302
    303static u8 sb_uuid_str[] = "0811B06E-4A27-44F9-8D60-3CBBC22E7B48";
    304static void acpi_bus_osc_negotiate_platform_control(void)
    305{
    306	u32 capbuf[2], *capbuf_ret;
    307	struct acpi_osc_context context = {
    308		.uuid_str = sb_uuid_str,
    309		.rev = 1,
    310		.cap.length = 8,
    311		.cap.pointer = capbuf,
    312	};
    313	acpi_handle handle;
    314
    315	capbuf[OSC_QUERY_DWORD] = OSC_QUERY_ENABLE;
    316	capbuf[OSC_SUPPORT_DWORD] = OSC_SB_PR3_SUPPORT; /* _PR3 is in use */
    317	if (IS_ENABLED(CONFIG_ACPI_PROCESSOR_AGGREGATOR))
    318		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PAD_SUPPORT;
    319	if (IS_ENABLED(CONFIG_ACPI_PROCESSOR))
    320		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PPC_OST_SUPPORT;
    321
    322	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_HOTPLUG_OST_SUPPORT;
    323	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PCLPI_SUPPORT;
    324	if (IS_ENABLED(CONFIG_ACPI_PRMT))
    325		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_PRM_SUPPORT;
    326
    327#ifdef CONFIG_ARM64
    328	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_GENERIC_INITIATOR_SUPPORT;
    329#endif
    330#ifdef CONFIG_X86
    331	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_GENERIC_INITIATOR_SUPPORT;
    332#endif
    333
    334#ifdef CONFIG_ACPI_CPPC_LIB
    335	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_SUPPORT;
    336	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPCV2_SUPPORT;
    337#endif
    338
    339	capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_FLEXIBLE_ADR_SPACE;
    340
    341	if (IS_ENABLED(CONFIG_SCHED_MC_PRIO))
    342		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_CPC_DIVERSE_HIGH_SUPPORT;
    343
    344	if (IS_ENABLED(CONFIG_USB4))
    345		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_NATIVE_USB4_SUPPORT;
    346
    347	if (!ghes_disable)
    348		capbuf[OSC_SUPPORT_DWORD] |= OSC_SB_APEI_SUPPORT;
    349	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)))
    350		return;
    351
    352	if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
    353		return;
    354
    355	capbuf_ret = context.ret.pointer;
    356	if (context.ret.length <= OSC_SUPPORT_DWORD) {
    357		kfree(context.ret.pointer);
    358		return;
    359	}
    360
    361	/*
    362	 * Now run _OSC again with query flag clear and with the caps
    363	 * supported by both the OS and the platform.
    364	 */
    365	capbuf[OSC_QUERY_DWORD] = 0;
    366	capbuf[OSC_SUPPORT_DWORD] = capbuf_ret[OSC_SUPPORT_DWORD];
    367	kfree(context.ret.pointer);
    368
    369	if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
    370		return;
    371
    372	capbuf_ret = context.ret.pointer;
    373	if (context.ret.length > OSC_SUPPORT_DWORD) {
    374#ifdef CONFIG_ACPI_CPPC_LIB
    375		osc_sb_cppc2_support_acked = capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_CPCV2_SUPPORT;
    376#endif
    377
    378		osc_sb_apei_support_acked =
    379			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
    380		osc_pc_lpi_support_confirmed =
    381			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
    382		osc_sb_native_usb4_support_confirmed =
    383			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_NATIVE_USB4_SUPPORT;
    384		osc_cpc_flexible_adr_space_confirmed =
    385			capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_CPC_FLEXIBLE_ADR_SPACE;
    386	}
    387
    388	kfree(context.ret.pointer);
    389}
    390
    391/*
    392 * Native control of USB4 capabilities. If any of the tunneling bits is
    393 * set it means OS is in control and we use software based connection
    394 * manager.
    395 */
    396u32 osc_sb_native_usb4_control;
    397EXPORT_SYMBOL_GPL(osc_sb_native_usb4_control);
    398
    399static void acpi_bus_decode_usb_osc(const char *msg, u32 bits)
    400{
    401	pr_info("%s USB3%c DisplayPort%c PCIe%c XDomain%c\n", msg,
    402	       (bits & OSC_USB_USB3_TUNNELING) ? '+' : '-',
    403	       (bits & OSC_USB_DP_TUNNELING) ? '+' : '-',
    404	       (bits & OSC_USB_PCIE_TUNNELING) ? '+' : '-',
    405	       (bits & OSC_USB_XDOMAIN) ? '+' : '-');
    406}
    407
    408static u8 sb_usb_uuid_str[] = "23A0D13A-26AB-486C-9C5F-0FFA525A575A";
    409static void acpi_bus_osc_negotiate_usb_control(void)
    410{
    411	u32 capbuf[3];
    412	struct acpi_osc_context context = {
    413		.uuid_str = sb_usb_uuid_str,
    414		.rev = 1,
    415		.cap.length = sizeof(capbuf),
    416		.cap.pointer = capbuf,
    417	};
    418	acpi_handle handle;
    419	acpi_status status;
    420	u32 control;
    421
    422	if (!osc_sb_native_usb4_support_confirmed)
    423		return;
    424
    425	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)))
    426		return;
    427
    428	control = OSC_USB_USB3_TUNNELING | OSC_USB_DP_TUNNELING |
    429		  OSC_USB_PCIE_TUNNELING | OSC_USB_XDOMAIN;
    430
    431	capbuf[OSC_QUERY_DWORD] = 0;
    432	capbuf[OSC_SUPPORT_DWORD] = 0;
    433	capbuf[OSC_CONTROL_DWORD] = control;
    434
    435	status = acpi_run_osc(handle, &context);
    436	if (ACPI_FAILURE(status))
    437		return;
    438
    439	if (context.ret.length != sizeof(capbuf)) {
    440		pr_info("USB4 _OSC: returned invalid length buffer\n");
    441		goto out_free;
    442	}
    443
    444	osc_sb_native_usb4_control =
    445		control &  acpi_osc_ctx_get_pci_control(&context);
    446
    447	acpi_bus_decode_usb_osc("USB4 _OSC: OS supports", control);
    448	acpi_bus_decode_usb_osc("USB4 _OSC: OS controls",
    449				osc_sb_native_usb4_control);
    450
    451out_free:
    452	kfree(context.ret.pointer);
    453}
    454
    455/* --------------------------------------------------------------------------
    456                             Notification Handling
    457   -------------------------------------------------------------------------- */
    458
    459/**
    460 * acpi_bus_notify
    461 * ---------------
    462 * Callback for all 'system-level' device notifications (values 0x00-0x7F).
    463 */
    464static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
    465{
    466	struct acpi_device *adev;
    467	struct acpi_driver *driver;
    468	u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
    469	bool hotplug_event = false;
    470
    471	switch (type) {
    472	case ACPI_NOTIFY_BUS_CHECK:
    473		acpi_handle_debug(handle, "ACPI_NOTIFY_BUS_CHECK event\n");
    474		hotplug_event = true;
    475		break;
    476
    477	case ACPI_NOTIFY_DEVICE_CHECK:
    478		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK event\n");
    479		hotplug_event = true;
    480		break;
    481
    482	case ACPI_NOTIFY_DEVICE_WAKE:
    483		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_WAKE event\n");
    484		break;
    485
    486	case ACPI_NOTIFY_EJECT_REQUEST:
    487		acpi_handle_debug(handle, "ACPI_NOTIFY_EJECT_REQUEST event\n");
    488		hotplug_event = true;
    489		break;
    490
    491	case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
    492		acpi_handle_debug(handle, "ACPI_NOTIFY_DEVICE_CHECK_LIGHT event\n");
    493		/* TBD: Exactly what does 'light' mean? */
    494		break;
    495
    496	case ACPI_NOTIFY_FREQUENCY_MISMATCH:
    497		acpi_handle_err(handle, "Device cannot be configured due "
    498				"to a frequency mismatch\n");
    499		break;
    500
    501	case ACPI_NOTIFY_BUS_MODE_MISMATCH:
    502		acpi_handle_err(handle, "Device cannot be configured due "
    503				"to a bus mode mismatch\n");
    504		break;
    505
    506	case ACPI_NOTIFY_POWER_FAULT:
    507		acpi_handle_err(handle, "Device has suffered a power fault\n");
    508		break;
    509
    510	default:
    511		acpi_handle_debug(handle, "Unknown event type 0x%x\n", type);
    512		break;
    513	}
    514
    515	adev = acpi_bus_get_acpi_device(handle);
    516	if (!adev)
    517		goto err;
    518
    519	driver = adev->driver;
    520	if (driver && driver->ops.notify &&
    521	    (driver->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS))
    522		driver->ops.notify(adev, type);
    523
    524	if (!hotplug_event) {
    525		acpi_bus_put_acpi_device(adev);
    526		return;
    527	}
    528
    529	if (ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
    530		return;
    531
    532	acpi_bus_put_acpi_device(adev);
    533
    534 err:
    535	acpi_evaluate_ost(handle, type, ost_code, NULL);
    536}
    537
    538static void acpi_notify_device(acpi_handle handle, u32 event, void *data)
    539{
    540	struct acpi_device *device = data;
    541
    542	device->driver->ops.notify(device, event);
    543}
    544
    545static void acpi_notify_device_fixed(void *data)
    546{
    547	struct acpi_device *device = data;
    548
    549	/* Fixed hardware devices have no handles */
    550	acpi_notify_device(NULL, ACPI_FIXED_HARDWARE_EVENT, device);
    551}
    552
    553static u32 acpi_device_fixed_event(void *data)
    554{
    555	acpi_os_execute(OSL_NOTIFY_HANDLER, acpi_notify_device_fixed, data);
    556	return ACPI_INTERRUPT_HANDLED;
    557}
    558
    559static int acpi_device_install_notify_handler(struct acpi_device *device)
    560{
    561	acpi_status status;
    562
    563	if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
    564		status =
    565		    acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
    566						     acpi_device_fixed_event,
    567						     device);
    568	else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
    569		status =
    570		    acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
    571						     acpi_device_fixed_event,
    572						     device);
    573	else
    574		status = acpi_install_notify_handler(device->handle,
    575						     ACPI_DEVICE_NOTIFY,
    576						     acpi_notify_device,
    577						     device);
    578
    579	if (ACPI_FAILURE(status))
    580		return -EINVAL;
    581	return 0;
    582}
    583
    584static void acpi_device_remove_notify_handler(struct acpi_device *device)
    585{
    586	if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
    587		acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
    588						acpi_device_fixed_event);
    589	else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
    590		acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
    591						acpi_device_fixed_event);
    592	else
    593		acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
    594					   acpi_notify_device);
    595}
    596
    597/* Handle events targeting \_SB device (at present only graceful shutdown) */
    598
    599#define ACPI_SB_NOTIFY_SHUTDOWN_REQUEST 0x81
    600#define ACPI_SB_INDICATE_INTERVAL	10000
    601
    602static void sb_notify_work(struct work_struct *dummy)
    603{
    604	acpi_handle sb_handle;
    605
    606	orderly_poweroff(true);
    607
    608	/*
    609	 * After initiating graceful shutdown, the ACPI spec requires OSPM
    610	 * to evaluate _OST method once every 10seconds to indicate that
    611	 * the shutdown is in progress
    612	 */
    613	acpi_get_handle(NULL, "\\_SB", &sb_handle);
    614	while (1) {
    615		pr_info("Graceful shutdown in progress.\n");
    616		acpi_evaluate_ost(sb_handle, ACPI_OST_EC_OSPM_SHUTDOWN,
    617				ACPI_OST_SC_OS_SHUTDOWN_IN_PROGRESS, NULL);
    618		msleep(ACPI_SB_INDICATE_INTERVAL);
    619	}
    620}
    621
    622static void acpi_sb_notify(acpi_handle handle, u32 event, void *data)
    623{
    624	static DECLARE_WORK(acpi_sb_work, sb_notify_work);
    625
    626	if (event == ACPI_SB_NOTIFY_SHUTDOWN_REQUEST) {
    627		if (!work_busy(&acpi_sb_work))
    628			schedule_work(&acpi_sb_work);
    629	} else
    630		pr_warn("event %x is not supported by \\_SB device\n", event);
    631}
    632
    633static int __init acpi_setup_sb_notify_handler(void)
    634{
    635	acpi_handle sb_handle;
    636
    637	if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &sb_handle)))
    638		return -ENXIO;
    639
    640	if (ACPI_FAILURE(acpi_install_notify_handler(sb_handle, ACPI_DEVICE_NOTIFY,
    641						acpi_sb_notify, NULL)))
    642		return -EINVAL;
    643
    644	return 0;
    645}
    646
    647/* --------------------------------------------------------------------------
    648                             Device Matching
    649   -------------------------------------------------------------------------- */
    650
    651/**
    652 * acpi_get_first_physical_node - Get first physical node of an ACPI device
    653 * @adev:	ACPI device in question
    654 *
    655 * Return: First physical node of ACPI device @adev
    656 */
    657struct device *acpi_get_first_physical_node(struct acpi_device *adev)
    658{
    659	struct mutex *physical_node_lock = &adev->physical_node_lock;
    660	struct device *phys_dev;
    661
    662	mutex_lock(physical_node_lock);
    663	if (list_empty(&adev->physical_node_list)) {
    664		phys_dev = NULL;
    665	} else {
    666		const struct acpi_device_physical_node *node;
    667
    668		node = list_first_entry(&adev->physical_node_list,
    669					struct acpi_device_physical_node, node);
    670
    671		phys_dev = node->dev;
    672	}
    673	mutex_unlock(physical_node_lock);
    674	return phys_dev;
    675}
    676EXPORT_SYMBOL_GPL(acpi_get_first_physical_node);
    677
    678static struct acpi_device *acpi_primary_dev_companion(struct acpi_device *adev,
    679						      const struct device *dev)
    680{
    681	const struct device *phys_dev = acpi_get_first_physical_node(adev);
    682
    683	return phys_dev && phys_dev == dev ? adev : NULL;
    684}
    685
    686/**
    687 * acpi_device_is_first_physical_node - Is given dev first physical node
    688 * @adev: ACPI companion device
    689 * @dev: Physical device to check
    690 *
    691 * Function checks if given @dev is the first physical devices attached to
    692 * the ACPI companion device. This distinction is needed in some cases
    693 * where the same companion device is shared between many physical devices.
    694 *
    695 * Note that the caller have to provide valid @adev pointer.
    696 */
    697bool acpi_device_is_first_physical_node(struct acpi_device *adev,
    698					const struct device *dev)
    699{
    700	return !!acpi_primary_dev_companion(adev, dev);
    701}
    702
    703/*
    704 * acpi_companion_match() - Can we match via ACPI companion device
    705 * @dev: Device in question
    706 *
    707 * Check if the given device has an ACPI companion and if that companion has
    708 * a valid list of PNP IDs, and if the device is the first (primary) physical
    709 * device associated with it.  Return the companion pointer if that's the case
    710 * or NULL otherwise.
    711 *
    712 * If multiple physical devices are attached to a single ACPI companion, we need
    713 * to be careful.  The usage scenario for this kind of relationship is that all
    714 * of the physical devices in question use resources provided by the ACPI
    715 * companion.  A typical case is an MFD device where all the sub-devices share
    716 * the parent's ACPI companion.  In such cases we can only allow the primary
    717 * (first) physical device to be matched with the help of the companion's PNP
    718 * IDs.
    719 *
    720 * Additional physical devices sharing the ACPI companion can still use
    721 * resources available from it but they will be matched normally using functions
    722 * provided by their bus types (and analogously for their modalias).
    723 */
    724struct acpi_device *acpi_companion_match(const struct device *dev)
    725{
    726	struct acpi_device *adev;
    727
    728	adev = ACPI_COMPANION(dev);
    729	if (!adev)
    730		return NULL;
    731
    732	if (list_empty(&adev->pnp.ids))
    733		return NULL;
    734
    735	return acpi_primary_dev_companion(adev, dev);
    736}
    737
    738/**
    739 * acpi_of_match_device - Match device object using the "compatible" property.
    740 * @adev: ACPI device object to match.
    741 * @of_match_table: List of device IDs to match against.
    742 * @of_id: OF ID if matched
    743 *
    744 * If @dev has an ACPI companion which has ACPI_DT_NAMESPACE_HID in its list of
    745 * identifiers and a _DSD object with the "compatible" property, use that
    746 * property to match against the given list of identifiers.
    747 */
    748static bool acpi_of_match_device(struct acpi_device *adev,
    749				 const struct of_device_id *of_match_table,
    750				 const struct of_device_id **of_id)
    751{
    752	const union acpi_object *of_compatible, *obj;
    753	int i, nval;
    754
    755	if (!adev)
    756		return false;
    757
    758	of_compatible = adev->data.of_compatible;
    759	if (!of_match_table || !of_compatible)
    760		return false;
    761
    762	if (of_compatible->type == ACPI_TYPE_PACKAGE) {
    763		nval = of_compatible->package.count;
    764		obj = of_compatible->package.elements;
    765	} else { /* Must be ACPI_TYPE_STRING. */
    766		nval = 1;
    767		obj = of_compatible;
    768	}
    769	/* Now we can look for the driver DT compatible strings */
    770	for (i = 0; i < nval; i++, obj++) {
    771		const struct of_device_id *id;
    772
    773		for (id = of_match_table; id->compatible[0]; id++)
    774			if (!strcasecmp(obj->string.pointer, id->compatible)) {
    775				if (of_id)
    776					*of_id = id;
    777				return true;
    778			}
    779	}
    780
    781	return false;
    782}
    783
    784static bool acpi_of_modalias(struct acpi_device *adev,
    785			     char *modalias, size_t len)
    786{
    787	const union acpi_object *of_compatible;
    788	const union acpi_object *obj;
    789	const char *str, *chr;
    790
    791	of_compatible = adev->data.of_compatible;
    792	if (!of_compatible)
    793		return false;
    794
    795	if (of_compatible->type == ACPI_TYPE_PACKAGE)
    796		obj = of_compatible->package.elements;
    797	else /* Must be ACPI_TYPE_STRING. */
    798		obj = of_compatible;
    799
    800	str = obj->string.pointer;
    801	chr = strchr(str, ',');
    802	strlcpy(modalias, chr ? chr + 1 : str, len);
    803
    804	return true;
    805}
    806
    807/**
    808 * acpi_set_modalias - Set modalias using "compatible" property or supplied ID
    809 * @adev:	ACPI device object to match
    810 * @default_id:	ID string to use as default if no compatible string found
    811 * @modalias:   Pointer to buffer that modalias value will be copied into
    812 * @len:	Length of modalias buffer
    813 *
    814 * This is a counterpart of of_modalias_node() for struct acpi_device objects.
    815 * If there is a compatible string for @adev, it will be copied to @modalias
    816 * with the vendor prefix stripped; otherwise, @default_id will be used.
    817 */
    818void acpi_set_modalias(struct acpi_device *adev, const char *default_id,
    819		       char *modalias, size_t len)
    820{
    821	if (!acpi_of_modalias(adev, modalias, len))
    822		strlcpy(modalias, default_id, len);
    823}
    824EXPORT_SYMBOL_GPL(acpi_set_modalias);
    825
    826static bool __acpi_match_device_cls(const struct acpi_device_id *id,
    827				    struct acpi_hardware_id *hwid)
    828{
    829	int i, msk, byte_shift;
    830	char buf[3];
    831
    832	if (!id->cls)
    833		return false;
    834
    835	/* Apply class-code bitmask, before checking each class-code byte */
    836	for (i = 1; i <= 3; i++) {
    837		byte_shift = 8 * (3 - i);
    838		msk = (id->cls_msk >> byte_shift) & 0xFF;
    839		if (!msk)
    840			continue;
    841
    842		sprintf(buf, "%02x", (id->cls >> byte_shift) & msk);
    843		if (strncmp(buf, &hwid->id[(i - 1) * 2], 2))
    844			return false;
    845	}
    846	return true;
    847}
    848
    849static bool __acpi_match_device(struct acpi_device *device,
    850				const struct acpi_device_id *acpi_ids,
    851				const struct of_device_id *of_ids,
    852				const struct acpi_device_id **acpi_id,
    853				const struct of_device_id **of_id)
    854{
    855	const struct acpi_device_id *id;
    856	struct acpi_hardware_id *hwid;
    857
    858	/*
    859	 * If the device is not present, it is unnecessary to load device
    860	 * driver for it.
    861	 */
    862	if (!device || !device->status.present)
    863		return false;
    864
    865	list_for_each_entry(hwid, &device->pnp.ids, list) {
    866		/* First, check the ACPI/PNP IDs provided by the caller. */
    867		if (acpi_ids) {
    868			for (id = acpi_ids; id->id[0] || id->cls; id++) {
    869				if (id->id[0] && !strcmp((char *)id->id, hwid->id))
    870					goto out_acpi_match;
    871				if (id->cls && __acpi_match_device_cls(id, hwid))
    872					goto out_acpi_match;
    873			}
    874		}
    875
    876		/*
    877		 * Next, check ACPI_DT_NAMESPACE_HID and try to match the
    878		 * "compatible" property if found.
    879		 */
    880		if (!strcmp(ACPI_DT_NAMESPACE_HID, hwid->id))
    881			return acpi_of_match_device(device, of_ids, of_id);
    882	}
    883	return false;
    884
    885out_acpi_match:
    886	if (acpi_id)
    887		*acpi_id = id;
    888	return true;
    889}
    890
    891/**
    892 * acpi_match_device - Match a struct device against a given list of ACPI IDs
    893 * @ids: Array of struct acpi_device_id object to match against.
    894 * @dev: The device structure to match.
    895 *
    896 * Check if @dev has a valid ACPI handle and if there is a struct acpi_device
    897 * object for that handle and use that object to match against a given list of
    898 * device IDs.
    899 *
    900 * Return a pointer to the first matching ID on success or %NULL on failure.
    901 */
    902const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
    903					       const struct device *dev)
    904{
    905	const struct acpi_device_id *id = NULL;
    906
    907	__acpi_match_device(acpi_companion_match(dev), ids, NULL, &id, NULL);
    908	return id;
    909}
    910EXPORT_SYMBOL_GPL(acpi_match_device);
    911
    912static const void *acpi_of_device_get_match_data(const struct device *dev)
    913{
    914	struct acpi_device *adev = ACPI_COMPANION(dev);
    915	const struct of_device_id *match = NULL;
    916
    917	if (!acpi_of_match_device(adev, dev->driver->of_match_table, &match))
    918		return NULL;
    919
    920	return match->data;
    921}
    922
    923const void *acpi_device_get_match_data(const struct device *dev)
    924{
    925	const struct acpi_device_id *match;
    926
    927	if (!dev->driver->acpi_match_table)
    928		return acpi_of_device_get_match_data(dev);
    929
    930	match = acpi_match_device(dev->driver->acpi_match_table, dev);
    931	if (!match)
    932		return NULL;
    933
    934	return (const void *)match->driver_data;
    935}
    936EXPORT_SYMBOL_GPL(acpi_device_get_match_data);
    937
    938int acpi_match_device_ids(struct acpi_device *device,
    939			  const struct acpi_device_id *ids)
    940{
    941	return __acpi_match_device(device, ids, NULL, NULL, NULL) ? 0 : -ENOENT;
    942}
    943EXPORT_SYMBOL(acpi_match_device_ids);
    944
    945bool acpi_driver_match_device(struct device *dev,
    946			      const struct device_driver *drv)
    947{
    948	if (!drv->acpi_match_table)
    949		return acpi_of_match_device(ACPI_COMPANION(dev),
    950					    drv->of_match_table,
    951					    NULL);
    952
    953	return __acpi_match_device(acpi_companion_match(dev),
    954				   drv->acpi_match_table, drv->of_match_table,
    955				   NULL, NULL);
    956}
    957EXPORT_SYMBOL_GPL(acpi_driver_match_device);
    958
    959/* --------------------------------------------------------------------------
    960                              ACPI Driver Management
    961   -------------------------------------------------------------------------- */
    962
    963/**
    964 * acpi_bus_register_driver - register a driver with the ACPI bus
    965 * @driver: driver being registered
    966 *
    967 * Registers a driver with the ACPI bus.  Searches the namespace for all
    968 * devices that match the driver's criteria and binds.  Returns zero for
    969 * success or a negative error status for failure.
    970 */
    971int acpi_bus_register_driver(struct acpi_driver *driver)
    972{
    973	int ret;
    974
    975	if (acpi_disabled)
    976		return -ENODEV;
    977	driver->drv.name = driver->name;
    978	driver->drv.bus = &acpi_bus_type;
    979	driver->drv.owner = driver->owner;
    980
    981	ret = driver_register(&driver->drv);
    982	return ret;
    983}
    984
    985EXPORT_SYMBOL(acpi_bus_register_driver);
    986
    987/**
    988 * acpi_bus_unregister_driver - unregisters a driver with the ACPI bus
    989 * @driver: driver to unregister
    990 *
    991 * Unregisters a driver with the ACPI bus.  Searches the namespace for all
    992 * devices that match the driver's criteria and unbinds.
    993 */
    994void acpi_bus_unregister_driver(struct acpi_driver *driver)
    995{
    996	driver_unregister(&driver->drv);
    997}
    998
    999EXPORT_SYMBOL(acpi_bus_unregister_driver);
   1000
   1001/* --------------------------------------------------------------------------
   1002                              ACPI Bus operations
   1003   -------------------------------------------------------------------------- */
   1004
   1005static int acpi_bus_match(struct device *dev, struct device_driver *drv)
   1006{
   1007	struct acpi_device *acpi_dev = to_acpi_device(dev);
   1008	struct acpi_driver *acpi_drv = to_acpi_driver(drv);
   1009
   1010	return acpi_dev->flags.match_driver
   1011		&& !acpi_match_device_ids(acpi_dev, acpi_drv->ids);
   1012}
   1013
   1014static int acpi_device_uevent(struct device *dev, struct kobj_uevent_env *env)
   1015{
   1016	return __acpi_device_uevent_modalias(to_acpi_device(dev), env);
   1017}
   1018
   1019static int acpi_device_probe(struct device *dev)
   1020{
   1021	struct acpi_device *acpi_dev = to_acpi_device(dev);
   1022	struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
   1023	int ret;
   1024
   1025	if (acpi_dev->handler && !acpi_is_pnp_device(acpi_dev))
   1026		return -EINVAL;
   1027
   1028	if (!acpi_drv->ops.add)
   1029		return -ENOSYS;
   1030
   1031	ret = acpi_drv->ops.add(acpi_dev);
   1032	if (ret)
   1033		return ret;
   1034
   1035	acpi_dev->driver = acpi_drv;
   1036
   1037	pr_debug("Driver [%s] successfully bound to device [%s]\n",
   1038		 acpi_drv->name, acpi_dev->pnp.bus_id);
   1039
   1040	if (acpi_drv->ops.notify) {
   1041		ret = acpi_device_install_notify_handler(acpi_dev);
   1042		if (ret) {
   1043			if (acpi_drv->ops.remove)
   1044				acpi_drv->ops.remove(acpi_dev);
   1045
   1046			acpi_dev->driver = NULL;
   1047			acpi_dev->driver_data = NULL;
   1048			return ret;
   1049		}
   1050	}
   1051
   1052	pr_debug("Found driver [%s] for device [%s]\n", acpi_drv->name,
   1053		 acpi_dev->pnp.bus_id);
   1054
   1055	get_device(dev);
   1056	return 0;
   1057}
   1058
   1059static void acpi_device_remove(struct device *dev)
   1060{
   1061	struct acpi_device *acpi_dev = to_acpi_device(dev);
   1062	struct acpi_driver *acpi_drv = acpi_dev->driver;
   1063
   1064	if (acpi_drv) {
   1065		if (acpi_drv->ops.notify)
   1066			acpi_device_remove_notify_handler(acpi_dev);
   1067		if (acpi_drv->ops.remove)
   1068			acpi_drv->ops.remove(acpi_dev);
   1069	}
   1070	acpi_dev->driver = NULL;
   1071	acpi_dev->driver_data = NULL;
   1072
   1073	put_device(dev);
   1074}
   1075
   1076struct bus_type acpi_bus_type = {
   1077	.name		= "acpi",
   1078	.match		= acpi_bus_match,
   1079	.probe		= acpi_device_probe,
   1080	.remove		= acpi_device_remove,
   1081	.uevent		= acpi_device_uevent,
   1082};
   1083
   1084int acpi_bus_for_each_dev(int (*fn)(struct device *, void *), void *data)
   1085{
   1086	return bus_for_each_dev(&acpi_bus_type, NULL, data, fn);
   1087}
   1088EXPORT_SYMBOL_GPL(acpi_bus_for_each_dev);
   1089
   1090struct acpi_dev_walk_context {
   1091	int (*fn)(struct acpi_device *, void *);
   1092	void *data;
   1093};
   1094
   1095static int acpi_dev_for_one_check(struct device *dev, void *context)
   1096{
   1097	struct acpi_dev_walk_context *adwc = context;
   1098
   1099	if (dev->bus != &acpi_bus_type)
   1100		return 0;
   1101
   1102	return adwc->fn(to_acpi_device(dev), adwc->data);
   1103}
   1104
   1105int acpi_dev_for_each_child(struct acpi_device *adev,
   1106			    int (*fn)(struct acpi_device *, void *), void *data)
   1107{
   1108	struct acpi_dev_walk_context adwc = {
   1109		.fn = fn,
   1110		.data = data,
   1111	};
   1112
   1113	return device_for_each_child(&adev->dev, &adwc, acpi_dev_for_one_check);
   1114}
   1115
   1116/* --------------------------------------------------------------------------
   1117                             Initialization/Cleanup
   1118   -------------------------------------------------------------------------- */
   1119
   1120static int __init acpi_bus_init_irq(void)
   1121{
   1122	acpi_status status;
   1123	char *message = NULL;
   1124
   1125
   1126	/*
   1127	 * Let the system know what interrupt model we are using by
   1128	 * evaluating the \_PIC object, if exists.
   1129	 */
   1130
   1131	switch (acpi_irq_model) {
   1132	case ACPI_IRQ_MODEL_PIC:
   1133		message = "PIC";
   1134		break;
   1135	case ACPI_IRQ_MODEL_IOAPIC:
   1136		message = "IOAPIC";
   1137		break;
   1138	case ACPI_IRQ_MODEL_IOSAPIC:
   1139		message = "IOSAPIC";
   1140		break;
   1141	case ACPI_IRQ_MODEL_GIC:
   1142		message = "GIC";
   1143		break;
   1144	case ACPI_IRQ_MODEL_PLATFORM:
   1145		message = "platform specific model";
   1146		break;
   1147	default:
   1148		pr_info("Unknown interrupt routing model\n");
   1149		return -ENODEV;
   1150	}
   1151
   1152	pr_info("Using %s for interrupt routing\n", message);
   1153
   1154	status = acpi_execute_simple_method(NULL, "\\_PIC", acpi_irq_model);
   1155	if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
   1156		pr_info("_PIC evaluation failed: %s\n", acpi_format_exception(status));
   1157		return -ENODEV;
   1158	}
   1159
   1160	return 0;
   1161}
   1162
   1163/**
   1164 * acpi_early_init - Initialize ACPICA and populate the ACPI namespace.
   1165 *
   1166 * The ACPI tables are accessible after this, but the handling of events has not
   1167 * been initialized and the global lock is not available yet, so AML should not
   1168 * be executed at this point.
   1169 *
   1170 * Doing this before switching the EFI runtime services to virtual mode allows
   1171 * the EfiBootServices memory to be freed slightly earlier on boot.
   1172 */
   1173void __init acpi_early_init(void)
   1174{
   1175	acpi_status status;
   1176
   1177	if (acpi_disabled)
   1178		return;
   1179
   1180	pr_info("Core revision %08x\n", ACPI_CA_VERSION);
   1181
   1182	/* enable workarounds, unless strict ACPI spec. compliance */
   1183	if (!acpi_strict)
   1184		acpi_gbl_enable_interpreter_slack = TRUE;
   1185
   1186	acpi_permanent_mmap = true;
   1187
   1188#ifdef CONFIG_X86
   1189	/*
   1190	 * If the machine falls into the DMI check table,
   1191	 * DSDT will be copied to memory.
   1192	 * Note that calling dmi_check_system() here on other architectures
   1193	 * would not be OK because only x86 initializes dmi early enough.
   1194	 * Thankfully only x86 systems need such quirks for now.
   1195	 */
   1196	dmi_check_system(dsdt_dmi_table);
   1197#endif
   1198
   1199	status = acpi_reallocate_root_table();
   1200	if (ACPI_FAILURE(status)) {
   1201		pr_err("Unable to reallocate ACPI tables\n");
   1202		goto error0;
   1203	}
   1204
   1205	status = acpi_initialize_subsystem();
   1206	if (ACPI_FAILURE(status)) {
   1207		pr_err("Unable to initialize the ACPI Interpreter\n");
   1208		goto error0;
   1209	}
   1210
   1211#ifdef CONFIG_X86
   1212	if (!acpi_ioapic) {
   1213		/* compatible (0) means level (3) */
   1214		if (!(acpi_sci_flags & ACPI_MADT_TRIGGER_MASK)) {
   1215			acpi_sci_flags &= ~ACPI_MADT_TRIGGER_MASK;
   1216			acpi_sci_flags |= ACPI_MADT_TRIGGER_LEVEL;
   1217		}
   1218		/* Set PIC-mode SCI trigger type */
   1219		acpi_pic_sci_set_trigger(acpi_gbl_FADT.sci_interrupt,
   1220					 (acpi_sci_flags & ACPI_MADT_TRIGGER_MASK) >> 2);
   1221	} else {
   1222		/*
   1223		 * now that acpi_gbl_FADT is initialized,
   1224		 * update it with result from INT_SRC_OVR parsing
   1225		 */
   1226		acpi_gbl_FADT.sci_interrupt = acpi_sci_override_gsi;
   1227	}
   1228#endif
   1229	return;
   1230
   1231 error0:
   1232	disable_acpi();
   1233}
   1234
   1235/**
   1236 * acpi_subsystem_init - Finalize the early initialization of ACPI.
   1237 *
   1238 * Switch over the platform to the ACPI mode (if possible).
   1239 *
   1240 * Doing this too early is generally unsafe, but at the same time it needs to be
   1241 * done before all things that really depend on ACPI.  The right spot appears to
   1242 * be before finalizing the EFI initialization.
   1243 */
   1244void __init acpi_subsystem_init(void)
   1245{
   1246	acpi_status status;
   1247
   1248	if (acpi_disabled)
   1249		return;
   1250
   1251	status = acpi_enable_subsystem(~ACPI_NO_ACPI_ENABLE);
   1252	if (ACPI_FAILURE(status)) {
   1253		pr_err("Unable to enable ACPI\n");
   1254		disable_acpi();
   1255	} else {
   1256		/*
   1257		 * If the system is using ACPI then we can be reasonably
   1258		 * confident that any regulators are managed by the firmware
   1259		 * so tell the regulator core it has everything it needs to
   1260		 * know.
   1261		 */
   1262		regulator_has_full_constraints();
   1263	}
   1264}
   1265
   1266static acpi_status acpi_bus_table_handler(u32 event, void *table, void *context)
   1267{
   1268	if (event == ACPI_TABLE_EVENT_LOAD)
   1269		acpi_scan_table_notify();
   1270
   1271	return acpi_sysfs_table_handler(event, table, context);
   1272}
   1273
   1274static int __init acpi_bus_init(void)
   1275{
   1276	int result;
   1277	acpi_status status;
   1278
   1279	acpi_os_initialize1();
   1280
   1281	status = acpi_load_tables();
   1282	if (ACPI_FAILURE(status)) {
   1283		pr_err("Unable to load the System Description Tables\n");
   1284		goto error1;
   1285	}
   1286
   1287	/*
   1288	 * ACPI 2.0 requires the EC driver to be loaded and work before the EC
   1289	 * device is found in the namespace.
   1290	 *
   1291	 * This is accomplished by looking for the ECDT table and getting the EC
   1292	 * parameters out of that.
   1293	 *
   1294	 * Do that before calling acpi_initialize_objects() which may trigger EC
   1295	 * address space accesses.
   1296	 */
   1297	acpi_ec_ecdt_probe();
   1298
   1299	status = acpi_enable_subsystem(ACPI_NO_ACPI_ENABLE);
   1300	if (ACPI_FAILURE(status)) {
   1301		pr_err("Unable to start the ACPI Interpreter\n");
   1302		goto error1;
   1303	}
   1304
   1305	status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION);
   1306	if (ACPI_FAILURE(status)) {
   1307		pr_err("Unable to initialize ACPI objects\n");
   1308		goto error1;
   1309	}
   1310
   1311	/* Set capability bits for _OSC under processor scope */
   1312	acpi_early_processor_osc();
   1313
   1314	/*
   1315	 * _OSC method may exist in module level code,
   1316	 * so it must be run after ACPI_FULL_INITIALIZATION
   1317	 */
   1318	acpi_bus_osc_negotiate_platform_control();
   1319	acpi_bus_osc_negotiate_usb_control();
   1320
   1321	/*
   1322	 * _PDC control method may load dynamic SSDT tables,
   1323	 * and we need to install the table handler before that.
   1324	 */
   1325	status = acpi_install_table_handler(acpi_bus_table_handler, NULL);
   1326
   1327	acpi_sysfs_init();
   1328
   1329	acpi_early_processor_set_pdc();
   1330
   1331	/*
   1332	 * Maybe EC region is required at bus_scan/acpi_get_devices. So it
   1333	 * is necessary to enable it as early as possible.
   1334	 */
   1335	acpi_ec_dsdt_probe();
   1336
   1337	pr_info("Interpreter enabled\n");
   1338
   1339	/* Initialize sleep structures */
   1340	acpi_sleep_init();
   1341
   1342	/*
   1343	 * Get the system interrupt model and evaluate \_PIC.
   1344	 */
   1345	result = acpi_bus_init_irq();
   1346	if (result)
   1347		goto error1;
   1348
   1349	/*
   1350	 * Register the for all standard device notifications.
   1351	 */
   1352	status =
   1353	    acpi_install_notify_handler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
   1354					&acpi_bus_notify, NULL);
   1355	if (ACPI_FAILURE(status)) {
   1356		pr_err("Unable to register for system notifications\n");
   1357		goto error1;
   1358	}
   1359
   1360	/*
   1361	 * Create the top ACPI proc directory
   1362	 */
   1363	acpi_root_dir = proc_mkdir(ACPI_BUS_FILE_ROOT, NULL);
   1364
   1365	result = bus_register(&acpi_bus_type);
   1366	if (!result)
   1367		return 0;
   1368
   1369	/* Mimic structured exception handling */
   1370      error1:
   1371	acpi_terminate();
   1372	return -ENODEV;
   1373}
   1374
   1375struct kobject *acpi_kobj;
   1376EXPORT_SYMBOL_GPL(acpi_kobj);
   1377
   1378static int __init acpi_init(void)
   1379{
   1380	int result;
   1381
   1382	if (acpi_disabled) {
   1383		pr_info("Interpreter disabled.\n");
   1384		return -ENODEV;
   1385	}
   1386
   1387	acpi_kobj = kobject_create_and_add("acpi", firmware_kobj);
   1388	if (!acpi_kobj)
   1389		pr_debug("%s: kset create error\n", __func__);
   1390
   1391	init_prmt();
   1392	acpi_init_pcc();
   1393	result = acpi_bus_init();
   1394	if (result) {
   1395		kobject_put(acpi_kobj);
   1396		disable_acpi();
   1397		return result;
   1398	}
   1399
   1400	pci_mmcfg_late_init();
   1401	acpi_iort_init();
   1402	acpi_hest_init();
   1403	acpi_ghes_init();
   1404	acpi_scan_init();
   1405	acpi_ec_init();
   1406	acpi_debugfs_init();
   1407	acpi_sleep_proc_init();
   1408	acpi_wakeup_device_init();
   1409	acpi_debugger_init();
   1410	acpi_setup_sb_notify_handler();
   1411	acpi_viot_init();
   1412	acpi_agdi_init();
   1413	return 0;
   1414}
   1415
   1416subsys_initcall(acpi_init);