Detect, report and use 8-bit bus if is available.
Differential Revision: https://reviews.freebsd.org/D1921 Submitted by: Michal Meloun
This commit is contained in:
parent
88ddb59f67
commit
1354254e80
@ -583,6 +583,8 @@ sdhci_init_slot(device_t dev, struct sdhci_slot *slot, int num)
|
||||
"support voltages.\n");
|
||||
}
|
||||
slot->host.caps = MMC_CAP_4_BIT_DATA;
|
||||
if (caps & SDHCI_CAN_DO_8BITBUS)
|
||||
slot->host.caps |= MMC_CAP_8_BIT_DATA;
|
||||
if (caps & SDHCI_CAN_DO_HISPD)
|
||||
slot->host.caps |= MMC_CAP_HSPEED;
|
||||
/* Decide if we have usable DMA. */
|
||||
@ -602,9 +604,11 @@ sdhci_init_slot(device_t dev, struct sdhci_slot *slot, int num)
|
||||
slot->opt &= ~SDHCI_HAVE_DMA;
|
||||
|
||||
if (bootverbose || sdhci_debug) {
|
||||
slot_printf(slot, "%uMHz%s 4bits%s%s%s %s\n",
|
||||
slot_printf(slot, "%uMHz%s %s%s%s%s %s\n",
|
||||
slot->max_clk / 1000000,
|
||||
(caps & SDHCI_CAN_DO_HISPD) ? " HS" : "",
|
||||
(caps & MMC_CAP_8_BIT_DATA) ? "8bits" :
|
||||
((caps & MMC_CAP_4_BIT_DATA) ? "4bits" : "1bit"),
|
||||
(caps & SDHCI_CAN_VDD_330) ? " 3.3V" : "",
|
||||
(caps & SDHCI_CAN_VDD_300) ? " 3.0V" : "",
|
||||
(caps & SDHCI_CAN_VDD_180) ? " 1.8V" : "",
|
||||
@ -691,11 +695,19 @@ sdhci_generic_update_ios(device_t brdev, device_t reqdev)
|
||||
}
|
||||
/* Configure the bus. */
|
||||
sdhci_set_clock(slot, ios->clock);
|
||||
sdhci_set_power(slot, (ios->power_mode == power_off)?0:ios->vdd);
|
||||
if (ios->bus_width == bus_width_4)
|
||||
slot->hostctrl |= SDHCI_CTRL_4BITBUS;
|
||||
else
|
||||
sdhci_set_power(slot, (ios->power_mode == power_off) ? 0 : ios->vdd);
|
||||
if (ios->bus_width == bus_width_8) {
|
||||
slot->hostctrl |= SDHCI_CTRL_8BITBUS;
|
||||
slot->hostctrl &= ~SDHCI_CTRL_4BITBUS;
|
||||
} else if (ios->bus_width == bus_width_4) {
|
||||
slot->hostctrl &= ~SDHCI_CTRL_8BITBUS;
|
||||
slot->hostctrl |= SDHCI_CTRL_4BITBUS;
|
||||
} else if (ios->bus_width == bus_width_1) {
|
||||
slot->hostctrl &= ~SDHCI_CTRL_8BITBUS;
|
||||
slot->hostctrl &= ~SDHCI_CTRL_4BITBUS;
|
||||
} else {
|
||||
panic("Invalid bus width: %d", ios->bus_width);
|
||||
}
|
||||
if (ios->timing == bus_timing_hs &&
|
||||
!(slot->quirks & SDHCI_QUIRK_DONT_SET_HISPD_BIT))
|
||||
slot->hostctrl |= SDHCI_CTRL_HISPD;
|
||||
|
Loading…
x
Reference in New Issue
Block a user