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

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

Pull more ARM SoC updates from Arnd Bergmann:
"These updates came in after I had already tagged the branches, but
they still seem appropriate for 6.0 and most of them were part of
linux-next through other trees.

- The reset controller tree adds one new driver for the TI TPS380x
power management chip and a few minor changes in other drivers

- Apple M1 now has a DT entry for the NVMe controller after the
driver was merged, and has a new mailing list in the MAINTAINERS
file.

- Fixes for USB on the Socionext Uniphier platforms and the network
controller on Intel Cyclone5"

* tag 'arm-late-6.0' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc:
arm64: dts: uniphier: Fix USB interrupts for PXs3 SoC
ARM: dts: uniphier: Fix USB interrupts for PXs2 SoC
arm64: dts: apple: t8103: Add ANS2 NVMe nodes
reset: tps380x: Fix spelling mistake "Voltags" -> "Voltage"
reset: tps380x: Add TPS380x device driver supprt
dt-bindings: reset: Add TPS380x documentation
dt-bindings: reset: renesas,rzg2l-usbphy-ctrl: Document RZ/G2UL USBPHY Control bindings
ARM: dts: add EMAC AXI settings for Cyclone5
reset: reset-simple should depends on HAS_IOMEM
Revert "reset: microchip-sparx5: allow building as a module"
reset: a10sr: allow building under COMPILE_TEST
reset: allow building of reset simple driver if expert config selected
reset: microchip-sparx5: allow building as a module
arm64: dts: apple: Re-parent ANS2 power domains
MAINTAINERS: add ARM/APPLE MACHINE mailing list

+240 -16
+1
Documentation/devicetree/bindings/reset/renesas,rzg2l-usbphy-ctrl.yaml
··· 17 17 compatible: 18 18 items: 19 19 - enum: 20 + - renesas,r9a07g043-usbphy-ctrl # RZ/G2UL 20 21 - renesas,r9a07g044-usbphy-ctrl # RZ/G2{L,LC} 21 22 - renesas,r9a07g054-usbphy-ctrl # RZ/V2L 22 23 - const: renesas,rzg2l-usbphy-ctrl
+49
Documentation/devicetree/bindings/reset/ti,tps380x-reset.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/reset/ti,tps380x-reset.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: TI TPS380x reset controller node bindings 8 + 9 + maintainers: 10 + - Marco Felsch <kernel@pengutronix.de> 11 + 12 + description: | 13 + The TPS380x family [1] of supervisory circuits monitor supply voltages to 14 + provide circuit initialization and timing supervision. The devices assert a 15 + RESET signal if the voltage drops below a preset threshold or upon a manual 16 + reset input (MR). The RESET output remains asserted for the factory 17 + programmed delay after the voltage return above its threshold or after the 18 + manual reset input is released. 19 + 20 + [1] https://www.ti.com/product/TPS3801 21 + 22 + properties: 23 + compatible: 24 + enum: 25 + - ti,tps3801 26 + 27 + reset-gpios: 28 + maxItems: 1 29 + description: Reference to the GPIO connected to the MR pin. 30 + 31 + "#reset-cells": 32 + const: 0 33 + 34 + required: 35 + - compatible 36 + - reset-gpios 37 + - "#reset-cells" 38 + 39 + additionalProperties: false 40 + 41 + examples: 42 + - | 43 + #include <dt-bindings/gpio/gpio.h> 44 + reset: reset-controller { 45 + compatible = "ti,tps3801"; 46 + #reset-cells = <0>; 47 + reset-gpios = <&gpio3 2 GPIO_ACTIVE_LOW>; 48 + }; 49 + ...
+1
MAINTAINERS
··· 1850 1850 M: Hector Martin <marcan@marcan.st> 1851 1851 M: Sven Peter <sven@svenpeter.dev> 1852 1852 R: Alyssa Rosenzweig <alyssa@rosenzweig.io> 1853 + L: asahi@lists.linux.dev 1853 1854 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1854 1855 S: Maintained 1855 1856 W: https://asahilinux.org
+8
arch/arm/boot/dts/socfpga.dtsi
··· 561 561 interrupts = <0 175 4>; 562 562 }; 563 563 564 + socfpga_axi_setup: stmmac-axi-config { 565 + snps,wr_osr_lmt = <0xf>; 566 + snps,rd_osr_lmt = <0xf>; 567 + snps,blen = <0 0 0 0 16 0 0>; 568 + }; 569 + 564 570 gmac0: ethernet@ff700000 { 565 571 compatible = "altr,socfpga-stmmac", "snps,dwmac-3.70a", "snps,dwmac"; 566 572 altr,sysmgr-syscon = <&sysmgr 0x60 0>; ··· 582 576 snps,perfect-filter-entries = <128>; 583 577 tx-fifo-depth = <4096>; 584 578 rx-fifo-depth = <4096>; 579 + snps,axi-config = <&socfpga_axi_setup>; 585 580 status = "disabled"; 586 581 }; 587 582 ··· 601 594 snps,perfect-filter-entries = <128>; 602 595 tx-fifo-depth = <4096>; 603 596 rx-fifo-depth = <4096>; 597 + snps,axi-config = <&socfpga_axi_setup>; 604 598 status = "disabled"; 605 599 }; 606 600
+4 -4
arch/arm/boot/dts/uniphier-pxs2.dtsi
··· 597 597 compatible = "socionext,uniphier-dwc3", "snps,dwc3"; 598 598 status = "disabled"; 599 599 reg = <0x65a00000 0xcd00>; 600 - interrupt-names = "host", "peripheral"; 601 - interrupts = <0 134 4>, <0 135 4>; 600 + interrupt-names = "dwc_usb3"; 601 + interrupts = <0 134 4>; 602 602 pinctrl-names = "default"; 603 603 pinctrl-0 = <&pinctrl_usb0>, <&pinctrl_usb2>; 604 604 clock-names = "ref", "bus_early", "suspend"; ··· 693 693 compatible = "socionext,uniphier-dwc3", "snps,dwc3"; 694 694 status = "disabled"; 695 695 reg = <0x65c00000 0xcd00>; 696 - interrupt-names = "host", "peripheral"; 697 - interrupts = <0 137 4>, <0 138 4>; 696 + interrupt-names = "dwc_usb3"; 697 + interrupts = <0 137 4>; 698 698 pinctrl-names = "default"; 699 699 pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb3>; 700 700 clock-names = "ref", "bus_early", "suspend";
+1 -6
arch/arm64/boot/dts/apple/t8103-pmgr.dtsi
··· 725 725 #power-domain-cells = <0>; 726 726 #reset-cells = <0>; 727 727 label = "ans2"; 728 - /* 729 - * The ADT makes ps_apcie_st depend on ps_ans2 instead, but this 730 - * doesn't make much sense since ANS2 uses APCIE_ST. 731 - */ 732 - power-domains = <&ps_apcie_st>; 733 728 }; 734 729 735 730 ps_gfx: power-controller@3f8 { ··· 831 836 #power-domain-cells = <0>; 832 837 #reset-cells = <0>; 833 838 label = "apcie_st"; 834 - power-domains = <&ps_apcie>; 839 + power-domains = <&ps_apcie>, <&ps_ans2>; 835 840 }; 836 841 837 842 ps_ane_sys: power-controller@470 {
+34
arch/arm64/boot/dts/apple/t8103.dtsi
··· 378 378 <AIC_IRQ 274 IRQ_TYPE_LEVEL_HIGH>; 379 379 }; 380 380 381 + ans_mbox: mbox@277408000 { 382 + compatible = "apple,t8103-asc-mailbox", "apple,asc-mailbox-v4"; 383 + reg = <0x2 0x77408000 0x0 0x4000>; 384 + interrupt-parent = <&aic>; 385 + interrupts = <AIC_IRQ 583 IRQ_TYPE_LEVEL_HIGH>, 386 + <AIC_IRQ 584 IRQ_TYPE_LEVEL_HIGH>, 387 + <AIC_IRQ 585 IRQ_TYPE_LEVEL_HIGH>, 388 + <AIC_IRQ 586 IRQ_TYPE_LEVEL_HIGH>; 389 + interrupt-names = "send-empty", "send-not-empty", 390 + "recv-empty", "recv-not-empty"; 391 + #mbox-cells = <0>; 392 + power-domains = <&ps_ans2>; 393 + }; 394 + 395 + sart: iommu@27bc50000 { 396 + compatible = "apple,t8103-sart"; 397 + reg = <0x2 0x7bc50000 0x0 0x10000>; 398 + power-domains = <&ps_ans2>; 399 + }; 400 + 401 + nvme@27bcc0000 { 402 + compatible = "apple,t8103-nvme-ans2", "apple,nvme-ans2"; 403 + reg = <0x2 0x7bcc0000 0x0 0x40000>, 404 + <0x2 0x77400000 0x0 0x4000>; 405 + reg-names = "nvme", "ans"; 406 + interrupt-parent = <&aic>; 407 + interrupts = <AIC_IRQ 590 IRQ_TYPE_LEVEL_HIGH>; 408 + mboxes = <&ans_mbox>; 409 + apple,sart = <&sart>; 410 + power-domains = <&ps_ans2>, <&ps_apcie_st>; 411 + power-domain-names = "ans", "apcie0"; 412 + resets = <&ps_ans2>; 413 + }; 414 + 381 415 pcie0_dart_0: dart@681008000 { 382 416 compatible = "apple,t8103-dart"; 383 417 reg = <0x6 0x81008000 0x0 0x4000>;
+4 -4
arch/arm64/boot/dts/socionext/uniphier-pxs3.dtsi
··· 599 599 compatible = "socionext,uniphier-dwc3", "snps,dwc3"; 600 600 status = "disabled"; 601 601 reg = <0x65a00000 0xcd00>; 602 - interrupt-names = "host", "peripheral"; 603 - interrupts = <0 134 4>, <0 135 4>; 602 + interrupt-names = "dwc_usb3"; 603 + interrupts = <0 134 4>; 604 604 pinctrl-names = "default"; 605 605 pinctrl-0 = <&pinctrl_usb0>, <&pinctrl_usb2>; 606 606 clock-names = "ref", "bus_early", "suspend"; ··· 701 701 compatible = "socionext,uniphier-dwc3", "snps,dwc3"; 702 702 status = "disabled"; 703 703 reg = <0x65c00000 0xcd00>; 704 - interrupt-names = "host", "peripheral"; 705 - interrupts = <0 137 4>, <0 138 4>; 704 + interrupt-names = "dwc_usb3"; 705 + interrupts = <0 137 4>; 706 706 pinctrl-names = "default"; 707 707 pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb3>; 708 708 clock-names = "ref", "bus_early", "suspend";
+11 -2
drivers/reset/Kconfig
··· 17 17 18 18 config RESET_A10SR 19 19 tristate "Altera Arria10 System Resource Reset" 20 - depends on MFD_ALTERA_A10SR 20 + depends on MFD_ALTERA_A10SR || COMPILE_TEST 21 21 help 22 22 This option enables support for the external reset functions for 23 23 peripheral PHYs on the Altera Arria10 System Resource Chip. ··· 200 200 firmware controlling all the reset signals. 201 201 202 202 config RESET_SIMPLE 203 - bool "Simple Reset Controller Driver" if COMPILE_TEST 203 + bool "Simple Reset Controller Driver" if COMPILE_TEST || EXPERT 204 204 default ARCH_ASPEED || ARCH_BCM4908 || ARCH_BITMAIN || ARCH_REALTEK || ARCH_STM32 || (ARCH_INTEL_SOCFPGA && ARM64) || ARCH_SUNXI || ARC 205 + depends on HAS_IOMEM 205 206 help 206 207 This enables a simple reset controller driver for reset lines that 207 208 that can be asserted and deasserted by toggling bits in a contiguous, ··· 265 264 memory-mapped reset registers as part of a syscon device node. If 266 265 you wish to use the reset framework for such memory-mapped devices, 267 266 say Y here. Otherwise, say N. 267 + 268 + config RESET_TI_TPS380X 269 + tristate "TI TPS380x Reset Driver" 270 + select GPIOLIB 271 + help 272 + This enables the reset driver support for TI TPS380x devices. If 273 + you wish to use the reset framework for such devices, say Y here. 274 + Otherwise, say N. 268 275 269 276 config RESET_TN48M_CPLD 270 277 tristate "Delta Networks TN48M switch CPLD reset controller"
+1
drivers/reset/Makefile
··· 34 34 obj-$(CONFIG_RESET_SUNXI) += reset-sunxi.o 35 35 obj-$(CONFIG_RESET_TI_SCI) += reset-ti-sci.o 36 36 obj-$(CONFIG_RESET_TI_SYSCON) += reset-ti-syscon.o 37 + obj-$(CONFIG_RESET_TI_TPS380X) += reset-tps380x.o 37 38 obj-$(CONFIG_RESET_TN48M_CPLD) += reset-tn48m.o 38 39 obj-$(CONFIG_RESET_UNIPHIER) += reset-uniphier.o 39 40 obj-$(CONFIG_RESET_UNIPHIER_GLUE) += reset-uniphier-glue.o
+126
drivers/reset/reset-tps380x.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * TI TPS380x Supply Voltage Supervisor and Reset Controller Driver 4 + * 5 + * Copyright (C) 2022 Pengutronix, Marco Felsch <kernel@pengutronix.de> 6 + * 7 + * Based on Simple Reset Controller Driver 8 + * 9 + * Copyright (C) 2017 Pengutronix, Philipp Zabel <kernel@pengutronix.de> 10 + */ 11 + 12 + #include <linux/delay.h> 13 + #include <linux/gpio/consumer.h> 14 + #include <linux/module.h> 15 + #include <linux/of.h> 16 + #include <linux/platform_device.h> 17 + #include <linux/property.h> 18 + #include <linux/reset-controller.h> 19 + 20 + struct tps380x_reset { 21 + struct reset_controller_dev rcdev; 22 + struct gpio_desc *reset_gpio; 23 + unsigned int reset_ms; 24 + }; 25 + 26 + struct tps380x_reset_devdata { 27 + unsigned int min_reset_ms; 28 + unsigned int typ_reset_ms; 29 + unsigned int max_reset_ms; 30 + }; 31 + 32 + static inline 33 + struct tps380x_reset *to_tps380x_reset(struct reset_controller_dev *rcdev) 34 + { 35 + return container_of(rcdev, struct tps380x_reset, rcdev); 36 + } 37 + 38 + static int 39 + tps380x_reset_assert(struct reset_controller_dev *rcdev, unsigned long id) 40 + { 41 + struct tps380x_reset *tps380x = to_tps380x_reset(rcdev); 42 + 43 + gpiod_set_value_cansleep(tps380x->reset_gpio, 1); 44 + 45 + return 0; 46 + } 47 + 48 + static int 49 + tps380x_reset_deassert(struct reset_controller_dev *rcdev, unsigned long id) 50 + { 51 + struct tps380x_reset *tps380x = to_tps380x_reset(rcdev); 52 + 53 + gpiod_set_value_cansleep(tps380x->reset_gpio, 0); 54 + msleep(tps380x->reset_ms); 55 + 56 + return 0; 57 + } 58 + 59 + static const struct reset_control_ops reset_tps380x_ops = { 60 + .assert = tps380x_reset_assert, 61 + .deassert = tps380x_reset_deassert, 62 + }; 63 + 64 + static int tps380x_reset_of_xlate(struct reset_controller_dev *rcdev, 65 + const struct of_phandle_args *reset_spec) 66 + { 67 + /* No special handling needed, we have only one reset line per device */ 68 + return 0; 69 + } 70 + 71 + static int tps380x_reset_probe(struct platform_device *pdev) 72 + { 73 + struct device *dev = &pdev->dev; 74 + const struct tps380x_reset_devdata *devdata; 75 + struct tps380x_reset *tps380x; 76 + 77 + devdata = device_get_match_data(dev); 78 + if (!devdata) 79 + return -EINVAL; 80 + 81 + tps380x = devm_kzalloc(dev, sizeof(*tps380x), GFP_KERNEL); 82 + if (!tps380x) 83 + return -ENOMEM; 84 + 85 + tps380x->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); 86 + if (IS_ERR(tps380x->reset_gpio)) 87 + return dev_err_probe(dev, PTR_ERR(tps380x->reset_gpio), 88 + "Failed to get GPIO\n"); 89 + 90 + tps380x->reset_ms = devdata->max_reset_ms; 91 + 92 + tps380x->rcdev.ops = &reset_tps380x_ops; 93 + tps380x->rcdev.owner = THIS_MODULE; 94 + tps380x->rcdev.dev = dev; 95 + tps380x->rcdev.of_node = dev->of_node; 96 + tps380x->rcdev.of_reset_n_cells = 0; 97 + tps380x->rcdev.of_xlate = tps380x_reset_of_xlate; 98 + tps380x->rcdev.nr_resets = 1; 99 + 100 + return devm_reset_controller_register(dev, &tps380x->rcdev); 101 + } 102 + 103 + static const struct tps380x_reset_devdata tps3801_reset_data = { 104 + .min_reset_ms = 120, 105 + .typ_reset_ms = 200, 106 + .max_reset_ms = 280, 107 + }; 108 + 109 + static const struct of_device_id tps380x_reset_dt_ids[] = { 110 + { .compatible = "ti,tps3801", .data = &tps3801_reset_data }, 111 + { /* sentinel */ }, 112 + }; 113 + MODULE_DEVICE_TABLE(of, tps380x_reset_dt_ids); 114 + 115 + static struct platform_driver tps380x_reset_driver = { 116 + .probe = tps380x_reset_probe, 117 + .driver = { 118 + .name = "tps380x-reset", 119 + .of_match_table = tps380x_reset_dt_ids, 120 + }, 121 + }; 122 + module_platform_driver(tps380x_reset_driver); 123 + 124 + MODULE_AUTHOR("Marco Felsch <kernel@pengutronix.de>"); 125 + MODULE_DESCRIPTION("TI TPS380x Supply Voltage Supervisor and Reset Driver"); 126 + MODULE_LICENSE("GPL v2");