Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
0d75ab68
Commit
0d75ab68
authored
Mar 01, 2014
by
Jason Cooper
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'mvebu/soc-kw' into mvebu/soc
parents
aa89b0ad
b02b6438
Changes
26
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
679 additions
and
107 deletions
+679
-107
Documentation/devicetree/bindings/arm/mrvl/feroceon.txt
Documentation/devicetree/bindings/arm/mrvl/feroceon.txt
+16
-0
arch/arm/Kconfig
arch/arm/Kconfig
+1
-1
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/Makefile
+5
-2
arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts
arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts
+62
-0
arch/arm/include/asm/hardware/cache-feroceon-l2.h
arch/arm/include/asm/hardware/cache-feroceon-l2.h
+3
-1
arch/arm/mach-kirkwood/Kconfig
arch/arm/mach-kirkwood/Kconfig
+0
-7
arch/arm/mach-kirkwood/Makefile
arch/arm/mach-kirkwood/Makefile
+1
-3
arch/arm/mach-kirkwood/board-dt.c
arch/arm/mach-kirkwood/board-dt.c
+93
-20
arch/arm/mach-kirkwood/board-mv88f6281gtw_ge.c
arch/arm/mach-kirkwood/board-mv88f6281gtw_ge.c
+0
-50
arch/arm/mach-kirkwood/common.c
arch/arm/mach-kirkwood/common.c
+2
-1
arch/arm/mach-kirkwood/common.h
arch/arm/mach-kirkwood/common.h
+0
-13
arch/arm/mach-kirkwood/include/mach/bridge-regs.h
arch/arm/mach-kirkwood/include/mach/bridge-regs.h
+2
-0
arch/arm/mach-kirkwood/pm.c
arch/arm/mach-kirkwood/pm.c
+6
-3
arch/arm/mach-kirkwood/pm.h
arch/arm/mach-kirkwood/pm.h
+26
-0
arch/arm/mach-mv78xx0/common.c
arch/arm/mach-mv78xx0/common.c
+1
-1
arch/arm/mach-mvebu/Kconfig
arch/arm/mach-mvebu/Kconfig
+27
-3
arch/arm/mach-mvebu/Makefile
arch/arm/mach-mvebu/Makefile
+2
-0
arch/arm/mach-mvebu/board-t5325.c
arch/arm/mach-mvebu/board-t5325.c
+41
-0
arch/arm/mach-mvebu/board.h
arch/arm/mach-mvebu/board.h
+22
-0
arch/arm/mach-mvebu/kirkwood-pm.c
arch/arm/mach-mvebu/kirkwood-pm.c
+76
-0
arch/arm/mach-mvebu/kirkwood-pm.h
arch/arm/mach-mvebu/kirkwood-pm.h
+26
-0
arch/arm/mach-mvebu/kirkwood.c
arch/arm/mach-mvebu/kirkwood.c
+199
-0
arch/arm/mach-mvebu/kirkwood.h
arch/arm/mach-mvebu/kirkwood.h
+22
-0
arch/arm/mach-mvebu/mvebu-soc-id.c
arch/arm/mach-mvebu/mvebu-soc-id.c
+1
-0
arch/arm/mm/Kconfig
arch/arm/mm/Kconfig
+1
-1
arch/arm/mm/cache-feroceon-l2.c
arch/arm/mm/cache-feroceon-l2.c
+44
-1
No files found.
Documentation/devicetree/bindings/arm/mrvl/feroceon.txt
0 → 100644
View file @
0d75ab68
* 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>;
};
arch/arm/Kconfig
View file @
0d75ab68
...
...
@@ -898,7 +898,7 @@ config ARCH_MULTI_V5
bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
depends on !ARCH_MULTI_V6_V7
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_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)
...
...
arch/arm/boot/dts/Makefile
View file @
0d75ab68
...
...
@@ -81,8 +81,8 @@ dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \
ecx-2000.dtb
dtb-$(CONFIG_ARCH_INTEGRATOR)
+=
integratorap.dtb
\
integratorcp.dtb
dtb-$(CONFIG_ARCH_LPC32XX)
+=
ea3250.dtb phy3250.dtb
dtb-$(CONFIG_ARCH_KIRKWOOD)
+=
kirkwood-cloudbox.dtb
\
kirkwood
:=
\
kirkwood-cloudbox.dtb
\
kirkwood-db-88f6281.dtb
\
kirkwood-db-88f6282.dtb
\
kirkwood-dns320.dtb
\
...
...
@@ -116,6 +116,9 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \
kirkwood-topkick.dtb
\
kirkwood-ts219-6281.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_MOXART)
+=
moxart-uc7112lx.dtb
dtb-$(CONFIG_ARCH_MSM)
+=
qcom-msm8660-surf.dtb
\
...
...
arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts
View file @
0d75ab68
...
...
@@ -122,4 +122,66 @@ button@2 {
gpios
=
<&
gpio1
14
GPIO_ACTIVE_LOW
>;
};
};
dsa
@
0
{
compatible
=
"marvell,dsa"
;
#
address
-
cells
=
<
2
>;
#
size
-
cells
=
<
0
>;
dsa
,
ethernet
=
<&
eth0
>;
dsa
,
mii
-
bus
=
<&
ethphy0
>;
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
>;
};
};
&
eth0
{
status
=
"okay"
;
ethernet0
-
port
@
0
{
phy
-
handle
=
<&
ethphy0
>;
};
};
arch/arm/
plat-orion/include/plat
/cache-feroceon-l2.h
→
arch/arm/
include/asm/hardware
/cache-feroceon-l2.h
View file @
0d75ab68
/*
* arch/arm/
plat-orion/include/plat
/cache-feroceon-l2.h
* arch/arm/
include/asm/hardware
/cache-feroceon-l2.h
*
* Copyright (C) 2008 Marvell Semiconductor
*
...
...
@@ -9,3 +9,5 @@
*/
extern
void
__init
feroceon_l2_init
(
int
l2_wt_override
);
extern
int
__init
feroceon_of_init
(
void
);
arch/arm/mach-kirkwood/Kconfig
View file @
0d75ab68
...
...
@@ -106,13 +106,6 @@ config ARCH_KIRKWOOD_DT
Say 'Y' here if you want your kernel to support the
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
endif
arch/arm/mach-kirkwood/Makefile
View file @
0d75ab68
obj-y
+=
common.o pcie.o
obj-$(CONFIG_KIRKWOOD_LEGACY)
+=
irq.o mpp.o
obj-$(CONFIG_KIRKWOOD_LEGACY)
+=
irq.o mpp.o common.o pcie.o
obj-$(CONFIG_PM)
+=
pm.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_ARCH_KIRKWOOD_DT)
+=
board-dt.o
obj-$(CONFIG_MACH_MV88F6281GTW_GE_DT)
+=
board-mv88f6281gtw_ge.o
arch/arm/mach-kirkwood/board-dt.c
View file @
0d75ab68
...
...
@@ -19,11 +19,84 @@
#include <linux/of_platform.h>
#include <linux/dma-mapping.h>
#include <linux/irqchip.h>
#include <
linux/kexec
.h>
#include <
asm/hardware/cache-feroceon-l2
.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <mach/bridge-regs.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_HIGH 0x0418
...
...
@@ -104,35 +177,35 @@ static void __init kirkwood_dt_eth_fixup(void)
}
}
static
void
__init
kirkwood_dt_init
(
void
)
/*
* 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
)
{
pr_info
(
"Kirkwood: %s.
\n
"
,
kirkwood_id
())
;
void
__iomem
*
cpu_config
;
/*
* 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
);
cpu_config
=
ioremap
(
CPU_CONFIG_PHYS
,
4
);
writel
(
readl
(
cpu_config
)
&
~
CPU_CONFIG_ERROR_PROP
,
cpu_config
);
iounmap
(
cpu_config
);
}
BUG_ON
(
mvebu_mbus_dt_init
());
static
void
__init
kirkwood_dt_init
(
void
)
{
kirkwood_disable_mbus_error_propagation
();
kirkwood_l2_init
(
);
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
();
#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
);
}
...
...
arch/arm/mach-kirkwood/board-mv88f6281gtw_ge.c
deleted
100644 → 0
View file @
aa89b0ad
/*
* 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
);
}
arch/arm/mach-kirkwood/common.c
View file @
0d75ab68
...
...
@@ -25,10 +25,10 @@
#include <asm/page.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <asm/hardware/cache-feroceon-l2.h>
#include <mach/kirkwood.h>
#include <mach/bridge-regs.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/mtd-orion_nand.h>
#include <linux/platform_data/usb-ehci-orion.h>
...
...
@@ -36,6 +36,7 @@
#include <plat/time.h>
#include <linux/platform_data/dma-mv_xor.h>
#include "common.h"
#include "pm.h"
/* These can go away once Kirkwood uses the mvebu-mbus DT binding */
#define KIRKWOOD_MBUS_NAND_TARGET 0x01
...
...
arch/arm/mach-kirkwood/common.h
View file @
0d75ab68
...
...
@@ -58,19 +58,6 @@ void kirkwood_cpufreq_init(void);
void
kirkwood_restart
(
enum
reboot_mode
,
const
char
*
);
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 */
char
*
kirkwood_id
(
void
);
void
kirkwood_l2_init
(
void
);
...
...
arch/arm/mach-kirkwood/include/mach/bridge-regs.h
View file @
0d75ab68
...
...
@@ -14,6 +14,7 @@
#include <mach/kirkwood.h>
#define CPU_CONFIG (BRIDGE_VIRT_BASE + 0x0100)
#define CPU_CONFIG_PHYS (BRIDGE_PHYS_BASE + 0x0100)
#define CPU_CONFIG_ERROR_PROP 0x00000004
#define CPU_CONTROL (BRIDGE_VIRT_BASE + 0x0104)
...
...
@@ -79,5 +80,6 @@
#define CGC_RESERVED (0x6 << 21)
#define MEMORY_PM_CTRL (BRIDGE_VIRT_BASE + 0x118)
#define MEMORY_PM_CTRL_PHYS (BRIDGE_PHYS_BASE + 0x118)
#endif
arch/arm/mach-kirkwood/pm.c
View file @
0d75ab68
...
...
@@ -21,15 +21,16 @@
#include "common.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
);
mem_pm_ctrl
=
readl
(
memory_pm_ctrl
);
/* Set peripherals to low-power mode */
writel_relaxed
(
~
0
,
MEMORY_PM_CTRL
);
writel_relaxed
(
~
0
,
memory_pm_ctrl
);
/* Set DDR in self-refresh */
writel_relaxed
(
0x7
,
ddr_operation_base
);
...
...
@@ -41,7 +42,7 @@ static void kirkwood_low_power(void)
*/
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
)
...
...
@@ -69,5 +70,7 @@ static const struct platform_suspend_ops kirkwood_suspend_ops = {
void
__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
);
}
arch/arm/mach-kirkwood/pm.h
0 → 100644
View file @
0d75ab68
/*
* 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
arch/arm/mach-mv78xx0/common.c
View file @
0d75ab68
...
...
@@ -15,11 +15,11 @@
#include <linux/ata_platform.h>
#include <linux/clk-provider.h>
#include <linux/ethtool.h>
#include <asm/hardware/cache-feroceon-l2.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <mach/mv78xx0.h>
#include <mach/bridge-regs.h>
#include <plat/cache-feroceon-l2.h>
#include <linux/platform_data/usb-ehci-orion.h>
#include <linux/platform_data/mtd-orion_nand.h>
#include <plat/time.h>
...
...
arch/arm/mach-mvebu/Kconfig
View file @
0d75ab68
config ARCH_MVEBU
bool "Marvell Engineering Business Unit (MVEBU) SoCs" if
ARCH_MULTI_V7
bool "Marvell Engineering Business Unit (MVEBU) SoCs" if
(ARCH_MULTI_V7 || ARCH_MULTI_V5)
select ARCH_SUPPORTS_BIG_ENDIAN
select CLKSRC_MMIO
select COMMON_CLK
...
...
@@ -28,7 +28,7 @@ config MACH_MVEBU_V7
select CACHE_L2X0
config MACH_ARMADA_370
bool "Marvell Armada 370 boards"
bool "Marvell Armada 370 boards"
if ARCH_MULTI_V7
select ARMADA_370_CLK
select CPU_PJ4B
select MACH_MVEBU_V7
...
...
@@ -66,7 +66,7 @@ config MACH_ARMADA_38X
on the Marvell Armada 380/385 SoC with device tree.
config MACH_ARMADA_XP
bool "Marvell Armada XP boards"
bool "Marvell Armada XP boards"
if ARCH_MULTI_V7
select ARMADA_XP_CLK
select CPU_PJ4B
select MACH_MVEBU_V7
...
...
@@ -75,6 +75,30 @@ config MACH_ARMADA_XP
Say 'Y' here if you want your kernel to support boards based
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
endif
arch/arm/mach-mvebu/Makefile
View file @
0d75ab68
...
...
@@ -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_SMP)
+=
platsmp.o headsmp.o
obj-$(CONFIG_HOTPLUG_CPU)
+=
hotplug.o
obj-$(CONFIG_MACH_KIRKWOOD)
+=
kirkwood.o kirkwood-pm.o
obj-$(CONFIG_MACH_T5325)
+=
board-t5325.o
arch/arm/mach-mvebu/board-t5325.c
0 → 100644
View file @
0d75ab68
/*
* 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
);
}
arch/arm/mach-mvebu/board.h
0 → 100644
View file @
0d75ab68
/*
* 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
arch/arm/mach-mvebu/kirkwood-pm.c
0 → 100644
View file @
0d75ab68
/*
* 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
;
}
arch/arm/mach-mvebu/kirkwood-pm.h
0 → 100644
View file @
0d75ab68
/*
* 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
arch/arm/mach-mvebu/kirkwood.c
0 → 100644
View file @
0d75ab68
/*
* 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
arch/arm/mach-mvebu/kirkwood.h
0 → 100644
View file @
0d75ab68
/*
* 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)
arch/arm/mach-mvebu/mvebu-soc-id.c
View file @
0d75ab68
...
...
@@ -38,6 +38,7 @@ static bool is_id_valid;
static
const
struct
of_device_id
mvebu_pcie_of_match_table
[]
=
{
{
.
compatible
=
"marvell,armada-xp-pcie"
,
},
{
.
compatible
=
"marvell,armada-370-pcie"
,
},
{
.
compatible
=
"marvell,kirkwood-pcie"
},
{},
};
...
...
arch/arm/mm/Kconfig
View file @
0d75ab68
...
...
@@ -855,7 +855,7 @@ config OUTER_CACHE_SYNC
config CACHE_FEROCEON_L2
bool "Enable the Feroceon L2 cache controller"
depends on ARCH_KIRKWOOD || ARCH_MV78XX0
depends on ARCH_KIRKWOOD || ARCH_MV78XX0
|| ARCH_MVEBU
default y
select OUTER_CACHE
help
...
...
arch/arm/mm/cache-feroceon-l2.c
View file @
0d75ab68
...
...
@@ -13,10 +13,15 @@
*/
#include <linux/init.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/highmem.h>
#include <linux/io.h>
#include <asm/cacheflush.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.
...
...
@@ -350,3 +355,41 @@ void __init feroceon_l2_init(int __l2_wt_override)
printk
(
KERN_INFO
"Feroceon L2: Cache support initialised%s.
\n
"
,
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment