* [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table
@ 2015-12-03 13:48 Philip Elcan
2015-12-03 14:14 ` Adrian Hunter
0 siblings, 1 reply; 8+ messages in thread
From: Philip Elcan @ 2015-12-03 13:48 UTC (permalink / raw)
To: Ulf Hansson, Adrian Hunter, linux-mmc, linux-kernel
Cc: linux-arm-msm, Timur Tabi, Jon Masters, Mark Langsdorf, Philip Elcan
This allows setting an SDHC controller as non-removable
by using the _RMV method in the ACPI table. It doesn't
mark it as non-removable if GPIO card detection is
already setup.
Signed-off-by: Philip Elcan <pelcan@codeaurora.org>
---
drivers/mmc/host/sdhci-acpi.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c
index f6047fc..8c06ba6 100644
--- a/drivers/mmc/host/sdhci-acpi.c
+++ b/drivers/mmc/host/sdhci-acpi.c
@@ -288,6 +288,20 @@ static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(const char *hid,
return NULL;
}
+static bool sdhci_acpi_is_removable(acpi_handle handle)
+{
+ acpi_status status;
+ unsigned long long removable = 1; /* default to removable */
+
+ if (acpi_has_method(handle, "_EJ0"))
+ return true;
+ status = acpi_evaluate_integer(handle, "_RMV", NULL, &removable);
+ if (ACPI_SUCCESS(status) && !removable)
+ return false;
+
+ return true;
+}
+
static int sdhci_acpi_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -300,6 +314,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
const char *hid;
const char *uid;
int err;
+ bool gpio_cd = false;
if (acpi_bus_get_device(handle, &device))
return -ENODEV;
@@ -373,9 +388,14 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
if (mmc_gpiod_request_cd(host->mmc, NULL, 0, v, 0, NULL)) {
dev_warn(dev, "failed to setup card detect gpio\n");
c->use_runtime_pm = false;
+ } else {
+ gpio_cd = true;
}
}
+ if (!gpio_cd && !sdhci_acpi_is_removable(handle))
+ host->mmc->caps |= MMC_CAP_NONREMOVABLE;
+
err = sdhci_add_host(host);
if (err)
goto err_free;
--
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table
2015-12-03 13:48 [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table Philip Elcan
@ 2015-12-03 14:14 ` Adrian Hunter
2015-12-04 15:40 ` Philip Elcan
0 siblings, 1 reply; 8+ messages in thread
From: Adrian Hunter @ 2015-12-03 14:14 UTC (permalink / raw)
To: Philip Elcan, Ulf Hansson, linux-mmc, linux-kernel
Cc: linux-arm-msm, Timur Tabi, Jon Masters, Mark Langsdorf
On 03/12/15 15:48, Philip Elcan wrote:
> This allows setting an SDHC controller as non-removable
> by using the _RMV method in the ACPI table. It doesn't
Is that _RMV on the host controller? Shouldn't it be on the card i.e. child
device node?
> mark it as non-removable if GPIO card detection is
> already setup.
>
> Signed-off-by: Philip Elcan <pelcan@codeaurora.org>
> ---
> drivers/mmc/host/sdhci-acpi.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c
> index f6047fc..8c06ba6 100644
> --- a/drivers/mmc/host/sdhci-acpi.c
> +++ b/drivers/mmc/host/sdhci-acpi.c
> @@ -288,6 +288,20 @@ static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(const char *hid,
> return NULL;
> }
>
> +static bool sdhci_acpi_is_removable(acpi_handle handle)
> +{
> + acpi_status status;
> + unsigned long long removable = 1; /* default to removable */
> +
> + if (acpi_has_method(handle, "_EJ0"))
> + return true;
> + status = acpi_evaluate_integer(handle, "_RMV", NULL, &removable);
> + if (ACPI_SUCCESS(status) && !removable)
> + return false;
> +
> + return true;
> +}
> +
> static int sdhci_acpi_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> @@ -300,6 +314,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
> const char *hid;
> const char *uid;
> int err;
> + bool gpio_cd = false;
>
> if (acpi_bus_get_device(handle, &device))
> return -ENODEV;
> @@ -373,9 +388,14 @@ static int sdhci_acpi_probe(struct platform_device *pdev)
> if (mmc_gpiod_request_cd(host->mmc, NULL, 0, v, 0, NULL)) {
> dev_warn(dev, "failed to setup card detect gpio\n");
> c->use_runtime_pm = false;
> + } else {
> + gpio_cd = true;
> }
> }
>
> + if (!gpio_cd && !sdhci_acpi_is_removable(handle))
> + host->mmc->caps |= MMC_CAP_NONREMOVABLE;
> +
> err = sdhci_add_host(host);
> if (err)
> goto err_free;
>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table
2015-12-03 14:14 ` Adrian Hunter
@ 2015-12-04 15:40 ` Philip Elcan
2015-12-07 8:30 ` Adrian Hunter
0 siblings, 1 reply; 8+ messages in thread
From: Philip Elcan @ 2015-12-04 15:40 UTC (permalink / raw)
To: Adrian Hunter, Ulf Hansson, linux-mmc, linux-kernel
Cc: linux-arm-msm, Timur Tabi, Jon Masters, Mark Langsdorf
On 12/03/2015 09:14 AM, Adrian Hunter wrote:
> On 03/12/15 15:48, Philip Elcan wrote:
>> This allows setting an SDHC controller as non-removable
>> by using the _RMV method in the ACPI table. It doesn't
> Is that _RMV on the host controller? Shouldn't it be on the card i.e. child
> device node?
Yes, this is on the host controller. The ACPI table only describes the
host controller, not the child nodes.
>
>> mark it as non-removable if GPIO card detection is
>> already setup.
>>
>> Signed-off-by: Philip Elcan <pelcan@codeaurora.org>
>> ---
>>
--
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table
2015-12-04 15:40 ` Philip Elcan
@ 2015-12-07 8:30 ` Adrian Hunter
2015-12-10 20:57 ` Philip Elcan
0 siblings, 1 reply; 8+ messages in thread
From: Adrian Hunter @ 2015-12-07 8:30 UTC (permalink / raw)
To: Philip Elcan, Ulf Hansson, linux-mmc, linux-kernel
Cc: linux-arm-msm, Timur Tabi, Jon Masters, Mark Langsdorf
On 04/12/15 17:40, Philip Elcan wrote:
>
> On 12/03/2015 09:14 AM, Adrian Hunter wrote:
>> On 03/12/15 15:48, Philip Elcan wrote:
>>> This allows setting an SDHC controller as non-removable
>>> by using the _RMV method in the ACPI table. It doesn't
>> Is that _RMV on the host controller? Shouldn't it be on the card i.e. child
>> device node?
>
> Yes, this is on the host controller. The ACPI table only describes the
> host controller, not the child nodes.
>
If you look at Intel devices, the _RMV is on the child e.g.
Device (SDHA)
{
Name (_HID, "80860F14") // _HID: Hardware ID
Name (_CID, "PNP0D40") // _CID: Compatible ID
Name (_DDN, "Intel(R) eMMC Controller - 80860F14") // _DDN: DOS Device Name
...
Device (EMMD)
{
...
Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
{
Return (Zero)
}
}
}
I am not an ACPI expert but that seems like the correct place for it.
>>
>>> mark it as non-removable if GPIO card detection is
>>> already setup.
>>>
>>> Signed-off-by: Philip Elcan <pelcan@codeaurora.org>
>>> ---
>>>
>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table
2015-12-07 8:30 ` Adrian Hunter
@ 2015-12-10 20:57 ` Philip Elcan
2015-12-11 8:17 ` Adrian Hunter
0 siblings, 1 reply; 8+ messages in thread
From: Philip Elcan @ 2015-12-10 20:57 UTC (permalink / raw)
To: Adrian Hunter, Ulf Hansson, linux-mmc, linux-kernel
Cc: linux-arm-msm, Timur Tabi, Jon Masters, Mark Langsdorf, harba
On 12/07/2015 03:30 AM, Adrian Hunter wrote:
> On 04/12/15 17:40, Philip Elcan wrote:
>> On 12/03/2015 09:14 AM, Adrian Hunter wrote:
>>> On 03/12/15 15:48, Philip Elcan wrote:
>>>> This allows setting an SDHC controller as non-removable
>>>> by using the _RMV method in the ACPI table. It doesn't
>>> Is that _RMV on the host controller? Shouldn't it be on the card i.e. child
>>> device node?
>> Yes, this is on the host controller. The ACPI table only describes the
>> host controller, not the child nodes.
>>
> If you look at Intel devices, the _RMV is on the child e.g.
>
> Device (SDHA)
> {
> Name (_HID, "80860F14") // _HID: Hardware ID
> Name (_CID, "PNP0D40") // _CID: Compatible ID
> Name (_DDN, "Intel(R) eMMC Controller - 80860F14") // _DDN: DOS Device Name
> ...
> Device (EMMD)
> {
> ...
> Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
> {
> Return (Zero)
> }
> }
> }
>
> I am not an ACPI expert but that seems like the correct place for it.
My understanding is that in ACPI you don't generally create child devices on buses that are discoverable.
>
>>>> mark it as non-removable if GPIO card detection is
>>>> already setup.
>>>>
>>>> Signed-off-by: Philip Elcan <pelcan@codeaurora.org>
>>>> ---
>>>>
--
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table
2015-12-10 20:57 ` Philip Elcan
@ 2015-12-11 8:17 ` Adrian Hunter
2015-12-11 22:53 ` Rafael J. Wysocki
0 siblings, 1 reply; 8+ messages in thread
From: Adrian Hunter @ 2015-12-11 8:17 UTC (permalink / raw)
To: Philip Elcan, Ulf Hansson, linux-mmc, linux-kernel, linux-acpi,
Rafael J. Wysocki
Cc: linux-arm-msm, Timur Tabi, Jon Masters, Mark Langsdorf, harba
On 10/12/15 22:57, Philip Elcan wrote:
>
> On 12/07/2015 03:30 AM, Adrian Hunter wrote:
>> On 04/12/15 17:40, Philip Elcan wrote:
>>> On 12/03/2015 09:14 AM, Adrian Hunter wrote:
>>>> On 03/12/15 15:48, Philip Elcan wrote:
>>>>> This allows setting an SDHC controller as non-removable
>>>>> by using the _RMV method in the ACPI table. It doesn't
>>>> Is that _RMV on the host controller? Shouldn't it be on the card i.e. child
>>>> device node?
>>> Yes, this is on the host controller. The ACPI table only describes the
>>> host controller, not the child nodes.
>>>
>> If you look at Intel devices, the _RMV is on the child e.g.
>>
>> Device (SDHA)
>> {
>> Name (_HID, "80860F14") // _HID: Hardware ID
>> Name (_CID, "PNP0D40") // _CID: Compatible ID
>> Name (_DDN, "Intel(R) eMMC Controller - 80860F14") // _DDN: DOS Device Name
>> ...
>> Device (EMMD)
>> {
>> ...
>> Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
>> {
>> Return (Zero)
>> }
>> }
>> }
>>
>> I am not an ACPI expert but that seems like the correct place for it.
> My understanding is that in ACPI you don't generally create child devices on buses that are discoverable.
I've cc'ed Rafael and the linux-acpi mailing list. Maybe someone there can
comment.
>>
>>>>> mark it as non-removable if GPIO card detection is
>>>>> already setup.
>>>>>
>>>>> Signed-off-by: Philip Elcan <pelcan@codeaurora.org>
>>>>> ---
>>>>>
>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table
2015-12-11 8:17 ` Adrian Hunter
@ 2015-12-11 22:53 ` Rafael J. Wysocki
[not found] ` <567087F3.7030308@codeaurora.org>
0 siblings, 1 reply; 8+ messages in thread
From: Rafael J. Wysocki @ 2015-12-11 22:53 UTC (permalink / raw)
To: Adrian Hunter
Cc: Philip Elcan, Ulf Hansson, linux-mmc, linux-kernel, linux-acpi,
Rafael J. Wysocki, linux-arm-msm, Timur Tabi, Jon Masters,
Mark Langsdorf, harba
On Friday, December 11, 2015 10:17:18 AM Adrian Hunter wrote:
> On 10/12/15 22:57, Philip Elcan wrote:
> >
> > On 12/07/2015 03:30 AM, Adrian Hunter wrote:
> >> On 04/12/15 17:40, Philip Elcan wrote:
> >>> On 12/03/2015 09:14 AM, Adrian Hunter wrote:
> >>>> On 03/12/15 15:48, Philip Elcan wrote:
> >>>>> This allows setting an SDHC controller as non-removable
> >>>>> by using the _RMV method in the ACPI table. It doesn't
> >>>> Is that _RMV on the host controller? Shouldn't it be on the card i.e. child
> >>>> device node?
> >>> Yes, this is on the host controller. The ACPI table only describes the
> >>> host controller, not the child nodes.
> >>>
> >> If you look at Intel devices, the _RMV is on the child e.g.
> >>
> >> Device (SDHA)
> >> {
> >> Name (_HID, "80860F14") // _HID: Hardware ID
> >> Name (_CID, "PNP0D40") // _CID: Compatible ID
> >> Name (_DDN, "Intel(R) eMMC Controller - 80860F14") // _DDN: DOS Device Name
> >> ...
> >> Device (EMMD)
> >> {
> >> ...
> >> Method (_RMV, 0, NotSerialized) // _RMV: Removal Status
> >> {
> >> Return (Zero)
> >> }
> >> }
> >> }
> >>
> >> I am not an ACPI expert but that seems like the correct place for it.
> > My understanding is that in ACPI you don't generally create child devices on buses that are discoverable.
>
> I've cc'ed Rafael and the linux-acpi mailing list. Maybe someone there can
> comment.
The context here is a bit unclear to me.
Quite frankly, I don't see now _RMV above is useful for anything. As per the
spec, _RMV is only necessary for devices that *can* be removed from the system
and where there's no eject mechanism controlled by software. For those
devices _RMV is intended to indicate that it is safe to remove the device
at the time _RMV is evaluated. Devices that can never be removed don't
need _RMV at all.
Thanks,
Rafael
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-12-16 1:17 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-03 13:48 [PATCH] mmc: sdhci-acpi: set non-removable in ACPI table Philip Elcan
2015-12-03 14:14 ` Adrian Hunter
2015-12-04 15:40 ` Philip Elcan
2015-12-07 8:30 ` Adrian Hunter
2015-12-10 20:57 ` Philip Elcan
2015-12-11 8:17 ` Adrian Hunter
2015-12-11 22:53 ` Rafael J. Wysocki
[not found] ` <567087F3.7030308@codeaurora.org>
2015-12-16 1:17 ` Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®