[SeaBIOS] Failure to detect high-capacity SD card
Kevin O'Connor
kevin at koconnor.net
Thu Oct 26 18:26:33 CEST 2017
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 at 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 at 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)) {
More information about the SeaBIOS
mailing list