Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp906243ybz; Fri, 17 Apr 2020 12:10:33 -0700 (PDT) X-Google-Smtp-Source: APiQypJNymdlX4PB4mpK1XSbqtdcXiArMlw8VFQKV6CBwzRpoO7XERp7ly3asPL80OHH6K8fdlKc X-Received: by 2002:a17:906:eb90:: with SMTP id mh16mr4545725ejb.201.1587150633543; Fri, 17 Apr 2020 12:10:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587150633; cv=none; d=google.com; s=arc-20160816; b=rXue5JfC3yrNwbN4rEGp8HBahc/T+lgBNZt2fCWMaW2fCITzPU0BEnmRzeuhJW49Fa voS0DkxwyhGnrGa7driauc6saZJIls0IZvYgPDmJ1DL3vAHmsLFo9PvdFOOfQk34RaIJ zIU9Bjn0F9T0rsb/6D2v0uOuAs6uEwNCzyLI/u+3YpSug8KscdZcsSHf7yp2Be7Kjc4+ tz/3tQeaWRZHn9+cyz8+WaCYbv7cTe2FrwLqgM7WgeewfHwm5Q8X9hEOVgmYuKeaLAqI MM07c0wf+7BIpAuZrIJETLdEqi1xVQwFyhhWH/efohUJugeXsHquc4cYR6DMZOZKMABd bDVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=RSI3Jk2pdt1qXkGfoD18aihrdmY02gauY+JtpjGwyDs=; b=mfOxhmEB8ZgYpEuv8gI2SVxPJD+lmT4iVf15YDADCbg21mZ79AD2EjCAJp3JuKAy1J pRO46T8n9AXkMw6PVtA/Hfj0yCCafQ/p3e0I2iG5t3UtkSZlD+s3/vi91nD6bq4/CAai MA2XBZ9JQryv5GRKItvsv2HHpAZHr96M9T/yoasoQ/iaKdkrkjfgak9PPZmpJfpJ/R0n FKGRH4iSxMF2LUKH751Zr26YIeEhJGwrWSvmdj1FhyIvWocf4Pc+kEA544OlYyo+p5Of uRb8iuP2AJ8YC6LI38KDpfYmLBTKuD79ZXOZ56N29BLQAdyj6NihCW/RXJ3sjJVVETC2 stsQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@googlemail.com header.s=20161025 header.b=la2mLgGL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ov7si14211728ejb.489.2020.04.17.12.10.09; Fri, 17 Apr 2020 12:10:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@googlemail.com header.s=20161025 header.b=la2mLgGL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730100AbgDQTIu (ORCPT + 99 others); Fri, 17 Apr 2020 15:08:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729795AbgDQTIr (ORCPT ); Fri, 17 Apr 2020 15:08:47 -0400 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7554C061A10; Fri, 17 Apr 2020 12:08:45 -0700 (PDT) Received: by mail-wr1-x443.google.com with SMTP id d27so4321861wra.1; Fri, 17 Apr 2020 12:08:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RSI3Jk2pdt1qXkGfoD18aihrdmY02gauY+JtpjGwyDs=; b=la2mLgGLpJ8qxjy95X3+75SpjBR1yMi9XxMPk75IXxglNUc4NBEOhJinZPVeaRQOiD fUPhvso8yxqEwqZ6vObzYdnwlPe63ckCRIU7N4F5H1zsB3Ns135yfGNCSgTlE11G/kct xdlcMzSZtIO4VifRYIblmz5/LkhlK4cROSqNTMrn2qsm8ZtcjdJ1y42bgT2L/dqD20ii oVcCauugUAkH5vkC1FawTbsoi+ta8JsH7SzXA3u9SnCgUHYuVesScQlP73c1Xm/T8Ss2 AUJwQKtEa2GB0TYWwd5v+rdMV2BkV1OvdDCY/A7a1eVrQfUdtAXUKmvrCIYrm66ZKK4z 7kXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RSI3Jk2pdt1qXkGfoD18aihrdmY02gauY+JtpjGwyDs=; b=MDM8qh4Wc+9AnjFer0hbhUbxjDZr+Fhns8dtiZi+mzlFYsI92YAt1wF7SY1joRYBOX +tkpqVdPfWxnV0KeFHmTBdef0mTUDl8h6Q0oOBNpXL9jt401Ql2vQUGSxeVyNKMJBavd Ui8v6SB0HuMSKI9V7PWo6mDRtr6hhk1tUHcCxAYwHvxgUMYpD5sdupJn2pCKAb56X0iV 4jrW0Gk96TncRmx9eCjf/mZ9nqJwVQNTBEe4SHaM8Z++Iof/4ZRaTFWNpNZxiBQn1eOm 9PxlePWvpSqbM4YbOG490ma155ccQxQ0PQxWcN4G7lneNKR1eRazfSdulhICmSYDxMh7 VzKQ== X-Gm-Message-State: AGi0PuanB0CudwNGTACu5DQrKkxPM8NWc1EruSaY8IxsMnb0rgJNnCf9 slh4oCDQjC+50pwvB0/jl/8= X-Received: by 2002:adf:ef01:: with SMTP id e1mr5829196wro.182.1587150524474; Fri, 17 Apr 2020 12:08:44 -0700 (PDT) Received: from localhost.localdomain (p200300F137142E00428D5CFFFEB99DB8.dip0.t-ipconnect.de. [2003:f1:3714:2e00:428d:5cff:feb9:9db8]) by smtp.googlemail.com with ESMTPSA id q17sm8722220wmj.45.2020.04.17.12.08.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Apr 2020 12:08:44 -0700 (PDT) From: Martin Blumenstingl To: robh+dt@kernel.org, khilman@baylibre.com, narmstrong@baylibre.com, linux-amlogic@lists.infradead.org, devicetree@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Blumenstingl Subject: [PATCH v2 3/4] soc: amlogic: meson-ee-pwrc: add support for Meson8/Meson8b/Meson8m2 Date: Fri, 17 Apr 2020 21:08:24 +0200 Message-Id: <20200417190825.1363345-4-martin.blumenstingl@googlemail.com> X-Mailer: git-send-email 2.26.1 In-Reply-To: <20200417190825.1363345-1-martin.blumenstingl@googlemail.com> References: <20200417190825.1363345-1-martin.blumenstingl@googlemail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This adds support for the power domains on Meson8/Meson8b/Meson8m2. Meson8 doesn't use any reset lines while Meson8b and Meson8m2 use the same set of reset lines (which is different from the newer SoCs). Add dedicated compatible strings for Meson8, Meson8b and Meson8m2 to support these differences. Notable differences between Meson8 and G12A are: - there is no HHI_VPU_MEM_PD_REG2 on the 32-bit SoCs - the Meson8b datasheet describes an "audio DSP memory" power domain which is used for the hardware audio decoder - the "amlogic,ao-sysctrl" only includes the power management related registers on the 32-bit SoCs, meaning the for example the AO_RTI_GEN_PWR_SLEEP0 register is at offset (0x2 << 2) rather than (0x3a << 2). As result of this (0x38 << 2) is subtracted from the register offsets, which is the start of the power management related registers. Signed-off-by: Martin Blumenstingl --- drivers/soc/amlogic/meson-ee-pwrc.c | 72 +++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/drivers/soc/amlogic/meson-ee-pwrc.c b/drivers/soc/amlogic/meson-ee-pwrc.c index 3f0261d53ad9..b30868da456a 100644 --- a/drivers/soc/amlogic/meson-ee-pwrc.c +++ b/drivers/soc/amlogic/meson-ee-pwrc.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -22,6 +23,12 @@ #define AO_RTI_GEN_PWR_SLEEP0 (0x3a << 2) #define AO_RTI_GEN_PWR_ISO0 (0x3b << 2) +/* + * Meson8/Meson8b/Meson8m2 only expose the power management registers of + * the AO-bus as syscon. Above register offsets need to subtract this offset. + */ +#define AO_RTI_GEN_MESON8_PMU_OFFSET (0x38 << 2) + /* HHI Offsets */ #define HHI_MEM_PD_REG0 (0x40 << 2) @@ -73,6 +80,13 @@ static struct meson_ee_pwrc_top_domain g12a_pwrc_vpu = { .iso_mask = BIT(9), }; +static struct meson_ee_pwrc_top_domain meson8_pwrc_vpu = { + .sleep_reg = AO_RTI_GEN_PWR_SLEEP0 - AO_RTI_GEN_MESON8_PMU_OFFSET, + .sleep_mask = BIT(8), + .iso_reg = AO_RTI_GEN_PWR_SLEEP0 - AO_RTI_GEN_MESON8_PMU_OFFSET, + .iso_mask = BIT(9), +}; + #define SM1_EE_PD(__bit) \ { \ .sleep_reg = AO_RTI_GEN_PWR_SLEEP0, \ @@ -124,10 +138,20 @@ static struct meson_ee_pwrc_mem_domain g12a_pwrc_mem_vpu[] = { VPU_HHI_MEMPD(HHI_MEM_PD_REG0), }; -static struct meson_ee_pwrc_mem_domain g12a_pwrc_mem_eth[] = { +static struct meson_ee_pwrc_mem_domain meson8_pwrc_mem_eth[] = { { HHI_MEM_PD_REG0, GENMASK(3, 2) }, }; +static struct meson_ee_pwrc_mem_domain meson8_pwrc_audio_dsp_mem[] = { + { HHI_MEM_PD_REG0, GENMASK(1, 0) }, +}; + +static struct meson_ee_pwrc_mem_domain meson8_pwrc_mem_vpu[] = { + VPU_MEMPD(HHI_VPU_MEM_PD_REG0), + VPU_MEMPD(HHI_VPU_MEM_PD_REG1), + VPU_HHI_MEMPD(HHI_MEM_PD_REG0), +}; + static struct meson_ee_pwrc_mem_domain sm1_pwrc_mem_vpu[] = { VPU_MEMPD(HHI_VPU_MEM_PD_REG0), VPU_MEMPD(HHI_VPU_MEM_PD_REG1), @@ -201,7 +225,27 @@ static bool pwrc_ee_get_power(struct meson_ee_pwrc_domain *pwrc_domain); static struct meson_ee_pwrc_domain_desc g12a_pwrc_domains[] = { [PWRC_G12A_VPU_ID] = VPU_PD("VPU", &g12a_pwrc_vpu, g12a_pwrc_mem_vpu, pwrc_ee_get_power, 11, 2), - [PWRC_G12A_ETH_ID] = MEM_PD("ETH", g12a_pwrc_mem_eth), + [PWRC_G12A_ETH_ID] = MEM_PD("ETH", meson8_pwrc_mem_eth), +}; + +static struct meson_ee_pwrc_domain_desc meson8_pwrc_domains[] = { + [PWRC_MESON8_VPU_ID] = VPU_PD("VPU", &meson8_pwrc_vpu, + meson8_pwrc_mem_vpu, pwrc_ee_get_power, + 0, 1), + [PWRC_MESON8_ETHERNET_MEM_ID] = MEM_PD("ETHERNET_MEM", + meson8_pwrc_mem_eth), + [PWRC_MESON8_AUDIO_DSP_MEM_ID] = MEM_PD("AUDIO_DSP_MEM", + meson8_pwrc_audio_dsp_mem), +}; + +static struct meson_ee_pwrc_domain_desc meson8b_pwrc_domains[] = { + [PWRC_MESON8_VPU_ID] = VPU_PD("VPU", &meson8_pwrc_vpu, + meson8_pwrc_mem_vpu, pwrc_ee_get_power, + 11, 1), + [PWRC_MESON8_ETHERNET_MEM_ID] = MEM_PD("ETHERNET_MEM", + meson8_pwrc_mem_eth), + [PWRC_MESON8_AUDIO_DSP_MEM_ID] = MEM_PD("AUDIO_DSP_MEM", + meson8_pwrc_audio_dsp_mem), }; static struct meson_ee_pwrc_domain_desc sm1_pwrc_domains[] = { @@ -216,7 +260,7 @@ static struct meson_ee_pwrc_domain_desc sm1_pwrc_domains[] = { [PWRC_SM1_GE2D_ID] = TOP_PD("GE2D", &sm1_pwrc_ge2d, sm1_pwrc_mem_ge2d, pwrc_ee_get_power), [PWRC_SM1_AUDIO_ID] = MEM_PD("AUDIO", sm1_pwrc_mem_audio), - [PWRC_SM1_ETH_ID] = MEM_PD("ETH", g12a_pwrc_mem_eth), + [PWRC_SM1_ETH_ID] = MEM_PD("ETH", meson8_pwrc_mem_eth), }; struct meson_ee_pwrc_domain { @@ -470,12 +514,34 @@ 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_m8_pwrc_data = { + .count = ARRAY_SIZE(meson8_pwrc_domains), + .domains = meson8_pwrc_domains, +}; + +static struct meson_ee_pwrc_domain_data meson_ee_m8b_pwrc_data = { + .count = ARRAY_SIZE(meson8b_pwrc_domains), + .domains = meson8b_pwrc_domains, +}; + static struct meson_ee_pwrc_domain_data meson_ee_sm1_pwrc_data = { .count = ARRAY_SIZE(sm1_pwrc_domains), .domains = sm1_pwrc_domains, }; static const struct of_device_id meson_ee_pwrc_match_table[] = { + { + .compatible = "amlogic,meson8-pwrc", + .data = &meson_ee_m8_pwrc_data, + }, + { + .compatible = "amlogic,meson8b-pwrc", + .data = &meson_ee_m8b_pwrc_data, + }, + { + .compatible = "amlogic,meson8m2-pwrc", + .data = &meson_ee_m8b_pwrc_data, + }, { .compatible = "amlogic,meson-g12a-pwrc", .data = &meson_ee_g12a_pwrc_data, -- 2.26.1