Re: Patch: eMMC boot partition needs to be deactivated for linux to find user partitions

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

 



Adiran,

snip for mmc_debug below

I will forward to you under full logs.

Philip

Without mod the following error occurs
==============================

mmc1: req done (CMD6): 0: 00000900 00000000 00000000 00000000
mmc1: clock 48000000Hz busmode 2 powermode 2 cs 0 Vdd 7 width 3 timing 1
pxa-sdh [platform_set_8_bit()]: EXIT: mmc1 SD_CE_ATA_2 = 1100
mmc1: new high speed MMC card at address 0001
mmc1: starting CMD16 arg 00000200 flags 00000095
pxa-sdh [platform_specific_card_detect()]: EXIT: mmc1 card_detect_ok = 0000
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000001
mmc1: req done (CMD16): 0: 00000900 00000000 00000000 00000000
mmcblk0: mmc1:0001 M2G1DD 1.90 GiB
 mmcblk0:<7>mmc1: starting CMD18 arg 00000000 flags 000000b5
mmc1:     blksz 512 blocks 8 flags 00000200 tsac 150 ms nsac 1000
mmc1:     CMD12 arg 00000000 flags 0000049d
pxa-sdh [platform_specific_card_detect()]: EXIT: mmc1 card_detect_ok = 0000
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000001
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000002
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000001
mmc1: req done (CMD18): 0: 00000900 00000000 00000000 00000000
mmc1:     4096 bytes transferred: 0
mmc1:     (CMD12): 0: 00000b00 00000000 00000000 00000000
 unknown partition table


with the patch 
===========

mmc1: req done (CMD6): 0: 00000900 00000000 00000000 00000000
mmc1: clock 48000000Hz busmode 2 powermode 2 cs 0 Vdd 7 width 3 timing 1
pxa-sdh [platform_set_8_bit()]: EXIT: mmc1 SD_CE_ATA_2 = 1100
mmc1: new high speed MMC card at address 0001
mmc1: starting CMD16 arg 00000200 flags 00000095
pxa-sdh [platform_specific_card_detect()]: EXIT: mmc1 card_detect_ok = 0000
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000001
mmc1: req done (CMD16): 0: 00000900 00000000 00000000 00000000
mmcblk0: mmc1:0001 M2G1DD 1.90 GiB
 mmcblk0:<7>mmc1: starting CMD18 arg 00000000 flags 000000b5
mmc1:     blksz 512 blocks 8 flags 00000200 tsac 150 ms nsac 1000
mmc1:     CMD12 arg 00000000 flags 0000049d
pxa-sdh [platform_specific_card_detect()]: EXIT: mmc1 card_detect_ok = 0000
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000001
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000002
pxa-sdh [sdhci_irq()]: *** mmc1 got interrupt: 0x00000001
mmc1: req done (CMD18): 0: 00000900 00000000 00000000 00000000
mmc1:     4096 bytes transferred: 0
mmc1:     (CMD12): 0: 00000b00 00000000 00000000 00000000
 p1 p2 p3 p4




On Mar 15, 2010, at 1:08 AM, Adrian Hunter wrote:

> Philip Rakity wrote:
>> Some eMMC chips have a boot partition that is meant to be used to load in low level boot code.
>> This partition is available when the chip is powered up.  Normally the boot loader would disable
>> access to the partition once boot code was loaded in before passing control to linux.  
>> 
>> if booting occurs from another device (not the eMMC chip) the partition will not be disabled by
>> the boot loader and control will be passed to linux.  This will cause linux to not recognize user
>> partitions on the chip unless access to the boot partition is deactivated.
>> 
>> See JEDEC Standard 84-A44 (eMMC 4.4 spec) -- Page 139
> 
> Page 139 doesn't say anything about why you need that switch command.
> Please provide a more useful reference or delete this.
> 
> Boot mode is terminated by CMD1, so that switch command should not
> be needed.  Please explain why it is needed in more detail.
> 
> That switch command should not be used for devices that do not
> support it e.g. eMMC 4.3 and before.
> 
> 
>> 
>> signed off by:  Philip Rakity <prakity@xxxxxxxxxxx>
>> diff -ru linux-2.6.32.8/drivers/mmc/core/mmc.c linux-2.6.32.8 copy/drivers/mmc/core/mmc.c
>> --- linux-2.6.32.8/drivers/mmc/core/mmc.c	2010-02-09 04:57:19.000000000 -0800
>> +++ linux-2.6.32.8 copy/drivers/mmc/core/mmc.c	2010-03-12 20:56:16.000000000 -0800
>> @@ -430,6 +432,13 @@
>> 	}
>> 
>> 	/*
>> +	* ensure eMMC private booting PARTITION is not enabled
>> +	* see JEDEC Standard No. 84-A44 - Page 139 
>> +	*/
>> +	mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>> +		EXT_CSD_BOOT_CONFIG, 0x0);
>> +
>> +	/*
>> 	 * Compute bus speed.
>> 	 */
>> 	max_dtr = (unsigned int)-1;
>> diff -ru linux-2.6.32.8/include/linux/mmc/mmc.h linux-2.6.32.8 copy/include/linux/mmc/mmc.h
>> --- linux-2.6.32.8/include/linux/mmc/mmc.h	2010-02-09 04:57:19.000000000 -0800
>> +++ linux-2.6.32.8 copy/include/linux/mmc/mmc.h	2010-03-12 20:53:48.000000000 -0800
>> @@ -251,6 +252,7 @@
>>  * EXT_CSD fields
>>  */
>> 
>> +#define EXT_CSD_BOOT_CONFIG	179 /* R/W */
>> #define EXT_CSD_BUS_WIDTH	183	/* R/W */
>> #define EXT_CSD_HS_TIMING	185	/* R/W */
>> #define EXT_CSD_CARD_TYPE	196	/* RO */
>> 
>> --
>> 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
>> 
> 

--
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