mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-03 01:28:04 +00:00

gs101 (Google Pixel 6 and Pixel 6 Pro) supports cold- and warm-reboot. Cold-reset is useful because it is more secure, e.g. wiping all RAM contents, while the warm-reboot allows RAM contents to be retained across the reboot, e.g. to collect potential crash information. Add the required DT changes to switch to the gs101-specific reboot method, which knows how to issue either reset as requested by the OS. The PMIC plays a role in this as well, so mark it as 'system-power-controller', which in this case ensures that the device will wake up again after a cold-reboot, ensuring the full power-cycle is successful. Signed-off-by: André Draszik <andre.draszik@linaro.org> Link: https://lore.kernel.org/r/20250627-gs101-reboot3-v1-3-c3ae49657b1f@linaro.org Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
391 lines
8.2 KiB
Plaintext
391 lines
8.2 KiB
Plaintext
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Device Tree nodes common for all GS101-based Pixel
|
|
*
|
|
* Copyright 2021-2023 Google LLC
|
|
* Copyright 2023 Linaro Ltd - <peter.griffin@linaro.org>
|
|
*/
|
|
|
|
/dts-v1/;
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/usb/pd.h>
|
|
#include "gs101-pinctrl.h"
|
|
#include "gs101.dtsi"
|
|
|
|
/ {
|
|
aliases {
|
|
serial0 = &serial_0;
|
|
};
|
|
|
|
chosen {
|
|
/* Bootloader expects bootargs specified otherwise it crashes */
|
|
bootargs = "";
|
|
stdout-path = &serial_0;
|
|
|
|
/* Use display framebuffer as setup by bootloader */
|
|
framebuffer0: framebuffer-0 {
|
|
compatible = "simple-framebuffer";
|
|
memory-region = <&cont_splash_mem>;
|
|
/* format properties to be added by actual board */
|
|
status = "disabled";
|
|
};
|
|
};
|
|
|
|
gpio-keys {
|
|
compatible = "gpio-keys";
|
|
pinctrl-0 = <&key_voldown>, <&key_volup>, <&key_power>;
|
|
pinctrl-names = "default";
|
|
|
|
button-vol-down {
|
|
label = "KEY_VOLUMEDOWN";
|
|
linux,code = <KEY_VOLUMEDOWN>;
|
|
gpios = <&gpa7 3 GPIO_ACTIVE_LOW>;
|
|
wakeup-source;
|
|
};
|
|
|
|
button-vol-up {
|
|
label = "KEY_VOLUMEUP";
|
|
linux,code = <KEY_VOLUMEUP>;
|
|
gpios = <&gpa8 1 GPIO_ACTIVE_LOW>;
|
|
wakeup-source;
|
|
};
|
|
|
|
button-power {
|
|
label = "KEY_POWER";
|
|
linux,code = <KEY_POWER>;
|
|
gpios = <&gpa10 1 GPIO_ACTIVE_LOW>;
|
|
wakeup-source;
|
|
};
|
|
};
|
|
|
|
reboot-mode {
|
|
compatible = "nvmem-reboot-mode";
|
|
nvmem-cells = <&nvmem_reboot_mode>;
|
|
nvmem-cell-names = "reboot-mode";
|
|
mode-bootloader = <0x800000fc>;
|
|
mode-charge = <0x8000000a>;
|
|
mode-dm-verity-device-corrupted = <0x80000050>;
|
|
mode-fastboot = <0x800000fa>;
|
|
mode-reboot-ab-update = <0x80000052>;
|
|
mode-recovery = <0x800000ff>;
|
|
mode-rescue = <0x800000f9>;
|
|
mode-shutdown-thermal = <0x80000051>;
|
|
mode-shutdown-thermal-battery = <0x80000051>;
|
|
};
|
|
|
|
/* TODO: Remove this once PMIC is implemented */
|
|
reg_placeholder: regulator-0 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "placeholder_reg";
|
|
};
|
|
|
|
/* TODO: Remove this once S2MPG11 slave PMIC is implemented */
|
|
ufs_0_fixed_vcc_reg: regulator-1 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "ufs-vcc";
|
|
gpio = <&gpp0 1 GPIO_ACTIVE_HIGH>;
|
|
regulator-boot-on;
|
|
enable-active-high;
|
|
};
|
|
|
|
reserved-memory {
|
|
cont_splash_mem: splash@fac00000 {
|
|
/* size to be updated by actual board */
|
|
reg = <0x0 0xfac00000 0x0>;
|
|
no-map;
|
|
status = "disabled";
|
|
};
|
|
};
|
|
};
|
|
|
|
&acpm_ipc {
|
|
pmic {
|
|
compatible = "samsung,s2mpg10-pmic";
|
|
interrupts-extended = <&gpa0 6 IRQ_TYPE_LEVEL_LOW>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pmic_int>;
|
|
system-power-controller;
|
|
wakeup-source;
|
|
|
|
regulators {
|
|
};
|
|
};
|
|
};
|
|
|
|
&ext_24_5m {
|
|
clock-frequency = <24576000>;
|
|
};
|
|
|
|
&ext_200m {
|
|
clock-frequency = <200000000>;
|
|
};
|
|
|
|
&hsi2c_8 {
|
|
status = "okay";
|
|
|
|
eeprom: eeprom@50 {
|
|
compatible = "atmel,24c08";
|
|
reg = <0x50>;
|
|
};
|
|
};
|
|
|
|
&hsi2c_12 {
|
|
status = "okay";
|
|
/* TODO: add the devices once drivers exist */
|
|
|
|
usb-typec@25 {
|
|
compatible = "maxim,max77759-tcpci", "maxim,max33359";
|
|
reg = <0x25>;
|
|
interrupts-extended = <&gpa8 2 IRQ_TYPE_LEVEL_LOW>;
|
|
pinctrl-0 = <&typec_int>;
|
|
pinctrl-names = "default";
|
|
|
|
connector {
|
|
compatible = "usb-c-connector";
|
|
label = "USB-C";
|
|
data-role = "dual";
|
|
power-role = "dual";
|
|
self-powered;
|
|
try-power-role = "sink";
|
|
op-sink-microwatt = <2600000>;
|
|
slow-charger-loop;
|
|
/*
|
|
* max77759 operating in reverse boost mode (0xA) can
|
|
* source up to 1.5A while extboost can only do ~1A.
|
|
* Since extboost is the primary path, advertise 900mA.
|
|
*/
|
|
source-pdos = <PDO_FIXED(5000, 900,
|
|
(PDO_FIXED_SUSPEND
|
|
| PDO_FIXED_USB_COMM
|
|
| PDO_FIXED_DATA_SWAP
|
|
| PDO_FIXED_DUAL_ROLE))>;
|
|
sink-pdos = <PDO_FIXED(5000, 3000,
|
|
(PDO_FIXED_DATA_SWAP
|
|
| PDO_FIXED_USB_COMM
|
|
| PDO_FIXED_HIGHER_CAP
|
|
| PDO_FIXED_DUAL_ROLE))
|
|
PDO_FIXED(9000, 2200, 0)
|
|
PDO_PPS_APDO(5000, 11000, 3000)>;
|
|
sink-vdos = <VDO_IDH(1, 1, IDH_PTYPE_PERIPH, 0,
|
|
IDH_PTYPE_DFP_HOST, 2, 0x18d1)
|
|
VDO_CERT(0x0)
|
|
VDO_PRODUCT(0x4ee1, 0x0)
|
|
VDO_UFP(UFP_VDO_VER1_2,
|
|
(DEV_USB2_CAPABLE
|
|
| DEV_USB3_CAPABLE),
|
|
UFP_RECEPTACLE, 0,
|
|
AMA_VCONN_NOT_REQ, 0,
|
|
UFP_ALTMODE_NOT_SUPP,
|
|
UFP_USB32_GEN1)
|
|
/* padding */ 0
|
|
VDO_DFP(DFP_VDO_VER1_1,
|
|
(HOST_USB2_CAPABLE
|
|
| HOST_USB3_CAPABLE),
|
|
DFP_RECEPTACLE, 0)>;
|
|
sink-vdos-v1 = <VDO_IDH(1, 1, IDH_PTYPE_PERIPH, 0,
|
|
0, 0, 0x18d1)
|
|
VDO_CERT(0x0)
|
|
VDO_PRODUCT(0x4ee1, 0x0)>;
|
|
/*
|
|
* Until bootloader is updated to set those two when
|
|
* console is enabled, we disable PD here.
|
|
*/
|
|
pd-disable;
|
|
typec-power-opmode = "default";
|
|
|
|
ports {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
port@0 {
|
|
reg = <0>;
|
|
|
|
usbc0_orien_sw: endpoint {
|
|
remote-endpoint = <&usbdrd31_phy_orien_switch>;
|
|
};
|
|
};
|
|
|
|
port@1 {
|
|
reg = <1>;
|
|
|
|
usbc0_role_sw: endpoint {
|
|
remote-endpoint = <&usbdrd31_dwc3_role_switch>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
pmic@66 {
|
|
compatible = "maxim,max77759";
|
|
reg = <0x66>;
|
|
|
|
pinctrl-0 = <&if_pmic_int>;
|
|
pinctrl-names = "default";
|
|
interrupts-extended = <&gpa8 3 IRQ_TYPE_LEVEL_LOW>;
|
|
|
|
interrupt-controller;
|
|
#interrupt-cells = <2>;
|
|
|
|
gpio {
|
|
compatible = "maxim,max77759-gpio";
|
|
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
/*
|
|
* "Human-readable name [SIGNAL_LABEL]" where the
|
|
* latter comes from the schematic
|
|
*/
|
|
gpio-line-names = "OTG boost [OTG_BOOST_EN]",
|
|
"max20339 IRQ [MW_OVP_INT_L]";
|
|
|
|
interrupt-controller;
|
|
#interrupt-cells = <2>;
|
|
};
|
|
|
|
nvmem-0 {
|
|
compatible = "maxim,max77759-nvmem";
|
|
|
|
nvmem-layout {
|
|
compatible = "fixed-layout";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
|
|
nvmem_reboot_mode: reboot-mode@0 {
|
|
reg = <0x0 0x4>;
|
|
};
|
|
|
|
boot-reason@4 {
|
|
reg = <0x4 0x4>;
|
|
};
|
|
|
|
shutdown-user-flag@8 {
|
|
reg = <0x8 0x1>;
|
|
};
|
|
|
|
rsoc@a {
|
|
reg = <0xa 0x2>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&pinctrl_far_alive {
|
|
key_voldown: key-voldown-pins {
|
|
samsung,pins = "gpa7-3";
|
|
samsung,pin-function = <GS101_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <GS101_PIN_PULL_NONE>;
|
|
samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
|
|
};
|
|
|
|
key_volup: key-volup-pins {
|
|
samsung,pins = "gpa8-1";
|
|
samsung,pin-function = <GS101_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <GS101_PIN_PULL_NONE>;
|
|
samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
|
|
};
|
|
|
|
typec_int: typec-int-pins {
|
|
samsung,pins = "gpa8-2";
|
|
samsung,pin-function = <GS101_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <GS101_PIN_PULL_UP>;
|
|
samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
|
|
};
|
|
|
|
if_pmic_int: if-pmic-int-pins {
|
|
samsung,pins = "gpa8-3";
|
|
samsung,pin-function = <GS101_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <GS101_PIN_PULL_UP>;
|
|
samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
|
|
};
|
|
};
|
|
|
|
&pinctrl_gpio_alive {
|
|
pmic_int: pmic-int-pins {
|
|
samsung,pins = "gpa0-6";
|
|
samsung,pin-function = <GS101_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <GS101_PIN_PULL_NONE>;
|
|
};
|
|
|
|
key_power: key-power-pins {
|
|
samsung,pins = "gpa10-1";
|
|
samsung,pin-function = <GS101_PIN_FUNC_EINT>;
|
|
samsung,pin-pud = <GS101_PIN_PULL_NONE>;
|
|
samsung,pin-drv = <GS101_PIN_DRV_2_5_MA>;
|
|
};
|
|
};
|
|
|
|
&serial_0 {
|
|
status = "okay";
|
|
};
|
|
|
|
&ufs_0 {
|
|
status = "okay";
|
|
vcc-supply = <&ufs_0_fixed_vcc_reg>;
|
|
};
|
|
|
|
&ufs_0_phy {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbdrd31 {
|
|
vdd10-supply = <®_placeholder>;
|
|
vdd33-supply = <®_placeholder>;
|
|
status = "okay";
|
|
};
|
|
|
|
&usbdrd31_dwc3 {
|
|
dr_mode = "otg";
|
|
usb-role-switch;
|
|
role-switch-default-mode = "peripheral";
|
|
maximum-speed = "super-speed-plus";
|
|
status = "okay";
|
|
|
|
port {
|
|
usbdrd31_dwc3_role_switch: endpoint {
|
|
remote-endpoint = <&usbc0_role_sw>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&usbdrd31_phy {
|
|
orientation-switch;
|
|
/* TODO: Update these once PMIC is implemented */
|
|
pll-supply = <®_placeholder>;
|
|
dvdd-usb20-supply = <®_placeholder>;
|
|
vddh-usb20-supply = <®_placeholder>;
|
|
vdd33-usb20-supply = <®_placeholder>;
|
|
vdda-usbdp-supply = <®_placeholder>;
|
|
vddh-usbdp-supply = <®_placeholder>;
|
|
status = "okay";
|
|
|
|
port {
|
|
usbdrd31_phy_orien_switch: endpoint {
|
|
remote-endpoint = <&usbc0_orien_sw>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&usi_uart {
|
|
samsung,clkreq-on; /* needed for UART mode */
|
|
status = "okay";
|
|
};
|
|
|
|
&usi8 {
|
|
samsung,mode = <USI_MODE_I2C>;
|
|
status = "okay";
|
|
};
|
|
|
|
&usi12 {
|
|
samsung,mode = <USI_MODE_I2C>;
|
|
status = "okay";
|
|
};
|
|
|
|
&watchdog_cl0 {
|
|
timeout-sec = <30>;
|
|
status = "okay";
|
|
};
|