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

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

Pull 32-bit ARM SoC updates from Arnd Bergmann:
"These updates are for platform specific code in arch/arm/, mostly
fixing minor issues.

The at91 platform gains support for better power management on the
lan966 platform and new firmware on the sama5 platform. The mediatek
soc drivers in turn are enabled for the new mt8195 SoC"

* tag 'arm-soc-5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (34 commits)
ARM: at91: debug: add lan966 support
ARM: at91: pm: add support for sama5d2 secure suspend
ARM: at91: add code to handle secure calls
ARM: at91: Kconfig: implement PIT64B selection
ARM: at91: pm: add quirks for pm
ARM: at91: pm: use kernel documentation style
ARM: at91: pm: introduce macros for pm mode replacement
ARM: at91: pm: keep documentation inline with structure members
orion5x: fix typos in comments
ARM: hisi: Add missing of_node_put after of_find_compatible_node
ARM: shmobile: rcar-gen2: Drop comma after OF match table sentinel
ARM: shmobile: Drop commas after dt_compat sentinels
soc: mediatek: mutex: remove mt8195 MOD0 and SOF0 definition
MAINTAINERS: Add Broadcom BCMBCA entry
arm: bcmbca: add arch bcmbca machine entry
MAINTAINERS: Broadcom internal lists aren't maintainers
dt-bindings: pwrap: mediatek: Update pwrap document for mt8195
soc: mediatek: add DDP_DOMPONENT_DITHER0 enum for mt8195 vdosys0
soc: mediatek: add mtk-mutex support for mt8195 vdosys0
soc: mediatek: add mtk-mmsys support for mt8195 vdosys0
...

