Re: eMMC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2012/11/22 Philip Rakity <prakity@xxxxxxxxxx>:
>
> On Nov 22, 2012, at 11:44 AM, Kevin Liu <keyuan.liu@xxxxxxxxx> wrote:
>
>> 2012/11/22 Philip Rakity <prakity@xxxxxxxxxx>:
>>>
>>> On Nov 22, 2012, at 11:26 AM, Kevin Liu <keyuan.liu@xxxxxxxxx> wrote:
>>>
>>>>> From: linux-mmc-owner@xxxxxxxxxxxxxxx [mailto:linux-mmc-owner@xxxxxxxxxxxxxxx] On Behalf Of Philip Rakity
>>>>> Sent: Wednesday, November 21, 2012 8:42 PM
>>>>> To: linux-mmc@xxxxxxxxxxxxxxx
>>>>> Subject: RFC: eMMC
>>>>>
>>>>> Recently there have been a number of patches to sdhci.c and discussions on regulators for folks using eMMC.
>>>>>
>>>>> I would appreciate any feedback.  The opinions below are my own.
>>>>>
>>>>> eMMC is a hardware device.  It is NOT voltage configurable in any real sense other then turning on/off the voltage,
>>>>> The board designer is supposed to read the data sheet and hook things up.  It is somewhat unclear to me how having a dummy regulator really helps.
>>>>>
>>>> But if the system enabled dummy regulator, regulator_get will return a
>>>> dummy regulator if vmmc/vmmcq not found.
>>>> So we had better take dummy regulator into consideration.
>>>>
>>>>> Given that -- voltage checking for vmmc or vmmcq is not meaningful. eMMC either works or does not.
>>>>> The testing for vccq/vcc has no meaning since it cannot be changed.  In fact the samsung eMMC we used for DDR worked at 2.8v.
>>>>
>>>> You set the vmmcq regulator to 2.8v while enable the 1.8v signaling
>>>> enable bit in host control 2 register.
>>>> It's mismatch in logic. But it's good to make DDR50 work under 2.8v(3v).
>>>> The reason for this working is the 1.8v signaling enable bit does NOT
>>>> control actual signal voltage at all.
>>>> In your case, although the 1.8v bit is set, the signal voltage for
>>>> both mmc host and emmc chip vmmcq is still 2.8v. Because the actual
>>>> signal voltage is controlled by external regulator whose voltage is
>>>> not changed.
>>>> So DDR50 can keep working since DDR50 support both 1.8v and 3v.
>>>
>>> There is no mismatch in logic. The samsung datas sheet says it will work.
>>> No external regulators are used.  vmmc and vmmvq are not NULL.
>>
>> The mismatch here I mean you set 1.8v as signal voltage but actually
>> you use 2.8v. For the host controller, it's mismatch.
>>
>
> This is why I added the callback in shdci.c to handle broken controllers.
>

I think it's unnecessary to add a callback function. The 1.8v bit
setting can be added in sdhci.c directly since it's a must for DDR50
according to the SD host spec.
And for sd/sdio card we need not set the 1.8v bit here since
signal_voltage_switch will set this bit.

>> I don't understand "No external regulators are used.  vmmc and vmmvq
>> are not NULL".
>> vmmc and vmmcq regulator exist or not?
>>
>>>>
>>>>> Given this -- we have a chicken and egg situation in sdhci.c
>>>>> if we are in this code and the kernel was on eMMC obviously the system is working.
>>>>> If we booted the kernel from say SPI then hopefully the boot code has set up the voltage rails correctly.
>>>>> I would argue that for eMMC the regulator structure should not be exposed to sdhci.c and everything would just work.
>>>>>
>>>> The easy way is just not register vmmc/vmmcq regulator for emmc, right?
>>>>
>>>>> SD/UHS cards are a completely different matter and regulators make complete sense.
>>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux