mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-28 04:45:43 +01:00
Merge tag 'soc-fixes-7.3-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
Pull SoC fixes from Arnd Bergmann: - Four distinct issues in TEE firmware, all fairly minor - Five devicetree mistakes on NXP i.MX8, lx2160a and Qualcomm based machines, one of these may cause file system corruption from an incorrect SD card supply voltage - Five fixes for clk drivers on new Qualcomm platforms, addressing issues with incorrect enable states * tag 'soc-fixes-7.3-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: MAINTAINERS: update my email address tee: optee: ffa: support shared memory offsets on large-page kernels optee: register TEE devices only once fully initialized tee: shm: reject zero-sized allocations in tee_dyn_shm_alloc_helper() arm64: dts: imx8mp-var-dart-sonata: Fix Sonata SD I/O supply arm64: dts: lx2160a: fix the iic5 spi3 pinmux offset and value arm64: dts: lx2160a: fix IIC1 pinmux submask rejected by pinctrl-single arm64: dts: lx2160a: fix incorrect pinmux clk: qcom: gpucc-kaanapali: Mark the GPU CX GDSC as votable clk: qcom: gpucc-glymur: Mark the GPU CX GDSC as votable clk: qcom: gcc-kaanapali: Fix always-enabling PCIE_RSCC clocks clk: qcom: gcc-hawi: Fix always-enabling PCIE_RSCC clocks clk: qcom: gcc-eliza: Fix always-enabling PCIE_RSCC clocks arm64: dts: qcom: x1-denali: Fix microphone distortion tee: qcomtee: fix kernel-doc warnings
This commit is contained in:
commit
0c2669a9f4
17 files changed
+76
-43
No files matched your search
@@ -486,6 +486,7 @@ Juha Yrjola <[email protected]>
|
||||
Juha Yrjola <[email protected]>
|
||||
Julien Thierry <[email protected]> <[email protected]>
|
||||
Justin Iurman <[email protected]> <[email protected]>
|
||||
Imre Kaloz <[email protected]> <[email protected]>
|
||||
Ira Weiny <[email protected]> <[email protected]>
|
||||
Iskren Chernev <[email protected]> <[email protected]>
|
||||
Kalle Valo <[email protected]> <[email protected]>
|
||||
|
||||
+1
-1
@@ -3012,7 +3012,7 @@ F: arch/arm/boot/dts/ti/omap/omap3-igep*
|
||||
|
||||
ARM/INTEL IXP4XX ARM ARCHITECTURE
|
||||
M: Linus Walleij <[email protected]>
|
||||
M: Imre Kaloz <kaloz@openwrt.org>
|
||||
M: Imre Kaloz <kaloz@kernel.org>
|
||||
L: [email protected] (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/arm/intel-ixp4xx.yaml
|
||||
|
||||
@@ -1602,7 +1602,7 @@
|
||||
};
|
||||
|
||||
dspi2_miso_mosi_pins: iic5-spi3-pins {
|
||||
pinctrl-single,bits = <0x3 (0x2 << 9) (0x7 << 9)>;
|
||||
pinctrl-single,bits = <0x0 (0x3 << 9) (0x7 << 9)>;
|
||||
};
|
||||
|
||||
i2c5_pins: iic6-i2c-pins {
|
||||
@@ -1622,7 +1622,7 @@
|
||||
};
|
||||
|
||||
gpio1_31_28_pins: xspi1-data74-gpio-pins {
|
||||
pinctrl-single,bits = <0x0 0x1 (0x7 << 15)>;
|
||||
pinctrl-single,bits = <0x0 (0x1 << 15) (0x7 << 15)>;
|
||||
};
|
||||
|
||||
fspi_data30_pins: xspi1-data30-pins {
|
||||
@@ -1630,7 +1630,7 @@
|
||||
};
|
||||
|
||||
gpio1_27_24_pins: xspi1-data30-gpio-pins {
|
||||
pinctrl-single,bits = <0x0 0x1 (0x7 << 18)>;
|
||||
pinctrl-single,bits = <0x0 (0x1 << 18) (0x7 << 18)>;
|
||||
};
|
||||
|
||||
fspi_dqs_sck_cs10_pins: xspi1-base-pins {
|
||||
@@ -1638,7 +1638,7 @@
|
||||
};
|
||||
|
||||
gpio1_23_20_pins: xspi1-base-gpio-pins {
|
||||
pinctrl-single,bits = <0x0 0x1 (0x7 << 21)>;
|
||||
pinctrl-single,bits = <0x0 (0x1 << 21) (0x7 << 21)>;
|
||||
};
|
||||
|
||||
esdhc0_cmd_data30_clk_vsel_pins: sdhc1-base-sdhc-vsel-pins {
|
||||
@@ -1687,12 +1687,19 @@
|
||||
};
|
||||
|
||||
/* RCWSR14 */
|
||||
/*
|
||||
* IIC1_PMUX is a single bit at RCWSR14[10], but bit-per-mux
|
||||
* uses the mask for the field to clear before applying the
|
||||
* value.
|
||||
* So bits 11 and 12, which are reserved, are written as 0
|
||||
* on every mux switch, it is harmless.
|
||||
*/
|
||||
i2c0_pins: iic1-i2c-pins {
|
||||
pinctrl-single,bits = <0x8 0x0 (0x1 << 10)>;
|
||||
pinctrl-single,bits = <0x8 0x0 (0x7 << 10)>;
|
||||
};
|
||||
|
||||
gpio0_3_2_pins: iic1-gpio-pins {
|
||||
pinctrl-single,bits = <0x8 (0x1 << 10) (0x1 << 10)>;
|
||||
pinctrl-single,bits = <0x8 (0x1 << 10) (0x7 << 10)>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -511,6 +511,7 @@
|
||||
pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
|
||||
cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
|
||||
vmmc-supply = <®_usdhc2_vmmc>;
|
||||
vqmmc-supply = <&ldo5>;
|
||||
bus-width = <4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -863,11 +863,11 @@
|
||||
};
|
||||
|
||||
&lpass_vamacro {
|
||||
pinctrl-0 = <&dmic01_default>, <&dmic23_default>;
|
||||
pinctrl-0 = <&dmic01_default>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
vdd-micb-supply = <&vreg_l1b_1p8>;
|
||||
qcom,dmic-sample-rate = <4800000>;
|
||||
qcom,dmic-sample-rate = <2400000>;
|
||||
};
|
||||
|
||||
&mdss {
|
||||
|
||||
@@ -3010,8 +3010,6 @@ static const u32 gcc_eliza_critical_cbcrs[] = {
|
||||
0x26034, /* GCC_CAMERA_XO_CLK */
|
||||
0x27004, /* GCC_DISP_AHB_CLK */
|
||||
0x71004, /* GCC_GPU_CFG_AHB_CLK */
|
||||
0x52010, /* GCC_PCIE_RSCC_CFG_AHB_CLK */
|
||||
0x52010, /* GCC_PCIE_RSCC_XO_CLK */
|
||||
0x32004, /* GCC_VIDEO_AHB_CLK */
|
||||
0x32038, /* GCC_VIDEO_XO_CLK */
|
||||
};
|
||||
@@ -3045,6 +3043,10 @@ static const struct regmap_config gcc_eliza_regmap_config = {
|
||||
|
||||
static void clk_eliza_regs_configure(struct device *dev, struct regmap *regmap)
|
||||
{
|
||||
/* Keep clocks always enabled */
|
||||
regmap_update_bits(regmap, 0x52010, BIT(20), BIT(20)); /* GCC_PCIE_RSCC_CFG_AHB_CLK */
|
||||
regmap_update_bits(regmap, 0x52010, BIT(21), BIT(21)); /* GCC_PCIE_RSCC_XO_CLK */
|
||||
|
||||
/* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */
|
||||
qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
|
||||
qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_axi_clk, true);
|
||||
|
||||
@@ -3692,8 +3692,6 @@ static const u32 gcc_hawi_critical_cbcrs[] = {
|
||||
0x67084, /* GCC_PCIE_1_RSC_CORE_CLK */
|
||||
0x43014, /* GCC_PCIE_LINK_XO_CLK */
|
||||
0x6b088, /* GCC_PCIE_RSC_CORE_CLK */
|
||||
0x52010, /* GCC_PCIE_RSCC_CFG_AHB_CLK */
|
||||
0x52010, /* GCC_PCIE_RSCC_XO_CLK */
|
||||
0x32004, /* GCC_VIDEO_AHB_CLK */
|
||||
0x32028, /* GCC_VIDEO_XO_CLK */
|
||||
};
|
||||
@@ -3763,6 +3761,10 @@ static const struct regmap_config gcc_hawi_regmap_config = {
|
||||
|
||||
static void clk_hawi_regs_configure(struct device *dev, struct regmap *regmap)
|
||||
{
|
||||
/* Keep clocks always enabled */
|
||||
regmap_update_bits(regmap, 0x52010, BIT(20), BIT(20)); /* GCC_PCIE_RSCC_CFG_AHB_CLK */
|
||||
regmap_update_bits(regmap, 0x52010, BIT(21), BIT(21)); /* GCC_PCIE_RSCC_XO_CLK */
|
||||
|
||||
/* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
|
||||
qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
|
||||
}
|
||||
|
||||
@@ -3464,8 +3464,6 @@ static const u32 gcc_kaanapali_critical_cbcrs[] = {
|
||||
0x9f004, /* GCC_EVA_AHB_CLK */
|
||||
0x9f024, /* GCC_EVA_XO_CLK */
|
||||
0x71004, /* GCC_GPU_CFG_AHB_CLK */
|
||||
0x52010, /* GCC_PCIE_RSCC_CFG_AHB_CLK */
|
||||
0x52010, /* GCC_PCIE_RSCC_XO_CLK */
|
||||
0x32004, /* GCC_VIDEO_AHB_CLK */
|
||||
0x32040, /* GCC_VIDEO_XO_CLK */
|
||||
};
|
||||
@@ -3480,6 +3478,10 @@ static const struct regmap_config gcc_kaanapali_regmap_config = {
|
||||
|
||||
static void clk_kaanapali_regs_configure(struct device *dev, struct regmap *regmap)
|
||||
{
|
||||
/* Keep clocks always enabled */
|
||||
regmap_update_bits(regmap, 0x52010, BIT(20), BIT(20)); /* GCC_PCIE_RSCC_CFG_AHB_CLK */
|
||||
regmap_update_bits(regmap, 0x52010, BIT(21), BIT(21)); /* GCC_PCIE_RSCC_XO_CLK */
|
||||
|
||||
/* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
|
||||
qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
|
||||
}
|
||||
|
||||
@@ -510,7 +510,7 @@ static struct gdsc gpu_cc_cx_gdsc = {
|
||||
.name = "gpu_cc_cx_gdsc",
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
|
||||
.flags = RETAIN_FF_ENABLE | VOTABLE,
|
||||
};
|
||||
|
||||
static struct clk_regmap *gpu_cc_glymur_clocks[] = {
|
||||
|
||||
@@ -380,7 +380,7 @@ static struct gdsc gpu_cc_cx_gdsc = {
|
||||
.name = "gpu_cc_cx_gdsc",
|
||||
},
|
||||
.pwrsts = PWRSTS_OFF_ON,
|
||||
.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
|
||||
.flags = RETAIN_FF_ENABLE | VOTABLE,
|
||||
};
|
||||
|
||||
static struct clk_regmap *gpu_cc_kaanapali_clocks[] = {
|
||||
|
||||
+26
-12
@@ -198,7 +198,8 @@ static int to_msg_param_ffa_mem(struct optee_msg_param *mp,
|
||||
if (shm) {
|
||||
u64 shm_offs = p->u.memref.shm_offs;
|
||||
|
||||
mp->u.fmem.internal_offs = shm->offset;
|
||||
mp->u.fmem.internal_offs = tee_shm_get_page_offset(shm) &
|
||||
(FFA_PAGE_SIZE - 1);
|
||||
|
||||
mp->u.fmem.offs_low = shm_offs;
|
||||
mp->u.fmem.offs_high = shm_offs >> 32;
|
||||
@@ -284,14 +285,26 @@ static int optee_ffa_shm_register(struct tee_context *ctx, struct tee_shm *shm,
|
||||
.nattrs = 1,
|
||||
};
|
||||
struct sg_table sgt;
|
||||
size_t ffa_offs;
|
||||
int rc;
|
||||
|
||||
if (!num_pages)
|
||||
return -EINVAL;
|
||||
|
||||
rc = optee_check_mem_type(start, num_pages);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = sg_alloc_table_from_pages(&sgt, pages, num_pages, 0,
|
||||
num_pages * PAGE_SIZE, GFP_KERNEL);
|
||||
/*
|
||||
* Start the FF-A descriptor at the 4 KiB page containing the shared
|
||||
* buffer, skipping unused leading 4 KiB pages when PAGE_SIZE is
|
||||
* larger. Same approach as optee_fill_pages_list() in the SMC ABI.
|
||||
* This leaves only the offset into that 4 KiB page for internal_offs.
|
||||
*/
|
||||
ffa_offs = round_down(tee_shm_get_page_offset(shm), FFA_PAGE_SIZE);
|
||||
rc = sg_alloc_table_from_pages(&sgt, pages, num_pages, ffa_offs,
|
||||
num_pages * PAGE_SIZE - ffa_offs,
|
||||
GFP_KERNEL);
|
||||
if (rc)
|
||||
return rc;
|
||||
args.sg = sgt.sgl;
|
||||
@@ -458,7 +471,8 @@ static void handle_ffa_rpc_func_cmd_shm_alloc(struct tee_context *ctx,
|
||||
.attr = OPTEE_MSG_ATTR_TYPE_FMEM_OUTPUT,
|
||||
.u.fmem.size = tee_shm_get_size(shm),
|
||||
.u.fmem.global_id = shm->sec_world_id,
|
||||
.u.fmem.internal_offs = shm->offset,
|
||||
.u.fmem.internal_offs = tee_shm_get_page_offset(shm) &
|
||||
(FFA_PAGE_SIZE - 1),
|
||||
};
|
||||
|
||||
arg->ret = TEEC_SUCCESS;
|
||||
@@ -1123,14 +1137,6 @@ static int optee_ffa_probe(struct ffa_device *ffa_dev)
|
||||
|
||||
optee_set_dev_group(optee);
|
||||
|
||||
rc = tee_device_register(optee->teedev);
|
||||
if (rc)
|
||||
goto err_unreg_supp_teedev;
|
||||
|
||||
rc = tee_device_register(optee->supp_teedev);
|
||||
if (rc)
|
||||
goto err_unreg_supp_teedev;
|
||||
|
||||
rc = rhashtable_init(&optee->ffa.global_ids, &shm_rhash_params);
|
||||
if (rc)
|
||||
goto err_unreg_supp_teedev;
|
||||
@@ -1159,6 +1165,14 @@ static int optee_ffa_probe(struct ffa_device *ffa_dev)
|
||||
if (optee_ffa_protmem_pool_init(optee, sec_caps))
|
||||
pr_info("Protected memory service not available\n");
|
||||
|
||||
rc = tee_device_register(optee->teedev);
|
||||
if (rc)
|
||||
goto err_unregister_devices;
|
||||
|
||||
rc = tee_device_register(optee->supp_teedev);
|
||||
if (rc)
|
||||
goto err_unregister_devices;
|
||||
|
||||
rc = optee_enumerate_devices(PTA_CMD_GET_DEVICES);
|
||||
if (rc)
|
||||
goto err_unregister_devices;
|
||||
|
||||
@@ -136,8 +136,8 @@ struct optee_msg_param_rmem {
|
||||
* struct optee_msg_param_fmem - FF-A memory reference parameter
|
||||
* @offs_low: lower bits of offset into shared memory reference
|
||||
* @offs_high: higher bits of offset into shared memory reference
|
||||
* @internal_offs: internal offset into the first page of shared memory
|
||||
* reference
|
||||
* @internal_offs: offset into the first 4 KiB page of the FF-A shared
|
||||
* memory region
|
||||
* @size: size of the buffer
|
||||
* @global_id: global identifier of the shared memory
|
||||
*/
|
||||
|
||||
@@ -1849,14 +1849,6 @@ static int optee_probe(struct platform_device *pdev)
|
||||
|
||||
optee_set_dev_group(optee);
|
||||
|
||||
rc = tee_device_register(optee->teedev);
|
||||
if (rc)
|
||||
goto err_unreg_supp_teedev;
|
||||
|
||||
rc = tee_device_register(optee->supp_teedev);
|
||||
if (rc)
|
||||
goto err_unreg_supp_teedev;
|
||||
|
||||
optee_cq_init(&optee->call_queue, thread_count);
|
||||
optee_supp_init(&optee->supp);
|
||||
optee->smc.memremaped_shm = memremaped_shm;
|
||||
@@ -1916,6 +1908,14 @@ static int optee_probe(struct platform_device *pdev)
|
||||
if (optee->smc.sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM)
|
||||
pr_info("dynamic shared memory is enabled\n");
|
||||
|
||||
rc = tee_device_register(optee->teedev);
|
||||
if (rc)
|
||||
goto err_disable_shm_cache;
|
||||
|
||||
rc = tee_device_register(optee->supp_teedev);
|
||||
if (rc)
|
||||
goto err_disable_shm_cache;
|
||||
|
||||
rc = optee_enumerate_devices(PTA_CMD_GET_DEVICES);
|
||||
if (rc)
|
||||
goto err_disable_shm_cache;
|
||||
@@ -1942,7 +1942,6 @@ err_supp_uninit:
|
||||
optee_shm_arg_cache_uninit(optee);
|
||||
optee_supp_uninit(&optee->supp);
|
||||
mutex_destroy(&optee->call_queue.mutex);
|
||||
err_unreg_supp_teedev:
|
||||
tee_device_unregister(optee->supp_teedev);
|
||||
err_unreg_teedev:
|
||||
tee_device_unregister(optee->teedev);
|
||||
|
||||
@@ -97,10 +97,10 @@ static void qcomtee_get_async_buffer(struct qcomtee_object_invoke_ctx *oic,
|
||||
/**
|
||||
* async_release() - Process QTEE async release requests.
|
||||
* @oic: context used for the current invocation.
|
||||
* @msg: async message for object release.
|
||||
* @async_msg: async message for object release.
|
||||
* @size: size of the async buffer available.
|
||||
*
|
||||
* Return: Size of the outbound buffer used when processing @msg.
|
||||
* Return: Size of the outbound buffer used when processing @async_msg.
|
||||
*/
|
||||
static size_t async_release(struct qcomtee_object_invoke_ctx *oic,
|
||||
struct qcomtee_async_msg_hdr *async_msg,
|
||||
|
||||
@@ -112,7 +112,7 @@ union qcomtee_msg_arg {
|
||||
|
||||
/**
|
||||
* struct qcomtee_msg_object_invoke - Direct object invocation message.
|
||||
* @ctx: object ID hosted in QTEE.
|
||||
* @cxt: object ID hosted in QTEE.
|
||||
* @op: operation for the object.
|
||||
* @counts: number of different types of arguments in @args.
|
||||
* @args: array of arguments.
|
||||
|
||||
@@ -74,6 +74,7 @@ enum qcomtee_object_type {
|
||||
* @QCOMTEE_ARG_TYPE_OO: output object (OO).
|
||||
* @QCOMTEE_ARG_TYPE_IB: input buffer (IB).
|
||||
* @QCOMTEE_ARG_TYPE_IO: input object (IO).
|
||||
* @QCOMTEE_ARG_TYPE_NR: number of argument types.
|
||||
*
|
||||
* Use the invalid type to specify the end of the argument array.
|
||||
*/
|
||||
|
||||
@@ -343,6 +343,10 @@ int tee_dyn_shm_alloc_helper(struct tee_shm *shm, size_t size, size_t align,
|
||||
unsigned int i;
|
||||
int rc = 0;
|
||||
|
||||
/* get_order(0) is undefined and exceeds MAX_PAGE_ORDER. */
|
||||
if (!nr_pages)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Ignore alignment since this is already going to be page aligned
|
||||
* and there's no need for any larger alignment.
|
||||
|
||||
Reference in new issue
Block a user