2 releases
Uses new Rust 2024
| 0.1.4 | Apr 27, 2026 |
|---|---|
| 0.1.3 | Jan 27, 2026 |
#79 in Embedded development
1,281 downloads per month
Used in 7 crates
(4 directly)
340KB
6.5K
SLoC
RK3588 CRU Driver Library ๐ฆ
๐ Table of Contents
- Project Introduction
- Features
- Quick Start
- Project Structure
- API Documentation
- Usage Examples
- Test Results
- License
๐ Project Introduction
RK3588 CRU (Clock and Reset Unit) driver library is a Rust clock control unit driver library specifically designed for the RK3588 chip. This library provides comprehensive clock management functionality, including MMC (Memory Card Controller) clock configuration, NPU (Neural Processing Unit) clock management, and clock gating features.
This project uses a no_std design, making it fully suitable for bare-metal and embedded environments, with special optimizations for U-Boot bootloader environments. Through type-safe register access based on tock-registers, it ensures the reliability and security of hardware operations.
โจ Features
- Complete MMC Clock Support: Supports clock configuration and frequency management for storage controllers such as EMMC, SDIO, and SFC
- NPU Clock Management: Provides comprehensive NPU clock control, including frequency setting, gate enable, and status monitoring
- Clock Gating: Precise control over the enable/disable status of clock gates for various modules to optimize power management
- Type-Safe Register Access: Provides type-safe hardware register operations based on
tock-registers - no_std Compatible: Completely independent of the standard library, suitable for bare-metal and embedded environments
- ARM64 Architecture Optimization: Specifically optimized for the RK3588 ARM64 platform
- U-Boot Environment Support: Provides stable and reliable clock management features in U-Boot bootloader environment
- Rich Clock Source Support: Supports multiple clock sources such as PLL and OSC, with flexible divider configurations
๐ Quick Start
Requirements
- Rust 2024 Edition
- ARM64 development environment
- RK3588 hardware platform with U-Boot support
- ostool (for testing)
Installation
- Install the
ostooldependency:
cargo install ostool
- Add the project to your
Cargo.toml:
[dependencies]
rk3588-clk = { git = "https://github.com/drivercraft/rk3588-clk.git" }
Basic Usage
use rk3588_clk::{Rk3588Cru, constant::*};
use core::ptr::NonNull;
// Create CRU instance
let cru_addr = 0xfd7c0000; // RK3588 CRU base address
let cru = Rk3588Cru::new(NonNull::new(cru_addr as *mut u8).unwrap());
// Initialize CRU
cru.init();
// Configure EMMC clock frequency
let emmc_rate = 200_000_000; // 200MHz
match cru.mmc_set_clk(CCLK_EMMC, emmc_rate) {
Ok(actual_rate) => println!("EMMC clock set to: {} Hz", actual_rate),
Err(_) => println!("EMMC clock setting failed"),
}
// Enable NPU clock gate
match cru.npu_gate_enable(ACLK_NPU0) {
Ok(enabled) => println!("NPU ACLK0 gate status: {}", enabled),
Err(e) => println!("NPU gate enable failed: {}", e),
}
๐ Project Structure
src/
โโโ lib.rs # Main entry and Rk3588Cru struct definition
โโโ autocs.rs # Automatic clock selection functionality
โโโ clksel.rs # Clock selection register definitions
โโโ constant.rs # Hardware constants and clock ID definitions
โโโ gate.rs # Clock gate control registers
โโโ pll.rs # PLL phase-locked loop control registers
โโโ softrst.rs # Software reset registers
โโโ tools.rs # Utility functions (divider calculations, etc.)
tests/
โโโ test.rs # Integration tests, including MMC and NPU functionality tests
๐ API Documentation
Core Structures
Rk3588Cru: Main CRU interface structure providing all clock control functionsRk3588CruRegisters: CRU register mapping structure containing all hardware register definitions
Main Interfaces
MMC Clock Control
Rk3588Cru::new(addr): Create a new CRU instanceRk3588Cru::init(): Initialize CRURk3588Cru::mmc_get_clk(clk_id): Get the current frequency of the specified MMC clockRk3588Cru::mmc_set_clk(clk_id, rate): Set the frequency of the specified MMC clock
Supported MMC Clock IDs:
CCLK_EMMC: EMMC controller clockCCLK_SRC_SDIO: SDIO controller clockSCLK_SFC: SFC (SPI Flash Controller) clockBCLK_EMMC: EMMC bus clock
NPU Clock Management
Rk3588Cru::npu_get_clk(clk_id): Get NPU clock frequencyRk3588Cru::npu_set_clk(clk_id, rate): Set NPU clock frequencyRk3588Cru::npu_gate_enable(gate_id): Enable NPU clock gateRk3588Cru::npu_gate_disable(gate_id): Disable NPU clock gateRk3588Cru::npu_gate_status(gate_id): Query NPU clock gate status
Supported NPU Clock IDs:
HCLK_NPU_ROOT: NPU root clockCLK_NPU_DSU0: NPU DSU0 clockPCLK_NPU_ROOT: NPU peripheral clockCLK_NPUTIMER_ROOT: NPU timer clock
Supported NPU Gate IDs:
ACLK_NPU0/1/2: NPU module ACLK clocksHCLK_NPU0/1/2: NPU module HCLK clocksPCLK_NPU_*: NPU peripheral clocksCLK_NPUTIMER*: NPU timer clocks
๐ก Usage Examples
MMC Clock Control Example
use rk3588_clk::{Rk3588Cru, constant::*};
use core::ptr::NonNull;
fn configure_emmc_clock(cru: &Rk3588Cru) -> Result<(), &'static str> {
// Set EMMC clock to 200MHz
let target_rate = 200_000_000;
match cru.mmc_set_clk(CCLK_EMMC, target_rate) {
Ok(actual_rate) => {
println!("EMMC clock set successfully: {} Hz", actual_rate);
// Verify clock setting
match cru.mmc_get_clk(CCLK_EMMC) {
Ok(read_rate) => {
println!("EMMC clock read: {} Hz", read_rate);
if read_rate == actual_rate {
println!("Clock setting verification successful");
}
}
Err(e) => return Err("Clock read failed"),
}
}
Err(e) => return Err("Clock setting failed"),
}
Ok(())
}
NPU Clock Management Example
use rk3588_clk::{Rk3588Cru, constant::*};
use core::ptr::NonNull;
fn configure_npu_clocks(cru: &Rk3588Cru) -> Result<(), &'static str> {
// Enable NPU-related clock gates
let npu_gates = [
ACLK_NPU0, HCLK_NPU0,
ACLK_NPU1, HCLK_NPU1,
ACLK_NPU2, HCLK_NPU2,
PCLK_NPU_GRF, PCLK_NPU_TIMER,
];
for &gate_id in &npu_gates {
match cru.npu_gate_enable(gate_id) {
Ok(enabled) => {
println!("Gate {} enable status: {}", gate_id, enabled);
if !enabled {
return Err("Gate enable failed");
}
}
Err(e) => return Err("Gate operation failed"),
}
}
// Set NPU root clock to 200MHz
match cru.npu_set_clk(HCLK_NPU_ROOT, 200_000_000) {
Ok(actual_rate) => {
println!("NPU root clock set: {} Hz", actual_rate);
}
Err(e) => return Err("NPU clock setting failed"),
}
// Set NPU DSU0 clock to 500MHz
match cru.npu_set_clk(CLK_NPU_DSU0, 500_000_000) {
Ok(actual_rate) => {
println!("NPU DSU0 clock set: {} Hz", actual_rate);
}
Err(e) => return Err("NPU DSU0 clock setting failed"),
}
println!("NPU clock configuration completed");
Ok(())
}
Complete Usage Example
use rk3588_clk::{Rk3588Cru, constant::*};
use core::ptr::NonNull;
fn main() -> Result<(), &'static str> {
// Initialize CRU
let cru_addr = 0xfd7c0000;
let cru = Rk3588Cru::new(NonNull::new(cru_addr as *mut u8).unwrap());
cru.init();
// Configure storage clock
println!("Configuring storage clock...");
if let Err(e) = configure_emmc_clock(&cru) {
println!("Storage clock configuration failed: {}", e);
return Err(e);
}
// Configure NPU clock
println!("Configuring NPU clock...");
if let Err(e) = configure_npu_clocks(&cru) {
println!("NPU clock configuration failed: {}", e);
return Err(e);
}
// Run system clock diagnostics
println!("System clock diagnostics:");
if let Err(e) = clock_diagnostics(&cru) {
println!("Clock diagnostics failed: {}", e);
return Err(e);
}
Ok(())
}
fn clock_diagnostics(cru: &Rk3588Cru) -> Result<(), &'static str> {
// Check critical clock status
let critical_clocks = [
(CCLK_EMMC, "EMMC"),
(HCLK_NPU_ROOT, "NPU_ROOT"),
(CLK_NPU_DSU0, "NPU_DSU0"),
];
for &(clk_id, name) in &critical_clocks {
match cru.npu_get_clk(clk_id) {
Ok(rate) => println!("{} clock: {} Hz", name, rate),
Err(_) => println!("{} clock read failed", name),
}
}
Ok(())
}
๐งช Test Results
Running Tests
Hardware Testing with U-Boot Environment
# Test with U-Boot enabled development board
cargo test --test test -- tests --show-output --uboot
Test Output Example
Click to view test results
_____ __
/ ___/ ____ ____ _ _____ _____ ___ ____ _ / /
\__ \ / __ \ / __ `// ___// ___// _ \ / __ `// /
___/ // /_/ // /_/ // / / / / __// /_/ // /
/____// .___/ \__,_//_/ /_/ \___/ \__,_//_/
/_/
Version : 0.12.2
Platfrom : RK3588 OPi 5 Plus
Start CPU : 0x0
FDT 7000
๐ 0.000ns [sparreal_kernel::driver:16] add registers
๐ 0.000ns [rdrive::probe::fdt:168] Probe [interrupt-controller@fe600000]->[GICv3]
๐ 0.000ns [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fe600000, 0xffff9000fe610000) -> [0xfe600000, 0xfe610000)
๐ 0.000ns [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fe680000, 0xffff9000fe780000) -> [0xfe680000, 0xfe780000)
๐ 0.000ns [rdrive::probe::fdt:168] Probe [timer]->[ARMv8 Timer]
๐ 0.000ns [sparreal_rt::arch::timer:78] ARMv8 Timer IRQ: IrqConfig { irq: 0x1e, trigger: LevelHigh, is_private: true }
๐ 0.000ns [rdrive::probe::fdt:168] Probe [psci]->[ARM PSCI]
๐ 0.000ns [sparreal_rt::arch::power:76] PCSI [Smc]
๐ 0.000ns [sparreal_kernel::irq:39] [GICv3](405) open
๐ 0.000ns [arm_gic_driver::version::v3:342] Initializing GICv3 Distributor@0xffff9000fe600000, security state: NonSecure...
๐ 0.000ns [arm_gic_driver::version::v3:356] GICv3 Distributor disabled
๐ 0.000ns [arm_gic_driver::version::v3:865] CPU interface initialization for CPU: 0x0
๐ 0.000ns [arm_gic_driver::version::v3:921] CPU interface initialized successfully
๐ 0.000ns [sparreal_kernel::irq:64] [GICv3](405) init cpu: CPUHardId(0)
๐ 0.000ns [sparreal_rt::arch::timer:30] ARMv8 Timer: Enabled
๐ 17.977s [sparreal_kernel::irq:136] Enable irq 0x1e on chip 405
๐ 17.977s [sparreal_kernel::hal_al::run:33] Driver initialized
๐ 18.599s [rdrive:132] probe pci devices
begin test
Run test: test_platform
๐ก 18.653s [test::tests:338] Found node: mmc@fe2e0000
๐ก 18.654s [test::tests:343] Syscon address range: 0xfe2e0000 - 0xfe2f0000
๐ก 18.655s [test::tests:346] Aligned Syscon address range: 0xfe2e0000 - 0xfe2f0000
๐ 18.656s [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fe2e0000, 0xffff9000fe2f0000) -> [0xfe2e0000, 0xfe2f0000)
๐ก 18.685s [test::tests:338] Found node: clock-controller@fd7c0000
๐ก 18.686s [te000) -> [0xfd7c0000, 0xfd81c000)
๐ก 18.716s [test::tests:338] Found node: syscon@fd5a2000
๐ก 18.717s [test::tests:343] Syscon address range: 0xfd5a2000 - 0xfd5a2100
๐ก 18.718s [test::tests:346] Aligned Syscon address range: 0xfd5a2000 - 0xfd5a3000
๐ 18.718s [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fd5a2000, 0xffff9000fd5a3000) -> [0xfd5a2000, 0xfd5a3000)
๐ก 18.752s [test::tests:338] Found node: npu@fdab0000
๐ก 18.752s [test::tests:3430m๐ก 18.753s [test::tests:346] Aligned Sysc: 0xfdab0000 - 0xfdac0000
๐ 18.754s ::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fdab0xffff9000fdac0000) -> [0xfdab0000, 0xfdac0000)
๐ก 18.785s [test::tests:338] Found node: power-management@fd8d8000
๐ก 18.785s [tescon address range: 0xfd8d8000 -
๐ก 18.786 [test::tests:346] Aligned Sys range: 0xfd8d8000 - 0xfd8d9000
๐ 18.787s [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fd8d8000, 0xffff9000fd8d9000) -> [0xfd8d8000, 0xfd8d9000)
๐ก 18.788s [test::tests:61] emmc ptr: 0xffff9000fe2e0000
๐ก 18.789s [test::tests:62] clk ptr: 0xffff9000fd7c0000
๐ก 18.790s [test::tests:63] npu grf ptr: 0xffff9000fd5a2000
๐ก 18.791s [test::tests:64] npu ptr: 0xffff9000fdab0000
๐ก 18.791s [test::tests:65] pmu ptr: 0xffff9000fd8d8000
๐ก 18.792s [test::tests:73] emmc addr: 0xffff9000fe2e0000
๐ก 18.793s [test::tests:74] clk addr: 0xffff9000fd7c0000
๐ก 18.793s [test::tests:75] npu grf addr: 0xffff9000fd5a2000
๐ก 18.794s [test::tests:76] npu addr: 0xffff9000fdab0000
๐ก 18.795s [test::tests:77] pmu addr: 0xffff9000fd8d8000
๐ก 18.827s [test::tests:296] Found node: npu@fdab0000
๐ก 18.828s [test::tests:301] NPU0 address range: 0xfdab0000 - 0xfdac0000
๐ก 18.829s [test::tests:304] Aligned NPU0 address range: 0xfdab0000 - 0xfdac0000
๐ 18.829s [somehal::arch::mem::mmu:181] Map `iomap `: RW- | [0xffff9000fdab0000, 0xffff9000fdac0000) -> [0xfdab0000, 0xfdac0000)
๐ก 18.863s [test::tests:320] Found power domain node: power-controller
๐ก 18.897s [test::tests:320] Found power domain node: power-controller
๐ก 18.930s [test::tests:320] Found power domain node: power-controller
๐ก 18.931s ts:278] NPU Version: 0x46495245
๐ก 18.932s [sdmmc::emmc:74] EMMC Controller created: EMMC Controller { base_addr: 0xffff9000fe2e0000, card: None, caps: 0x226dc881, clock_base: 200000000 }
๐ก 18.933s [sdmmc::emmc:91] Init EMMC Controller
๐ 18.934s [sdmmc::emmc:100] Card inserted: true
๐ก 18.934s [sdmmc::emmc:105] EMMC Version: 0x5
๐ก 18.935s [sdmmc::emmc:108] EMMC Capabilities 1: 0b100010011011011100100010000001
๐ก 18.936s [sdmmc::emmc:114] EMMC Capabilities 2: 0b1000000000000000000000000111
๐ก 18.937s [sdmmc::emmc:162] voltage range: 0x60000, 0x12
๐ก 18.937s [sdmmc::emmc::rockchip:145] EMMC Power Control: 0xd
๐ 18.948s [sdmmc::emmc:974] Bus width set to 1
๐ 18.949s [sdmmc::emmc::rockchip:318] card_clock: 0, bus_width: 1, timing: 0
๐ก 18.950s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x0
๐ 18.950s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.951s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.952s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x0
๐ 18.953s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x0
๐ 18.953s [sdmmc::emmc::rockchip:318] card_clock: 400000, bus_width: 1, timing: 0
๐ 18.954s [rk3588_clk:111] Setting clk_id 314 to rate 400000
๐ 18.955s [rk3588_clk:152] CCLK_EMMC: src_clk 2, div 60, new_value 0xbb00, final_value 0xff00bb00
๐ 18.956s [rk3588_clk:73] Getting clk_id 314
๐ก 18.957s [sdmmc::emmc::rockchip:32] input_clk: 400000
๐ก 18.957s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.958s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x0
๐ 18.959s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.959s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.960s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.961s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.961s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x0
๐ 18.962s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x0
๐ 18.963s [sdmmc::emmc::rockchip:318] card_clock: 400000, bus_width: 1, timing: 0
๐ 18.964s [rk3588_clk:111] Setting clk_id 314 to rate 400000
๐ 18.965s [rk3588_clk:152] CCLK_EMMC: src_clk 2, div 60, new_value 0xbb00, final_value 0xff00bb00
๐ 18.966s [rk3588_clk:73] Getting clk_id 314
๐ก 18.966s [sdmmc::emmc::rockchip:32] input_clk: 400000
๐ก 18.967s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 18.968s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x0
๐ 18.968s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.969s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 18.970s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 18.971s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 18.971s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x0
๐ 18.972s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x0
๐ก 18.973s [sdmmc::emmc:226] eMMC initialization started
๐ 18.973s [sdmmc::emmc::cmd:244] Sending command: opcode=0x0, arg=0x0, resp_type=0x0, command=0x0
๐ 18.974s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.975s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.976s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 18.989s [sdmmc::emmc::cmd:416] eMMC reset complete
๐ 18.989s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x0, resp_type=0x1, command=0x102
๐ 18.990s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 18.991s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 18.992s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.005s [sdmmc::emmc::cmd:431] eMMC first CMD1 response (no args): 0xff8080
๐ 19.005s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 19.007s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.007s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.008s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.011s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 19.012s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 19.013s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 19.014s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.015s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.016s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.019s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
nse: 0xff8080
๐ 19.021s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_:cmd:263] Response Status: 0b0
๐ 19.023s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.024s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.026s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 19.027s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 19.029s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 19.030s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.031s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.031s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.034s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xff8080
๐ก 19.035s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xff8080
๐ 19.037s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 19.038s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.039s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.039s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.042s [sdmmc::emmc::cmd:453] CMD1 response raw: 0x40ff8080
๐ก 19.043s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0x40ff8080
๐ 19.045s [sdmmc::emmc::cmd:244] Sending command: opcode=0x1, arg=0x40060000, resp_type=0x1, command=0x102
๐ 19.046s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.046s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.047s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.050s [sdmmc::emmc::cmd:453] CMD1 response raw: 0xc0ff8080
๐ก 19.051s [sdmmc::emmc::cmd:454] eMMC CMD1 response: 0xc0ff8080
๐ก 19.051s [sdmmc::emmc::cmd:478] eMMC initialization status: true
๐ 19.053s [sdmmc::emmc::cmd:486] Clock control beforand: opcode=0x2, arg=0x0, resp_type=0x7, command=0x209
๐ 19.055s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.056s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.057s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.059s [sdmmc::emmc::cmd:69] eMMC response: 0x45010044 0x56343033 0x3201bb29 0x7a017c00
๐ 19.060s [sdmmc::emmc::cmd:244] Sending command: opcode=0x3, arg=0x10000, resp_type=0x15, command=0x31a
๐ 19.061s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.062s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.063s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 19.066s [sdmmc::emmc::cmd:244] Sending command: opcode=0x9, arg=0x10000, resp_type=0x7, command=0x909
๐ 19.067s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.068s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.068s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ก 19.071s [sdmmc::emmc::cmd:69] eMMC response: 0xd00f0032 0x8f5903ff 0xffffffef 0x8a404000
๐ 19.072s [sdmmc::emmc:256] eMMC CSD version: 4
๐ 19.073s [sdmmc::emmc::cmd:244] Sending command: opcode=0x7, arg=0x10000, resp_type=0x15, command=0x71a
๐ 19.074s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.075s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.075s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 19.078s [sdmmc::emmc:327] cmd7: 0x700
๐ 19.079s [sdmmc::emmc::cmd:244] Sending command: opcode=0x6, arg=0x3b90100, resp_type=0x1d, command=0x61b
๐ 19.080s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.080s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.081s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 19.084s [sdmmc::emmc:1012] cmd6 0x800
๐ 19.084s [sdmmc::emmc::cmd:244] Sending command: opcode=0xd, arg=0x10000, resp_type=0x15, command=0xd1a
๐ 19.086s [sdmmc::emmc::cmd:263] Response Status: 0b0
8m๐ 19.086s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.087s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 19.090s [sdmmc::emmc::cmd:583] cmd_d 0x900
๐ 19.090s [sdmmc::emmc::rockchip:318] card_clock: 400000, bus_width: 1, timing: 1
๐ 19.091s [rk3588_clk:111] Setting clk_id 314 to rate 400000
๐ 19.092s [rk3588_clk:152] CCLK_EMMC: src_clk 2, div 60, new_value 0xbb00, final_value 0xff00bb00
๐ 19.093s [rk3588_clk:73] Getting clk_id 314
๐ก 19.094s [sdmmc::emmc::rockchip:32] input_clk: 400000
๐ก 19.094s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 19.095s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x0
๐ 19.096s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 19.097s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 19.097s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 19.098s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 19.099s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x4
๐ 19.099s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x2
๐ 19.100s [sdmmc::emmc::rockchip:318] card_clock: 52000000, bus_width: 1, timing: 1
๐ 19.101s [rk3588_clk:111] Setting clk_id 314 to rate 52000000
๐ 19.102s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 23, new_value 0x5600, final0;188;18m๐ก 19.103s [sdmmc::emmc::rockchip:32] input_clk: 65217391
๐ก 19.104s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 19.105s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 19.106s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 19.106s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 19.107s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 19.108s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 19.108s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x4
๐ 19.109s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x2
๐ 19.110s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 19.111s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.112s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.112s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 19.113s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 19.114s [sdmmc::emmc:354] EXT_CSD: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 3, 0, 144, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 4, 0, 7, 0, 0, 2, 0, 0, 21, 31, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 13, 0, 0, 0, 0, 8, 0, 2, 0, 87, 31, 10, 3, 221, 221, 0, 0, 0, 10, 10, 10, 10, 10, 10, 1, 0, 224, 163, 3, 23, 19, 23, 7, 7, 16, 1, 3, 1, 8, 32, 0, 7, 166, 166, 85, 3, 0, 0, 0, 0, 221, 221, 0, 1, 255, 0, 0, 0, 0, 1, 25, 25, 0, 16, 0, 0, 221, 82, 67, 51, 48, 66, 48, 48, 55, 81, 80, 8, 8, 8, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 16, 0, 3, 3, 0, 5, 3, 3, 1, 63, 63, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
๐ 19.128s [sdmmc::emmc:412] Boot partition size: 0x400000
๐ 19.128s [sdmmc::emmc:413] RPMB partition size: 0x1000000
๐ 19.129s [sdmmc::emmc:434] GP partition sizes: [0, 0, 0, 0]
๐ 19.130s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 19.131s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.132s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 19.132s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 19.133s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 19.134s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 19.135s [sdmmc::emmc::cmd:263] Response0001
๐ 19.138s [sdmmc::emmc::cmd:3type=0x1d, command=0x61b
๐ 19.140s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.140s [sdmmc::emmc::cmd:263] Response Status: 0b11
๐ 19.141s [sdmmc::emmc::cmd:288] Command completed: status=0b11
๐ 19.142s [sdmmc::emmc:1012] cmd6 0x800
๐ 19.142s [sdmmc::emmc::cmd:244] Sending command: opcode=0xd, arg=0x10000, resp_type=0x15, command=0xd1a
๐ 19.143s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.144s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.145s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 19.146s [sdmmc::emmc::cmd:583] cmd_d 0x900
๐ 19.146s [sdmmc::emmc:974] Bus width set to 8
๐ 19.147s [sdmmc::emmc::rockchip:318] card_clock: 52000000, bus_width: 8, timing: 1
๐ 19.148s [rk3588_clk:111] Setting clk_id 314 to rate 52000000
๐ 19.149s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 23, new_value 0x5600, final_value 0xff005600
๐ 19.150s [rk3588_clk:73] Getting clk_id 314
๐ก 19.150s [sdmmc::emmc::rockchip:32] input_clk: 65217391
๐ก 19.151s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 19.152s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 19.152s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 19.153s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 19.154s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 19.155s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 19.155s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x24
๐ 19.156s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x2
๐ 19.157s [sdmmc::emmc::cmd:244] Sending command: opcode=0x8, arg=0x0, resp_type=0x15, command=0x83a
๐ 19.158s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.159s [sdmmc::emmc::cmd:263] Response Status: 0b1
๐ 19.159s [sdmmc::emmc::cmd:288] Command completed: status=0b1
๐ 19.160s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 19.161s [sdmmc::emmc::cmd:244] Sending command: opcode=0x6, arg=0x3b90200, resp_type=0x1d, command=0x61b
๐ 19.162s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.163s [sdmmc::emmc::cmd:263] Response Status: 0b11
๐ 19.164s [sdmmc::emmc::cmd:288] Command completed: status=0b11
๐ 19.164s [sdmmc::emmc:1012] cmd6 0x800
๐ 19.166s [sdmmc::emmc::rockchip:318] card_clock: 52000000, bus_width: 8, timing: 9
๐ 19.167s [rk3588_clk:111] Setting clk_id 314 to rate 52000000
๐ 19.168s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 23, new_value 0x5600, final_value 0xff005600
๐ 19.169s [rk3588_clk:73] Getting clk_id 314
๐ก 19.169s [sdmmc::emmc::rockchip:32] input_clk: 65217391
๐ก 19.170s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 19.171s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 19.171s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 19.172s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 19.173s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 19.173s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 19.174s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x24
๐ก 19.175s [sdmmc::emmc::rockchip:145] EMMC Power Control: 0xb
๐ 19.186s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x1b
๐ 19.186s [sdmmc::emmc::rockchip:318] card_clock: 200000000, bus_width: 8, timing: 9
๐ 19.187s [rk3588_clk:111] Setting clk_id 314 to rate 200000000
๐ 19.188s [rk3588_clk:152] CCLK_EMMC: src_clk 1, div 6, new_value 0x4500, final_value 0xff004500
๐ 19.189s [rk3588_clk:73] Getting clk_id 314
๐ก 19.190s [sdmmc::emmc::rockchip:32] input_clk: 250000000
๐ก 19.190s [sdmmc::emmc::rockchip:42] EMMC Clock Mul: 0
๐ก 19.191s [sdmmc::emmc::rockchip:78] EMMC Clock Divisor: 0x1
๐ 19.192s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x107
๐ก 19.193s [sdmmc::emmc::rockchip:163] EMMC Clock Control: 0x2
๐ 19.195s [sdmmc::emmc::rockchip:106] EMMC Clock Control: 0x7
๐ก 19.196s [sdmmc::emmc::rockchip:275] Clock 0x7
๐ 19.197s [sdmmc::emmc::rockchip:353] EMMC Host Control 1: 0x24
๐ก 19.197s [sdmmc::emmc::rockchip:145] EMMC Power Control: 0xb
๐ 19.208s [sdmmc::emmc::rockchip:307] EMMC Host Control 2: 0x1b
๐ 19.209s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.210s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.211s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.212s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.212s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.213s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.214s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.215s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.216s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.216s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.218s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.218s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.219s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.220s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.221s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.222s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.222s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.223s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.224s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.225s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.226s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.227s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.228s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.229s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.229s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.230s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.231s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.232s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.232s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.234s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.235s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.235s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.235s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.237s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.239s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.239s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.240s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.240s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.241s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.242s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.243s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.244s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.245s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.246s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.246s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.247s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.252s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.252s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.253s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.254s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.255s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.256s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.257s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.257s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.258s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.259s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.260s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.261s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.262s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.263s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.263s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.264s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.265s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.266s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.267s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.268s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.269s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.269s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.270s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.271s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.272s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.273s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.274s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.274s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.276s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.276s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.277s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.278s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.279s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.280s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.280s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.281s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.282s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.283s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.284s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.285s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.286s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.287s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.287s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.288s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.289s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.290s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.291s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.291s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.293s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.293s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.294s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.295s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.296s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.297s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.297s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.298s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.299s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.299s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.300s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.301s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.303s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.304s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.304s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.305s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.306s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.307s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.307s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.302s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.299s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.299s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.300s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.301s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.303s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.304s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.304s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.305s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.306s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.307s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.307s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.308s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.310s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.310s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.311s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.312s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.313s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.314s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.315s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ 19.315s [sdmmc::emmc::cmd:244] Sending command: opcode=0x15, arg=0x0, resp_type=0x15, command=0x153a
๐ 19.316s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.317s [sdmmc::emmc::cmd:263] Response Status: 0b100000
๐ 19.318s [sdmmc::emmc::cmd:288] Command completed: status=0b100000
๐ก 19.319s [sdmmc::emmc:189] EMMC initialization completed successfully
SD card initialization successful!
Card type: MmcHc
Manufacturer ID: 0x45
Capacity: 0 MB
Block size: 512 bytes
Attempting to read first block...
๐ 19.321s [sdmmc::emmc::block:365] pio read_blocks: block_id = 5034498, blocks = 1
๐ 19.322 [sdmmc::emmc::block:383] Reading 1 blocks starting at addres
๐ 19.323s [sdmmc::emmc::cmd:244] Sending command: opcode=0x11, arg=0x4cd202, resp_type=0x15, command=0x113a
๐ 19.324s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.325s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 19.325s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 19.326s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
Successfully read first block!
First 16 bytes of first block: [40, E2, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 8F, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, DB, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, E0, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, C0, EC, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, E9, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, EE, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, E4, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, C0, DE, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, F0, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, DD, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, E7, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, A9, D5, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 5B, D7, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, 50, D6, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 4E, D6, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 60, 4F, D6, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, CE, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, 48, DF, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 8E, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 60, D6, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 90, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, A0, 09, DD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 80, B9, E1, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, EB, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 60, DD, E0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, D1, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, E0, 7E, E2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 20, A8, D5, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 40, D7, CD, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 91, D2, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, C0, E5, D0, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00]
Testing write and read back...
๐ 19.345s [sdmmc::emmc::block:417] pio write_blocks: block_id = 3, blocks = 1
๐ 19.346s [sdmmc::emmc::block:439] Writing 1 blocks starting at address: 0x3
๐ 19.346s [sdmmc::emmc::cmd:244] Sending command: opcode=0x18, arg=0x3, resp_type=0x15, command=0x183a
๐ 19.348s [sdmmc::emmc::cmd:263] Response Status: 0b10000
๐ 19.348s [sdmmc::emmc::cmd:263] Response Status: 0b10001
๐ 19.349s [sdmmc::emmc::cmd:288] Command completed: status=0b10001
๐ 19.350s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
Successfully wrote to block 3!
๐ 19.352s [sdmmc::emmc::block:365] pio read_blocks: block_id = 3, blocks = 1
๐ 19.353s [sdmmc::emmc::block:383] Reading 1 blocks starting at address: 0x3
๐ 19.354s [sdmmc::emmc::cmd:244] Sending command: opcode=0x11, arg=0x3, resp_type=0x15, command=0x113a
๐ 19.355s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.356s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 19.356s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 19.357s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
Successfully read back block 3!
First 16 bytes of read block: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Data verification successful: written and read data match pe2;128;128;128m๐ 19.373s [sdmmc::emmc::block:383] Reading 4 at address: 0xc8
๐ 19.374s [sdmmc::emmc::block:383] Reading 4 blocks starting at address: 0xc8
๐ 19.375s [sdmmc::emmc::cmd:244] Sending command: opcode=0x12, arg=0xc8, resp_type=0x15, command=0x123a
๐ 19.376s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.377s [sdmmc::emmc::cmd:263] Response Status: 0b100001
๐ 19.377s [sdmmc::emmc::cmd:288] Command completed: status=0b100001
๐ 19.378s [sdmmc::emmc::cmd:339] Data transfer: cmd.data_present=true
๐ 19.379s [sdmmc::emmc::cmd:244] Sending command: opcode=0xc, arg=0x0, resp_type=0x1d, command=0xc1b
๐ 19.380s [sdmmc::emmc::cmd:263] Response Status: 0b0
๐ 19.381s [sdmmc::emmc::cmd:263] Response Status: 0b11
๐ 19.382s [sdmmc::emmc::cmd:288] Command completed: status=0b11
Successfully read 4 blocks starting at block address 200!
First 16 bytes of first block: [A0, 2F, 00, B9, A1, 8B, 0D, A9, A0, 07, 42, A9, A0, 07, 04, A9]
First 16 bytes of last block: [B5, 01, BD, 01, C6, 01, CE, 01, D6, 01, DE, 01, E7, 01, EF, 01]
SD card test complete
npu version: 0x8010
๐ก 19.384s [test::tests:351] test npu cru
๐ 19.385s [rk3588_clk:439] Enabling gate_id 301
๐ 19.385s [rk3588_clk:578] Getting status for gate_id 301
๐ก 19.386s [rk3588_clk:631] gate_con30 value: 0x0
๐ 19.387s [rk3588_clk:669] Gate 301 is enabled
npu gate enable: true
๐ 19.387s [rk3588_clk:439] Enabling gate_id 302
๐ 19.388s [rk3588_clk:578] Getting status for gate_id 302
๐ก 19.389s [rk3588_clk:636] gate_con30 value: 0x0
๐ 19.389s [rk3588_clk:669] Gate 3 is enabled
npu gate enable: true
๐ 19.390s [rk3588_clk:439] Enabling gate_id 290
๐ 19.391s [rk3588_clk:578] Getting status for gate_id 290
๐ก 19.391s [rk3588_clk:586] gate_con27 value: 0xaa04
๐ 19.392s [rk3588_clk:669] Gate 290 is enabled
npu gate enable: true
๐ 19.393s [rk3588_clk:439] Enabling gate_id 291
๐ 19.394s [rk3588_clk:578] Getting status for gate_id 291
๐ก 19.394s [rk3588_clk:591] gate_con27 value: 0xaa00
๐ 19.395s [rk3588_clk:669] Gate 291 is enabled
npu gate enable: true
๐ 19.396s [rk3588_clk:439] Enabling gate_id 292
๐ 19.396s [rk3588_clk:578] Getting status for gate_id 292
๐ก 19.397s [rk3588_clk:596] gate_con28 value: 0xa0
๐ 19.398s [rk3588_clk:669] Gate 292 is enabled
npu gate enable: true
๐ 19.399s [rk3588_clk:439] Enabling gate_id 293
๐ 19.399s [rk3588_clk:578] Getting status for gate_id 293
๐ก 19.400s [rk3588_clk:601] gate_con28 value: 0xa0
๐ 19.400s [rk3588_clk:669] Gate 293 is enabled
npu gate enable: true
๐ 19.401s [rk3588_clk:439] Enabling gate_id 298
๐ 19.402s [rk3588_clk:578] Getting status for gate_id 298
๐ก 19.403s [rk3588_clk:616] gate_con29 value: 0x263
๐ 19.403s [rk3588_clk:669] Gate 298 is enabled
npu gate enable: true
npu version: 0x46495245
๐ก 19.404s [test::tests:375] test npu cru end
๐ก 19.405s [test::tests:88] test uboot
test test_platform passed
All tests passed
๐ค Contributing
Contributions are welcome! Please feel free to submit pull requests or open issues to report bugs and feature requests.
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.