rockchip: rk3399-puma: add boot-on regulator to override BIOS_DISABLE
The (Qseven) BIOS_DISABLE signal on the RK3399-Q7 (Puma) keeps the eMMC and SPI in reset initially and we need to write a GPIO to turn them on before continuing the boot-up. This adds the DTS entries for the additional regulator and makes pinctrl and gpio3 available during SPL. It also adds a hook to the spl_board_init() to ensure that the regulator gets probed and enabled. Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									0b5e7aab0e
								
							
						
					
					
						commit
						482cf22333
					
				|  | @ -101,6 +101,24 @@ | ||||||
| 		regulator-max-microvolt = <3300000>; | 		regulator-max-microvolt = <3300000>; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | 	/* | ||||||
|  | 	 * The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module | ||||||
|  | 	 * eMMC and SPI flash powered-down initially (in fact it keeps the | ||||||
|  | 	 * reset signal asserted).  Even though it is an enable signal, we | ||||||
|  | 	 * model this as a regulator. | ||||||
|  | 	 */ | ||||||
|  | 	bios_enable: bios_enable { | ||||||
|  | 		compatible = "regulator-fixed"; | ||||||
|  | 		u-boot,dm-pre-reloc; | ||||||
|  | 		regulator-name = "bios_enable"; | ||||||
|  | 		enable-active-low; | ||||||
|  | 		gpio = <&gpio3 29 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		regulator-always-on; | ||||||
|  | 		regulator-boot-on; | ||||||
|  | 		regulator-min-microvolt = <1800000>; | ||||||
|  | 		regulator-max-microvolt = <1800000>; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
| 	vccadc_ref: vccadc-ref { | 	vccadc_ref: vccadc-ref { | ||||||
| 		compatible = "regulator-fixed"; | 		compatible = "regulator-fixed"; | ||||||
| 		regulator-name = "vcc1v8_sys"; | 		regulator-name = "vcc1v8_sys"; | ||||||
|  | @ -459,7 +477,7 @@ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| &pcie_phy { | &pcie_phy { | ||||||
| 	        status = "okay"; | 		status = "okay"; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| &pmu_io_domains { | &pmu_io_domains { | ||||||
|  | @ -486,7 +504,7 @@ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| &sdmmc { | &sdmmc { | ||||||
|         u-boot,dm-pre-reloc; | 	u-boot,dm-pre-reloc; | ||||||
| 	clock-frequency = <150000000>; | 	clock-frequency = <150000000>; | ||||||
| 	clock-freq-min-max = <100000 150000000>; | 	clock-freq-min-max = <100000 150000000>; | ||||||
| 	supports-sd; | 	supports-sd; | ||||||
|  | @ -533,10 +551,15 @@ | ||||||
| 	status = "okay"; | 	status = "okay"; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | &gpio3 { | ||||||
|  | 	u-boot,dm-pre-reloc; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| &pinctrl { | &pinctrl { | ||||||
| 	/* Pins that are not explicitely used by any devices */ | 	/* Pins that are not explicitely used by any devices */ | ||||||
| 	pinctrl-names = "default"; | 	pinctrl-names = "default"; | ||||||
| 	pinctrl-0 = <&puma_pin_hog>; | 	pinctrl-0 = <&puma_pin_hog>; | ||||||
|  | 
 | ||||||
| 	hog { | 	hog { | ||||||
| 		puma_pin_hog: puma_pin_hog { | 		puma_pin_hog: puma_pin_hog { | ||||||
| 			rockchip,pins = | 			rockchip,pins = | ||||||
|  | @ -576,7 +599,7 @@ | ||||||
| 	i2c8 { | 	i2c8 { | ||||||
| 		i2c8_xfer_a: i2c8-xfer { | 		i2c8_xfer_a: i2c8-xfer { | ||||||
| 			rockchip,pins = <1 21 RK_FUNC_1 &pcfg_pull_up>, | 			rockchip,pins = <1 21 RK_FUNC_1 &pcfg_pull_up>, | ||||||
| 			                <1 20 RK_FUNC_1 &pcfg_pull_up>; | 					<1 20 RK_FUNC_1 &pcfg_pull_up>; | ||||||
| 		}; | 		}; | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
|  | @ -652,4 +675,3 @@ | ||||||
| &spi5 { | &spi5 { | ||||||
| 	status = "okay"; | 	status = "okay"; | ||||||
| }; | }; | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -34,6 +34,16 @@ int board_init(void) | ||||||
| 
 | 
 | ||||||
| void spl_board_init(void) | void spl_board_init(void) | ||||||
| { | { | ||||||
|  | 	int  ret; | ||||||
|  | 
 | ||||||
|  | 	/*
 | ||||||
|  | 	 * Turning the eMMC and SPI back on (if disabled via the Qseven | ||||||
|  | 	 * BIOS_ENABLE) signal is done through a always-on regulator). | ||||||
|  | 	 */ | ||||||
|  | 	ret = regulators_enable_boot_on(false); | ||||||
|  | 	if (ret) | ||||||
|  | 		debug("%s: Cannot enable boot on regulator\n", __func__); | ||||||
|  | 
 | ||||||
| 	preloader_console_init(); | 	preloader_console_init(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue