Commit e863e45e authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'amlogic-drivers' of...

Merge tag 'amlogic-drivers' of https://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic into arm/drivers

soc: amlogic: driver updates for v5.10
- misc. pm-domain updates

* tag 'amlogic-drivers' of https://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-amlogic:
  soc: amlogic: pm-domains: use always-on flag
  soc: amlogic: meson-ee-pwrc: add support for the Meson AXG SoCs
  dt-bindings: power: amlogic, meson-ee-pwrc: add Amlogic AXG power controller bindings

Link: https://lore.kernel.org/r/7hblhukjzx.fsf@baylibre.com


Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents f8e87554 5aabf118
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ properties:
      - amlogic,meson8b-pwrc
      - amlogic,meson8m2-pwrc
      - amlogic,meson-gxbb-pwrc
      - amlogic,meson-axg-pwrc
      - amlogic,meson-g12a-pwrc
      - amlogic,meson-sm1-pwrc

@@ -42,11 +43,11 @@ properties:
      - const: vapb

  resets:
    minItems: 11
    minItems: 5
    maxItems: 12

  reset-names:
    minItems: 11
    minItems: 5
    maxItems: 12

  "#power-domain-cells":
@@ -107,6 +108,24 @@ allOf:
        - resets
        - reset-names

  - if:
      properties:
        compatible:
          enum:
            - amlogic,meson-axg-pwrc
    then:
      properties:
        reset-names:
          items:
            - const: viu
            - const: venc
            - const: vcbus
            - const: vencl
            - const: vid_lock
      required:
        - resets
        - reset-names

  - if:
      properties:
        compatible:
+28 −2
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <linux/reset.h>
#include <linux/clk.h>
#include <dt-bindings/power/meson8-power.h>
#include <dt-bindings/power/meson-axg-power.h>
#include <dt-bindings/power/meson-g12a-power.h>
#include <dt-bindings/power/meson-gxbb-power.h>
#include <dt-bindings/power/meson-sm1-power.h>
@@ -134,6 +135,11 @@ static struct meson_ee_pwrc_top_domain sm1_pwrc_ge2d = SM1_EE_PD(19);
	{ __reg, BIT(14) },					\
	{ __reg, BIT(15) }

static struct meson_ee_pwrc_mem_domain axg_pwrc_mem_vpu[] = {
	VPU_MEMPD(HHI_VPU_MEM_PD_REG0),
	VPU_HHI_MEMPD(HHI_MEM_PD_REG0),
};

static struct meson_ee_pwrc_mem_domain g12a_pwrc_mem_vpu[] = {
	VPU_MEMPD(HHI_VPU_MEM_PD_REG0),
	VPU_MEMPD(HHI_VPU_MEM_PD_REG1),
@@ -190,6 +196,10 @@ static struct meson_ee_pwrc_mem_domain sm1_pwrc_mem_ge2d[] = {
	{ HHI_MEM_PD_REG0, GENMASK(25, 18) },
};

static struct meson_ee_pwrc_mem_domain axg_pwrc_mem_audio[] = {
	{ HHI_MEM_PD_REG0, GENMASK(5, 4) },
};

static struct meson_ee_pwrc_mem_domain sm1_pwrc_mem_audio[] = {
	{ HHI_MEM_PD_REG0, GENMASK(5, 4) },
	{ HHI_AUDIO_MEM_PD_REG0, GENMASK(1, 0) },
@@ -231,6 +241,13 @@ static struct meson_ee_pwrc_mem_domain sm1_pwrc_mem_audio[] = {

static bool pwrc_ee_get_power(struct meson_ee_pwrc_domain *pwrc_domain);

static struct meson_ee_pwrc_domain_desc axg_pwrc_domains[] = {
	[PWRC_AXG_VPU_ID]  = VPU_PD("VPU", &gx_pwrc_vpu, axg_pwrc_mem_vpu,
				     pwrc_ee_get_power, 5, 2),
	[PWRC_AXG_ETHERNET_MEM_ID] = MEM_PD("ETH", meson_pwrc_mem_eth),
	[PWRC_AXG_AUDIO_ID] = MEM_PD("AUDIO", axg_pwrc_mem_audio),
};

static struct meson_ee_pwrc_domain_desc g12a_pwrc_domains[] = {
	[PWRC_G12A_VPU_ID]  = VPU_PD("VPU", &gx_pwrc_vpu, g12a_pwrc_mem_vpu,
				     pwrc_ee_get_power, 11, 2),
@@ -433,8 +450,8 @@ static int meson_ee_pwrc_init_domain(struct platform_device *pdev,
		if (ret)
			return ret;

		ret = pm_genpd_init(&dom->base, &pm_domain_always_on_gov,
				    false);
		dom->base.flags = GENPD_FLAG_ALWAYS_ON;
		ret = pm_genpd_init(&dom->base, NULL, false);
		if (ret)
			return ret;
	} else {
@@ -529,6 +546,11 @@ static struct meson_ee_pwrc_domain_data meson_ee_g12a_pwrc_data = {
	.domains = g12a_pwrc_domains,
};

static struct meson_ee_pwrc_domain_data meson_ee_axg_pwrc_data = {
	.count = ARRAY_SIZE(axg_pwrc_domains),
	.domains = axg_pwrc_domains,
};

static struct meson_ee_pwrc_domain_data meson_ee_gxbb_pwrc_data = {
	.count = ARRAY_SIZE(gxbb_pwrc_domains),
	.domains = gxbb_pwrc_domains,
@@ -562,6 +584,10 @@ static const struct of_device_id meson_ee_pwrc_match_table[] = {
		.compatible = "amlogic,meson8m2-pwrc",
		.data = &meson_ee_m8b_pwrc_data,
	},
	{
		.compatible = "amlogic,meson-axg-pwrc",
		.data = &meson_ee_axg_pwrc_data,
	},
	{
		.compatible = "amlogic,meson-gxbb-pwrc",
		.data = &meson_ee_gxbb_pwrc_data,
+2 −2
Original line number Diff line number Diff line
@@ -339,8 +339,8 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev)
			return ret;
	}

	pm_genpd_init(&vpu_pd->genpd, &pm_domain_always_on_gov,
		      powered_off);
	vpu_pd->genpd.flags = GENPD_FLAG_ALWAYS_ON;
	pm_genpd_init(&vpu_pd->genpd, NULL, powered_off);

	return of_genpd_add_provider_simple(pdev->dev.of_node,
					    &vpu_pd->genpd);
+14 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
/*
 * Copyright (c) 2020 BayLibre, SAS
 * Author: Neil Armstrong <narmstrong@baylibre.com>
 */

#ifndef _DT_BINDINGS_MESON_AXG_POWER_H
#define _DT_BINDINGS_MESON_AXG_POWER_H

#define PWRC_AXG_VPU_ID			0
#define PWRC_AXG_ETHERNET_MEM_ID	1
#define PWRC_AXG_AUDIO_ID		2

#endif