Merge tag 'arm-drivers-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull ARM driver updates from Arnd Bergmann:
 "There are a few separately maintained driver subsystems that we merge
  through the SoC tree, notable changes are:

   - Memory controller updates, mainly for Tegra and Mediatek SoCs, and
     clarifications for the memory controller DT bindings

   - SCMI firmware interface updates, in particular a new transport
     based on OPTEE and support for atomic operations.

   - Cleanups to the TEE subsystem, refactoring its memory management

  For SoC specific drivers without a separate subsystem, changes include

   - Smaller updates and fixes for TI, AT91/SAMA5, Qualcomm and NXP
     Layerscape SoCs.

   - Driver support for Microchip SAMA5D29, Tesla FSD, Renesas RZ/G2L,
     and Qualcomm SM8450.

   - Better power management on Mediatek MT81xx, NXP i.MX8MQ and older
     NVIDIA Tegra chips"

* tag 'arm-drivers-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (154 commits)
  ARM: spear: fix typos in comments
  soc/microchip: fix invalid free in mpfs_sys_controller_delete
  soc: s4: Add support for power domains controller
  dt-bindings: power: add Amlogic s4 power domains bindings
  ARM: at91: add support in soc driver for new SAMA5D29
  soc: mediatek: mmsys: add sw0_rst_offset in mmsys driver data
  dt-bindings: memory: renesas,rpc-if: Document RZ/V2L SoC
  memory: emif: check the pointer temp in get_device_details()
  memory: emif: Add check for setup_interrupts
  dt-bindings: arm: mediatek: mmsys: add support for MT8186
  dt-bindings: mediatek: add compatible for MT8186 pwrap
  soc: mediatek: pwrap: add pwrap driver for MT8186 SoC
  soc: mediatek: mmsys: add mmsys reset control for MT8186
  soc: mediatek: mtk-infracfg: Disable ACP on MT8192
  soc: ti: k3-socinfo: Add AM62x JTAG ID
  soc: mediatek: add MTK mutex support for MT8186
  soc: mediatek: mmsys: add mt8186 mmsys routing table
  soc: mediatek: pm-domains: Add support for mt8186
  dt-bindings: power: Add MT8186 power domains
  soc: mediatek: pm-domains: Add support for mt8195
  ...
This commit is contained in:
Linus Torvalds
2022-03-23 18:23:13 -07:00
124 changed files with 7644 additions and 1435 deletions

View File

