2011-03-30 22:23:31

by Manoj Iyer

[permalink] [raw]
Subject: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

The ricoh SD/MMC card reader [1180:e823] is able to read SD cards, I
recently submitted a patch to enable this card reader
(https://lkml.org/lkml/2011/2/11/309).

But it is not able to mount MMC cards.

When I insert an MMC card I get:
mmc0: error -110 whilst initialising MMC card

I traced it down to ETIMEDOUT coming from sdhci_cmd_irq() can someone
give me a clue as to where I should start looking?

======= lspci -vvnn ==============
0d:00.0 System peripheral [0880]: Ricoh Co Ltd Device [1180:e823] (rev
05) (prog-if 01)
Subsystem: Lenovo Device [17aa:21ce]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
<MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 16
Region 0: Memory at d1400000 (32-bit, non-prefetchable) [size=256]
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [78] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME+
Capabilities: [80] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1
unlimited
ExtTag- AttnBtn+ AttnInd+ PwrInd+ RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
LnkCap: Port #1, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0
<4us, L1 <64us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive-
BWMgmt- ABWMgmt-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Capabilities: [800 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF-
MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+
MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Kernel driver in use: sdhci-pci
Kernel modules: sdhci-pci
=======================================================

--
Manoj Iyer
Ubuntu/Canonical
Hardware Enablement


2011-03-30 22:59:08

by Chris Ball

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Hi,

(Adding linux-mmc@.)

On Wed, Mar 30 2011, Manoj wrote:
> The ricoh SD/MMC card reader [1180:e823] is able to read SD cards, I
> recently submitted a patch to enable this card reader
> (https://lkml.org/lkml/2011/2/11/309).
>
> But it is not able to mount MMC cards.
>
> When I insert an MMC card I get:
> mmc0: error -110 whilst initialising MMC card
>
> I traced it down to ETIMEDOUT coming from sdhci_cmd_irq() can someone
> give me a clue as to where I should start looking?

The timeout's being raised by the controller, so it could simply be a
bad card, or a controller that doesn't support MMC cards properly, or
similar. You could start with:

* turn on CONFIG_MMC_DEBUG and post output
* see if sdhci.debug_quirks=1 helps

If you have access to a scope, checking out the CMD line often hints at
whether a problem is software or hardware.

- Chris.

>
> ======= lspci -vvnn ==============
> 0d:00.0 System peripheral [0880]: Ricoh Co Ltd Device [1180:e823] (rev
> 05) (prog-if 01)
> Subsystem: Lenovo Device [17aa:21ce]
> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
> ParErr-
> Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
> <TAbort-
> <MAbort- >SERR- <PERR- INTx-
> Latency: 0, Cache Line Size: 64 bytes
> Interrupt: pin A routed to IRQ 16
> Region 0: Memory at d1400000 (32-bit, non-prefetchable) [size=256]
> Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
> Address: 0000000000000000 Data: 0000
> Capabilities: [78] Power Management version 3
> Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME+
> Capabilities: [80] Express (v1) Endpoint, MSI 00
> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
> unlimited, L1 unlimited
> ExtTag- AttnBtn+ AttnInd+ PwrInd+ RBE+ FLReset-
> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
> RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
> MaxPayload 128 bytes, MaxReadReq 512 bytes
> DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
> LnkCap: Port #1, Speed 2.5GT/s, Width x1, ASPM L0s L1,
> Latency L0 <4us, L1 <64us
> ClockPM+ Surprise- LLActRep- BwNot-
> LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
> ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train-
> SlotClk+ DLActive-
> BWMgmt- ABWMgmt-
> Capabilities: [100 v1] Virtual Channel
> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
> Arb: Fixed- WRR32- WRR64- WRR128-
> Ctrl: ArbSelect=Fixed
> Status: InProgress-
> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
> Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
> Status: NegoPending- InProgress-
> Capabilities: [800 v1] Advanced Error Reporting
> UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt-
> UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt-
> UnxCmplt- RxOF-
> MalfTLP- ECRC- UnsupReq- ACSViol-
> UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt-
> UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
> CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
> AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
> Kernel driver in use: sdhci-pci
> Kernel modules: sdhci-pci

--
Chris Ball <[email protected]> <http://printf.net/>
One Laptop Per Child

2011-03-30 23:33:08

by Manoj Iyer

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.


>
> * turn on CONFIG_MMC_DEBUG and post output
> * see if sdhci.debug_quirks=1 helps

It could be that this card does not support MMC cards, it shows up as
SDHCI controller and does not mention MMC, or may be they all come up as
SDHCI, I dont know enough to make that assessment.

Here is the output with debug turned on. Sorry for the flood:

[ 2.182294] sdhci-pci 0000:0d:00.0: SDHCI controller found
[1180:e823] (rev 5)
[ 1.182298] sdhci-pci 0000:0d:00.0: found 1 slot(s)
[ 1.182318] sdhci-pci 0000:0d:00.0: PCI INT A -> GSI 16 (level, low)
-> IRQ 16
[ 1.182381] mmc0: Unknown controller version (2). You may experience
problems.
[ 1.182389] sdhci-pci 0000:0d:00.0: setting latency timer to 64
[ 1.182403] sdhci: ============== REGISTER DUMP ==============
[ 1.182411] sdhci: Sys addr: 0x00000000 | Version: 0x00000502
[ 1.182418] sdhci: Blk size: 0x00000000 | Blk cnt: 0x00000000
[ 1.182425] sdhci: Argument: 0x00000000 | Trn mode: 0x00000000
[ 1.182432] sdhci: Present: 0x01f20000 | Host ctl: 0x00000000
[ 1.182436] alloc irq_desc for 44 on node -1
[ 1.182437] alloc kstat_irqs on node -1
[ 1.182439] sdhci: Power: 0x00000000 | Blk gap: 0x00000000
[ 1.182444] sdhci: Wake-up: 0x00000000 | Clock: 0x00000000
[ 1.182451] sdhci: Timeout: 0x00000000 | Int stat: 0x00000000
[ 1.182456] sdhci: Int enab: 0x00ff0003 | Sig enab: 0x00ff0003
[ 1.182463] sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000
[ 1.182470] sdhci: Caps: 0x21e8c8b2 | Max curr: 0x00000040
[ 1.182477] sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x00000000
[ 1.182478] sdhci: ===========================================
[ 1.182499] Registered led device: mmc0::
[ 1.182518] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0
[ 1.182574] mmc0: SDHCI controller on PCI [0000:0d:00.0] using ADMA
[ 1.182578] mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0
timing 0
[ 1.195203] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 1.211345] mmc0: starting CMD52 arg 00000c00 flags 00000195
[ 1.213394] mmc0: req done (CMD52): -123: 00000000 00000000 00000000
00000000
[ 1.213402] mmc0: starting CMD52 arg 80000c08 flags 00000195
[ 1.215470] mmc0: req done (CMD52): -123: 00000000 00000000 00000000
00000000
[ 1.215476] mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 21
width 0 timing 0
[ 1.216473] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 1.218477] mmc0: req done (CMD0): -123: 00000000 00000000 00000000
00000000
[ 1.219472] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 1.220469] mmc0: starting CMD8 arg 000001aa flags 000002f5
[ 1.222472] mmc0: req done (CMD8): -123: 00000000 00000000 00000000
00000000
[ 1.222476] mmc0: starting CMD5 arg 00000000 flags 000002e1
[ 1.224479] mmc0: req failed (CMD5): -123, retrying...
[ 1.226476] mmc0: req failed (CMD5): -123, retrying...
[ 1.228478] mmc0: req failed (CMD5): -123, retrying...
[ 1.230479] mmc0: req done (CMD5): -123: 00000000 00000000 00000000
00000000
[ 1.230483] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.232489] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.232492] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.234496] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.234499] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.236507] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.236511] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.238521] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.238524] mmc0: starting CMD1 arg 00000000 flags 000000e1
[ 1.240531] mmc0: req done (CMD1): -123: 00000000 00000000 00000000
00000000
[ 1.240536] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0
[ 30.617181] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000040
[ 30.813108] mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0
timing 0
[ 30.829096] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 30.845074] mmc0: starting CMD52 arg 00000c00 flags 00000195
[ 30.845216] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.847216] mmc0: req done (CMD52): -110: 00000000 00000000 00000000
00000000
[ 30.847224] mmc0: starting CMD52 arg 80000c08 flags 00000195
[ 30.847303] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.849310] mmc0: req done (CMD52): -110: 00000000 00000000 00000000
00000000
[ 30.849315] mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 21
width 0 timing 0
[ 30.850310] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 30.850359] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.850364] mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
[ 30.851361] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 30.852356] mmc0: starting CMD8 arg 000001aa flags 000002f5
[ 30.852399] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.854403] mmc0: req done (CMD8): -110: 00000000 00000000 00000000
00000000
[ 30.854463] mmc0: starting CMD5 arg 00000000 flags 000002e1
[ 30.854501] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.856497] mmc0: req failed (CMD5): -110, retrying...
[ 30.856535] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.858536] mmc0: req failed (CMD5): -110, retrying...
[ 30.858569] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.860565] mmc0: req failed (CMD5): -110, retrying...
[ 30.860599] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.862600] mmc0: req done (CMD5): -110: 00000000 00000000 00000000
00000000
[ 30.862605] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 30.862642] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.864641] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 30.864645] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 30.864684] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.866682] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 30.866686] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 30.866764] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.868771] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 30.868776] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 30.868816] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.870821] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 30.870825] mmc0: starting CMD1 arg 00000000 flags 000000e1
[ 30.870856] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.870862] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.870868] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 20
width 0 timing 0
[ 30.870873] mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 20
width 0 timing 0
[ 30.871869] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 30.871918] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.871923] mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
[ 30.872922] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 20
width 0 timing 0
[ 30.873918] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.873996] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.874015] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.889033] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.889095] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.889110] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.905020] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.905081] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.905096] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.921009] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.921087] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.921103] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.936994] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.937071] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.937087] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.952980] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.953057] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.953074] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.968961] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.969039] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.969055] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 30.984946] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 30.985024] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.985039] mmc0: req done (CMD1): 0: 803f8000 00000000 00000000 00000000
[ 30.985054] mmc0: starting CMD2 arg 00000000 flags 00000067
[ 30.985112] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 30.985135] mmc0: req done (CMD2): 0: ffffffff ffffffff ffffffff ffffff00
[ 30.985151] mmc0: starting CMD3 arg 00010000 flags 00000015
[ 30.985201] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.987204] mmc0: req failed (CMD3): -110, retrying...
[ 30.987237] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.989232] mmc0: req failed (CMD3): -110, retrying...
[ 30.989265] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.991262] mmc0: req failed (CMD3): -110, retrying...
[ 30.991296] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 30.993295] mmc0: req done (CMD3): -110: 00000000 00000000 00000000
00000000
[ 30.993302] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0
[ 30.993313] mmc0: error -110 whilst initialising MMC card
[ 30.993315] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0


>
> If you have access to a scope, checking out the CMD line often hints at
> whether a problem is software or hardware.
>
> - Chris.
>
>>
>> ======= lspci -vvnn ==============
>> 0d:00.0 System peripheral [0880]: Ricoh Co Ltd Device [1180:e823] (rev
>> 05) (prog-if 01)
>> Subsystem: Lenovo Device [17aa:21ce]
>> Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
>> ParErr-
>> Stepping- SERR- FastB2B- DisINTx-
>> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast>TAbort-
>> <TAbort-
>> <MAbort->SERR-<PERR- INTx-
>> Latency: 0, Cache Line Size: 64 bytes
>> Interrupt: pin A routed to IRQ 16
>> Region 0: Memory at d1400000 (32-bit, non-prefetchable) [size=256]
>> Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>> Address: 0000000000000000 Data: 0000
>> Capabilities: [78] Power Management version 3
>> Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
>> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME+
>> Capabilities: [80] Express (v1) Endpoint, MSI 00
>> DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
>> unlimited, L1 unlimited
>> ExtTag- AttnBtn+ AttnInd+ PwrInd+ RBE+ FLReset-
>> DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>> RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
>> MaxPayload 128 bytes, MaxReadReq 512 bytes
>> DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
>> LnkCap: Port #1, Speed 2.5GT/s, Width x1, ASPM L0s L1,
>> Latency L0<4us, L1<64us
>> ClockPM+ Surprise- LLActRep- BwNot-
>> LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
>> ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
>> LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train-
>> SlotClk+ DLActive-
>> BWMgmt- ABWMgmt-
>> Capabilities: [100 v1] Virtual Channel
>> Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
>> Arb: Fixed- WRR32- WRR64- WRR128-
>> Ctrl: ArbSelect=Fixed
>> Status: InProgress-
>> VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
>> Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
>> Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
>> Status: NegoPending- InProgress-
>> Capabilities: [800 v1] Advanced Error Reporting
>> UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt-
>> UnxCmplt- RxOF-
>> MalfTLP- ECRC- UnsupReq- ACSViol-
>> UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt-
>> UnxCmplt- RxOF-
>> MalfTLP- ECRC- UnsupReq- ACSViol-
>> UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt-
>> UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
>> CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
>> CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
>> AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
>> Kernel driver in use: sdhci-pci
>> Kernel modules: sdhci-pci
>

2011-03-30 23:48:07

by Chris Ball

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Hi,

On Wed, Mar 30 2011, Manoj wrote:
>>
>> * turn on CONFIG_MMC_DEBUG and post output
>> * see if sdhci.debug_quirks=1 helps
>
> It could be that this card does not support MMC cards, it shows up as
> SDHCI controller and does not mention MMC, or may be they all come up
> as SDHCI, I dont know enough to make that assessment.
>
> Here is the output with debug turned on. Sorry for the flood:

There's no sign of life at all from the card. Have you tried another
MMC card to verify that this one isn't broken? Or the quirks?

- Chris.
--
Chris Ball <[email protected]> <http://printf.net/>
One Laptop Per Child

2011-03-31 14:12:25

by Manoj Iyer

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.


> Hi,
>
> On Wed, Mar 30 2011, Manoj wrote:
>>>
>>> * turn on CONFIG_MMC_DEBUG and post output
>>> * see if sdhci.debug_quirks=1 helps
>>
>> It could be that this card does not support MMC cards, it shows up as
>> SDHCI controller and does not mention MMC, or may be they all come up
>> as SDHCI, I dont know enough to make that assessment.
>>
>> Here is the output with debug turned on. Sorry for the flood:
>
> There's no sign of life at all from the card. Have you tried another
> MMC card to verify that this one isn't broken? Or the quirks?

Yes, tried it all, I have tried MMC, MMCplus, and quirks. I get the same
result. At the same time it sees SDHCI just fine.

>
> - Chris.

2011-03-31 14:37:33

by Chris Ball

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Hi Manoj,

On Thu, Mar 31 2011, Manoj wrote:
>> There's no sign of life at all from the card. Have you tried another
>> MMC card to verify that this one isn't broken? Or the quirks?
>
> Yes, tried it all, I have tried MMC, MMCplus, and quirks. I get the
> same result. At the same time it sees SDHCI just fine.

How about setting CONFIG_MMC_RICOH_MMC?

config MMC_RICOH_MMC
bool "Ricoh MMC Controller Disabler (EXPERIMENTAL)"
depends on MMC_SDHCI_PCI
help
This adds a pci quirk to disable Ricoh MMC Controller. This
proprietary controller is unnecessary because the SDHCI driver
supports MMC cards on the SD controller, but if it is not
disabled, it will steal the MMC cards away - rendering them
useless. It is safe to select this even if you don't
have a Ricoh based card reader.

--
Chris Ball <[email protected]> <http://printf.net/>
One Laptop Per Child

2011-03-31 14:41:34

by Manoj Iyer

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.



Manoj Iyer
Ubuntu/Canonical
Hardware Enablement

On 03/31/2011 09:43 AM, Chris Ball wrote:
> Hi Manoj,
>
> On Thu, Mar 31 2011, Manoj wrote:
>>> There's no sign of life at all from the card. Have you tried another
>>> MMC card to verify that this one isn't broken? Or the quirks?
>>
>> Yes, tried it all, I have tried MMC, MMCplus, and quirks. I get the
>> same result. At the same time it sees SDHCI just fine.
>
> How about setting CONFIG_MMC_RICOH_MMC?

Yes Sir... that was already set.
CONFIG_MMC_RICOH_MMC=y



>
> config MMC_RICOH_MMC
> bool "Ricoh MMC Controller Disabler (EXPERIMENTAL)"
> depends on MMC_SDHCI_PCI
> help
> This adds a pci quirk to disable Ricoh MMC Controller. This
> proprietary controller is unnecessary because the SDHCI driver
> supports MMC cards on the SD controller, but if it is not
> disabled, it will steal the MMC cards away - rendering them
> useless. It is safe to select this even if you don't
> have a Ricoh based card reader.
>

2011-03-31 14:47:59

by Manoj Iyer

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.


>
> How about setting CONFIG_MMC_RICOH_MMC?

In fact that is one of the default config settings, so even if the card
reader was not present that option is always 'y'

>
> config MMC_RICOH_MMC
> bool "Ricoh MMC Controller Disabler (EXPERIMENTAL)"
> depends on MMC_SDHCI_PCI
> help
> This adds a pci quirk to disable Ricoh MMC Controller. This
> proprietary controller is unnecessary because the SDHCI driver
> supports MMC cards on the SD controller, but if it is not
> disabled, it will steal the MMC cards away - rendering them
> useless. It is safe to select this even if you don't
> have a Ricoh based card reader.
>

2011-03-31 15:07:21

by Chris Ball

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Hi,

On Thu, Mar 31 2011, Manoj wrote:
>> How about setting CONFIG_MMC_RICOH_MMC?
>
> Yes Sir... that was already set.
> CONFIG_MMC_RICOH_MMC=y

Ah, I think MMC_RICOH_MMC needs to know about this new PCI ID too.
I don't know whether that code knows how to turn off the MMC controller
on this model, though.

Please try this patch:

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index bd80f63..0852046 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2758,6 +2758,9 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
}
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
+
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C823, ricoh_mmc_fixup_r5c832);
+DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C823, ricoh_mmc_fixup_r5c832);
#endif /*CONFIG_MMC_RICOH_MMC*/

#if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 11fd381..9ec3316 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -1535,6 +1535,7 @@
#define PCI_DEVICE_ID_RICOH_RL5C476 0x0476
#define PCI_DEVICE_ID_RICOH_RL5C478 0x0478
#define PCI_DEVICE_ID_RICOH_R5C822 0x0822
+#define PCI_DEVICE_ID_RICOH_R5C823 0x0823
#define PCI_DEVICE_ID_RICOH_R5C832 0x0832
#define PCI_DEVICE_ID_RICOH_R5C843 0x0843


and post dmesg of the result, as well as whether it worked.

We're trying the 0x832 disable method on an 0x823 controller, so I don't
know whether that'll work.

Thanks,

- Chris.
--
Chris Ball <[email protected]> <http://printf.net/>
One Laptop Per Child

2011-03-31 16:00:22

by Manoj Iyer

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Tried your patch, also enabled CONFIG_MMC_DEBUG=y
CONFIG_MMC_RICOH_MMC=y, with the same result. MMC did not mount.

Here is a portion of dmesg:


[ 1.176793] sdhci: Secure Digital Host Controller Interface driver
[ 1.176795] sdhci: Copyright(c) Pierre Ossman
[ 1.178043] sdhci-pci 0000:0d:00.0: SDHCI controller found
[1180:e823] (rev 5)
[ 1.178049] sdhci-pci 0000:0d:00.0: found 1 slot(s)
[ 1.178071] sdhci-pci 0000:0d:00.0: PCI INT A -> GSI 16 (level, low)
-> IRQ 16
[ 1.178139] mmc0: Unknown controller version (2). You may experience
problems.
[ 1.178149] sdhci-pci 0000:0d:00.0: setting latency timer to 64
[ 1.178163] sdhci: ============== REGISTER DUMP ==============
[ 1.178169] sdhci: Sys addr: 0x00000000 | Version: 0x00000502
[ 1.178174] sdhci: Blk size: 0x00000000 | Blk cnt: 0x00000000
[ 1.178180] sdhci: Argument: 0x00000000 | Trn mode: 0x00000000
[ 1.178186] sdhci: Present: 0x01f20000 | Host ctl: 0x00000000
[ 1.178192] sdhci: Power: 0x00000000 | Blk gap: 0x00000000
[ 1.178197] sdhci: Wake-up: 0x00000000 | Clock: 0x00000000
[ 1.178203] sdhci: Timeout: 0x00000000 | Int stat: 0x00000000
[ 1.178209] sdhci: Int enab: 0x00ff0003 | Sig enab: 0x00ff0003
[ 1.178214] sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000
[ 1.178220] sdhci: Caps: 0x21e8c8b2 | Max curr: 0x00000040
[ 1.178226] sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x00000000
[ 1.178227] sdhci: ===========================================
[ 1.178250] Registered led device: mmc0::
[ 1.178272] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0
[ 1.178331] mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0
timing 0
[ 1.178409] mmc0: SDHCI controller on PCI [0000:0d:00.0] using ADMA
[ 1.186216] agpgart-intel 0000:00:00.0: Intel Sandybridge Chipset
[ 1.187272] agpgart-intel 0000:00:00.0: detected 65532K stolen
memory, trimming to 32768K
[ 1.190407] e1000e: Intel(R) PRO/1000 Network Driver - 1.0.2-k4
[ 1.190409] e1000e: Copyright (c) 1999 - 2009 Intel Corporation.
[ 1.206059] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 1.212187] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xc0000000
[ 1.212204] ahci 0000:00:1f.2: version 3.0
[ 1.212221] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[ 1.212258] alloc irq_desc for 44 on node -1
[ 1.212260] alloc kstat_irqs on node -1
[ 1.212270] ahci 0000:00:1f.2: irq 44 for MSI/MSI-X
[ 1.212309] ahci: SSS flag set, parallel bus scan disabled
[ 1.219649] mmc0: starting CMD52 arg 00000c00 flags 00000195
[ 1.221698] mmc0: req done (CMD52): -123: 00000000 00000000 00000000
00000000
[ 1.221704] mmc0: starting CMD52 arg 80000c08 flags 00000195
[ 1.223714] mmc0: req done (CMD52): -123: 00000000 00000000 00000000
00000000
[ 1.223719] mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 21
width 0 timing 0
[ 1.224717] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 1.226726] mmc0: req done (CMD0): -123: 00000000 00000000 00000000
00000000
[ 1.227723] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 1.228720] mmc0: starting CMD8 arg 000001aa flags 000002f5
[ 1.230724] mmc0: req done (CMD8): -123: 00000000 00000000 00000000
00000000
[ 1.230728] mmc0: starting CMD5 arg 00000000 flags 000002e1
[ 1.230919] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 6 ports 6 Gbps
0x1b impl SATA mode
[ 1.230922] ahci 0000:00:1f.2: flags: 64bit ncq sntf ilck stag pm led
clo pio slum part ems sxs apst
[ 1.230927] ahci 0000:00:1f.2: setting latency timer to 64
[ 1.232731] mmc0: req failed (CMD5): -123, retrying...
[ 1.234730] mmc0: req failed (CMD5): -123, retrying...
[ 1.236730] mmc0: req failed (CMD5): -123, retrying...
[ 1.238731] mmc0: req done (CMD5): -123: 00000000 00000000 00000000
00000000
[ 1.238735] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.240741] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.240746] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.242754] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.242758] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.242895] [drm] Initialized drm 1.1.0 20060810
[ 1.244764] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.244768] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 1.246774] mmc0: req done (CMD55): -123: 00000000 00000000 00000000
00000000
[ 1.246780] mmc0: starting CMD1 arg 00000000 flags 000000e1
[ 1.248787] mmc0: req done (CMD1): -123: 00000000 00000000 00000000
00000000
[ 1.248792] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0
[ 27.508892] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000040
[ 27.706286] mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0
timing 0
[ 27.722274] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 27.738270] mmc0: starting CMD52 arg 00000c00 flags 00000195
[ 27.738399] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.740399] mmc0: req done (CMD52): -110: 00000000 00000000 00000000
00000000
[ 27.740407] mmc0: starting CMD52 arg 80000c08 flags 00000195
[ 27.740485] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.742492] mmc0: req done (CMD52): -110: 00000000 00000000 00000000
00000000
[ 27.742497] mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 21
width 0 timing 0
[ 27.743493] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 27.743540] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.743546] mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
[ 27.744543] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 21
width 0 timing 0
[ 27.745539] mmc0: starting CMD8 arg 000001aa flags 000002f5
[ 27.745580] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.747584] mmc0: req done (CMD8): -110: 00000000 00000000 00000000
00000000
[ 27.747639] mmc0: starting CMD5 arg 00000000 flags 000002e1
[ 27.747675] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.749671] mmc0: req failed (CMD5): -110, retrying...
[ 27.749708] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.751710] mmc0: req failed (CMD5): -110, retrying...
[ 27.751743] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.753738] mmc0: req failed (CMD5): -110, retrying...
[ 27.753771] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.755771] mmc0: req done (CMD5): -110: 00000000 00000000 00000000
00000000
[ 27.755790] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 27.755826] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.757824] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 27.757828] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 27.757863] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.759863] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 27.759905] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 27.759941] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.761939] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 27.761942] mmc0: starting CMD55 arg 00000000 flags 000000f5
[ 27.761981] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.763985] mmc0: req done (CMD55): -110: 00000000 00000000 00000000
00000000
[ 27.764026] mmc0: starting CMD1 arg 00000000 flags 000000e1
[ 27.764060] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.764067] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.764072] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 20
width 0 timing 0
[ 27.764077] mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 20
width 0 timing 0
[ 27.765073] mmc0: starting CMD0 arg 00000000 flags 000000c0
[ 27.765096] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.765100] mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
[ 27.766094] mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 20
width 0 timing 0
[ 27.767090] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.767129] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.767142] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.782251] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.782309] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.782324] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.798246] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.798320] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.798336] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.814242] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.814314] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.814331] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.830232] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.830288] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.830304] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.846231] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.846285] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.846301] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.862226] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.862299] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.862315] mmc0: req done (CMD1): 0: 003f8000 00000000 00000000 00000000
[ 27.878217] mmc0: starting CMD1 arg 40300000 flags 000000e1
[ 27.878273] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.878290] mmc0: req done (CMD1): 0: 803f8000 00000000 00000000 00000000
[ 27.878303] mmc0: starting CMD2 arg 00000000 flags 00000067
[ 27.878359] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
[ 27.878382] mmc0: req done (CMD2): 0: ffffffff ffffffff ffffffff ffffff00
[ 27.878399] mmc0: starting CMD3 arg 00010000 flags 00000015
[ 27.878438] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.880442] mmc0: req failed (CMD3): -110, retrying...
[ 27.880474] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.882468] mmc0: req failed (CMD3): -110, retrying...
[ 27.882501] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.884498] mmc0: req failed (CMD3): -110, retrying...
[ 27.884532] sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00018000
[ 27.886530] mmc0: req done (CMD3): -110: 00000000 00000000 00000000
00000000
[ 27.886537] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0
[ 27.886548] mmc0: error -110 whilst initialising MMC card
[ 27.886550] mmc0: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
timing 0




