[PATCH v2] board: rockchip: set M.2 NVMe PERSTN low in spl_board_init on Jaguar

Quentin Schulz quentin.schulz at cherry.de
Thu Jul 9 19:17:05 CEST 2026


Hi Jakob,

On 6/25/26 1:55 PM, Jakob Unterwurzacher wrote:
> From: Jakob Unterwurzacher <jakob.unterwurzacher at cherry.de>
> 
> As it is, an NVMe's built-in PERSTN pull-up fights against the
> SoC's built-in pull-down which results in an undefined logic state
> on the Samsung SSD 980 and likely others.
> 
> Fix that by forcing PERSTN low as early as possible, which is SPL.
> 
> Both Linux and U-Boot (via "pci enum") set the pin high later
> as needed and the NVMe is detected fine.
> 
> Oscillocope shots ("x" means undefined logic state at around 1.5V):
> 
> Before:
> 
> 	3V3     ____|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
> 	PERSTN  ____xxxxxxxxxxxxxxx_|‾‾‾‾‾
> 	PCICLK  ____∿∿∿∿∿∿∿∿∿∿∿∿___∿∿∿∿∿∿∿
>                      ^U-Boot     ^ Linux
> 
> After:
> 
> 	3V3     ____|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
> 	PERSTN  ____x_______________|‾‾‾‾‾
> 	PCICLK  ____∿∿∿∿∿∿∿∿∿∿∿∿___∿∿∿∿∿∿∿
>                      ^U-Boot     ^ Linux
> 
> With this change, the power-up sequence conforms to PCIe specs,
> except a remaining short PERSTN glitch. The glitch is about 400ms
> long. It could be shortened by moving the logic to TPL, but
> completely fixing it is only possible in hardware.
> 
> Signed-off-by: Jakob Unterwurzacher <jakob.unterwurzacher at cherry.de>

Reviewed-by: Quentin Schulz <quentin.schulz at cherry.de>

Thanks!
Quentin


More information about the U-Boot mailing list