From 168e24966f10ff635b0ec9728aa71833bf850ee5 Mon Sep 17 00:00:00 2001 From: Peter Griffin Date: Mon, 6 Jan 2025 14:57:46 +0000 Subject: [PATCH 01/25] arm64: dts: exynos: gs101: disable pinctrl_gsacore node gsacore registers are not accessible from normal world. Disable this node, so that the suspend/resume callbacks in the pinctrl driver don't cause a Serror attempting to access the registers. Fixes: ea89fdf24fd9 ("arm64: dts: exynos: google: Add initial Google gs101 SoC support") Signed-off-by: Peter Griffin To: Rob Herring To: Krzysztof Kozlowski To: Conor Dooley To: Alim Akhtar Cc: linux-arm-kernel@lists.infradead.org Cc: linux-samsung-soc@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: tudor.ambarus@linaro.org Cc: andre.draszik@linaro.org Cc: kernel-team@android.com Cc: willmcvicker@google.com Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20250106-contrib-pg-pinctrl_gsacore_disable-v1-1-d3fc88a48aed@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index c5335dd59dfe..813f96089578 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -1454,6 +1454,7 @@ pinctrl_gsacore: pinctrl@17a80000 { /* TODO: update once support for this CMU exists */ clocks = <0>; clock-names = "pclk"; + status = "disabled"; }; cmu_top: clock-controller@1e080000 { From 2f88cffbfe61a9e257aa6d9cf03e1b9567cfc910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Draszik?= Date: Fri, 17 Jan 2025 17:09:54 +0000 Subject: [PATCH 02/25] dt-bindings: arm: google: add gs101-raven MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Raven is Google's code name for Pixel 6 Pro. Since there are differences compared to Pixel 6 (Oriole), we need to add a separate compatible for it. Reviewed-by: Peter Griffin Acked-by: Rob Herring (Arm) Signed-off-by: André Draszik Link: https://lore.kernel.org/r/20250117-gs101-simplefb-v4-1-a5b90ca2f917@linaro.org Signed-off-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/arm/google.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/arm/google.yaml b/Documentation/devicetree/bindings/arm/google.yaml index e20b5c9b16bc..99961e5282e5 100644 --- a/Documentation/devicetree/bindings/arm/google.yaml +++ b/Documentation/devicetree/bindings/arm/google.yaml @@ -34,10 +34,11 @@ properties: const: '/' compatible: oneOf: - - description: Google Pixel 6 / Oriole + - description: Google Pixel 6 or 6 Pro (Oriole or Raven) items: - enum: - google,gs101-oriole + - google,gs101-raven - const: google,gs101 # Bootloader requires empty ect node to be present From befbb62c61a5f5ef547355f2f726a0926916a12c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Draszik?= Date: Fri, 17 Jan 2025 17:09:55 +0000 Subject: [PATCH 03/25] arm64: dts: exynos: gs101-oriole: configure simple-framebuffer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bootloader configures the display hardware for a framebuffer at the given address, let's add a simple-framebuffer node here until we get a proper DRM driver. This has several benefits since it's an OLED display: * energy consumption goes down significantly, as it changes from white (as left by bootloader) to black (linux console), and we generally don't run out of battery anymore when plugged into a USB port * less of a burn-in effect I assume * phone stays cooler due to reduced energy consumption by display Signed-off-by: André Draszik Reviewed-by: Peter Griffin Link: https://lore.kernel.org/r/20250117-gs101-simplefb-v4-2-a5b90ca2f917@linaro.org Signed-off-by: Krzysztof Kozlowski --- .../boot/dts/exynos/google/gs101-oriole.dts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts b/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts index e58881c61d53..d3dd411c9bd0 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts +++ b/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts @@ -26,6 +26,16 @@ 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>; + width = <1080>; + height = <2400>; + stride = <(1080 * 4)>; + format = "a8r8g8b8"; + }; }; gpio-keys { @@ -69,6 +79,13 @@ ufs_0_fixed_vcc_reg: regulator-1 { regulator-boot-on; enable-active-high; }; + + reserved-memory { + cont_splash_mem: splash@fac00000 { + reg = <0x0 0xfac00000 (1080 * 2400 * 4)>; + no-map; + }; + }; }; &ext_24_5m { From 58dbafb73173a944657c4a0d480d2cce50bff2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Draszik?= Date: Fri, 17 Jan 2025 17:09:56 +0000 Subject: [PATCH 04/25] arm64: dts: exynos: gs101-oriole: move common Pixel6 & 6Pro parts into a .dtsi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In order to support Pixel 6 (Oriole), Pixel 6 Pro (Raven), Pixel 6a (Bluejay), and all other versions correctly, we have to be able to distinguish them properly as we add support for more features. For example, Raven has a larger display. There are other differences, like battery design capacity, etc. Move all the parts that are common for now into a gs101-pixel-common.dtsi, and just leave the display related things in gs101-oriole.dts. Signed-off-by: André Draszik Reviewed-by: Peter Griffin Link: https://lore.kernel.org/r/20250117-gs101-simplefb-v4-3-a5b90ca2f917@linaro.org Signed-off-by: Krzysztof Kozlowski --- .../boot/dts/exynos/google/gs101-oriole.dts | 284 +---------------- .../dts/exynos/google/gs101-pixel-common.dtsi | 294 ++++++++++++++++++ 2 files changed, 302 insertions(+), 276 deletions(-) create mode 100644 arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi diff --git a/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts b/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts index d3dd411c9bd0..8df42bedbc03 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts +++ b/arch/arm64/boot/dts/exynos/google/gs101-oriole.dts @@ -8,290 +8,22 @@ /dts-v1/; -#include -#include -#include -#include "gs101-pinctrl.h" -#include "gs101.dtsi" +#include "gs101-pixel-common.dtsi" / { model = "Oriole"; compatible = "google,gs101-oriole", "google,gs101"; - - 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>; - width = <1080>; - height = <2400>; - stride = <(1080 * 4)>; - format = "a8r8g8b8"; - }; - }; - - gpio-keys { - compatible = "gpio-keys"; - pinctrl-0 = <&key_voldown>, <&key_volup>, <&key_power>; - pinctrl-names = "default"; - - button-vol-down { - label = "KEY_VOLUMEDOWN"; - linux,code = ; - gpios = <&gpa7 3 GPIO_ACTIVE_LOW>; - wakeup-source; - }; - - button-vol-up { - label = "KEY_VOLUMEUP"; - linux,code = ; - gpios = <&gpa8 1 GPIO_ACTIVE_LOW>; - wakeup-source; - }; - - button-power { - label = "KEY_POWER"; - linux,code = ; - gpios = <&gpa10 1 GPIO_ACTIVE_LOW>; - wakeup-source; - }; - }; - - /* 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 { - reg = <0x0 0xfac00000 (1080 * 2400 * 4)>; - no-map; - }; - }; }; -&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 = ; - sink-pdos = ; - sink-vdos = ; - sink-vdos-v1 = ; - /* - * 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>; - }; - }; - }; - }; - }; -}; - -&pinctrl_far_alive { - key_voldown: key-voldown-pins { - samsung,pins = "gpa7-3"; - samsung,pin-function = ; - samsung,pin-pud = ; - samsung,pin-drv = ; - }; - - key_volup: key-volup-pins { - samsung,pins = "gpa8-1"; - samsung,pin-function = ; - samsung,pin-pud = ; - samsung,pin-drv = ; - }; - - typec_int: typec-int-pins { - samsung,pins = "gpa8-2"; - samsung,pin-function = ; - samsung,pin-pud = ; - samsung,pin-drv = ; - }; -}; - -&pinctrl_gpio_alive { - key_power: key-power-pins { - samsung,pins = "gpa10-1"; - samsung,pin-function = ; - samsung,pin-pud = ; - samsung,pin-drv = ; - }; -}; - -&serial_0 { +&cont_splash_mem { + reg = <0x0 0xfac00000 (1080 * 2400 * 4)>; 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 = ; - status = "okay"; -}; - -&usi12 { - samsung,mode = ; - status = "okay"; -}; - -&watchdog_cl0 { - timeout-sec = <30>; +&framebuffer0 { + width = <1080>; + height = <2400>; + stride = <(1080 * 4)>; + format = "a8r8g8b8"; status = "okay"; }; diff --git a/arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi b/arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi new file mode 100644 index 000000000000..b25230495c64 --- /dev/null +++ b/arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi @@ -0,0 +1,294 @@ +// 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 - + */ + +/dts-v1/; + +#include +#include +#include +#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 = ; + gpios = <&gpa7 3 GPIO_ACTIVE_LOW>; + wakeup-source; + }; + + button-vol-up { + label = "KEY_VOLUMEUP"; + linux,code = ; + gpios = <&gpa8 1 GPIO_ACTIVE_LOW>; + wakeup-source; + }; + + button-power { + label = "KEY_POWER"; + linux,code = ; + gpios = <&gpa10 1 GPIO_ACTIVE_LOW>; + wakeup-source; + }; + }; + + /* 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"; + }; + }; +}; + +&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 = ; + sink-pdos = ; + sink-vdos = ; + sink-vdos-v1 = ; + /* + * 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>; + }; + }; + }; + }; + }; +}; + +&pinctrl_far_alive { + key_voldown: key-voldown-pins { + samsung,pins = "gpa7-3"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; + + key_volup: key-volup-pins { + samsung,pins = "gpa8-1"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; + + typec_int: typec-int-pins { + samsung,pins = "gpa8-2"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; +}; + +&pinctrl_gpio_alive { + key_power: key-power-pins { + samsung,pins = "gpa10-1"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; +}; + +&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 = ; + status = "okay"; +}; + +&usi12 { + samsung,mode = ; + status = "okay"; +}; + +&watchdog_cl0 { + timeout-sec = <30>; + status = "okay"; +}; From 825c4bfd5c526b6fd18c8ad8503761143c90a142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Draszik?= Date: Fri, 17 Jan 2025 17:09:57 +0000 Subject: [PATCH 05/25] arm64: dts: exynos: gs101-raven: add new board file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Raven is Google's code name for Pixel 6 Pro. Similar to Pixel 6 (Oriole), this is also based around its Tensor gs101 SoC. For now, the relevant difference here is the display resolution: 1440 x 3120 instead of 1080 x 2400. Create a new board file to reflect this difference. Signed-off-by: André Draszik Reviewed-by: Peter Griffin Link: https://lore.kernel.org/r/20250117-gs101-simplefb-v4-4-a5b90ca2f917@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/Makefile | 1 + .../boot/dts/exynos/google/gs101-raven.dts | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 arch/arm64/boot/dts/exynos/google/gs101-raven.dts diff --git a/arch/arm64/boot/dts/exynos/google/Makefile b/arch/arm64/boot/dts/exynos/google/Makefile index 0a6d5e1fe4ee..7385f82b03c9 100644 --- a/arch/arm64/boot/dts/exynos/google/Makefile +++ b/arch/arm64/boot/dts/exynos/google/Makefile @@ -2,3 +2,4 @@ dtb-$(CONFIG_ARCH_EXYNOS) += \ gs101-oriole.dtb \ + gs101-raven.dtb diff --git a/arch/arm64/boot/dts/exynos/google/gs101-raven.dts b/arch/arm64/boot/dts/exynos/google/gs101-raven.dts new file mode 100644 index 000000000000..1e7e6b34b864 --- /dev/null +++ b/arch/arm64/boot/dts/exynos/google/gs101-raven.dts @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Raven Device Tree + * + * Copyright 2021-2023 Google LLC + * Copyright 2023-2025 Linaro Ltd + */ + +/dts-v1/; + +#include "gs101-pixel-common.dtsi" + +/ { + model = "Raven"; + compatible = "google,gs101-raven", "google,gs101"; +}; + +&cont_splash_mem { + reg = <0x0 0xfac00000 (1440 * 3120 * 4)>; + status = "okay"; +}; + +&framebuffer0 { + width = <1440>; + height = <3120>; + stride = <(1440 * 4)>; + format = "a8r8g8b8"; + status = "okay"; +}; From 7fa119f5707f12f3ac00726345ea6b7a22977ab6 Mon Sep 17 00:00:00 2001 From: Igor Belwon Date: Sat, 4 Jan 2025 21:05:56 +0100 Subject: [PATCH 06/25] dt-bindings: clock: exynos990: Add CMU_PERIS block Add CMU_PERIS block compatible, and clock definitions. CMU_PERIS requires one bus clock dependency, and it's used for i.e the MCT. Signed-off-by: Igor Belwon Reviewed-by: Krzysztof Kozlowski Link: https://lore.kernel.org/r/20250104-exynos990-cmu-v1-1-9f54d69286d6@mentallysanemainliners.org Signed-off-by: Krzysztof Kozlowski --- .../clock/samsung,exynos990-clock.yaml | 19 +++++++++++++++++ include/dt-bindings/clock/samsung,exynos990.h | 21 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/Documentation/devicetree/bindings/clock/samsung,exynos990-clock.yaml b/Documentation/devicetree/bindings/clock/samsung,exynos990-clock.yaml index 9e7944b5f13b..c15cc1752b02 100644 --- a/Documentation/devicetree/bindings/clock/samsung,exynos990-clock.yaml +++ b/Documentation/devicetree/bindings/clock/samsung,exynos990-clock.yaml @@ -31,6 +31,7 @@ properties: compatible: enum: - samsung,exynos990-cmu-hsi0 + - samsung,exynos990-cmu-peris - samsung,exynos990-cmu-top clocks: @@ -79,6 +80,24 @@ allOf: - const: usbdp_debug - const: dpgtc + - if: + properties: + compatible: + contains: + const: samsung,exynos990-cmu-peris + + then: + properties: + clocks: + items: + - description: External reference clock (26 MHz) + - description: CMU_PERIS BUS clock (from CMU_TOP) + + clock-names: + items: + - const: oscclk + - const: bus + - if: properties: compatible: diff --git a/include/dt-bindings/clock/samsung,exynos990.h b/include/dt-bindings/clock/samsung,exynos990.h index 307215a3f3ed..6b9df09d2822 100644 --- a/include/dt-bindings/clock/samsung,exynos990.h +++ b/include/dt-bindings/clock/samsung,exynos990.h @@ -233,4 +233,25 @@ #define CLK_GOUT_HSI0_CMU_HSI0_PCLK 21 #define CLK_GOUT_HSI0_XIU_D_HSI0_ACLK 22 +/* CMU_PERIS */ +#define CLK_MOUT_PERIS_BUS_USER 1 +#define CLK_MOUT_PERIS_CLK_PERIS_GIC 2 +#define CLK_GOUT_PERIS_SYSREG_PERIS_PCLK 3 +#define CLK_GOUT_PERIS_WDT_CLUSTER2_PCLK 4 +#define CLK_GOUT_PERIS_WDT_CLUSTER0_PCLK 5 +#define CLK_CLK_PERIS_PERIS_CMU_PERIS_PCLK 6 +#define CLK_GOUT_PERIS_CLK_PERIS_BUSP_CLK 7 +#define CLK_GOUT_PERIS_CLK_PERIS_OSCCLK_CLK 8 +#define CLK_GOUT_PERIS_CLK_PERIS_GIC_CLK 9 +#define CLK_GOUT_PERIS_AD_AXI_P_PERIS_ACLKM 10 +#define CLK_GOUT_PERIS_OTP_CON_BIRA_PCLK 11 +#define CLK_GOUT_PERIS_GIC_CLK 12 +#define CLK_GOUT_PERIS_LHM_AXI_P_PERIS_CLK 13 +#define CLK_GOUT_PERIS_MCT_PCLK 14 +#define CLK_GOUT_PERIS_OTP_CON_TOP_PCLK 15 +#define CLK_GOUT_PERIS_D_TZPC_PERIS_PCLK 16 +#define CLK_GOUT_PERIS_TMU_TOP_PCLK 17 +#define CLK_GOUT_PERIS_OTP_CON_BIRA_OSCCLK 18 +#define CLK_GOUT_PERIS_OTP_CON_TOP_OSCCLK 19 + #endif From b6f1ea2ae9b5983776271e71d4351f2fc211a28e Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Tue, 4 Feb 2025 19:28:00 +0200 Subject: [PATCH 07/25] dt-bindings: soc: samsung: usi: add USIv1 and samsung,exynos8895-usi Add new constants for choosing the additional USIv1 configuration modes in device tree. Those are further used in the USI driver to figure out which value to write into SW_CONF register. Modify the current USI IP-core bindings to include information about USIv1 and a compatible for exynos8895. In the original bindings commit, protocol mode definitions were named with the version of the supported USI (in this case, V2) with the idea of leaving enough room in the future for other versions of this block. This, however, is not how the modes should be modelled. The modes are not version specific and you should not be able to tell USI which version of a mode to use - that has to be handled in the driver - thus encoding this information in the binding is meaningless. Only one constant per mode is needed, so while we're at it, add new constants with the prefix USI_MODE and mark the old ones as depracated. Signed-off-by: Ivaylo Ivanov Reviewed-by: Krzysztof Kozlowski Link: https://lore.kernel.org/r/20250204172803.3425496-2-ivo.ivanov.ivanov1@gmail.com Signed-off-by: Krzysztof Kozlowski --- .../bindings/soc/samsung/exynos-usi.yaml | 99 ++++++++++++------- include/dt-bindings/soc/samsung,exynos-usi.h | 17 +++- 2 files changed, 79 insertions(+), 37 deletions(-) diff --git a/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml b/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml index 5b046932fbc3..f711e23c0686 100644 --- a/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml +++ b/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml @@ -11,11 +11,21 @@ maintainers: - Krzysztof Kozlowski description: | - USI IP-core provides selectable serial protocol (UART, SPI or High-Speed I2C). - USI shares almost all internal circuits within each protocol, so only one - protocol can be chosen at a time. USI is modeled as a node with zero or more - child nodes, each representing a serial sub-node device. The mode setting - selects which particular function will be used. + The USI IP-core provides configurable support for serial protocols, enabling + different serial communication modes depending on the version. + + In USIv1, configurations are available to enable either one or two protocols + simultaneously in select combinations - High-Speed I2C0, High-Speed + I2C1, SPI, UART, High-Speed I2C0 and I2C1 or both High-Speed + I2C1 and UART. + + In USIv2, only one protocol can be active at a time, either UART, SPI, or + High-Speed I2C. + + The USI core shares internal circuits across protocols, meaning only the + selected configuration is active at any given time. USI is modeled as a node + with zero or more child nodes, each representing a serial sub-node device. The + mode setting selects which particular function will be used. properties: $nodename: @@ -31,6 +41,7 @@ properties: - const: samsung,exynos850-usi - enum: - samsung,exynos850-usi + - samsung,exynos8895-usi reg: maxItems: 1 @@ -64,7 +75,7 @@ properties: samsung,mode: $ref: /schemas/types.yaml#/definitions/uint32 - enum: [0, 1, 2, 3] + enum: [0, 1, 2, 3, 4, 5, 6] description: Selects USI function (which serial protocol to use). Refer to for valid USI mode values. @@ -101,37 +112,59 @@ required: - samsung,sysreg - samsung,mode -if: - properties: - compatible: - contains: - enum: - - samsung,exynos850-usi +allOf: + - if: + properties: + compatible: + contains: + enum: + - samsung,exynos850-usi -then: - properties: - reg: - maxItems: 1 + then: + properties: + reg: + maxItems: 1 - clocks: - items: - - description: Bus (APB) clock - - description: Operating clock for UART/SPI/I2C protocol + clocks: + items: + - description: Bus (APB) clock + - description: Operating clock for UART/SPI/I2C protocol - clock-names: - maxItems: 2 + clock-names: + maxItems: 2 - required: - - reg - - clocks - - clock-names + samsung,mode: + enum: [0, 1, 2, 3] -else: - properties: - reg: false - clocks: false - clock-names: false - samsung,clkreq-on: false + required: + - reg + - clocks + - clock-names + + - if: + properties: + compatible: + contains: + enum: + - samsung,exynos8895-usi + + then: + properties: + reg: false + + clocks: + items: + - description: Bus (APB) clock + - description: Operating clock for UART/SPI protocol + + clock-names: + maxItems: 2 + + samsung,clkreq-on: false + + required: + - clocks + - clock-names additionalProperties: false @@ -144,7 +177,7 @@ examples: compatible = "samsung,exynos850-usi"; reg = <0x138200c0 0x20>; samsung,sysreg = <&sysreg_peri 0x1010>; - samsung,mode = ; + samsung,mode = ; samsung,clkreq-on; /* needed for UART mode */ #address-cells = <1>; #size-cells = <1>; diff --git a/include/dt-bindings/soc/samsung,exynos-usi.h b/include/dt-bindings/soc/samsung,exynos-usi.h index a01af169d249..b46de214dd09 100644 --- a/include/dt-bindings/soc/samsung,exynos-usi.h +++ b/include/dt-bindings/soc/samsung,exynos-usi.h @@ -9,9 +9,18 @@ #ifndef __DT_BINDINGS_SAMSUNG_EXYNOS_USI_H #define __DT_BINDINGS_SAMSUNG_EXYNOS_USI_H -#define USI_V2_NONE 0 -#define USI_V2_UART 1 -#define USI_V2_SPI 2 -#define USI_V2_I2C 3 +#define USI_MODE_NONE 0 +#define USI_MODE_UART 1 +#define USI_MODE_SPI 2 +#define USI_MODE_I2C 3 +#define USI_MODE_I2C1 4 +#define USI_MODE_I2C0_1 5 +#define USI_MODE_UART_I2C1 6 + +/* Deprecated */ +#define USI_V2_NONE USI_MODE_NONE +#define USI_V2_UART USI_MODE_UART +#define USI_V2_SPI USI_MODE_SPI +#define USI_V2_I2C USI_MODE_I2C #endif /* __DT_BINDINGS_SAMSUNG_EXYNOS_USI_H */ From c22814789cd6dad3eacd229caeec547d56f8587b Mon Sep 17 00:00:00 2001 From: Igor Belwon Date: Sat, 4 Jan 2025 21:54:17 +0100 Subject: [PATCH 08/25] arm64: dts: exynos990: Add CMU_PERIS and MCT nodes CMU_PERIS is a new clock controller that clocks the MCT. The MCT has 9 timers (1x count-up global timer, 8x count-down CPU local). The global timer generates 4 interrupts, and each local timer generates one interrupt. So, in total 12 interrupts. Signed-off-by: Igor Belwon Link: https://lore.kernel.org/r/20250104-cmu-nodes-v1-2-ae8af253bc25@mentallysanemainliners.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/exynos990.dtsi | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynos990.dtsi b/arch/arm64/boot/dts/exynos/exynos990.dtsi index 9d017dbed952..0e18711cbdc9 100644 --- a/arch/arm64/boot/dts/exynos/exynos990.dtsi +++ b/arch/arm64/boot/dts/exynos/exynos990.dtsi @@ -181,6 +181,36 @@ chipid@10000000 { reg = <0x10000000 0x100>; }; + cmu_peris: clock-controller@10020000 { + compatible = "samsung,exynos990-cmu-peris"; + reg = <0x10020000 0x8000>; + #clock-cells = <1>; + + clocks = <&oscclk>, + <&cmu_top CLK_DOUT_CMU_PERIS_BUS>; + clock-names = "oscclk", "bus"; + }; + + timer@10040000 { + compatible = "samsung,exynos990-mct", + "samsung,exynos4210-mct"; + reg = <0x10040000 0x800>; + clocks = <&oscclk>, <&cmu_peris CLK_GOUT_PERIS_MCT_PCLK>; + clock-names = "fin_pll", "mct"; + interrupts = , + , + , + , + , + , + , + , + , + , + , + ; + }; + gic: interrupt-controller@10101000 { compatible = "arm,gic-400"; reg = <0x10101000 0x1000>, From 282cbd4360a553078245de623d26812e1364ba46 Mon Sep 17 00:00:00 2001 From: Igor Belwon Date: Sun, 5 Jan 2025 12:16:03 +0100 Subject: [PATCH 09/25] arm64: dts: exynos990: Rename and sort PMU nodes These nodes were sorted by name, but it's nice to have the same class of devices together. As such, drop the pmu suffix and add "pmu" as a prefix. This keeps consistency between other Exynos SoCs too. Signed-off-by: Igor Belwon Link: https://lore.kernel.org/r/20250105-pmu-sorting-v1-1-b55519eaff2e@mentallysanemainliners.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/exynos990.dtsi | 62 +++++++++++------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/arch/arm64/boot/dts/exynos/exynos990.dtsi b/arch/arm64/boot/dts/exynos/exynos990.dtsi index 0e18711cbdc9..dd7f99f51a75 100644 --- a/arch/arm64/boot/dts/exynos/exynos990.dtsi +++ b/arch/arm64/boot/dts/exynos/exynos990.dtsi @@ -25,37 +25,6 @@ aliases { pinctrl6 = &pinctrl_vts; }; - arm-a55-pmu { - compatible = "arm,cortex-a55-pmu"; - interrupts = , - , - , - ; - - interrupt-affinity = <&cpu0>, - <&cpu1>, - <&cpu2>, - <&cpu3>; - }; - - arm-a76-pmu { - compatible = "arm,cortex-a76-pmu"; - interrupts = , - ; - - interrupt-affinity = <&cpu4>, - <&cpu5>; - }; - - mongoose-m5-pmu { - compatible = "samsung,mongoose-pmu"; - interrupts = , - ; - - interrupt-affinity = <&cpu6>, - <&cpu7>; - }; - cpus { #address-cells = <1>; #size-cells = <0>; @@ -163,6 +132,37 @@ oscclk: clock-osc { clock-output-names = "oscclk"; }; + pmu-a55 { + compatible = "arm,cortex-a55-pmu"; + interrupts = , + , + , + ; + + interrupt-affinity = <&cpu0>, + <&cpu1>, + <&cpu2>, + <&cpu3>; + }; + + pmu-a76 { + compatible = "arm,cortex-a76-pmu"; + interrupts = , + ; + + interrupt-affinity = <&cpu4>, + <&cpu5>; + }; + + pmu-mongoose-m5 { + compatible = "samsung,mongoose-pmu"; + interrupts = , + ; + + interrupt-affinity = <&cpu6>, + <&cpu7>; + }; + psci { compatible = "arm,psci-0.2"; method = "hvc"; From d6f978c874513eaa9952f981b71eb67208f35c09 Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Sun, 5 Jan 2025 18:13:40 +0200 Subject: [PATCH 10/25] arm64: dts: exynos8895: add syscon nodes for peric0/1 and fsys0/1 Add syscon nodes for peric0/1, typically used for USI, and fsys0/1, typically used for PCI. Signed-off-by: Ivaylo Ivanov Link: https://lore.kernel.org/r/20250105161344.420749-3-ivo.ivanov.ivanov1@gmail.com Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/exynos8895.dtsi | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynos8895.dtsi b/arch/arm64/boot/dts/exynos/exynos8895.dtsi index 36657abfc615..e5fb171376bb 100644 --- a/arch/arm64/boot/dts/exynos/exynos8895.dtsi +++ b/arch/arm64/boot/dts/exynos/exynos8895.dtsi @@ -228,6 +228,12 @@ cmu_peric0: clock-controller@10400000 { "usi1", "usi2", "usi3"; }; + syscon_peric0: syscon@10420000 { + compatible = "samsung,exynos8895-peric0-sysreg", "syscon"; + reg = <0x10420000 0x2000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_SYSREG_PERIC0_PCLK>; + }; + serial_0: serial@10430000 { compatible = "samsung,exynos8895-uart"; reg = <0x10430000 0x100>; @@ -273,6 +279,12 @@ cmu_peric1: clock-controller@10800000 { "usi10", "usi11", "usi12", "usi13"; }; + syscon_peric1: syscon@10820000 { + compatible = "samsung,exynos8895-peric1-sysreg", "syscon"; + reg = <0x10820000 0x2000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_SYSREG_PERIC1_PCLK>; + }; + serial_1: serial@10830000 { compatible = "samsung,exynos8895-uart"; reg = <0x10830000 0x100>; @@ -380,6 +392,12 @@ cmu_fsys0: clock-controller@11000000 { "ufs", "usbdrd30"; }; + syscon_fsys0: syscon@11020000 { + compatible = "samsung,exynos8895-fsys0-sysreg", "syscon"; + reg = <0x11020000 0x2000>; + clocks = <&cmu_fsys0 CLK_GOUT_FSYS0_SYSREG_FSYS0_PCLK>; + }; + pinctrl_fsys0: pinctrl@11050000 { compatible = "samsung,exynos8895-pinctrl"; reg = <0x11050000 0x1000>; @@ -398,6 +416,12 @@ cmu_fsys1: clock-controller@11400000 { clock-names = "oscclk", "bus", "pcie", "ufs", "mmc"; }; + syscon_fsys1: syscon@11420000 { + compatible = "samsung,exynos8895-fsys1-sysreg", "syscon"; + reg = <0x11420000 0x2000>; + clocks = <&cmu_fsys1 CLK_GOUT_FSYS1_SYSREG_FSYS1_PCLK>; + }; + pinctrl_fsys1: pinctrl@11430000 { compatible = "samsung,exynos8895-pinctrl"; reg = <0x11430000 0x1000>; From fb047ec63618c98b51458f5ba894a81b81b9daae Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Sun, 5 Jan 2025 18:13:41 +0200 Subject: [PATCH 11/25] arm64: dts: exynos8895: define all usi nodes Universal Serial Interface (USI) supports three types of serial interface such as UART, SPI and I2C. USIv1 can be configured to enable either one or two of these protocols simultaneously in select combinations. Define all the USI nodes from the PERIC blocks (USI0-13), in all their possible configurations. Signed-off-by: Ivaylo Ivanov Link: https://lore.kernel.org/r/20250105161344.420749-4-ivo.ivanov.ivanov1@gmail.com Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/exynos8895.dtsi | 868 +++++++++++++++++++++ 1 file changed, 868 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynos8895.dtsi b/arch/arm64/boot/dts/exynos/exynos8895.dtsi index e5fb171376bb..926780a92d48 100644 --- a/arch/arm64/boot/dts/exynos/exynos8895.dtsi +++ b/arch/arm64/boot/dts/exynos/exynos8895.dtsi @@ -247,6 +247,254 @@ serial_0: serial@10430000 { status = "disabled"; }; + usi0: usi@10440000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10440000 0x11000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric0 0x1000>; + status = "disabled"; + + hsi2c_5: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c5_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_2: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart2_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_2: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi2_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_6: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI00_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c6_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi1: usi@10460000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10460000 0x11000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric0 0x1004>; + status = "disabled"; + + hsi2c_7: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c5_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_3: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart3_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_3: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi3_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_8: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI01_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c8_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi2: usi@10480000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10480000 0x11000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric0 0x1008>; + status = "disabled"; + + hsi2c_9: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c9_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_4: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart4_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_4: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi4_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_10: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI02_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c10_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi3: usi@104a0000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x104a0000 0x11000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric0 0x100c>; + status = "disabled"; + + hsi2c_11: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c11_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_5: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart5_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_5: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_PCLK>, + <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi5_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_12: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric0 CLK_GOUT_PERIC0_USI03_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c12_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + pinctrl_peric0: pinctrl@104d0000 { compatible = "samsung,exynos8895-pinctrl"; reg = <0x104d0000 0x1000>; @@ -298,6 +546,626 @@ serial_1: serial@10830000 { status = "disabled"; }; + usi4: usi@10840000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10840000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x1008>; + status = "disabled"; + + hsi2c_13: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c13_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_6: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart6_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_6: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi6_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_14: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI04_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c14_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi5: usi@10860000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10860000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x100c>; + status = "disabled"; + + hsi2c_15: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c15_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_7: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart7_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_7: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi7_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_16: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI05_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c16_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi6: usi@10880000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10880000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x1010>; + status = "disabled"; + + hsi2c_17: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c17_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_8: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart8_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_8: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi8_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_18: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI06_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c18_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi7: usi@108a0000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x108a0000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x1014>; + status = "disabled"; + + hsi2c_19: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c19_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_9: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart9_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_9: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi9_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_20: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI07_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c20_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi8: usi@108c0000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x108c0000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x1018>; + status = "disabled"; + + hsi2c_21: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c21_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_10: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart10_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_10: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0x0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi10_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_22: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI08_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c22_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi9: usi@108e0000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x108e0000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x101c>; + status = "disabled"; + + hsi2c_23: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c23_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_11: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart11_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_11: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi11_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_24: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI09_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c24_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi10: usi@10900000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10900000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x1020>; + status = "disabled"; + + hsi2c_25: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c25_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_12: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart12_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_12: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi12_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_26: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI10_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c26_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi11: usi@10920000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10920000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x1024>; + status = "disabled"; + + hsi2c_27: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c27_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_13: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart13_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_13: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi13_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_28: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI11_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c28_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi12: usi@10940000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10940000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x1028>; + status = "disabled"; + + hsi2c_29: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c29_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_14: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart14_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_14: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi14_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_30: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI12_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c30_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + + usi13: usi@10960000 { + compatible = "samsung,exynos8895-usi"; + ranges = <0x0 0x10960000 0x11000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_SCLK_USI>; + clock-names = "pclk", "ipclk"; + #address-cells = <1>; + #size-cells = <1>; + samsung,sysreg = <&syscon_peric1 0x102c>; + status = "disabled"; + + hsi2c_31: i2c@0 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x0 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c31_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + + serial_15: serial@0 { + compatible = "samsung,exynos8895-uart"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_SCLK_USI>; + clock-names = "uart", "clk_uart_baud0"; + interrupts = ; + pinctrl-0 = <&uart15_bus>; + pinctrl-names = "default"; + samsung,uart-fifosize = <64>; + status = "disabled"; + }; + + spi_15: spi@0 { + compatible = "samsung,exynos8895-spi", + "samsung,exynos850-spi"; + reg = <0 0x100>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_PCLK>, + <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_SCLK_USI>; + clock-names = "spi", "spi_busclk0"; + interrupts = ; + pinctrl-0 = <&spi15_bus>; + pinctrl-names = "default"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + + hsi2c_32: i2c@10000 { + compatible = "samsung,exynos8895-hsi2c"; + reg = <0x10000 0x1000>; + clocks = <&cmu_peric1 CLK_GOUT_PERIC1_USI13_I_PCLK>; + clock-names = "hsi2c"; + interrupts = ; + pinctrl-0 = <&hsi2c32_bus>; + pinctrl-names = "default"; + status = "disabled"; + }; + }; + pinctrl_peric1: pinctrl@10980000 { compatible = "samsung,exynos8895-pinctrl"; reg = <0x10980000 0x1000>; From 1d73bb1ed1c1afb4322e20b63e98ebd154c2614d Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Sun, 5 Jan 2025 18:13:42 +0200 Subject: [PATCH 12/25] arm64: dts: exynos8895: add a node for mmc Add an MMC node in order to allow devices with that SoC to make use of it. It's typically used as a secondary storage option for SD cards. In the vendor kernels, it's labelled as mmc_2, but since there don't seem to be any other blocks, treat it as the only MMC. Signed-off-by: Ivaylo Ivanov Link: https://lore.kernel.org/r/20250105161344.420749-5-ivo.ivanov.ivanov1@gmail.com Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/exynos8895.dtsi | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynos8895.dtsi b/arch/arm64/boot/dts/exynos/exynos8895.dtsi index 926780a92d48..1f85e1c58f00 100644 --- a/arch/arm64/boot/dts/exynos/exynos8895.dtsi +++ b/arch/arm64/boot/dts/exynos/exynos8895.dtsi @@ -1296,6 +1296,22 @@ pinctrl_fsys1: pinctrl@11430000 { interrupts = ; }; + mmc: mmc@11500000 { + compatible = "samsung,exynos8895-dw-mshc-smu", + "samsung,exynos7-dw-mshc-smu"; + reg = <0x11500000 0x2000>; + assigned-clocks = <&cmu_top CLK_MOUT_CMU_FSYS1_MMC_CARD>; + assigned-clock-parents = <&cmu_top CLK_FOUT_SHARED4_PLL>; + clocks = <&cmu_fsys1 CLK_GOUT_FSYS1_MMC_CARD_I_ACLK>, + <&cmu_fsys1 CLK_GOUT_FSYS1_MMC_CARD_SDCLKIN>; + clock-names = "biu", "ciu"; + fifo-depth = <64>; + interrupts = ; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + pinctrl_abox: pinctrl@13e60000 { compatible = "samsung,exynos8895-pinctrl"; reg = <0x13e60000 0x1000>; From 2e7281e60a6b592c193903034c40fc57458fe874 Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Sun, 5 Jan 2025 18:13:43 +0200 Subject: [PATCH 13/25] arm64: dts: exynos8895-dreamlte: enable support for microSD storage Enable MMC for the Samsung Galaxy S8, used as external microSD card storage. Since the main PMIC is currently not supported, assume the required regulators are enabled by the previous bootloader. Signed-off-by: Ivaylo Ivanov Link: https://lore.kernel.org/r/20250105161344.420749-6-ivo.ivanov.ivanov1@gmail.com Signed-off-by: Krzysztof Kozlowski --- .../boot/dts/exynos/exynos8895-dreamlte.dts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts b/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts index 3a376ab2bb9e..6c4f8d4a9cc4 100644 --- a/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts +++ b/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts @@ -16,6 +16,10 @@ / { compatible = "samsung,dreamlte", "samsung,exynos8895"; chassis-type = "handset"; + aliases { + mmc0 = &mmc; + }; + chosen { #address-cells = <2>; #size-cells = <1>; @@ -95,6 +99,27 @@ &oscclk { clock-frequency = <26000000>; }; +&mmc { + pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus1 &sd2_bus4 &sd2_cd>; + pinctrl-names = "default"; + + bus-width = <4>; + card-detect-delay = <200>; + cd-gpios = <&gpa1 5 GPIO_ACTIVE_LOW>; + clock-frequency = <800000000>; + disable-wp; + sd-uhs-sdr50; + sd-uhs-sdr104; + + /* TODO: Add regulators once PMIC is implemented */ + + samsung,dw-mshc-ciu-div = <3>; + samsung,dw-mshc-ddr-timing = <1 2>; + samsung,dw-mshc-sdr-timing = <0 3>; + + status = "okay"; +}; + &pinctrl_alive { key_power: key-power-pins { samsung,pins = "gpa2-4"; @@ -123,4 +148,11 @@ key_wink: key-wink-pins { samsung,pin-pud = ; samsung,pin-drv = ; }; + + sd2_cd: sd2-cd-pins { + samsung,pins = "gpa1-5"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; }; From 0cbf9ca0a8a152ff1cb334f644ac466297be6c91 Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Sun, 5 Jan 2025 18:13:44 +0200 Subject: [PATCH 14/25] arm64: dts: exynos8895-dreamlte: enable support for the touchscreen The Samsung Galaxy S8 uses a Samsung s6sy761 touchscreen over hsi2c23. Add a node for it in order to allow using the touchscreen as long as the previous bootloader has enabled the required regulators because there's no support for PMIC yet. Signed-off-by: Ivaylo Ivanov Link: https://lore.kernel.org/r/20250105161344.420749-7-ivo.ivanov.ivanov1@gmail.com Signed-off-by: Krzysztof Kozlowski --- .../boot/dts/exynos/exynos8895-dreamlte.dts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts b/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts index 6c4f8d4a9cc4..61e064af3337 100644 --- a/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts +++ b/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dts @@ -10,6 +10,7 @@ #include #include #include +#include / { model = "Samsung Galaxy S8 (SM-G950F)"; @@ -93,6 +94,33 @@ wink-key { wakeup-source; }; }; + + /* TODO: Remove once PMIC is implemented */ + reg_placeholder: regulator-0 { + compatible = "regulator-fixed"; + regulator-name = "reg-placeholder"; + }; +}; + +&hsi2c_23 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + touchscreen@48 { + compatible = "samsung,s6sy761"; + reg = <0x48>; + + /* TODO: Update once PMIC is implemented */ + avdd-supply = <®_placeholder>; + vdd-supply = <®_placeholder>; + + interrupt-parent = <&gpa1>; + interrupts = <0 IRQ_TYPE_LEVEL_LOW>; + + pinctrl-0 = <&ts_int>; + pinctrl-names = "default"; + }; }; &oscclk { @@ -155,4 +183,16 @@ sd2_cd: sd2-cd-pins { samsung,pin-pud = ; samsung,pin-drv = ; }; + + ts_int: ts-int-pins { + samsung,pins = "gpa1-0"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; +}; + +&usi9 { + samsung,mode = ; + status = "okay"; }; From ee24a95b891a215b5fbd2f6814754301070653c0 Mon Sep 17 00:00:00 2001 From: Krzysztof Kozlowski Date: Sun, 22 Dec 2024 15:52:57 +0100 Subject: [PATCH 15/25] arm64: dts: exynos8895: Rename PMU nodes to fixup sorting Nodes should be sorted by name but it is also nice to have same class of devices together, so rename both PMU nodes (A53 and M2) to use "pmu" prefix, instead of suffix. Link: https://lore.kernel.org/r/20241222145257.31451-1-krzysztof.kozlowski@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/exynos8895.dtsi | 48 +++++++++++----------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/arch/arm64/boot/dts/exynos/exynos8895.dtsi b/arch/arm64/boot/dts/exynos/exynos8895.dtsi index 1f85e1c58f00..f92d2a8a20a2 100644 --- a/arch/arm64/boot/dts/exynos/exynos8895.dtsi +++ b/arch/arm64/boot/dts/exynos/exynos8895.dtsi @@ -26,30 +26,6 @@ aliases { pinctrl7 = &pinctrl_peric1; }; - arm-a53-pmu { - compatible = "arm,cortex-a53-pmu"; - interrupts = , - , - , - ; - interrupt-affinity = <&cpu0>, - <&cpu1>, - <&cpu2>, - <&cpu3>; - }; - - mongoose-m2-pmu { - compatible = "samsung,mongoose-pmu"; - interrupts = , - , - , - ; - interrupt-affinity = <&cpu4>, - <&cpu5>, - <&cpu6>, - <&cpu7>; - }; - cpus { #address-cells = <1>; #size-cells = <0>; @@ -149,6 +125,30 @@ oscclk: osc-clock { clock-output-names = "oscclk"; }; + pmu-a53 { + compatible = "arm,cortex-a53-pmu"; + interrupts = , + , + , + ; + interrupt-affinity = <&cpu0>, + <&cpu1>, + <&cpu2>, + <&cpu3>; + }; + + pmu-mongoose-m2 { + compatible = "samsung,mongoose-pmu"; + interrupts = , + , + , + ; + interrupt-affinity = <&cpu4>, + <&cpu5>, + <&cpu6>, + <&cpu7>; + }; + psci { compatible = "arm,psci"; method = "smc"; From edf5ce245323d104724a681603c78a154a9fb078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Draszik?= Date: Mon, 10 Feb 2025 12:52:02 +0000 Subject: [PATCH 16/25] arm64: dts: exynos: gs101: drop explicit regmap from reboot nodes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The regmap property for syscon-poweroff and syscon-reboot is unneeded here because the poweroff and reboot nodes are children of syscon already. It also is deprecated. We can just drop it to simplify the DT. Reviewed-by: Peter Griffin Signed-off-by: André Draszik Link: https://lore.kernel.org/r/20250210-gs101-renppt-dts-v2-1-fb33fda6fc4b@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 2 -- 1 file changed, 2 deletions(-) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index 813f96089578..e78dcd506a5c 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -1400,14 +1400,12 @@ pmu_system_controller: system-controller@17460000 { poweroff: syscon-poweroff { compatible = "syscon-poweroff"; - regmap = <&pmu_system_controller>; offset = <0x3e9c>; /* PAD_CTRL_PWR_HOLD */ mask = <0x100>; /* reset value */ }; reboot: syscon-reboot { compatible = "syscon-reboot"; - regmap = <&pmu_system_controller>; offset = <0x3a00>; /* SYSTEM_CONFIGURATION */ mask = <0x2>; /* SWRESET_SYSTEM */ value = <0x2>; /* reset value */ From 6572a93ab35eb5a34c65d561bd00e32f3a4b7ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Draszik?= Date: Mon, 10 Feb 2025 12:52:03 +0000 Subject: [PATCH 17/25] arm64: dts: exynos: gs101: align poweroff writes with downstream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For power off, downstream only clears bit 8 and leaves all other bits untouched, whereas this here ends up setting bit 8 and clearing all others, due to how sysconf-poweroff parses the DT. I noticed this discrepancy while debugging some reboot related differences between up- and downstream and it's useful to align the behaviour here. Note: for reboot downstream seems to be incorrectly writing 0x00000002 and not just setting bit 1 (which is the only R/W bit in this register), so we keep that one as-is here. Signed-off-by: André Draszik Link: https://lore.kernel.org/r/20250210-gs101-renppt-dts-v2-2-fb33fda6fc4b@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index e78dcd506a5c..86741994bb7c 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -1401,7 +1401,8 @@ pmu_system_controller: system-controller@17460000 { poweroff: syscon-poweroff { compatible = "syscon-poweroff"; offset = <0x3e9c>; /* PAD_CTRL_PWR_HOLD */ - mask = <0x100>; /* reset value */ + mask = <0x00000100>; + value = <0x0>; }; reboot: syscon-reboot { From ae32b65c93590b0d63f61fa628d9d0846e53587b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Draszik?= Date: Mon, 10 Feb 2025 12:52:04 +0000 Subject: [PATCH 18/25] arm64: dts: exynos: gs101: add reboot-mode support (SYSIP_DAT0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit syscon-reboot-mode can be used to indicate the reboot mode for the bootloader. While not sufficient for all boot modes, the boot loader does use SYSIP_DAT0 (PMU + 0x0810) to determine some of the actions it should take. This change helps it deciding what to do in those cases. For complete support, we'll also have to write the boot mode to an NVMEM storage location, but we have no upstream driver for that yet. Nevertheless, this patch is a step towards full support for the boot mode. Note1: Android also uses 'shutdown,thermal' and shutdown,thermal,battery', but that can not be described in DT as ',' is used to denote vendor prefixes. I've left them out from here for that reason. Note2: downstream / bootloader recognizes one more mode: 'dm-verity device corrupted' with value 0x50, but we can not describe that in DT using a property name due to the space, so it's been left out from here as well. This string appears to come from drivers/md/dm-verity-target.c and should probably be changed there in a follow-up patch, so that it can be used in reboot-mode nodes like this one here. Reviewed-by: Peter Griffin Signed-off-by: André Draszik Link: https://lore.kernel.org/r/20250210-gs101-renppt-dts-v2-3-fb33fda6fc4b@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index 86741994bb7c..d60e6a8e8723 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -1411,6 +1411,19 @@ reboot: syscon-reboot { mask = <0x2>; /* SWRESET_SYSTEM */ value = <0x2>; /* reset value */ }; + + reboot-mode { + compatible = "syscon-reboot-mode"; + offset = <0x0810>; /* EXYNOS_PMU_SYSIP_DAT0 */ + mode-bootloader = <0xfc>; + mode-charge = <0x0a>; + mode-fastboot = <0xfa>; + mode-reboot-ab-update = <0x52>; + mode-recovery = <0xff>; + mode-rescue = <0xf9>; + mode-shutdown-thermal = <0x51>; + mode-shutdown-thermal-battery = <0x51>; + }; }; pinctrl_gpio_alive: pinctrl@174d0000 { From 48e7821b2690428a40d16567b2fd3784591f36b3 Mon Sep 17 00:00:00 2001 From: Tudor Ambarus Date: Fri, 7 Feb 2025 15:56:43 +0000 Subject: [PATCH 19/25] arm64: dts: exynos: gs101: add SRAM node SRAM is used by the ACPM protocol to retrieve the ACPM channels information, which includes the TX/RX rings among other channel configuration data. Add the SRAM node. Signed-off-by: Tudor Ambarus Link: https://lore.kernel.org/r/20250207-gs101-acpm-dt-v4-1-230ba8663a2d@linaro.org [krzysztof: correct alphabetical node placement] Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index d60e6a8e8723..ef21358e7bcf 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -1479,6 +1479,14 @@ cmu_top: clock-controller@1e080000 { }; }; + apm_sram: sram@2039000 { + compatible = "mmio-sram"; + reg = <0x0 0x2039000 0x40000>; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x0 0x0 0x2039000 0x40000>; + }; + timer { compatible = "arm,armv8-timer"; interrupts = From 23159ccf60026f9c510bcc422f75b2a74af79f20 Mon Sep 17 00:00:00 2001 From: Tudor Ambarus Date: Fri, 7 Feb 2025 15:56:44 +0000 Subject: [PATCH 20/25] arm64: dts: exynos: gs101: add AP to APM mailbox node GS101 has 14 mailbox controllers. Add the AP to APM mailbox node. Mailbox controllers have a shared register that can be used for passing the mailbox messages. The AP to APM mailbox controller is used just as a doorbell mechanism. It raises interrupt to the firmware after the mailbox message has been written to SRAM where the TX/RX rings are defined. Signed-off-by: Tudor Ambarus Link: https://lore.kernel.org/r/20250207-gs101-acpm-dt-v4-2-230ba8663a2d@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index ef21358e7bcf..09252c4e6da4 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -1452,6 +1452,15 @@ wakeup-interrupt-controller { }; }; + ap2apm_mailbox: mailbox@17610000 { + compatible = "google,gs101-mbox"; + reg = <0x17610000 0x1000>; + clocks = <&cmu_apm CLK_GOUT_APM_MAILBOX_APM_AP_PCLK>; + clock-names = "pclk"; + interrupts = ; + #mbox-cells = <0>; + }; + pinctrl_gsactrl: pinctrl@17940000 { compatible = "google,gs101-pinctrl"; reg = <0x17940000 0x00001000>; From f64fdd3c592dfb45d9c2be4b2506230467ebd27a Mon Sep 17 00:00:00 2001 From: Tudor Ambarus Date: Fri, 7 Feb 2025 15:56:45 +0000 Subject: [PATCH 21/25] arm64: dts: exynos: gs101: add ACPM protocol node Add the ACPM protocol node. ACPM protocol provides interface for all the client drivers making use of the features offered by the Active Power Management (APM) module. Signed-off-by: Tudor Ambarus Link: https://lore.kernel.org/r/20250207-gs101-acpm-dt-v4-3-230ba8663a2d@linaro.org [krzysztof: correct alphabetical node placement] Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index 09252c4e6da4..d2db0edffaf4 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -196,6 +196,14 @@ ext_200m: clock-2 { clock-output-names = "ext-200m"; }; + firmware { + acpm_ipc: power-management { + compatible = "google,gs101-acpm-ipc"; + mboxes = <&ap2apm_mailbox>; + shmem = <&apm_sram>; + }; + }; + pmu-0 { compatible = "arm,cortex-a55-pmu"; interrupts = ; From bbfc70ca7fd26ee3e7eb16872cf7b1f1be5907e3 Mon Sep 17 00:00:00 2001 From: Devang Tailor Date: Wed, 8 Jan 2025 11:20:12 +0530 Subject: [PATCH 22/25] arm64: dts: exynosautov920: add CPU cache information Add CPU caches information to its dt nodes so that the same is available to userspace via sysfs. This SoC has 64/64 KB I/D cache and 256KB of L2 cache for each core, 2 MB of shared L3 cache for each quad cpu cluster and 1 MB of shared L3 cache for the dual cpu cluster. Signed-off-by: Devang Tailor Reviewed-by: Alim Akhtar Link: https://lore.kernel.org/r/20250108055012.1938530-1-dev.tailor@samsung.com Signed-off-by: Krzysztof Kozlowski --- .../arm64/boot/dts/exynos/exynosautov920.dtsi | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynosautov920.dtsi b/arch/arm64/boot/dts/exynos/exynosautov920.dtsi index eb446cdc4ab6..a3fd503c1b21 100644 --- a/arch/arm64/boot/dts/exynos/exynosautov920.dtsi +++ b/arch/arm64/boot/dts/exynos/exynosautov920.dtsi @@ -89,6 +89,13 @@ cpu0: cpu@0 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x0>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl0>; }; cpu1: cpu@100 { @@ -96,6 +103,13 @@ cpu1: cpu@100 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x100>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl0>; }; cpu2: cpu@200 { @@ -103,6 +117,13 @@ cpu2: cpu@200 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x200>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl0>; }; cpu3: cpu@300 { @@ -110,6 +131,13 @@ cpu3: cpu@300 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x300>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl0>; }; cpu4: cpu@10000 { @@ -117,6 +145,13 @@ cpu4: cpu@10000 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x10000>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl1>; }; cpu5: cpu@10100 { @@ -124,6 +159,13 @@ cpu5: cpu@10100 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x10100>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl1>; }; cpu6: cpu@10200 { @@ -131,6 +173,13 @@ cpu6: cpu@10200 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x10200>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl1>; }; cpu7: cpu@10300 { @@ -138,6 +187,13 @@ cpu7: cpu@10300 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x10300>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl1>; }; cpu8: cpu@20000 { @@ -145,6 +201,13 @@ cpu8: cpu@20000 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x20000>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl2>; }; cpu9: cpu@20100 { @@ -152,6 +215,70 @@ cpu9: cpu@20100 { compatible = "arm,cortex-a78ae"; reg = <0x0 0x20100>; enable-method = "psci"; + i-cache-size = <0x10000>; + i-cache-line-size = <64>; + i-cache-sets = <256>; + d-cache-size = <0x10000>; + d-cache-line-size = <64>; + d-cache-sets = <256>; + next-level-cache = <&l2_cache_cl2>; + }; + + l2_cache_cl0: l2-cache0 { + compatible = "cache"; + cache-level = <2>; + cache-unified; + cache-size = <0x40000>; + cache-line-size = <64>; + cache-sets = <512>; + next-level-cache = <&l3_cache_cl0>; + }; + + l2_cache_cl1: l2-cache1 { + compatible = "cache"; + cache-level = <2>; + cache-unified; + cache-size = <0x40000>; + cache-line-size = <64>; + cache-sets = <512>; + next-level-cache = <&l3_cache_cl1>; + }; + + l2_cache_cl2: l2-cache2 { + compatible = "cache"; + cache-level = <2>; + cache-unified; + cache-size = <0x40000>; + cache-line-size = <64>; + cache-sets = <512>; + next-level-cache = <&l3_cache_cl2>; + }; + + l3_cache_cl0: l3-cache0 { + compatible = "cache"; + cache-level = <3>; + cache-unified; + cache-size = <0x200000>;/* 2MB L3 cache for cpu cluster-0 */ + cache-line-size = <64>; + cache-sets = <2048>; + }; + + l3_cache_cl1: l3-cache1 { + compatible = "cache"; + cache-level = <3>; + cache-unified; + cache-size = <0x200000>;/* 2MB L3 cache for cpu cluster-1 */ + cache-line-size = <64>; + cache-sets = <2048>; + }; + + l3_cache_cl2: l3-cache2 { + compatible = "cache"; + cache-level = <3>; + cache-unified; + cache-size = <0x100000>;/* 1MB L3 cache for cpu cluster-2 */ + cache-line-size = <64>; + cache-sets = <1365>; }; }; From 5893f538e331609fbea244ed14732291edd6ab22 Mon Sep 17 00:00:00 2001 From: Sowon Na Date: Wed, 19 Feb 2025 16:37:28 +0900 Subject: [PATCH 23/25] arm64: dts: exynosautov920: add ufs phy for ExynosAutov920 SoC Add UFS Phy for ExynosAutov920 Like ExynosAutov9, this also uses fixed-rate clock nodes until clock driver has been supported. The clock nodes are initialized on bootloader stage thus we don't need to control them so far. Changes from v4: - Place entry in correct order instead of appending to the end. Signed-off-by: Sowon Na Reviewed-by: Alim Akhtar Link: https://lore.kernel.org/r/20250219073731.853120-1-sowon.na@samsung.com Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/exynosautov920.dtsi | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/exynosautov920.dtsi b/arch/arm64/boot/dts/exynos/exynosautov920.dtsi index a3fd503c1b21..fc6ac531d597 100644 --- a/arch/arm64/boot/dts/exynos/exynosautov920.dtsi +++ b/arch/arm64/boot/dts/exynos/exynosautov920.dtsi @@ -567,6 +567,17 @@ pinctrl_hsi2ufs: pinctrl@16d20000 { interrupts = ; }; + ufs_0_phy: phy@16e04000 { + compatible = "samsung,exynosautov920-ufs-phy"; + reg = <0x16e04000 0x4000>; + reg-names = "phy-pma"; + clocks = <&xtcxo>; + clock-names = "ref_clk"; + samsung,pmu-syscon = <&pmu_system_controller>; + #phy-cells = <0>; + status = "disabled"; + }; + pinctrl_aud: pinctrl@1a460000 { compatible = "samsung,exynosautov920-pinctrl"; reg = <0x1a460000 0x10000>; From 73fd2bb607387a77b2dde43a2c47db2b71c65a96 Mon Sep 17 00:00:00 2001 From: Krzysztof Kozlowski Date: Wed, 19 Feb 2025 09:57:25 +0100 Subject: [PATCH 24/25] arm64: dts: exynos: gs101: Change labels to lower-case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DTS coding style expects labels to be lowercase. No functional impact. Verified with comparing decompiled DTB (dtx_diff and fdtdump+diff). Reviewed-by: André Draszik Reviewed-by: Peter Griffin Reviewed-by: Alim Akhtar Link: https://lore.kernel.org/r/20250219085726.70824-1-krzysztof.kozlowski@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/exynos/google/gs101.dtsi | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi index d2db0edffaf4..3de3a758f113 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi @@ -73,7 +73,7 @@ cpu0: cpu@0 { compatible = "arm,cortex-a55"; reg = <0x0000>; enable-method = "psci"; - cpu-idle-states = <&ANANKE_CPU_SLEEP>; + cpu-idle-states = <&ananke_cpu_sleep>; capacity-dmips-mhz = <250>; dynamic-power-coefficient = <70>; }; @@ -83,7 +83,7 @@ cpu1: cpu@100 { compatible = "arm,cortex-a55"; reg = <0x0100>; enable-method = "psci"; - cpu-idle-states = <&ANANKE_CPU_SLEEP>; + cpu-idle-states = <&ananke_cpu_sleep>; capacity-dmips-mhz = <250>; dynamic-power-coefficient = <70>; }; @@ -93,7 +93,7 @@ cpu2: cpu@200 { compatible = "arm,cortex-a55"; reg = <0x0200>; enable-method = "psci"; - cpu-idle-states = <&ANANKE_CPU_SLEEP>; + cpu-idle-states = <&ananke_cpu_sleep>; capacity-dmips-mhz = <250>; dynamic-power-coefficient = <70>; }; @@ -103,7 +103,7 @@ cpu3: cpu@300 { compatible = "arm,cortex-a55"; reg = <0x0300>; enable-method = "psci"; - cpu-idle-states = <&ANANKE_CPU_SLEEP>; + cpu-idle-states = <&ananke_cpu_sleep>; capacity-dmips-mhz = <250>; dynamic-power-coefficient = <70>; }; @@ -113,7 +113,7 @@ cpu4: cpu@400 { compatible = "arm,cortex-a76"; reg = <0x0400>; enable-method = "psci"; - cpu-idle-states = <&ENYO_CPU_SLEEP>; + cpu-idle-states = <&enyo_cpu_sleep>; capacity-dmips-mhz = <620>; dynamic-power-coefficient = <284>; }; @@ -123,7 +123,7 @@ cpu5: cpu@500 { compatible = "arm,cortex-a76"; reg = <0x0500>; enable-method = "psci"; - cpu-idle-states = <&ENYO_CPU_SLEEP>; + cpu-idle-states = <&enyo_cpu_sleep>; capacity-dmips-mhz = <620>; dynamic-power-coefficient = <284>; }; @@ -133,7 +133,7 @@ cpu6: cpu@600 { compatible = "arm,cortex-x1"; reg = <0x0600>; enable-method = "psci"; - cpu-idle-states = <&HERA_CPU_SLEEP>; + cpu-idle-states = <&hera_cpu_sleep>; capacity-dmips-mhz = <1024>; dynamic-power-coefficient = <650>; }; @@ -143,7 +143,7 @@ cpu7: cpu@700 { compatible = "arm,cortex-x1"; reg = <0x0700>; enable-method = "psci"; - cpu-idle-states = <&HERA_CPU_SLEEP>; + cpu-idle-states = <&hera_cpu_sleep>; capacity-dmips-mhz = <1024>; dynamic-power-coefficient = <650>; }; @@ -151,7 +151,7 @@ cpu7: cpu@700 { idle-states { entry-method = "psci"; - ANANKE_CPU_SLEEP: cpu-ananke-sleep { + ananke_cpu_sleep: cpu-ananke-sleep { idle-state-name = "c2"; compatible = "arm,idle-state"; arm,psci-suspend-param = <0x0010000>; @@ -160,7 +160,7 @@ ANANKE_CPU_SLEEP: cpu-ananke-sleep { min-residency-us = <2000>; }; - ENYO_CPU_SLEEP: cpu-enyo-sleep { + enyo_cpu_sleep: cpu-enyo-sleep { idle-state-name = "c2"; compatible = "arm,idle-state"; arm,psci-suspend-param = <0x0010000>; @@ -169,7 +169,7 @@ ENYO_CPU_SLEEP: cpu-enyo-sleep { min-residency-us = <2500>; }; - HERA_CPU_SLEEP: cpu-hera-sleep { + hera_cpu_sleep: cpu-hera-sleep { idle-state-name = "c2"; compatible = "arm,idle-state"; arm,psci-suspend-param = <0x0010000>; From 056106b030b73c7d53749469bd1cdbc89b4d2daf Mon Sep 17 00:00:00 2001 From: Krzysztof Kozlowski Date: Wed, 19 Feb 2025 09:57:26 +0100 Subject: [PATCH 25/25] arm64: dts: tesla: Change labels to lower-case DTS coding style expects labels to be lowercase. No functional impact. Verified with comparing decompiled DTB (dtx_diff and fdtdump+diff). Reviewed-by: Alim Akhtar Link: https://lore.kernel.org/r/20250219085726.70824-2-krzysztof.kozlowski@linaro.org Signed-off-by: Krzysztof Kozlowski --- arch/arm64/boot/dts/tesla/fsd.dtsi | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/arch/arm64/boot/dts/tesla/fsd.dtsi b/arch/arm64/boot/dts/tesla/fsd.dtsi index 690b4ed9c29b..9951eef9507c 100644 --- a/arch/arm64/boot/dts/tesla/fsd.dtsi +++ b/arch/arm64/boot/dts/tesla/fsd.dtsi @@ -92,7 +92,7 @@ cpucl0_0: cpu@0 { reg = <0x0 0x000>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -108,7 +108,7 @@ cpucl0_1: cpu@1 { reg = <0x0 0x001>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -124,7 +124,7 @@ cpucl0_2: cpu@2 { reg = <0x0 0x002>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -139,7 +139,7 @@ cpucl0_3: cpu@3 { compatible = "arm,cortex-a72"; reg = <0x0 0x003>; enable-method = "psci"; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -156,7 +156,7 @@ cpucl1_0: cpu@100 { reg = <0x0 0x100>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -172,7 +172,7 @@ cpucl1_1: cpu@101 { reg = <0x0 0x101>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -188,7 +188,7 @@ cpucl1_2: cpu@102 { reg = <0x0 0x102>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -204,7 +204,7 @@ cpucl1_3: cpu@103 { reg = <0x0 0x103>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -221,7 +221,7 @@ cpucl2_0: cpu@200 { reg = <0x0 0x200>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -237,7 +237,7 @@ cpucl2_1: cpu@201 { reg = <0x0 0x201>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -253,7 +253,7 @@ cpucl2_2: cpu@202 { reg = <0x0 0x202>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -269,7 +269,7 @@ cpucl2_3: cpu@203 { reg = <0x0 0x203>; enable-method = "psci"; clock-frequency = <2400000000>; - cpu-idle-states = <&CPU_SLEEP>; + cpu-idle-states = <&cpu_sleep>; i-cache-size = <0xc000>; i-cache-line-size = <64>; i-cache-sets = <256>; @@ -291,7 +291,7 @@ cpucl_l2: l2-cache0 { idle-states { entry-method = "psci"; - CPU_SLEEP: cpu-sleep { + cpu_sleep: cpu-sleep { idle-state-name = "c2"; compatible = "arm,idle-state"; local-timer-stop;