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

Merge tag 'v4.16-next-soc' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/matthias.bgg/linux into next/drivers

Pull "ARM: mediatek: updates for soc drivers for v4.16-next" from Matthias Brugger:

scpsy:
- mt2712: update power domains to reflect design changes in the SoC
- fix initialisation of power subdomains
- add support for mt7623a SoC
- use defines for mt2701 bus protection mask

* tag 'v4.16-next-soc' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/matthias.bgg/linux:
soc: mediatek: update power domain data of MT2712
dt-bindings: soc: update MT2712 power dt-bindings
soc: mediatek: fix the mistaken pointer accessed when subdomains are added
soc: mediatek: add SCPSYS power domain driver for MediaTek MT7623A SoC
soc: mediatek: avoid hardcoded value with bus_prot_mask
dt-bindings: soc: add header files required for MT7623A SCPSYS dt-binding
dt-bindings: soc: add SCPSYS binding for MT7623 and MT7623A SoC

+120 -6
+4 -1
Documentation/devicetree/bindings/soc/mediatek/scpsys.txt
··· 21 21 - "mediatek,mt2712-scpsys" 22 22 - "mediatek,mt6797-scpsys" 23 23 - "mediatek,mt7622-scpsys" 24 + - "mediatek,mt7623-scpsys", "mediatek,mt2701-scpsys": For MT7623 SoC 25 + - "mediatek,mt7623a-scpsys": For MT7623A SoC 24 26 - "mediatek,mt8173-scpsys" 25 27 - #power-domain-cells: Must be 1 26 28 - reg: Address range of the SCPSYS unit ··· 30 28 - clock, clock-names: clocks according to the common clock binding. 31 29 These are clocks which hardware needs to be 32 30 enabled before enabling certain power domains. 33 - Required clocks for MT2701: "mm", "mfg", "ethif" 31 + Required clocks for MT2701 or MT7623: "mm", "mfg", "ethif" 34 32 Required clocks for MT2712: "mm", "mfg", "venc", "jpgdec", "audio", "vdec" 35 33 Required clocks for MT6797: "mm", "mfg", "vdec" 36 34 Required clocks for MT7622: "hif_sel" 35 + Required clocks for MT7622A: "ethif" 37 36 Required clocks for MT8173: "mm", "mfg", "venc", "venc_lt" 38 37 39 38 Optional properties:
+99 -5
drivers/soc/mediatek/mtk-scpsys.c
··· 24 24 #include <dt-bindings/power/mt2712-power.h> 25 25 #include <dt-bindings/power/mt6797-power.h> 26 26 #include <dt-bindings/power/mt7622-power.h> 27 + #include <dt-bindings/power/mt7623a-power.h> 27 28 #include <dt-bindings/power/mt8173-power.h> 28 29 29 30 #define SPM_VDE_PWR_CON 0x0210 ··· 519 518 .name = "conn", 520 519 .sta_mask = PWR_STATUS_CONN, 521 520 .ctl_offs = SPM_CONN_PWR_CON, 522 - .bus_prot_mask = 0x0104, 521 + .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_CONN_M | 522 + MT2701_TOP_AXI_PROT_EN_CONN_S, 523 523 .clk_id = {CLK_NONE}, 524 524 .active_wakeup = true, 525 525 }, ··· 530 528 .ctl_offs = SPM_DIS_PWR_CON, 531 529 .sram_pdn_bits = GENMASK(11, 8), 532 530 .clk_id = {CLK_MM}, 533 - .bus_prot_mask = 0x0002, 531 + .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_MM_M0, 534 532 .active_wakeup = true, 535 533 }, 536 534 [MT2701_POWER_DOMAIN_MFG] = { ··· 666 664 .name = "mfg", 667 665 .sta_mask = PWR_STATUS_MFG, 668 666 .ctl_offs = SPM_MFG_PWR_CON, 669 - .sram_pdn_bits = GENMASK(11, 8), 670 - .sram_pdn_ack_bits = GENMASK(19, 16), 667 + .sram_pdn_bits = GENMASK(8, 8), 668 + .sram_pdn_ack_bits = GENMASK(16, 16), 671 669 .clk_id = {CLK_MFG}, 672 670 .bus_prot_mask = BIT(14) | BIT(21) | BIT(23), 673 671 .active_wakeup = true, 674 672 }, 673 + [MT2712_POWER_DOMAIN_MFG_SC1] = { 674 + .name = "mfg_sc1", 675 + .sta_mask = BIT(22), 676 + .ctl_offs = 0x02c0, 677 + .sram_pdn_bits = GENMASK(8, 8), 678 + .sram_pdn_ack_bits = GENMASK(16, 16), 679 + .clk_id = {CLK_NONE}, 680 + .active_wakeup = true, 681 + }, 682 + [MT2712_POWER_DOMAIN_MFG_SC2] = { 683 + .name = "mfg_sc2", 684 + .sta_mask = BIT(23), 685 + .ctl_offs = 0x02c4, 686 + .sram_pdn_bits = GENMASK(8, 8), 687 + .sram_pdn_ack_bits = GENMASK(16, 16), 688 + .clk_id = {CLK_NONE}, 689 + .active_wakeup = true, 690 + }, 691 + [MT2712_POWER_DOMAIN_MFG_SC3] = { 692 + .name = "mfg_sc3", 693 + .sta_mask = BIT(30), 694 + .ctl_offs = 0x01f8, 695 + .sram_pdn_bits = GENMASK(8, 8), 696 + .sram_pdn_ack_bits = GENMASK(16, 16), 697 + .clk_id = {CLK_NONE}, 698 + .active_wakeup = true, 699 + }, 700 + }; 701 + 702 + static const struct scp_subdomain scp_subdomain_mt2712[] = { 703 + {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_VDEC}, 704 + {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_VENC}, 705 + {MT2712_POWER_DOMAIN_MM, MT2712_POWER_DOMAIN_ISP}, 706 + {MT2712_POWER_DOMAIN_MFG, MT2712_POWER_DOMAIN_MFG_SC1}, 707 + {MT2712_POWER_DOMAIN_MFG_SC1, MT2712_POWER_DOMAIN_MFG_SC2}, 708 + {MT2712_POWER_DOMAIN_MFG_SC2, MT2712_POWER_DOMAIN_MFG_SC3}, 675 709 }; 676 710 677 711 /* ··· 832 794 }; 833 795 834 796 /* 797 + * MT7623A power domain support 798 + */ 799 + 800 + static const struct scp_domain_data scp_domain_data_mt7623a[] = { 801 + [MT7623A_POWER_DOMAIN_CONN] = { 802 + .name = "conn", 803 + .sta_mask = PWR_STATUS_CONN, 804 + .ctl_offs = SPM_CONN_PWR_CON, 805 + .bus_prot_mask = MT2701_TOP_AXI_PROT_EN_CONN_M | 806 + MT2701_TOP_AXI_PROT_EN_CONN_S, 807 + .clk_id = {CLK_NONE}, 808 + .active_wakeup = true, 809 + }, 810 + [MT7623A_POWER_DOMAIN_ETH] = { 811 + .name = "eth", 812 + .sta_mask = PWR_STATUS_ETH, 813 + .ctl_offs = SPM_ETH_PWR_CON, 814 + .sram_pdn_bits = GENMASK(11, 8), 815 + .sram_pdn_ack_bits = GENMASK(15, 12), 816 + .clk_id = {CLK_ETHIF}, 817 + .active_wakeup = true, 818 + }, 819 + [MT7623A_POWER_DOMAIN_HIF] = { 820 + .name = "hif", 821 + .sta_mask = PWR_STATUS_HIF, 822 + .ctl_offs = SPM_HIF_PWR_CON, 823 + .sram_pdn_bits = GENMASK(11, 8), 824 + .sram_pdn_ack_bits = GENMASK(15, 12), 825 + .clk_id = {CLK_ETHIF}, 826 + .active_wakeup = true, 827 + }, 828 + [MT7623A_POWER_DOMAIN_IFR_MSC] = { 829 + .name = "ifr_msc", 830 + .sta_mask = PWR_STATUS_IFR_MSC, 831 + .ctl_offs = SPM_IFR_MSC_PWR_CON, 832 + .clk_id = {CLK_NONE}, 833 + .active_wakeup = true, 834 + }, 835 + }; 836 + 837 + /* 835 838 * MT8173 power domain support 836 839 */ 837 840 ··· 984 905 static const struct scp_soc_data mt2712_data = { 985 906 .domains = scp_domain_data_mt2712, 986 907 .num_domains = ARRAY_SIZE(scp_domain_data_mt2712), 908 + .subdomains = scp_subdomain_mt2712, 909 + .num_subdomains = ARRAY_SIZE(scp_subdomain_mt2712), 987 910 .regs = { 988 911 .pwr_sta_offs = SPM_PWR_STATUS, 989 912 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND ··· 1008 927 static const struct scp_soc_data mt7622_data = { 1009 928 .domains = scp_domain_data_mt7622, 1010 929 .num_domains = ARRAY_SIZE(scp_domain_data_mt7622), 930 + .regs = { 931 + .pwr_sta_offs = SPM_PWR_STATUS, 932 + .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND 933 + }, 934 + .bus_prot_reg_update = true, 935 + }; 936 + 937 + static const struct scp_soc_data mt7623a_data = { 938 + .domains = scp_domain_data_mt7623a, 939 + .num_domains = ARRAY_SIZE(scp_domain_data_mt7623a), 1011 940 .regs = { 1012 941 .pwr_sta_offs = SPM_PWR_STATUS, 1013 942 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND ··· 1055 964 .compatible = "mediatek,mt7622-scpsys", 1056 965 .data = &mt7622_data, 1057 966 }, { 967 + .compatible = "mediatek,mt7623a-scpsys", 968 + .data = &mt7623a_data, 969 + }, { 1058 970 .compatible = "mediatek,mt8173-scpsys", 1059 971 .data = &mt8173_data, 1060 972 }, { ··· 1086 992 1087 993 pd_data = &scp->pd_data; 1088 994 1089 - for (i = 0, sd = soc->subdomains ; i < soc->num_subdomains ; i++) { 995 + for (i = 0, sd = soc->subdomains; i < soc->num_subdomains; i++, sd++) { 1090 996 ret = pm_genpd_add_subdomain(pd_data->domains[sd->origin], 1091 997 pd_data->domains[sd->subdomain]); 1092 998 if (ret && IS_ENABLED(CONFIG_PM))
+3
include/dt-bindings/power/mt2712-power.h
··· 22 22 #define MT2712_POWER_DOMAIN_USB 5 23 23 #define MT2712_POWER_DOMAIN_USB2 6 24 24 #define MT2712_POWER_DOMAIN_MFG 7 25 + #define MT2712_POWER_DOMAIN_MFG_SC1 8 26 + #define MT2712_POWER_DOMAIN_MFG_SC2 9 27 + #define MT2712_POWER_DOMAIN_MFG_SC3 10 25 28 26 29 #endif /* _DT_BINDINGS_POWER_MT2712_POWER_H */
+10
include/dt-bindings/power/mt7623a-power.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + #ifndef _DT_BINDINGS_POWER_MT7623A_POWER_H 3 + #define _DT_BINDINGS_POWER_MT7623A_POWER_H 4 + 5 + #define MT7623A_POWER_DOMAIN_CONN 0 6 + #define MT7623A_POWER_DOMAIN_ETH 1 7 + #define MT7623A_POWER_DOMAIN_HIF 2 8 + #define MT7623A_POWER_DOMAIN_IFR_MSC 3 9 + 10 + #endif /* _DT_BINDINGS_POWER_MT7623A_POWER_H */
+4
include/linux/soc/mediatek/infracfg.h
··· 21 21 #define MT8173_TOP_AXI_PROT_EN_MFG_M1 BIT(22) 22 22 #define MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT BIT(23) 23 23 24 + #define MT2701_TOP_AXI_PROT_EN_MM_M0 BIT(1) 25 + #define MT2701_TOP_AXI_PROT_EN_CONN_M BIT(2) 26 + #define MT2701_TOP_AXI_PROT_EN_CONN_S BIT(8) 27 + 24 28 #define MT7622_TOP_AXI_PROT_EN_ETHSYS (BIT(3) | BIT(17)) 25 29 #define MT7622_TOP_AXI_PROT_EN_HIF0 (BIT(24) | BIT(25)) 26 30 #define MT7622_TOP_AXI_PROT_EN_HIF1 (BIT(26) | BIT(27) | \