Manoj Iyer
Ubuntu/Canonical
Hardware Enablement

On 03/31/2011 10:13 AM, Chris Ball wrote:
> Hi,
>
> On Thu, Mar 31 2011, Manoj wrote:
>>> How about setting CONFIG_MMC_RICOH_MMC?
>>
>> Yes Sir... that was already set.
>> CONFIG_MMC_RICOH_MMC=y
>
> Ah, I think MMC_RICOH_MMC needs to know about this new PCI ID too.
> I don't know whether that code knows how to turn off the MMC controller
> on this model, though.
>
> Please try this patch:
>
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index bd80f63..0852046 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -2758,6 +2758,9 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
> }
> DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
> DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
> +
> +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C823, ricoh_mmc_fixup_r5c832);
> +DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C823, ricoh_mmc_fixup_r5c832);
> #endif /*CONFIG_MMC_RICOH_MMC*/
>
> #if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP)
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index 11fd381..9ec3316 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -1535,6 +1535,7 @@
> #define PCI_DEVICE_ID_RICOH_RL5C476 0x0476
> #define PCI_DEVICE_ID_RICOH_RL5C478 0x0478
> #define PCI_DEVICE_ID_RICOH_R5C822 0x0822
> +#define PCI_DEVICE_ID_RICOH_R5C823 0x0823
> #define PCI_DEVICE_ID_RICOH_R5C832 0x0832
> #define PCI_DEVICE_ID_RICOH_R5C843 0x0843
>
>
> and post dmesg of the result, as well as whether it worked.
>
> We're trying the 0x832 disable method on an 0x823 controller, so I don't
> know whether that'll work.
>
> Thanks,
>
> - Chris.

