All of lore.kernel.org
 help / color / mirror / Atom feed
From: oliver+list@schinagl.nl (Olliver Schinagl)
To: linux-arm-kernel@lists.infradead.org
Subject: Almost certainly confirmed, sun7i-a20 does not support 8 bit mmc.
Date: Wed, 09 Sep 2015 15:04:11 +0200	[thread overview]
Message-ID: <55F02E4B.70708@schinagl.nl> (raw)

Hey all,

After experimenting with a Micron eMMC chip, I made some interesting 
finds I wanted to share with you all.

For a while now, some had hopes or guessed that the A20 could have 
support for 8 bit wide bused on the SDC2. Reason for thinking this was, 
because the sun7i uses the same IP as the sun5i which does support 8 bit 
wide eMMC. The usermanual does mention 1/4/8 bit data buses and jedec 
4.3 support of the MMC spec. Unfortunately so far, it appears that the 
extra data pins have not been muxed out to the PC pads.

I used the following code to enable the extra pins on the A20:
                         mmc2_pins_a: mmc2 at 0 {
-                               allwinner,pins = "PC6", "PC7", "PC8",
-                                                "PC9", "PC10", "PC11";
+                               allwinner,pins = "PC6", "PC7",
+                                                "PC8", "PC9", "PC10", 
"PC11",
+                                                "PC12", "PC13", "PC14", 
"PC15";

and
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ4 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ4 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D4 */
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ5 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ5 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D5 */
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ6 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ6 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D6 */
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ7 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ7 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D7 */

which I think should be enough? Unfortunatly after booting i get the 
following:

[    0.971642] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 8, RTO !!
[    0.981346] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    0.987873] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    0.988704] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    0.989531] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    1.020574] mmc1: MAN_BKOPS_EN bit is not set
(This I always get for some reason btw, so if somebody has a thought 
that'd be appreciated)

[    1.024234] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 8, RD EBE !!
[    1.024265] sunxi-mmc 1c11000.mmc: data error, sending stop command
[    1.024276] sunxi-mmc 1c11000.mmc: send stop command failed
[    1.024295] mmc1: switch to bus width 2 failed
[    1.028642] mmc1: new high speed MMC card at address 0001
[    1.029133] mmcblk1: mmc1:0001 P1XXXX 3.60 GiB
[    1.031071] mmcblk1boot0: mmc1:0001 P1XXXX partition 1 16.0 MiB
[    1.031207] mmcblk1boot1: mmc1:0001 P1XXXX partition 2 16.0 MiB
[    1.032305]  mmcblk1: p1 p2 p3

Hence, the controller fails to enable 8 bit mode. mmc1's ios confirms 
this afterwards:
/sys/kernel/debug/mmc1# cat ios
clock:          50000000 Hz
vdd:            21 (3.3 ~ 3.4 V)
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      2 (4 bits)
timing spec:    1 (mmc high-speed)
signal voltage: 0 (3.30 V)

On the upside, performance is pretty good however. Using a sequential dd 
test on the whole 4GB of storage to /dev/null and reading to a 3GB file 
from /dev/zero, I'm hitting 22 MB/s read and 13 MB/s write. The 
datasheet of the eMMC chip obviously has exotic values in the 75MB/s 
range, but compared to ~12 MB/s read/write from a regular 8gb 'class 10' 
SD card, and 4-6 MB/s read/write from the regular onboard NAND flash, 
this is pretty decent.

A photograph of the soldering handy work (not by me) can be seen at the 
linux-sunxi wiki [0].

Olliver

[0] http://linux-sunxi.org/File:Lime2_emmc.jpg

WARNING: multiple messages have this Message-ID (diff)
From: Olliver Schinagl <oliver+list@schinagl.nl>
To: dev@linux-sunxi.org,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>,
	Hans de Goede <hdegoede@redhat.com>,
	"Tsvetan Usunov, OLIMEX Ltd" <usunov@olimex.com>
Subject: Almost certainly confirmed, sun7i-a20 does not support 8 bit mmc.
Date: Wed, 09 Sep 2015 15:04:11 +0200	[thread overview]
Message-ID: <55F02E4B.70708@schinagl.nl> (raw)

Hey all,

After experimenting with a Micron eMMC chip, I made some interesting 
finds I wanted to share with you all.

For a while now, some had hopes or guessed that the A20 could have 
support for 8 bit wide bused on the SDC2. Reason for thinking this was, 
because the sun7i uses the same IP as the sun5i which does support 8 bit 
wide eMMC. The usermanual does mention 1/4/8 bit data buses and jedec 
4.3 support of the MMC spec. Unfortunately so far, it appears that the 
extra data pins have not been muxed out to the PC pads.

I used the following code to enable the extra pins on the A20:
                         mmc2_pins_a: mmc2@0 {
-                               allwinner,pins = "PC6", "PC7", "PC8",
-                                                "PC9", "PC10", "PC11";
+                               allwinner,pins = "PC6", "PC7",
+                                                "PC8", "PC9", "PC10", 
"PC11",
+                                                "PC12", "PC13", "PC14", 
"PC15";

and
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ4 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ4 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D4 */
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ5 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ5 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D5 */
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ6 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ6 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D6 */
         SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
                   SUNXI_FUNCTION(0x0, "gpio_in"),
                   SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "nand0")),        /* NDQ7 */
+                 SUNXI_FUNCTION(0x2, "nand0"),         /* NDQ7 */
+                 SUNXI_FUNCTION(0x3, "mmc2")),         /* D7 */

which I think should be enough? Unfortunatly after booting i get the 
following:

[    0.971642] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 8, RTO !!
[    0.981346] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    0.987873] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    0.988704] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    0.989531] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 55, RTO !!
[    1.020574] mmc1: MAN_BKOPS_EN bit is not set
(This I always get for some reason btw, so if somebody has a thought 
that'd be appreciated)

[    1.024234] sunxi-mmc 1c11000.mmc: smc 1 err, cmd 8, RD EBE !!
[    1.024265] sunxi-mmc 1c11000.mmc: data error, sending stop command
[    1.024276] sunxi-mmc 1c11000.mmc: send stop command failed
[    1.024295] mmc1: switch to bus width 2 failed
[    1.028642] mmc1: new high speed MMC card at address 0001
[    1.029133] mmcblk1: mmc1:0001 P1XXXX 3.60 GiB
[    1.031071] mmcblk1boot0: mmc1:0001 P1XXXX partition 1 16.0 MiB
[    1.031207] mmcblk1boot1: mmc1:0001 P1XXXX partition 2 16.0 MiB
[    1.032305]  mmcblk1: p1 p2 p3

Hence, the controller fails to enable 8 bit mode. mmc1's ios confirms 
this afterwards:
/sys/kernel/debug/mmc1# cat ios
clock:          50000000 Hz
vdd:            21 (3.3 ~ 3.4 V)
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      2 (4 bits)
timing spec:    1 (mmc high-speed)
signal voltage: 0 (3.30 V)

On the upside, performance is pretty good however. Using a sequential dd 
test on the whole 4GB of storage to /dev/null and reading to a 3GB file 
from /dev/zero, I'm hitting 22 MB/s read and 13 MB/s write. The 
datasheet of the eMMC chip obviously has exotic values in the 75MB/s 
range, but compared to ~12 MB/s read/write from a regular 8gb 'class 10' 
SD card, and 4-6 MB/s read/write from the regular onboard NAND flash, 
this is pretty decent.

A photograph of the soldering handy work (not by me) can be seen at the 
linux-sunxi wiki [0].

Olliver

[0] http://linux-sunxi.org/File:Lime2_emmc.jpg

             reply	other threads:[~2015-09-09 13:04 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-09 13:04 Olliver Schinagl [this message]
2015-09-09 13:04 ` Almost certainly confirmed, sun7i-a20 does not support 8 bit mmc Olliver Schinagl
2015-09-09 14:30 ` Maxime Ripard
2015-09-09 14:30   ` Maxime Ripard
2015-09-09 15:32   ` Hans de Goede
2015-09-09 15:32     ` Hans de Goede
2015-09-09 15:56     ` [linux-sunxi] " Olliver Schinagl
2015-09-09 15:56       ` Olliver Schinagl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55F02E4B.70708@schinagl.nl \
    --to=oliver+list@schinagl.nl \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.