<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/mmc/host, branch linux-3.19.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>mmc: sunxi: Use devm_reset_control_get_optional() for reset control</title>
<updated>2015-05-06T20:01:45+00:00</updated>
<author>
<name>Chen-Yu Tsai</name>
<email>wens@csie.org</email>
</author>
<published>2015-03-03T01:44:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=d6e6b42583ff9439f73e7a0a936856969c0d9373'/>
<id>d6e6b42583ff9439f73e7a0a936856969c0d9373</id>
<content type='text'>
commit 9e71c589e44ddf2b86f361c81e360c6b0d0354b1 upstream.

The reset control for the sunxi mmc controller is optional. Some
newer platforms (sun6i, sun8i, sun9i) have it, while older ones
(sun4i, sun5i, sun7i) don't.

Use the properly stubbed _optional version so the driver does not
fail to compile when RESET_CONTROLLER=n.

This patch also adds a check for deferred probing on the reset
control.

Signed-off-by: Chen-Yu Tsai &lt;wens@csie.org&gt;
Acked-by: David Lanzendörfer &lt;david.lanzendoerfer@o2s.ch&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 9e71c589e44ddf2b86f361c81e360c6b0d0354b1 upstream.

The reset control for the sunxi mmc controller is optional. Some
newer platforms (sun6i, sun8i, sun9i) have it, while older ones
(sun4i, sun5i, sun7i) don't.

Use the properly stubbed _optional version so the driver does not
fail to compile when RESET_CONTROLLER=n.

This patch also adds a check for deferred probing on the reset
control.

Signed-off-by: Chen-Yu Tsai &lt;wens@csie.org&gt;
Acked-by: David Lanzendörfer &lt;david.lanzendoerfer@o2s.ch&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci-pxav3: Fix Armada 38x controller's caps according to erratum ERR-7878951</title>
<updated>2015-03-06T22:57:27+00:00</updated>
<author>
<name>Marcin Wojtas</name>
<email>mw@semihalf.com</email>
</author>
<published>2015-01-29T11:36:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=0c98e7c57536841d0e0d41c14136d9ba507deb9a'/>
<id>0c98e7c57536841d0e0d41c14136d9ba507deb9a</id>
<content type='text'>
commit a39128bcd6f1e56c6514abf489b40b67d226093b upstream.

According to erratum 'ERR-7878951' Armada 38x SDHCI controller has
different capabilities than the ones shown in its registers:

- it doesn't support the voltage switching: it can work either with
  3.3V or 1.8V supply
- it doesn't support the SDR104 mode
- SDR50 mode doesn't need tuning

The SDHCI_QUIRK_MISSING_CAPS quirk is used for updating the
capabilities accordingly.

[gregory.clement@free-electrons.com: port from 3.10]

Fixes: 5491ce3f79ee ("mmc: sdhci-pxav3: add support for the Armada 38x SDHCI controller")

Signed-off-by: Gregory CLEMENT &lt;gregory.clement@free-electrons.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit a39128bcd6f1e56c6514abf489b40b67d226093b upstream.

According to erratum 'ERR-7878951' Armada 38x SDHCI controller has
different capabilities than the ones shown in its registers:

- it doesn't support the voltage switching: it can work either with
  3.3V or 1.8V supply
- it doesn't support the SDR104 mode
- SDR50 mode doesn't need tuning

The SDHCI_QUIRK_MISSING_CAPS quirk is used for updating the
capabilities accordingly.

[gregory.clement@free-electrons.com: port from 3.10]

Fixes: 5491ce3f79ee ("mmc: sdhci-pxav3: add support for the Armada 38x SDHCI controller")

Signed-off-by: Gregory CLEMENT &lt;gregory.clement@free-electrons.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci-pxav3: Fix SDR50 and DDR50 capabilities for the Armada 38x flavor</title>
<updated>2015-03-06T22:57:27+00:00</updated>
<author>
<name>Gregory CLEMENT</name>
<email>gregory.clement@free-electrons.com</email>
</author>
<published>2015-01-29T11:36:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=56073d467f5efa6a46975904d6eb4cd39a745b0b'/>
<id>56073d467f5efa6a46975904d6eb4cd39a745b0b</id>
<content type='text'>
commit d4b803c559843e3774736e5108cf6331cf75f64c upstream.

According to erratum 'FE-2946959' both SDR50 and DDR50 modes require
specific clock adjustments in SDIO3 Configuration register. However,
this register was not part of the device tree binding. Even if the
binding can (and will) be extended we still need handling the case
where this register was not available. In this case we use the
SDHCI_QUIRK_MISSING_CAPS quirk remove them from the capabilities.

This commit is based on the work done by Marcin Wojtas&lt;mw@semihalf.com&gt;

Fixes: 5491ce3f79ee ("mmc: sdhci-pxav3: add support for the Armada 38x SDHCI controller")
Signed-off-by: Gregory CLEMENT &lt;gregory.clement@free-electrons.com&gt;
Signed-off-by: Marcin Wojtas &lt;mw@semihalf.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit d4b803c559843e3774736e5108cf6331cf75f64c upstream.

According to erratum 'FE-2946959' both SDR50 and DDR50 modes require
specific clock adjustments in SDIO3 Configuration register. However,
this register was not part of the device tree binding. Even if the
binding can (and will) be extended we still need handling the case
where this register was not available. In this case we use the
SDHCI_QUIRK_MISSING_CAPS quirk remove them from the capabilities.

This commit is based on the work done by Marcin Wojtas&lt;mw@semihalf.com&gt;

Fixes: 5491ce3f79ee ("mmc: sdhci-pxav3: add support for the Armada 38x SDHCI controller")
Signed-off-by: Gregory CLEMENT &lt;gregory.clement@free-electrons.com&gt;
Signed-off-by: Marcin Wojtas &lt;mw@semihalf.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci-pxav3: fix setting of pdata-&gt;clk_delay_cycles</title>
<updated>2015-03-06T22:57:27+00:00</updated>
<author>
<name>Jisheng Zhang</name>
<email>jszhang@marvell.com</email>
</author>
<published>2015-01-28T11:54:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=de4adf92f9722206f3547eff5eeaae8b632266c6'/>
<id>de4adf92f9722206f3547eff5eeaae8b632266c6</id>
<content type='text'>
commit 14460dbaf7a5a0488963fdb8232ad5c8a8cca7b7 upstream.

Current code checks "clk_delay_cycles &gt; 0" to know whether the optional
"mrvl,clk_delay_cycles" is set or not. But of_property_read_u32() doesn't
touch clk_delay_cycles if the property is not set. And type of
clk_delay_cycles is u32, so we may always set pdata-&gt;clk_delay_cycles as a
random value.

This patch fix this problem by check the return value of of_property_read_u32()
to know whether the optional clk-delay-cycles is set or not.

Signed-off-by: Jisheng Zhang &lt;jszhang@marvell.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 14460dbaf7a5a0488963fdb8232ad5c8a8cca7b7 upstream.

Current code checks "clk_delay_cycles &gt; 0" to know whether the optional
"mrvl,clk_delay_cycles" is set or not. But of_property_read_u32() doesn't
touch clk_delay_cycles if the property is not set. And type of
clk_delay_cycles is u32, so we may always set pdata-&gt;clk_delay_cycles as a
random value.

This patch fix this problem by check the return value of of_property_read_u32()
to know whether the optional clk-delay-cycles is set or not.

Signed-off-by: Jisheng Zhang &lt;jszhang@marvell.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci-pxav3: fix race between runtime pm and irq</title>
<updated>2015-03-06T22:57:27+00:00</updated>
<author>
<name>Jisheng Zhang</name>
<email>jszhang@marvell.com</email>
</author>
<published>2015-01-23T10:08:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=20b85db94c1f4f3f86a83812b817d96fa37db61c'/>
<id>20b85db94c1f4f3f86a83812b817d96fa37db61c</id>
<content type='text'>
commit 3bb10f60933e84abfe2be69f60b3486f9b96348b upstream.

This patch is to fix a race condition that may cause an unhandled irq,
which results in big sdhci interrupt numbers and endless "mmc1: got irq
while runtime suspended" msgs before v3.15.

