Merge branches 'acpi-spcr', 'acpi-osi', 'acpi-bus', 'acpi-scan' and 'acpi-misc'
* acpi-spcr: ACPI: SPCR: Workaround for APM X-Gene 8250 UART 32-alignment errata ACPI: SPCR: Use access width to determine mmio usage * acpi-osi: ACPI / osi: Make local function acpi_osi_dmi_linux() static * acpi-bus: ACPI / bus: handle ACPI hotplug schedule errors completely * acpi-scan: ACPI / scan: Indicate to platform when hot remove returns busy * acpi-misc: ACPI / DPTF: constify attribute_group structures ACPI / LPSS: constify attribute_group structures ACPI: BGRT: constify attribute_group structures ACPI / power: constify attribute_group structures
This commit is contained in:
commit
f19e80b394
|
@ -576,7 +576,7 @@ static struct attribute *lpss_attrs[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group lpss_attr_group = {
|
||||
static const struct attribute_group lpss_attr_group = {
|
||||
.attrs = lpss_attrs,
|
||||
.name = "lpss_ltr",
|
||||
};
|
||||
|
|
|
@ -76,7 +76,7 @@ static struct bin_attribute *bgrt_bin_attributes[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group bgrt_attribute_group = {
|
||||
static const struct attribute_group bgrt_attribute_group = {
|
||||
.attrs = bgrt_attributes,
|
||||
.bin_attrs = bgrt_bin_attributes,
|
||||
};
|
||||
|
|
|
@ -409,11 +409,15 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
|
|||
(driver->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS))
|
||||
driver->ops.notify(adev, type);
|
||||
|
||||
if (hotplug_event && ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
|
||||
if (!hotplug_event) {
|
||||
acpi_bus_put_acpi_device(adev);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ACPI_SUCCESS(acpi_hotplug_schedule(adev, type)))
|
||||
return;
|
||||
|
||||
acpi_bus_put_acpi_device(adev);
|
||||
return;
|
||||
|
||||
err:
|
||||
acpi_evaluate_ost(handle, type, ost_code, NULL);
|
||||
|
|
|
@ -65,7 +65,7 @@ static struct attribute *dptf_power_attrs[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static struct attribute_group dptf_power_attribute_group = {
|
||||
static const struct attribute_group dptf_power_attribute_group = {
|
||||
.attrs = dptf_power_attrs,
|
||||
.name = "dptf_power"
|
||||
};
|
||||
|
|
|
@ -265,7 +265,8 @@ static void __init acpi_osi_dmi_darwin(bool enable,
|
|||
__acpi_osi_setup_darwin(enable);
|
||||
}
|
||||
|
||||
void __init acpi_osi_dmi_linux(bool enable, const struct dmi_system_id *d)
|
||||
static void __init acpi_osi_dmi_linux(bool enable,
|
||||
const struct dmi_system_id *d)
|
||||
{
|
||||
pr_notice("DMI detected to setup _OSI(\"Linux\"): %s\n", d->ident);
|
||||
osi_config.linux_dmi = 1;
|
||||
|
|
|
@ -352,7 +352,7 @@ static struct attribute *attrs[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group attr_groups[] = {
|
||||
static const struct attribute_group attr_groups[] = {
|
||||
[ACPI_STATE_D0] = {
|
||||
.name = "power_resources_D0",
|
||||
.attrs = attrs,
|
||||
|
@ -371,14 +371,14 @@ static struct attribute_group attr_groups[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct attribute_group wakeup_attr_group = {
|
||||
static const struct attribute_group wakeup_attr_group = {
|
||||
.name = "power_resources_wakeup",
|
||||
.attrs = attrs,
|
||||
};
|
||||
|
||||
static void acpi_power_hide_list(struct acpi_device *adev,
|
||||
struct list_head *resources,
|
||||
struct attribute_group *attr_group)
|
||||
const struct attribute_group *attr_group)
|
||||
{
|
||||
struct acpi_power_resource_entry *entry;
|
||||
|
||||
|
@ -397,7 +397,7 @@ static void acpi_power_hide_list(struct acpi_device *adev,
|
|||
|
||||
static void acpi_power_expose_list(struct acpi_device *adev,
|
||||
struct list_head *resources,
|
||||
struct attribute_group *attr_group)
|
||||
const struct attribute_group *attr_group)
|
||||
{
|
||||
struct acpi_power_resource_entry *entry;
|
||||
int ret;
|
||||
|
@ -425,7 +425,7 @@ static void acpi_power_expose_list(struct acpi_device *adev,
|
|||
|
||||
static void acpi_power_expose_hide(struct acpi_device *adev,
|
||||
struct list_head *resources,
|
||||
struct attribute_group *attr_group,
|
||||
const struct attribute_group *attr_group,
|
||||
bool expose)
|
||||
{
|
||||
if (expose)
|
||||
|
|
|
@ -404,10 +404,6 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src)
|
|||
error = dock_notify(adev, src);
|
||||
} else if (adev->flags.hotplug_notify) {
|
||||
error = acpi_generic_hotplug_event(adev, src);
|
||||
if (error == -EPERM) {
|
||||
ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
|
||||
goto err_out;
|
||||
}
|
||||
} else {
|
||||
int (*notify)(struct acpi_device *, u32);
|
||||
|
||||
|
@ -423,8 +419,20 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src)
|
|||
else
|
||||
goto out;
|
||||
}
|
||||
if (!error)
|
||||
switch (error) {
|
||||
case 0:
|
||||
ost_code = ACPI_OST_SC_SUCCESS;
|
||||
break;
|
||||
case -EPERM:
|
||||
ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
|
||||
break;
|
||||
case -EBUSY:
|
||||
ost_code = ACPI_OST_SC_DEVICE_BUSY;
|
||||
break;
|
||||
default:
|
||||
ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
|
||||
break;
|
||||
}
|
||||
|
||||
err_out:
|
||||
acpi_evaluate_ost(adev->handle, src, ost_code, NULL);
|
||||
|
|
|
@ -36,6 +36,26 @@ static bool qdf2400_erratum_44_present(struct acpi_table_header *h)
|
|||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* APM X-Gene v1 and v2 UART hardware is an 16550 like device but has its
|
||||
* register aligned to 32-bit. In addition, the BIOS also encoded the
|
||||
* access width to be 8 bits. This function detects this errata condition.
|
||||
*/
|
||||
static bool xgene_8250_erratum_present(struct acpi_table_spcr *tb)
|
||||
{
|
||||
if (tb->interface_type != ACPI_DBG2_16550_COMPATIBLE)
|
||||
return false;
|
||||
|
||||
if (memcmp(tb->header.oem_id, "APMC0D", ACPI_OEM_ID_SIZE))
|
||||
return false;
|
||||
|
||||
if (!memcmp(tb->header.oem_table_id, "XGENESPC",
|
||||
ACPI_OEM_TABLE_ID_SIZE) && tb->header.oem_revision == 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* parse_spcr() - parse ACPI SPCR table and add preferred console
|
||||
*
|
||||
|
@ -74,8 +94,22 @@ int __init parse_spcr(bool earlycon)
|
|||
goto done;
|
||||
}
|
||||
|
||||
iotype = table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY ?
|
||||
"mmio" : "io";
|
||||
if (table->serial_port.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
|
||||
switch (table->serial_port.access_width) {
|
||||
default:
|
||||
pr_err("Unexpected SPCR Access Width. Defaulting to byte size\n");
|
||||
case ACPI_ACCESS_SIZE_BYTE:
|
||||
iotype = "mmio";
|
||||
break;
|
||||
case ACPI_ACCESS_SIZE_WORD:
|
||||
iotype = "mmio16";
|
||||
break;
|
||||
case ACPI_ACCESS_SIZE_DWORD:
|
||||
iotype = "mmio32";
|
||||
break;
|
||||
}
|
||||
} else
|
||||
iotype = "io";
|
||||
|
||||
switch (table->interface_type) {
|
||||
case ACPI_DBG2_ARM_SBSA_32BIT:
|
||||
|
@ -115,6 +149,8 @@ int __init parse_spcr(bool earlycon)
|
|||
|
||||
if (qdf2400_erratum_44_present(&table->header))
|
||||
uart = "qdf2400_e44";
|
||||
if (xgene_8250_erratum_present(table))
|
||||
iotype = "mmio32";
|
||||
|
||||
snprintf(opts, sizeof(opts), "%s,%s,0x%llx,%d", uart, iotype,
|
||||
table->serial_port.address, baud_rate);
|
||||
|
|
|
@ -377,6 +377,13 @@ struct acpi_resource_generic_register {
|
|||
u64 address;
|
||||
};
|
||||
|
||||
/* Generic Address Space Access Sizes */
|
||||
#define ACPI_ACCESS_SIZE_UNDEFINED 0
|
||||
#define ACPI_ACCESS_SIZE_BYTE 1
|
||||
#define ACPI_ACCESS_SIZE_WORD 2
|
||||
#define ACPI_ACCESS_SIZE_DWORD 3
|
||||
#define ACPI_ACCESS_SIZE_QWORD 4
|
||||
|
||||
struct acpi_resource_gpio {
|
||||
u8 revision_id;
|
||||
u8 connection_type;
|
||||
|
|
Loading…
Reference in New Issue