2011-03-31 16:25:25

by Chris Ball

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Hi,

On Thu, Mar 31 2011, Manoj wrote:
> Tried your patch, also enabled CONFIG_MMC_DEBUG=y
> CONFIG_MMC_RICOH_MMC=y, with the same result. MMC did not mount.

Okay, thanks for trying.

> Here is a portion of dmesg:

Please send all of dmesg; I want to see whether the Ricoh code ran.

- Chris.
--
Chris Ball <[email protected]> <http://printf.net/>
One Laptop Per Child

2011-03-31 17:09:48

by Manoj Iyer

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Sorry about that... dmesg is attached.

Manoj Iyer
Ubuntu/Canonical
Hardware Enablement

On 03/31/2011 11:31 AM, Chris Ball wrote:
> Hi,
>
> On Thu, Mar 31 2011, Manoj wrote:
>> Tried your patch, also enabled CONFIG_MMC_DEBUG=y
>> CONFIG_MMC_RICOH_MMC=y, with the same result. MMC did not mount.
>
> Okay, thanks for trying.
>
>> Here is a portion of dmesg:
>
> Please send all of dmesg; I want to see whether the Ricoh code ran.
>
> - Chris.


Attachments:
dmesg.out (90.15 kB)

2011-03-31 17:20:47

by Chris Ball

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Hi,

On Thu, Mar 31 2011, Manoj wrote:
> Sorry about that... dmesg is attached.

Thanks. I see that the Ricoh code didn't run and that the PCI ID in
the patch is wrong; in include/linux/pci_ids.h, it should be:

#define PCI_DEVICE_ID_RICOH_R5C823 0xe823

So, please retry with the "e" there in place and resend full dmesg.

- Chris.
--
Chris Ball <[email protected]> <http://printf.net/>
One Laptop Per Child

2011-03-31 17:59:07

by Manoj Iyer

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Card did not mount. New dmesg is attached.

Manoj Iyer
Ubuntu/Canonical
Hardware Enablement

On 03/31/2011 12:26 PM, Chris Ball wrote:
> Hi,
>
> On Thu, Mar 31 2011, Manoj wrote:
>> Sorry about that... dmesg is attached.
>
> Thanks. I see that the Ricoh code didn't run and that the PCI ID in
> the patch is wrong; in include/linux/pci_ids.h, it should be:
>
> #define PCI_DEVICE_ID_RICOH_R5C823 0xe823
>
> So, please retry with the "e" there in place and resend full dmesg.
>
> - Chris.


Attachments:
dmesg.pci_id.out (65.63 kB)

2011-03-31 18:27:39

by Chris Ball

[permalink] [raw]
Subject: Re: SDHCI: Ricoh [1180:e823] unable to mount MMC cards.

Hi Manoj,

On Thu, Mar 31 2011, Manoj wrote:
> Card did not mount. New dmesg is attached.

Okay. There's nothing in the log about Ricoh, which probably means that
it bailed out early in the function. You could add a printk to the top
of ricoh_mmc_fixup_rl5c476() if you want to be really sure that the code
there is getting a chance to run.

I think the likely conclusion is that:

(a) The Ricoh controller has a proprietary MMC function that is stealing
MMC cards away from the SDHCI controller even though the SDHCI could
read them if it had a chance to.

(b) We don't know how to turn the MMC controller off, because our old
method for doing so isn't working on this new 0xe823 model.

I'm adding a few people who've touched this code to CC: in case they
have any ideas on working out how to disable the MMC function. If you
have contact with Ricoh directly or through a vendor, please ask them
for the PCI configuration writes needed to disable the MMC function on
this model so that you can read MMC cards with the SD interface instead.

Thanks,

- Chris.
--
Chris Ball <[email protected]> <http://printf.net/>
One Laptop Per Child