On Thu, Oct 26, 2017 at 11:14:53AM -0400, Matt DeVillier wrote:
On Thu, Oct 26, 2017 at 10:59 AM, Kevin O'Connor kevin@koconnor.net wrote:
On Thu, Oct 26, 2017 at 10:46:06AM -0400, Matt DeVillier wrote:
On Thu, Oct 26, 2017 at 12:56 AM, Kevin O'Connor kevin@koconnor.net
wrote:
Does the patch below help?
-Kevin
--- a/src/hw/sdcard.c +++ b/src/hw/sdcard.c @@ -405,6 +405,7 @@ sdcard_card_setup(struct sddrive_s *drive, int
volt,
int prio) if (!ret && param[0] == vrange) hcs = (1<<30); // Verify SD card (instead of MMC or SDIO) +#if 0 param[0] = 0x00; ret = sdcard_pio_app(regs, SC_APP_SEND_OP_COND, param); if (ret) { @@ -416,6 +417,7 @@ sdcard_card_setup(struct sddrive_s *drive, int
volt,
int prio) drive->card_type |= SF_MMC; hcs = (1<<30); } +#endif // Init card u32 end = timer_calc(SDHCI_POWERUP_TIMEOUT); for (;;) {
with the patch applied, neither the internal eMMC nor the large-capacity external SD card are detected
Yeah - this disables MMC. Any chance to get the log from this run? (Let me know if eMMC is needed to get the log.)
-Kevin
with the patch, USB devices are not available from the boot menu either (it appears to hang?), and therefore device cannot be booted to get said log
That sounds like a bad compile then - nothing in the patch should have impacted usb.
In any case, the patch below tests the same thing and it should work on eMMC also.
-Kevin
--- a/src/hw/sdcard.c +++ b/src/hw/sdcard.c @@ -404,19 +404,8 @@ sdcard_card_setup(struct sddrive_s *drive, int volt, int prio) ret = sdcard_pio(regs, SC_SEND_IF_COND, param); if (!ret && param[0] == vrange) hcs = (1<<30); - // Verify SD card (instead of MMC or SDIO) - param[0] = 0x00; - ret = sdcard_pio_app(regs, SC_APP_SEND_OP_COND, param); - if (ret) { - // Check for MMC card - param[0] = 0x00; - ret = sdcard_pio(regs, SC_SEND_OP_COND, param); - if (ret) - return ret; - drive->card_type |= SF_MMC; - hcs = (1<<30); - } // Init card + int firstloop = 1; u32 end = timer_calc(SDHCI_POWERUP_TIMEOUT); for (;;) { param[0] = hcs | volt; // high-capacity support and voltage level @@ -424,8 +413,18 @@ sdcard_card_setup(struct sddrive_s *drive, int volt, int prio) ret = sdcard_pio(regs, SC_SEND_OP_COND, param); else ret = sdcard_pio_app(regs, SC_APP_SEND_OP_COND, param); - if (ret) + if (ret) { + if (firstloop) { + // Check for MMC card + firstloop = 0; + drive->card_type |= SF_MMC; + hcs = (1<<30); + end = timer_calc(SDHCI_POWERUP_TIMEOUT); + continue; + } return ret; + } + firstloop = 0; if (param[0] & SR_OCR_NOTBUSY) break; if (timer_check(end)) {
On Thu, Oct 26, 2017 at 11:26 AM, Kevin O'Connor kevin@koconnor.net wrote:
On Thu, Oct 26, 2017 at 11:14:53AM -0400, Matt DeVillier wrote:
On Thu, Oct 26, 2017 at 10:59 AM, Kevin O'Connor kevin@koconnor.net
wrote:
with the patch, USB devices are not available from the boot menu either
(it
appears to hang?), and therefore device cannot be booted to get said log
That sounds like a bad compile then - nothing in the patch should have impacted usb.
In any case, the patch below tests the same thing and it should work on eMMC also.
-Kevin
--- a/src/hw/sdcard.c +++ b/src/hw/sdcard.c @@ -404,19 +404,8 @@ sdcard_card_setup(struct sddrive_s *drive, int volt, int prio) ret = sdcard_pio(regs, SC_SEND_IF_COND, param); if (!ret && param[0] == vrange) hcs = (1<<30);
- // Verify SD card (instead of MMC or SDIO)
- param[0] = 0x00;
- ret = sdcard_pio_app(regs, SC_APP_SEND_OP_COND, param);
- if (ret) {
// Check for MMC card
param[0] = 0x00;
ret = sdcard_pio(regs, SC_SEND_OP_COND, param);
if (ret)
return ret;
drive->card_type |= SF_MMC;
hcs = (1<<30);
- } // Init card
- int firstloop = 1; u32 end = timer_calc(SDHCI_POWERUP_TIMEOUT); for (;;) { param[0] = hcs | volt; // high-capacity support and voltage level
@@ -424,8 +413,18 @@ sdcard_card_setup(struct sddrive_s *drive, int volt, int prio) ret = sdcard_pio(regs, SC_SEND_OP_COND, param); else ret = sdcard_pio_app(regs, SC_APP_SEND_OP_COND, param);
if (ret)
if (ret) {
if (firstloop) {
// Check for MMC card
firstloop = 0;
drive->card_type |= SF_MMC;
hcs = (1<<30);
end = timer_calc(SDHCI_POWERUP_TIMEOUT);
continue;
} return ret;
}
firstloop = 0; if (param[0] & SR_OCR_NOTBUSY) break; if (timer_check(end)) {
still timing out on detection: https://paste.ubuntu.com/25826387/