@@ -0,0 +1,150 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2017 - 2022: Samsung Electronics Co., Ltd.
* https://www.samsung.com
* Copyright (c) 2017-2022 Tesla, Inc.
* https://www.tesla.com
*
* The constants defined in this header are being used in dts
* and fsd platform driver.
*/
#ifndef _DT_BINDINGS_CLOCK_FSD_H
#define _DT_BINDINGS_CLOCK_FSD_H
/* CMU */
#define DOUT_CMU_PLL_SHARED0_DIV4 1
#define DOUT_CMU_PERIC_SHARED1DIV36 2
#define DOUT_CMU_PERIC_SHARED0DIV3_TBUCLK 3
#define DOUT_CMU_PERIC_SHARED0DIV20 4
#define DOUT_CMU_PERIC_SHARED1DIV4_DMACLK 5
#define DOUT_CMU_PLL_SHARED0_DIV6 6
#define DOUT_CMU_FSYS0_SHARED1DIV4 7
#define DOUT_CMU_FSYS0_SHARED0DIV4 8
#define DOUT_CMU_FSYS1_SHARED0DIV8 9
#define DOUT_CMU_FSYS1_SHARED0DIV4 10
#define CMU_CPUCL_SWITCH_GATE 11
#define DOUT_CMU_IMEM_TCUCLK 12
#define DOUT_CMU_IMEM_ACLK 13
#define DOUT_CMU_IMEM_DMACLK 14
#define GAT_CMU_FSYS0_SHARED0DIV4 15
#define CMU_NR_CLK 16
/* PERIC */
#define PERIC_SCLK_UART0 1
#define PERIC_PCLK_UART0 2
#define PERIC_SCLK_UART1 3
#define PERIC_PCLK_UART1 4
#define PERIC_DMA0_IPCLKPORT_ACLK 5
#define PERIC_DMA1_IPCLKPORT_ACLK 6
#define PERIC_PWM0_IPCLKPORT_I_PCLK_S0 7
#define PERIC_PWM1_IPCLKPORT_I_PCLK_S0 8
#define PERIC_PCLK_SPI0 9
#define PERIC_SCLK_SPI0 10
#define PERIC_PCLK_SPI1 11
#define PERIC_SCLK_SPI1 12
#define PERIC_PCLK_SPI2 13
#define PERIC_SCLK_SPI2 14
#define PERIC_PCLK_TDM0 15
#define PERIC_PCLK_HSI2C0 16
#define PERIC_PCLK_HSI2C1 17
#define PERIC_PCLK_HSI2C2 18
#define PERIC_PCLK_HSI2C3 19
#define PERIC_PCLK_HSI2C4 20
#define PERIC_PCLK_HSI2C5 21
#define PERIC_PCLK_HSI2C6 22
#define PERIC_PCLK_HSI2C7 23
#define PERIC_MCAN0_IPCLKPORT_CCLK 24
#define PERIC_MCAN0_IPCLKPORT_PCLK 25
#define PERIC_MCAN1_IPCLKPORT_CCLK 26
#define PERIC_MCAN1_IPCLKPORT_PCLK 27
#define PERIC_MCAN2_IPCLKPORT_CCLK 28
#define PERIC_MCAN2_IPCLKPORT_PCLK 29
#define PERIC_MCAN3_IPCLKPORT_CCLK 30
#define PERIC_MCAN3_IPCLKPORT_PCLK 31
#define PERIC_PCLK_ADCIF 32
#define PERIC_EQOS_TOP_IPCLKPORT_CLK_PTP_REF_I 33
#define PERIC_EQOS_TOP_IPCLKPORT_ACLK_I 34
#define PERIC_EQOS_TOP_IPCLKPORT_HCLK_I 35
#define PERIC_EQOS_TOP_IPCLKPORT_RGMII_CLK_I 36
#define PERIC_EQOS_TOP_IPCLKPORT_CLK_RX_I 37
#define PERIC_BUS_D_PERIC_IPCLKPORT_EQOSCLK 38
#define PERIC_BUS_P_PERIC_IPCLKPORT_EQOSCLK 39
#define PERIC_HCLK_TDM0 40
#define PERIC_PCLK_TDM1 41
#define PERIC_HCLK_TDM1 42
#define PERIC_EQOS_PHYRXCLK_MUX 43
#define PERIC_EQOS_PHYRXCLK 44
#define PERIC_DOUT_RGMII_CLK 45
#define PERIC_NR_CLK 46
/* FSYS0 */
#define UFS0_MPHY_REFCLK_IXTAL24 1
#define UFS0_MPHY_REFCLK_IXTAL26 2
#define UFS1_MPHY_REFCLK_IXTAL24 3
#define UFS1_MPHY_REFCLK_IXTAL26 4
#define UFS0_TOP0_HCLK_BUS 5
#define UFS0_TOP0_ACLK 6
#define UFS0_TOP0_CLK_UNIPRO 7
#define UFS0_TOP0_FMP_CLK 8
#define UFS1_TOP1_HCLK_BUS 9
#define UFS1_TOP1_ACLK 10
#define UFS1_TOP1_CLK_UNIPRO 11
#define UFS1_TOP1_FMP_CLK 12
#define PCIE_SUBCTRL_INST0_DBI_ACLK_SOC 13
#define PCIE_SUBCTRL_INST0_AUX_CLK_SOC 14
#define PCIE_SUBCTRL_INST0_MSTR_ACLK_SOC 15
#define PCIE_SUBCTRL_INST0_SLV_ACLK_SOC 16
#define FSYS0_EQOS_TOP0_IPCLKPORT_CLK_PTP_REF_I 17
#define FSYS0_EQOS_TOP0_IPCLKPORT_ACLK_I 18
#define FSYS0_EQOS_TOP0_IPCLKPORT_HCLK_I 19
#define FSYS0_EQOS_TOP0_IPCLKPORT_RGMII_CLK_I 20
#define FSYS0_EQOS_TOP0_IPCLKPORT_CLK_RX_I 21
#define FSYS0_DOUT_FSYS0_PERIBUS_GRP 22
#define FSYS0_NR_CLK 23
/* FSYS1 */
#define PCIE_LINK0_IPCLKPORT_DBI_ACLK 1
#define PCIE_LINK0_IPCLKPORT_AUX_ACLK 2
#define PCIE_LINK0_IPCLKPORT_MSTR_ACLK 3
#define PCIE_LINK0_IPCLKPORT_SLV_ACLK 4
#define PCIE_LINK1_IPCLKPORT_DBI_ACLK 5
#define PCIE_LINK1_IPCLKPORT_AUX_ACLK 6
#define PCIE_LINK1_IPCLKPORT_MSTR_ACLK 7
#define PCIE_LINK1_IPCLKPORT_SLV_ACLK 8
#define FSYS1_NR_CLK 9
/* IMEM */
#define IMEM_DMA0_IPCLKPORT_ACLK 1
#define IMEM_DMA1_IPCLKPORT_ACLK 2
#define IMEM_WDT0_IPCLKPORT_PCLK 3
#define IMEM_WDT1_IPCLKPORT_PCLK 4
#define IMEM_WDT2_IPCLKPORT_PCLK 5
#define IMEM_MCT_PCLK 6
#define IMEM_TMU_CPU0_IPCLKPORT_I_CLK_TS 7
#define IMEM_TMU_CPU2_IPCLKPORT_I_CLK_TS 8
#define IMEM_TMU_TOP_IPCLKPORT_I_CLK_TS 9
#define IMEM_TMU_GPU_IPCLKPORT_I_CLK_TS 10
#define IMEM_TMU_GT_IPCLKPORT_I_CLK_TS 11
#define IMEM_NR_CLK 12
/* MFC */
#define MFC_MFC_IPCLKPORT_ACLK 1
#define MFC_NR_CLK 2
/* CAM_CSI */
#define CAM_CSI0_0_IPCLKPORT_I_ACLK 1
#define CAM_CSI0_1_IPCLKPORT_I_ACLK 2
#define CAM_CSI0_2_IPCLKPORT_I_ACLK 3
#define CAM_CSI0_3_IPCLKPORT_I_ACLK 4
#define CAM_CSI1_0_IPCLKPORT_I_ACLK 5
#define CAM_CSI1_1_IPCLKPORT_I_ACLK 6
#define CAM_CSI1_2_IPCLKPORT_I_ACLK 7
#define CAM_CSI1_3_IPCLKPORT_I_ACLK 8
#define CAM_CSI2_0_IPCLKPORT_I_ACLK 9
#define CAM_CSI2_1_IPCLKPORT_I_ACLK 10
#define CAM_CSI2_2_IPCLKPORT_I_ACLK 11
#define CAM_CSI2_3_IPCLKPORT_I_ACLK 12
#define CAM_CSI_NR_CLK 13
#endif /*_DT_BINDINGS_CLOCK_FSD_H */

View File