Consider following scenario:

      CPU0                            CPU1
                              sdhci_pxav3_runtime_suspend()
                               spin_lock_irqsave(&amp;host-&gt;lock, flags);
 sdhci_irq()
  spining on the &amp;host-&gt;lock
                               host-&gt;runtime_suspended = true;
                               spin_unlock_irqrestore(&amp;host-&gt;lock, flags);
  get the &amp;host-&gt;lock
  runtime_suspended is true now
  return IRQ_NONE;

Fix this race by using the core sdhci.c supplied sdhci_runtime_suspend_host()
in runtime suspend hook which will disable card interrupts. We also use the
sdhci_runtime_resume_host() in the runtime resume hook accordingly.

Signed-off-by: Jisheng Zhang &lt;jszhang@marvell.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 3bb10f60933e84abfe2be69f60b3486f9b96348b upstream.

This patch is to fix a race condition that may cause an unhandled irq,
which results in big sdhci interrupt numbers and endless "mmc1: got irq
while runtime suspended" msgs before v3.15.

Consider following scenario:

      CPU0                            CPU1
                              sdhci_pxav3_runtime_suspend()
                               spin_lock_irqsave(&amp;host-&gt;lock, flags);
 sdhci_irq()
  spining on the &amp;host-&gt;lock
                               host-&gt;runtime_suspended = true;
                               spin_unlock_irqrestore(&amp;host-&gt;lock, flags);
  get the &amp;host-&gt;lock
  runtime_suspended is true now
  return IRQ_NONE;

Fix this race by using the core sdhci.c supplied sdhci_runtime_suspend_host()
in runtime suspend hook which will disable card interrupts. We also use the
sdhci_runtime_resume_host() in the runtime resume hook accordingly.

Signed-off-by: Jisheng Zhang &lt;jszhang@marvell.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci-pxav3: fix unbalanced clock issues during probe</title>
<updated>2015-03-06T22:57:26+00:00</updated>
<author>
<name>Jisheng Zhang</name>
<email>jszhang@marvell.com</email>
</author>
<published>2015-01-04T15:15:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=611ef74966d545d0e56bcb8501ee610ec9383745'/>
<id>611ef74966d545d0e56bcb8501ee610ec9383745</id>
<content type='text'>
commit 62cf983ad84275f8580c807e5e596216c46773cf upstream.

Commit 0dcaa2499b7d ("sdhci-pxav3: Fix runtime PM initialization") tries
to fix one hang issue caused by calling sdhci_add_host() on a suspended
device. The fix enables the clock twice, once by clk_prepare_enable() and
another by pm_runtime_get_sync(), meaning that the clock will never be
gated at runtime PM suspend. I observed the power consumption regression on
Marvell BG2Q SoCs.

In fact, the fix is not correct. There still be a very small window
during which a runtime suspend might somehow occur after pm_runtime_enable()
but before pm_runtime_get_sync().

This patch fixes all of the two problems by just incrementing the usage
counter before pm_runtime_enable(). It also adjust the order of disabling
runtime pm and storing the usage count in the error path to handle clock
gating properly.

Signed-off-by: Jisheng Zhang &lt;jszhang@marvell.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 62cf983ad84275f8580c807e5e596216c46773cf upstream.

Commit 0dcaa2499b7d ("sdhci-pxav3: Fix runtime PM initialization") tries
to fix one hang issue caused by calling sdhci_add_host() on a suspended
device. The fix enables the clock twice, once by clk_prepare_enable() and
another by pm_runtime_get_sync(), meaning that the clock will never be
gated at runtime PM suspend. I observed the power consumption regression on
Marvell BG2Q SoCs.

In fact, the fix is not correct. There still be a very small window
during which a runtime suspend might somehow occur after pm_runtime_enable()
but before pm_runtime_get_sync().

This patch fixes all of the two problems by just incrementing the usage
counter before pm_runtime_enable(). It also adjust the order of disabling
runtime pm and storing the usage count in the error path to handle clock
gating properly.

Signed-off-by: Jisheng Zhang &lt;jszhang@marvell.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci: Set SDHCI_POWER_ON with external vmmc</title>
<updated>2015-01-14T08:47:19+00:00</updated>
<author>
<name>Tim Kryger</name>
<email>tim.kryger@gmail.com</email>
</author>
<published>2015-01-14T06:24:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=3cbc6123a93dc91b99b58f7ea37d267fe93e1cad'/>
<id>3cbc6123a93dc91b99b58f7ea37d267fe93e1cad</id>
<content type='text'>
Host controllers lacking the required internal vmmc regulator may still
follow the spec with regard to the LSB of SDHCI_POWER_CONTROL.  Set the
SDHCI_POWER_ON bit when vmmc is enabled to encourage the controller to
to drive CMD, DAT, SDCLK.

This fixes a regression observed on some Qualcomm and Nvidia boards
caused by 5222161 mmc: sdhci: Improve external VDD regulator support.

Fixes: 52221610dd84 (mmc: sdhci: Improve external VDD regulator support)
Signed-off-by: Tim Kryger &lt;tim.kryger@gmail.com&gt;
Tested-by: Bjorn Andersson &lt;bjorn.andersson@sonymobile.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Host controllers lacking the required internal vmmc regulator may still
follow the spec with regard to the LSB of SDHCI_POWER_CONTROL.  Set the
SDHCI_POWER_ON bit when vmmc is enabled to encourage the controller to
to drive CMD, DAT, SDCLK.

This fixes a regression observed on some Qualcomm and Nvidia boards
caused by 5222161 mmc: sdhci: Improve external VDD regulator support.

Fixes: 52221610dd84 (mmc: sdhci: Improve external VDD regulator support)
Signed-off-by: Tim Kryger &lt;tim.kryger@gmail.com&gt;
Tested-by: Bjorn Andersson &lt;bjorn.andersson@sonymobile.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci-pci: Add support for Intel SPT</title>
<updated>2015-01-12T09:14:58+00:00</updated>
<author>
<name>Adrian Hunter</name>
<email>adrian.hunter@intel.com</email>
</author>
<published>2015-01-05T12:47:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=1f7f26528fb159e71f081df1d1050c218ff1d74d'/>
<id>1f7f26528fb159e71f081df1d1050c218ff1d74d</id>
<content type='text'>
Add PCI IDs for SPT eMMC, SDIO and SD card.

Signed-off-by: Adrian Hunter &lt;adrian.hunter@intel.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add PCI IDs for SPT eMMC, SDIO and SD card.

Signed-off-by: Adrian Hunter &lt;adrian.hunter@intel.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci-acpi: Add ACPI HID INT344D</title>
<updated>2015-01-12T09:14:57+00:00</updated>
<author>
<name>Adrian Hunter</name>
<email>adrian.hunter@intel.com</email>
</author>
<published>2015-01-05T12:47:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=d0ed8e6b0ab149421cd1532e7c5ebb0992ad25d0'/>
<id>d0ed8e6b0ab149421cd1532e7c5ebb0992ad25d0</id>
<content type='text'>
Add ACPI HID INT344D for an Intel SDIO host controller.

Signed-off-by: Adrian Hunter &lt;adrian.hunter@intel.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add ACPI HID INT344D for an Intel SDIO host controller.

Signed-off-by: Adrian Hunter &lt;adrian.hunter@intel.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mmc: sdhci: Fix sleep in atomic after inserting SD card</title>
<updated>2015-01-12T09:14:57+00:00</updated>
<author>
<name>Krzysztof Kozlowski</name>
<email>k.kozlowski@samsung.com</email>
</author>
<published>2015-01-05T09:50:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=2836766a9d0bd02c66073f8dd44796e6cc23848d'/>
<id>2836766a9d0bd02c66073f8dd44796e6cc23848d</id>
<content type='text'>
Sleep in atomic context happened on Trats2 board after inserting or
removing SD card because mmc_gpio_get_cd() was called under spin lock.

Fix this by moving card detection earlier, before acquiring spin lock.
The mmc_gpio_get_cd() call does not have to be protected by spin lock
because it does not access any sdhci internal data.
The sdhci_do_get_cd() call access host flags (SDHCI_DEVICE_DEAD). After
moving it out side of spin lock it could theoretically race with driver
removal but still there is no actual protection against manual card
eject.

Dmesg after inserting SD card:
[   41.663414] BUG: sleeping function called from invalid context at drivers/gpio/gpiolib.c:1511
[   41.670469] in_atomic(): 1, irqs_disabled(): 128, pid: 30, name: kworker/u8:1
[   41.677580] INFO: lockdep is turned off.
[   41.681486] irq event stamp: 61972
[   41.684872] hardirqs last  enabled at (61971): [&lt;c0490ee0&gt;] _raw_spin_unlock_irq+0x24/0x5c
[   41.693118] hardirqs last disabled at (61972): [&lt;c04907ac&gt;] _raw_spin_lock_irq+0x18/0x54
[   41.701190] softirqs last  enabled at (61648): [&lt;c0026fd4&gt;] __do_softirq+0x234/0x2c8
[   41.708914] softirqs last disabled at (61631): [&lt;c00273a0&gt;] irq_exit+0xd0/0x114
[   41.716206] Preemption disabled at:[&lt;  (null)&gt;]   (null)
[   41.721500]
[   41.722985] CPU: 3 PID: 30 Comm: kworker/u8:1 Tainted: G        W      3.18.0-rc5-next-20141121 #883
[   41.732111] Workqueue: kmmcd mmc_rescan
[   41.735945] [&lt;c0014d2c&gt;] (unwind_backtrace) from [&lt;c0011c80&gt;] (show_stack+0x10/0x14)
[   41.743661] [&lt;c0011c80&gt;] (show_stack) from [&lt;c0489d14&gt;] (dump_stack+0x70/0xbc)
[   41.750867] [&lt;c0489d14&gt;] (dump_stack) from [&lt;c0228b74&gt;] (gpiod_get_raw_value_cansleep+0x18/0x30)
[   41.759628] [&lt;c0228b74&gt;] (gpiod_get_raw_value_cansleep) from [&lt;c03646e8&gt;] (mmc_gpio_get_cd+0x38/0x58)
[   41.768821] [&lt;c03646e8&gt;] (mmc_gpio_get_cd) from [&lt;c036d378&gt;] (sdhci_request+0x50/0x1a4)
[   41.776808] [&lt;c036d378&gt;] (sdhci_request) from [&lt;c0357934&gt;] (mmc_start_request+0x138/0x268)
[   41.785051] [&lt;c0357934&gt;] (mmc_start_request) from [&lt;c0357cc8&gt;] (mmc_wait_for_req+0x58/0x1a0)
[   41.793469] [&lt;c0357cc8&gt;] (mmc_wait_for_req) from [&lt;c0357e68&gt;] (mmc_wait_for_cmd+0x58/0x78)
[   41.801714] [&lt;c0357e68&gt;] (mmc_wait_for_cmd) from [&lt;c0361c00&gt;] (mmc_io_rw_direct_host+0x98/0x124)
[   41.810480] [&lt;c0361c00&gt;] (mmc_io_rw_direct_host) from [&lt;c03620f8&gt;] (sdio_reset+0x2c/0x64)
[   41.818641] [&lt;c03620f8&gt;] (sdio_reset) from [&lt;c035a3d8&gt;] (mmc_rescan+0x254/0x2e4)
[   41.826028] [&lt;c035a3d8&gt;] (mmc_rescan) from [&lt;c003a0e0&gt;] (process_one_work+0x180/0x3f4)
[   41.833920] [&lt;c003a0e0&gt;] (process_one_work) from [&lt;c003a3bc&gt;] (worker_thread+0x34/0x4b0)
[   41.841991] [&lt;c003a3bc&gt;] (worker_thread) from [&lt;c003fed8&gt;] (kthread+0xe4/0x104)
[   41.849285] [&lt;c003fed8&gt;] (kthread) from [&lt;c000f268&gt;] (ret_from_fork+0x14/0x2c)
[   42.038276] mmc0: new high speed SDHC card at address 1234

Signed-off-by: Krzysztof Kozlowski &lt;k.kozlowski@samsung.com&gt;
Fixes: 94144a465dd0 ("mmc: sdhci: add get_cd() implementation")
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Sleep in atomic context happened on Trats2 board after inserting or
removing SD card because mmc_gpio_get_cd() was called under spin lock.

Fix this by moving card detection earlier, before acquiring spin lock.
The mmc_gpio_get_cd() call does not have to be protected by spin lock
because it does not access any sdhci internal data.
The sdhci_do_get_cd() call access host flags (SDHCI_DEVICE_DEAD). After
moving it out side of spin lock it could theoretically race with driver
removal but still there is no actual protection against manual card
eject.

