[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