+1281 -187
+32
Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
··· 31 31 - mediatek,mt8183-mmsys 32 32 - mediatek,mt8186-mmsys 33 33 - mediatek,mt8192-mmsys 34 + - mediatek,mt8195-mmsys 34 35 - mediatek,mt8365-mmsys 35 36 - const: syscon 36 37 - items: ··· 40 39 - const: syscon 41 40 42 41 reg: 42 + maxItems: 1 43 + 44 + power-domains: 45 + description: 46 + A phandle and PM domain specifier as defined by bindings 47 + of the power controller specified by phandle. See 48 + Documentation/devicetree/bindings/power/power-domain.yaml for details. 49 + 50 + mboxes: 51 + description: 52 + Using mailbox to communicate with GCE, it should have this 53 + property and list of phandle, mailbox specifiers. See 54 + Documentation/devicetree/bindings/mailbox/mtk-gce.txt for details. 55 + $ref: /schemas/types.yaml#/definitions/phandle-array 56 + 57 + mediatek,gce-client-reg: 58 + description: 59 + The register of client driver can be configured by gce with 4 arguments 60 + defined in this property, such as phandle of gce, subsys id, 61 + register offset and size. 62 + Each subsys id is mapping to a base address of display function blocks 63 + register which is defined in the gce header 64 + include/dt-bindings/gce/<chip>-gce.h. 65 + $ref: /schemas/types.yaml#/definitions/phandle-array 43 66 maxItems: 1 44 67 45 68 "#clock-cells": ··· 81 56 82 57 examples: 83 58 - | 59 + #include <dt-bindings/power/mt8173-power.h> 60 + #include <dt-bindings/gce/mt8173-gce.h> 61 + 84 62 mmsys: syscon@14000000 { 85 63 compatible = "mediatek,mt8173-mmsys", "syscon"; 86 64 reg = <0x14000000 0x1000>; 65 + power-domains = <&spm MT8173_POWER_DOMAIN_MM>; 87 66 #clock-cells = <1>; 88 67 #reset-cells = <1>; 68 + mboxes = <&gce 0 CMDQ_THR_PRIO_HIGHEST>, 69 + <&gce 1 CMDQ_THR_PRIO_HIGHEST>; 70 + mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0 0x1000>; 89 71 };
+5 -5
Documentation/devicetree/bindings/soc/mediatek/pwrap.txt
··· 31 31 "mediatek,mt8195-pwrap" for MT8195 SoCs 32 32 "mediatek,mt8516-pwrap" for MT8516 SoCs 33 33 - interrupts: IRQ for pwrap in SOC 34 - - reg-names: Must include the following entries: 34 + - reg-names: "pwrap" is required; "pwrap-bridge" is optional. 35 35 "pwrap": Main registers base 36 36 "pwrap-bridge": bridge base (IP Pairing) 37 37 - reg: Must contain an entry for each entry in reg-names. 38 - - reset-names: Must include the following entries: 39 - "pwrap" 40 - "pwrap-bridge" (IP Pairing) 41 - - resets: Must contain an entry for each entry in reset-names. 42 38 - clock-names: Must include the following entries: 43 39 "spi": SPI bus clock 44 40 "wrap": Main module clock 45 41 - clocks: Must contain an entry for each entry in clock-names. 46 42 47 43 Optional properities: 44 + - reset-names: Some SoCs include the following entries: 45 + "pwrap" 46 + "pwrap-bridge" (IP Pairing) 47 + - resets: Must contain an entry for each entry in reset-names. 48 48 - pmic: Using either MediaTek PMIC MFD as the child device of pwrap 49 49 See the following for child node definitions: 50 50 Documentation/devicetree/bindings/mfd/mt6397.txt
+47 -32
MAINTAINERS
··· 3753 3753 F: include/linux/dsa/brcm.h 3754 3754 F: include/linux/platform_data/b53.h 3755 3755 3756 + BROADCOM BCMBCA ARM ARCHITECTURE 3757 + M: William Zhang <william.zhang@broadcom.com> 3758 + M: Anand Gore <anand.gore@broadcom.com> 3759 + M: Kursad Oney <kursad.oney@broadcom.com> 3760 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3761 + L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3762 + S: Maintained 3763 + T: git git://github.com/broadcom/stblinux.git 3764 + F: Documentation/devicetree/bindings/arm/bcm/brcm,bcmbca.yaml 3765 + F: arch/arm/boot/dts/bcm47622.dtsi 3766 + F: arch/arm/boot/dts/bcm947622.dts 3767 + N: bcmbca 3768 + N: bcm[9]?47622 3769 + 3756 3770 BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE 3757 3771 M: Nicolas Saenz Julienne <nsaenz@kernel.org> 3758 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3772 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3759 3773 L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers) 3760 3774 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3761 3775 S: Maintained ··· 3779 3765 F: drivers/staging/vc04_services 3780 3766 N: bcm2711 3781 3767 N: bcm283* 3768 + N: raspberrypi 3782 3769 3783 3770 BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE 3784 3771 M: Florian Fainelli <f.fainelli@gmail.com> 3785 3772 M: Ray Jui <rjui@broadcom.com> 3786 3773 M: Scott Branden <sbranden@broadcom.com> 3787 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3774 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3788 3775 S: Maintained 3789 3776 T: git git://github.com/broadcom/mach-bcm 3790 3777 F: arch/arm/mach-bcm/ ··· 3805 3790 3806 3791 BROADCOM BCM4908 ETHERNET DRIVER 3807 3792 M: Rafał Miłecki <rafal@milecki.pl> 3808 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3793 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3809 3794 L: netdev@vger.kernel.org 3810 3795 S: Maintained 3811 3796 F: Documentation/devicetree/bindings/net/brcm,bcm4908-enet.yaml ··· 3814 3799 3815 3800 BROADCOM BCM4908 PINMUX DRIVER 3816 3801 M: Rafał Miłecki <rafal@milecki.pl> 3817 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3802 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3818 3803 L: linux-gpio@vger.kernel.org 3819 3804 S: Maintained 3820 3805 F: Documentation/devicetree/bindings/pinctrl/brcm,bcm4908-pinctrl.yaml ··· 3824 3809 M: Florian Fainelli <f.fainelli@gmail.com> 3825 3810 M: Hauke Mehrtens <hauke@hauke-m.de> 3826 3811 M: Rafał Miłecki <zajec5@gmail.com> 3827 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3812 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3828 3813 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3829 3814 S: Maintained 3830 3815 F: arch/arm/boot/dts/bcm470* ··· 3835 3820 BROADCOM BCM53573 ARM ARCHITECTURE 3836 3821 M: Florian Fainelli <f.fainelli@gmail.com> 3837 3822 M: Rafał Miłecki <rafal@milecki.pl> 3838 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3823 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3839 3824 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3840 3825 S: Maintained 3841 3826 F: arch/arm/boot/dts/bcm47189* ··· 3843 3828 3844 3829 BROADCOM BCM63XX ARM ARCHITECTURE 3845 3830 M: Florian Fainelli <f.fainelli@gmail.com> 3846 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3831 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3847 3832 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3848 3833 S: Maintained 3849 3834 T: git git://github.com/broadcom/stblinux.git ··· 3857 3842 3858 3843 BROADCOM BCM7XXX ARM ARCHITECTURE 3859 3844 M: Florian Fainelli <f.fainelli@gmail.com> 3860 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3845 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3861 3846 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3862 3847 S: Maintained 3863 3848 T: git git://github.com/broadcom/stblinux.git ··· 3875 3860 BROADCOM BDC DRIVER 3876 3861 M: Al Cooper <alcooperx@gmail.com> 3877 3862 L: linux-usb@vger.kernel.org 3878 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3863 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3879 3864 S: Maintained 3880 3865 F: Documentation/devicetree/bindings/usb/brcm,bdc.yaml 3881 3866 F: drivers/usb/gadget/udc/bdc/ 3882 3867 3883 3868 BROADCOM BMIPS CPUFREQ DRIVER 3884 3869 M: Markus Mayer <mmayer@broadcom.com> 3885 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3870 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3886 3871 L: linux-pm@vger.kernel.org 3887 3872 S: Maintained 3888 3873 F: drivers/cpufreq/bmips-cpufreq.c 3889 3874 3890 3875 BROADCOM BMIPS MIPS ARCHITECTURE 3891 3876 M: Florian Fainelli <f.fainelli@gmail.com> 3892 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3877 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3893 3878 L: linux-mips@vger.kernel.org 3894 3879 S: Maintained 3895 3880 T: git git://github.com/broadcom/stblinux.git ··· 3957 3942 BROADCOM BRCMSTB GPIO DRIVER 3958 3943 M: Doug Berger <opendmb@gmail.com> 3959 3944 M: Florian Fainelli <f.fainelli@gmail.com> 3960 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3945 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3961 3946 S: Supported 3962 3947 F: Documentation/devicetree/bindings/gpio/brcm,brcmstb-gpio.yaml 3963 3948 F: drivers/gpio/gpio-brcmstb.c 3964 3949 3965 3950 BROADCOM BRCMSTB I2C DRIVER 3966 3951 M: Kamal Dasu <kdasu.kdev@gmail.com> 3967 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3952 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3968 3953 L: linux-i2c@vger.kernel.org 3969 3954 S: Supported 3970 3955 F: Documentation/devicetree/bindings/i2c/brcm,brcmstb-i2c.yaml ··· 3972 3957 3973 3958 BROADCOM BRCMSTB UART DRIVER 3974 3959 M: Al Cooper <alcooperx@gmail.com> 3975 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3960 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3976 3961 L: linux-serial@vger.kernel.org 3977 3962 S: Maintained 3978 3963 F: Documentation/devicetree/bindings/serial/brcm,bcm7271-uart.yaml ··· 3980 3965 3981 3966 BROADCOM BRCMSTB USB EHCI DRIVER 3982 3967 M: Al Cooper <alcooperx@gmail.com> 3983 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3968 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3984 3969 L: linux-usb@vger.kernel.org 3985 3970 S: Maintained 3986 3971 F: Documentation/devicetree/bindings/usb/brcm,bcm7445-ehci.yaml ··· 3988 3973 3989 3974 BROADCOM BRCMSTB USB PIN MAP DRIVER 3990 3975 M: Al Cooper <alcooperx@gmail.com> 3991 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3976 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3992 3977 L: linux-usb@vger.kernel.org 3993 3978 S: Maintained 3994 3979 F: Documentation/devicetree/bindings/usb/brcm,usb-pinmap.yaml ··· 3996 3981 3997 3982 BROADCOM BRCMSTB USB2 and USB3 PHY DRIVER 3998 3983 M: Al Cooper <alcooperx@gmail.com> 3999 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3984 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4000 3985 L: linux-kernel@vger.kernel.org 4001 3986 S: Maintained 4002 3987 F: drivers/phy/broadcom/phy-brcm-usb* 4003 3988 4004 3989 BROADCOM ETHERNET PHY DRIVERS 4005 3990 M: Florian Fainelli <f.fainelli@gmail.com> 4006 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 3991 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4007 3992 L: netdev@vger.kernel.org 4008 3993 S: Supported 4009 3994 F: Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt ··· 4014 3999 BROADCOM GENET ETHERNET DRIVER 4015 4000 M: Doug Berger <opendmb@gmail.com> 4016 4001 M: Florian Fainelli <f.fainelli@gmail.com> 4017 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4002 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4018 4003 L: netdev@vger.kernel.org 4019 4004 S: Supported 4020 4005 F: Documentation/devicetree/bindings/net/brcm,bcmgenet.yaml ··· 4028 4013 BROADCOM IPROC ARM ARCHITECTURE 4029 4014 M: Ray Jui <rjui@broadcom.com> 4030 4015 M: Scott Branden <sbranden@broadcom.com> 4031 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4016 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4032 4017 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 4033 4018 S: Maintained 4034 4019 T: git git://github.com/broadcom/stblinux.git ··· 4056 4041 4057 4042 BROADCOM IPROC GBIT ETHERNET DRIVER 4058 4043 M: Rafał Miłecki <rafal@milecki.pl> 4059 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4044 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4060 4045 L: netdev@vger.kernel.org 4061 4046 S: Maintained 4062 4047 F: Documentation/devicetree/bindings/net/brcm,amac.yaml ··· 4065 4050 4066 4051 BROADCOM KONA GPIO DRIVER 4067 4052 M: Ray Jui <rjui@broadcom.com> 4068 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4053 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4069 4054 S: Supported 4070 4055 F: Documentation/devicetree/bindings/gpio/brcm,kona-gpio.txt 4071 4056 F: drivers/gpio/gpio-bcm-kona.c ··· 4098 4083 BROADCOM PMB (POWER MANAGEMENT BUS) DRIVER 4099 4084 M: Rafał Miłecki <rafal@milecki.pl> 4100 4085 M: Florian Fainelli <f.fainelli@gmail.com> 4101 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4086 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4102 4087 L: linux-pm@vger.kernel.org 4103 4088 S: Maintained 4104 4089 T: git git://github.com/broadcom/stblinux.git ··· 4114 4099 4115 4100 BROADCOM SPI DRIVER 4116 4101 M: Kamal Dasu <kdasu.kdev@gmail.com> 4117 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4102 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4118 4103 S: Maintained 4119 4104 F: Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml 4120 4105 F: drivers/spi/spi-bcm-qspi.* ··· 4123 4108 4124 4109 BROADCOM STB AVS CPUFREQ DRIVER 4125 4110 M: Markus Mayer <mmayer@broadcom.com> 4126 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4111 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4127 4112 L: linux-pm@vger.kernel.org 4128 4113 S: Maintained 4129 4114 F: Documentation/devicetree/bindings/cpufreq/brcm,stb-avs-cpu-freq.txt ··· 4131 4116 4132 4117 BROADCOM STB AVS TMON DRIVER 4133 4118 M: Markus Mayer <mmayer@broadcom.com> 4134 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4119 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4135 4120 L: linux-pm@vger.kernel.org 4136 4121 S: Maintained 4137 4122 F: Documentation/devicetree/bindings/thermal/brcm,avs-tmon.yaml ··· 4139 4124 4140 4125 BROADCOM STB DPFE DRIVER 4141 4126 M: Markus Mayer <mmayer@broadcom.com> 4142 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4127 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4143 4128 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 4144 4129 S: Maintained 4145 4130 F: Documentation/devicetree/bindings/memory-controllers/brcm,dpfe-cpu.yaml ··· 4148 4133 BROADCOM STB NAND FLASH DRIVER 4149 4134 M: Brian Norris <computersforpeace@gmail.com> 4150 4135 M: Kamal Dasu <kdasu.kdev@gmail.com> 4151 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4136 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4152 4137 L: linux-mtd@lists.infradead.org 4153 4138 S: Maintained 4154 4139 F: drivers/mtd/nand/raw/brcmnand/ ··· 4158 4143 M: Jim Quinlan <jim2101024@gmail.com> 4159 4144 M: Nicolas Saenz Julienne <nsaenz@kernel.org> 4160 4145 M: Florian Fainelli <f.fainelli@gmail.com> 4161 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4146 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4162 4147 L: linux-pci@vger.kernel.org 4163 4148 S: Maintained 4164 4149 F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml ··· 4166 4151 4167 4152 BROADCOM SYSTEMPORT ETHERNET DRIVER 4168 4153 M: Florian Fainelli <f.fainelli@gmail.com> 4169 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4154 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4170 4155 L: netdev@vger.kernel.org 4171 4156 S: Supported 4172 4157 F: drivers/net/ethernet/broadcom/bcmsysport.* ··· 4183 4168 4184 4169 BROADCOM VK DRIVER 4185 4170 M: Scott Branden <scott.branden@broadcom.com> 4186 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 4171 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4187 4172 S: Supported 4188 4173 F: drivers/misc/bcm-vk/ 4189 4174 F: include/uapi/linux/misc/bcm_vk.h ··· 17790 17775 17791 17776 SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) Broadcom BRCMSTB DRIVER 17792 17777 M: Al Cooper <alcooperx@gmail.com> 17793 - R: Broadcom Kernel Team <bcm-kernel-feedback-list@broadcom.com> 17778 + R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 17794 17779 L: linux-mmc@vger.kernel.org 17795 17780 S: Maintained 17796 17781 F: drivers/mmc/host/sdhci-brcmstb*
+22
arch/arm/Kconfig.debug
··· 210 210 Say Y here if you want kernel low-level debugging support 211 211 on the FLEXCOM3 port of SAMA7G5. 212 212 213 + config DEBUG_AT91_LAN966_FLEXCOM 214 + bool "Kernel low-level debugging on LAN966 FLEXCOM USART" 215 + select DEBUG_AT91_UART 216 + depends on SOC_LAN966 217 + help 218 + Say Y here if you want kernel low-level debugging support 219 + on the FLEXCOM port of LAN966. 220 + 221 + DEBUG_UART_PHYS | DEBUG_UART_VIRT 222 + 223 + 0xe0040200 | 0xfd040200 | FLEXCOM0 224 + 0xe0044200 | 0xfd044200 | FLEXCOM1 225 + 0xe0060200 | 0xfd060200 | FLEXCOM2 226 + 0xe0064200 | 0xfd064200 | FLEXCOM3 227 + 0xe0070200 | 0xfd070200 | FLEXCOM4 228 + 229 + By default, enabling FLEXCOM3 port. Based on requirement, use 230 + DEBUG_UART_PHYS and DEBUG_UART_VIRT configurations from above 231 + table. 232 + 213 233 config DEBUG_BCM2835 214 234 bool "Kernel low-level debugging on BCM2835 PL011 UART" 215 235 depends on ARCH_BCM2835 && ARCH_MULTI_V6 ··· 1705 1685 default 0xd4017000 if DEBUG_MMP_UART2 1706 1686 default 0xd4018000 if DEBUG_MMP_UART3 1707 1687 default 0xe0000000 if DEBUG_SPEAR13XX 1688 + default 0xe0064200 if DEBUG_AT91_LAN966_FLEXCOM 1708 1689 default 0xe1824200 if DEBUG_AT91_SAMA7G5_FLEXCOM3 1709 1690 default 0xe4007000 if DEBUG_HIP04_UART 1710 1691 default 0xe6c40000 if DEBUG_RMOBILE_SCIFA0 ··· 1826 1805 default 0xfb10c000 if DEBUG_REALVIEW_PB1176_PORT 1827 1806 default 0xfcfe8600 if DEBUG_BCM63XX_UART 1828 1807 default 0xfd000000 if DEBUG_SPEAR3XX || DEBUG_SPEAR13XX 1808 + default 0xfd064200 if DEBUG_AT91_LAN966_FLEXCOM 1829 1809 default 0xfd531000 if DEBUG_STIH41X_SBC_ASC1 1830 1810 default 0xfd883000 if DEBUG_ALPINE_UART0 1831 1811 default 0xfdd32000 if DEBUG_STIH41X_ASC2
+2 -1
arch/arm/configs/mini2440_defconfig
··· 6 6 # CONFIG_COMPAT_BRK is not set 7 7 CONFIG_ARCH_S3C24XX=y 8 8 CONFIG_S3C_ADC=y 9 - CONFIG_S3C24XX_PWM=y 10 9 # CONFIG_CPU_S3C2410 is not set 11 10 CONFIG_CPU_S3C2440=y 12 11 CONFIG_MACH_MINI2440=y ··· 227 228 CONFIG_RTC_DRV_S3C=y 228 229 CONFIG_DMADEVICES=y 229 230 CONFIG_S3C24XX_DMAC=y 231 + CONFIG_PWM=y 232 + CONFIG_PWM_SAMSUNG=y 230 233 CONFIG_EXT2_FS=m 231 234 CONFIG_EXT2_FS_XATTR=y 232 235 CONFIG_EXT2_FS_POSIX_ACL=y
+2
arch/arm/configs/s3c2410_defconfig
··· 358 358 CONFIG_RTC_DRV_S3C=y 359 359 CONFIG_DMADEVICES=y 360 360 CONFIG_S3C24XX_DMAC=y 361 + CONFIG_PWM=y 362 + CONFIG_PWM_SAMSUNG=y 361 363 CONFIG_EXT2_FS=y 362 364 CONFIG_EXT2_FS_XATTR=y 363 365 CONFIG_EXT2_FS_POSIX_ACL=y
+19 -1
arch/arm/mach-at91/Kconfig
··· 165 165 to make a single 32-bit timer. 166 166 It can also be used as a clock event device supporting oneshot mode. 167 167 168 + config MICROCHIP_CLOCKSOURCE_PIT64B 169 + bool "64-bit Periodic Interval Timer (PIT64B) support" 170 + default SOC_SAM9X60 || SOC_SAMA7 171 + select MICROCHIP_PIT64B 172 + help 173 + Select this to get a high resolution clockevent (SAM9X60) or 174 + clocksource and clockevent (SAMA7G5) based on Microchip 64-bit 175 + Periodic Interval Timer. 176 + 168 177 config HAVE_AT91_UTMI 169 178 bool 170 179 ··· 218 209 select SRAM if PM 219 210 220 211 config ATMEL_PM 221 - bool 212 + bool "Atmel PM support" 213 + 214 + config ATMEL_SECURE_PM 215 + bool "Atmel Secure PM support" 216 + depends on SOC_SAMA5D2 && ATMEL_PM 217 + select ARM_PSCI 218 + help 219 + When running under a TEE, the suspend mode must be requested to be set 220 + at TEE level. When enable, this option will use secure monitor calls 221 + to set the suspend level. PSCI is then used to enter suspend. 222 222 223 223 config SOC_SAMA7 224 224 bool
+1 -1
arch/arm/mach-at91/Makefile
··· 7 7 obj-$(CONFIG_SOC_AT91RM9200) += at91rm9200.o 8 8 obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o 9 9 obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o 10 - obj-$(CONFIG_SOC_SAMA5) += sama5.o 10 + obj-$(CONFIG_SOC_SAMA5) += sama5.o sam_secure.o 11 11 obj-$(CONFIG_SOC_SAMA7) += sama7.o 12 12 obj-$(CONFIG_SOC_SAMV7) += samv7.o 13 13
+398 -33
arch/arm/mach-at91/pm.c
··· 15 15 #include <linux/parser.h> 16 16 #include <linux/suspend.h> 17 17 18 + #include <linux/clk.h> 18 19 #include <linux/clk/at91_pmc.h> 19 20 #include <linux/platform_data/atmel.h> 20 21 ··· 28 27 29 28 #include "generic.h" 30 29 #include "pm.h" 30 + #include "sam_secure.h" 31 31 32 32 #define BACKUP_DDR_PHY_CALIBRATION (9) 33 33 ··· 49 47 unsigned long ddr_phy_calibration[BACKUP_DDR_PHY_CALIBRATION]; 50 48 }; 51 49 52 - /* 53 - * struct at91_pm_sfrbu_offsets: registers mapping for SFRBU 50 + /** 51 + * struct at91_pm_sfrbu_regs - registers mapping for SFRBU 54 52 * @pswbu: power switch BU control registers 55 53 */ 56 54 struct at91_pm_sfrbu_regs { ··· 63 61 }; 64 62 65 63 /** 64 + * enum at91_pm_eth_clk - Ethernet clock indexes 65 + * @AT91_PM_ETH_PCLK: pclk index 66 + * @AT91_PM_ETH_HCLK: hclk index 67 + * @AT91_PM_ETH_MAX_CLK: max index 68 + */ 69 + enum at91_pm_eth_clk { 70 + AT91_PM_ETH_PCLK, 71 + AT91_PM_ETH_HCLK, 72 + AT91_PM_ETH_MAX_CLK, 73 + }; 74 + 75 + /** 76 + * enum at91_pm_eth - Ethernet controller indexes 77 + * @AT91_PM_G_ETH: gigabit Ethernet controller index 78 + * @AT91_PM_E_ETH: megabit Ethernet controller index 79 + * @AT91_PM_MAX_ETH: max index 80 + */ 81 + enum at91_pm_eth { 82 + AT91_PM_G_ETH, 83 + AT91_PM_E_ETH, 84 + AT91_PM_MAX_ETH, 85 + }; 86 + 87 + /** 88 + * struct at91_pm_quirk_eth - AT91 PM Ethernet quirks 89 + * @dev: Ethernet device 90 + * @np: Ethernet device node 91 + * @clks: Ethernet clocks 92 + * @modes: power management mode that this quirk applies to 93 + * @dns_modes: do not suspend modes: stop suspending if Ethernet is configured 94 + * as wakeup source but buggy and no other wakeup source is 95 + * available 96 + */ 97 + struct at91_pm_quirk_eth { 98 + struct device *dev; 99 + struct device_node *np; 100 + struct clk_bulk_data clks[AT91_PM_ETH_MAX_CLK]; 101 + u32 modes; 102 + u32 dns_modes; 103 + }; 104 + 105 + /** 106 + * struct at91_pm_quirks - AT91 PM quirks 107 + * @eth: Ethernet quirks 108 + */ 109 + struct at91_pm_quirks { 110 + struct at91_pm_quirk_eth eth[AT91_PM_MAX_ETH]; 111 + }; 112 + 113 + /** 66 114 * struct at91_soc_pm - AT91 SoC power management data structure 67 115 * @config_shdwc_ws: wakeup sources configuration function for SHDWC 68 116 * @config_pmc_ws: wakeup srouces configuration function for PMC 69 117 * @ws_ids: wakup sources of_device_id array 118 + * @bu: backup unit mapped data (for backup mode) 119 + * @quirks: PM quirks 70 120 * @data: PM data to be used on last phase of suspend 71 121 * @sfrbu_regs: SFRBU registers mapping 72 - * @bu: backup unit mapped data (for backup mode) 73 122 * @memcs: memory chip select 74 123 */ 75 124 struct at91_soc_pm { ··· 128 75 int (*config_pmc_ws)(void __iomem *pmc, u32 mode, u32 polarity); 129 76 const struct of_device_id *ws_ids; 130 77 struct at91_pm_bu *bu; 78 + struct at91_pm_quirks quirks; 131 79 struct at91_pm_data data; 132 80 struct at91_pm_sfrbu_regs sfrbu_regs; 133 81 void *memcs; 134 82 }; 135 83 136 84 /** 137 - * enum at91_pm_iomaps: IOs that needs to be mapped for different PM modes 85 + * enum at91_pm_iomaps - IOs that needs to be mapped for different PM modes 138 86 * @AT91_PM_IOMAP_SHDWC: SHDWC controller 139 87 * @AT91_PM_IOMAP_SFRBU: SFRBU controller 88 + * @AT91_PM_IOMAP_ETHC: Ethernet controller 140 89 */ 141 90 enum at91_pm_iomaps { 142 91 AT91_PM_IOMAP_SHDWC, 143 92 AT91_PM_IOMAP_SFRBU, 93 + AT91_PM_IOMAP_ETHC, 144 94 }; 145 95 146 96 #define AT91_PM_IOMAP(name) BIT(AT91_PM_IOMAP_##name) ··· 319 263 return 0; 320 264 } 321 265 266 + static bool at91_pm_eth_quirk_is_valid(struct at91_pm_quirk_eth *eth) 267 + { 268 + struct platform_device *pdev; 269 + 270 + /* Interface NA in DT. */ 271 + if (!eth->np) 272 + return false; 273 + 274 + /* No quirks for this interface and current suspend mode. */ 275 + if (!(eth->modes & BIT(soc_pm.data.mode))) 276 + return false; 277 + 278 + if (!eth->dev) { 279 + /* Driver not probed. */ 280 + pdev = of_find_device_by_node(eth->np); 281 + if (!pdev) 282 + return false; 283 + eth->dev = &pdev->dev; 284 + } 285 + 286 + /* No quirks if device isn't a wakeup source. */ 287 + if (!device_may_wakeup(eth->dev)) { 288 + put_device(eth->dev); 289 + return false; 290 + } 291 + 292 + /* put_device(eth->dev) is called at the end of suspend. */ 293 + return true; 294 + } 295 + 296 + static int at91_pm_config_quirks(bool suspend) 297 + { 298 + struct at91_pm_quirk_eth *eth; 299 + int i, j, ret, tmp; 300 + 301 + /* 302 + * Ethernet IPs who's device_node pointers are stored into 303 + * soc_pm.quirks.eth[].np cannot handle WoL packets while in ULP0, ULP1 304 + * or both due to a hardware bug. If they receive WoL packets while in 305 + * ULP0 or ULP1 IPs could stop working or the whole system could stop 306 + * working. We cannot handle this scenario in the ethernet driver itself 307 + * as the driver is common to multiple vendors and also we only know 308 + * here, in this file, if we suspend to ULP0 or ULP1 mode. Thus handle 309 + * these scenarios here, as quirks. 310 + */ 311 + for (i = 0; i < AT91_PM_MAX_ETH; i++) { 312 + eth = &soc_pm.quirks.eth[i]; 313 + 314 + if (!at91_pm_eth_quirk_is_valid(eth)) 315 + continue; 316 + 317 + /* 318 + * For modes in dns_modes mask the system blocks if quirk is not 319 + * applied but if applied the interface doesn't act at WoL 320 + * events. Thus take care to avoid suspending if this interface 321 + * is the only configured wakeup source. 322 + */ 323 + if (suspend && eth->dns_modes & BIT(soc_pm.data.mode)) { 324 + int ws_count = 0; 325 + #ifdef CONFIG_PM_SLEEP 326 + struct wakeup_source *ws; 327 + 328 + for_each_wakeup_source(ws) { 329 + if (ws->dev == eth->dev) 330 + continue; 331 + 332 + ws_count++; 333 + break; 334 + } 335 + #endif 336 + 337 + /* 338 + * Checking !ws is good for all platforms with issues 339 + * even when both G_ETH and E_ETH are available as dns_modes 340 + * is populated only on G_ETH interface. 341 + */ 342 + if (!ws_count) { 343 + pr_err("AT91: PM: Ethernet cannot resume from WoL!"); 344 + ret = -EPERM; 345 + put_device(eth->dev); 346 + eth->dev = NULL; 347 + /* No need to revert clock settings for this eth. */ 348 + i--; 349 + goto clk_unconfigure; 350 + } 351 + } 352 + 353 + if (suspend) { 354 + clk_bulk_disable_unprepare(AT91_PM_ETH_MAX_CLK, eth->clks); 355 + } else { 356 + ret = clk_bulk_prepare_enable(AT91_PM_ETH_MAX_CLK, 357 + eth->clks); 358 + if (ret) 359 + goto clk_unconfigure; 360 + /* 361 + * Release the reference to eth->dev taken in 362 + * at91_pm_eth_quirk_is_valid(). 363 + */ 364 + put_device(eth->dev); 365 + eth->dev = NULL; 366 + } 367 + } 368 + 369 + return 0; 370 + 371 + clk_unconfigure: 372 + /* 373 + * In case of resume we reach this point if clk_prepare_enable() failed. 374 + * we don't want to revert the previous clk_prepare_enable() for the 375 + * other IP. 376 + */ 377 + for (j = i; j >= 0; j--) { 378 + eth = &soc_pm.quirks.eth[j]; 379 + if (suspend) { 380 + if (!at91_pm_eth_quirk_is_valid(eth)) 381 + continue; 382 + 383 + tmp = clk_bulk_prepare_enable(AT91_PM_ETH_MAX_CLK, eth->clks); 384 + if (tmp) { 385 + pr_err("AT91: PM: failed to enable %s clocks\n", 386 + j == AT91_PM_G_ETH ? "geth" : "eth"); 387 + } 388 + } else { 389 + /* 390 + * Release the reference to eth->dev taken in 391 + * at91_pm_eth_quirk_is_valid(). 392 + */ 393 + put_device(eth->dev); 394 + eth->dev = NULL; 395 + } 396 + } 397 + 398 + return ret; 399 + } 400 + 322 401 /* 323 402 * Called after processes are frozen, but before we shutdown devices. 324 403 */ ··· 618 427 */ 619 428 static int at91_pm_enter(suspend_state_t state) 620 429 { 430 + int ret; 431 + 432 + ret = at91_pm_config_quirks(true); 433 + if (ret) 434 + return ret; 435 + 621 436 #ifdef CONFIG_PINCTRL_AT91 622 437 /* 623 438 * FIXME: this is needed to communicate between the pinctrl driver and ··· 661 464 #ifdef CONFIG_PINCTRL_AT91 662 465 at91_pinctrl_gpio_resume(); 663 466 #endif 467 + at91_pm_config_quirks(false); 664 468 return 0; 665 469 } 666 470 ··· 1079 881 return ret; 1080 882 } 1081 883 884 + static void at91_pm_secure_init(void) 885 + { 886 + int suspend_mode; 887 + struct arm_smccc_res res; 888 + 889 + suspend_mode = soc_pm.data.suspend_mode; 890 + 891 + res = sam_smccc_call(SAMA5_SMC_SIP_SET_SUSPEND_MODE, 892 + suspend_mode, 0); 893 + if (res.a0 == 0) { 894 + pr_info("AT91: Secure PM: suspend mode set to %s\n", 895 + pm_modes[suspend_mode].pattern); 896 + return; 897 + } 898 + 899 + pr_warn("AT91: Secure PM: %s mode not supported !\n", 900 + pm_modes[suspend_mode].pattern); 901 + 902 + res = sam_smccc_call(SAMA5_SMC_SIP_GET_SUSPEND_MODE, 0, 0); 903 + if (res.a0 == 0) { 904 + pr_warn("AT91: Secure PM: failed to get default mode\n"); 905 + return; 906 + } 907 + 908 + pr_info("AT91: Secure PM: using default suspend mode %s\n", 909 + pm_modes[suspend_mode].pattern); 910 + 911 + soc_pm.data.suspend_mode = res.a1; 912 + } 1082 913 static const struct of_device_id atmel_shdwc_ids[] = { 1083 914 { .compatible = "atmel,sama5d2-shdwc" }, 1084 915 { .compatible = "microchip,sam9x60-shdwc" }, ··· 1115 888 { /* sentinel. */ } 1116 889 }; 1117 890 891 + static const struct of_device_id gmac_ids[] __initconst = { 892 + { .compatible = "atmel,sama5d3-gem" }, 893 + { .compatible = "atmel,sama5d2-gem" }, 894 + { .compatible = "atmel,sama5d29-gem" }, 895 + { .compatible = "microchip,sama7g5-gem" }, 896 + { }, 897 + }; 898 + 899 + static const struct of_device_id emac_ids[] __initconst = { 900 + { .compatible = "atmel,sama5d3-macb" }, 901 + { .compatible = "microchip,sama7g5-emac" }, 902 + { }, 903 + }; 904 + 905 + /* 906 + * Replaces _mode_to_replace with a supported mode that doesn't depend 907 + * on controller pointed by _map_bitmask 908 + * @_maps: u32 array containing AT91_PM_IOMAP() flags and indexed by AT91 909 + * PM mode 910 + * @_map_bitmask: AT91_PM_IOMAP() bitmask; if _mode_to_replace depends on 911 + * controller represented by _map_bitmask, _mode_to_replace needs to be 912 + * updated 913 + * @_mode_to_replace: standby_mode or suspend_mode that need to be 914 + * updated 915 + * @_mode_to_check: standby_mode or suspend_mode; this is needed here 916 + * to avoid having standby_mode and suspend_mode set with the same AT91 917 + * PM mode 918 + */ 919 + #define AT91_PM_REPLACE_MODE(_maps, _map_bitmask, _mode_to_replace, \ 920 + _mode_to_check) \ 921 + do { \ 922 + if (((_maps)[(_mode_to_replace)]) & (_map_bitmask)) { \ 923 + int _mode_to_use, _mode_complementary; \ 924 + /* Use ULP0 if it doesn't need _map_bitmask. */ \ 925 + if (!((_maps)[AT91_PM_ULP0] & (_map_bitmask))) {\ 926 + _mode_to_use = AT91_PM_ULP0; \ 927 + _mode_complementary = AT91_PM_STANDBY; \ 928 + } else { \ 929 + _mode_to_use = AT91_PM_STANDBY; \ 930 + _mode_complementary = AT91_PM_STANDBY; \ 931 + } \ 932 + \ 933 + if ((_mode_to_check) != _mode_to_use) \ 934 + (_mode_to_replace) = _mode_to_use; \ 935 + else \ 936 + (_mode_to_replace) = _mode_complementary;\ 937 + } \ 938 + } while (0) 939 + 940 + /* 941 + * Replaces standby and suspend modes with default supported modes: 942 + * ULP0 and STANDBY. 943 + * @_maps: u32 array indexed by AT91 PM mode containing AT91_PM_IOMAP() 944 + * flags 945 + * @_map: controller specific name; standby and suspend mode need to be 946 + * replaced in order to not depend on this controller 947 + */ 948 + #define AT91_PM_REPLACE_MODES(_maps, _map) \ 949 + do { \ 950 + AT91_PM_REPLACE_MODE((_maps), BIT(AT91_PM_IOMAP_##_map),\ 951 + (soc_pm.data.standby_mode), \ 952 + (soc_pm.data.suspend_mode)); \ 953 + AT91_PM_REPLACE_MODE((_maps), BIT(AT91_PM_IOMAP_##_map),\ 954 + (soc_pm.data.suspend_mode), \ 955 + (soc_pm.data.standby_mode)); \ 956 + } while (0) 957 + 958 + static int __init at91_pm_get_eth_clks(struct device_node *np, 959 + struct clk_bulk_data *clks) 960 + { 961 + clks[AT91_PM_ETH_PCLK].clk = of_clk_get_by_name(np, "pclk"); 962 + if (IS_ERR(clks[AT91_PM_ETH_PCLK].clk)) 963 + return PTR_ERR(clks[AT91_PM_ETH_PCLK].clk); 964 + 965 + clks[AT91_PM_ETH_HCLK].clk = of_clk_get_by_name(np, "hclk"); 966 + if (IS_ERR(clks[AT91_PM_ETH_HCLK].clk)) 967 + return PTR_ERR(clks[AT91_PM_ETH_HCLK].clk); 968 + 969 + return 0; 970 + } 971 + 972 + static int __init at91_pm_eth_clks_empty(struct clk_bulk_data *clks) 973 + { 974 + return IS_ERR(clks[AT91_PM_ETH_PCLK].clk) || 975 + IS_ERR(clks[AT91_PM_ETH_HCLK].clk); 976 + } 977 + 1118 978 static void __init at91_pm_modes_init(const u32 *maps, int len) 1119 979 { 980 + struct at91_pm_quirk_eth *gmac = &soc_pm.quirks.eth[AT91_PM_G_ETH]; 981 + struct at91_pm_quirk_eth *emac = &soc_pm.quirks.eth[AT91_PM_E_ETH]; 1120 982 struct device_node *np; 1121 - int ret, mode; 983 + int ret; 1122 984 1123 985 ret = at91_pm_backup_init(); 1124 986 if (ret) { ··· 1222 906 np = of_find_matching_node(NULL, atmel_shdwc_ids); 1223 907 if (!np) { 1224 908 pr_warn("%s: failed to find shdwc!\n", __func__); 1225 - 1226 - /* Use ULP0 if it doesn't needs SHDWC.*/ 1227 - if (!(maps[AT91_PM_ULP0] & AT91_PM_IOMAP(SHDWC))) 1228 - mode = AT91_PM_ULP0; 1229 - else 1230 - mode = AT91_PM_STANDBY; 1231 - 1232 - if (maps[soc_pm.data.standby_mode] & AT91_PM_IOMAP(SHDWC)) 1233 - soc_pm.data.standby_mode = mode; 1234 - if (maps[soc_pm.data.suspend_mode] & AT91_PM_IOMAP(SHDWC)) 1235 - soc_pm.data.suspend_mode = mode; 909 + AT91_PM_REPLACE_MODES(maps, SHDWC); 1236 910 } else { 1237 911 soc_pm.data.shdwc = of_iomap(np, 0); 1238 912 of_node_put(np); ··· 1234 928 np = of_find_compatible_node(NULL, NULL, "atmel,sama5d2-sfrbu"); 1235 929 if (!np) { 1236 930 pr_warn("%s: failed to find sfrbu!\n", __func__); 1237 - 1238 - /* 1239 - * Use ULP0 if it doesn't need SHDWC or if SHDWC 1240 - * was already located. 1241 - */ 1242 - if (!(maps[AT91_PM_ULP0] & AT91_PM_IOMAP(SHDWC)) || 1243 - soc_pm.data.shdwc) 1244 - mode = AT91_PM_ULP0; 1245 - else 1246 - mode = AT91_PM_STANDBY; 1247 - 1248 - if (maps[soc_pm.data.standby_mode] & AT91_PM_IOMAP(SFRBU)) 1249 - soc_pm.data.standby_mode = mode; 1250 - if (maps[soc_pm.data.suspend_mode] & AT91_PM_IOMAP(SFRBU)) 1251 - soc_pm.data.suspend_mode = mode; 931 + AT91_PM_REPLACE_MODES(maps, SFRBU); 1252 932 } else { 1253 933 soc_pm.data.sfrbu = of_iomap(np, 0); 1254 934 of_node_put(np); 1255 935 } 1256 936 } 1257 937 938 + if ((at91_is_pm_mode_active(AT91_PM_ULP1) || 939 + at91_is_pm_mode_active(AT91_PM_ULP0) || 940 + at91_is_pm_mode_active(AT91_PM_ULP0_FAST)) && 941 + (maps[soc_pm.data.standby_mode] & AT91_PM_IOMAP(ETHC) || 942 + maps[soc_pm.data.suspend_mode] & AT91_PM_IOMAP(ETHC))) { 943 + np = of_find_matching_node(NULL, gmac_ids); 944 + if (!np) { 945 + np = of_find_matching_node(NULL, emac_ids); 946 + if (np) 947 + goto get_emac_clks; 948 + AT91_PM_REPLACE_MODES(maps, ETHC); 949 + goto unmap_unused_nodes; 950 + } else { 951 + gmac->np = np; 952 + at91_pm_get_eth_clks(np, gmac->clks); 953 + } 954 + 955 + np = of_find_matching_node(NULL, emac_ids); 956 + if (!np) { 957 + if (at91_pm_eth_clks_empty(gmac->clks)) 958 + AT91_PM_REPLACE_MODES(maps, ETHC); 959 + } else { 960 + get_emac_clks: 961 + emac->np = np; 962 + ret = at91_pm_get_eth_clks(np, emac->clks); 963 + if (ret && at91_pm_eth_clks_empty(gmac->clks)) { 964 + of_node_put(gmac->np); 965 + of_node_put(emac->np); 966 + gmac->np = NULL; 967 + emac->np = NULL; 968 + } 969 + } 970 + } 971 + 972 + unmap_unused_nodes: 1258 973 /* Unmap all unnecessary. */ 1259 974 if (soc_pm.data.shdwc && 1260 975 !(maps[soc_pm.data.standby_mode] & AT91_PM_IOMAP(SHDWC) || ··· 1511 1184 static const int modes[] __initconst = { 1512 1185 AT91_PM_STANDBY, AT91_PM_ULP0, AT91_PM_ULP0_FAST, 1513 1186 }; 1187 + static const u32 iomaps[] __initconst = { 1188 + [AT91_PM_ULP0] = AT91_PM_IOMAP(ETHC), 1189 + [AT91_PM_ULP0_FAST] = AT91_PM_IOMAP(ETHC), 1190 + }; 1514 1191 int ret; 1515 1192 1516 1193 if (!IS_ENABLED(CONFIG_SOC_SAMA5)) 1517 1194 return; 1518 1195 1519 1196 at91_pm_modes_validate(modes, ARRAY_SIZE(modes)); 1197 + at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps)); 1520 1198 ret = at91_dt_ramc(false); 1521 1199 if (ret) 1522 1200 return; 1523 1201 1524 1202 at91_pm_init(NULL); 1203 + 1204 + /* Quirks applies to ULP0, ULP0 fast and ULP1 modes. */ 1205 + soc_pm.quirks.eth[AT91_PM_G_ETH].modes = BIT(AT91_PM_ULP0) | 1206 + BIT(AT91_PM_ULP0_FAST) | 1207 + BIT(AT91_PM_ULP1); 1208 + /* Do not suspend in ULP0, ULP0 fast if GETH is the only wakeup source. */ 1209 + soc_pm.quirks.eth[AT91_PM_G_ETH].dns_modes = BIT(AT91_PM_ULP0) | 1210 + BIT(AT91_PM_ULP0_FAST); 1525 1211 } 1526 1212 1527 1213 void __init sama5d2_pm_init(void) ··· 1544 1204 AT91_PM_BACKUP, 1545 1205 }; 1546 1206 static const u32 iomaps[] __initconst = { 1547 - [AT91_PM_ULP1] = AT91_PM_IOMAP(SHDWC), 1207 + [AT91_PM_ULP0] = AT91_PM_IOMAP(ETHC), 1208 + [AT91_PM_ULP0_FAST] = AT91_PM_IOMAP(ETHC), 1209 + [AT91_PM_ULP1] = AT91_PM_IOMAP(SHDWC) | 1210 + AT91_PM_IOMAP(ETHC), 1548 1211 [AT91_PM_BACKUP] = AT91_PM_IOMAP(SHDWC) | 1549 1212 AT91_PM_IOMAP(SFRBU), 1550 1213 }; ··· 1555 1212 1556 1213 if (!IS_ENABLED(CONFIG_SOC_SAMA5D2)) 1557 1214 return; 1215 + 1216 + if (IS_ENABLED(CONFIG_ATMEL_SECURE_PM)) { 1217 + pr_warn("AT91: Secure PM: ignoring standby mode\n"); 1218 + at91_pm_secure_init(); 1219 + return; 1220 + } 1558 1221 1559 1222 at91_pm_modes_validate(modes, ARRAY_SIZE(modes)); 1560 1223 at91_pm_modes_init(iomaps, ARRAY_SIZE(iomaps)); ··· 1578 1229 soc_pm.sfrbu_regs.pswbu.ctrl = BIT(0); 1579 1230 soc_pm.sfrbu_regs.pswbu.softsw = BIT(1); 1580 1231 soc_pm.sfrbu_regs.pswbu.state = BIT(3); 1232 + 1233 + /* Quirk applies to ULP0, ULP0 fast and ULP1 modes. */ 1234 + soc_pm.quirks.eth[AT91_PM_G_ETH].modes = BIT(AT91_PM_ULP0) | 1235 + BIT(AT91_PM_ULP0_FAST) | 1236 + BIT(AT91_PM_ULP1); 1237 + /* 1238 + * Do not suspend in ULP0, ULP0 fast if GETH is the only wakeup 1239 + * source. 1240 + */ 1241 + soc_pm.quirks.eth[AT91_PM_G_ETH].dns_modes = BIT(AT91_PM_ULP0) | 1242 + BIT(AT91_PM_ULP0_FAST); 1581 1243 } 1582 1244 1583 1245 void __init sama7_pm_init(void) ··· 1599 1239 static const u32 iomaps[] __initconst = { 1600 1240 [AT91_PM_ULP0] = AT91_PM_IOMAP(SFRBU), 1601 1241 [AT91_PM_ULP1] = AT91_PM_IOMAP(SFRBU) | 1602 - AT91_PM_IOMAP(SHDWC), 1242 + AT91_PM_IOMAP(SHDWC) | 1243 + AT91_PM_IOMAP(ETHC), 1603 1244 [AT91_PM_BACKUP] = AT91_PM_IOMAP(SFRBU) | 1604 1245 AT91_PM_IOMAP(SHDWC), 1605 1246 }; ··· 1625 1264 soc_pm.sfrbu_regs.pswbu.ctrl = BIT(0); 1626 1265 soc_pm.sfrbu_regs.pswbu.softsw = BIT(1); 1627 1266 soc_pm.sfrbu_regs.pswbu.state = BIT(2); 1267 + 1268 + /* Quirks applies to ULP1 for both Ethernet interfaces. */ 1269 + soc_pm.quirks.eth[AT91_PM_E_ETH].modes = BIT(AT91_PM_ULP1); 1270 + soc_pm.quirks.eth[AT91_PM_G_ETH].modes = BIT(AT91_PM_ULP1); 1628 1271 } 1629 1272 1630 1273 static int __init at91_pm_modes_select(char *str)
+46
arch/arm/mach-at91/sam_secure.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * Copyright (C) 2022, Microchip 4 + */ 5 + 6 + #include <linux/arm-smccc.h> 7 + #include <linux/of.h> 8 + 9 + #include "sam_secure.h" 10 + 11 + static bool optee_available; 12 + 13 + #define SAM_SIP_SMC_STD_CALL_VAL(func_num) \ 14 + ARM_SMCCC_CALL_VAL(ARM_SMCCC_STD_CALL, ARM_SMCCC_SMC_32, \ 15 + ARM_SMCCC_OWNER_SIP, (func_num)) 16 + 17 + struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1) 18 + { 19 + struct arm_smccc_res res = {.a0 = -1}; 20 + 21 + if (WARN_ON(!optee_available)) 22 + return res; 23 + 24 + arm_smccc_smc(SAM_SIP_SMC_STD_CALL_VAL(fn), arg0, arg1, 0, 0, 0, 0, 0, 25 + &res); 26 + 27 + return res; 28 + } 29 + 30 + void __init sam_secure_init(void) 31 + { 32 + struct device_node *np; 33 + 34 + /* 35 + * We only check that the OP-TEE node is present and available. The 36 + * OP-TEE kernel driver is not needed for the type of interaction made 37 + * with OP-TEE here so the driver's status is not checked. 38 + */ 39 + np = of_find_node_by_path("/firmware/optee"); 40 + if (np && of_device_is_available(np)) 41 + optee_available = true; 42 + of_node_put(np); 43 + 44 + if (optee_available) 45 + pr_info("Running under OP-TEE firmware\n"); 46 + }
+18
arch/arm/mach-at91/sam_secure.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* 3 + * Copyright (C) 2022, Microchip 4 + */ 5 + 6 + #ifndef SAM_SECURE_H 7 + #define SAM_SECURE_H 8 + 9 + #include <linux/arm-smccc.h> 10 + 11 + /* Secure Monitor mode APIs */ 12 + #define SAMA5_SMC_SIP_SET_SUSPEND_MODE 0x400 13 + #define SAMA5_SMC_SIP_GET_SUSPEND_MODE 0x401 14 + 15 + void __init sam_secure_init(void); 16 + struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1); 17 + 18 + #endif /* SAM_SECURE_H */
+2
arch/arm/mach-at91/sama5.c
··· 14 14 #include <asm/system_misc.h> 15 15 16 16 #include "generic.h" 17 + #include "sam_secure.h" 17 18 18 19 static void __init sama5_dt_device_init(void) 19 20 { ··· 48 47 static void __init sama5d2_init(void) 49 48 { 50 49 of_platform_default_populate(NULL, NULL, NULL); 50 + sam_secure_init(); 51 51 sama5d2_pm_init(); 52 52 } 53 53
+12
arch/arm/mach-bcm/Kconfig
··· 218 218 This enables support for Broadcom ARM-based set-top box chipsets, 219 219 including the 7445 family of chips. 220 220 221 + config ARCH_BCMBCA 222 + bool "Broadcom Broadband SoC" 223 + depends on ARCH_MULTI_V7 224 + select ARM_AMBA 225 + select ARM_GIC 226 + select HAVE_ARM_ARCH_TIMER 227 + help 228 + Say Y if you intend to run the kernel on a Broadcom Broadband ARM-based 229 + BCA chipset. 230 + 231 + This enables support for Broadcom BCA ARM-based broadband chipsets, 232 + including the DSL, PON and Wireless family of chips. 221 233 endif
+1 -1
arch/arm/mach-bcm/platsmp-brcmstb.c
··· 59 59 /* 60 60 * We must quiesce a dying CPU before it can be killed by the boot CPU. Because 61 61 * one or more cache may be disabled, we must flush to ensure coherency. We 62 - * cannot use traditionl completion structures or spinlocks as they rely on 62 + * cannot use traditional completion structures or spinlocks as they rely on 63 63 * coherency. 64 64 */ 65 65 static DEFINE_PER_CPU_ALIGNED(int, per_cpu_sw_state);
+4
arch/arm/mach-hisi/platsmp.c
··· 67 67 } 68 68 ctrl_base = of_iomap(np, 0); 69 69 if (!ctrl_base) { 70 + of_node_put(np); 70 71 pr_err("failed to map address\n"); 71 72 return; 72 73 } 73 74 if (of_property_read_u32(np, "smp-offset", &offset) < 0) { 75 + of_node_put(np); 74 76 pr_err("failed to find smp-offset property\n"); 75 77 return; 76 78 } 77 79 ctrl_base += offset; 80 + of_node_put(np); 78 81 } 79 82 } 80 83 ··· 163 160 if (WARN_ON(!node)) 164 161 return -1; 165 162 ctrl_base = of_iomap(node, 0); 163 + of_node_put(node); 166 164 167 165 /* set the secondary core boot from DDR */ 168 166 remap_reg_value = readl_relaxed(ctrl_base + REG_SC_CTRL);
+6 -2
arch/arm/mach-omap2/cm_common.c
··· 320 320 data = (struct omap_prcm_init_data *)match->data; 321 321 322 322 ret = of_address_to_resource(np, 0, &res); 323 - if (ret) 323 + if (ret) { 324 + of_node_put(np); 324 325 return ret; 326 + } 325 327 326 328 if (data->index == TI_CLKM_CM) 327 329 mem = &cm_base; ··· 369 367 continue; 370 368 371 369 ret = omap2_clk_provider_init(np, data->index, NULL, data->mem); 372 - if (ret) 370 + if (ret) { 371 + of_node_put(np); 373 372 return ret; 373 + } 374 374 } 375 375 376 376 return 0;
+14 -5
arch/arm/mach-omap2/control.c
··· 769 769 data = (struct control_init_data *)match->data; 770 770 771 771 mem = of_iomap(np, 0); 772 - if (!mem) 772 + if (!mem) { 773 + of_node_put(np); 773 774 return -ENOMEM; 775 + } 774 776 775 777 if (data->index == TI_CLKM_CTRL) { 776 778 omap2_ctrl_base = mem; ··· 812 810 if (scm_conf) { 813 811 syscon = syscon_node_to_regmap(scm_conf); 814 812 815 - if (IS_ERR(syscon)) 816 - return PTR_ERR(syscon); 813 + if (IS_ERR(syscon)) { 814 + ret = PTR_ERR(syscon); 815 + goto of_node_put; 816 + } 817 817 818 818 if (of_get_child_by_name(scm_conf, "clocks")) { 819 819 ret = omap2_clk_provider_init(scm_conf, 820 820 data->index, 821 821 syscon, NULL); 822 822 if (ret) 823 - return ret; 823 + goto of_node_put; 824 824 } 825 825 } else { 826 826 /* No scm_conf found, direct access */ 827 827 ret = omap2_clk_provider_init(np, data->index, NULL, 828 828 data->mem); 829 829 if (ret) 830 - return ret; 830 + goto of_node_put; 831 831 } 832 832 } 833 833 ··· 840 836 } 841 837 842 838 return 0; 839 + 840 + of_node_put: 841 + of_node_put(np); 842 + return ret; 843 + 843 844 } 844 845 845 846 /**
-20
arch/arm/mach-omap2/omap_device.c
··· 96 96 * omap_device, this function adds an entry in the clkdev table of the 97 97 * form <dev-id=dev_name, con-id=role> if it does not exist already. 98 98 * 99 - * The function is called from inside omap_device_build_ss(), after 100 - * omap_device_register. 101 - * 102 99 * This allows drivers to get a pointer to its optional clocks based on its role 103 100 * by calling clk_get(<dev*>, <role>). 104 101 * In the case of the main clock, a "fck" alias is used. ··· 469 472 _od_resume_noirq) 470 473 } 471 474 }; 472 - 473 - /** 474 - * omap_device_register - register an omap_device with one omap_hwmod 475 - * @pdev: the platform device (omap_device) to register. 476 - * 477 - * Register the omap_device structure. This currently just calls 478 - * platform_device_register() on the underlying platform_device. 479 - * Returns the return value of platform_device_register(). 480 - */ 481 - int omap_device_register(struct platform_device *pdev) 482 - { 483 - pr_debug("omap_device: %s: registering\n", pdev->name); 484 - 485 - dev_pm_domain_set(&pdev->dev, &omap_device_pm_domain); 486 - return platform_device_add(pdev); 487 - } 488 - 489 475 490 476 /* Public functions for use by device drivers through struct platform_data */ 491 477
-1
arch/arm/mach-omap2/omap_device.h
··· 71 71 struct omap_device *omap_device_alloc(struct platform_device *pdev, 72 72 struct omap_hwmod **ohs, int oh_cnt); 73 73 void omap_device_delete(struct omap_device *od); 74 - int omap_device_register(struct platform_device *pdev); 75 74 76 75 struct device *omap_device_get_by_hwmod_name(const char *oh_name); 77 76
+6 -2
arch/arm/mach-omap2/prm_common.c
··· 752 752 data = (struct omap_prcm_init_data *)match->data; 753 753 754 754 ret = of_address_to_resource(np, 0, &res); 755 - if (ret) 755 + if (ret) { 756 + of_node_put(np); 756 757 return ret; 758 + } 757 759 758 760 data->mem = ioremap(res.start, resource_size(&res)); 759 761 ··· 801 799 data = match->data; 802 800 803 801 ret = omap2_clk_provider_init(np, data->index, NULL, data->mem); 804 - if (ret) 802 + if (ret) { 803 + of_node_put(np); 805 804 return ret; 805 + } 806 806 } 807 807 808 808 omap_cm_init();
+2 -2
arch/arm/mach-orion5x/dns323-setup.c
··· 696 696 pr_err("DNS-323: failed to setup power-off GPIO\n"); 697 697 pm_power_off = dns323c_power_off; 698 698 699 - /* Now, -this- should theorically be done by the sata_mv driver 699 + /* Now, -this- should theoretically be done by the sata_mv driver 700 700 * once I figure out what's going on there. Maybe the behaviour 701 701 * of the LEDs should be somewhat passed via the platform_data. 702 702 * for now, just whack the register and make the LEDs happy 703 703 * 704 - * Note: AFAIK, rev B1 needs the same treatement but I'll let 704 + * Note: AFAIK, rev B1 needs the same treatment but I'll let 705 705 * somebody else test it. 706 706 */ 707 707 writel(0x5, ORION5X_SATA_VIRT_BASE + 0x2c);
+1 -1
arch/arm/mach-rockchip/platsmp.c
··· 137 137 /* 138 138 * We communicate with the bootrom to active the cpus other 139 139 * than cpu0, after a blob of initialize code, they will 140 - * stay at wfe state, once they are actived, they will check 140 + * stay at wfe state, once they are activated, they will check 141 141 * the mailbox: 142 142 * sram_base_addr + 4: 0xdeadbeaf 143 143 * sram_base_addr + 8: start address for pc
-8
arch/arm/mach-s3c/Kconfig
··· 207 207 help 208 208 Compile in platform device definition for PWM Timer 209 209 210 - config S3C24XX_PWM 211 - bool "PWM device support" 212 - select PWM 213 - select PWM_SAMSUNG 214 - help 215 - Support for exporting the PWM timer blocks via the pwm device 216 - system 217 - 218 210 config GPIO_SAMSUNG 219 211 def_bool y 220 212
-2
arch/arm/mach-s3c/Kconfig.s3c24xx
··· 532 532 select MFD_PCF50633 533 533 select PCF50633_GPIO 534 534 select POWER_SUPPLY 535 - select S3C24XX_PWM 536 535 select S3C_DEV_USB_HOST 537 536 help 538 537 Say Y here if you are using the Openmoko GTA02 / Freerunner GSM Phone ··· 543 544 select S3C2410_COMMON_DCLK 544 545 select S3C2410_IOTIMING if ARM_S3C2440_CPUFREQ 545 546 select S3C2440_XTAL_16934400 546 - select S3C24XX_PWM 547 547 select S3C_DEV_NAND 548 548 help 549 549 Say Y here if you're using HP iPAQ rx1950
+1 -1
arch/arm/mach-s3c/iotiming-s3c2410.c
··· 259 259 /** 260 260 * get_tacc - turn tACC value into cycle time 261 261 * @hclk_tns: The cycle time for HCLK, in 10ths of nanoseconds. 262 - * @val: The bank timing register value, shifed down. 262 + * @val: The bank timing register value, shifted down. 263 263 */ 264 264 static unsigned int get_tacc(unsigned long hclk_tns, 265 265 unsigned long val)
+1 -1
arch/arm/mach-s3c/pm-s3c64xx.c
··· 323 323 324 324 /* S3C64XX UART blocks only support level interrupts, so ensure that 325 325 * when we restore unused UART blocks we force the level interrupt 326 - * settigs. */ 326 + * settings. */ 327 327 save->ucon |= S3C2410_UCON_TXILEVEL | S3C2410_UCON_RXILEVEL; 328 328 329 329 /* We have a constraint on changing the clock type of the UART
+1 -1
arch/arm/mach-s3c/s3c24xx.c
··· 146 146 IODESC_ENT(UART) 147 147 }; 148 148 149 - /* read cpu identificaiton code */ 149 + /* read cpu identification code */ 150 150 151 151 static unsigned long s3c24xx_read_idcode_v5(void) 152 152 {
+1 -1
arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
··· 67 67 { .compatible = "dlg,da9063", .data = &da9063_msg }, 68 68 { .compatible = "dlg,da9063l", .data = &da9063_msg }, 69 69 { .compatible = "dlg,da9210", .data = &da9210_msg }, 70 - {}, 70 + { /* sentinel */ } 71 71 }; 72 72 73 73 static int regulator_quirk_notify(struct notifier_block *nb,
+1 -1
arch/arm/mach-shmobile/setup-emev2.c
··· 16 16 17 17 static const char *const emev2_boards_compat_dt[] __initconst = { 18 18 "renesas,emev2", 19 - NULL, 19 + NULL 20 20 }; 21 21 22 22 DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)")
+1 -1
arch/arm/mach-shmobile/setup-r7s72100.c
··· 14 14 15 15 static const char *const r7s72100_boards_compat_dt[] __initconst = { 16 16 "renesas,r7s72100", 17 - NULL, 17 + NULL 18 18 }; 19 19 20 20 DT_MACHINE_START(R7S72100_DT, "Generic R7S72100 (Flattened Device Tree)")
+1 -1
arch/arm/mach-shmobile/setup-r7s9210.c
··· 15 15 16 16 static const char *const r7s9210_boards_compat_dt[] __initconst = { 17 17 "renesas,r7s9210", 18 - NULL, 18 + NULL 19 19 }; 20 20 21 21 DT_MACHINE_START(R7S72100_DT, "Generic R7S9210 (Flattened Device Tree)")
+1 -1
arch/arm/mach-shmobile/setup-r8a73a4.c
··· 14 14 15 15 static const char *const r8a73a4_boards_compat_dt[] __initconst = { 16 16 "renesas,r8a73a4", 17 - NULL, 17 + NULL 18 18 }; 19 19 20 20 DT_MACHINE_START(R8A73A4_DT, "Generic R8A73A4 (Flattened Device Tree)")
+1 -1
arch/arm/mach-shmobile/setup-r8a7740.c
··· 72 72 73 73 static const char *const r8a7740_boards_compat_dt[] __initconst = { 74 74 "renesas,r8a7740", 75 - NULL, 75 + NULL 76 76 }; 77 77 78 78 DT_MACHINE_START(R8A7740_DT, "Generic R8A7740 (Flattened Device Tree)")
+1 -1
arch/arm/mach-shmobile/setup-r8a7778.c
··· 43 43 44 44 static const char *const r8a7778_compat_dt[] __initconst = { 45 45 "renesas,r8a7778", 46 - NULL, 46 + NULL 47 47 }; 48 48 49 49 DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)")
+1 -1
arch/arm/mach-shmobile/setup-r8a7779.c
··· 49 49 50 50 static const char *const r8a7779_compat_dt[] __initconst = { 51 51 "renesas,r8a7779", 52 - NULL, 52 + NULL 53 53 }; 54 54 55 55 DT_MACHINE_START(R8A7779_DT, "Generic R8A7779 (Flattened Device Tree)")
+2 -2
arch/arm/mach-shmobile/setup-rcar-gen2.c
··· 199 199 "renesas,r8a7792", 200 200 "renesas,r8a7793", 201 201 "renesas,r8a7794", 202 - NULL, 202 + NULL 203 203 }; 204 204 205 205 DT_MACHINE_START(RCAR_GEN2_DT, "Generic R-Car Gen2 (Flattened Device Tree)") ··· 215 215 "renesas,r8a7744", 216 216 "renesas,r8a7745", 217 217 "renesas,r8a77470", 218 - NULL, 218 + NULL 219 219 }; 220 220 221 221 DT_MACHINE_START(RZ_G1_DT, "Generic RZ/G1 (Flattened Device Tree)")
+1 -1
arch/arm/mach-shmobile/setup-sh73a0.c
··· 32 32 33 33 static const char *const sh73a0_boards_compat_dt[] __initconst = { 34 34 "renesas,sh73a0", 35 - NULL, 35 + NULL 36 36 }; 37 37 38 38 DT_MACHINE_START(SH73A0_DT, "Generic SH73A0 (Flattened Device Tree)")
+1 -1
arch/arm/mach-tegra/platsmp.c
··· 83 83 * For warm boot CPU that was resumed from CPU hotplug, the 84 84 * power will be resumed automatically after un-halting the 85 85 * flow controller of the warm boot CPU. We need to wait for 86 - * the confirmaiton that the CPU is powered then removing 86 + * the confirmation that the CPU is powered then removing 87 87 * the IO clamps. 88 88 * For cold boot CPU, do not wait. After the cold boot CPU be 89 89 * booted, it will run to tegra_secondary_init() and set
+1 -1
arch/arm/mm/cache-b15-rac.c
··· 74 74 __raw_writel(FLUSH_RAC, b15_rac_base + rac_flush_offset); 75 75 do { 76 76 /* This dmb() is required to force the Bus Interface Unit 77 - * to clean oustanding writes, and forces an idle cycle 77 + * to clean outstanding writes, and forces an idle cycle 78 78 * to be inserted. 79 79 */ 80 80 dmb();
+1 -1
drivers/soc/mediatek/mt8167-mmsys.h
··· 18 18 DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0, 19 19 MT8167_DISP_REG_CONFIG_DISP_OVL0_MOUT_EN, OVL0_MOUT_EN_COLOR0, 20 20 }, { 21 - DDP_COMPONENT_DITHER, DDP_COMPONENT_RDMA0, 21 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_RDMA0, 22 22 MT8167_DISP_REG_CONFIG_DISP_DITHER_MOUT_EN, MT8167_DITHER_MOUT_EN_RDMA0 23 23 }, { 24 24 DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0,
+1 -1
drivers/soc/mediatek/mt8183-mmsys.h
··· 41 41 MT8183_DISP_OVL1_2L_MOUT_EN, MT8183_OVL1_2L_MOUT_EN_RDMA1, 42 42 MT8183_OVL1_2L_MOUT_EN_RDMA1 43 43 }, { 44 - DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, 44 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 45 45 MT8183_DISP_DITHER0_MOUT_EN, MT8183_DITHER0_MOUT_IN_DSI0, 46 46 MT8183_DITHER0_MOUT_IN_DSI0 47 47 }, {
+2 -2
drivers/soc/mediatek/mt8186-mmsys.h
··· 76 76 MT8186_RDMA0_SOUT_TO_COLOR0 77 77 }, 78 78 { 79 - DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, 79 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 80 80 MT8186_DISP_DITHER0_MOUT_EN, MT8186_DITHER0_MOUT_EN_MASK, 81 81 MT8186_DITHER0_MOUT_TO_DSI0, 82 82 }, 83 83 { 84 - DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, 84 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 85 85 MT8186_DISP_DSI0_SEL_IN, MT8186_DSI0_SEL_IN_MASK, 86 86 MT8186_DSI0_FROM_DITHER0 87 87 },
+2 -2
drivers/soc/mediatek/mt8192-mmsys.h
··· 40 40 MT8192_DISP_OVL2_2L_MOUT_EN, MT8192_OVL2_2L_MOUT_EN_RDMA4, 41 41 MT8192_OVL2_2L_MOUT_EN_RDMA4 42 42 }, { 43 - DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, 43 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 44 44 MT8192_DISP_DITHER0_MOUT_EN, MT8192_DITHER0_MOUT_IN_DSI0, 45 45 MT8192_DITHER0_MOUT_IN_DSI0 46 46 }, { ··· 52 52 MT8192_DISP_AAL0_SEL_IN, MT8192_AAL0_SEL_IN_CCORR0, 53 53 MT8192_AAL0_SEL_IN_CCORR0 54 54 }, { 55 - DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, 55 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 56 56 MT8192_DISP_DSI0_SEL_IN, MT8192_DSI0_SEL_IN_DITHER0, 57 57 MT8192_DSI0_SEL_IN_DITHER0 58 58 }, {
+370
drivers/soc/mediatek/mt8195-mmsys.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + 3 + #ifndef __SOC_MEDIATEK_MT8195_MMSYS_H 4 + #define __SOC_MEDIATEK_MT8195_MMSYS_H 5 + 6 + #define MT8195_VDO0_OVL_MOUT_EN 0xf14 7 + #define MT8195_MOUT_DISP_OVL0_TO_DISP_RDMA0 BIT(0) 8 + #define MT8195_MOUT_DISP_OVL0_TO_DISP_WDMA0 BIT(1) 9 + #define MT8195_MOUT_DISP_OVL0_TO_DISP_OVL1 BIT(2) 10 + #define MT8195_MOUT_DISP_OVL1_TO_DISP_RDMA1 BIT(4) 11 + #define MT8195_MOUT_DISP_OVL1_TO_DISP_WDMA1 BIT(5) 12 + #define MT8195_MOUT_DISP_OVL1_TO_DISP_OVL0 BIT(6) 13 + 14 + #define MT8195_VDO0_SEL_IN 0xf34 15 + #define MT8195_SEL_IN_VPP_MERGE_FROM_MASK GENMASK(1, 0) 16 + #define MT8195_SEL_IN_VPP_MERGE_FROM_DSC_WRAP0_OUT (0 << 0) 17 + #define MT8195_SEL_IN_VPP_MERGE_FROM_DISP_DITHER1 (1 << 0) 18 + #define MT8195_SEL_IN_VPP_MERGE_FROM_VDO1_VIRTUAL0 (2 << 0) 19 + #define MT8195_SEL_IN_DSC_WRAP0_IN_FROM_MASK GENMASK(4, 4) 20 + #define MT8195_SEL_IN_DSC_WRAP0_IN_FROM_DISP_DITHER0 (0 << 4) 21 + #define MT8195_SEL_IN_DSC_WRAP0_IN_FROM_VPP_MERGE (1 << 4) 22 + #define MT8195_SEL_IN_DSC_WRAP1_IN_FROM_MASK GENMASK(5, 5) 23 + #define MT8195_SEL_IN_DSC_WRAP1_IN_FROM_DISP_DITHER1 (0 << 5) 24 + #define MT8195_SEL_IN_DSC_WRAP1_IN_FROM_VPP_MERGE (1 << 5) 25 + #define MT8195_SEL_IN_SINA_VIRTUAL0_FROM_MASK GENMASK(8, 8) 26 + #define MT8195_SEL_IN_SINA_VIRTUAL0_FROM_VPP_MERGE (0 << 8) 27 + #define MT8195_SEL_IN_SINA_VIRTUAL0_FROM_DSC_WRAP1_OUT (1 << 8) 28 + #define MT8195_SEL_IN_SINB_VIRTUAL0_FROM_MASK GENMASK(9, 9) 29 + #define MT8195_SEL_IN_SINB_VIRTUAL0_FROM_DSC_WRAP0_OUT (0 << 9) 30 + #define MT8195_SEL_IN_DP_INTF0_FROM_MASK GENMASK(13, 12) 31 + #define MT8195_SEL_IN_DP_INTF0_FROM_DSC_WRAP1_OUT (0 << 0) 32 + #define MT8195_SEL_IN_DP_INTF0_FROM_VPP_MERGE (1 << 12) 33 + #define MT8195_SEL_IN_DP_INTF0_FROM_VDO1_VIRTUAL0 (2 << 12) 34 + #define MT8195_SEL_IN_DSI0_FROM_MASK GENMASK(16, 16) 35 + #define MT8195_SEL_IN_DSI0_FROM_DSC_WRAP0_OUT (0 << 16) 36 + #define MT8195_SEL_IN_DSI0_FROM_DISP_DITHER0 (1 << 16) 37 + #define MT8195_SEL_IN_DSI1_FROM_MASK GENMASK(17, 17) 38 + #define MT8195_SEL_IN_DSI1_FROM_DSC_WRAP1_OUT (0 << 17) 39 + #define MT8195_SEL_IN_DSI1_FROM_VPP_MERGE (1 << 17) 40 + #define MT8195_SEL_IN_DISP_WDMA1_FROM_MASK GENMASK(20, 20) 41 + #define MT8195_SEL_IN_DISP_WDMA1_FROM_DISP_OVL1 (0 << 20) 42 + #define MT8195_SEL_IN_DISP_WDMA1_FROM_VPP_MERGE (1 << 20) 43 + #define MT8195_SEL_IN_DSC_WRAP1_FROM_MASK GENMASK(21, 21) 44 + #define MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DSC_WRAP1_IN (0 << 21) 45 + #define MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DISP_DITHER1 (1 << 21) 46 + #define MT8195_SEL_IN_DISP_WDMA0_FROM_MASK GENMASK(22, 22) 47 + #define MT8195_SEL_IN_DISP_WDMA0_FROM_DISP_OVL0 (0 << 22) 48 + 49 + #define MT8195_VDO0_SEL_OUT 0xf38 50 + #define MT8195_SOUT_DISP_DITHER0_TO_MASK BIT(0) 51 + #define MT8195_SOUT_DISP_DITHER0_TO_DSC_WRAP0_IN (0 << 0) 52 + #define MT8195_SOUT_DISP_DITHER0_TO_DSI0 (1 << 0) 53 + #define MT8195_SOUT_DISP_DITHER1_TO_MASK GENMASK(2, 1) 54 + #define MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_IN (0 << 1) 55 + #define MT8195_SOUT_DISP_DITHER1_TO_VPP_MERGE (1 << 1) 56 + #define MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_OUT (2 << 1) 57 + #define MT8195_SOUT_VDO1_VIRTUAL0_TO_MASK GENMASK(4, 4) 58 + #define MT8195_SOUT_VDO1_VIRTUAL0_TO_VPP_MERGE (0 << 4) 59 + #define MT8195_SOUT_VDO1_VIRTUAL0_TO_DP_INTF0 (1 << 4) 60 + #define MT8195_SOUT_VPP_MERGE_TO_MASK GENMASK(10, 8) 61 + #define MT8195_SOUT_VPP_MERGE_TO_DSI1 (0 << 8) 62 + #define MT8195_SOUT_VPP_MERGE_TO_DP_INTF0 (1 << 8) 63 + #define MT8195_SOUT_VPP_MERGE_TO_SINA_VIRTUAL0 (2 << 8) 64 + #define MT8195_SOUT_VPP_MERGE_TO_DISP_WDMA1 (3 << 8) 65 + #define MT8195_SOUT_VPP_MERGE_TO_DSC_WRAP0_IN (4 << 8) 66 + #define MT8195_SOUT_VPP_MERGE_TO_DSC_WRAP1_IN_MASK GENMASK(11, 11) 67 + #define MT8195_SOUT_VPP_MERGE_TO_DSC_WRAP1_IN (0 << 11) 68 + #define MT8195_SOUT_DSC_WRAP0_OUT_TO_MASK GENMASK(13, 12) 69 + #define MT8195_SOUT_DSC_WRAP0_OUT_TO_DSI0 (0 << 12) 70 + #define MT8195_SOUT_DSC_WRAP0_OUT_TO_SINB_VIRTUAL0 (1 << 12) 71 + #define MT8195_SOUT_DSC_WRAP0_OUT_TO_VPP_MERGE (2 << 12) 72 + #define MT8195_SOUT_DSC_WRAP1_OUT_TO_MASK GENMASK(17, 16) 73 + #define MT8195_SOUT_DSC_WRAP1_OUT_TO_DSI1 (0 << 16) 74 + #define MT8195_SOUT_DSC_WRAP1_OUT_TO_DP_INTF0 (1 << 16) 75 + #define MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0 (2 << 16) 76 + #define MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE (3 << 16) 77 + 78 + static const struct mtk_mmsys_routes mmsys_mt8195_routing_table[] = { 79 + { 80 + DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0, 81 + MT8195_VDO0_OVL_MOUT_EN, MT8195_MOUT_DISP_OVL0_TO_DISP_RDMA0, 82 + MT8195_MOUT_DISP_OVL0_TO_DISP_RDMA0 83 + }, { 84 + DDP_COMPONENT_OVL0, DDP_COMPONENT_WDMA0, 85 + MT8195_VDO0_OVL_MOUT_EN, MT8195_MOUT_DISP_OVL0_TO_DISP_WDMA0, 86 + MT8195_MOUT_DISP_OVL0_TO_DISP_WDMA0 87 + }, { 88 + DDP_COMPONENT_OVL0, DDP_COMPONENT_OVL1, 89 + MT8195_VDO0_OVL_MOUT_EN, MT8195_MOUT_DISP_OVL0_TO_DISP_OVL1, 90 + MT8195_MOUT_DISP_OVL0_TO_DISP_OVL1 91 + }, { 92 + DDP_COMPONENT_OVL1, DDP_COMPONENT_RDMA1, 93 + MT8195_VDO0_OVL_MOUT_EN, MT8195_MOUT_DISP_OVL1_TO_DISP_RDMA1, 94 + MT8195_MOUT_DISP_OVL1_TO_DISP_RDMA1 95 + }, { 96 + DDP_COMPONENT_OVL1, DDP_COMPONENT_WDMA1, 97 + MT8195_VDO0_OVL_MOUT_EN, MT8195_MOUT_DISP_OVL1_TO_DISP_WDMA1, 98 + MT8195_MOUT_DISP_OVL1_TO_DISP_WDMA1 99 + }, { 100 + DDP_COMPONENT_OVL1, DDP_COMPONENT_OVL0, 101 + MT8195_VDO0_OVL_MOUT_EN, MT8195_MOUT_DISP_OVL1_TO_DISP_OVL0, 102 + MT8195_MOUT_DISP_OVL1_TO_DISP_OVL0 103 + }, { 104 + DDP_COMPONENT_DSC0, DDP_COMPONENT_MERGE0, 105 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_VPP_MERGE_FROM_MASK, 106 + MT8195_SEL_IN_VPP_MERGE_FROM_DSC_WRAP0_OUT 107 + }, { 108 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_MERGE0, 109 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_VPP_MERGE_FROM_MASK, 110 + MT8195_SEL_IN_VPP_MERGE_FROM_DISP_DITHER1 111 + }, { 112 + DDP_COMPONENT_MERGE5, DDP_COMPONENT_MERGE0, 113 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_VPP_MERGE_FROM_MASK, 114 + MT8195_SEL_IN_VPP_MERGE_FROM_VDO1_VIRTUAL0 115 + }, { 116 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSC0, 117 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP0_IN_FROM_MASK, 118 + MT8195_SEL_IN_DSC_WRAP0_IN_FROM_DISP_DITHER0 119 + }, { 120 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DSC0, 121 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP0_IN_FROM_MASK, 122 + MT8195_SEL_IN_DSC_WRAP0_IN_FROM_VPP_MERGE 123 + }, { 124 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DSC1, 125 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_IN_FROM_MASK, 126 + MT8195_SEL_IN_DSC_WRAP1_IN_FROM_DISP_DITHER1 127 + }, { 128 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DSC1, 129 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_IN_FROM_MASK, 130 + MT8195_SEL_IN_DSC_WRAP1_IN_FROM_VPP_MERGE 131 + }, { 132 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DP_INTF1, 133 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINA_VIRTUAL0_FROM_MASK, 134 + MT8195_SEL_IN_SINA_VIRTUAL0_FROM_VPP_MERGE 135 + }, { 136 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DPI0, 137 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINA_VIRTUAL0_FROM_MASK, 138 + MT8195_SEL_IN_SINA_VIRTUAL0_FROM_VPP_MERGE 139 + }, { 140 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DPI1, 141 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINA_VIRTUAL0_FROM_MASK, 142 + MT8195_SEL_IN_SINA_VIRTUAL0_FROM_VPP_MERGE 143 + }, { 144 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DP_INTF1, 145 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINA_VIRTUAL0_FROM_MASK, 146 + MT8195_SEL_IN_SINA_VIRTUAL0_FROM_DSC_WRAP1_OUT 147 + }, { 148 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DPI0, 149 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINA_VIRTUAL0_FROM_MASK, 150 + MT8195_SEL_IN_SINA_VIRTUAL0_FROM_DSC_WRAP1_OUT 151 + }, { 152 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DPI1, 153 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINA_VIRTUAL0_FROM_MASK, 154 + MT8195_SEL_IN_SINA_VIRTUAL0_FROM_DSC_WRAP1_OUT 155 + }, { 156 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DP_INTF1, 157 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINB_VIRTUAL0_FROM_MASK, 158 + MT8195_SEL_IN_SINB_VIRTUAL0_FROM_DSC_WRAP0_OUT 159 + }, { 160 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DPI0, 161 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINB_VIRTUAL0_FROM_MASK, 162 + MT8195_SEL_IN_SINB_VIRTUAL0_FROM_DSC_WRAP0_OUT 163 + }, { 164 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DPI1, 165 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_SINB_VIRTUAL0_FROM_MASK, 166 + MT8195_SEL_IN_SINB_VIRTUAL0_FROM_DSC_WRAP0_OUT 167 + }, { 168 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DP_INTF0, 169 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DP_INTF0_FROM_MASK, 170 + MT8195_SEL_IN_DP_INTF0_FROM_DSC_WRAP1_OUT 171 + }, { 172 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DP_INTF0, 173 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DP_INTF0_FROM_MASK, 174 + MT8195_SEL_IN_DP_INTF0_FROM_VPP_MERGE 175 + }, { 176 + DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF0, 177 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DP_INTF0_FROM_MASK, 178 + MT8195_SEL_IN_DP_INTF0_FROM_VDO1_VIRTUAL0 179 + }, { 180 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DSI0, 181 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSI0_FROM_MASK, 182 + MT8195_SEL_IN_DSI0_FROM_DSC_WRAP0_OUT 183 + }, { 184 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 185 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSI0_FROM_MASK, 186 + MT8195_SEL_IN_DSI0_FROM_DISP_DITHER0 187 + }, { 188 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DSI1, 189 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSI1_FROM_MASK, 190 + MT8195_SEL_IN_DSI1_FROM_DSC_WRAP1_OUT 191 + }, { 192 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DSI1, 193 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSI1_FROM_MASK, 194 + MT8195_SEL_IN_DSI1_FROM_VPP_MERGE 195 + }, { 196 + DDP_COMPONENT_OVL1, DDP_COMPONENT_WDMA1, 197 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DISP_WDMA1_FROM_MASK, 198 + MT8195_SEL_IN_DISP_WDMA1_FROM_DISP_OVL1 199 + }, { 200 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_WDMA1, 201 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DISP_WDMA1_FROM_MASK, 202 + MT8195_SEL_IN_DISP_WDMA1_FROM_VPP_MERGE 203 + }, { 204 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DSI1, 205 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 206 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DSC_WRAP1_IN 207 + }, { 208 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DP_INTF0, 209 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 210 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DSC_WRAP1_IN 211 + }, { 212 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DP_INTF1, 213 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 214 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DSC_WRAP1_IN 215 + }, { 216 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DPI0, 217 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 218 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DSC_WRAP1_IN 219 + }, { 220 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DPI1, 221 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 222 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DSC_WRAP1_IN 223 + }, { 224 + DDP_COMPONENT_DSC1, DDP_COMPONENT_MERGE0, 225 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 226 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DSC_WRAP1_IN 227 + }, { 228 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DSI1, 229 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 230 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DISP_DITHER1 231 + }, { 232 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DP_INTF0, 233 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 234 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DISP_DITHER1 235 + }, { 236 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DPI0, 237 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 238 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DISP_DITHER1 239 + }, { 240 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DPI1, 241 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DSC_WRAP1_FROM_MASK, 242 + MT8195_SEL_IN_DSC_WRAP1_OUT_FROM_DISP_DITHER1 243 + }, { 244 + DDP_COMPONENT_OVL0, DDP_COMPONENT_WDMA0, 245 + MT8195_VDO0_SEL_IN, MT8195_SEL_IN_DISP_WDMA0_FROM_MASK, 246 + MT8195_SEL_IN_DISP_WDMA0_FROM_DISP_OVL0 247 + }, { 248 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSC0, 249 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER0_TO_MASK, 250 + MT8195_SOUT_DISP_DITHER0_TO_DSC_WRAP0_IN 251 + }, { 252 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 253 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER0_TO_MASK, 254 + MT8195_SOUT_DISP_DITHER0_TO_DSI0 255 + }, { 256 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DSC1, 257 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER1_TO_MASK, 258 + MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_IN 259 + }, { 260 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_MERGE0, 261 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER1_TO_MASK, 262 + MT8195_SOUT_DISP_DITHER1_TO_VPP_MERGE 263 + }, { 264 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DSI1, 265 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER1_TO_MASK, 266 + MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_OUT 267 + }, { 268 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DP_INTF0, 269 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER1_TO_MASK, 270 + MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_OUT 271 + }, { 272 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DP_INTF1, 273 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER1_TO_MASK, 274 + MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_OUT 275 + }, { 276 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DPI0, 277 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER1_TO_MASK, 278 + MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_OUT 279 + }, { 280 + DDP_COMPONENT_DITHER1, DDP_COMPONENT_DPI1, 281 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DISP_DITHER1_TO_MASK, 282 + MT8195_SOUT_DISP_DITHER1_TO_DSC_WRAP1_OUT 283 + }, { 284 + DDP_COMPONENT_MERGE5, DDP_COMPONENT_MERGE0, 285 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VDO1_VIRTUAL0_TO_MASK, 286 + MT8195_SOUT_VDO1_VIRTUAL0_TO_VPP_MERGE 287 + }, { 288 + DDP_COMPONENT_MERGE5, DDP_COMPONENT_DP_INTF0, 289 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VDO1_VIRTUAL0_TO_MASK, 290 + MT8195_SOUT_VDO1_VIRTUAL0_TO_DP_INTF0 291 + }, { 292 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DSI1, 293 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_MASK, 294 + MT8195_SOUT_VPP_MERGE_TO_DSI1 295 + }, { 296 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DP_INTF0, 297 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_MASK, 298 + MT8195_SOUT_VPP_MERGE_TO_DP_INTF0 299 + }, { 300 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DP_INTF1, 301 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_MASK, 302 + MT8195_SOUT_VPP_MERGE_TO_SINA_VIRTUAL0 303 + }, { 304 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DPI0, 305 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_MASK, 306 + MT8195_SOUT_VPP_MERGE_TO_SINA_VIRTUAL0 307 + }, { 308 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DPI1, 309 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_MASK, 310 + MT8195_SOUT_VPP_MERGE_TO_SINA_VIRTUAL0 311 + }, { 312 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_WDMA1, 313 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_MASK, 314 + MT8195_SOUT_VPP_MERGE_TO_DISP_WDMA1 315 + }, { 316 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DSC0, 317 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_MASK, 318 + MT8195_SOUT_VPP_MERGE_TO_DSC_WRAP0_IN 319 + }, { 320 + DDP_COMPONENT_MERGE0, DDP_COMPONENT_DSC1, 321 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_VPP_MERGE_TO_DSC_WRAP1_IN_MASK, 322 + MT8195_SOUT_VPP_MERGE_TO_DSC_WRAP1_IN 323 + }, { 324 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DSI0, 325 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP0_OUT_TO_MASK, 326 + MT8195_SOUT_DSC_WRAP0_OUT_TO_DSI0 327 + }, { 328 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DP_INTF1, 329 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP0_OUT_TO_MASK, 330 + MT8195_SOUT_DSC_WRAP0_OUT_TO_SINB_VIRTUAL0 331 + }, { 332 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DPI0, 333 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP0_OUT_TO_MASK, 334 + MT8195_SOUT_DSC_WRAP0_OUT_TO_SINB_VIRTUAL0 335 + }, { 336 + DDP_COMPONENT_DSC0, DDP_COMPONENT_DPI1, 337 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP0_OUT_TO_MASK, 338 + MT8195_SOUT_DSC_WRAP0_OUT_TO_SINB_VIRTUAL0 339 + }, { 340 + DDP_COMPONENT_DSC0, DDP_COMPONENT_MERGE0, 341 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP0_OUT_TO_MASK, 342 + MT8195_SOUT_DSC_WRAP0_OUT_TO_VPP_MERGE 343 + }, { 344 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DSI1, 345 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP1_OUT_TO_MASK, 346 + MT8195_SOUT_DSC_WRAP1_OUT_TO_DSI1 347 + }, { 348 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DP_INTF0, 349 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP1_OUT_TO_MASK, 350 + MT8195_SOUT_DSC_WRAP1_OUT_TO_DP_INTF0 351 + }, { 352 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DP_INTF1, 353 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP1_OUT_TO_MASK, 354 + MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0 355 + }, { 356 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DPI0, 357 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP1_OUT_TO_MASK, 358 + MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0 359 + }, { 360 + DDP_COMPONENT_DSC1, DDP_COMPONENT_DPI1, 361 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP1_OUT_TO_MASK, 362 + MT8195_SOUT_DSC_WRAP1_OUT_TO_SINA_VIRTUAL0 363 + }, { 364 + DDP_COMPONENT_DSC1, DDP_COMPONENT_MERGE0, 365 + MT8195_VDO0_SEL_OUT, MT8195_SOUT_DSC_WRAP1_OUT_TO_MASK, 366 + MT8195_SOUT_DSC_WRAP1_OUT_TO_VPP_MERGE 367 + } 368 + }; 369 + 370 + #endif /* __SOC_MEDIATEK_MT8195_MMSYS_H */
+2 -2
drivers/soc/mediatek/mt8365-mmsys.h
··· 41 41 MT8365_DISP_COLOR_SEL_IN_COLOR0,MT8365_DISP_COLOR_SEL_IN_COLOR0 42 42 }, 43 43 { 44 - DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, 44 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 45 45 MT8365_DISP_REG_CONFIG_DISP_DITHER0_MOUT_EN, 46 46 MT8365_DITHER_MOUT_EN_DSI0, MT8365_DITHER_MOUT_EN_DSI0 47 47 }, 48 48 { 49 - DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0, 49 + DDP_COMPONENT_DITHER0, DDP_COMPONENT_DSI0, 50 50 MT8365_DISP_REG_CONFIG_DISP_DSI0_SEL_IN, 51 51 MT8365_DSI0_SEL_IN_DITHER, MT8365_DSI0_SEL_IN_DITHER 52 52 },
+1 -24
drivers/soc/mediatek/mtk-cmdq-helper.c
··· 425 425 } 426 426 EXPORT_SYMBOL(cmdq_pkt_finalize); 427 427 428 - static void cmdq_pkt_flush_async_cb(struct cmdq_cb_data data) 429 - { 430 - struct cmdq_pkt *pkt = (struct cmdq_pkt *)data.data; 431 - struct cmdq_task_cb *cb = &pkt->cb; 432 - struct cmdq_client *client = (struct cmdq_client *)pkt->cl; 433 - 434 - dma_sync_single_for_cpu(client->chan->mbox->dev, pkt->pa_base, 435 - pkt->cmd_buf_size, DMA_TO_DEVICE); 436 - if (cb->cb) { 437 - data.data = cb->data; 438 - cb->cb(data); 439 - } 440 - } 441 - 442 - int cmdq_pkt_flush_async(struct cmdq_pkt *pkt, cmdq_async_flush_cb cb, 443 - void *data) 428 + int cmdq_pkt_flush_async(struct cmdq_pkt *pkt) 444 429 { 445 430 int err; 446 431 struct cmdq_client *client = (struct cmdq_client *)pkt->cl; 447 - 448 - pkt->cb.cb = cb; 449 - pkt->cb.data = data; 450 - pkt->async_cb.cb = cmdq_pkt_flush_async_cb; 451 - pkt->async_cb.data = pkt; 452 - 453 - dma_sync_single_for_device(client->chan->mbox->dev, pkt->pa_base, 454 - pkt->cmd_buf_size, DMA_TO_DEVICE); 455 432 456 433 err = mbox_send_message(client->chan, pkt); 457 434 if (err < 0)
+142 -11
drivers/soc/mediatek/mtk-mmsys.c
··· 17 17 #include "mt8183-mmsys.h" 18 18 #include "mt8186-mmsys.h" 19 19 #include "mt8192-mmsys.h" 20 + #include "mt8195-mmsys.h" 20 21 #include "mt8365-mmsys.h" 21 22 22 23 static const struct mtk_mmsys_driver_data mt2701_mmsys_driver_data = { ··· 26 25 .num_routes = ARRAY_SIZE(mmsys_default_routing_table), 27 26 }; 28 27 28 + static const struct mtk_mmsys_match_data mt2701_mmsys_match_data = { 29 + .num_drv_data = 1, 30 + .drv_data = { 31 + &mt2701_mmsys_driver_data, 32 + }, 33 + }; 34 + 29 35 static const struct mtk_mmsys_driver_data mt2712_mmsys_driver_data = { 30 36 .clk_driver = "clk-mt2712-mm", 31 37 .routes = mmsys_default_routing_table, 32 38 .num_routes = ARRAY_SIZE(mmsys_default_routing_table), 33 39 }; 34 40 41 + static const struct mtk_mmsys_match_data mt2712_mmsys_match_data = { 42 + .num_drv_data = 1, 43 + .drv_data = { 44 + &mt2712_mmsys_driver_data, 45 + }, 46 + }; 47 + 35 48 static const struct mtk_mmsys_driver_data mt6779_mmsys_driver_data = { 36 49 .clk_driver = "clk-mt6779-mm", 50 + }; 51 + 52 + static const struct mtk_mmsys_match_data mt6779_mmsys_match_data = { 53 + .num_drv_data = 1, 54 + .drv_data = { 55 + &mt6779_mmsys_driver_data, 56 + }, 37 57 }; 38 58 39 59 static const struct mtk_mmsys_driver_data mt6797_mmsys_driver_data = { 40 60 .clk_driver = "clk-mt6797-mm", 41 61 }; 42 62 63 + static const struct mtk_mmsys_match_data mt6797_mmsys_match_data = { 64 + .num_drv_data = 1, 65 + .drv_data = { 66 + &mt6797_mmsys_driver_data, 67 + }, 68 + }; 69 + 43 70 static const struct mtk_mmsys_driver_data mt8167_mmsys_driver_data = { 44 71 .clk_driver = "clk-mt8167-mm", 45 72 .routes = mt8167_mmsys_routing_table, 46 73 .num_routes = ARRAY_SIZE(mt8167_mmsys_routing_table), 74 + }; 75 + 76 + static const struct mtk_mmsys_match_data mt8167_mmsys_match_data = { 77 + .num_drv_data = 1, 78 + .drv_data = { 79 + &mt8167_mmsys_driver_data, 80 + }, 47 81 }; 48 82 49 83 static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = { ··· 88 52 .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B, 89 53 }; 90 54 55 + static const struct mtk_mmsys_match_data mt8173_mmsys_match_data = { 56 + .num_drv_data = 1, 57 + .drv_data = { 58 + &mt8173_mmsys_driver_data, 59 + }, 60 + }; 61 + 91 62 static const struct mtk_mmsys_driver_data mt8183_mmsys_driver_data = { 92 63 .clk_driver = "clk-mt8183-mm", 93 64 .routes = mmsys_mt8183_routing_table, 94 65 .num_routes = ARRAY_SIZE(mmsys_mt8183_routing_table), 95 66 .sw0_rst_offset = MT8183_MMSYS_SW0_RST_B, 67 + }; 68 + 69 + static const struct mtk_mmsys_match_data mt8183_mmsys_match_data = { 70 + .num_drv_data = 1, 71 + .drv_data = { 72 + &mt8183_mmsys_driver_data, 73 + }, 96 74 }; 97 75 98 76 static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = { ··· 116 66 .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B, 117 67 }; 118 68 69 + static const struct mtk_mmsys_match_data mt8186_mmsys_match_data = { 70 + .num_drv_data = 1, 71 + .drv_data = { 72 + &mt8186_mmsys_driver_data, 73 + }, 74 + }; 75 + 119 76 static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = { 120 77 .clk_driver = "clk-mt8192-mm", 121 78 .routes = mmsys_mt8192_routing_table, 122 79 .num_routes = ARRAY_SIZE(mmsys_mt8192_routing_table), 80 + .sw0_rst_offset = MT8186_MMSYS_SW0_RST_B, 81 + }; 82 + 83 + static const struct mtk_mmsys_match_data mt8192_mmsys_match_data = { 84 + .num_drv_data = 1, 85 + .drv_data = { 86 + &mt8192_mmsys_driver_data, 87 + }, 88 + }; 89 + 90 + static const struct mtk_mmsys_driver_data mt8195_vdosys0_driver_data = { 91 + .io_start = 0x1c01a000, 92 + .clk_driver = "clk-mt8195-vdo0", 93 + .routes = mmsys_mt8195_routing_table, 94 + .num_routes = ARRAY_SIZE(mmsys_mt8195_routing_table), 95 + }; 96 + 97 + static const struct mtk_mmsys_driver_data mt8195_vdosys1_driver_data = { 98 + .io_start = 0x1c100000, 99 + .clk_driver = "clk-mt8195-vdo1", 100 + }; 101 + 102 + static const struct mtk_mmsys_match_data mt8195_mmsys_match_data = { 103 + .num_drv_data = 2, 104 + .drv_data = { 105 + &mt8195_vdosys0_driver_data, 106 + &mt8195_vdosys1_driver_data, 107 + }, 123 108 }; 124 109 125 110 static const struct mtk_mmsys_driver_data mt8365_mmsys_driver_data = { ··· 163 78 .num_routes = ARRAY_SIZE(mt8365_mmsys_routing_table), 164 79 }; 165 80 81 + static const struct mtk_mmsys_match_data mt8365_mmsys_match_data = { 82 + .num_drv_data = 1, 83 + .drv_data = { 84 + &mt8365_mmsys_driver_data, 85 + }, 86 + }; 87 + 166 88 struct mtk_mmsys { 167 89 void __iomem *regs; 168 90 const struct mtk_mmsys_driver_data *data; 169 91 spinlock_t lock; /* protects mmsys_sw_rst_b reg */ 170 92 struct reset_controller_dev rcdev; 93 + phys_addr_t io_start; 171 94 }; 95 + 96 + static int mtk_mmsys_find_match_drvdata(struct mtk_mmsys *mmsys, 97 + const struct mtk_mmsys_match_data *match) 98 + { 99 + int i; 100 + 101 + for (i = 0; i < match->num_drv_data; i++) 102 + if (mmsys->io_start == match->drv_data[i]->io_start) 103 + return i; 104 + 105 + return -EINVAL; 106 + } 172 107 173 108 void mtk_mmsys_ddp_connect(struct device *dev, 174 109 enum mtk_ddp_comp_id cur, ··· 284 179 struct device *dev = &pdev->dev; 285 180 struct platform_device *clks; 286 181 struct platform_device *drm; 182 + const struct mtk_mmsys_match_data *match_data; 287 183 struct mtk_mmsys *mmsys; 184 + struct resource *res; 288 185 int ret; 289 186 290 187 mmsys = devm_kzalloc(dev, sizeof(*mmsys), GFP_KERNEL); ··· 312 205 return ret; 313 206 } 314 207 315 - mmsys->data = of_device_get_match_data(&pdev->dev); 208 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 209 + if (!res) { 210 + dev_err(dev, "Couldn't get mmsys resource\n"); 211 + return -EINVAL; 212 + } 213 + mmsys->io_start = res->start; 214 + 215 + match_data = of_device_get_match_data(dev); 216 + if (match_data->num_drv_data > 1) { 217 + /* This SoC has multiple mmsys channels */ 218 + ret = mtk_mmsys_find_match_drvdata(mmsys, match_data); 219 + if (ret < 0) { 220 + dev_err(dev, "Couldn't get match driver data\n"); 221 + return ret; 222 + } 223 + mmsys->data = match_data->drv_data[ret]; 224 + } else { 225 + dev_dbg(dev, "Using single mmsys channel\n"); 226 + mmsys->data = match_data->drv_data[0]; 227 + } 228 + 316 229 platform_set_drvdata(pdev, mmsys); 317 230 318 231 clks = platform_device_register_data(&pdev->dev, mmsys->data->clk_driver, ··· 353 226 static const struct of_device_id of_match_mtk_mmsys[] = { 354 227 { 355 228 .compatible = "mediatek,mt2701-mmsys", 356 - .data = &mt2701_mmsys_driver_data, 229 + .data = &mt2701_mmsys_match_data, 357 230 }, 358 231 { 359 232 .compatible = "mediatek,mt2712-mmsys", 360 - .data = &mt2712_mmsys_driver_data, 233 + .data = &mt2712_mmsys_match_data, 361 234 }, 362 235 { 363 236 .compatible = "mediatek,mt6779-mmsys", 364 - .data = &mt6779_mmsys_driver_data, 237 + .data = &mt6779_mmsys_match_data, 365 238 }, 366 239 { 367 240 .compatible = "mediatek,mt6797-mmsys", 368 - .data = &mt6797_mmsys_driver_data, 241 + .data = &mt6797_mmsys_match_data, 369 242 }, 370 243 { 371 244 .compatible = "mediatek,mt8167-mmsys", 372 - .data = &mt8167_mmsys_driver_data, 245 + .data = &mt8167_mmsys_match_data, 373 246 }, 374 247 { 375 248 .compatible = "mediatek,mt8173-mmsys", 376 - .data = &mt8173_mmsys_driver_data, 249 + .data = &mt8173_mmsys_match_data, 377 250 }, 378 251 { 379 252 .compatible = "mediatek,mt8183-mmsys", 380 - .data = &mt8183_mmsys_driver_data, 253 + .data = &mt8183_mmsys_match_data, 381 254 }, 382 255 { 383 256 .compatible = "mediatek,mt8186-mmsys", 384 - .data = &mt8186_mmsys_driver_data, 257 + .data = &mt8186_mmsys_match_data, 385 258 }, 386 259 { 387 260 .compatible = "mediatek,mt8192-mmsys", 388 - .data = &mt8192_mmsys_driver_data, 261 + .data = &mt8192_mmsys_match_data, 262 + }, 263 + { 264 + .compatible = "mediatek,mt8195-mmsys", 265 + .data = &mt8195_mmsys_match_data, 389 266 }, 390 267 { 391 268 .compatible = "mediatek,mt8365-mmsys", 392 - .data = &mt8365_mmsys_driver_data, 269 + .data = &mt8365_mmsys_match_data, 393 270 }, 394 271 { } 395 272 };
+6
drivers/soc/mediatek/mtk-mmsys.h
··· 87 87 }; 88 88 89 89 struct mtk_mmsys_driver_data { 90 + const resource_size_t io_start; 90 91 const char *clk_driver; 91 92 const struct mtk_mmsys_routes *routes; 92 93 const unsigned int num_routes; 93 94 const u16 sw0_rst_offset; 95 + }; 96 + 97 + struct mtk_mmsys_match_data { 98 + unsigned short num_drv_data; 99 + const struct mtk_mmsys_driver_data *drv_data[]; 94 100 }; 95 101 96 102 /*
+85 -7
drivers/soc/mediatek/mtk-mutex.c
··· 96 96 #define MT8173_MUTEX_MOD_DISP_PWM1 24 97 97 #define MT8173_MUTEX_MOD_DISP_OD 25 98 98 99 + #define MT8195_MUTEX_MOD_DISP_OVL0 0 100 + #define MT8195_MUTEX_MOD_DISP_WDMA0 1 101 + #define MT8195_MUTEX_MOD_DISP_RDMA0 2 102 + #define MT8195_MUTEX_MOD_DISP_COLOR0 3 103 + #define MT8195_MUTEX_MOD_DISP_CCORR0 4 104 + #define MT8195_MUTEX_MOD_DISP_AAL0 5 105 + #define MT8195_MUTEX_MOD_DISP_GAMMA0 6 106 + #define MT8195_MUTEX_MOD_DISP_DITHER0 7 107 + #define MT8195_MUTEX_MOD_DISP_DSI0 8 108 + #define MT8195_MUTEX_MOD_DISP_DSC_WRAP0_CORE0 9 109 + #define MT8195_MUTEX_MOD_DISP_VPP_MERGE 20 110 + #define MT8195_MUTEX_MOD_DISP_DP_INTF0 21 111 + #define MT8195_MUTEX_MOD_DISP_PWM0 27 112 + 99 113 #define MT2712_MUTEX_MOD_DISP_PWM2 10 100 114 #define MT2712_MUTEX_MOD_DISP_OVL0 11 101 115 #define MT2712_MUTEX_MOD_DISP_OVL1 12 ··· 146 132 #define MT8167_MUTEX_SOF_DPI1 3 147 133 #define MT8183_MUTEX_SOF_DSI0 1 148 134 #define MT8183_MUTEX_SOF_DPI0 2 135 + #define MT8195_MUTEX_SOF_DSI0 1 136 + #define MT8195_MUTEX_SOF_DSI1 2 137 + #define MT8195_MUTEX_SOF_DP_INTF0 3 138 + #define MT8195_MUTEX_SOF_DP_INTF1 4 139 + #define MT8195_MUTEX_SOF_DPI0 6 /* for HDMI_TX */ 140 + #define MT8195_MUTEX_SOF_DPI1 5 /* for digital video out */ 149 141 150 142 #define MT8183_MUTEX_EOF_DSI0 (MT8183_MUTEX_SOF_DSI0 << 6) 151 143 #define MT8183_MUTEX_EOF_DPI0 (MT8183_MUTEX_SOF_DPI0 << 6) 144 + #define MT8195_MUTEX_EOF_DSI0 (MT8195_MUTEX_SOF_DSI0 << 7) 145 + #define MT8195_MUTEX_EOF_DSI1 (MT8195_MUTEX_SOF_DSI1 << 7) 146 + #define MT8195_MUTEX_EOF_DP_INTF0 (MT8195_MUTEX_SOF_DP_INTF0 << 7) 147 + #define MT8195_MUTEX_EOF_DP_INTF1 (MT8195_MUTEX_SOF_DP_INTF1 << 7) 148 + #define MT8195_MUTEX_EOF_DPI0 (MT8195_MUTEX_SOF_DPI0 << 7) 149 + #define MT8195_MUTEX_EOF_DPI1 (MT8195_MUTEX_SOF_DPI1 << 7) 152 150 153 151 struct mtk_mutex { 154 152 int id; ··· 175 149 MUTEX_SOF_DPI1, 176 150 MUTEX_SOF_DSI2, 177 151 MUTEX_SOF_DSI3, 152 + MUTEX_SOF_DP_INTF0, 153 + MUTEX_SOF_DP_INTF1, 154 + DDP_MUTEX_SOF_MAX, 178 155 }; 179 156 180 157 struct mtk_mutex_data { ··· 229 200 [DDP_COMPONENT_AAL0] = MT8167_MUTEX_MOD_DISP_AAL, 230 201 [DDP_COMPONENT_CCORR] = MT8167_MUTEX_MOD_DISP_CCORR, 231 202 [DDP_COMPONENT_COLOR0] = MT8167_MUTEX_MOD_DISP_COLOR, 232 - [DDP_COMPONENT_DITHER] = MT8167_MUTEX_MOD_DISP_DITHER, 203 + [DDP_COMPONENT_DITHER0] = MT8167_MUTEX_MOD_DISP_DITHER, 233 204 [DDP_COMPONENT_GAMMA] = MT8167_MUTEX_MOD_DISP_GAMMA, 234 205 [DDP_COMPONENT_OVL0] = MT8167_MUTEX_MOD_DISP_OVL0, 235 206 [DDP_COMPONENT_OVL1] = MT8167_MUTEX_MOD_DISP_OVL1, ··· 262 233 [DDP_COMPONENT_AAL0] = MT8183_MUTEX_MOD_DISP_AAL0, 263 234 [DDP_COMPONENT_CCORR] = MT8183_MUTEX_MOD_DISP_CCORR0, 264 235 [DDP_COMPONENT_COLOR0] = MT8183_MUTEX_MOD_DISP_COLOR0, 265 - [DDP_COMPONENT_DITHER] = MT8183_MUTEX_MOD_DISP_DITHER0, 236 + [DDP_COMPONENT_DITHER0] = MT8183_MUTEX_MOD_DISP_DITHER0, 266 237 [DDP_COMPONENT_GAMMA] = MT8183_MUTEX_MOD_DISP_GAMMA0, 267 238 [DDP_COMPONENT_OVL0] = MT8183_MUTEX_MOD_DISP_OVL0, 268 239 [DDP_COMPONENT_OVL_2L0] = MT8183_MUTEX_MOD_DISP_OVL0_2L, ··· 276 247 [DDP_COMPONENT_AAL0] = MT8186_MUTEX_MOD_DISP_AAL0, 277 248 [DDP_COMPONENT_CCORR] = MT8186_MUTEX_MOD_DISP_CCORR0, 278 249 [DDP_COMPONENT_COLOR0] = MT8186_MUTEX_MOD_DISP_COLOR0, 279 - [DDP_COMPONENT_DITHER] = MT8186_MUTEX_MOD_DISP_DITHER0, 250 + [DDP_COMPONENT_DITHER0] = MT8186_MUTEX_MOD_DISP_DITHER0, 280 251 [DDP_COMPONENT_GAMMA] = MT8186_MUTEX_MOD_DISP_GAMMA0, 281 252 [DDP_COMPONENT_OVL0] = MT8186_MUTEX_MOD_DISP_OVL0, 282 253 [DDP_COMPONENT_OVL_2L0] = MT8186_MUTEX_MOD_DISP_OVL0_2L, ··· 289 260 [DDP_COMPONENT_AAL0] = MT8192_MUTEX_MOD_DISP_AAL0, 290 261 [DDP_COMPONENT_CCORR] = MT8192_MUTEX_MOD_DISP_CCORR0, 291 262 [DDP_COMPONENT_COLOR0] = MT8192_MUTEX_MOD_DISP_COLOR0, 292 - [DDP_COMPONENT_DITHER] = MT8192_MUTEX_MOD_DISP_DITHER0, 263 + [DDP_COMPONENT_DITHER0] = MT8192_MUTEX_MOD_DISP_DITHER0, 293 264 [DDP_COMPONENT_GAMMA] = MT8192_MUTEX_MOD_DISP_GAMMA0, 294 265 [DDP_COMPONENT_POSTMASK0] = MT8192_MUTEX_MOD_DISP_POSTMASK0, 295 266 [DDP_COMPONENT_OVL0] = MT8192_MUTEX_MOD_DISP_OVL0, ··· 299 270 [DDP_COMPONENT_RDMA4] = MT8192_MUTEX_MOD_DISP_RDMA4, 300 271 }; 301 272 302 - static const unsigned int mt2712_mutex_sof[MUTEX_SOF_DSI3 + 1] = { 273 + static const unsigned int mt8195_mutex_mod[DDP_COMPONENT_ID_MAX] = { 274 + [DDP_COMPONENT_OVL0] = MT8195_MUTEX_MOD_DISP_OVL0, 275 + [DDP_COMPONENT_WDMA0] = MT8195_MUTEX_MOD_DISP_WDMA0, 276 + [DDP_COMPONENT_RDMA0] = MT8195_MUTEX_MOD_DISP_RDMA0, 277 + [DDP_COMPONENT_COLOR0] = MT8195_MUTEX_MOD_DISP_COLOR0, 278 + [DDP_COMPONENT_CCORR] = MT8195_MUTEX_MOD_DISP_CCORR0, 279 + [DDP_COMPONENT_AAL0] = MT8195_MUTEX_MOD_DISP_AAL0, 280 + [DDP_COMPONENT_GAMMA] = MT8195_MUTEX_MOD_DISP_GAMMA0, 281 + [DDP_COMPONENT_DITHER0] = MT8195_MUTEX_MOD_DISP_DITHER0, 282 + [DDP_COMPONENT_MERGE0] = MT8195_MUTEX_MOD_DISP_VPP_MERGE, 283 + [DDP_COMPONENT_DSC0] = MT8195_MUTEX_MOD_DISP_DSC_WRAP0_CORE0, 284 + [DDP_COMPONENT_DSI0] = MT8195_MUTEX_MOD_DISP_DSI0, 285 + [DDP_COMPONENT_PWM0] = MT8195_MUTEX_MOD_DISP_PWM0, 286 + [DDP_COMPONENT_DP_INTF0] = MT8195_MUTEX_MOD_DISP_DP_INTF0, 287 + }; 288 + 289 + static const unsigned int mt2712_mutex_sof[DDP_MUTEX_SOF_MAX] = { 303 290 [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, 304 291 [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0, 305 292 [MUTEX_SOF_DSI1] = MUTEX_SOF_DSI1, ··· 325 280 [MUTEX_SOF_DSI3] = MUTEX_SOF_DSI3, 326 281 }; 327 282 328 - static const unsigned int mt8167_mutex_sof[MUTEX_SOF_DSI3 + 1] = { 283 + static const unsigned int mt8167_mutex_sof[DDP_MUTEX_SOF_MAX] = { 329 284 [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, 330 285 [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0, 331 286 [MUTEX_SOF_DPI0] = MT8167_MUTEX_SOF_DPI0, ··· 333 288 }; 334 289 335 290 /* Add EOF setting so overlay hardware can receive frame done irq */ 336 - static const unsigned int mt8183_mutex_sof[MUTEX_SOF_DSI3 + 1] = { 291 + static const unsigned int mt8183_mutex_sof[DDP_MUTEX_SOF_MAX] = { 337 292 [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, 338 293 [MUTEX_SOF_DSI0] = MUTEX_SOF_DSI0 | MT8183_MUTEX_EOF_DSI0, 339 294 [MUTEX_SOF_DPI0] = MT8183_MUTEX_SOF_DPI0 | MT8183_MUTEX_EOF_DPI0, ··· 343 298 [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, 344 299 [MUTEX_SOF_DSI0] = MT8186_MUTEX_SOF_DSI0 | MT8186_MUTEX_EOF_DSI0, 345 300 [MUTEX_SOF_DPI0] = MT8186_MUTEX_SOF_DPI0 | MT8186_MUTEX_EOF_DPI0, 301 + }; 302 + 303 + /* 304 + * To support refresh mode(video mode), DISP_REG_MUTEX_SOF should 305 + * select the EOF source and configure the EOF plus timing from the 306 + * module that provides the timing signal. 307 + * So that MUTEX can not only send a STREAM_DONE event to GCE 308 + * but also detect the error at end of frame(EAEOF) when EOF signal 309 + * arrives. 310 + */ 311 + static const unsigned int mt8195_mutex_sof[DDP_MUTEX_SOF_MAX] = { 312 + [MUTEX_SOF_SINGLE_MODE] = MUTEX_SOF_SINGLE_MODE, 313 + [MUTEX_SOF_DSI0] = MT8195_MUTEX_SOF_DSI0 | MT8195_MUTEX_EOF_DSI0, 314 + [MUTEX_SOF_DSI1] = MT8195_MUTEX_SOF_DSI1 | MT8195_MUTEX_EOF_DSI1, 315 + [MUTEX_SOF_DPI0] = MT8195_MUTEX_SOF_DPI0 | MT8195_MUTEX_EOF_DPI0, 316 + [MUTEX_SOF_DPI1] = MT8195_MUTEX_SOF_DPI1 | MT8195_MUTEX_EOF_DPI1, 317 + [MUTEX_SOF_DP_INTF0] = 318 + MT8195_MUTEX_SOF_DP_INTF0 | MT8195_MUTEX_EOF_DP_INTF0, 319 + [MUTEX_SOF_DP_INTF1] = 320 + MT8195_MUTEX_SOF_DP_INTF1 | MT8195_MUTEX_EOF_DP_INTF1, 346 321 }; 347 322 348 323 static const struct mtk_mutex_data mt2701_mutex_driver_data = { ··· 412 347 static const struct mtk_mutex_data mt8192_mutex_driver_data = { 413 348 .mutex_mod = mt8192_mutex_mod, 414 349 .mutex_sof = mt8183_mutex_sof, 350 + .mutex_mod_reg = MT8183_MUTEX0_MOD0, 351 + .mutex_sof_reg = MT8183_MUTEX0_SOF0, 352 + }; 353 + 354 + static const struct mtk_mutex_data mt8195_mutex_driver_data = { 355 + .mutex_mod = mt8195_mutex_mod, 356 + .mutex_sof = mt8195_mutex_sof, 415 357 .mutex_mod_reg = MT8183_MUTEX0_MOD0, 416 358 .mutex_sof_reg = MT8183_MUTEX0_SOF0, 417 359 }; ··· 495 423 case DDP_COMPONENT_DPI1: 496 424 sof_id = MUTEX_SOF_DPI1; 497 425 break; 426 + case DDP_COMPONENT_DP_INTF0: 427 + sof_id = MUTEX_SOF_DP_INTF0; 428 + break; 498 429 default: 499 430 if (mtx->data->mutex_mod[id] < 32) { 500 431 offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg, ··· 537 462 case DDP_COMPONENT_DSI3: 538 463 case DDP_COMPONENT_DPI0: 539 464 case DDP_COMPONENT_DPI1: 465 + case DDP_COMPONENT_DP_INTF0: 540 466 writel_relaxed(MUTEX_SOF_SINGLE_MODE, 541 467 mtx->regs + 542 468 DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, ··· 663 587 .data = &mt8186_mutex_driver_data}, 664 588 { .compatible = "mediatek,mt8192-disp-mutex", 665 589 .data = &mt8192_mutex_driver_data}, 590 + { .compatible = "mediatek,mt8195-disp-mutex", 591 + .data = &mt8195_mutex_driver_data}, 666 592 {}, 667 593 }; 668 594 MODULE_DEVICE_TABLE(of, mutex_driver_dt_match);
+1 -4
include/linux/soc/mediatek/mtk-cmdq.h
··· 268 268 * cmdq_pkt_flush_async() - trigger CMDQ to asynchronously execute the CMDQ 269 269 * packet and call back at the end of done packet 270 270 * @pkt: the CMDQ packet 271 - * @cb: called at the end of done packet 272 - * @data: this data will pass back to cb 273 271 * 274 272 * Return: 0 for success; else the error code is returned 275 273 * ··· 275 277 * at the end of done packet. Note that this is an ASYNC function. When the 276 278 * function returned, it may or may not be finished. 277 279 */ 278 - int cmdq_pkt_flush_async(struct cmdq_pkt *pkt, cmdq_async_flush_cb cb, 279 - void *data); 280 + int cmdq_pkt_flush_async(struct cmdq_pkt *pkt); 280 281 281 282 #endif /* __MTK_CMDQ_H__ */
+12
include/linux/soc/mediatek/mtk-mmsys.h
··· 17 17 DDP_COMPONENT_COLOR0, 18 18 DDP_COMPONENT_COLOR1, 19 19 DDP_COMPONENT_DITHER, 20 + DDP_COMPONENT_DITHER0 = DDP_COMPONENT_DITHER, 21 + DDP_COMPONENT_DITHER1, 22 + DDP_COMPONENT_DP_INTF0, 23 + DDP_COMPONENT_DP_INTF1, 20 24 DDP_COMPONENT_DPI0, 21 25 DDP_COMPONENT_DPI1, 26 + DDP_COMPONENT_DSC0, 27 + DDP_COMPONENT_DSC1, 22 28 DDP_COMPONENT_DSI0, 23 29 DDP_COMPONENT_DSI1, 24 30 DDP_COMPONENT_DSI2, 25 31 DDP_COMPONENT_DSI3, 26 32 DDP_COMPONENT_GAMMA, 33 + DDP_COMPONENT_MERGE0, 34 + DDP_COMPONENT_MERGE1, 35 + DDP_COMPONENT_MERGE2, 36 + DDP_COMPONENT_MERGE3, 37 + DDP_COMPONENT_MERGE4, 38 + DDP_COMPONENT_MERGE5, 27 39 DDP_COMPONENT_OD0, 28 40 DDP_COMPONENT_OD1, 29 41 DDP_COMPONENT_OVL0,