mvebu soc changes for v3.15 (incremental pull #2)
- mvebu
     - Add Armada 375, 380 and 385 SoCs
 
  - kirkwood
     - move kirkwood DT support to mach-mvebu
     - add mostly DT support for HP T5325 thin client
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.22 (GNU/Linux)
 
 iQIcBAABAgAGBQJTEVsQAAoJEP45WPkGe8ZnWhIP/2fBX1zLHThHf9ekmVHr/ikC
 pQ7NCS2abYAjuTU56ph9aW6WgFCf05+DicKKdI+sPbuispgSCyeqktXNVB6dIsGa
 LV9xPo4yZRlO6iW4GnMk6/c/F0ZBtMbT5bEoyk9B102WgGP28VBHK9V/BuX/SGIW
 R9dc5jee1VNN86ATpEexd+QAREJa0tDtRcTzFIliUsjSB1pS0LdrkTywfGnAShUa
 xcFHzIGJKIzcA+9c0pz8mDeFeooGmPDSlu+AOCXz0hQOffyaqpJ+fOqHHWRGFP3S
 EeJYPMaYN5Ge1d37OHu6CB843ikydjZWG415+5fEJWgTx/EWNgoypqX9M4npv/EZ
 ASnFrktql8ZusmqkJFuV8q1HC3D/DbWlnwgPC7b4UWLroW6cfqDt9zq+eY0tpBJE
 GgiwjEDbQ7Aw7GsOv6fCw1jIHlfAFdtv6XQT9Yp+qAPzUoyS1HI+ms1pTbChYz/c
 D2tF8rL2v3wYSMeCHLOEgJbcCPxujoZieq57VjfZ8i2sG9QiOAdkEvy+khnuvW8T
 thzxsNWYgNIYyYlkqt3yOT4xqFjrCVB95mN5NhhPsoE28DReXFEXz8+hL7eHrxtI
 vFlmW6ukPlzD9HlXS+6jqOzhX53mYN5L3RoZHPaSP/yGQT7I/gTb7cK8V6Ig7Rsy
 AcesuaH1VMa9+RtRTPxQ
 =CtOj
 -----END PGP SIGNATURE-----
Merge tag 'mvebu-soc-3.15-2' of git://git.infradead.org/linux-mvebu into next/soc
Merge "mvebu soc changes for v3.15 (incremental pull #2)" from Jason Cooper:
 - mvebu
    - Add Armada 375, 380 and 385 SoCs
 - kirkwood
    - move kirkwood DT support to mach-mvebu
    - add mostly DT support for HP T5325 thin client
* tag 'mvebu-soc-3.15-2' of git://git.infradead.org/linux-mvebu:
  ARM: kirkwood: Add HP T5325 thin client
  ARM: kirkwood: select dtbs based on SoC
  ARM: kirkwood: Remove redundant kexec code
  ARM: mvebu: Armada 375/38x depend on MULTI_V7
  ARM: mvebu: Simplify headers and make local
  ARM: mvebu: Enable mvebu-soc-id on Kirkwood
  ARM: mvebu: Let kirkwood use the system controller for restart
  ARM: mvebu: Move kirkwood DT boards into mach-mvebu
  ARM: MM Enable building Feroceon L2 cache controller with ARCH_MVEBU
  ARM: Fix default CPU selection for ARCH_MULTI_V5
  ARM: MM: Add DT binding for Feroceon L2 cache
  ARM: orion: Move cache-feroceon-l2.h out of plat-orion
  ARM: mvebu: Add ARCH_MULTI_V7 to SoCs
  ARM: kirkwood: ioremap memory control register
  ARM: kirkwood: ioremap the cpu_config register before using it.
  ARM: kirkwood: Separate board-dt from common and pcie code.
  ARM: kirkwood: Drop printing the SoC type and revision
  ARM: kirkwood: Convert mv88f6281gtw_ge switch setup to DT
  ARM: kirkwood: Give pm.c its own header file.
  ARM: mvebu: Rename the ARCH_MVEBU menu option
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
	
	
This commit is contained in:
		
				commit
				
					
						d4324ce357
					
				
			
		
					 26 changed files with 682 additions and 110 deletions
				
			
		
							
								
								
									
										16
									
								
								Documentation/devicetree/bindings/arm/mrvl/feroceon.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Documentation/devicetree/bindings/arm/mrvl/feroceon.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					* Marvell Feroceon Cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Required properties:
 | 
				
			||||||
 | 
					- compatible : Should be either "marvell,feroceon-cache" or
 | 
				
			||||||
 | 
					  	       "marvell,kirkwood-cache".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Optional properties:
 | 
				
			||||||
 | 
					- reg        : Address of the L2 cache control register. Mandatory for
 | 
				
			||||||
 | 
					  	       "marvell,kirkwood-cache", not used by "marvell,feroceon-cache"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example:
 | 
				
			||||||
 | 
							l2: l2-cache@20128 {
 | 
				
			||||||
 | 
								compatible = "marvell,kirkwood-cache";
 | 
				
			||||||
 | 
								reg = <0x20128 0x4>;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -898,7 +898,7 @@ config ARCH_MULTI_V5
 | 
				
			||||||
	bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
 | 
						bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
 | 
				
			||||||
	depends on !ARCH_MULTI_V6_V7
 | 
						depends on !ARCH_MULTI_V6_V7
 | 
				
			||||||
	select ARCH_MULTI_V4_V5
 | 
						select ARCH_MULTI_V4_V5
 | 
				
			||||||
	select CPU_ARM926T if (!CPU_ARM946E || CPU_ARM1020 || \
 | 
						select CPU_ARM926T if !(CPU_ARM946E || CPU_ARM1020 || \
 | 
				
			||||||
		CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
 | 
							CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
 | 
				
			||||||
		CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)
 | 
							CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,8 +82,8 @@ dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \
 | 
				
			||||||
	ecx-2000.dtb
 | 
						ecx-2000.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
 | 
					dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
 | 
				
			||||||
	integratorcp.dtb
 | 
						integratorcp.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb
 | 
					kirkwood := \
 | 
				
			||||||
dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \
 | 
						kirkwood-cloudbox.dtb \
 | 
				
			||||||
	kirkwood-db-88f6281.dtb \
 | 
						kirkwood-db-88f6281.dtb \
 | 
				
			||||||
	kirkwood-db-88f6282.dtb \
 | 
						kirkwood-db-88f6282.dtb \
 | 
				
			||||||
	kirkwood-dns320.dtb \
 | 
						kirkwood-dns320.dtb \
 | 
				
			||||||
| 
						 | 
					@ -117,6 +117,9 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \
 | 
				
			||||||
	kirkwood-topkick.dtb \
 | 
						kirkwood-topkick.dtb \
 | 
				
			||||||
	kirkwood-ts219-6281.dtb \
 | 
						kirkwood-ts219-6281.dtb \
 | 
				
			||||||
	kirkwood-ts219-6282.dtb
 | 
						kirkwood-ts219-6282.dtb
 | 
				
			||||||
 | 
					dtb-$(CONFIG_ARCH_KIRKWOOD) += $(kirkwood)
 | 
				
			||||||
 | 
					dtb-$(CONFIG_MACH_KIRKWOOD) += $(kirkwood)
 | 
				
			||||||
 | 
					dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_MARCO) += marco-evb.dtb
 | 
					dtb-$(CONFIG_ARCH_MARCO) += marco-evb.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_MOXART) += moxart-uc7112lx.dtb
 | 
					dtb-$(CONFIG_ARCH_MOXART) += moxart-uc7112lx.dtb
 | 
				
			||||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-370-db.dtb \
 | 
					dtb-$(CONFIG_ARCH_MVEBU) += armada-370-db.dtb \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -122,4 +122,66 @@
 | 
				
			||||||
			gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
 | 
								gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dsa@0 {
 | 
				
			||||||
 | 
							compatible = "marvell,dsa";
 | 
				
			||||||
 | 
							#address-cells = <2>;
 | 
				
			||||||
 | 
							#size-cells = <0>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							dsa,ethernet = <ð0>;
 | 
				
			||||||
 | 
							dsa,mii-bus = <ðphy0>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							switch@0 {
 | 
				
			||||||
 | 
								#address-cells = <1>;
 | 
				
			||||||
 | 
								#size-cells = <0>;
 | 
				
			||||||
 | 
								reg = <0 0>;	/* MDIO address 0, switch 0 in tree */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								port@0 {
 | 
				
			||||||
 | 
									reg = <0>;
 | 
				
			||||||
 | 
									label = "lan1";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								port@1 {
 | 
				
			||||||
 | 
									reg = <1>;
 | 
				
			||||||
 | 
									label = "lan2";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								port@2 {
 | 
				
			||||||
 | 
									reg = <2>;
 | 
				
			||||||
 | 
									label = "lan3";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								port@3 {
 | 
				
			||||||
 | 
									reg = <3>;
 | 
				
			||||||
 | 
									label = "lan4";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								port@4 {
 | 
				
			||||||
 | 
									reg = <4>;
 | 
				
			||||||
 | 
									label = "wan";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								port@5 {
 | 
				
			||||||
 | 
									reg = <5>;
 | 
				
			||||||
 | 
									label = "cpu";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					&mdio {
 | 
				
			||||||
 | 
						status = "okay";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ethphy0: ethernet-phy@ff {
 | 
				
			||||||
 | 
							reg = <0xff>; 	/* No phy attached */
 | 
				
			||||||
 | 
							speed = <1000>;
 | 
				
			||||||
 | 
							duplex = <1>;
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ð0 {
 | 
				
			||||||
 | 
						status = "okay";
 | 
				
			||||||
 | 
						ethernet0-port@0 {
 | 
				
			||||||
 | 
							phy-handle = <ðphy0>;
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * arch/arm/plat-orion/include/plat/cache-feroceon-l2.h
 | 
					 * arch/arm/include/asm/hardware/cache-feroceon-l2.h
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Copyright (C) 2008 Marvell Semiconductor
 | 
					 * Copyright (C) 2008 Marvell Semiconductor
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -9,3 +9,5 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void __init feroceon_l2_init(int l2_wt_override);
 | 
					extern void __init feroceon_l2_init(int l2_wt_override);
 | 
				
			||||||
 | 
					extern int __init feroceon_of_init(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -106,13 +106,6 @@ config ARCH_KIRKWOOD_DT
 | 
				
			||||||
	  Say 'Y' here if you want your kernel to support the
 | 
						  Say 'Y' here if you want your kernel to support the
 | 
				
			||||||
	  Marvell Kirkwood using flattened device tree.
 | 
						  Marvell Kirkwood using flattened device tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_MV88F6281GTW_GE_DT
 | 
					 | 
				
			||||||
	bool "Marvell 88F6281 GTW GE Board (Flattened Device Tree)"
 | 
					 | 
				
			||||||
	depends on ARCH_KIRKWOOD_DT
 | 
					 | 
				
			||||||
	help
 | 
					 | 
				
			||||||
	  Say 'Y' here if you want your kernel to support the
 | 
					 | 
				
			||||||
	  Marvell 88F6281 GTW GE Board (Flattened Device Tree).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
endmenu
 | 
					endmenu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,4 @@
 | 
				
			||||||
obj-y				+= common.o pcie.o
 | 
					obj-$(CONFIG_KIRKWOOD_LEGACY)	+= irq.o mpp.o common.o pcie.o
 | 
				
			||||||
obj-$(CONFIG_KIRKWOOD_LEGACY)	+= irq.o mpp.o
 | 
					 | 
				
			||||||
obj-$(CONFIG_PM)		+= pm.o
 | 
					obj-$(CONFIG_PM)		+= pm.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
obj-$(CONFIG_MACH_D2NET_V2)		+= d2net_v2-setup.o lacie_v2-common.o
 | 
					obj-$(CONFIG_MACH_D2NET_V2)		+= d2net_v2-setup.o lacie_v2-common.o
 | 
				
			||||||
| 
						 | 
					@ -13,4 +12,3 @@ obj-$(CONFIG_MACH_TS219)		+= ts219-setup.o tsx1x-common.o
 | 
				
			||||||
obj-$(CONFIG_MACH_TS41X)		+= ts41x-setup.o tsx1x-common.o
 | 
					obj-$(CONFIG_MACH_TS41X)		+= ts41x-setup.o tsx1x-common.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
obj-$(CONFIG_ARCH_KIRKWOOD_DT)		+= board-dt.o
 | 
					obj-$(CONFIG_ARCH_KIRKWOOD_DT)		+= board-dt.o
 | 
				
			||||||
obj-$(CONFIG_MACH_MV88F6281GTW_GE_DT)	+= board-mv88f6281gtw_ge.o
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,11 +19,84 @@
 | 
				
			||||||
#include <linux/of_platform.h>
 | 
					#include <linux/of_platform.h>
 | 
				
			||||||
#include <linux/dma-mapping.h>
 | 
					#include <linux/dma-mapping.h>
 | 
				
			||||||
#include <linux/irqchip.h>
 | 
					#include <linux/irqchip.h>
 | 
				
			||||||
#include <linux/kexec.h>
 | 
					#include <asm/hardware/cache-feroceon-l2.h>
 | 
				
			||||||
#include <asm/mach/arch.h>
 | 
					#include <asm/mach/arch.h>
 | 
				
			||||||
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
#include <mach/bridge-regs.h>
 | 
					#include <mach/bridge-regs.h>
 | 
				
			||||||
#include <plat/common.h>
 | 
					#include <plat/common.h>
 | 
				
			||||||
#include "common.h"
 | 
					#include <plat/pcie.h>
 | 
				
			||||||
 | 
					#include "pm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct map_desc kirkwood_io_desc[] __initdata = {
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.virtual	= (unsigned long) KIRKWOOD_REGS_VIRT_BASE,
 | 
				
			||||||
 | 
							.pfn		= __phys_to_pfn(KIRKWOOD_REGS_PHYS_BASE),
 | 
				
			||||||
 | 
							.length		= KIRKWOOD_REGS_SIZE,
 | 
				
			||||||
 | 
							.type		= MT_DEVICE,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __init kirkwood_map_io(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						iotable_init(kirkwood_io_desc, ARRAY_SIZE(kirkwood_io_desc));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct resource kirkwood_cpufreq_resources[] = {
 | 
				
			||||||
 | 
						[0] = {
 | 
				
			||||||
 | 
							.start  = CPU_CONTROL_PHYS,
 | 
				
			||||||
 | 
							.end    = CPU_CONTROL_PHYS + 3,
 | 
				
			||||||
 | 
							.flags  = IORESOURCE_MEM,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_device kirkwood_cpufreq_device = {
 | 
				
			||||||
 | 
						.name		= "kirkwood-cpufreq",
 | 
				
			||||||
 | 
						.id		= -1,
 | 
				
			||||||
 | 
						.num_resources	= ARRAY_SIZE(kirkwood_cpufreq_resources),
 | 
				
			||||||
 | 
						.resource	= kirkwood_cpufreq_resources,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __init kirkwood_cpufreq_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						platform_device_register(&kirkwood_cpufreq_device);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct resource kirkwood_cpuidle_resource[] = {
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.flags	= IORESOURCE_MEM,
 | 
				
			||||||
 | 
							.start	= DDR_OPERATION_BASE,
 | 
				
			||||||
 | 
							.end	= DDR_OPERATION_BASE + 3,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_device kirkwood_cpuidle = {
 | 
				
			||||||
 | 
						.name		= "kirkwood_cpuidle",
 | 
				
			||||||
 | 
						.id		= -1,
 | 
				
			||||||
 | 
						.resource	= kirkwood_cpuidle_resource,
 | 
				
			||||||
 | 
						.num_resources	= 1,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __init kirkwood_cpuidle_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						platform_device_register(&kirkwood_cpuidle);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Temporary here since mach-mvebu has a function we can use */
 | 
				
			||||||
 | 
					static void kirkwood_restart(enum reboot_mode mode, const char *cmd)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Enable soft reset to assert RSTOUTn.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						writel(SOFT_RESET_OUT_EN, RSTOUTn_MASK);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Assert soft reset.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						writel(SOFT_RESET, SYSTEM_SOFT_RESET);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (1)
 | 
				
			||||||
 | 
							;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MV643XX_ETH_MAC_ADDR_LOW	0x0414
 | 
					#define MV643XX_ETH_MAC_ADDR_LOW	0x0414
 | 
				
			||||||
#define MV643XX_ETH_MAC_ADDR_HIGH	0x0418
 | 
					#define MV643XX_ETH_MAC_ADDR_HIGH	0x0418
 | 
				
			||||||
| 
						 | 
					@ -104,35 +177,35 @@ eth_fixup_skip:
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Disable propagation of mbus errors to the CPU local bus, as this
 | 
				
			||||||
 | 
					 * causes mbus errors (which can occur for example for PCI aborts) to
 | 
				
			||||||
 | 
					 * throw CPU aborts, which we're not set up to deal with.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void __init kirkwood_disable_mbus_error_propagation(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						void __iomem *cpu_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cpu_config = ioremap(CPU_CONFIG_PHYS, 4);
 | 
				
			||||||
 | 
						writel(readl(cpu_config) & ~CPU_CONFIG_ERROR_PROP, cpu_config);
 | 
				
			||||||
 | 
						iounmap(cpu_config);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init kirkwood_dt_init(void)
 | 
					static void __init kirkwood_dt_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	pr_info("Kirkwood: %s.\n", kirkwood_id());
 | 
						kirkwood_disable_mbus_error_propagation();
 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * Disable propagation of mbus errors to the CPU local bus,
 | 
					 | 
				
			||||||
	 * as this causes mbus errors (which can occur for example
 | 
					 | 
				
			||||||
	 * for PCI aborts) to throw CPU aborts, which we're not set
 | 
					 | 
				
			||||||
	 * up to deal with.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(mvebu_mbus_dt_init());
 | 
						BUG_ON(mvebu_mbus_dt_init());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kirkwood_l2_init();
 | 
					#ifdef CONFIG_CACHE_FEROCEON_L2
 | 
				
			||||||
 | 
						feroceon_of_init();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	kirkwood_cpufreq_init();
 | 
						kirkwood_cpufreq_init();
 | 
				
			||||||
	kirkwood_cpuidle_init();
 | 
						kirkwood_cpuidle_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kirkwood_pm_init();
 | 
						kirkwood_pm_init();
 | 
				
			||||||
	kirkwood_dt_eth_fixup();
 | 
						kirkwood_dt_eth_fixup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_KEXEC
 | 
					 | 
				
			||||||
	kexec_reinit = kirkwood_enable_pcie;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (of_machine_is_compatible("marvell,mv88f6281gtw-ge"))
 | 
					 | 
				
			||||||
		mv88f6281gtw_ge_init();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 | 
						of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,50 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * arch/arm/mach-kirkwood/board-mv88f6281gtw_ge.c
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Marvell 88F6281 GTW GE Board Setup
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This file is licensed under the terms of the GNU General Public
 | 
					 | 
				
			||||||
 * License version 2.  This program is licensed "as is" without any
 | 
					 | 
				
			||||||
 * warranty of any kind, whether express or implied.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <linux/kernel.h>
 | 
					 | 
				
			||||||
#include <linux/init.h>
 | 
					 | 
				
			||||||
#include <linux/platform_device.h>
 | 
					 | 
				
			||||||
#include <linux/irq.h>
 | 
					 | 
				
			||||||
#include <linux/timer.h>
 | 
					 | 
				
			||||||
#include <linux/mv643xx_eth.h>
 | 
					 | 
				
			||||||
#include <linux/ethtool.h>
 | 
					 | 
				
			||||||
#include <linux/gpio.h>
 | 
					 | 
				
			||||||
#include <net/dsa.h>
 | 
					 | 
				
			||||||
#include <asm/mach-types.h>
 | 
					 | 
				
			||||||
#include <asm/mach/arch.h>
 | 
					 | 
				
			||||||
#include <asm/mach/pci.h>
 | 
					 | 
				
			||||||
#include <mach/kirkwood.h>
 | 
					 | 
				
			||||||
#include "common.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct mv643xx_eth_platform_data mv88f6281gtw_ge_ge00_data = {
 | 
					 | 
				
			||||||
	.phy_addr	= MV643XX_ETH_PHY_NONE,
 | 
					 | 
				
			||||||
	.speed		= SPEED_1000,
 | 
					 | 
				
			||||||
	.duplex		= DUPLEX_FULL,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct dsa_chip_data mv88f6281gtw_ge_switch_chip_data = {
 | 
					 | 
				
			||||||
	.port_names[0]	= "lan1",
 | 
					 | 
				
			||||||
	.port_names[1]	= "lan2",
 | 
					 | 
				
			||||||
	.port_names[2]	= "lan3",
 | 
					 | 
				
			||||||
	.port_names[3]	= "lan4",
 | 
					 | 
				
			||||||
	.port_names[4]	= "wan",
 | 
					 | 
				
			||||||
	.port_names[5]	= "cpu",
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct dsa_platform_data mv88f6281gtw_ge_switch_plat_data = {
 | 
					 | 
				
			||||||
	.nr_chips	= 1,
 | 
					 | 
				
			||||||
	.chip		= &mv88f6281gtw_ge_switch_chip_data,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void __init mv88f6281gtw_ge_init(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	kirkwood_ge00_init(&mv88f6281gtw_ge_ge00_data);
 | 
					 | 
				
			||||||
	kirkwood_ge00_switch_init(&mv88f6281gtw_ge_switch_plat_data, NO_IRQ);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -25,10 +25,10 @@
 | 
				
			||||||
#include <asm/page.h>
 | 
					#include <asm/page.h>
 | 
				
			||||||
#include <asm/mach/map.h>
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
#include <asm/mach/time.h>
 | 
					#include <asm/mach/time.h>
 | 
				
			||||||
 | 
					#include <asm/hardware/cache-feroceon-l2.h>
 | 
				
			||||||
#include <mach/kirkwood.h>
 | 
					#include <mach/kirkwood.h>
 | 
				
			||||||
#include <mach/bridge-regs.h>
 | 
					#include <mach/bridge-regs.h>
 | 
				
			||||||
#include <linux/platform_data/asoc-kirkwood.h>
 | 
					#include <linux/platform_data/asoc-kirkwood.h>
 | 
				
			||||||
#include <plat/cache-feroceon-l2.h>
 | 
					 | 
				
			||||||
#include <linux/platform_data/mmc-mvsdio.h>
 | 
					#include <linux/platform_data/mmc-mvsdio.h>
 | 
				
			||||||
#include <linux/platform_data/mtd-orion_nand.h>
 | 
					#include <linux/platform_data/mtd-orion_nand.h>
 | 
				
			||||||
#include <linux/platform_data/usb-ehci-orion.h>
 | 
					#include <linux/platform_data/usb-ehci-orion.h>
 | 
				
			||||||
| 
						 | 
					@ -36,6 +36,7 @@
 | 
				
			||||||
#include <plat/time.h>
 | 
					#include <plat/time.h>
 | 
				
			||||||
#include <linux/platform_data/dma-mv_xor.h>
 | 
					#include <linux/platform_data/dma-mv_xor.h>
 | 
				
			||||||
#include "common.h"
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					#include "pm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* These can go away once Kirkwood uses the mvebu-mbus DT binding */
 | 
					/* These can go away once Kirkwood uses the mvebu-mbus DT binding */
 | 
				
			||||||
#define KIRKWOOD_MBUS_NAND_TARGET 0x01
 | 
					#define KIRKWOOD_MBUS_NAND_TARGET 0x01
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,19 +58,6 @@ void kirkwood_cpufreq_init(void);
 | 
				
			||||||
void kirkwood_restart(enum reboot_mode, const char *);
 | 
					void kirkwood_restart(enum reboot_mode, const char *);
 | 
				
			||||||
void kirkwood_clk_init(void);
 | 
					void kirkwood_clk_init(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PM
 | 
					 | 
				
			||||||
void kirkwood_pm_init(void);
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
static inline void kirkwood_pm_init(void) {};
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* board init functions for boards not fully converted to fdt */
 | 
					 | 
				
			||||||
#ifdef CONFIG_MACH_MV88F6281GTW_GE_DT
 | 
					 | 
				
			||||||
void mv88f6281gtw_ge_init(void);
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
static inline void mv88f6281gtw_ge_init(void) {};
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* early init functions not converted to fdt yet */
 | 
					/* early init functions not converted to fdt yet */
 | 
				
			||||||
char *kirkwood_id(void);
 | 
					char *kirkwood_id(void);
 | 
				
			||||||
void kirkwood_l2_init(void);
 | 
					void kirkwood_l2_init(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,7 @@
 | 
				
			||||||
#include <mach/kirkwood.h>
 | 
					#include <mach/kirkwood.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CPU_CONFIG		(BRIDGE_VIRT_BASE + 0x0100)
 | 
					#define CPU_CONFIG		(BRIDGE_VIRT_BASE + 0x0100)
 | 
				
			||||||
 | 
					#define CPU_CONFIG_PHYS		(BRIDGE_PHYS_BASE + 0x0100)
 | 
				
			||||||
#define CPU_CONFIG_ERROR_PROP	0x00000004
 | 
					#define CPU_CONFIG_ERROR_PROP	0x00000004
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CPU_CONTROL		(BRIDGE_VIRT_BASE + 0x0104)
 | 
					#define CPU_CONTROL		(BRIDGE_VIRT_BASE + 0x0104)
 | 
				
			||||||
| 
						 | 
					@ -79,5 +80,6 @@
 | 
				
			||||||
#define CGC_RESERVED		(0x6 << 21)
 | 
					#define CGC_RESERVED		(0x6 << 21)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MEMORY_PM_CTRL		(BRIDGE_VIRT_BASE + 0x118)
 | 
					#define MEMORY_PM_CTRL		(BRIDGE_VIRT_BASE + 0x118)
 | 
				
			||||||
 | 
					#define MEMORY_PM_CTRL_PHYS	(BRIDGE_PHYS_BASE + 0x118)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,15 +21,16 @@
 | 
				
			||||||
#include "common.h"
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __iomem *ddr_operation_base;
 | 
					static void __iomem *ddr_operation_base;
 | 
				
			||||||
 | 
					static void __iomem *memory_pm_ctrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void kirkwood_low_power(void)
 | 
					static void kirkwood_low_power(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 mem_pm_ctrl;
 | 
						u32 mem_pm_ctrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mem_pm_ctrl = readl(MEMORY_PM_CTRL);
 | 
						mem_pm_ctrl = readl(memory_pm_ctrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set peripherals to low-power mode */
 | 
						/* Set peripherals to low-power mode */
 | 
				
			||||||
	writel_relaxed(~0, MEMORY_PM_CTRL);
 | 
						writel_relaxed(~0, memory_pm_ctrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set DDR in self-refresh */
 | 
						/* Set DDR in self-refresh */
 | 
				
			||||||
	writel_relaxed(0x7, ddr_operation_base);
 | 
						writel_relaxed(0x7, ddr_operation_base);
 | 
				
			||||||
| 
						 | 
					@ -41,7 +42,7 @@ static void kirkwood_low_power(void)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	cpu_do_idle();
 | 
						cpu_do_idle();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	writel_relaxed(mem_pm_ctrl, MEMORY_PM_CTRL);
 | 
						writel_relaxed(mem_pm_ctrl, memory_pm_ctrl);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int kirkwood_suspend_enter(suspend_state_t state)
 | 
					static int kirkwood_suspend_enter(suspend_state_t state)
 | 
				
			||||||
| 
						 | 
					@ -69,5 +70,7 @@ static const struct platform_suspend_ops kirkwood_suspend_ops = {
 | 
				
			||||||
void __init kirkwood_pm_init(void)
 | 
					void __init kirkwood_pm_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ddr_operation_base = ioremap(DDR_OPERATION_BASE, 4);
 | 
						ddr_operation_base = ioremap(DDR_OPERATION_BASE, 4);
 | 
				
			||||||
 | 
						memory_pm_ctrl = ioremap(MEMORY_PM_CTRL_PHYS, 4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	suspend_set_ops(&kirkwood_suspend_ops);
 | 
						suspend_set_ops(&kirkwood_suspend_ops);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								arch/arm/mach-kirkwood/pm.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								arch/arm/mach-kirkwood/pm.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Power Management driver for Marvell Kirkwood SoCs
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2013 Ezequiel Garcia <ezequiel@free-electrons.com>
 | 
				
			||||||
 | 
					 * Copyright (C) 2010 Simon Guinot <sguinot@lacie.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License,
 | 
				
			||||||
 | 
					 * version 2 of the License.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ARCH_KIRKWOOD_PM_H
 | 
				
			||||||
 | 
					#define __ARCH_KIRKWOOD_PM_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_PM
 | 
				
			||||||
 | 
					void kirkwood_pm_init(void);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					static inline void kirkwood_pm_init(void) {};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -15,11 +15,11 @@
 | 
				
			||||||
#include <linux/ata_platform.h>
 | 
					#include <linux/ata_platform.h>
 | 
				
			||||||
#include <linux/clk-provider.h>
 | 
					#include <linux/clk-provider.h>
 | 
				
			||||||
#include <linux/ethtool.h>
 | 
					#include <linux/ethtool.h>
 | 
				
			||||||
 | 
					#include <asm/hardware/cache-feroceon-l2.h>
 | 
				
			||||||
#include <asm/mach/map.h>
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
#include <asm/mach/time.h>
 | 
					#include <asm/mach/time.h>
 | 
				
			||||||
#include <mach/mv78xx0.h>
 | 
					#include <mach/mv78xx0.h>
 | 
				
			||||||
#include <mach/bridge-regs.h>
 | 
					#include <mach/bridge-regs.h>
 | 
				
			||||||
#include <plat/cache-feroceon-l2.h>
 | 
					 | 
				
			||||||
#include <linux/platform_data/usb-ehci-orion.h>
 | 
					#include <linux/platform_data/usb-ehci-orion.h>
 | 
				
			||||||
#include <linux/platform_data/mtd-orion_nand.h>
 | 
					#include <linux/platform_data/mtd-orion_nand.h>
 | 
				
			||||||
#include <plat/time.h>
 | 
					#include <plat/time.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
config ARCH_MVEBU
 | 
					config ARCH_MVEBU
 | 
				
			||||||
	bool "Marvell SOCs with Device Tree support" if ARCH_MULTI_V7
 | 
						bool "Marvell Engineering Business Unit (MVEBU) SoCs" if (ARCH_MULTI_V7 || ARCH_MULTI_V5)
 | 
				
			||||||
	select ARCH_SUPPORTS_BIG_ENDIAN
 | 
						select ARCH_SUPPORTS_BIG_ENDIAN
 | 
				
			||||||
	select CLKSRC_MMIO
 | 
						select CLKSRC_MMIO
 | 
				
			||||||
	select GENERIC_IRQ_CHIP
 | 
						select GENERIC_IRQ_CHIP
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ config ARCH_MVEBU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ARCH_MVEBU
 | 
					if ARCH_MVEBU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
menu "Marvell SOC with device tree"
 | 
					menu "Marvell EBU SoC variants"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_MVEBU_V7
 | 
					config MACH_MVEBU_V7
 | 
				
			||||||
	bool
 | 
						bool
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@ config MACH_MVEBU_V7
 | 
				
			||||||
	select CACHE_L2X0
 | 
						select CACHE_L2X0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_ARMADA_370
 | 
					config MACH_ARMADA_370
 | 
				
			||||||
	bool "Marvell Armada 370 boards"
 | 
						bool "Marvell Armada 370 boards" if ARCH_MULTI_V7
 | 
				
			||||||
	select ARMADA_370_CLK
 | 
						select ARMADA_370_CLK
 | 
				
			||||||
	select CPU_PJ4B
 | 
						select CPU_PJ4B
 | 
				
			||||||
	select MACH_MVEBU_V7
 | 
						select MACH_MVEBU_V7
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,7 @@ config MACH_ARMADA_370
 | 
				
			||||||
	  on the Marvell Armada 370 SoC with device tree.
 | 
						  on the Marvell Armada 370 SoC with device tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_ARMADA_375
 | 
					config MACH_ARMADA_375
 | 
				
			||||||
	bool "Marvell Armada 375 boards"
 | 
						bool "Marvell Armada 375 boards" if ARCH_MULTI_V7
 | 
				
			||||||
	select ARM_ERRATA_720789
 | 
						select ARM_ERRATA_720789
 | 
				
			||||||
	select ARM_ERRATA_753970
 | 
						select ARM_ERRATA_753970
 | 
				
			||||||
	select ARM_GIC
 | 
						select ARM_GIC
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,7 @@ config MACH_ARMADA_375
 | 
				
			||||||
	  on the Marvell Armada 375 SoC with device tree.
 | 
						  on the Marvell Armada 375 SoC with device tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_ARMADA_38X
 | 
					config MACH_ARMADA_38X
 | 
				
			||||||
	bool "Marvell Armada 380/385 boards"
 | 
						bool "Marvell Armada 380/385 boards" if ARCH_MULTI_V7
 | 
				
			||||||
	select ARM_ERRATA_720789
 | 
						select ARM_ERRATA_720789
 | 
				
			||||||
	select ARM_ERRATA_753970
 | 
						select ARM_ERRATA_753970
 | 
				
			||||||
	select ARM_GIC
 | 
						select ARM_GIC
 | 
				
			||||||
| 
						 | 
					@ -60,7 +60,7 @@ config MACH_ARMADA_38X
 | 
				
			||||||
	  on the Marvell Armada 380/385 SoC with device tree.
 | 
						  on the Marvell Armada 380/385 SoC with device tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_ARMADA_XP
 | 
					config MACH_ARMADA_XP
 | 
				
			||||||
	bool "Marvell Armada XP boards"
 | 
						bool "Marvell Armada XP boards" if ARCH_MULTI_V7
 | 
				
			||||||
	select ARMADA_XP_CLK
 | 
						select ARMADA_XP_CLK
 | 
				
			||||||
	select CPU_PJ4B
 | 
						select CPU_PJ4B
 | 
				
			||||||
	select MACH_MVEBU_V7
 | 
						select MACH_MVEBU_V7
 | 
				
			||||||
| 
						 | 
					@ -69,6 +69,30 @@ config MACH_ARMADA_XP
 | 
				
			||||||
	  Say 'Y' here if you want your kernel to support boards based
 | 
						  Say 'Y' here if you want your kernel to support boards based
 | 
				
			||||||
	  on the Marvell Armada XP SoC with device tree.
 | 
						  on the Marvell Armada XP SoC with device tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config MACH_KIRKWOOD
 | 
				
			||||||
 | 
						bool "Marvell Kirkwood boards" if ARCH_MULTI_V5
 | 
				
			||||||
 | 
						select ARCH_HAS_CPUFREQ
 | 
				
			||||||
 | 
						select ARCH_REQUIRE_GPIOLIB
 | 
				
			||||||
 | 
						select CPU_FEROCEON
 | 
				
			||||||
 | 
						select KIRKWOOD_CLK
 | 
				
			||||||
 | 
						select OF_IRQ
 | 
				
			||||||
 | 
						select ORION_IRQCHIP
 | 
				
			||||||
 | 
						select ORION_TIMER
 | 
				
			||||||
 | 
						select PCI
 | 
				
			||||||
 | 
						select PCI_QUIRKS
 | 
				
			||||||
 | 
						select PINCTRL_KIRKWOOD
 | 
				
			||||||
 | 
						select USE_OF
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  Say 'Y' here if you want your kernel to support boards based
 | 
				
			||||||
 | 
						  on the Marvell Kirkwood device tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config MACH_T5325
 | 
				
			||||||
 | 
						bool "HP T5325 thin client"
 | 
				
			||||||
 | 
						depends on MACH_KIRKWOOD
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  Say 'Y' here if you want your kernel to support the
 | 
				
			||||||
 | 
						  HP T5325 Thin client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmenu
 | 
					endmenu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,3 +8,5 @@ obj-$(CONFIG_MACH_MVEBU_V7)      += board-v7.o
 | 
				
			||||||
obj-$(CONFIG_ARCH_MVEBU)	 += coherency.o coherency_ll.o pmsu.o
 | 
					obj-$(CONFIG_ARCH_MVEBU)	 += coherency.o coherency_ll.o pmsu.o
 | 
				
			||||||
obj-$(CONFIG_SMP)                += platsmp.o headsmp.o
 | 
					obj-$(CONFIG_SMP)                += platsmp.o headsmp.o
 | 
				
			||||||
obj-$(CONFIG_HOTPLUG_CPU)        += hotplug.o
 | 
					obj-$(CONFIG_HOTPLUG_CPU)        += hotplug.o
 | 
				
			||||||
 | 
					obj-$(CONFIG_MACH_KIRKWOOD)	 += kirkwood.o kirkwood-pm.o
 | 
				
			||||||
 | 
					obj-$(CONFIG_MACH_T5325)	 += board-t5325.o
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										41
									
								
								arch/arm/mach-mvebu/board-t5325.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								arch/arm/mach-mvebu/board-t5325.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,41 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * HP T5325 Board Setup
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2014
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Andrew Lunn <andrew@lunn.ch>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is licensed under the terms of the GNU General Public
 | 
				
			||||||
 | 
					 * License version 2.  This program is licensed "as is" without any
 | 
				
			||||||
 | 
					 * warranty of any kind, whether express or implied.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <linux/kernel.h>
 | 
				
			||||||
 | 
					#include <linux/i2c.h>
 | 
				
			||||||
 | 
					#include <linux/init.h>
 | 
				
			||||||
 | 
					#include <linux/platform_device.h>
 | 
				
			||||||
 | 
					#include <sound/alc5623.h>
 | 
				
			||||||
 | 
					#include "board.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_device hp_t5325_audio_device = {
 | 
				
			||||||
 | 
						.name		= "t5325-audio",
 | 
				
			||||||
 | 
						.id		= -1,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct alc5623_platform_data alc5621_data = {
 | 
				
			||||||
 | 
						.add_ctrl = 0x3700,
 | 
				
			||||||
 | 
						.jack_det_ctrl = 0x4810,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct i2c_board_info i2c_board_info[] __initdata = {
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							I2C_BOARD_INFO("alc5621", 0x1a),
 | 
				
			||||||
 | 
							.platform_data = &alc5621_data,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void __init t5325_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						i2c_register_board_info(0, i2c_board_info, ARRAY_SIZE(i2c_board_info));
 | 
				
			||||||
 | 
						platform_device_register(&hp_t5325_audio_device);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										22
									
								
								arch/arm/mach-mvebu/board.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								arch/arm/mach-mvebu/board.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Board functions for Marvell System On Chip
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2014
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Andrew Lunn <andrew@lunn.ch>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is licensed under the terms of the GNU General Public
 | 
				
			||||||
 | 
					 * License version 2.  This program is licensed "as is" without any
 | 
				
			||||||
 | 
					 * warranty of any kind, whether express or implied.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ARCH_MVEBU_BOARD_H
 | 
				
			||||||
 | 
					#define __ARCH_MVEBU_BOARD_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_MACH_T5325
 | 
				
			||||||
 | 
					void t5325_init(void);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					static inline void t5325_init(void) {};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										76
									
								
								arch/arm/mach-mvebu/kirkwood-pm.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								arch/arm/mach-mvebu/kirkwood-pm.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,76 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Power Management driver for Marvell Kirkwood SoCs
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2013 Ezequiel Garcia <ezequiel@free-electrons.com>
 | 
				
			||||||
 | 
					 * Copyright (C) 2010 Simon Guinot <sguinot@lacie.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License,
 | 
				
			||||||
 | 
					 * version 2 of the License.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <linux/kernel.h>
 | 
				
			||||||
 | 
					#include <linux/suspend.h>
 | 
				
			||||||
 | 
					#include <linux/io.h>
 | 
				
			||||||
 | 
					#include "kirkwood.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __iomem *ddr_operation_base;
 | 
				
			||||||
 | 
					static void __iomem *memory_pm_ctrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void kirkwood_low_power(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						u32 mem_pm_ctrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mem_pm_ctrl = readl(memory_pm_ctrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Set peripherals to low-power mode */
 | 
				
			||||||
 | 
						writel_relaxed(~0, memory_pm_ctrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Set DDR in self-refresh */
 | 
				
			||||||
 | 
						writel_relaxed(0x7, ddr_operation_base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Set CPU in wait-for-interrupt state.
 | 
				
			||||||
 | 
						 * This disables the CPU core clocks,
 | 
				
			||||||
 | 
						 * the array clocks, and also the L2 controller.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						cpu_do_idle();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						writel_relaxed(mem_pm_ctrl, memory_pm_ctrl);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int kirkwood_suspend_enter(suspend_state_t state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						switch (state) {
 | 
				
			||||||
 | 
						case PM_SUSPEND_STANDBY:
 | 
				
			||||||
 | 
							kirkwood_low_power();
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int kirkwood_pm_valid_standby(suspend_state_t state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return state == PM_SUSPEND_STANDBY;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct platform_suspend_ops kirkwood_suspend_ops = {
 | 
				
			||||||
 | 
						.enter = kirkwood_suspend_enter,
 | 
				
			||||||
 | 
						.valid = kirkwood_pm_valid_standby,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int __init kirkwood_pm_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ddr_operation_base = ioremap(DDR_OPERATION_BASE, 4);
 | 
				
			||||||
 | 
						memory_pm_ctrl = ioremap(MEMORY_PM_CTRL_PHYS, 4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suspend_set_ops(&kirkwood_suspend_ops);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										26
									
								
								arch/arm/mach-mvebu/kirkwood-pm.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								arch/arm/mach-mvebu/kirkwood-pm.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Power Management driver for Marvell Kirkwood SoCs
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2013 Ezequiel Garcia <ezequiel@free-electrons.com>
 | 
				
			||||||
 | 
					 * Copyright (C) 2010 Simon Guinot <sguinot@lacie.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License,
 | 
				
			||||||
 | 
					 * version 2 of the License.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ARCH_KIRKWOOD_PM_H
 | 
				
			||||||
 | 
					#define __ARCH_KIRKWOOD_PM_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_PM
 | 
				
			||||||
 | 
					void kirkwood_pm_init(void);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					static inline void kirkwood_pm_init(void) {};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										199
									
								
								arch/arm/mach-mvebu/kirkwood.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								arch/arm/mach-mvebu/kirkwood.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,199 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2012 (C), Jason Cooper <jason@lakedaemon.net>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * arch/arm/mach-mvebu/kirkwood.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Flattened Device Tree board initialization
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is licensed under the terms of the GNU General Public
 | 
				
			||||||
 | 
					 * License version 2.  This program is licensed "as is" without any
 | 
				
			||||||
 | 
					 * warranty of any kind, whether express or implied.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <linux/clk.h>
 | 
				
			||||||
 | 
					#include <linux/kernel.h>
 | 
				
			||||||
 | 
					#include <linux/init.h>
 | 
				
			||||||
 | 
					#include <linux/mbus.h>
 | 
				
			||||||
 | 
					#include <linux/of.h>
 | 
				
			||||||
 | 
					#include <linux/of_address.h>
 | 
				
			||||||
 | 
					#include <linux/of_net.h>
 | 
				
			||||||
 | 
					#include <linux/of_platform.h>
 | 
				
			||||||
 | 
					#include <linux/slab.h>
 | 
				
			||||||
 | 
					#include <asm/hardware/cache-feroceon-l2.h>
 | 
				
			||||||
 | 
					#include <asm/mach/arch.h>
 | 
				
			||||||
 | 
					#include <asm/mach/map.h>
 | 
				
			||||||
 | 
					#include "kirkwood.h"
 | 
				
			||||||
 | 
					#include "kirkwood-pm.h"
 | 
				
			||||||
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					#include "board.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct resource kirkwood_cpufreq_resources[] = {
 | 
				
			||||||
 | 
						[0] = {
 | 
				
			||||||
 | 
							.start  = CPU_CONTROL_PHYS,
 | 
				
			||||||
 | 
							.end    = CPU_CONTROL_PHYS + 3,
 | 
				
			||||||
 | 
							.flags  = IORESOURCE_MEM,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_device kirkwood_cpufreq_device = {
 | 
				
			||||||
 | 
						.name		= "kirkwood-cpufreq",
 | 
				
			||||||
 | 
						.id		= -1,
 | 
				
			||||||
 | 
						.num_resources	= ARRAY_SIZE(kirkwood_cpufreq_resources),
 | 
				
			||||||
 | 
						.resource	= kirkwood_cpufreq_resources,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __init kirkwood_cpufreq_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						platform_device_register(&kirkwood_cpufreq_device);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct resource kirkwood_cpuidle_resource[] = {
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.flags	= IORESOURCE_MEM,
 | 
				
			||||||
 | 
							.start	= DDR_OPERATION_BASE,
 | 
				
			||||||
 | 
							.end	= DDR_OPERATION_BASE + 3,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct platform_device kirkwood_cpuidle = {
 | 
				
			||||||
 | 
						.name		= "kirkwood_cpuidle",
 | 
				
			||||||
 | 
						.id		= -1,
 | 
				
			||||||
 | 
						.resource	= kirkwood_cpuidle_resource,
 | 
				
			||||||
 | 
						.num_resources	= 1,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __init kirkwood_cpuidle_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						platform_device_register(&kirkwood_cpuidle);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MV643XX_ETH_MAC_ADDR_LOW	0x0414
 | 
				
			||||||
 | 
					#define MV643XX_ETH_MAC_ADDR_HIGH	0x0418
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __init kirkwood_dt_eth_fixup(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device_node *np;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * The ethernet interfaces forget the MAC address assigned by u-boot
 | 
				
			||||||
 | 
						 * if the clocks are turned off. Usually, u-boot on kirkwood boards
 | 
				
			||||||
 | 
						 * has no DT support to properly set local-mac-address property.
 | 
				
			||||||
 | 
						 * As a workaround, we get the MAC address from mv643xx_eth registers
 | 
				
			||||||
 | 
						 * and update the port device node if no valid MAC address is set.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						for_each_compatible_node(np, NULL, "marvell,kirkwood-eth-port") {
 | 
				
			||||||
 | 
							struct device_node *pnp = of_get_parent(np);
 | 
				
			||||||
 | 
							struct clk *clk;
 | 
				
			||||||
 | 
							struct property *pmac;
 | 
				
			||||||
 | 
							void __iomem *io;
 | 
				
			||||||
 | 
							u8 *macaddr;
 | 
				
			||||||
 | 
							u32 reg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!pnp)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* skip disabled nodes or nodes with valid MAC address*/
 | 
				
			||||||
 | 
							if (!of_device_is_available(pnp) || of_get_mac_address(np))
 | 
				
			||||||
 | 
								goto eth_fixup_skip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							clk = of_clk_get(pnp, 0);
 | 
				
			||||||
 | 
							if (IS_ERR(clk))
 | 
				
			||||||
 | 
								goto eth_fixup_skip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							io = of_iomap(pnp, 0);
 | 
				
			||||||
 | 
							if (!io)
 | 
				
			||||||
 | 
								goto eth_fixup_no_map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* ensure port clock is not gated to not hang CPU */
 | 
				
			||||||
 | 
							clk_prepare_enable(clk);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* store MAC address register contents in local-mac-address */
 | 
				
			||||||
 | 
							pr_err(FW_INFO "%s: local-mac-address is not set\n",
 | 
				
			||||||
 | 
							       np->full_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							pmac = kzalloc(sizeof(*pmac) + 6, GFP_KERNEL);
 | 
				
			||||||
 | 
							if (!pmac)
 | 
				
			||||||
 | 
								goto eth_fixup_no_mem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							pmac->value = pmac + 1;
 | 
				
			||||||
 | 
							pmac->length = 6;
 | 
				
			||||||
 | 
							pmac->name = kstrdup("local-mac-address", GFP_KERNEL);
 | 
				
			||||||
 | 
							if (!pmac->name) {
 | 
				
			||||||
 | 
								kfree(pmac);
 | 
				
			||||||
 | 
								goto eth_fixup_no_mem;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							macaddr = pmac->value;
 | 
				
			||||||
 | 
							reg = readl(io + MV643XX_ETH_MAC_ADDR_HIGH);
 | 
				
			||||||
 | 
							macaddr[0] = (reg >> 24) & 0xff;
 | 
				
			||||||
 | 
							macaddr[1] = (reg >> 16) & 0xff;
 | 
				
			||||||
 | 
							macaddr[2] = (reg >> 8) & 0xff;
 | 
				
			||||||
 | 
							macaddr[3] = reg & 0xff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							reg = readl(io + MV643XX_ETH_MAC_ADDR_LOW);
 | 
				
			||||||
 | 
							macaddr[4] = (reg >> 8) & 0xff;
 | 
				
			||||||
 | 
							macaddr[5] = reg & 0xff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							of_update_property(np, pmac);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					eth_fixup_no_mem:
 | 
				
			||||||
 | 
							iounmap(io);
 | 
				
			||||||
 | 
							clk_disable_unprepare(clk);
 | 
				
			||||||
 | 
					eth_fixup_no_map:
 | 
				
			||||||
 | 
							clk_put(clk);
 | 
				
			||||||
 | 
					eth_fixup_skip:
 | 
				
			||||||
 | 
							of_node_put(pnp);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Disable propagation of mbus errors to the CPU local bus, as this
 | 
				
			||||||
 | 
					 * causes mbus errors (which can occur for example for PCI aborts) to
 | 
				
			||||||
 | 
					 * throw CPU aborts, which we're not set up to deal with.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void kirkwood_disable_mbus_error_propagation(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						void __iomem *cpu_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cpu_config = ioremap(CPU_CONFIG_PHYS, 4);
 | 
				
			||||||
 | 
						writel(readl(cpu_config) & ~CPU_CONFIG_ERROR_PROP, cpu_config);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct of_dev_auxdata auxdata[] __initdata = {
 | 
				
			||||||
 | 
						OF_DEV_AUXDATA("marvell,kirkwood-audio", 0xf10a0000,
 | 
				
			||||||
 | 
							       "mvebu-audio", NULL),
 | 
				
			||||||
 | 
						{ /* sentinel */ }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void __init kirkwood_dt_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						kirkwood_disable_mbus_error_propagation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						BUG_ON(mvebu_mbus_dt_init());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_CACHE_FEROCEON_L2
 | 
				
			||||||
 | 
						feroceon_of_init();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						kirkwood_cpufreq_init();
 | 
				
			||||||
 | 
						kirkwood_cpuidle_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						kirkwood_pm_init();
 | 
				
			||||||
 | 
						kirkwood_dt_eth_fixup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (of_machine_is_compatible("hp,t5325"))
 | 
				
			||||||
 | 
							t5325_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						of_platform_populate(NULL, of_default_bus_match_table, auxdata, NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char * const kirkwood_dt_board_compat[] = {
 | 
				
			||||||
 | 
						"marvell,kirkwood",
 | 
				
			||||||
 | 
						NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DT_MACHINE_START(KIRKWOOD_DT, "Marvell Kirkwood (Flattened Device Tree)")
 | 
				
			||||||
 | 
						/* Maintainer: Jason Cooper <jason@lakedaemon.net> */
 | 
				
			||||||
 | 
						.init_machine	= kirkwood_dt_init,
 | 
				
			||||||
 | 
						.restart	= mvebu_restart,
 | 
				
			||||||
 | 
						.dt_compat	= kirkwood_dt_board_compat,
 | 
				
			||||||
 | 
					MACHINE_END
 | 
				
			||||||
							
								
								
									
										22
									
								
								arch/arm/mach-mvebu/kirkwood.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								arch/arm/mach-mvebu/kirkwood.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * arch/arm/mach-mvebu/kirkwood.h
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Generic definitions for Marvell Kirkwood SoC flavors:
 | 
				
			||||||
 | 
					 * 88F6180, 88F6192 and 88F6281.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is licensed under the terms of the GNU General Public
 | 
				
			||||||
 | 
					 * License version 2.  This program is licensed "as is" without any
 | 
				
			||||||
 | 
					 * warranty of any kind, whether express or implied.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KIRKWOOD_REGS_PHYS_BASE	0xf1000000
 | 
				
			||||||
 | 
					#define DDR_PHYS_BASE           (KIRKWOOD_REGS_PHYS_BASE + 0x00000)
 | 
				
			||||||
 | 
					#define BRIDGE_PHYS_BASE	(KIRKWOOD_REGS_PHYS_BASE + 0x20000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DDR_OPERATION_BASE	(DDR_PHYS_BASE + 0x1418)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CPU_CONFIG_PHYS		(BRIDGE_PHYS_BASE + 0x0100)
 | 
				
			||||||
 | 
					#define CPU_CONFIG_ERROR_PROP	0x00000004
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CPU_CONTROL_PHYS	(BRIDGE_PHYS_BASE + 0x0104)
 | 
				
			||||||
 | 
					#define MEMORY_PM_CTRL_PHYS	(BRIDGE_PHYS_BASE + 0x0118)
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,7 @@ static bool is_id_valid;
 | 
				
			||||||
static const struct of_device_id mvebu_pcie_of_match_table[] = {
 | 
					static const struct of_device_id mvebu_pcie_of_match_table[] = {
 | 
				
			||||||
	{ .compatible = "marvell,armada-xp-pcie", },
 | 
						{ .compatible = "marvell,armada-xp-pcie", },
 | 
				
			||||||
	{ .compatible = "marvell,armada-370-pcie", },
 | 
						{ .compatible = "marvell,armada-370-pcie", },
 | 
				
			||||||
 | 
						{ .compatible = "marvell,kirkwood-pcie" },
 | 
				
			||||||
	{},
 | 
						{},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -855,7 +855,7 @@ config OUTER_CACHE_SYNC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CACHE_FEROCEON_L2
 | 
					config CACHE_FEROCEON_L2
 | 
				
			||||||
	bool "Enable the Feroceon L2 cache controller"
 | 
						bool "Enable the Feroceon L2 cache controller"
 | 
				
			||||||
	depends on ARCH_KIRKWOOD || ARCH_MV78XX0
 | 
						depends on ARCH_KIRKWOOD || ARCH_MV78XX0 || ARCH_MVEBU
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select OUTER_CACHE
 | 
						select OUTER_CACHE
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,10 +13,15 @@
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/init.h>
 | 
					#include <linux/init.h>
 | 
				
			||||||
 | 
					#include <linux/of.h>
 | 
				
			||||||
 | 
					#include <linux/of_address.h>
 | 
				
			||||||
#include <linux/highmem.h>
 | 
					#include <linux/highmem.h>
 | 
				
			||||||
 | 
					#include <linux/io.h>
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
#include <asm/cp15.h>
 | 
					#include <asm/cp15.h>
 | 
				
			||||||
#include <plat/cache-feroceon-l2.h>
 | 
					#include <asm/hardware/cache-feroceon-l2.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define L2_WRITETHROUGH_KIRKWOOD	BIT(4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Low-level cache maintenance operations.
 | 
					 * Low-level cache maintenance operations.
 | 
				
			||||||
| 
						 | 
					@ -350,3 +355,41 @@ void __init feroceon_l2_init(int __l2_wt_override)
 | 
				
			||||||
	printk(KERN_INFO "Feroceon L2: Cache support initialised%s.\n",
 | 
						printk(KERN_INFO "Feroceon L2: Cache support initialised%s.\n",
 | 
				
			||||||
			 l2_wt_override ? ", in WT override mode" : "");
 | 
								 l2_wt_override ? ", in WT override mode" : "");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#ifdef CONFIG_OF
 | 
				
			||||||
 | 
					static const struct of_device_id feroceon_ids[] __initconst = {
 | 
				
			||||||
 | 
						{ .compatible = "marvell,kirkwood-cache"},
 | 
				
			||||||
 | 
						{ .compatible = "marvell,feroceon-cache"},
 | 
				
			||||||
 | 
						{}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int __init feroceon_of_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device_node *node;
 | 
				
			||||||
 | 
						void __iomem *base;
 | 
				
			||||||
 | 
						bool l2_wt_override = false;
 | 
				
			||||||
 | 
						struct resource res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH)
 | 
				
			||||||
 | 
						l2_wt_override = true;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						node = of_find_matching_node(NULL, feroceon_ids);
 | 
				
			||||||
 | 
						if (node && of_device_is_compatible(node, "marvell,kirkwood-cache")) {
 | 
				
			||||||
 | 
							if (of_address_to_resource(node, 0, &res))
 | 
				
			||||||
 | 
								return -ENODEV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							base = ioremap(res.start, resource_size(&res));
 | 
				
			||||||
 | 
							if (!base)
 | 
				
			||||||
 | 
								return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (l2_wt_override)
 | 
				
			||||||
 | 
								writel(readl(base) | L2_WRITETHROUGH_KIRKWOOD, base);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								writel(readl(base) & ~L2_WRITETHROUGH_KIRKWOOD, base);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						feroceon_l2_init(l2_wt_override);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue