hello John, the following patch fixes the write protect issue on the AsiaRF FXS board (AWV002-001 REV .1) so the "broken-wp" patch is not required to mount the drive rw once the pin is grounded. Not sure if you want to include the broken-wp patch or not in the CC distribution. It might be useful to others... Here is hoping you didn't waste too much time on this. --luis On 8/24/14, 2:46 AM, Luis Soltero
wrote:
hello john, thanks for looking into this... just so that you know I forced is_readonly = 0in sdhci.c as in ... static int sdhci_check_ro(struct sdhci_host *host) { unsigned long flags; int is_readonly; spin_lock_irqsave(&host->lock, flags); if (host->flags & SDHCI_DEVICE_DEAD) is_readonly = 0; else if (host->quirks2 & SDHCI_QUIRK2_BROKEN_WRITE_PROTECT) is_readonly = 0; else if (host->ops->get_ro) is_readonly = host->ops->get_ro(host); else is_readonly = !(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_WRITE_PROTECT); is_readonly = 0; spin_unlock_irqrestore(&host->lock, flags); return 0; and yet... root@Optimizer:~# e2fsck /dev/mmcblk0p2 e2fsck 1.42.4 (12-June-2012) e2fsck: Read-only file system while trying to open /dev/mmcblk0p2 Disk write-protected; use the -n option to do a read-only check of the device. so unsure at this time why the driver thinks that this is a read only file system. look forward to your findings. --luis On 8/24/14, 2:07 AM, John Crispin wrote:Hi Luis, i have a awm0003 on my desk and will have a look during the week. John On 23/08/2014 23:26, Luis Soltero wrote:Hello All, Been trying to get an AsiaRF based MT7620a board running using CC r42230 and having issue getting the MMC SD card reader to mount rw. I have been in communication with the manufacturer to discover the GPIO (if any) used for the WP line for the SDHCI card reader on the board. They have not gotten back to me. In the mean time I have attempted to use some of the mmc driver properties such as wp-inverted to no avail. In desperation I implemented a patch based on http://permalink.gmane.org/gmane.linux.kernel.mmc/25615 which tells the driver to ignore the write protect line and assume r/w always... yet the card still mounts read only. note that when mounting the same SD card using a USB based reader the file system mounts rw as expected. here is the mount table showing the ro mount root@OpenWRT:~# mount rootfs on / type rootfs (rw) snip... /dev/mmcblk0p2 on /wxa type ext4 (ro,relatime,data="" here is the DTS definition for the board sdhci@10130000 { status = "okay"; broken-wp; }; following is the patch (some of you might find it useful). Any thoughts would greatly be appreciated. $ cat target/linux/ramips/patches-3.10/0402-mmc-add-broken-wp.patch --- a/Documentation/devicetree/bindings/mmc/mmc.txt 2014-08-23 12:39:54.816004290 -0700 +++ b/Documentation/devicetree/bindings/mmc/mmc.txt 2014-08-23 12:40:56.574123135 -0700 @@ -21,6 +21,8 @@ below for the case, when a GPIO is used for the CD line - wp-inverted: when present, polarity on the WP line is inverted. See the note below for the case, when a GPIO is used for the WP line +- broken-wp: when present, no indication of write protection is available, + and write protection is assumed always off. - max-frequency: maximum operating clock frequency - no-1-8-v: when present, denotes that 1.8v card voltage is not supported on this system, even if the controller claims it is. --- a/drivers/mmc/host/sdhci-pltfm.c 2014-08-23 12:44:02.648454500 -0700 +++ b/drivers/mmc/host/sdhci-pltfm.c 2014-08-23 12:45:52.009124011 -0700 @@ -80,7 +80,9 @@ bus_width == 1)) host->quirks |= SDHCI_QUIRK_FORCE_1_BIT_DATA; - if (sdhci_of_wp_inverted(np)) + if (of_get_property(np, "sdhci,broken-wp", NULL) || of_get_property(np, "broken-wp", NULL)) + host->quirks2 |= SDHCI_QUIRK2_BROKEN_WRITE_PROTECT; + else if (sdhci_of_wp_inverted(np)) host->quirks |= SDHCI_QUIRK_INVERTED_WRITE_PROTECT; if (of_get_property(np, "broken-cd", NULL)) --- a/drivers/mmc/host/sdhci.c 2014-08-23 12:46:10.028575138 -0700 +++ b/drivers/mmc/host/sdhci.c 2014-08-23 12:48:23.588506665 -0700 @@ -1621,6 +1621,8 @@ if (host->flags & SDHCI_DEVICE_DEAD) is_readonly = 0; + else if (host->quirks2 & SDHCI_QUIRK2_BROKEN_WRITE_PROTECT) + is_readonly = 0; else if (host->ops->get_ro) is_readonly = host->ops->get_ro(host); else --- a/include/linux/mmc/sdhci.h 2014-08-23 12:56:38.005445877 -0700 +++ b/include/linux/mmc/sdhci.h 2014-08-23 12:58:58.113178602 -0700 @@ -95,6 +95,8 @@ /* The system physically doesn't support 1.8v, even if the host does */ #define SDHCI_QUIRK2_NO_1_8_V (1<<2) #define SDHCI_QUIRK2_PRESET_VALUE_BROKEN (1<<3) +/* There is no indication for write protection at all, assume RW */ +#define SDHCI_QUIRK2_BROKEN_WRITE_PROTECT (1<<4) int irq; /* Device IRQ */ void __iomem *ioaddr; /* Mapped address */ -- Luis Soltero, Ph.D., MCS Director of Software Development, CTO Global Marine Networks, LLC StarPilot, LLC Tel: +1.865.379.8723 Fax: +1.865.681.5017 E-Mail: lsolt...@globalmarinenet.net Web: http://www.globalmarinenet.net Web: http://www.redportglobal.com Web: http://www.starpilotllc.com |
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel