ARM: SoC fixes for 5.15, part 2
A small number fixes this time, mostly touching actual code: - Add platform device for i.MX System Reset Controller (SRC) to fix a regression caused by fw_devlink change. - A fixup for a boot regression caused by my own rework for the Qualcomm SCM driver. - Multiple bugfixes for the Arm FFA and optee firmware drivers, addressing problems when they are built as a loadable module. - Four dts bugfixes for the Broadcom SoC used in Raspberry pi, addressing VEC (video encoder), MDIO bus controller #address-cells/#size-cells, SDIO voltage and PCIe host bridge dtc warnings. Signed-off-by: Arnd Bergmann <arnd@arndb.de> -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmFp5goACgkQmmx57+YA GNkMiw/+JKDklazok+5dVmS22Or8q7rTXhWDO3ZrsjkjrsRB3J61Z8F0dhI9nxew 9qwScV2yFKdC6fMsUz7YOlcstzHUhmCwdazHMEXQy3lSynppZNCyYBaoTeWjw9Be QtHzPHfJ+RZsnQk7xWugH+9DIZPy5D2y5gecbcj7Qm2pAjBZgMNn93ppIebIbWWa UrPBns8tWjNoCMkXyEiWK8y9b8nW27AF9QKm2HGvyH/MIxo2xTGScNhY9OH7RxGk 9ZTnRWayHSxwsqCDglr5CY0LAhCKxwIvAYTy/AgeeLXOgLwUgfAeEDVaDLDpJEHf I9TfYCM5T0tVMtn2sW7uVIfWdTm8DV+YttSwIPMA0l8SL4beWqvWt8z7qGiigarl xKOKps/pex4u+lUQtNoAtveXrw2JlUXFfF8r0TygwtXqAKuzd0mwHwjPG4uprcyU 4kKq39tTthdtcOKRpmEEIvrg7nMVO+4Km56r2oDL9iXTXYP5tIgl+DoXgrqvu7ML 6CCc0zy1invDjoQmhCsPikFRweRGJXJS2yqLXngSBb8SdvW7nMflQPEhHO0AWwXB I8tRK+SjXP+N2IZNpnKd+s6BZTSa5boOaCs8wJHidk356VUajj90ckc1O9i5XOmz CSEW1sYnwUc5EnMjvtgQXVTexF2w6XA49mzl4a+ewMxeF3WEtEE= =87lq -----END PGP SIGNATURE----- Merge tag 'arm-soc-fixes-5.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc Pull ARM SoC fixes from Arnd Bergmann: "A small number fixes this time, mostly touching actual code: - Add platform device for i.MX System Reset Controller (SRC) to fix a regression caused by fw_devlink change - A fixup for a boot regression caused by my own rework for the Qualcomm SCM driver - Multiple bugfixes for the Arm FFA and optee firmware drivers, addressing problems when they are built as a loadable module - Four dts bugfixes for the Broadcom SoC used in Raspberry pi, addressing VEC (video encoder), MDIO bus controller #address-cells/#size-cells, SDIO voltage and PCIe host bridge dtc warnings" * tag 'arm-soc-fixes-5.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: ARM: imx: register reset controller from a platform driver iommu/arm: fix ARM_SMMU_QCOM compilation ARM: dts: bcm2711-rpi-4-b: Fix usb's unit address ARM: dts: bcm2711-rpi-4-b: Fix pcie0's unit address formatting tee: optee: Fix missing devices unregister during optee_remove ARM: dts: bcm2711-rpi-4-b: fix sd_io_1v8_reg regulator states ARM: dts: bcm2711: fix MDIO #address- and #size-cells ARM: dts: bcm283x: Fix VEC address for BCM2711 firmware: arm_ffa: Fix __ffa_devices_unregister firmware: arm_ffa: Add missing remove callback to ffa_bus_type
This commit is contained in:
commit
f04298169d
@ -40,8 +40,8 @@
|
||||
regulator-always-on;
|
||||
regulator-settling-time-us = <5000>;
|
||||
gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
|
||||
states = <1800000 0x1
|
||||
3300000 0x0>;
|
||||
states = <1800000 0x1>,
|
||||
<3300000 0x0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@ -217,15 +217,16 @@
|
||||
};
|
||||
|
||||
&pcie0 {
|
||||
pci@1,0 {
|
||||
pci@0,0 {
|
||||
device_type = "pci";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
reg = <0 0 0 0 0>;
|
||||
|
||||
usb@1,0 {
|
||||
reg = <0x10000 0 0 0 0>;
|
||||
usb@0,0 {
|
||||
reg = <0 0 0 0 0>;
|
||||
resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>;
|
||||
};
|
||||
};
|
||||
|
@ -300,6 +300,14 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
vec: vec@7ec13000 {
|
||||
compatible = "brcm,bcm2711-vec";
|
||||
reg = <0x7ec13000 0x1000>;
|
||||
clocks = <&clocks BCM2835_CLOCK_VEC>;
|
||||
interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dvp: clock@7ef00000 {
|
||||
compatible = "brcm,brcm2711-dvp";
|
||||
reg = <0x7ef00000 0x10>;
|
||||
@ -532,8 +540,8 @@
|
||||
compatible = "brcm,genet-mdio-v5";
|
||||
reg = <0xe14 0x8>;
|
||||
reg-names = "mdio";
|
||||
#address-cells = <0x0>;
|
||||
#size-cells = <0x1>;
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -106,6 +106,14 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
vec: vec@7e806000 {
|
||||
compatible = "brcm,bcm2835-vec";
|
||||
reg = <0x7e806000 0x1000>;
|
||||
clocks = <&clocks BCM2835_CLOCK_VEC>;
|
||||
interrupts = <2 27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pixelvalve@7e807000 {
|
||||
compatible = "brcm,bcm2835-pixelvalve2";
|
||||
reg = <0x7e807000 0x100>;
|
||||
|
@ -464,14 +464,6 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
vec: vec@7e806000 {
|
||||
compatible = "brcm,bcm2835-vec";
|
||||
reg = <0x7e806000 0x1000>;
|
||||
clocks = <&clocks BCM2835_CLOCK_VEC>;
|
||||
interrupts = <2 27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb: usb@7e980000 {
|
||||
compatible = "brcm,bcm2835-usb";
|
||||
reg = <0x7e980000 0x10000>;
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reset-controller.h>
|
||||
#include <linux/smp.h>
|
||||
#include <asm/smp_plat.h>
|
||||
@ -81,11 +82,6 @@ static const struct reset_control_ops imx_src_ops = {
|
||||
.reset = imx_src_reset_module,
|
||||
};
|
||||
|
||||
static struct reset_controller_dev imx_reset_controller = {
|
||||
.ops = &imx_src_ops,
|
||||
.nr_resets = ARRAY_SIZE(sw_reset_bits),
|
||||
};
|
||||
|
||||
static void imx_gpcv2_set_m_core_pgc(bool enable, u32 offset)
|
||||
{
|
||||
writel_relaxed(enable, gpc_base + offset);
|
||||
@ -177,10 +173,6 @@ void __init imx_src_init(void)
|
||||
src_base = of_iomap(np, 0);
|
||||
WARN_ON(!src_base);
|
||||
|
||||
imx_reset_controller.of_node = np;
|
||||
if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
|
||||
reset_controller_register(&imx_reset_controller);
|
||||
|
||||
/*
|
||||
* force warm reset sources to generate cold reset
|
||||
* for a more reliable restart
|
||||
@ -214,3 +206,33 @@ void __init imx7_src_init(void)
|
||||
if (!gpc_base)
|
||||
return;
|
||||
}
|
||||
|
||||
static const struct of_device_id imx_src_dt_ids[] = {
|
||||
{ .compatible = "fsl,imx51-src" },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
static int imx_src_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct reset_controller_dev *rcdev;
|
||||
|
||||
rcdev = devm_kzalloc(&pdev->dev, sizeof(*rcdev), GFP_KERNEL);
|
||||
if (!rcdev)
|
||||
return -ENOMEM;
|
||||
|
||||
rcdev->ops = &imx_src_ops;
|
||||
rcdev->dev = &pdev->dev;
|
||||
rcdev->of_node = pdev->dev.of_node;
|
||||
rcdev->nr_resets = ARRAY_SIZE(sw_reset_bits);
|
||||
|
||||
return devm_reset_controller_register(&pdev->dev, rcdev);
|
||||
}
|
||||
|
||||
static struct platform_driver imx_src_driver = {
|
||||
.driver = {
|
||||
.name = "imx-src",
|
||||
.of_match_table = imx_src_dt_ids,
|
||||
},
|
||||
.probe = imx_src_probe,
|
||||
};
|
||||
builtin_platform_driver(imx_src_driver);
|
||||
|
@ -49,6 +49,13 @@ static int ffa_device_probe(struct device *dev)
|
||||
return ffa_drv->probe(ffa_dev);
|
||||
}
|
||||
|
||||
static void ffa_device_remove(struct device *dev)
|
||||
{
|
||||
struct ffa_driver *ffa_drv = to_ffa_driver(dev->driver);
|
||||
|
||||
ffa_drv->remove(to_ffa_dev(dev));
|
||||
}
|
||||
|
||||
static int ffa_device_uevent(struct device *dev, struct kobj_uevent_env *env)
|
||||
{
|
||||
struct ffa_device *ffa_dev = to_ffa_dev(dev);
|
||||
@ -86,6 +93,7 @@ struct bus_type ffa_bus_type = {
|
||||
.name = "arm_ffa",
|
||||
.match = ffa_device_match,
|
||||
.probe = ffa_device_probe,
|
||||
.remove = ffa_device_remove,
|
||||
.uevent = ffa_device_uevent,
|
||||
.dev_groups = ffa_device_attributes_groups,
|
||||
};
|
||||
@ -127,7 +135,7 @@ static void ffa_release_device(struct device *dev)
|
||||
|
||||
static int __ffa_devices_unregister(struct device *dev, void *data)
|
||||
{
|
||||
ffa_release_device(dev);
|
||||
device_unregister(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -355,6 +355,14 @@ config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
|
||||
'arm-smmu.disable_bypass' will continue to override this
|
||||
config.
|
||||
|
||||
config ARM_SMMU_QCOM
|
||||
def_tristate y
|
||||
depends on ARM_SMMU && ARCH_QCOM
|
||||
select QCOM_SCM
|
||||
help
|
||||
When running on a Qualcomm platform that has the custom variant
|
||||
of the ARM SMMU, this needs to be built into the SMMU driver.
|
||||
|
||||
config ARM_SMMU_V3
|
||||
tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
|
||||
depends on ARM64
|
||||
|
@ -585,6 +585,9 @@ static int optee_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct optee *optee = platform_get_drvdata(pdev);
|
||||
|
||||
/* Unregister OP-TEE specific client devices on TEE bus */
|
||||
optee_unregister_devices();
|
||||
|
||||
/*
|
||||
* Ask OP-TEE to free all cached shared memory objects to decrease
|
||||
* reference counters and also avoid wild pointers in secure world
|
||||
|
@ -53,6 +53,13 @@ static int get_devices(struct tee_context *ctx, u32 session,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void optee_release_device(struct device *dev)
|
||||
{
|
||||
struct tee_client_device *optee_device = to_tee_client_device(dev);
|
||||
|
||||
kfree(optee_device);
|
||||
}
|
||||
|
||||
static int optee_register_device(const uuid_t *device_uuid)
|
||||
{
|
||||
struct tee_client_device *optee_device = NULL;
|
||||
@ -63,6 +70,7 @@ static int optee_register_device(const uuid_t *device_uuid)
|
||||
return -ENOMEM;
|
||||
|
||||
optee_device->dev.bus = &tee_bus_type;
|
||||
optee_device->dev.release = optee_release_device;
|
||||
if (dev_set_name(&optee_device->dev, "optee-ta-%pUb", device_uuid)) {
|
||||
kfree(optee_device);
|
||||
return -ENOMEM;
|
||||
@ -154,3 +162,17 @@ int optee_enumerate_devices(u32 func)
|
||||
{
|
||||
return __optee_enumerate_devices(func);
|
||||
}
|
||||
|
||||
static int __optee_unregister_device(struct device *dev, void *data)
|
||||
{
|
||||
if (!strncmp(dev_name(dev), "optee-ta", strlen("optee-ta")))
|
||||
device_unregister(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void optee_unregister_devices(void)
|
||||
{
|
||||
bus_for_each_dev(&tee_bus_type, NULL, NULL,
|
||||
__optee_unregister_device);
|
||||
}
|
||||
|
@ -184,6 +184,7 @@ void optee_fill_pages_list(u64 *dst, struct page **pages, int num_pages,
|
||||
#define PTA_CMD_GET_DEVICES 0x0
|
||||
#define PTA_CMD_GET_DEVICES_SUPP 0x1
|
||||
int optee_enumerate_devices(u32 func);
|
||||
void optee_unregister_devices(void);
|
||||
|
||||
/*
|
||||
* Small helpers
|
||||
|
Loading…
Reference in New Issue
Block a user