@@ -18,4 +18,7 @@
#define IMX8M_POWER_DOMAIN_MIPI_CSI2 9
#define IMX8M_POWER_DOMAIN_PCIE2 10
#define IMX8MQ_VPUBLK_PD_G1 0
#define IMX8MQ_VPUBLK_PD_G2 1
#endif

View File

@@ -0,0 +1,19 @@
/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
/*
* Copyright (c) 2021 Amlogic, Inc.
* Author: Shunzhou Jiang <shunzhou.jiang@amlogic.com>
*/
#ifndef _DT_BINDINGS_MESON_S4_POWER_H
#define _DT_BINDINGS_MESON_S4_POWER_H
#define PWRC_S4_DOS_HEVC_ID 0
#define PWRC_S4_DOS_VDEC_ID 1
#define PWRC_S4_VPU_HDMI_ID 2
#define PWRC_S4_USB_COMB_ID 3
#define PWRC_S4_GE2D_ID 4
#define PWRC_S4_ETH_ID 5
#define PWRC_S4_DEMOD_ID 6
#define PWRC_S4_AUDIO_ID 7
#endif

View File

@@ -0,0 +1,32 @@
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
/*
* Copyright (c) 2022 MediaTek Inc.
* Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
*/
#ifndef _DT_BINDINGS_POWER_MT8186_POWER_H
#define _DT_BINDINGS_POWER_MT8186_POWER_H
#define MT8186_POWER_DOMAIN_MFG0 0
#define MT8186_POWER_DOMAIN_MFG1 1
#define MT8186_POWER_DOMAIN_MFG2 2
#define MT8186_POWER_DOMAIN_MFG3 3
#define MT8186_POWER_DOMAIN_SSUSB 4
#define MT8186_POWER_DOMAIN_SSUSB_P1 5
#define MT8186_POWER_DOMAIN_DIS 6
#define MT8186_POWER_DOMAIN_IMG 7
#define MT8186_POWER_DOMAIN_IMG2 8
#define MT8186_POWER_DOMAIN_IPE 9
#define MT8186_POWER_DOMAIN_CAM 10
#define MT8186_POWER_DOMAIN_CAM_RAWA 11
#define MT8186_POWER_DOMAIN_CAM_RAWB 12
#define MT8186_POWER_DOMAIN_VENC 13
#define MT8186_POWER_DOMAIN_VDEC 14
#define MT8186_POWER_DOMAIN_WPE 15
#define MT8186_POWER_DOMAIN_CONN_ON 16
#define MT8186_POWER_DOMAIN_CSIRX_TOP 17
#define MT8186_POWER_DOMAIN_ADSP_AO 18
#define MT8186_POWER_DOMAIN_ADSP_INFRA 19
#define MT8186_POWER_DOMAIN_ADSP_TOP 20
#endif /* _DT_BINDINGS_POWER_MT8186_POWER_H */

View File

@@ -0,0 +1,46 @@
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
/*
* Copyright (c) 2021 MediaTek Inc.
* Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
*/
#ifndef _DT_BINDINGS_POWER_MT8195_POWER_H
#define _DT_BINDINGS_POWER_MT8195_POWER_H
#define MT8195_POWER_DOMAIN_PCIE_MAC_P0 0
#define MT8195_POWER_DOMAIN_PCIE_MAC_P1 1
#define MT8195_POWER_DOMAIN_PCIE_PHY 2
#define MT8195_POWER_DOMAIN_SSUSB_PCIE_PHY 3
#define MT8195_POWER_DOMAIN_CSI_RX_TOP 4
#define MT8195_POWER_DOMAIN_ETHER 5
#define MT8195_POWER_DOMAIN_ADSP 6
#define MT8195_POWER_DOMAIN_AUDIO 7
#define MT8195_POWER_DOMAIN_MFG0 8
#define MT8195_POWER_DOMAIN_MFG1 9
#define MT8195_POWER_DOMAIN_MFG2 10
#define MT8195_POWER_DOMAIN_MFG3 11
#define MT8195_POWER_DOMAIN_MFG4 12
#define MT8195_POWER_DOMAIN_MFG5 13
#define MT8195_POWER_DOMAIN_MFG6 14
#define MT8195_POWER_DOMAIN_VPPSYS0 15
#define MT8195_POWER_DOMAIN_VDOSYS0 16
#define MT8195_POWER_DOMAIN_VPPSYS1 17
#define MT8195_POWER_DOMAIN_VDOSYS1 18
#define MT8195_POWER_DOMAIN_DP_TX 19
#define MT8195_POWER_DOMAIN_EPD_TX 20
#define MT8195_POWER_DOMAIN_HDMI_TX 21
#define MT8195_POWER_DOMAIN_WPESYS 22
#define MT8195_POWER_DOMAIN_VDEC0 23
#define MT8195_POWER_DOMAIN_VDEC1 24
#define MT8195_POWER_DOMAIN_VDEC2 25
#define MT8195_POWER_DOMAIN_VENC 26
#define MT8195_POWER_DOMAIN_VENC_CORE1 27
#define MT8195_POWER_DOMAIN_IMG 28
#define MT8195_POWER_DOMAIN_DIP 29
#define MT8195_POWER_DOMAIN_IPE 30
#define MT8195_POWER_DOMAIN_CAM 31
#define MT8195_POWER_DOMAIN_CAM_RAWA 32
#define MT8195_POWER_DOMAIN_CAM_RAWB 33
#define MT8195_POWER_DOMAIN_CAM_MRAW 34
#endif /* _DT_BINDINGS_POWER_MT8195_POWER_H */

View File

