Unverified Commit acaa52bc authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'samsung-drivers-6.5' of...

Merge tag 'samsung-drivers-6.5' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux into soc/drivers

Samsung SoC driver changes for v6.5

1. Re-introduce Exynos4212: Exynos PMU driver.
2. Convert S5P/Exynos Multi Format Codec bindings to DT schema.

* tag 'samsung-drivers-6.5' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux:
  dt-bindings: media: s5p-mfc: convert bindings to json-schema
  soc: samsung: exynos-pmu: Re-introduce Exynos4212 support
  dt-bindings: soc: samsung: exynos-pmu: add Exynos4212 compatible

Link: https://lore.kernel.org/r/20230602091501.15178-1-krzysztof.kozlowski@linaro.org


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents c6a51812 538af6e5
Loading
Loading
Loading
Loading
+0 −78
Original line number Diff line number Diff line
* Samsung Multi Format Codec (MFC)

Multi Format Codec (MFC) is the IP present in Samsung SoCs which
supports high resolution decoding and encoding functionalities.
The MFC device driver is a v4l2 driver which can encode/decode
video raw/elementary streams and has support for all popular
video codecs.

Required properties:
  - compatible : value should be either one among the following
	(a) "samsung,mfc-v5" for MFC v5 present in Exynos4 SoCs
	(b) "samsung,mfc-v6" for MFC v6 present in Exynos5 SoCs
	(c) "samsung,exynos3250-mfc", "samsung,mfc-v7" for MFC v7
	     present in Exynos3250 SoC
	(d) "samsung,mfc-v7" for MFC v7 present in Exynos5420 SoC
	(e) "samsung,mfc-v8" for MFC v8 present in Exynos5800 SoC
	(f) "samsung,exynos5433-mfc" for MFC v8 present in Exynos5433 SoC
	(g) "samsung,mfc-v10" for MFC v10 present in Exynos7880 SoC

  - reg : Physical base address of the IP registers and length of memory
	  mapped region.

  - interrupts : MFC interrupt number to the CPU.
  - clocks : from common clock binding: handle to mfc clock.
  - clock-names : from common clock binding: must contain "mfc",
		  corresponding to entry in the clocks property.

Optional properties:
  - power-domains : power-domain property defined with a phandle
			   to respective power domain.
  - memory-region : from reserved memory binding: phandles to two reserved
	memory regions, first is for "left" mfc memory bus interfaces,
	second if for the "right" mfc memory bus, used when no SYSMMU
	support is available; used only by MFC v5 present in Exynos4 SoCs

Obsolete properties:
  - samsung,mfc-r, samsung,mfc-l : support removed, please use memory-region
	property instead


Example:
SoC specific DT entry:

mfc: codec@13400000 {
	compatible = "samsung,mfc-v5";
	reg = <0x13400000 0x10000>;
	interrupts = <0 94 0>;
	power-domains = <&pd_mfc>;
	clocks = <&clock 273>;
	clock-names = "mfc";
};

Reserved memory specific DT entry for given board (see reserved memory binding
for more information):

reserved-memory {
	#address-cells = <1>;
	#size-cells = <1>;
	ranges;

	mfc_left: region@51000000 {
		compatible = "shared-dma-pool";
		no-map;
		reg = <0x51000000 0x800000>;
	};

	mfc_right: region@43000000 {
		compatible = "shared-dma-pool";
		no-map;
		reg = <0x43000000 0x800000>;
	};
};

Board specific DT entry:

codec@13400000 {
	memory-region = <&mfc_left>, <&mfc_right>;
};
+184 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/samsung,s5p-mfc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung Exynos Multi Format Codec (MFC)

maintainers:
  - Marek Szyprowski <m.szyprowski@samsung.com>
  - Aakarsh Jain <aakarsh.jain@samsung.com>

description:
  Multi Format Codec (MFC) is the IP present in Samsung SoCs which
  supports high resolution decoding and encoding functionalities.

properties:
  compatible:
    oneOf:
      - enum:
          - samsung,exynos5433-mfc        # Exynos5433
          - samsung,mfc-v5                # Exynos4
          - samsung,mfc-v6                # Exynos5
          - samsung,mfc-v7                # Exynos5420
          - samsung,mfc-v8                # Exynos5800
          - samsung,mfc-v10               # Exynos7880
      - items:
          - enum:
              - samsung,exynos3250-mfc    # Exynos3250
          - const: samsung,mfc-v7         # Fall back for Exynos3250

  reg:
    maxItems: 1

  clocks:
    minItems: 1
    maxItems: 3

  clock-names:
    minItems: 1
    maxItems: 3

  interrupts:
    maxItems: 1

  iommus:
    minItems: 1
    maxItems: 2

  iommu-names:
    minItems: 1
    maxItems: 2

  power-domains:
    maxItems: 1

  memory-region:
    minItems: 1
    maxItems: 2

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - interrupts

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - samsung,exynos3250-mfc
    then:
      properties:
        clocks:
          maxItems: 2
        clock-names:
          items:
            - const: mfc
            - const: sclk_mfc
        iommus:
          maxItems: 1
        iommus-names: false

  - if:
      properties:
        compatible:
          contains:
            enum:
              - samsung,exynos5433-mfc
    then:
      properties:
        clocks:
          maxItems: 3
        clock-names:
          items:
            - const: pclk
            - const: aclk
            - const: aclk_xiu
        iommus:
          maxItems: 2
        iommus-names:
          items:
            - const: left
            - const: right

  - if:
      properties:
        compatible:
          contains:
            enum:
              - samsung,mfc-v5
    then:
      properties:
        clocks:
          maxItems: 2
        clock-names:
          items:
            - const: mfc
            - const: sclk_mfc
        iommus:
          maxItems: 2
        iommus-names:
          items:
            - const: left
            - const: right

  - if:
      properties:
        compatible:
          contains:
            enum:
              - samsung,mfc-v6
              - samsung,mfc-v8
    then:
      properties:
        clocks:
          maxItems: 1
        clock-names:
          items:
            - const: mfc
        iommus:
          maxItems: 2
        iommus-names:
          items:
            - const: left
            - const: right

  - if:
      properties:
        compatible:
          contains:
            enum:
              - samsung,mfc-v7
    then:
      properties:
        clocks:
          minItems: 1
          maxItems: 2
        iommus:
          minItems: 1
          maxItems: 2

examples:
  - |
    #include <dt-bindings/clock/exynos4.h>
    #include <dt-bindings/clock/exynos-audss-clk.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    codec@13400000 {
        compatible = "samsung,mfc-v5";
        reg = <0x13400000 0x10000>;
        interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
        power-domains = <&pd_mfc>;
        clocks = <&clock CLK_MFC>, <&clock CLK_SCLK_MFC>;
        clock-names = "mfc", "sclk_mfc";
        iommus = <&sysmmu_mfc_l>, <&sysmmu_mfc_r>;
        iommu-names = "left", "right";
    };
+5 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ select:
        enum:
          - samsung,exynos3250-pmu
          - samsung,exynos4210-pmu
          - samsung,exynos4212-pmu
          - samsung,exynos4412-pmu
          - samsung,exynos5250-pmu
          - samsung,exynos5260-pmu
@@ -36,6 +37,7 @@ properties:
          - enum:
              - samsung,exynos3250-pmu
              - samsung,exynos4210-pmu
              - samsung,exynos4212-pmu
              - samsung,exynos4412-pmu
              - samsung,exynos5250-pmu
              - samsung,exynos5260-pmu
@@ -50,6 +52,7 @@ properties:
          - enum:
              - samsung,exynos3250-pmu
              - samsung,exynos4210-pmu
              - samsung,exynos4212-pmu
              - samsung,exynos4412-pmu
              - samsung,exynos5250-pmu
              - samsung,exynos5420-pmu
@@ -125,6 +128,7 @@ allOf:
            enum:
              - samsung,exynos3250-pmu
              - samsung,exynos4210-pmu
              - samsung,exynos4212-pmu
              - samsung,exynos4412-pmu
              - samsung,exynos5250-pmu
              - samsung,exynos5410-pmu
@@ -143,6 +147,7 @@ allOf:
            enum:
              - samsung,exynos3250-pmu
              - samsung,exynos4210-pmu
              - samsung,exynos4212-pmu
              - samsung,exynos4412-pmu
              - samsung,exynos5250-pmu
              - samsung,exynos5420-pmu
+9 −0
Original line number Diff line number Diff line
@@ -57,6 +57,12 @@ void exynos_sys_powerdown_conf(enum sys_powerdown mode)

	if (pmu_data->powerdown_conf_extra)
		pmu_data->powerdown_conf_extra(mode);

	if (pmu_data->pmu_config_extra) {
		for (i = 0; pmu_data->pmu_config_extra[i].offset != PMU_TABLE_END; i++)
			pmu_raw_writel(pmu_data->pmu_config_extra[i].val[mode],
				       pmu_data->pmu_config_extra[i].offset);
	}
}

/*
@@ -79,6 +85,9 @@ static const struct of_device_id exynos_pmu_of_device_ids[] = {
	}, {
		.compatible = "samsung,exynos4210-pmu",
		.data = exynos_pmu_data_arm_ptr(exynos4210_pmu_data),
	}, {
		.compatible = "samsung,exynos4212-pmu",
		.data = exynos_pmu_data_arm_ptr(exynos4212_pmu_data),
	}, {
		.compatible = "samsung,exynos4412-pmu",
		.data = exynos_pmu_data_arm_ptr(exynos4412_pmu_data),
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ struct exynos_pmu_conf {

struct exynos_pmu_data {
	const struct exynos_pmu_conf *pmu_config;
	const struct exynos_pmu_conf *pmu_config_extra;

	void (*pmu_init)(void);
	void (*powerdown_conf)(enum sys_powerdown);
@@ -32,6 +33,7 @@ extern void __iomem *pmu_base_addr;
/* list of all exported SoC specific data */
extern const struct exynos_pmu_data exynos3250_pmu_data;
extern const struct exynos_pmu_data exynos4210_pmu_data;
extern const struct exynos_pmu_data exynos4212_pmu_data;
extern const struct exynos_pmu_data exynos4412_pmu_data;
extern const struct exynos_pmu_data exynos5250_pmu_data;
extern const struct exynos_pmu_data exynos5420_pmu_data;
Loading