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

[PATCH] ppc32: Added support for new MPC8548 family of PowerQUICC III processors

Added descriptions of the new MPC8548 family processors, e500 core and
peripherals.

Signed-off-by: Kumar Gala <kumar.gala@freescale.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Kumar Gala and committed by
Linus Torvalds
5b37b700 da3caa20

+323 -2
+14
arch/ppc/kernel/cputable.c
··· 918 918 .dcache_bsize = 32, 919 919 .num_pmcs = 4, 920 920 }, 921 + { /* e500v2 */ 922 + .pvr_mask = 0xffff0000, 923 + .pvr_value = 0x80210000, 924 + .cpu_name = "e500v2", 925 + /* xxx - galak: add CPU_FTR_MAYBE_CAN_DOZE */ 926 + .cpu_features = CPU_FTR_SPLIT_ID_CACHE | 927 + CPU_FTR_USE_TB | CPU_FTR_BIG_PHYS, 928 + .cpu_user_features = PPC_FEATURE_32 | 929 + PPC_FEATURE_HAS_MMU | PPC_FEATURE_SPE_COMP | 930 + PPC_FEATURE_HAS_EFP_SINGLE | PPC_FEATURE_HAS_EFP_DOUBLE, 931 + .icache_bsize = 32, 932 + .dcache_bsize = 32, 933 + .num_pmcs = 4, 934 + }, 921 935 #endif 922 936 #if !CLASSIC_PPC 923 937 { /* default match */
+185
arch/ppc/syslib/mpc85xx_devices.c
··· 40 40 .phy_reg_addr = MPC85xx_ENET1_OFFSET, 41 41 }; 42 42 43 + static struct gianfar_platform_data mpc85xx_etsec1_pdata = { 44 + .device_flags = FSL_GIANFAR_DEV_HAS_GIGABIT | 45 + FSL_GIANFAR_DEV_HAS_COALESCE | FSL_GIANFAR_DEV_HAS_RMON | 46 + FSL_GIANFAR_DEV_HAS_MULTI_INTR | 47 + FSL_GIANFAR_DEV_HAS_CSUM | FSL_GIANFAR_DEV_HAS_VLAN | 48 + FSL_GIANFAR_DEV_HAS_EXTENDED_HASH, 49 + .phy_reg_addr = MPC85xx_ENET1_OFFSET, 50 + }; 51 + 52 + static struct gianfar_platform_data mpc85xx_etsec2_pdata = { 53 + .device_flags = FSL_GIANFAR_DEV_HAS_GIGABIT | 54 + FSL_GIANFAR_DEV_HAS_COALESCE | FSL_GIANFAR_DEV_HAS_RMON | 55 + FSL_GIANFAR_DEV_HAS_MULTI_INTR | 56 + FSL_GIANFAR_DEV_HAS_CSUM | FSL_GIANFAR_DEV_HAS_VLAN | 57 + FSL_GIANFAR_DEV_HAS_EXTENDED_HASH, 58 + .phy_reg_addr = MPC85xx_ENET1_OFFSET, 59 + }; 60 + 61 + static struct gianfar_platform_data mpc85xx_etsec3_pdata = { 62 + .device_flags = FSL_GIANFAR_DEV_HAS_GIGABIT | 63 + FSL_GIANFAR_DEV_HAS_COALESCE | FSL_GIANFAR_DEV_HAS_RMON | 64 + FSL_GIANFAR_DEV_HAS_MULTI_INTR | 65 + FSL_GIANFAR_DEV_HAS_CSUM | FSL_GIANFAR_DEV_HAS_VLAN | 66 + FSL_GIANFAR_DEV_HAS_EXTENDED_HASH, 67 + .phy_reg_addr = MPC85xx_ENET1_OFFSET, 68 + }; 69 + 70 + static struct gianfar_platform_data mpc85xx_etsec4_pdata = { 71 + .device_flags = FSL_GIANFAR_DEV_HAS_GIGABIT | 72 + FSL_GIANFAR_DEV_HAS_COALESCE | FSL_GIANFAR_DEV_HAS_RMON | 73 + FSL_GIANFAR_DEV_HAS_MULTI_INTR | 74 + FSL_GIANFAR_DEV_HAS_CSUM | FSL_GIANFAR_DEV_HAS_VLAN | 75 + FSL_GIANFAR_DEV_HAS_EXTENDED_HASH, 76 + .phy_reg_addr = MPC85xx_ENET1_OFFSET, 77 + }; 78 + 43 79 static struct gianfar_platform_data mpc85xx_fec_pdata = { 44 80 .phy_reg_addr = MPC85xx_ENET1_OFFSET, 45 81 }; 46 82 47 83 static struct fsl_i2c_platform_data mpc85xx_fsl_i2c_pdata = { 84 + .device_flags = FSL_I2C_DEV_SEPARATE_DFSRR, 85 + }; 86 + 87 + static struct fsl_i2c_platform_data mpc85xx_fsl_i2c2_pdata = { 48 88 .device_flags = FSL_I2C_DEV_SEPARATE_DFSRR, 49 89 }; 50 90 ··· 576 536 }, 577 537 }, 578 538 #endif /* CONFIG_CPM2 */ 539 + [MPC85xx_eTSEC1] = { 540 + .name = "fsl-gianfar", 541 + .id = 1, 542 + .dev.platform_data = &mpc85xx_etsec1_pdata, 543 + .num_resources = 4, 544 + .resource = (struct resource[]) { 545 + { 546 + .start = MPC85xx_ENET1_OFFSET, 547 + .end = MPC85xx_ENET1_OFFSET + 548 + MPC85xx_ENET1_SIZE - 1, 549 + .flags = IORESOURCE_MEM, 550 + }, 551 + { 552 + .name = "tx", 553 + .start = MPC85xx_IRQ_TSEC1_TX, 554 + .end = MPC85xx_IRQ_TSEC1_TX, 555 + .flags = IORESOURCE_IRQ, 556 + }, 557 + { 558 + .name = "rx", 559 + .start = MPC85xx_IRQ_TSEC1_RX, 560 + .end = MPC85xx_IRQ_TSEC1_RX, 561 + .flags = IORESOURCE_IRQ, 562 + }, 563 + { 564 + .name = "error", 565 + .start = MPC85xx_IRQ_TSEC1_ERROR, 566 + .end = MPC85xx_IRQ_TSEC1_ERROR, 567 + .flags = IORESOURCE_IRQ, 568 + }, 569 + }, 570 + }, 571 + [MPC85xx_eTSEC2] = { 572 + .name = "fsl-gianfar", 573 + .id = 2, 574 + .dev.platform_data = &mpc85xx_etsec2_pdata, 575 + .num_resources = 4, 576 + .resource = (struct resource[]) { 577 + { 578 + .start = MPC85xx_ENET2_OFFSET, 579 + .end = MPC85xx_ENET2_OFFSET + 580 + MPC85xx_ENET2_SIZE - 1, 581 + .flags = IORESOURCE_MEM, 582 + }, 583 + { 584 + .name = "tx", 585 + .start = MPC85xx_IRQ_TSEC2_TX, 586 + .end = MPC85xx_IRQ_TSEC2_TX, 587 + .flags = IORESOURCE_IRQ, 588 + }, 589 + { 590 + .name = "rx", 591 + .start = MPC85xx_IRQ_TSEC2_RX, 592 + .end = MPC85xx_IRQ_TSEC2_RX, 593 + .flags = IORESOURCE_IRQ, 594 + }, 595 + { 596 + .name = "error", 597 + .start = MPC85xx_IRQ_TSEC2_ERROR, 598 + .end = MPC85xx_IRQ_TSEC2_ERROR, 599 + .flags = IORESOURCE_IRQ, 600 + }, 601 + }, 602 + }, 603 + [MPC85xx_eTSEC3] = { 604 + .name = "fsl-gianfar", 605 + .id = 3, 606 + .dev.platform_data = &mpc85xx_etsec3_pdata, 607 + .num_resources = 4, 608 + .resource = (struct resource[]) { 609 + { 610 + .start = MPC85xx_ENET3_OFFSET, 611 + .end = MPC85xx_ENET3_OFFSET + 612 + MPC85xx_ENET3_SIZE - 1, 613 + .flags = IORESOURCE_MEM, 614 + }, 615 + { 616 + .name = "tx", 617 + .start = MPC85xx_IRQ_TSEC3_TX, 618 + .end = MPC85xx_IRQ_TSEC3_TX, 619 + .flags = IORESOURCE_IRQ, 620 + }, 621 + { 622 + .name = "rx", 623 + .start = MPC85xx_IRQ_TSEC3_RX, 624 + .end = MPC85xx_IRQ_TSEC3_RX, 625 + .flags = IORESOURCE_IRQ, 626 + }, 627 + { 628 + .name = "error", 629 + .start = MPC85xx_IRQ_TSEC3_ERROR, 630 + .end = MPC85xx_IRQ_TSEC3_ERROR, 631 + .flags = IORESOURCE_IRQ, 632 + }, 633 + }, 634 + }, 635 + [MPC85xx_eTSEC4] = { 636 + .name = "fsl-gianfar", 637 + .id = 4, 638 + .dev.platform_data = &mpc85xx_etsec4_pdata, 639 + .num_resources = 4, 640 + .resource = (struct resource[]) { 641 + { 642 + .start = 0x27000, 643 + .end = 0x27fff, 644 + .flags = IORESOURCE_MEM, 645 + }, 646 + { 647 + .name = "tx", 648 + .start = MPC85xx_IRQ_TSEC4_TX, 649 + .end = MPC85xx_IRQ_TSEC4_TX, 650 + .flags = IORESOURCE_IRQ, 651 + }, 652 + { 653 + .name = "rx", 654 + .start = MPC85xx_IRQ_TSEC4_RX, 655 + .end = MPC85xx_IRQ_TSEC4_RX, 656 + .flags = IORESOURCE_IRQ, 657 + }, 658 + { 659 + .name = "error", 660 + .start = MPC85xx_IRQ_TSEC4_ERROR, 661 + .end = MPC85xx_IRQ_TSEC4_ERROR, 662 + .flags = IORESOURCE_IRQ, 663 + }, 664 + }, 665 + }, 666 + [MPC85xx_IIC2] = { 667 + .name = "fsl-i2c", 668 + .id = 2, 669 + .dev.platform_data = &mpc85xx_fsl_i2c2_pdata, 670 + .num_resources = 2, 671 + .resource = (struct resource[]) { 672 + { 673 + .start = 0x03100, 674 + .end = 0x031ff, 675 + .flags = IORESOURCE_MEM, 676 + }, 677 + { 678 + .start = MPC85xx_IRQ_IIC1, 679 + .end = MPC85xx_IRQ_IIC1, 680 + .flags = IORESOURCE_IRQ, 681 + }, 682 + }, 683 + }, 579 684 }; 580 685 581 686 static int __init mach_mpc85xx_fixup(struct platform_device *pdev)
+105
arch/ppc/syslib/mpc85xx_sys.c
··· 110 110 MPC85xx_CPM_USB, 111 111 }, 112 112 }, 113 + /* SVRs on 8548 rev1.0 matches for 8548/8547/8545 */ 114 + { 115 + .ppc_sys_name = "8548E", 116 + .mask = 0xFFFF00F0, 117 + .value = 0x80390010, 118 + .num_devices = 13, 119 + .device_list = (enum ppc_sys_devices[]) 120 + { 121 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, MPC85xx_eTSEC3, 122 + MPC85xx_eTSEC4, MPC85xx_IIC1, MPC85xx_IIC2, 123 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 124 + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_SEC2, 125 + }, 126 + }, 127 + { 128 + .ppc_sys_name = "8548", 129 + .mask = 0xFFFF00F0, 130 + .value = 0x80310010, 131 + .num_devices = 12, 132 + .device_list = (enum ppc_sys_devices[]) 133 + { 134 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, MPC85xx_eTSEC3, 135 + MPC85xx_eTSEC4, MPC85xx_IIC1, MPC85xx_IIC2, 136 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 137 + MPC85xx_PERFMON, MPC85xx_DUART, 138 + }, 139 + }, 140 + { 141 + .ppc_sys_name = "8547E", 142 + .mask = 0xFFFF00F0, 143 + .value = 0x80390010, 144 + .num_devices = 13, 145 + .device_list = (enum ppc_sys_devices[]) 146 + { 147 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, MPC85xx_eTSEC3, 148 + MPC85xx_eTSEC4, MPC85xx_IIC1, MPC85xx_IIC2, 149 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 150 + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_SEC2, 151 + }, 152 + }, 153 + { 154 + .ppc_sys_name = "8547", 155 + .mask = 0xFFFF00F0, 156 + .value = 0x80310010, 157 + .num_devices = 12, 158 + .device_list = (enum ppc_sys_devices[]) 159 + { 160 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, MPC85xx_eTSEC3, 161 + MPC85xx_eTSEC4, MPC85xx_IIC1, MPC85xx_IIC2, 162 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 163 + MPC85xx_PERFMON, MPC85xx_DUART, 164 + }, 165 + }, 166 + { 167 + .ppc_sys_name = "8545E", 168 + .mask = 0xFFFF00F0, 169 + .value = 0x80390010, 170 + .num_devices = 11, 171 + .device_list = (enum ppc_sys_devices[]) 172 + { 173 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, 174 + MPC85xx_IIC1, MPC85xx_IIC2, 175 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 176 + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_SEC2, 177 + }, 178 + }, 179 + { 180 + .ppc_sys_name = "8545", 181 + .mask = 0xFFFF00F0, 182 + .value = 0x80310010, 183 + .num_devices = 10, 184 + .device_list = (enum ppc_sys_devices[]) 185 + { 186 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, 187 + MPC85xx_IIC1, MPC85xx_IIC2, 188 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 189 + MPC85xx_PERFMON, MPC85xx_DUART, 190 + }, 191 + }, 192 + { 193 + .ppc_sys_name = "8543E", 194 + .mask = 0xFFFF00F0, 195 + .value = 0x803A0010, 196 + .num_devices = 11, 197 + .device_list = (enum ppc_sys_devices[]) 198 + { 199 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, 200 + MPC85xx_IIC1, MPC85xx_IIC2, 201 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 202 + MPC85xx_PERFMON, MPC85xx_DUART, MPC85xx_SEC2, 203 + }, 204 + }, 205 + { 206 + .ppc_sys_name = "8543", 207 + .mask = 0xFFFF00F0, 208 + .value = 0x80320010, 209 + .num_devices = 10, 210 + .device_list = (enum ppc_sys_devices[]) 211 + { 212 + MPC85xx_eTSEC1, MPC85xx_eTSEC2, 213 + MPC85xx_IIC1, MPC85xx_IIC2, 214 + MPC85xx_DMA0, MPC85xx_DMA1, MPC85xx_DMA2, MPC85xx_DMA3, 215 + MPC85xx_PERFMON, MPC85xx_DUART, 216 + }, 217 + }, 113 218 { /* default match */ 114 219 .ppc_sys_name = "", 115 220 .mask = 0x00000000,
+6
include/asm-ppc/irq.h
··· 223 223 #define MPC85xx_IRQ_RIO_RX (12 + MPC85xx_OPENPIC_IRQ_OFFSET) 224 224 #define MPC85xx_IRQ_TSEC1_TX (13 + MPC85xx_OPENPIC_IRQ_OFFSET) 225 225 #define MPC85xx_IRQ_TSEC1_RX (14 + MPC85xx_OPENPIC_IRQ_OFFSET) 226 + #define MPC85xx_IRQ_TSEC3_TX (15 + MPC85xx_OPENPIC_IRQ_OFFSET) 227 + #define MPC85xx_IRQ_TSEC3_RX (16 + MPC85xx_OPENPIC_IRQ_OFFSET) 228 + #define MPC85xx_IRQ_TSEC3_ERROR (17 + MPC85xx_OPENPIC_IRQ_OFFSET) 226 229 #define MPC85xx_IRQ_TSEC1_ERROR (18 + MPC85xx_OPENPIC_IRQ_OFFSET) 227 230 #define MPC85xx_IRQ_TSEC2_TX (19 + MPC85xx_OPENPIC_IRQ_OFFSET) 228 231 #define MPC85xx_IRQ_TSEC2_RX (20 + MPC85xx_OPENPIC_IRQ_OFFSET) 232 + #define MPC85xx_IRQ_TSEC4_TX (21 + MPC85xx_OPENPIC_IRQ_OFFSET) 233 + #define MPC85xx_IRQ_TSEC4_RX (22 + MPC85xx_OPENPIC_IRQ_OFFSET) 234 + #define MPC85xx_IRQ_TSEC4_ERROR (23 + MPC85xx_OPENPIC_IRQ_OFFSET) 229 235 #define MPC85xx_IRQ_TSEC2_ERROR (24 + MPC85xx_OPENPIC_IRQ_OFFSET) 230 236 #define MPC85xx_IRQ_FEC (25 + MPC85xx_OPENPIC_IRQ_OFFSET) 231 237 #define MPC85xx_IRQ_DUART (26 + MPC85xx_OPENPIC_IRQ_OFFSET)
+6 -1
include/asm-ppc/mpc85xx.h
··· 74 74 #define MPC85xx_GUTS_OFFSET (0xe0000) 75 75 #define MPC85xx_GUTS_SIZE (0x01000) 76 76 #define MPC85xx_IIC1_OFFSET (0x03000) 77 - #define MPC85xx_IIC1_SIZE (0x01000) 77 + #define MPC85xx_IIC1_SIZE (0x00100) 78 78 #define MPC85xx_OPENPIC_OFFSET (0x40000) 79 79 #define MPC85xx_OPENPIC_SIZE (0x40000) 80 80 #define MPC85xx_PCI1_OFFSET (0x08000) ··· 127 127 MPC85xx_CPM_MCC2, 128 128 MPC85xx_CPM_SMC1, 129 129 MPC85xx_CPM_SMC2, 130 + MPC85xx_eTSEC1, 131 + MPC85xx_eTSEC2, 132 + MPC85xx_eTSEC3, 133 + MPC85xx_eTSEC4, 134 + MPC85xx_IIC2, 130 135 }; 131 136 132 137 #endif /* CONFIG_85xx */
+7 -1
include/linux/fsl_devices.h
··· 51 51 52 52 /* board specific information */ 53 53 u32 board_flags; 54 + u32 phy_flags; 54 55 u32 phyid; 55 56 u32 interruptPHY; 56 57 u8 mac_addr[6]; ··· 62 61 #define FSL_GIANFAR_DEV_HAS_COALESCE 0x00000002 63 62 #define FSL_GIANFAR_DEV_HAS_RMON 0x00000004 64 63 #define FSL_GIANFAR_DEV_HAS_MULTI_INTR 0x00000008 64 + #define FSL_GIANFAR_DEV_HAS_CSUM 0x00000010 65 + #define FSL_GIANFAR_DEV_HAS_VLAN 0x00000020 66 + #define FSL_GIANFAR_DEV_HAS_EXTENDED_HASH 0x00000040 67 + #define FSL_GIANFAR_DEV_HAS_PADDING 0x00000080 65 68 66 69 /* Flags in gianfar_platform_data */ 67 - #define FSL_GIANFAR_BRD_HAS_PHY_INTR 0x00000001 /* if not set use a timer */ 70 + #define FSL_GIANFAR_BRD_HAS_PHY_INTR 0x00000001 /* set or use a timer */ 71 + #define FSL_GIANFAR_BRD_IS_REDUCED 0x00000002 /* Set if RGMII, RMII */ 68 72 69 73 struct fsl_i2c_platform_data { 70 74 /* device specific information */