Only delay dat0 for tuning
Change-Id: I4b58b10dcf60c5fda3070b99805b4d87342a4f08
diff --git a/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc b/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc
index 5a953f2..f52161d 100644
--- a/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc
+++ b/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.cc
@@ -1102,7 +1102,7 @@
char tuning_results[std::max(AmlSdmmcClock::kMaxClkDiv, AmlSdmmcClock::kMaxDelay) + 2];
for (uint32_t delay = 0; delay <= max_delay(); delay++) {
- SetDelayLines(delay);
+ SetOneDelayLine(delay);
if (TuningTestSettings(tuning_blk, tuning_cmd_idx)) {
tuning_results[delay] = '|';
@@ -1146,8 +1146,15 @@
}
}
+void AmlSdmmc::SetOneDelayLine(uint32_t delay) {
+ if (board_config_.version_3) {
+ AmlSdmmcDelay1::Get().ReadFrom(&mmio_).set_dly_0(delay).WriteTo(&mmio_);
+ } else {
+ AmlSdmmcDelayV2::Get().ReadFrom(&mmio_).set_dly_0(delay).WriteTo(&mmio_);
+ }
+}
+
void AmlSdmmc::SetDelayLines(uint32_t delay) {
-
if (board_config_.version_3) {
AmlSdmmcDelay1::Get()
.ReadFrom(&mmio_)
@@ -1206,6 +1213,7 @@
TuneWindow largest_window;
for (uint32_t i = 0; i < clk.cfg_div(); i++) {
SetAdjDelay(i);
+ SetDelayLines(0);
TuneWindow window = FindLargestDelayWindow(tuning_blk, tuning_cmd_idx);
if (window.size > largest_window.size) {
largest_adj_delay = i;
@@ -1232,6 +1240,7 @@
const uint32_t best_adj_delay = (largest_adj_delay + (clk.cfg_div() / 2)) % clk.cfg_div();
SetAdjDelay(best_adj_delay);
+ SetDelayLines(delay);
AML_SDMMC_INFO("Clock divider %u, adj delay %u, delay %u", clk.cfg_div(), best_adj_delay,
delay);
diff --git a/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.h b/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.h
index f9cbe97..0c30ccd4 100644
--- a/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.h
+++ b/src/devices/block/drivers/aml-sdmmc/aml-sdmmc.h
@@ -103,6 +103,7 @@
TuneWindow FindLargestDelayWindow(cpp20::span<const uint8_t> tuning_blk, uint32_t tuning_cmd_idx);
void SetAdjDelay(uint32_t adj_delay);
+ void SetOneDelayLine(uint32_t delay);
void SetDelayLines(uint32_t delay);
uint32_t max_delay() const;