Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+98 -25
+6 -5
arch/arm/boot/dts/bcm2711-rpi-4-b.dts
··· 40 40 regulator-always-on; 41 41 regulator-settling-time-us = <5000>; 42 42 gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>; 43 - states = <1800000 0x1 44 - 3300000 0x0>; 43 + states = <1800000 0x1>, 44 + <3300000 0x0>; 45 45 status = "okay"; 46 46 }; 47 47 ··· 217 217 }; 218 218 219 219 &pcie0 { 220 - pci@1,0 { 220 + pci@0,0 { 221 + device_type = "pci"; 221 222 #address-cells = <3>; 222 223 #size-cells = <2>; 223 224 ranges; 224 225 225 226 reg = <0 0 0 0 0>; 226 227 227 - usb@1,0 { 228 - reg = <0x10000 0 0 0 0>; 228 + usb@0,0 { 229 + reg = <0 0 0 0 0>; 229 230 resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>; 230 231 }; 231 232 };
+10 -2
arch/arm/boot/dts/bcm2711.dtsi
··· 300 300 status = "disabled"; 301 301 }; 302 302 303 + vec: vec@7ec13000 { 304 + compatible = "brcm,bcm2711-vec"; 305 + reg = <0x7ec13000 0x1000>; 306 + clocks = <&clocks BCM2835_CLOCK_VEC>; 307 + interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>; 308 + status = "disabled"; 309 + }; 310 + 303 311 dvp: clock@7ef00000 { 304 312 compatible = "brcm,brcm2711-dvp"; 305 313 reg = <0x7ef00000 0x10>; ··· 540 532 compatible = "brcm,genet-mdio-v5"; 541 533 reg = <0xe14 0x8>; 542 534 reg-names = "mdio"; 543 - #address-cells = <0x0>; 544 - #size-cells = <0x1>; 535 + #address-cells = <0x1>; 536 + #size-cells = <0x0>; 545 537 }; 546 538 }; 547 539 };
+8
arch/arm/boot/dts/bcm2835-common.dtsi
··· 106 106 status = "okay"; 107 107 }; 108 108 109 + vec: vec@7e806000 { 110 + compatible = "brcm,bcm2835-vec"; 111 + reg = <0x7e806000 0x1000>; 112 + clocks = <&clocks BCM2835_CLOCK_VEC>; 113 + interrupts = <2 27>; 114 + status = "disabled"; 115 + }; 116 + 109 117 pixelvalve@7e807000 { 110 118 compatible = "brcm,bcm2835-pixelvalve2"; 111 119 reg = <0x7e807000 0x100>;
-8
arch/arm/boot/dts/bcm283x.dtsi
··· 464 464 status = "disabled"; 465 465 }; 466 466 467 - vec: vec@7e806000 { 468 - compatible = "brcm,bcm2835-vec"; 469 - reg = <0x7e806000 0x1000>; 470 - clocks = <&clocks BCM2835_CLOCK_VEC>; 471 - interrupts = <2 27>; 472 - status = "disabled"; 473 - }; 474 - 475 467 usb: usb@7e980000 { 476 468 compatible = "brcm,bcm2835-usb"; 477 469 reg = <0x7e980000 0x10000>;
+31 -9
arch/arm/mach-imx/src.c
··· 9 9 #include <linux/iopoll.h> 10 10 #include <linux/of.h> 11 11 #include <linux/of_address.h> 12 + #include <linux/platform_device.h> 12 13 #include <linux/reset-controller.h> 13 14 #include <linux/smp.h> 14 15 #include <asm/smp_plat.h> ··· 80 79 81 80 static const struct reset_control_ops imx_src_ops = { 82 81 .reset = imx_src_reset_module, 83 - }; 84 - 85 - static struct reset_controller_dev imx_reset_controller = { 86 - .ops = &imx_src_ops, 87 - .nr_resets = ARRAY_SIZE(sw_reset_bits), 88 82 }; 89 83 90 84 static void imx_gpcv2_set_m_core_pgc(bool enable, u32 offset) ··· 173 177 src_base = of_iomap(np, 0); 174 178 WARN_ON(!src_base); 175 179 176 - imx_reset_controller.of_node = np; 177 - if (IS_ENABLED(CONFIG_RESET_CONTROLLER)) 178 - reset_controller_register(&imx_reset_controller); 179 - 180 180 /* 181 181 * force warm reset sources to generate cold reset 182 182 * for a more reliable restart ··· 206 214 if (!gpc_base) 207 215 return; 208 216 } 217 + 218 + static const struct of_device_id imx_src_dt_ids[] = { 219 + { .compatible = "fsl,imx51-src" }, 220 + { /* sentinel */ } 221 + }; 222 + 223 + static int imx_src_probe(struct platform_device *pdev) 224 + { 225 + struct reset_controller_dev *rcdev; 226 + 227 + rcdev = devm_kzalloc(&pdev->dev, sizeof(*rcdev), GFP_KERNEL); 228 + if (!rcdev) 229 + return -ENOMEM; 230 + 231 + rcdev->ops = &imx_src_ops; 232 + rcdev->dev = &pdev->dev; 233 + rcdev->of_node = pdev->dev.of_node; 234 + rcdev->nr_resets = ARRAY_SIZE(sw_reset_bits); 235 + 236 + return devm_reset_controller_register(&pdev->dev, rcdev); 237 + } 238 + 239 + static struct platform_driver imx_src_driver = { 240 + .driver = { 241 + .name = "imx-src", 242 + .of_match_table = imx_src_dt_ids, 243 + }, 244 + .probe = imx_src_probe, 245 + }; 246 + builtin_platform_driver(imx_src_driver);
+9 -1
drivers/firmware/arm_ffa/bus.c
··· 49 49 return ffa_drv->probe(ffa_dev); 50 50 } 51 51 52 + static void ffa_device_remove(struct device *dev) 53 + { 54 + struct ffa_driver *ffa_drv = to_ffa_driver(dev->driver); 55 + 56 + ffa_drv->remove(to_ffa_dev(dev)); 57 + } 58 + 52 59 static int ffa_device_uevent(struct device *dev, struct kobj_uevent_env *env) 53 60 { 54 61 struct ffa_device *ffa_dev = to_ffa_dev(dev); ··· 93 86 .name = "arm_ffa", 94 87 .match = ffa_device_match, 95 88 .probe = ffa_device_probe, 89 + .remove = ffa_device_remove, 96 90 .uevent = ffa_device_uevent, 97 91 .dev_groups = ffa_device_attributes_groups, 98 92 }; ··· 135 127 136 128 static int __ffa_devices_unregister(struct device *dev, void *data) 137 129 { 138 - ffa_release_device(dev); 130 + device_unregister(dev); 139 131 140 132 return 0; 141 133 }
+8
drivers/iommu/Kconfig
··· 355 355 'arm-smmu.disable_bypass' will continue to override this 356 356 config. 357 357 358 + config ARM_SMMU_QCOM 359 + def_tristate y 360 + depends on ARM_SMMU && ARCH_QCOM 361 + select QCOM_SCM 362 + help 363 + When running on a Qualcomm platform that has the custom variant 364 + of the ARM SMMU, this needs to be built into the SMMU driver. 365 + 358 366 config ARM_SMMU_V3 359 367 tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support" 360 368 depends on ARM64
+3
drivers/tee/optee/core.c
··· 585 585 { 586 586 struct optee *optee = platform_get_drvdata(pdev); 587 587 588 + /* Unregister OP-TEE specific client devices on TEE bus */ 589 + optee_unregister_devices(); 590 + 588 591 /* 589 592 * Ask OP-TEE to free all cached shared memory objects to decrease 590 593 * reference counters and also avoid wild pointers in secure world
+22
drivers/tee/optee/device.c
··· 53 53 return 0; 54 54 } 55 55 56 + static void optee_release_device(struct device *dev) 57 + { 58 + struct tee_client_device *optee_device = to_tee_client_device(dev); 59 + 60 + kfree(optee_device); 61 + } 62 + 56 63 static int optee_register_device(const uuid_t *device_uuid) 57 64 { 58 65 struct tee_client_device *optee_device = NULL; ··· 70 63 return -ENOMEM; 71 64 72 65 optee_device->dev.bus = &tee_bus_type; 66 + optee_device->dev.release = optee_release_device; 73 67 if (dev_set_name(&optee_device->dev, "optee-ta-%pUb", device_uuid)) { 74 68 kfree(optee_device); 75 69 return -ENOMEM; ··· 161 153 int optee_enumerate_devices(u32 func) 162 154 { 163 155 return __optee_enumerate_devices(func); 156 + } 157 + 158 + static int __optee_unregister_device(struct device *dev, void *data) 159 + { 160 + if (!strncmp(dev_name(dev), "optee-ta", strlen("optee-ta"))) 161 + device_unregister(dev); 162 + 163 + return 0; 164 + } 165 + 166 + void optee_unregister_devices(void) 167 + { 168 + bus_for_each_dev(&tee_bus_type, NULL, NULL, 169 + __optee_unregister_device); 164 170 }
+1
drivers/tee/optee/optee_private.h
··· 184 184 #define PTA_CMD_GET_DEVICES 0x0 185 185 #define PTA_CMD_GET_DEVICES_SUPP 0x1 186 186 int optee_enumerate_devices(u32 func); 187 + void optee_unregister_devices(void); 187 188 188 189 /* 189 190 * Small helpers