Dmesg after inserting SD card:
[   41.663414] BUG: sleeping function called from invalid context at drivers/gpio/gpiolib.c:1511
[   41.670469] in_atomic(): 1, irqs_disabled(): 128, pid: 30, name: kworker/u8:1
[   41.677580] INFO: lockdep is turned off.
[   41.681486] irq event stamp: 61972
[   41.684872] hardirqs last  enabled at (61971): [&lt;c0490ee0&gt;] _raw_spin_unlock_irq+0x24/0x5c
[   41.693118] hardirqs last disabled at (61972): [&lt;c04907ac&gt;] _raw_spin_lock_irq+0x18/0x54
[   41.701190] softirqs last  enabled at (61648): [&lt;c0026fd4&gt;] __do_softirq+0x234/0x2c8
[   41.708914] softirqs last disabled at (61631): [&lt;c00273a0&gt;] irq_exit+0xd0/0x114
[   41.716206] Preemption disabled at:[&lt;  (null)&gt;]   (null)
[   41.721500]
[   41.722985] CPU: 3 PID: 30 Comm: kworker/u8:1 Tainted: G        W      3.18.0-rc5-next-20141121 #883
[   41.732111] Workqueue: kmmcd mmc_rescan
[   41.735945] [&lt;c0014d2c&gt;] (unwind_backtrace) from [&lt;c0011c80&gt;] (show_stack+0x10/0x14)
[   41.743661] [&lt;c0011c80&gt;] (show_stack) from [&lt;c0489d14&gt;] (dump_stack+0x70/0xbc)
[   41.750867] [&lt;c0489d14&gt;] (dump_stack) from [&lt;c0228b74&gt;] (gpiod_get_raw_value_cansleep+0x18/0x30)
[   41.759628] [&lt;c0228b74&gt;] (gpiod_get_raw_value_cansleep) from [&lt;c03646e8&gt;] (mmc_gpio_get_cd+0x38/0x58)
[   41.768821] [&lt;c03646e8&gt;] (mmc_gpio_get_cd) from [&lt;c036d378&gt;] (sdhci_request+0x50/0x1a4)
[   41.776808] [&lt;c036d378&gt;] (sdhci_request) from [&lt;c0357934&gt;] (mmc_start_request+0x138/0x268)
[   41.785051] [&lt;c0357934&gt;] (mmc_start_request) from [&lt;c0357cc8&gt;] (mmc_wait_for_req+0x58/0x1a0)
[   41.793469] [&lt;c0357cc8&gt;] (mmc_wait_for_req) from [&lt;c0357e68&gt;] (mmc_wait_for_cmd+0x58/0x78)
[   41.801714] [&lt;c0357e68&gt;] (mmc_wait_for_cmd) from [&lt;c0361c00&gt;] (mmc_io_rw_direct_host+0x98/0x124)
[   41.810480] [&lt;c0361c00&gt;] (mmc_io_rw_direct_host) from [&lt;c03620f8&gt;] (sdio_reset+0x2c/0x64)
[   41.818641] [&lt;c03620f8&gt;] (sdio_reset) from [&lt;c035a3d8&gt;] (mmc_rescan+0x254/0x2e4)
[   41.826028] [&lt;c035a3d8&gt;] (mmc_rescan) from [&lt;c003a0e0&gt;] (process_one_work+0x180/0x3f4)
[   41.833920] [&lt;c003a0e0&gt;] (process_one_work) from [&lt;c003a3bc&gt;] (worker_thread+0x34/0x4b0)
[   41.841991] [&lt;c003a3bc&gt;] (worker_thread) from [&lt;c003fed8&gt;] (kthread+0xe4/0x104)
[   41.849285] [&lt;c003fed8&gt;] (kthread) from [&lt;c000f268&gt;] (ret_from_fork+0x14/0x2c)
[   42.038276] mmc0: new high speed SDHC card at address 1234

Signed-off-by: Krzysztof Kozlowski &lt;k.kozlowski@samsung.com&gt;
Fixes: 94144a465dd0 ("mmc: sdhci: add get_cd() implementation")
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