@@ -139,6 +139,11 @@
#define MDM9607_VDDMX_AO 4
#define MDM9607_VDDMX_VFL 5
/* MSM8226 Power Domain Indexes */
#define MSM8226_VDDCX 0
#define MSM8226_VDDCX_AO 1
#define MSM8226_VDDCX_VFC 2
/* MSM8939 Power Domains */
#define MSM8939_VDDMDCX 0
#define MSM8939_VDDMDCX_AO 1

View File

@@ -59,11 +59,16 @@ enum imx_sc_rm_func {
#if IS_ENABLED(CONFIG_IMX_SCU)
bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource);
int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt);
#else
static inline bool
imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource)
{
return true;
}
static inline int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt)
{
return -EOPNOTSUPP;
}
#endif
#endif

View File

@@ -63,13 +63,21 @@ enum qcom_scm_ice_cipher {
extern bool qcom_scm_is_available(void);
extern int qcom_scm_set_cold_boot_addr(void *entry, const cpumask_t *cpus);
extern int qcom_scm_set_warm_boot_addr(void *entry, const cpumask_t *cpus);
extern int qcom_scm_set_cold_boot_addr(void *entry);
extern int qcom_scm_set_warm_boot_addr(void *entry);
extern void qcom_scm_cpu_power_down(u32 flags);
extern int qcom_scm_set_remote_state(u32 state, u32 id);
struct qcom_scm_pas_metadata {
void *ptr;
dma_addr_t phys;
ssize_t size;
};
extern int qcom_scm_pas_init_image(u32 peripheral, const void *metadata,
size_t size);
size_t size,
struct qcom_scm_pas_metadata *ctx);
void qcom_scm_pas_metadata_release(struct qcom_scm_pas_metadata *ctx);
extern int qcom_scm_pas_mem_setup(u32 peripheral, phys_addr_t addr,
phys_addr_t size);
extern int qcom_scm_pas_auth_and_reset(u32 peripheral);
@@ -83,6 +91,7 @@ extern bool qcom_scm_restore_sec_cfg_available(void);
extern int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare);
extern int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size);
extern int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare);
extern int qcom_scm_iommu_set_cp_pool_size(u32 spare, u32 size);
extern int qcom_scm_mem_protect_video_var(u32 cp_start, u32 cp_size,
u32 cp_nonpixel_start,
u32 cp_nonpixel_size);
@@ -107,6 +116,7 @@ extern bool qcom_scm_hdcp_available(void);
extern int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt,
u32 *resp);
extern int qcom_scm_iommu_set_pt_format(u32 sec_id, u32 ctx_num, u32 pt_fmt);
extern int qcom_scm_qsmmu500_wait_safe_toggle(bool en);
extern int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, u32 payload_val,

View File

@@ -42,6 +42,7 @@ struct scmi_revision_info {
struct scmi_clock_info {
char name[SCMI_MAX_STR_SIZE];
unsigned int enable_latency;
bool rate_discrete;
union {
struct {
@@ -82,6 +83,9 @@ struct scmi_clk_proto_ops {
u64 rate);
int (*enable)(const struct scmi_protocol_handle *ph, u32 clk_id);
int (*disable)(const struct scmi_protocol_handle *ph, u32 clk_id);
int (*enable_atomic)(const struct scmi_protocol_handle *ph, u32 clk_id);
int (*disable_atomic)(const struct scmi_protocol_handle *ph,
u32 clk_id);
};
/**
@@ -612,6 +616,15 @@ struct scmi_notify_ops {
* @devm_protocol_get: devres managed method to acquire a protocol and get specific
* operations and a dedicated protocol handler
* @devm_protocol_put: devres managed method to release a protocol
* @is_transport_atomic: method to check if the underlying transport for this
* instance handle is configured to support atomic
* transactions for commands.
* Some users of the SCMI stack in the upper layers could
* be interested to know if they can assume SCMI
* command transactions associated to this handle will
* never sleep and act accordingly.
* An optional atomic threshold value could be returned
* where configured.
* @notify_ops: pointer to set of notifications related operations
*/
struct scmi_handle {
@@ -622,6 +635,8 @@ struct scmi_handle {
(*devm_protocol_get)(struct scmi_device *sdev, u8 proto,
struct scmi_protocol_handle **ph);
void (*devm_protocol_put)(struct scmi_device *sdev, u8 proto);
bool (*is_transport_atomic)(const struct scmi_handle *handle,
unsigned int *atomic_threshold);
const struct scmi_notify_ops *notify_ops;
};

View File

@@ -2,6 +2,88 @@
#ifndef __SOC_MEDIATEK_INFRACFG_H
#define __SOC_MEDIATEK_INFRACFG_H
#define MT8195_TOP_AXI_PROT_EN_STA1 0x228
#define MT8195_TOP_AXI_PROT_EN_1_STA1 0x258
#define MT8195_TOP_AXI_PROT_EN_SET 0x2a0
#define MT8195_TOP_AXI_PROT_EN_CLR 0x2a4
#define MT8195_TOP_AXI_PROT_EN_1_SET 0x2a8
#define MT8195_TOP_AXI_PROT_EN_1_CLR 0x2ac
#define MT8195_TOP_AXI_PROT_EN_MM_SET 0x2d4
#define MT8195_TOP_AXI_PROT_EN_MM_CLR 0x2d8
#define MT8195_TOP_AXI_PROT_EN_MM_STA1 0x2ec
#define MT8195_TOP_AXI_PROT_EN_2_SET 0x714
#define MT8195_TOP_AXI_PROT_EN_2_CLR 0x718
#define MT8195_TOP_AXI_PROT_EN_2_STA1 0x724
#define MT8195_TOP_AXI_PROT_EN_VDNR_SET 0xb84
#define MT8195_TOP_AXI_PROT_EN_VDNR_CLR 0xb88
#define MT8195_TOP_AXI_PROT_EN_VDNR_STA1 0xb90
#define MT8195_TOP_AXI_PROT_EN_VDNR_1_SET 0xba4
#define MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR 0xba8
#define MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1 0xbb0
#define MT8195_TOP_AXI_PROT_EN_VDNR_2_SET 0xbb8
#define MT8195_TOP_AXI_PROT_EN_VDNR_2_CLR 0xbbc
#define MT8195_TOP_AXI_PROT_EN_VDNR_2_STA1 0xbc4
#define MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET 0xbcc
#define MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR 0xbd0
#define MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1 0xbd8
#define MT8195_TOP_AXI_PROT_EN_MM_2_SET 0xdcc
#define MT8195_TOP_AXI_PROT_EN_MM_2_CLR 0xdd0
#define MT8195_TOP_AXI_PROT_EN_MM_2_STA1 0xdd8
#define MT8195_TOP_AXI_PROT_EN_VDOSYS0 BIT(6)
#define MT8195_TOP_AXI_PROT_EN_VPPSYS0 BIT(10)
#define MT8195_TOP_AXI_PROT_EN_MFG1 BIT(11)
#define MT8195_TOP_AXI_PROT_EN_MFG1_2ND GENMASK(22, 21)
#define MT8195_TOP_AXI_PROT_EN_VPPSYS0_2ND BIT(23)
#define MT8195_TOP_AXI_PROT_EN_1_MFG1 GENMASK(20, 19)
#define MT8195_TOP_AXI_PROT_EN_1_CAM BIT(22)
#define MT8195_TOP_AXI_PROT_EN_2_CAM BIT(0)
#define MT8195_TOP_AXI_PROT_EN_2_MFG1_2ND GENMASK(6, 5)
#define MT8195_TOP_AXI_PROT_EN_2_MFG1 BIT(7)
#define MT8195_TOP_AXI_PROT_EN_2_AUDIO (BIT(9) | BIT(11))
#define MT8195_TOP_AXI_PROT_EN_2_ADSP (BIT(12) | GENMASK(16, 14))
#define MT8195_TOP_AXI_PROT_EN_MM_CAM (BIT(0) | BIT(2) | BIT(4))
#define MT8195_TOP_AXI_PROT_EN_MM_IPE BIT(1)
#define MT8195_TOP_AXI_PROT_EN_MM_IMG BIT(3)
#define MT8195_TOP_AXI_PROT_EN_MM_VDOSYS0 GENMASK(21, 17)
#define MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1 GENMASK(8, 5)
#define MT8195_TOP_AXI_PROT_EN_MM_VENC (BIT(9) | BIT(11))
#define MT8195_TOP_AXI_PROT_EN_MM_VENC_CORE1 (BIT(10) | BIT(12))
#define MT8195_TOP_AXI_PROT_EN_MM_VDEC0 BIT(13)
#define MT8195_TOP_AXI_PROT_EN_MM_VDEC1 BIT(14)
#define MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1_2ND BIT(22)
#define MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1_2ND BIT(23)
#define MT8195_TOP_AXI_PROT_EN_MM_CAM_2ND BIT(24)
#define MT8195_TOP_AXI_PROT_EN_MM_IMG_2ND BIT(25)
#define MT8195_TOP_AXI_PROT_EN_MM_VENC_2ND BIT(26)
#define MT8195_TOP_AXI_PROT_EN_MM_WPESYS BIT(27)
#define MT8195_TOP_AXI_PROT_EN_MM_VDEC0_2ND BIT(28)
#define MT8195_TOP_AXI_PROT_EN_MM_VDEC1_2ND BIT(29)
#define MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1 GENMASK(31, 30)
#define MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0_2ND (GENMASK(1, 0) | BIT(4) | BIT(11))
#define MT8195_TOP_AXI_PROT_EN_MM_2_VENC BIT(2)
#define MT8195_TOP_AXI_PROT_EN_MM_2_VENC_CORE1 (BIT(3) | BIT(15))
#define MT8195_TOP_AXI_PROT_EN_MM_2_CAM (BIT(5) | BIT(17))
#define MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS1 (GENMASK(7, 6) | BIT(18))
#define MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0 GENMASK(9, 8)
#define MT8195_TOP_AXI_PROT_EN_MM_2_VDOSYS1 BIT(10)
#define MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2_2ND BIT(12)
#define MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0_2ND BIT(13)
#define MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS_2ND BIT(14)
#define MT8195_TOP_AXI_PROT_EN_MM_2_IPE BIT(16)
#define MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2 BIT(21)
#define MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0 BIT(22)
#define MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS GENMASK(24, 23)
#define MT8195_TOP_AXI_PROT_EN_VDNR_1_EPD_TX BIT(1)
#define MT8195_TOP_AXI_PROT_EN_VDNR_1_DP_TX BIT(2)
#define MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P0 (BIT(11) | BIT(28))
#define MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P1 (BIT(12) | BIT(29))
#define MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P0 BIT(13)
#define MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P1 BIT(14)
#define MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1 (BIT(17) | BIT(19))
#define MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0 BIT(20)
#define MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0 BIT(21)
#define MT8192_TOP_AXI_PROT_EN_STA1 0x228
#define MT8192_TOP_AXI_PROT_EN_1_STA1 0x258
#define MT8192_TOP_AXI_PROT_EN_SET 0x2a0
@@ -58,6 +140,54 @@
#define MT8192_TOP_AXI_PROT_EN_MM_2_MDP_2ND BIT(13)
#define MT8192_TOP_AXI_PROT_EN_VDNR_CAM BIT(21)
#define MT8186_TOP_AXI_PROT_EN_SET (0x2A0)
#define MT8186_TOP_AXI_PROT_EN_CLR (0x2A4)
#define MT8186_TOP_AXI_PROT_EN_STA (0x228)
#define MT8186_TOP_AXI_PROT_EN_1_SET (0x2A8)
#define MT8186_TOP_AXI_PROT_EN_1_CLR (0x2AC)
#define MT8186_TOP_AXI_PROT_EN_1_STA (0x258)
#define MT8186_TOP_AXI_PROT_EN_2_SET (0x2B0)
#define MT8186_TOP_AXI_PROT_EN_2_CLR (0x2B4)
#define MT8186_TOP_AXI_PROT_EN_2_STA (0x26C)
#define MT8186_TOP_AXI_PROT_EN_3_SET (0x2B8)
#define MT8186_TOP_AXI_PROT_EN_3_CLR (0x2BC)
#define MT8186_TOP_AXI_PROT_EN_3_STA (0x2C8)
/* MFG1 */
#define MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP1 (GENMASK(28, 27))
#define MT8186_TOP_AXI_PROT_EN_MFG1_STEP2 (GENMASK(22, 21))
#define MT8186_TOP_AXI_PROT_EN_MFG1_STEP3 (BIT(25))
#define MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP4 (BIT(29))
/* DIS */
#define MT8186_TOP_AXI_PROT_EN_1_DIS_STEP1 (GENMASK(12, 11))
#define MT8186_TOP_AXI_PROT_EN_DIS_STEP2 (GENMASK(2, 1) | GENMASK(11, 10))
/* IMG */
#define MT8186_TOP_AXI_PROT_EN_1_IMG_STEP1 (BIT(23))
#define MT8186_TOP_AXI_PROT_EN_1_IMG_STEP2 (BIT(15))
/* IPE */
#define MT8186_TOP_AXI_PROT_EN_1_IPE_STEP1 (BIT(24))
#define MT8186_TOP_AXI_PROT_EN_1_IPE_STEP2 (BIT(16))
/* CAM */
#define MT8186_TOP_AXI_PROT_EN_1_CAM_STEP1 (GENMASK(22, 21))
#define MT8186_TOP_AXI_PROT_EN_1_CAM_STEP2 (GENMASK(14, 13))
/* VENC */
#define MT8186_TOP_AXI_PROT_EN_1_VENC_STEP1 (BIT(31))
#define MT8186_TOP_AXI_PROT_EN_1_VENC_STEP2 (BIT(19))
/* VDEC */
#define MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP1 (BIT(30))
#define MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP2 (BIT(17))
/* WPE */
#define MT8186_TOP_AXI_PROT_EN_2_WPE_STEP1 (BIT(17))
#define MT8186_TOP_AXI_PROT_EN_2_WPE_STEP2 (BIT(16))
/* CONN_ON */
#define MT8186_TOP_AXI_PROT_EN_1_CONN_ON_STEP1 (BIT(18))
#define MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP2 (BIT(14))
#define MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP3 (BIT(13))
#define MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP4 (BIT(16))
/* ADSP_TOP */
#define MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP1 (GENMASK(12, 11))
#define MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP2 (GENMASK(1, 0))
#define MT8183_TOP_AXI_PROT_EN_STA1 0x228
#define MT8183_TOP_AXI_PROT_EN_STA1_1 0x258
#define MT8183_TOP_AXI_PROT_EN_SET 0x2a0
@@ -147,6 +277,9 @@
#define INFRA_TOPAXI_PROTECTEN_SET 0x0260
#define INFRA_TOPAXI_PROTECTEN_CLR 0x0264
#define MT8192_INFRA_CTRL 0x290
#define MT8192_INFRA_CTRL_DISABLE_MFG2ACP BIT(9)
#define REG_INFRA_MISC 0xf00
#define F_DDR_4GB_SUPPORT_EN BIT(13)

View File

@@ -35,7 +35,12 @@
#define LLCC_WRCACHE 31
#define LLCC_CVPFW 32
#define LLCC_CPUSS1 33
#define LLCC_CAMEXP0 34
#define LLCC_CPUMTE 35
#define LLCC_CPUHWT 36
#define LLCC_MDMCLAD2 37
#define LLCC_CAMEXP1 38
#define LLCC_AENPU 45
/**
* struct llcc_slice_desc - Cache slice descriptor
@@ -83,7 +88,7 @@ struct llcc_edac_reg_data {
* @bitmap: Bit map to track the active slice ids
* @offsets: Pointer to the bank offsets array
* @ecc_irq: interrupt for llcc cache error detection and reporting
* @major_version: Indicates the LLCC major version
* @version: Indicates the LLCC version
*/
struct llcc_drv_data {
struct regmap *regmap;
@@ -96,7 +101,7 @@ struct llcc_drv_data {
unsigned long *bitmap;
u32 *offsets;
int ecc_irq;
u32 major_version;
u32 version;
};
#if IS_ENABLED(CONFIG_QCOM_LLCC)

View File

@@ -10,10 +10,14 @@
struct device;
struct firmware;
struct qcom_scm_pas_metadata;
#if IS_ENABLED(CONFIG_QCOM_MDT_LOADER)
ssize_t qcom_mdt_get_size(const struct firmware *fw);
int qcom_mdt_pas_init(struct device *dev, const struct firmware *fw,
const char *fw_name, int pas_id, phys_addr_t mem_phys,
struct qcom_scm_pas_metadata *pas_metadata_ctx);
int qcom_mdt_load(struct device *dev, const struct firmware *fw,
const char *fw_name, int pas_id, void *mem_region,
phys_addr_t mem_phys, size_t mem_size,
@@ -23,7 +27,8 @@ int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw,
const char *fw_name, int pas_id, void *mem_region,
phys_addr_t mem_phys, size_t mem_size,
phys_addr_t *reloc_base);
void *qcom_mdt_read_metadata(const struct firmware *fw, size_t *data_len);
void *qcom_mdt_read_metadata(const struct firmware *fw, size_t *data_len,
const char *fw_name, struct device *dev);
#else /* !IS_ENABLED(CONFIG_QCOM_MDT_LOADER) */
@@ -32,6 +37,13 @@ static inline ssize_t qcom_mdt_get_size(const struct firmware *fw)
return -ENODEV;
}
static inline int qcom_mdt_pas_init(struct device *dev, const struct firmware *fw,
const char *fw_name, int pas_id, phys_addr_t mem_phys,
struct qcom_scm_pas_metadata *pas_metadata_ctx)
{
return -ENODEV;
}
static inline int qcom_mdt_load(struct device *dev, const struct firmware *fw,
const char *fw_name, int pas_id,
void *mem_region, phys_addr_t mem_phys,
@@ -51,7 +63,8 @@ static inline int qcom_mdt_load_no_init(struct device *dev,
}
static inline void *qcom_mdt_read_metadata(const struct firmware *fw,
size_t *data_len)
size_t *data_len, const char *fw_name,
struct device *dev)
{
return ERR_PTR(-ENODEV);
}

View File

@@ -645,7 +645,7 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
static inline struct ti_sci_resource *
devm_ti_sci_get_resource(const struct ti_sci_handle *handle, struct device *dev,
u32 dev_id, u32 sub_type);
u32 dev_id, u32 sub_type)
{
return ERR_PTR(-EINVAL);
}

View File

@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2015-2016, Linaro Limited
* Copyright (c) 2015-2022 Linaro Limited
*/
#ifndef __TEE_DRV_H
@@ -20,14 +20,11 @@
* specific TEE driver.
*/
#define TEE_SHM_MAPPED BIT(0) /* Memory mapped by the kernel */
#define TEE_SHM_DMA_BUF BIT(1) /* Memory with dma-buf handle */
#define TEE_SHM_EXT_DMA_BUF BIT(2) /* Memory with dma-buf handle */
#define TEE_SHM_REGISTER BIT(3) /* Memory registered in secure world */
#define TEE_SHM_USER_MAPPED BIT(4) /* Memory mapped in user space */
#define TEE_SHM_POOL BIT(5) /* Memory allocated from pool */
#define TEE_SHM_KERNEL_MAPPED BIT(6) /* Memory mapped in kernel space */
#define TEE_SHM_PRIV BIT(7) /* Memory private to TEE driver */
#define TEE_SHM_DYNAMIC BIT(0) /* Dynamic shared memory registered */
/* in secure world */
#define TEE_SHM_USER_MAPPED BIT(1) /* Memory mapped in user space */
#define TEE_SHM_POOL BIT(2) /* Memory allocated from pool */
#define TEE_SHM_PRIV BIT(3) /* Memory private to TEE driver */
struct device;
struct tee_device;
@@ -221,92 +218,39 @@ struct tee_shm {
};
/**
* struct tee_shm_pool_mgr - shared memory manager
* struct tee_shm_pool - shared memory pool
* @ops: operations
* @private_data: private data for the shared memory manager
*/
struct tee_shm_pool_mgr {
const struct tee_shm_pool_mgr_ops *ops;
struct tee_shm_pool {
const struct tee_shm_pool_ops *ops;
void *private_data;
};
/**
* struct tee_shm_pool_mgr_ops - shared memory pool manager operations
* struct tee_shm_pool_ops - shared memory pool operations
* @alloc: called when allocating shared memory
* @free: called when freeing shared memory
* @destroy_poolmgr: called when destroying the pool manager
* @destroy_pool: called when destroying the pool
*/
struct tee_shm_pool_mgr_ops {
int (*alloc)(struct tee_shm_pool_mgr *poolmgr, struct tee_shm *shm,
size_t size);
void (*free)(struct tee_shm_pool_mgr *poolmgr, struct tee_shm *shm);
void (*destroy_poolmgr)(struct tee_shm_pool_mgr *poolmgr);
struct tee_shm_pool_ops {
int (*alloc)(struct tee_shm_pool *pool, struct tee_shm *shm,
size_t size, size_t align);
void (*free)(struct tee_shm_pool *pool, struct tee_shm *shm);
void (*destroy_pool)(struct tee_shm_pool *pool);
};
/**
* tee_shm_pool_alloc() - Create a shared memory pool from shm managers
* @priv_mgr: manager for driver private shared memory allocations
* @dmabuf_mgr: manager for dma-buf shared memory allocations
*
* Allocation with the flag TEE_SHM_DMA_BUF set will use the range supplied
* in @dmabuf, others will use the range provided by @priv.
*
* @returns pointer to a 'struct tee_shm_pool' or an ERR_PTR on failure.
*/
struct tee_shm_pool *tee_shm_pool_alloc(struct tee_shm_pool_mgr *priv_mgr,
struct tee_shm_pool_mgr *dmabuf_mgr);
/*
* tee_shm_pool_mgr_alloc_res_mem() - Create a shm manager for reserved
* memory
* tee_shm_pool_alloc_res_mem() - Create a shm manager for reserved memory
* @vaddr: Virtual address of start of pool
* @paddr: Physical address of start of pool
* @size: Size in bytes of the pool
*
* @returns pointer to a 'struct tee_shm_pool_mgr' or an ERR_PTR on failure.
*/
struct tee_shm_pool_mgr *tee_shm_pool_mgr_alloc_res_mem(unsigned long vaddr,
phys_addr_t paddr,
size_t size,
int min_alloc_order);
/**
* tee_shm_pool_mgr_destroy() - Free a shared memory manager
*/
static inline void tee_shm_pool_mgr_destroy(struct tee_shm_pool_mgr *poolm)
{
poolm->ops->destroy_poolmgr(poolm);
}
/**
* struct tee_shm_pool_mem_info - holds information needed to create a shared
* memory pool
* @vaddr: Virtual address of start of pool
* @paddr: Physical address of start of pool
* @size: Size in bytes of the pool
*/
struct tee_shm_pool_mem_info {
unsigned long vaddr;
phys_addr_t paddr;
size_t size;
};
/**
* tee_shm_pool_alloc_res_mem() - Create a shared memory pool from reserved
* memory range
* @priv_info: Information for driver private shared memory pool
* @dmabuf_info: Information for dma-buf shared memory pool
*
* Start and end of pools will must be page aligned.
*
* Allocation with the flag TEE_SHM_DMA_BUF set will use the range supplied
* in @dmabuf, others will use the range provided by @priv.
*
* @returns pointer to a 'struct tee_shm_pool' or an ERR_PTR on failure.
*/
struct tee_shm_pool *
tee_shm_pool_alloc_res_mem(struct tee_shm_pool_mem_info *priv_info,
struct tee_shm_pool_mem_info *dmabuf_info);
struct tee_shm_pool *tee_shm_pool_alloc_res_mem(unsigned long vaddr,
phys_addr_t paddr, size_t size,
int min_alloc_order);
/**
* tee_shm_pool_free() - Free a shared memory pool
@@ -315,7 +259,10 @@ tee_shm_pool_alloc_res_mem(struct tee_shm_pool_mem_info *priv_info,
* The must be no remaining shared memory allocated from this pool when
* this function is called.
*/
void tee_shm_pool_free(struct tee_shm_pool *pool);
static inline void tee_shm_pool_free(struct tee_shm_pool *pool)
{
pool->ops->destroy_pool(pool);
}
/**
* tee_get_drvdata() - Return driver_data pointer
@@ -323,43 +270,20 @@ void tee_shm_pool_free(struct tee_shm_pool *pool);
*/
void *tee_get_drvdata(struct tee_device *teedev);
/**
* tee_shm_alloc() - Allocate shared memory
* @ctx: Context that allocates the shared memory
* @size: Requested size of shared memory
* @flags: Flags setting properties for the requested shared memory.
*
* Memory allocated as global shared memory is automatically freed when the
* TEE file pointer is closed. The @flags field uses the bits defined by
* TEE_SHM_* above. TEE_SHM_MAPPED must currently always be set. If
* TEE_SHM_DMA_BUF global shared memory will be allocated and associated
* with a dma-buf handle, else driver private memory.
*
* @returns a pointer to 'struct tee_shm'
*/
struct tee_shm *tee_shm_alloc(struct tee_context *ctx, size_t size, u32 flags);
struct tee_shm *tee_shm_alloc_priv_buf(struct tee_context *ctx, size_t size);
struct tee_shm *tee_shm_alloc_kernel_buf(struct tee_context *ctx, size_t size);
/**
* tee_shm_register() - Register shared memory buffer
* @ctx: Context that registers the shared memory
* @addr: Address is userspace of the shared buffer
* @length: Length of the shared buffer
* @flags: Flags setting properties for the requested shared memory.
*
* @returns a pointer to 'struct tee_shm'
*/
struct tee_shm *tee_shm_register(struct tee_context *ctx, unsigned long addr,
size_t length, u32 flags);
struct tee_shm *tee_shm_register_kernel_buf(struct tee_context *ctx,
void *addr, size_t length);
/**
* tee_shm_is_registered() - Check if shared memory object in registered in TEE
* tee_shm_is_dynamic() - Check if shared memory object is of the dynamic kind
* @shm: Shared memory handle
* @returns true if object is registered in TEE
* @returns true if object is dynamic shared memory
*/
static inline bool tee_shm_is_registered(struct tee_shm *shm)
static inline bool tee_shm_is_dynamic(struct tee_shm *shm)
{
return shm && (shm->flags & TEE_SHM_REGISTER);
return shm && (shm->flags & TEE_SHM_DYNAMIC);
}
/**

View File

@@ -931,7 +931,7 @@ enum mrq_reset_commands {
* @brief Request with MRQ_RESET
*
* Used by the sender of an #MRQ_RESET message to request BPMP to
* assert or or deassert a given reset line.
* assert or deassert a given reset line.
*/
struct mrq_reset_request {
/** @brief Reset action to perform (@ref mrq_reset_commands) */

View File

@@ -33,6 +33,34 @@ TRACE_EVENT(scmi_xfer_begin,
__entry->seq, __entry->poll)
);
TRACE_EVENT(scmi_xfer_response_wait,
TP_PROTO(int transfer_id, u8 msg_id, u8 protocol_id, u16 seq,
u32 timeout, bool poll),
TP_ARGS(transfer_id, msg_id, protocol_id, seq, timeout, poll),
TP_STRUCT__entry(
__field(int, transfer_id)
__field(u8, msg_id)
__field(u8, protocol_id)
__field(u16, seq)
__field(u32, timeout)
__field(bool, poll)
),
TP_fast_assign(
__entry->transfer_id = transfer_id;
__entry->msg_id = msg_id;
__entry->protocol_id = protocol_id;
__entry->seq = seq;
__entry->timeout = timeout;
__entry->poll = poll;
),
TP_printk("transfer_id=%d msg_id=%u protocol_id=%u seq=%u tmo_ms=%u poll=%u",
__entry->transfer_id, __entry->msg_id, __entry->protocol_id,
__entry->seq, __entry->timeout, __entry->poll)
);
TRACE_EVENT(scmi_xfer_end,
TP_PROTO(int transfer_id, u8 msg_id, u8 protocol_id, u16 seq,
int status),